[ovs-dev] [PATCH] datapath-windows: Updating an External Adapter causes flow lookup failure

Nithin Raju nithin at vmware.com
Tue Nov 3 01:10:49 UTC 2015


Just a minor detail, but ConvertInterfaceLuidToAlias() seems to be
returning something of type NETIO_STATUS, with NO_ERROR indicating
success. We should probably use the appropriate type.

Looks good otherwise. Thanks for doing this.

Acked-by: Nithin Raju <nithin at vmware.com>


-----Original Message-----
From: Sairam Venugopal <vsairam at vmware.com>
Date: Monday, November 2, 2015 at 5:05 PM
To: "dev at openvswitch.org" <dev at openvswitch.org>
Subject: [ovs-dev] [PATCH] datapath-windows: Updating an External
Adapter	causes flow lookup failure

>This patch fixes an issue with updating the propeties of an external
>adapter in Windows. The issue causes flow lookups to fail until the
>kernel is reinstalled.
>
>Associated bug - 
>https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_openvswitc
>h_ovs-2Dissues_issues_102&d=BQIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNt
>Xt-uEs&r=pNHQcdr7B40b4h6Yb7FIedI1dnBsxdDuTLBYD3JqV80&m=uzGKohGZgRODAcZXf_e
>RokVXtUFLDB5d0wjXmf4YDso&s=2qfpFBiaYnXUUwr5rtdDaoA_VofV0qetJrgkiHbXLvQ&e=
>
>Signed-off-by: Sairam Venugopal <vsairam at vmware.com>
>---
> datapath-windows/ovsext/Vport.c | 40
>++++++++++++++++++++++++++++++++++++----
> 1 file changed, 36 insertions(+), 4 deletions(-)
>
>diff --git a/datapath-windows/ovsext/Vport.c
>b/datapath-windows/ovsext/Vport.c
>index 4ade842..812e62b 100644
>--- a/datapath-windows/ovsext/Vport.c
>+++ b/datapath-windows/ovsext/Vport.c
>@@ -322,19 +322,51 @@ HvCreateNic(POVS_SWITCH_CONTEXT switchContext,
>         POVS_VPORT_ENTRY virtExtVport =
>             (POVS_VPORT_ENTRY)switchContext->virtualExternalVport;
> 
>-        vport = (POVS_VPORT_ENTRY)OvsAllocateVport();
>+        vport = OvsFindVportByPortIdAndNicIndex(switchContext,
>+                                                nicParam->PortId,
>+                                                nicParam->NicIndex);
>         if (vport == NULL) {
>-            status = NDIS_STATUS_RESOURCES;
>-            goto add_nic_done;
>+            /* Find by interface name */
>+            WCHAR interfaceName[IF_MAX_STRING_SIZE] = { 0 };
>+            NET_LUID interfaceLuid = { 0 };
>+            size_t len = 0;
>+            status =
>ConvertInterfaceGuidToLuid(&nicParam->NetCfgInstanceId,
>+                                                &interfaceLuid);
>+            if (status == NDIS_STATUS_SUCCESS) {
>+                status = ConvertInterfaceLuidToAlias(&interfaceLuid,
>+                                                     interfaceName,
>+                                                     IF_MAX_STRING_SIZE
>+ 1);
>+                if (status == NDIS_STATUS_SUCCESS) {
>+                    RtlStringCbLengthW(interfaceName,
>+                                       IF_MAX_STRING_SIZE,
>+                                       &len);
>+                    vport = OvsFindVportByHvNameW(switchContext,
>+                                                  interfaceName,
>+                                                  len);
>+                }
>+            }
>+
>+            if (vport == NULL) {
>+                /* XXX: Handle this event appropriately */
>+                vport = (POVS_VPORT_ENTRY)OvsAllocateVport();
>+                if (vport == NULL) {
>+                    status = NDIS_STATUS_RESOURCES;
>+                    goto add_nic_done;
>+                }
>+            }
>         }
>+
>         OvsInitPhysNicVport(vport, virtExtVport, nicParam->NicIndex);
>+        OvsInitVportWithNicParam(switchContext, vport, nicParam);
>         status = InitHvVportCommon(switchContext, vport, TRUE);
>+        vport->isAbsentOnHv = FALSE;
>         if (status != NDIS_STATUS_SUCCESS) {
>             OvsFreeMemoryWithTag(vport, OVS_VPORT_POOL_TAG);
>             goto add_nic_done;
>         }
>+    } else {
>+        OvsInitVportWithNicParam(switchContext, vport, nicParam);
>     }
>-    OvsInitVportWithNicParam(switchContext, vport, nicParam);
>     portNo = vport->portNo;
>     if (vport->ovsState == OVS_STATE_CONNECTED) {
>         event = OVS_EVENT_CONNECT | OVS_EVENT_LINK_UP;
>-- 
>1.9.5.msysgit.0
>
>_______________________________________________
>dev mailing list
>dev at openvswitch.org
>https://urldefense.proofpoint.com/v2/url?u=http-3A__openvswitch.org_mailma
>n_listinfo_dev&d=BQIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=pN
>HQcdr7B40b4h6Yb7FIedI1dnBsxdDuTLBYD3JqV80&m=uzGKohGZgRODAcZXf_eRokVXtUFLDB
>5d0wjXmf4YDso&s=nzNtvc9DhUaN4oQfMh7GTPzwdWw1TMB8xiGsYawULdA&e= 




More information about the dev mailing list