diff options
Diffstat (limited to 'networking/libiproute/iprule.c')
-rw-r--r-- | networking/libiproute/iprule.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/networking/libiproute/iprule.c b/networking/libiproute/iprule.c index a62eae1fe..8e2a06f4f 100644 --- a/networking/libiproute/iprule.c +++ b/networking/libiproute/iprule.c | |||
@@ -187,6 +187,15 @@ static int iprule_list(int argc, char **argv) | |||
187 | /* Return value becomes exitcode. It's okay to not return at all */ | 187 | /* Return value becomes exitcode. It's okay to not return at all */ |
188 | static int iprule_modify(int cmd, int argc, char **argv) | 188 | static int iprule_modify(int cmd, int argc, char **argv) |
189 | { | 189 | { |
190 | static const char keywords[] = | ||
191 | "from\0""to\0""preference\0""order\0""priority\0" | ||
192 | "tos\0""fwmark\0""realms\0""table\0""lookup\0""dev\0" | ||
193 | "iif\0""nat\0""map-to\0""type\0""help\0"; | ||
194 | enum { | ||
195 | ARG_from = 1, ARG_to, ARG_preference, ARG_order, ARG_priority, | ||
196 | ARG_tos, ARG_fwmark, ARG_realms, ARG_table, ARG_lookup, ARG_dev, | ||
197 | ARG_iif, ARG_nat, ARG_map_to, ARG_type, ARG_help | ||
198 | }; | ||
190 | bool table_ok = 0; | 199 | bool table_ok = 0; |
191 | struct rtnl_handle rth; | 200 | struct rtnl_handle rth; |
192 | struct { | 201 | struct { |
@@ -194,13 +203,6 @@ static int iprule_modify(int cmd, int argc, char **argv) | |||
194 | struct rtmsg r; | 203 | struct rtmsg r; |
195 | char buf[1024]; | 204 | char buf[1024]; |
196 | } req; | 205 | } req; |
197 | static const char * const keywords[] = | ||
198 | { "from", "to", "preference", "order", "priority", "tos", "fwmark", | ||
199 | "realms", "table", "lookup", "dev", "iif", "nat", "map-to", "type", | ||
200 | "help", NULL}; | ||
201 | enum { ARG_from = 1, ARG_to, ARG_preference, ARG_order, ARG_priority, | ||
202 | ARG_tos, ARG_fwmark, ARG_realms, ARG_table, ARG_lookup, ARG_dev, | ||
203 | ARG_iif, ARG_nat, ARG_map_to, ARG_type, ARG_help }; | ||
204 | smalluint key; | 206 | smalluint key; |
205 | 207 | ||
206 | memset(&req, 0, sizeof(req)); | 208 | memset(&req, 0, sizeof(req)); |
@@ -220,7 +222,7 @@ static int iprule_modify(int cmd, int argc, char **argv) | |||
220 | } | 222 | } |
221 | 223 | ||
222 | while (argc > 0) { | 224 | while (argc > 0) { |
223 | key = index_in_substr_array(keywords, *argv) + 1; | 225 | key = index_in_substrings(keywords, *argv) + 1; |
224 | if (key == 0) /* no match found in keywords array, bail out. */ | 226 | if (key == 0) /* no match found in keywords array, bail out. */ |
225 | bb_error_msg_and_die(bb_msg_invalid_arg, *argv, applet_name); | 227 | bb_error_msg_and_die(bb_msg_invalid_arg, *argv, applet_name); |
226 | if (key == ARG_from) { | 228 | if (key == ARG_from) { |
@@ -311,14 +313,14 @@ static int iprule_modify(int cmd, int argc, char **argv) | |||
311 | /* Return value becomes exitcode. It's okay to not return at all */ | 313 | /* Return value becomes exitcode. It's okay to not return at all */ |
312 | int do_iprule(int argc, char **argv) | 314 | int do_iprule(int argc, char **argv) |
313 | { | 315 | { |
314 | static const char * const ip_rule_commands[] = | 316 | static const char ip_rule_commands[] = |
315 | {"add", "delete", "list", "show", 0}; | 317 | "add\0""delete\0""list\0""show\0"; |
316 | int cmd = 2; /* list */ | 318 | int cmd = 2; /* list */ |
317 | 319 | ||
318 | if (argc < 1) | 320 | if (argc < 1) |
319 | return iprule_list(0, NULL); | 321 | return iprule_list(0, NULL); |
320 | if (*argv) | 322 | if (*argv) |
321 | cmd = index_in_substr_array(ip_rule_commands, *argv); | 323 | cmd = index_in_substrings(ip_rule_commands, *argv); |
322 | 324 | ||
323 | switch (cmd) { | 325 | switch (cmd) { |
324 | case 0: /* add */ | 326 | case 0: /* add */ |