[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