Stefan Berger <stefanb(a)linux.vnet.ibm.com> wrote on 05/29/2010 05:20:52
AM:
From:
Stefan Berger <stefanb(a)linux.vnet.ibm.com>
To:
Scott Feldman <scofeldm(a)cisco.com>, arnd(a)arndb.de, Vivek Kashyap/
Beaverton/IBM@IBMUS
Cc:
libvir-list(a)redhat.com, Stefan Berger/Watson/IBM@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(a)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(a)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(a)redhat.com
>
https://www.redhat.com/mailman/listinfo/libvir-list