
On Thu, 2010-05-27 at 16:50 +0200, Christian Benvenuti (benve) wrote:
On Thu, 2010-05-27 at 08:47 -0400, Stefan Berger wrote:
On Thu, 2010-05-27 at 13:55 +0200, Arnd Bergmann wrote:
On Thursday 27 May 2010, Stefan Berger wrote:
+static int +getPortProfileStatus(struct nlattr **tb, int32_t vf, uint16_t *status) +{ + int rc = 1; + const char *msg = NULL; + struct nlattr *tb2[IFLA_VF_PORT_MAX + 1], + *tb3[IFLA_PORT_MAX+1]; + + if (vf == PORT_SELF_VF) { + if (tb[IFLA_PORT_SELF]) { + if (nla_parse_nested(tb3, IFLA_PORT_MAX, tb[IFLA_PORT_SELF], + ifla_port_policy)) { + msg = _("error parsing nested IFLA_VF_PORT part"); + goto err_exit; + } + } + } else { + if (tb[IFLA_VF_PORTS]) { + if (nla_parse_nested(tb2, IFLA_VF_PORT_MAX, tb[IFLA_VF_PORTS], + ifla_vf_ports_policy)) { + msg = _("error parsing nested IFLA_VF_PORTS part"); + goto err_exit; + } + if (tb2[IFLA_VF_PORT]) { + if (nla_parse_nested(tb3, IFLA_PORT_MAX, tb2[IFLA_VF_PORT], + ifla_port_policy)) { + msg = _("error parsing nested IFLA_VF_PORT part"); + goto err_exit; + } + } + } + }
There may be multiple IFLA_VF_PORT attributes in the IFLA_VF_PORTS list, so you cannot do nla_parse_nested. I think this should be nla_for_each_attr instead, and compare the uuid to the one you expect.
Ok. I'll change that for v10.
Actually I believe calling
nla_for_each_nested(attr, tb[IFLA_VF_PORTS], ...) }
is even better than calling nla_for_each_attr directly. (You can check how Scott coded the kernel function do_setlink in his recent kernel patch "Add netlink support for virtual port" for a similar example)
Probably a typo from Arnd. I looked in rtnetlink.c. Thanks. Stefan
/Christian