From: Jiri Pirko Date: Thu, 24 Oct 2019 10:20:52 +0000 (+0200) Subject: ip: allow to use alternative names as handle X-Git-Tag: v5.5.0~64^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=afd67550c2c4efd428e445f5605785263bd0602d;p=thirdparty%2Fiproute2.git ip: allow to use alternative names as handle Extend ll_name_to_index() to get the index of a netdevice using alternative interface name. Allow alternative long names to pass checks in couple of ip link/addr commands. Signed-off-by: Jiri Pirko Signed-off-by: David Ahern --- diff --git a/ip/iplink.c b/ip/iplink.c index bf90fad1b..47f73988c 100644 --- a/ip/iplink.c +++ b/ip/iplink.c @@ -931,7 +931,7 @@ int iplink_parse(int argc, char **argv, struct iplink_req *req, char **type) NEXT_ARG(); if (dev != name) duparg2("dev", *argv); - if (check_ifname(*argv)) + if (check_altifname(*argv)) invarg("\"dev\" not a valid ifname", *argv); dev = *argv; } @@ -1106,7 +1106,8 @@ int iplink_get(char *name, __u32 filt_mask) if (name) { addattr_l(&req.n, sizeof(req), - IFLA_IFNAME, name, strlen(name) + 1); + !check_ifname(name) ? IFLA_IFNAME : IFLA_ALT_IFNAME, + name, strlen(name) + 1); } addattr32(&req.n, sizeof(req), IFLA_EXT_MASK, filt_mask); diff --git a/lib/ll_map.c b/lib/ll_map.c index 9ec73d166..70ea3d499 100644 --- a/lib/ll_map.c +++ b/lib/ll_map.c @@ -72,7 +72,7 @@ static struct ll_cache *ll_get_by_name(const char *name) struct ll_cache *im = container_of(n, struct ll_cache, name_hash); - if (strncmp(im->name, name, IFNAMSIZ) == 0) + if (strcmp(im->name, name) == 0) return im; } @@ -288,8 +288,9 @@ static int ll_link_get(const char *name, int index) addattr32(&req.n, sizeof(req), IFLA_EXT_MASK, filt_mask); if (name) - addattr_l(&req.n, sizeof(req), IFLA_IFNAME, name, - strlen(name) + 1); + addattr_l(&req.n, sizeof(req), + !check_ifname(name) ? IFLA_IFNAME : IFLA_ALT_IFNAME, + name, strlen(name) + 1); if (rtnl_talk_suppress_rtnl_errmsg(&rth, &req.n, &answer) < 0) goto out;