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)
/Christian