diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2017-04-07 17:33:26 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2017-04-07 17:33:26 +0200 |
commit | eb76abb4f7093f05770f0d0fa2c69a54c5542d4e (patch) | |
tree | 410e1648bd6c136389dd49e651d8182c454d9526 | |
parent | 826bdcd51c0c5aa47b88228fbc8d91af279feb2e (diff) | |
download | busybox-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.c | 61 |
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) | |||
1083 | int FAST_FUNC do_iproute(char **argv) | 1089 | int 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 | } |