summaryrefslogtreecommitdiff
path: root/networking/libiproute/iprule.c
diff options
context:
space:
mode:
Diffstat (limited to 'networking/libiproute/iprule.c')
-rw-r--r--networking/libiproute/iprule.c24
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 */
188static int iprule_modify(int cmd, int argc, char **argv) 188static 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 */
312int do_iprule(int argc, char **argv) 314int 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 */