mirror of
https://git.kernel.org/pub/scm/network/iproute2/iproute2.git
synced 2024-11-17 06:53:26 +08:00
iproute: allow changing gretap parameters
Change the order of evaluation of ip link type arguements to allow changing parameters of gre tunnels. The following wouldn't work: # ip li add mytunnel type gretap remote 1.1.1.1 key 3 # ip li set mytunnel type gretap key 9
This commit is contained in:
parent
a6ddc20617
commit
09fa327941
60
ip/iplink.c
60
ip/iplink.c
@ -490,36 +490,6 @@ static int iplink_modify(int cmd, unsigned int flags, int argc, char **argv)
|
||||
|
||||
ll_init_map(&rth);
|
||||
|
||||
if (type) {
|
||||
struct rtattr *linkinfo = NLMSG_TAIL(&req.n);
|
||||
addattr_l(&req.n, sizeof(req), IFLA_LINKINFO, NULL, 0);
|
||||
addattr_l(&req.n, sizeof(req), IFLA_INFO_KIND, type,
|
||||
strlen(type));
|
||||
|
||||
lu = get_link_kind(type);
|
||||
if (lu && argc) {
|
||||
struct rtattr * data = NLMSG_TAIL(&req.n);
|
||||
addattr_l(&req.n, sizeof(req), IFLA_INFO_DATA, NULL, 0);
|
||||
|
||||
if (lu->parse_opt &&
|
||||
lu->parse_opt(lu, argc, argv, &req.n))
|
||||
return -1;
|
||||
|
||||
data->rta_len = (void *)NLMSG_TAIL(&req.n) - (void *)data;
|
||||
} else if (argc) {
|
||||
if (matches(*argv, "help") == 0)
|
||||
usage();
|
||||
fprintf(stderr, "Garbage instead of arguments \"%s ...\". "
|
||||
"Try \"ip link help\".\n", *argv);
|
||||
return -1;
|
||||
}
|
||||
linkinfo->rta_len = (void *)NLMSG_TAIL(&req.n) - (void *)linkinfo;
|
||||
} else if (flags & NLM_F_CREATE) {
|
||||
fprintf(stderr, "Not enough information: \"type\" argument "
|
||||
"is required\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!(flags & NLM_F_CREATE)) {
|
||||
if (!dev) {
|
||||
fprintf(stderr, "Not enough information: \"dev\" "
|
||||
@ -559,6 +529,36 @@ static int iplink_modify(int cmd, unsigned int flags, int argc, char **argv)
|
||||
addattr_l(&req.n, sizeof(req), IFLA_IFNAME, name, len);
|
||||
}
|
||||
|
||||
if (type) {
|
||||
struct rtattr *linkinfo = NLMSG_TAIL(&req.n);
|
||||
addattr_l(&req.n, sizeof(req), IFLA_LINKINFO, NULL, 0);
|
||||
addattr_l(&req.n, sizeof(req), IFLA_INFO_KIND, type,
|
||||
strlen(type));
|
||||
|
||||
lu = get_link_kind(type);
|
||||
if (lu && argc) {
|
||||
struct rtattr * data = NLMSG_TAIL(&req.n);
|
||||
addattr_l(&req.n, sizeof(req), IFLA_INFO_DATA, NULL, 0);
|
||||
|
||||
if (lu->parse_opt &&
|
||||
lu->parse_opt(lu, argc, argv, &req.n))
|
||||
return -1;
|
||||
|
||||
data->rta_len = (void *)NLMSG_TAIL(&req.n) - (void *)data;
|
||||
} else if (argc) {
|
||||
if (matches(*argv, "help") == 0)
|
||||
usage();
|
||||
fprintf(stderr, "Garbage instead of arguments \"%s ...\". "
|
||||
"Try \"ip link help\".\n", *argv);
|
||||
return -1;
|
||||
}
|
||||
linkinfo->rta_len = (void *)NLMSG_TAIL(&req.n) - (void *)linkinfo;
|
||||
} else if (flags & NLM_F_CREATE) {
|
||||
fprintf(stderr, "Not enough information: \"type\" argument "
|
||||
"is required\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (rtnl_talk(&rth, &req.n, 0, 0, NULL) < 0)
|
||||
exit(2);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user