iproute: add "a" command as a synonym to "add"

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2017-04-07 17:33:26 +02:00
parent 826bdcd51c
commit eb76abb4f7

View File

@ -336,6 +336,12 @@ static int iproute_modify(int cmd, unsigned flags, char **argv)
"mtu\0""advmss\0"
"scope\0""protocol\0"IF_FEATURE_IP_RULE("table\0")
"dev\0""oif\0""to\0""metric\0""onlink\0";
#define keyword_via (keywords + sizeof("src"))
#define keyword_mtu (keyword_via + sizeof("via"))
#define keyword_advmss (keyword_mtu + sizeof("mtu"))
#define keyword_scope (keyword_advmss + sizeof("advmss"))
#define keyword_proto (keyword_scope + sizeof("scope"))
#define keyword_table (keyword_proto + sizeof("protocol"))
enum {
ARG_src,
ARG_via,
@ -417,7 +423,7 @@ IF_FEATURE_IP_RULE(ARG_table,)
mxlock |= (1 << RTAX_MTU);
NEXT_ARG();
}
mtu = get_unsigned(*argv, "mtu");
mtu = get_unsigned(*argv, keyword_mtu);
rta_addattr32(mxrta, sizeof(mxbuf), RTAX_MTU, mtu);
} else if (arg == ARG_advmss) {
unsigned mss;
@ -426,20 +432,20 @@ IF_FEATURE_IP_RULE(ARG_table,)
mxlock |= (1 << RTAX_ADVMSS);
NEXT_ARG();
}
mss = get_unsigned(*argv, "advmss");
mss = get_unsigned(*argv, keyword_advmss);
rta_addattr32(mxrta, sizeof(mxbuf), RTAX_ADVMSS, mss);
} else if (arg == ARG_scope) {
uint32_t scope;
NEXT_ARG();
if (rtnl_rtscope_a2n(&scope, *argv))
invarg_1_to_2(*argv, "scope");
invarg_1_to_2(*argv, keyword_scope);
req.r.rtm_scope = scope;
scope_ok = 1;
} else if (arg == ARG_protocol) {
uint32_t prot;
NEXT_ARG();
if (rtnl_rtprot_a2n(&prot, *argv))
invarg_1_to_2(*argv, "protocol");
invarg_1_to_2(*argv, keyword_proto);
req.r.rtm_protocol = prot;
ok |= proto_ok;
#if ENABLE_FEATURE_IP_RULE
@ -447,7 +453,7 @@ IF_FEATURE_IP_RULE(ARG_table,)
uint32_t tid;
NEXT_ARG();
if (rtnl_rttable_a2n(&tid, *argv))
invarg_1_to_2(*argv, "table");
invarg_1_to_2(*argv, keyword_table);
if (tid < 256)
req.r.rtm_table = tid;
else {
@ -1083,9 +1089,15 @@ static int iproute_get(char **argv)
int FAST_FUNC do_iproute(char **argv)
{
static const char ip_route_commands[] ALIGN1 =
/*0-3*/ "add\0""append\0""change\0""chg\0"
/*4-7*/ "delete\0""get\0""list\0""show\0"
/*8..*/ "prepend\0""replace\0""test\0""flush\0";
"a\0""add\0""append\0""change\0""chg\0"
"delete\0""get\0""list\0""show\0"
"prepend\0""replace\0""test\0""flush\0"
;
enum {
CMD_a = 0, CMD_add, CMD_append, CMD_change, CMD_chg,
CMD_delete, CMD_get, CMD_list, CMD_show,
CMD_prepend, CMD_replace, CMD_test, CMD_flush,
};
int command_num;
unsigned flags = 0;
int cmd = RTM_NEWROUTE;
@ -1100,38 +1112,39 @@ int FAST_FUNC do_iproute(char **argv)
command_num = index_in_substrings(ip_route_commands, *argv);
switch (command_num) {
case 0: /* add */
case CMD_a:
case CMD_add:
flags = NLM_F_CREATE|NLM_F_EXCL;
break;
case 1: /* append */
case CMD_append:
flags = NLM_F_CREATE|NLM_F_APPEND;
break;
case 2: /* change */
case 3: /* chg */
case CMD_change:
case CMD_chg:
flags = NLM_F_REPLACE;
break;
case 4: /* delete */
case CMD_delete:
cmd = RTM_DELROUTE;
break;
case 5: /* get */
return iproute_get(argv+1);
case 6: /* list */
case 7: /* show */
return iproute_list_or_flush(argv+1, 0);
case 8: /* prepend */
case CMD_get:
return iproute_get(argv + 1);
case CMD_list:
case CMD_show:
return iproute_list_or_flush(argv + 1, 0);
case CMD_prepend:
flags = NLM_F_CREATE;
break;
case 9: /* replace */
case CMD_replace:
flags = NLM_F_CREATE|NLM_F_REPLACE;
break;
case 10: /* test */
case CMD_test:
flags = NLM_F_EXCL;
break;
case 11: /* flush */
return iproute_list_or_flush(argv+1, 1);
case CMD_flush:
return iproute_list_or_flush(argv + 1, 1);
default:
invarg_1_to_2(*argv, applet_name);
}
return iproute_modify(cmd, flags, argv+1);
return iproute_modify(cmd, flags, argv + 1);
}