[PATCH RFC iproute2-next] iplink: allow to change iplink value
From: Marek Behún <hidden>
Date: 2019-08-24 02:43:08
Subsystem:
the rest · Maintainer:
Linus Torvalds
Allow to change the interface to which a given interface is linked to. This is useful in the case of multi-CPU port DSA, for changing the CPU port of a given user port. Signed-off-by: Marek Behún <redacted> Cc: David Ahern <redacted> Cc: Stephen Hemminger <stephen@networkplumber.org> --- ip/iplink.c | 16 +++++----------- man/man8/ip-link.8.in | 7 +++++++ 2 files changed, 12 insertions(+), 11 deletions(-)
diff --git a/ip/iplink.c b/ip/iplink.c
index 212a0885..d52c0aaf 100644
--- a/ip/iplink.c
+++ b/ip/iplink.c@@ -579,7 +579,6 @@ int iplink_parse(int argc, char **argv, struct iplink_req *req, char **type) { char *name = NULL; char *dev = NULL; - char *link = NULL; int ret, len; char abuf[32]; int qlen = -1;
@@ -590,6 +589,7 @@ int iplink_parse(int argc, char **argv, struct iplink_req *req, char **type) int numrxqueues = -1; int link_netnsid = -1; int index = 0; + int link = -1; int group = -1; int addr_len = 0;
@@ -620,7 +620,10 @@ int iplink_parse(int argc, char **argv, struct iplink_req *req, char **type) invarg("Invalid \"index\" value", *argv); } else if (matches(*argv, "link") == 0) { NEXT_ARG(); - link = *argv; + link = ll_name_to_index(*argv); + if (!link) + return nodev(*argv); + addattr32(&req->n, sizeof(*req), IFLA_LINK, link); } else if (matches(*argv, "address") == 0) { NEXT_ARG(); addr_len = ll_addr_a2n(abuf, sizeof(abuf), *argv);
@@ -1004,15 +1007,6 @@ int iplink_parse(int argc, char **argv, struct iplink_req *req, char **type) exit(-1); } - if (link) { - int ifindex; - - ifindex = ll_name_to_index(link); - if (!ifindex) - return nodev(link); - addattr32(&req->n, sizeof(*req), IFLA_LINK, ifindex); - } - req->i.ifi_index = index; }
diff --git a/man/man8/ip-link.8.in b/man/man8/ip-link.8.in
index a8ae72d2..800aed05 100644
--- a/man/man8/ip-link.8.in
+++ b/man/man8/ip-link.8.in@@ -149,6 +149,9 @@ ip-link \- network device configuration .br .RB "[ " nomaster " ]" .br +.RB "[ " link +.IR DEVICE " ]" +.br .RB "[ " vrf .IR NAME " ]" .br
@@ -2131,6 +2134,10 @@ set master device of the device (enslave device). .BI nomaster unset master device of the device (release device). +.TP +.BI link " DEVICE" +set device to which this device is linked to. + .TP .BI addrgenmode " eui64|none|stable_secret|random" set the IPv6 address generation mode
--
2.21.0