Skip to content

Commit

Permalink
link: support RTEXT_FILTER_VF
Browse files Browse the repository at this point in the history
This patch adds RTEXT_FILTER_VF mask support for SRIOV VFs. Since
SRIOV VFs don't have a defined address family (ie bridge), there
are no new address family specific operations defined.

Exposing this mask makes rtnl_link_get_num_vfs() properly return
the number of loaded SRIOV VFs.

Signed-off-by: Jef Oliver <jef.oliver@intel.com>
Signed-off-by: Thomas Haller <thaller@redhat.com>

http://lists.infradead.org/pipermail/libnl/2016-May/002115.html
http://lists.infradead.org/pipermail/libnl/2016-May/002123.html
  • Loading branch information
jef-oliver-intel authored and thom311 committed Jun 24, 2016
1 parent 3bf503d commit 90c6ebe
Showing 1 changed file with 16 additions and 2 deletions.
18 changes: 16 additions & 2 deletions lib/route/link.c
Expand Up @@ -677,6 +677,7 @@ static int link_request_update(struct nl_cache *cache, struct nl_sock *sk)
struct rtnl_link_af_ops *ops;
struct nl_msg *msg;
int err;
__u32 vf_mask = RTEXT_FILTER_VF;

msg = nlmsg_alloc_simple(RTM_GETLINK, NLM_F_DUMP);
if (!msg)
Expand All @@ -686,12 +687,17 @@ static int link_request_update(struct nl_cache *cache, struct nl_sock *sk)
if (nlmsg_append(msg, &hdr, sizeof(hdr), NLMSG_ALIGNTO) < 0)
goto nla_put_failure;

err = nla_put(msg, IFLA_EXT_MASK, sizeof(vf_mask), &vf_mask);
if (err)
goto nla_put_failure;

ops = rtnl_link_af_ops_lookup(family);
if (ops && ops->ao_get_af) {
err = ops->ao_get_af(msg);
if (err)
goto nla_put_failure;
}

err = nl_send_auto(sk, msg);
if (err > 0)
err = 0;
Expand Down Expand Up @@ -1218,6 +1224,8 @@ int rtnl_link_build_get_request(int ifindex, const char *name,
{
struct ifinfomsg ifi;
struct nl_msg *msg;
__u32 vf_mask = RTEXT_FILTER_VF;
int err = -NLE_MSGSIZE;

if (ifindex <= 0 && !name) {
APPBUG("ifindex or name must be specified");
Expand All @@ -1232,18 +1240,24 @@ int rtnl_link_build_get_request(int ifindex, const char *name,
if (ifindex > 0)
ifi.ifi_index = ifindex;

if (nlmsg_append(msg, &ifi, sizeof(ifi), NLMSG_ALIGNTO) < 0)
if (nlmsg_append(msg, &ifi, sizeof(ifi), NLMSG_ALIGNTO) < 0) {
err = -NLE_MSGSIZE;
goto nla_put_failure;
}

if (name)
NLA_PUT_STRING(msg, IFLA_IFNAME, name);

err = nla_put(msg, IFLA_EXT_MASK, sizeof(vf_mask), &vf_mask);
if (err)
goto nla_put_failure;

*result = msg;
return 0;

nla_put_failure:
nlmsg_free(msg);
return -NLE_MSGSIZE;
return err;
}

/**
Expand Down

0 comments on commit 90c6ebe

Please sign in to comment.