aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2017-04-07 17:33:26 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2017-04-07 17:33:26 +0200
commiteb76abb4f7093f05770f0d0fa2c69a54c5542d4e (patch)
tree410e1648bd6c136389dd49e651d8182c454d9526
parent826bdcd51c0c5aa47b88228fbc8d91af279feb2e (diff)
downloadbusybox-w32-eb76abb4f7093f05770f0d0fa2c69a54c5542d4e.tar.gz
busybox-w32-eb76abb4f7093f05770f0d0fa2c69a54c5542d4e.tar.bz2
busybox-w32-eb76abb4f7093f05770f0d0fa2c69a54c5542d4e.zip
iproute: add "a" command as a synonym to "add"
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--networking/libiproute/iproute.c61
1 files changed, 37 insertions, 24 deletions
diff --git a/networking/libiproute/iproute.c b/networking/libiproute/iproute.c
index fa616f8fc..cc3443a92 100644
--- a/networking/libiproute/iproute.c
+++ b/networking/libiproute/iproute.c
@@ -336,6 +336,12 @@ static int iproute_modify(int cmd, unsigned flags, char **argv)
336 "mtu\0""advmss\0" 336 "mtu\0""advmss\0"
337 "scope\0""protocol\0"IF_FEATURE_IP_RULE("table\0") 337 "scope\0""protocol\0"IF_FEATURE_IP_RULE("table\0")
338 "dev\0""oif\0""to\0""metric\0""onlink\0"; 338 "dev\0""oif\0""to\0""metric\0""onlink\0";
339#define keyword_via (keywords + sizeof("src"))
340#define keyword_mtu (keyword_via + sizeof("via"))
341#define keyword_advmss (keyword_mtu + sizeof("mtu"))
342#define keyword_scope (keyword_advmss + sizeof("advmss"))
343#define keyword_proto (keyword_scope + sizeof("scope"))
344#define keyword_table (keyword_proto + sizeof("protocol"))
339 enum { 345 enum {
340 ARG_src, 346 ARG_src,
341 ARG_via, 347 ARG_via,
@@ -417,7 +423,7 @@ IF_FEATURE_IP_RULE(ARG_table,)
417 mxlock |= (1 << RTAX_MTU); 423 mxlock |= (1 << RTAX_MTU);
418 NEXT_ARG(); 424 NEXT_ARG();
419 } 425 }
420 mtu = get_unsigned(*argv, "mtu"); 426 mtu = get_unsigned(*argv, keyword_mtu);
421 rta_addattr32(mxrta, sizeof(mxbuf), RTAX_MTU, mtu); 427 rta_addattr32(mxrta, sizeof(mxbuf), RTAX_MTU, mtu);
422 } else if (arg == ARG_advmss) { 428 } else if (arg == ARG_advmss) {
423 unsigned mss; 429 unsigned mss;
@@ -426,20 +432,20 @@ IF_FEATURE_IP_RULE(ARG_table,)
426 mxlock |= (1 << RTAX_ADVMSS); 432 mxlock |= (1 << RTAX_ADVMSS);
427 NEXT_ARG(); 433 NEXT_ARG();
428 } 434 }
429 mss = get_unsigned(*argv, "advmss"); 435 mss = get_unsigned(*argv, keyword_advmss);
430 rta_addattr32(mxrta, sizeof(mxbuf), RTAX_ADVMSS, mss); 436 rta_addattr32(mxrta, sizeof(mxbuf), RTAX_ADVMSS, mss);
431 } else if (arg == ARG_scope) { 437 } else if (arg == ARG_scope) {
432 uint32_t scope; 438 uint32_t scope;
433 NEXT_ARG(); 439 NEXT_ARG();
434 if (rtnl_rtscope_a2n(&scope, *argv)) 440 if (rtnl_rtscope_a2n(&scope, *argv))
435 invarg_1_to_2(*argv, "scope"); 441 invarg_1_to_2(*argv, keyword_scope);
436 req.r.rtm_scope = scope; 442 req.r.rtm_scope = scope;
437 scope_ok = 1; 443 scope_ok = 1;
438 } else if (arg == ARG_protocol) { 444 } else if (arg == ARG_protocol) {
439 uint32_t prot; 445 uint32_t prot;
440 NEXT_ARG(); 446 NEXT_ARG();
441 if (rtnl_rtprot_a2n(&prot, *argv)) 447 if (rtnl_rtprot_a2n(&prot, *argv))
442 invarg_1_to_2(*argv, "protocol"); 448 invarg_1_to_2(*argv, keyword_proto);
443 req.r.rtm_protocol = prot; 449 req.r.rtm_protocol = prot;
444 ok |= proto_ok; 450 ok |= proto_ok;
445#if ENABLE_FEATURE_IP_RULE 451#if ENABLE_FEATURE_IP_RULE
@@ -447,7 +453,7 @@ IF_FEATURE_IP_RULE(ARG_table,)
447 uint32_t tid; 453 uint32_t tid;
448 NEXT_ARG(); 454 NEXT_ARG();
449 if (rtnl_rttable_a2n(&tid, *argv)) 455 if (rtnl_rttable_a2n(&tid, *argv))
450 invarg_1_to_2(*argv, "table"); 456 invarg_1_to_2(*argv, keyword_table);
451 if (tid < 256) 457 if (tid < 256)
452 req.r.rtm_table = tid; 458 req.r.rtm_table = tid;
453 else { 459 else {
@@ -1083,9 +1089,15 @@ static int iproute_get(char **argv)
1083int FAST_FUNC do_iproute(char **argv) 1089int FAST_FUNC do_iproute(char **argv)
1084{ 1090{
1085 static const char ip_route_commands[] ALIGN1 = 1091 static const char ip_route_commands[] ALIGN1 =
1086 /*0-3*/ "add\0""append\0""change\0""chg\0" 1092 "a\0""add\0""append\0""change\0""chg\0"
1087 /*4-7*/ "delete\0""get\0""list\0""show\0" 1093 "delete\0""get\0""list\0""show\0"
1088 /*8..*/ "prepend\0""replace\0""test\0""flush\0"; 1094 "prepend\0""replace\0""test\0""flush\0"
1095 ;
1096 enum {
1097 CMD_a = 0, CMD_add, CMD_append, CMD_change, CMD_chg,
1098 CMD_delete, CMD_get, CMD_list, CMD_show,
1099 CMD_prepend, CMD_replace, CMD_test, CMD_flush,
1100 };
1089 int command_num; 1101 int command_num;
1090 unsigned flags = 0; 1102 unsigned flags = 0;
1091 int cmd = RTM_NEWROUTE; 1103 int cmd = RTM_NEWROUTE;
@@ -1100,38 +1112,39 @@ int FAST_FUNC do_iproute(char **argv)
1100 command_num = index_in_substrings(ip_route_commands, *argv); 1112 command_num = index_in_substrings(ip_route_commands, *argv);
1101 1113
1102 switch (command_num) { 1114 switch (command_num) {
1103 case 0: /* add */ 1115 case CMD_a:
1116 case CMD_add:
1104 flags = NLM_F_CREATE|NLM_F_EXCL; 1117 flags = NLM_F_CREATE|NLM_F_EXCL;
1105 break; 1118 break;
1106 case 1: /* append */ 1119 case CMD_append:
1107 flags = NLM_F_CREATE|NLM_F_APPEND; 1120 flags = NLM_F_CREATE|NLM_F_APPEND;
1108 break; 1121 break;
1109 case 2: /* change */ 1122 case CMD_change:
1110 case 3: /* chg */ 1123 case CMD_chg:
1111 flags = NLM_F_REPLACE; 1124 flags = NLM_F_REPLACE;
1112 break; 1125 break;
1113 case 4: /* delete */ 1126 case CMD_delete:
1114 cmd = RTM_DELROUTE; 1127 cmd = RTM_DELROUTE;
1115 break; 1128 break;
1116 case 5: /* get */ 1129 case CMD_get:
1117 return iproute_get(argv+1); 1130 return iproute_get(argv + 1);
1118 case 6: /* list */ 1131 case CMD_list:
1119 case 7: /* show */ 1132 case CMD_show:
1120 return iproute_list_or_flush(argv+1, 0); 1133 return iproute_list_or_flush(argv + 1, 0);
1121 case 8: /* prepend */ 1134 case CMD_prepend:
1122 flags = NLM_F_CREATE; 1135 flags = NLM_F_CREATE;
1123 break; 1136 break;
1124 case 9: /* replace */ 1137 case CMD_replace:
1125 flags = NLM_F_CREATE|NLM_F_REPLACE; 1138 flags = NLM_F_CREATE|NLM_F_REPLACE;
1126 break; 1139 break;
1127 case 10: /* test */ 1140 case CMD_test:
1128 flags = NLM_F_EXCL; 1141 flags = NLM_F_EXCL;
1129 break; 1142 break;
1130 case 11: /* flush */ 1143 case CMD_flush:
1131 return iproute_list_or_flush(argv+1, 1); 1144 return iproute_list_or_flush(argv + 1, 1);
1132 default: 1145 default:
1133 invarg_1_to_2(*argv, applet_name); 1146 invarg_1_to_2(*argv, applet_name);
1134 } 1147 }
1135 1148
1136 return iproute_modify(cmd, flags, argv+1); 1149 return iproute_modify(cmd, flags, argv + 1);
1137} 1150}