[libvirt] [PATCH] [PATCH v13-pre1] add 802.1Qbh and 802.1Qbg handling

Vivek Kashyap vivk at us.ibm.com
Tue Jun 1 16:29:10 UTC 2010


Stefan Berger <stefanb at linux.vnet.ibm.com> wrote on 05/29/2010 05:20:52 
AM:

> From:
> 
> Stefan Berger <stefanb at linux.vnet.ibm.com>
> 
> To:
> 
> Scott Feldman <scofeldm at cisco.com>, arnd at arndb.de, Vivek Kashyap/
> Beaverton/IBM at IBMUS
> 
> Cc:
> 
> libvir-list at redhat.com, Stefan Berger/Watson/IBM at IBMUS
> 
> Date:
> 
> 05/29/2010 05:20 AM
> 
> Subject:
> 
> Re: [libvirt] [PATCH] [PATCH v13-pre1] add 802.1Qbh and 802.1Qbg 
handling
> 
> On Sat, 2010-05-29 at 01:20 -0700, Scott Feldman wrote:
> > From: Scott Feldman <scofeldm at cisco.com>
> > 
> > Stefan, I was doing more testing and have some fixes for the bh paths. 
This
> > patch is on top of your V12 patch...
> 
> Applying it.
> 
> > 
> > - some minor cleanups
> > - if association fails due to timeout, disassociate the port profile,
> >   otherwise association state-machine will be "in-progress" 
potentially
> >   forever.
> 
> Interesting...
> 
> Arnd, Vivek, does the lldpad statemachine need this as well?

The timeouts in ECP are quite short and the VDP state machine exits out if 
the communications times out.

Vivek


> 
>    Stefan
> 
> 
> > - don't pass mac/vlan/uuids/profile when disassociating.  ifindex and 
vf
> >   are enough
> > 
> > Signed-off-by: Scott Feldman <scofeldm at cisco.com>
> > ---
> >  src/util/macvtap.c |   75 +++++++++++++++++++++++++++++
> +----------------------
> >  1 files changed, 43 insertions(+), 32 deletions(-)
> > 
> > 
> > diff --git a/src/util/macvtap.c b/src/util/macvtap.c
> > index 71c6169..9ca6203 100644
> > --- a/src/util/macvtap.c
> > +++ b/src/util/macvtap.c
> > @@ -963,11 +963,11 @@ getPortProfileStatus(struct nlattr **tb, int32_t 
vf,
> >          if (tb[IFLA_PORT_SELF]) {
> >              if (nla_parse_nested(tb_port, IFLA_PORT_MAX, tb
> [IFLA_PORT_SELF],
> >                                   ifla_port_policy)) {
> > -                msg = _("error parsing IFLA_VF_SELF part");
> > +                msg = _("error parsing IFLA_PORT_SELF part");
> >                  goto err_exit;
> >              }
> >          } else {
> > -            msg = _("IFLA_VF_SELF is missing");
> > +            msg = _("IFLA_PORT_SELF is missing");
> >              goto err_exit;
> >          }
> >      } else {
> > @@ -1266,7 +1266,7 @@ doPortProfileOpCommon(bool nltarget_kernel,
> >                                  vf,
> >                                  op);
> > 
> > -    if (rc != 0) {
> > +    if (rc) {
> >          macvtapError(VIR_ERR_INTERNAL_ERROR, "%s",
> >                       _("sending of PortProfileRequest failed."));
> >          return rc;
> > @@ -1278,7 +1278,7 @@ doPortProfileOpCommon(bool nltarget_kernel,
> >              goto err_exit;
> >          rc = getPortProfileStatus(tb, vf, instanceId, 
nltarget_kernel,
> >                                    is8021Qbg, &status);
> > -        if (rc != 0)
> > +        if (rc)
> >              goto err_exit;
> >          if (status == PORT_PROFILE_RESPONSE_SUCCESS ||
> >              status == PORT_VDP_RESPONSE_SUCCESS) {
> > @@ -1478,16 +1478,11 @@ doPortProfileOp8021Qbh(const char *ifname,
> >      char *physfndev;
> >      unsigned char hostuuid[VIR_UUID_BUFLEN];
> >      int32_t vf;
> > -    int op = PORT_REQUEST_ASSOCIATE;
> >      bool nltarget_kernel = true;
> >      int ifindex;
> >      int vlanid = -1;
> >      const unsigned char *macaddr = NULL;
> > 
> > -    rc = virGetHostUUID(hostuuid);
> > -    if (rc)
> > -        goto err_exit;
> > -
> >      rc = getPhysfn(ifname, &vf, &physfndev);
> >      if (rc)
> >          goto err_exit;
> > @@ -1499,35 +1494,51 @@ doPortProfileOp8021Qbh(const char *ifname,
> > 
> >      switch (virtPortOp) {
> >      case ASSOCIATE:
> > -        op = PORT_REQUEST_ASSOCIATE;
> > +        rc = virGetHostUUID(hostuuid);
> > +        if (rc)
> > +            goto err_exit;
> > +
> > +        rc = doPortProfileOpCommon(nltarget_kernel, NULL, ifindex,
> > +                                   macaddr,
> > +                                   vlanid,
> > + virtPort->u.virtPort8021Qbh.profileID,
> > +                                   NULL,
> > +                                   vm_uuid,
> > +                                   hostuuid,
> > +                                   vf,
> > +                                   PORT_REQUEST_ASSOCIATE);
> > +        if (rc == -ETIMEDOUT)
> > +            /* Association timed out, disassociate */
> > +            doPortProfileOpCommon(nltarget_kernel, NULL, ifindex,
> > +                                  NULL,
> > +                                  0,
> > +                                  NULL,
> > +                                  NULL,
> > +                                  NULL,
> > +                                  NULL,
> > +                                  vf,
> > +                                  PORT_REQUEST_DISASSOCIATE);
> > +        if (!rc)
> > +            ifaceUp(ifname);
> >          break;
> > +
> >      case DISASSOCIATE:
> > -        op = PORT_REQUEST_DISASSOCIATE;
> > +        rc = doPortProfileOpCommon(nltarget_kernel, NULL, ifindex,
> > +                                   NULL,
> > +                                   0,
> > +                                   NULL,
> > +                                   NULL,
> > +                                   NULL,
> > +                                   NULL,
> > +                                   vf,
> > +                                   PORT_REQUEST_DISASSOCIATE);
> > +        ifaceDown(ifname);
> >          break;
> > +
> >      default:
> >          macvtapError(VIR_ERR_INTERNAL_ERROR,
> > -                     _("operation type %d not supported"), op);
> > +                     _("operation type %d not supported"), 
virtPortOp);
> >          rc = 1;
> > -        goto err_exit;
> > -    }
> > -
> > -    rc = doPortProfileOpCommon(nltarget_kernel, NULL, ifindex,
> > -                               macaddr,
> > -                               vlanid,
> > -                               virtPort->u.virtPort8021Qbh.profileID,
> > -                               NULL,
> > -                               vm_uuid,
> > -                               hostuuid,
> > -                               vf,
> > -                               op);
> > -
> > -    switch (virtPortOp) {
> > -    case ASSOCIATE:
> > -        ifaceUp(ifname);
> > -        break;
> > -    case DISASSOCIATE:
> > -        ifaceDown(ifname);
> > -        break;
> >      }
> > 
> >  err_exit:
> > 
> > --
> > libvir-list mailing list
> > libvir-list at redhat.com
> > https://www.redhat.com/mailman/listinfo/libvir-list
> 
> 




More information about the libvir-list mailing list