diff options
-rw-r--r-- | datapath-windows/ovsext/Vport.c | 28 | ||||
-rw-r--r-- | datapath-windows/ovsext/Vport.h | 2 |
2 files changed, 18 insertions, 12 deletions
diff --git a/datapath-windows/ovsext/Vport.c b/datapath-windows/ovsext/Vport.c index a740b311e..d92d93a1e 100644 --- a/datapath-windows/ovsext/Vport.c +++ b/datapath-windows/ovsext/Vport.c @@ -67,6 +67,9 @@ static NTSTATUS CreateNetlinkMesgForNetdev(POVS_VPORT_EXT_INFO info, int dpIfIndex); static POVS_VPORT_ENTRY OvsFindVportByHvNameW(POVS_SWITCH_CONTEXT switchContext, PWSTR wsName, SIZE_T wstrSize); +static NDIS_STATUS InitHvVportCommon(POVS_SWITCH_CONTEXT switchContext, + POVS_VPORT_ENTRY vport, + BOOLEAN newPort); /* * Functions implemented in relaton to NDIS port manipulation. @@ -96,7 +99,8 @@ HvCreatePort(POVS_SWITCH_CONTEXT switchContext, } OvsInitVportWithPortParam(vport, portParam); - InitHvVportCommon(switchContext, vport); + /* XXX: Dummy argument to InitHvVportCommon(). */ + InitHvVportCommon(switchContext, vport, TRUE); create_port_done: NdisReleaseRWLock(switchContext->dispatchLock, &lockState); @@ -263,7 +267,7 @@ HvCreateNic(POVS_SWITCH_CONTEXT switchContext, goto add_nic_done; } OvsInitPhysNicVport(vport, virtExtVport, nicParam->NicIndex); - status = InitHvVportCommon(switchContext, vport); + status = InitHvVportCommon(switchContext, vport, TRUE); if (status != NDIS_STATUS_SUCCESS) { OvsFreeMemory(vport); goto add_nic_done; @@ -610,6 +614,7 @@ OvsFindVportByHvNameA(POVS_SWITCH_CONTEXT switchContext, OvsFreeMemory(wsName); return vport; } + POVS_VPORT_ENTRY OvsFindVportByPortIdAndNicIndex(POVS_SWITCH_CONTEXT switchContext, NDIS_SWITCH_PORT_ID portId, @@ -875,12 +880,12 @@ AssignNicNameSpecial(POVS_VPORT_ENTRY vport) * For external NIC, assigns the name for the NIC. * -------------------------------------------------------------------------- */ -NDIS_STATUS +static NDIS_STATUS InitHvVportCommon(POVS_SWITCH_CONTEXT switchContext, - POVS_VPORT_ENTRY vport) + POVS_VPORT_ENTRY vport, + BOOLEAN newPort) { UINT32 hash; - ASSERT(vport->portNo == OVS_DPPORT_NUMBER_INVALID); switch (vport->portType) { case NdisSwitchPortTypeExternal: @@ -929,7 +934,9 @@ InitHvVportCommon(POVS_SWITCH_CONTEXT switchContext, hash = OvsJhashWords(&vport->portId, 1, OVS_HASH_BASIS); InsertHeadList(&switchContext->portIdHashArray[hash & OVS_VPORT_MASK], &vport->portIdLink); - switchContext->numHvVports++; + if (newPort) { + switchContext->numHvVports++; + } return NDIS_STATUS_SUCCESS; } @@ -973,8 +980,9 @@ InitOvsVportCommon(POVS_SWITCH_CONTEXT switchContext, hash = OvsJhashBytes(vport->ovsName, strlen(vport->ovsName) + 1, OVS_HASH_BASIS); - InsertHeadList(&gOvsSwitchContext->ovsPortNameHashArray[hash & OVS_VPORT_MASK], - &vport->ovsNameLink); + InsertHeadList( + &gOvsSwitchContext->ovsPortNameHashArray[hash & OVS_VPORT_MASK], + &vport->ovsNameLink); return STATUS_SUCCESS; } @@ -1124,7 +1132,7 @@ OvsAddConfiguredSwitchPorts(POVS_SWITCH_CONTEXT switchContext) goto cleanup; } OvsInitVportWithPortParam(vport, portParam); - status = InitHvVportCommon(switchContext, vport); + status = InitHvVportCommon(switchContext, vport, TRUE); if (status != NDIS_STATUS_SUCCESS) { OvsFreeMemory(vport); goto cleanup; @@ -1183,7 +1191,7 @@ OvsInitConfiguredSwitchNics(POVS_SWITCH_CONTEXT switchContext) if (vport) { OvsInitPhysNicVport(vport, virtExtVport, nicParam->NicIndex); - status = InitHvVportCommon(switchContext, vport); + status = InitHvVportCommon(switchContext, vport, TRUE); if (status != NDIS_STATUS_SUCCESS) { OvsFreeMemory(vport); vport = NULL; diff --git a/datapath-windows/ovsext/Vport.h b/datapath-windows/ovsext/Vport.h index 4ee41e47d..911029245 100644 --- a/datapath-windows/ovsext/Vport.h +++ b/datapath-windows/ovsext/Vport.h @@ -211,8 +211,6 @@ VOID OvsRemoveAndDeleteVport(POVS_SWITCH_CONTEXT switchContext, BOOLEAN hvDelete, BOOLEAN ovsDelete, BOOLEAN *vportDeallocated); -NDIS_STATUS InitHvVportCommon(POVS_SWITCH_CONTEXT switchContext, - POVS_VPORT_ENTRY vport); NDIS_STATUS InitOvsVportCommon(POVS_SWITCH_CONTEXT switchContext, POVS_VPORT_ENTRY vport); NTSTATUS OvsInitTunnelVport(POVS_VPORT_ENTRY vport, OVS_VPORT_TYPE ovsType, |