From: Jiri Pirko <j...@mellanox.com> 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 <j...@mellanox.com> --- v3->v4: - moved utils.h include into the first patch v2->v3: - removed altnametoindex and doing IFLA_IFNAME/IFLA_ALT_IFNAME in ll_link_get() instead. rfc->v1: - added patch description --- ip/iplink.c | 5 +++-- lib/ll_map.c | 7 ++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/ip/iplink.c b/ip/iplink.c index bf90fad1b3ea..47f73988c2d5 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 1b382b5cec94..52d149dcd91b 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; } @@ -287,8 +287,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; -- 2.21.0