diff options
| author | Denys Vlasenko <vda.linux@googlemail.com> | 2012-08-10 00:36:07 +0200 |
|---|---|---|
| committer | Denys Vlasenko <vda.linux@googlemail.com> | 2012-08-10 00:36:07 +0200 |
| commit | 83785f0ebcad58157bb7d866037664ab95563f48 (patch) | |
| tree | 2638387178471d00ef96af990f7d34a395909598 /networking/ifupdown.c | |
| parent | aa4e5092f58f5a11018e569aee9cf037daf8c5d6 (diff) | |
| download | busybox-w32-1_20_2.tar.gz busybox-w32-1_20_2.tar.bz2 busybox-w32-1_20_2.zip | |
Apply post-1.20.1 patches, bump version to 1.20.21_20_2
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'networking/ifupdown.c')
| -rw-r--r-- | networking/ifupdown.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/networking/ifupdown.c b/networking/ifupdown.c index dfda20670..9b3498696 100644 --- a/networking/ifupdown.c +++ b/networking/ifupdown.c | |||
| @@ -140,8 +140,6 @@ static const char keywords_up_down[] ALIGN1 = | |||
| 140 | "up\0" | 140 | "up\0" |
| 141 | "down\0" | 141 | "down\0" |
| 142 | "pre-up\0" | 142 | "pre-up\0" |
| 143 | "pre-down\0" | ||
| 144 | "post-up\0" | ||
| 145 | "post-down\0" | 143 | "post-down\0" |
| 146 | ; | 144 | ; |
| 147 | 145 | ||
| @@ -895,6 +893,11 @@ static struct interfaces_file_t *read_interfaces(const char *filename) | |||
| 895 | if (rest_of_line[0] == '\0') | 893 | if (rest_of_line[0] == '\0') |
| 896 | bb_error_msg_and_die("option with empty value \"%s\"", buf); | 894 | bb_error_msg_and_die("option with empty value \"%s\"", buf); |
| 897 | 895 | ||
| 896 | if (strcmp(first_word, "post-up") == 0) | ||
| 897 | first_word += 5; /* "up" */ | ||
| 898 | else if (strcmp(first_word, "pre-down") == 0) | ||
| 899 | first_word += 4; /* "down" */ | ||
| 900 | |||
| 898 | /* If not one of "up", "down",... words... */ | 901 | /* If not one of "up", "down",... words... */ |
| 899 | if (index_in_strings(keywords_up_down, first_word) < 0) { | 902 | if (index_in_strings(keywords_up_down, first_word) < 0) { |
| 900 | int i; | 903 | int i; |
| @@ -963,7 +966,7 @@ static char *setlocalenv(const char *format, const char *name, const char *value | |||
| 963 | return result; | 966 | return result; |
| 964 | } | 967 | } |
| 965 | 968 | ||
| 966 | static void set_environ(struct interface_defn_t *iface, const char *mode) | 969 | static void set_environ(struct interface_defn_t *iface, const char *mode, const char *opt) |
| 967 | { | 970 | { |
| 968 | int i; | 971 | int i; |
| 969 | char **pp; | 972 | char **pp; |
| @@ -976,7 +979,7 @@ static void set_environ(struct interface_defn_t *iface, const char *mode) | |||
| 976 | } | 979 | } |
| 977 | 980 | ||
| 978 | /* note: last element will stay NULL: */ | 981 | /* note: last element will stay NULL: */ |
| 979 | G.my_environ = xzalloc(sizeof(char *) * (iface->n_options + 6)); | 982 | G.my_environ = xzalloc(sizeof(char *) * (iface->n_options + 7)); |
| 980 | pp = G.my_environ; | 983 | pp = G.my_environ; |
| 981 | 984 | ||
| 982 | for (i = 0; i < iface->n_options; i++) { | 985 | for (i = 0; i < iface->n_options; i++) { |
| @@ -990,6 +993,7 @@ static void set_environ(struct interface_defn_t *iface, const char *mode) | |||
| 990 | *pp++ = setlocalenv("%s=%s", "ADDRFAM", iface->address_family->name); | 993 | *pp++ = setlocalenv("%s=%s", "ADDRFAM", iface->address_family->name); |
| 991 | *pp++ = setlocalenv("%s=%s", "METHOD", iface->method->name); | 994 | *pp++ = setlocalenv("%s=%s", "METHOD", iface->method->name); |
| 992 | *pp++ = setlocalenv("%s=%s", "MODE", mode); | 995 | *pp++ = setlocalenv("%s=%s", "MODE", mode); |
| 996 | *pp++ = setlocalenv("%s=%s", "PHASE", opt); | ||
| 993 | if (G.startup_PATH) | 997 | if (G.startup_PATH) |
| 994 | *pp++ = setlocalenv("%s=%s", "PATH", G.startup_PATH); | 998 | *pp++ = setlocalenv("%s=%s", "PATH", G.startup_PATH); |
| 995 | } | 999 | } |
| @@ -1044,21 +1048,21 @@ static int check(char *str) | |||
| 1044 | static int iface_up(struct interface_defn_t *iface) | 1048 | static int iface_up(struct interface_defn_t *iface) |
| 1045 | { | 1049 | { |
| 1046 | if (!iface->method->up(iface, check)) return -1; | 1050 | if (!iface->method->up(iface, check)) return -1; |
| 1047 | set_environ(iface, "start"); | 1051 | set_environ(iface, "start", "pre-up"); |
| 1048 | if (!execute_all(iface, "pre-up")) return 0; | 1052 | if (!execute_all(iface, "pre-up")) return 0; |
| 1049 | if (!iface->method->up(iface, doit)) return 0; | 1053 | if (!iface->method->up(iface, doit)) return 0; |
| 1054 | set_environ(iface, "start", "post-up"); | ||
| 1050 | if (!execute_all(iface, "up")) return 0; | 1055 | if (!execute_all(iface, "up")) return 0; |
| 1051 | if (!execute_all(iface, "post-up")) return 0; | ||
| 1052 | return 1; | 1056 | return 1; |
| 1053 | } | 1057 | } |
| 1054 | 1058 | ||
| 1055 | static int iface_down(struct interface_defn_t *iface) | 1059 | static int iface_down(struct interface_defn_t *iface) |
| 1056 | { | 1060 | { |
| 1057 | if (!iface->method->down(iface,check)) return -1; | 1061 | if (!iface->method->down(iface,check)) return -1; |
| 1058 | set_environ(iface, "stop"); | 1062 | set_environ(iface, "stop", "pre-down"); |
| 1059 | if (!execute_all(iface, "pre-down")) return 0; | ||
| 1060 | if (!execute_all(iface, "down")) return 0; | 1063 | if (!execute_all(iface, "down")) return 0; |
| 1061 | if (!iface->method->down(iface, doit)) return 0; | 1064 | if (!iface->method->down(iface, doit)) return 0; |
| 1065 | set_environ(iface, "stop", "post-down"); | ||
| 1062 | if (!execute_all(iface, "post-down")) return 0; | 1066 | if (!execute_all(iface, "post-down")) return 0; |
| 1063 | return 1; | 1067 | return 1; |
| 1064 | } | 1068 | } |
