[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <ad655086-3f95-3897-c93b-bf15a52c2903@gmail.com>
Date: Mon, 7 Oct 2019 15:52:46 -0600
From: David Ahern <dsahern@...il.com>
To: Jiri Pirko <jiri@...nulli.us>, netdev@...r.kernel.org
Cc: davem@...emloft.net, jakub.kicinski@...ronome.com,
roopa@...ulusnetworks.com, dcbw@...hat.com,
nikolay@...ulusnetworks.com, mkubecek@...e.cz, andrew@...n.ch,
parav@...lanox.com, saeedm@...lanox.com, f.fainelli@...il.com,
stephen@...workplumber.org, sd@...asysnail.net, sbrivio@...hat.com,
pabeni@...hat.com, mlxsw@...lanox.com
Subject: Re: [patch iproute2-next v2 2/2] ip: allow to use alternative names
as handle
On 10/2/19 4:56 AM, Jiri Pirko wrote:
> @@ -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,
If this trick works here ...
> + 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 e0ed54bf77c9..04dfb0f2320b 100644
> --- a/lib/ll_map.c
> +++ b/lib/ll_map.c
> @@ -70,7 +70,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;
> }
>
> @@ -240,6 +240,43 @@ int ll_index_to_flags(unsigned idx)
> return im ? im->flags : -1;
> }
>
> +static int altnametoindex(const char *name)
> +{
> + struct {
> + struct nlmsghdr n;
> + struct ifinfomsg ifm;
> + char buf[1024];
> + } req = {
> + .n.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifinfomsg)),
> + .n.nlmsg_flags = NLM_F_REQUEST,
> + .n.nlmsg_type = RTM_GETLINK,
> + };
> + struct rtnl_handle rth = {};
> + struct nlmsghdr *answer;
> + struct ifinfomsg *ifm;
> + int rc = 0;
> +
> + if (rtnl_open(&rth, 0) < 0)
> + return 0;
> +
> + addattr32(&req.n, sizeof(req), IFLA_EXT_MASK,
> + RTEXT_FILTER_VF | RTEXT_FILTER_SKIP_STATS);
> + addattr_l(&req.n, sizeof(req), IFLA_ALT_IFNAME, name, strlen(name) + 1);
then why is altnametoindex even needed? why not just use the same check
in the current ll_link_get?
> +
> + if (rtnl_talk_suppress_rtnl_errmsg(&rth, &req.n, &answer) < 0)
> + goto out;
> +
> + ifm = NLMSG_DATA(answer);
> + rc = ifm->ifi_index;
> +
> + free(answer);
> +
> + rtnl_close(&rth);
> +out:
> + return rc;
> +}
> +
> +
> unsigned ll_name_to_index(const char *name)
> {
> const struct ll_cache *im;
> @@ -257,6 +294,8 @@ unsigned ll_name_to_index(const char *name)
> idx = if_nametoindex(name);
> if (idx == 0)
> idx = ll_idx_a2n(name);
> + if (idx == 0)
> + idx = altnametoindex(name);
And then this ordering does not need to be fixed (altname check should
come before if_nametoindex.
> return idx;
> }
>
>
Powered by blists - more mailing lists