summaryrefslogtreecommitdiff
path: root/datapath-windows/ovsext/Vport.c
diff options
context:
space:
mode:
authorNithin Raju <nithin@vmware.com>2014-11-18 17:42:46 -0800
committerGurucharan Shetty <gshetty@nicira.com>2014-11-20 07:13:25 -0800
commit827e07be2e969354267f8383cc708b1edbe4dd49 (patch)
tree5e8aef322101cce2fc526856c5a15309660000a7 /datapath-windows/ovsext/Vport.c
parentc22f284b4b8d714bf54305d13a5a26eba12e4afe (diff)
downloadopenvswitch-827e07be2e969354267f8383cc708b1edbe4dd49.tar.gz
datapath-windows: Changes to InitOvsVportCommon()
If a Hyper-V port (for which there exists an OVS port), gets deleted and re-added, we'll call into InitOvsVportCommon() for the port to insert the port into the 'portIdHashArray' as well as do a few other initialization in the switch ocntext. We should not be incrementing 'numHvPorts' at this point since this vport has been counted before when it was first allocated. To account for this, we add a new parameter to InitOvsVportCommon(). The arguments passed by some of the callers are not 100% correct, and will be fixed in future commit in the series. Signed-off-by: Nithin Raju <nithin@vmware.com> Acked-by: Ankur Sharma <ankursharma@vmware.com> Signed-off-by: Gurucharan Shetty <gshetty@nicira.com>
Diffstat (limited to 'datapath-windows/ovsext/Vport.c')
-rw-r--r--datapath-windows/ovsext/Vport.c28
1 files changed, 18 insertions, 10 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;