Make mapping support a definable feature, saves 1.6kB

This commit is contained in:
Glenn L McGrath 2002-11-10 13:17:08 +00:00
parent 8ae75013c8
commit 49a28b3b5e
2 changed files with 40 additions and 31 deletions

View File

@ -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

View File

@ -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) {