On Sat, 2010-05-29 at 01:20 -0700, Scott Feldman wrote: > From: Scott Feldman <scofeldm@xxxxxxxxx> > > 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? Stefan > - don't pass mac/vlan/uuids/profile when disassociating. ifindex and vf > are enough > > Signed-off-by: Scott Feldman <scofeldm@xxxxxxxxx> > --- > 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@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/libvir-list -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list