Make mapping support a definable feature, saves 1.6kB
This commit is contained in:
parent
8ae75013c8
commit
49a28b3b5e
@ -21,6 +21,7 @@ if [ "$CONFIG_IFUPDOWN" = "y" ]; then
|
|||||||
bool ' Enable support for IPv4' CONFIG_FEATURE_IFUPDOWN_IPV4
|
bool ' Enable support for IPv4' CONFIG_FEATURE_IFUPDOWN_IPV4
|
||||||
bool ' Enable support for IPv6 (requires ip command)' CONFIG_FEATURE_IFUPDOWN_IPV6
|
bool ' Enable support for IPv6 (requires ip command)' CONFIG_FEATURE_IFUPDOWN_IPV6
|
||||||
bool ' Enable support for IPX (requires ipx_interface command)' CONFIG_FEATURE_IFUPDOWN_IPX
|
bool ' Enable support for IPX (requires ipx_interface command)' CONFIG_FEATURE_IFUPDOWN_IPX
|
||||||
|
bool ' Mapping support' CONFIG_FEATURE_IFUPDOWN_MAPPING
|
||||||
fi
|
fi
|
||||||
bool 'ip' CONFIG_IP
|
bool 'ip' CONFIG_IP
|
||||||
if [ "$CONFIG_IP" = "y" ]; then
|
if [ "$CONFIG_IP" = "y" ]; then
|
||||||
|
@ -57,6 +57,7 @@ typedef struct address_family {
|
|||||||
method *method;
|
method *method;
|
||||||
} address_family;
|
} address_family;
|
||||||
|
|
||||||
|
#ifdef CONFIG_FEATURE_IFUPDOWN_MAPPING
|
||||||
typedef struct mapping_defn {
|
typedef struct mapping_defn {
|
||||||
struct mapping_defn *next;
|
struct mapping_defn *next;
|
||||||
|
|
||||||
@ -70,6 +71,7 @@ typedef struct mapping_defn {
|
|||||||
int n_mappings;
|
int n_mappings;
|
||||||
char **mapping;
|
char **mapping;
|
||||||
} mapping_defn;
|
} mapping_defn;
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef struct variable {
|
typedef struct variable {
|
||||||
char *name;
|
char *name;
|
||||||
@ -96,7 +98,9 @@ typedef struct interfaces_file {
|
|||||||
char **autointerfaces;
|
char **autointerfaces;
|
||||||
|
|
||||||
interface_defn *ifaces;
|
interface_defn *ifaces;
|
||||||
|
#ifdef CONFIG_FEATURE_IFUPDOWN_MAPPING
|
||||||
mapping_defn *mappings;
|
mapping_defn *mappings;
|
||||||
|
#endif
|
||||||
} interfaces_file;
|
} interfaces_file;
|
||||||
|
|
||||||
#define MAX_OPT_DEPTH 10
|
#define MAX_OPT_DEPTH 10
|
||||||
@ -109,17 +113,6 @@ static int no_act = 0;
|
|||||||
static int verbose = 0;
|
static int verbose = 0;
|
||||||
static char **environ = NULL;
|
static char **environ = NULL;
|
||||||
|
|
||||||
static int execable(char *program)
|
|
||||||
{
|
|
||||||
struct stat buf;
|
|
||||||
if (0 == stat(program, &buf)) {
|
|
||||||
if (S_ISREG(buf.st_mode) && (S_IXUSR & buf.st_mode)) {
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void addstr(char **buf, size_t *len, size_t *pos, char *str, size_t str_length)
|
static void addstr(char **buf, size_t *len, size_t *pos, char *str, size_t str_length)
|
||||||
{
|
{
|
||||||
if (*pos + str_length >= *len) {
|
if (*pos + str_length >= *len) {
|
||||||
@ -434,6 +427,17 @@ static int static_down(interface_defn *ifd, execfn *exec)
|
|||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int execable(char *program)
|
||||||
|
{
|
||||||
|
struct stat buf;
|
||||||
|
if (0 == stat(program, &buf)) {
|
||||||
|
if (S_ISREG(buf.st_mode) && (S_IXUSR & buf.st_mode)) {
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
static int dhcp_up(interface_defn *ifd, execfn *exec)
|
static int dhcp_up(interface_defn *ifd, execfn *exec)
|
||||||
{
|
{
|
||||||
if (execable("/sbin/dhclient")) {
|
if (execable("/sbin/dhclient")) {
|
||||||
@ -679,7 +683,9 @@ static interfaces_file *read_interfaces(char *filename)
|
|||||||
{
|
{
|
||||||
interface_defn *currif = NULL;
|
interface_defn *currif = NULL;
|
||||||
interfaces_file *defn;
|
interfaces_file *defn;
|
||||||
|
#ifdef CONFIG_FEATURE_IFUPDOWN_MAPPING
|
||||||
mapping_defn *currmap = NULL;
|
mapping_defn *currmap = NULL;
|
||||||
|
#endif
|
||||||
FILE *f;
|
FILE *f;
|
||||||
char firstword[80];
|
char firstword[80];
|
||||||
char *buf = NULL;
|
char *buf = NULL;
|
||||||
@ -692,7 +698,9 @@ static interfaces_file *read_interfaces(char *filename)
|
|||||||
defn = xmalloc(sizeof(interfaces_file));
|
defn = xmalloc(sizeof(interfaces_file));
|
||||||
defn->max_autointerfaces = defn->n_autointerfaces = 0;
|
defn->max_autointerfaces = defn->n_autointerfaces = 0;
|
||||||
defn->autointerfaces = NULL;
|
defn->autointerfaces = NULL;
|
||||||
|
#ifdef CONFIG_FEATURE_IFUPDOWN_MAPPING
|
||||||
defn->mappings = NULL;
|
defn->mappings = NULL;
|
||||||
|
#endif
|
||||||
defn->ifaces = NULL;
|
defn->ifaces = NULL;
|
||||||
f = fopen(filename, "r");
|
f = fopen(filename, "r");
|
||||||
if (f == NULL) {
|
if (f == NULL) {
|
||||||
@ -707,7 +715,7 @@ static interfaces_file *read_interfaces(char *filename)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(firstword, "mapping") == 0) {
|
if (strcmp(firstword, "mapping") == 0) {
|
||||||
|
#if 0
|
||||||
currmap = xmalloc(sizeof(mapping_defn));
|
currmap = xmalloc(sizeof(mapping_defn));
|
||||||
currmap->max_matches = 0;
|
currmap->max_matches = 0;
|
||||||
currmap->n_matches = 0;
|
currmap->n_matches = 0;
|
||||||
@ -734,6 +742,7 @@ static interfaces_file *read_interfaces(char *filename)
|
|||||||
currmap->next = NULL;
|
currmap->next = NULL;
|
||||||
}
|
}
|
||||||
currently_processing = MAPPING;
|
currently_processing = MAPPING;
|
||||||
|
#endif
|
||||||
} else if (strcmp(firstword, "iface") == 0) {
|
} else if (strcmp(firstword, "iface") == 0) {
|
||||||
{
|
{
|
||||||
char iface_name[80];
|
char iface_name[80];
|
||||||
@ -871,6 +880,7 @@ static interfaces_file *read_interfaces(char *filename)
|
|||||||
currif->n_options++;
|
currif->n_options++;
|
||||||
break;
|
break;
|
||||||
case MAPPING:
|
case MAPPING:
|
||||||
|
#ifdef CONFIG_FEATURE_IFUPDOWN_MAPPING
|
||||||
if (strcmp(firstword, "script") == 0) {
|
if (strcmp(firstword, "script") == 0) {
|
||||||
if (currmap->script != NULL) {
|
if (currmap->script != NULL) {
|
||||||
error_msg("%s:%d: duplicate script in mapping", filename, line);
|
error_msg("%s:%d: duplicate script in mapping", filename, line);
|
||||||
@ -889,6 +899,7 @@ static interfaces_file *read_interfaces(char *filename)
|
|||||||
error_msg("%s:%d: misplaced option", filename, line);
|
error_msg("%s:%d: misplaced option", filename, line);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
case NONE:
|
case NONE:
|
||||||
default:
|
default:
|
||||||
@ -1063,6 +1074,7 @@ static int iface_down(interface_defn *iface)
|
|||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_FEATURE_IFUPDOWN_MAPPING
|
||||||
static int popen2(FILE **in, FILE **out, char *command, ...)
|
static int popen2(FILE **in, FILE **out, char *command, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
@ -1144,6 +1156,8 @@ static int run_mapping(char *physical, char *logical, int len, mapping_defn * ma
|
|||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
#endif /* CONFIG_FEATURE_IFUPDOWN_MAPPING */
|
||||||
|
|
||||||
|
|
||||||
static int lookfor_iface(char **ifaces, int n_ifaces, char *iface)
|
static int lookfor_iface(char **ifaces, int n_ifaces, char *iface)
|
||||||
{
|
{
|
||||||
@ -1173,16 +1187,6 @@ static void add_to_state(char ***ifaces, int *n_ifaces, int *max_ifaces, char *n
|
|||||||
extern int ifupdown_main(int argc, char **argv)
|
extern int ifupdown_main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int (*cmds) (interface_defn *) = NULL;
|
int (*cmds) (interface_defn *) = NULL;
|
||||||
struct option long_opts[] = {
|
|
||||||
{"help", no_argument, NULL, 'h'},
|
|
||||||
{"verbose", no_argument, NULL, 'v'},
|
|
||||||
{"all", no_argument, NULL, 'a'},
|
|
||||||
{"interfaces", required_argument, NULL, 'i'},
|
|
||||||
{"no-act", no_argument, NULL, 'n'},
|
|
||||||
{"no-mappings", no_argument, NULL, 1},
|
|
||||||
{"force", no_argument, NULL, 2},
|
|
||||||
{0, 0, 0, 0}
|
|
||||||
};
|
|
||||||
interfaces_file *defn;
|
interfaces_file *defn;
|
||||||
FILE *state_fp = NULL;
|
FILE *state_fp = NULL;
|
||||||
char **target_iface = NULL;
|
char **target_iface = NULL;
|
||||||
@ -1191,7 +1195,9 @@ extern int ifupdown_main(int argc, char **argv)
|
|||||||
char *statefile = "/etc/network/ifstate";
|
char *statefile = "/etc/network/ifstate";
|
||||||
|
|
||||||
int do_all = 0;
|
int do_all = 0;
|
||||||
|
#ifdef CONFIG_FEATURE_IFUPDOWN_MAPPING
|
||||||
int run_mappings = 1;
|
int run_mappings = 1;
|
||||||
|
#endif
|
||||||
int force = 0;
|
int force = 0;
|
||||||
int n_target_ifaces = 0;
|
int n_target_ifaces = 0;
|
||||||
int n_state = 0;
|
int n_state = 0;
|
||||||
@ -1206,24 +1212,26 @@ extern int ifupdown_main(int argc, char **argv)
|
|||||||
cmds = iface_down;
|
cmds = iface_down;
|
||||||
}
|
}
|
||||||
|
|
||||||
while ((i = getopt_long(argc, argv, "i:hvna", long_opts, NULL)) != EOF) {
|
while ((i = getopt(argc, argv, "i:hvnamf")) != -1) {
|
||||||
switch (i) {
|
switch (i) {
|
||||||
case 'i':
|
case 'i': /* interfaces */
|
||||||
interfaces = xstrdup(optarg);
|
interfaces = xstrdup(optarg);
|
||||||
break;
|
break;
|
||||||
case 'v':
|
case 'v': /* verbose */
|
||||||
verbose = 1;
|
verbose = 1;
|
||||||
break;
|
break;
|
||||||
case 'a':
|
case 'a': /* all */
|
||||||
do_all = 1;
|
do_all = 1;
|
||||||
break;
|
break;
|
||||||
case 'n':
|
case 'n': /* no-act */
|
||||||
no_act = 1;
|
no_act = 1;
|
||||||
break;
|
break;
|
||||||
case 1:
|
#ifdef CONFIG_FEATURE_IFUPDOWN_MAPPING
|
||||||
|
case 'm': /* no-mappings */
|
||||||
run_mappings = 0;
|
run_mappings = 0;
|
||||||
break;
|
break;
|
||||||
case 2:
|
#endif
|
||||||
|
case 'f': /* force */
|
||||||
force = 1;
|
force = 1;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -1346,7 +1354,7 @@ extern int ifupdown_main(int argc, char **argv)
|
|||||||
liface[79] = 0;
|
liface[79] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifdef CONFIG_FEATURE_IFUPDOWN_MAPPING
|
||||||
if ((cmds == iface_up) && run_mappings) {
|
if ((cmds == iface_up) && run_mappings) {
|
||||||
mapping_defn *currmap;
|
mapping_defn *currmap;
|
||||||
|
|
||||||
@ -1363,7 +1371,7 @@ extern int ifupdown_main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
for (currif = defn->ifaces; currif; currif = currif->next) {
|
for (currif = defn->ifaces; currif; currif = currif->next) {
|
||||||
if (strcmp(liface, currif->iface) == 0) {
|
if (strcmp(liface, currif->iface) == 0) {
|
||||||
|
Loading…
Reference in New Issue
Block a user