[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