diff options
author | Ankur Sharma <ankursharma@vmware.com> | 2014-10-21 17:24:37 -0700 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2014-10-23 09:14:42 -0700 |
commit | 10023cb51bdfce031b33c1cec3953fefb0befb40 (patch) | |
tree | 59c708a26a16a6ef5d28410b860148bc36d71b23 /datapath-windows/ovsext | |
parent | 75752ef5e7e3ce70706074cae3ccf06c6871ed7e (diff) | |
download | openvswitch-10023cb51bdfce031b33c1cec3953fefb0befb40.tar.gz |
datapath-windows: Calling OvsAddPidInstance and OvsDelPidInstance
Signed-off-by: Ankur Sharma <ankursharma@vmware.com>
Acked-by: Sorin Vinturis <svinturis@cloudbasesolutions.com>
Acked-by: Nithin Raju <nithin@vmware.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
Diffstat (limited to 'datapath-windows/ovsext')
-rw-r--r-- | datapath-windows/ovsext/User.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/datapath-windows/ovsext/User.c b/datapath-windows/ovsext/User.c index 3e6cda256..6bd702e87 100644 --- a/datapath-windows/ovsext/User.c +++ b/datapath-windows/ovsext/User.c @@ -135,9 +135,22 @@ OvsSubscribeDpIoctl(PVOID instanceP, POVS_USER_PACKET_QUEUE queue; POVS_OPEN_INSTANCE instance = (POVS_OPEN_INSTANCE)instanceP; + OvsAcquireCtrlLock(); + if (!gOvsSwitchContext) { + OvsReleaseCtrlLock(); + return STATUS_INVALID_PARAMETER; + } + OvsReleaseCtrlLock(); + if (instance->packetQueue && !join) { /* unsubscribe */ OvsCleanupPacketQueue(instance); + + OvsAcquireCtrlLock(); + /* Remove the instance from pidHashArray */ + OvsDelPidInstance(gOvsSwitchContext, pid); + OvsReleaseCtrlLock(); + } else if (instance->packetQueue == NULL && join) { queue = (POVS_USER_PACKET_QUEUE) OvsAllocateMemory(sizeof *queue); if (queue == NULL) { @@ -153,10 +166,17 @@ OvsSubscribeDpIoctl(PVOID instanceP, queue->instance = instance; instance->packetQueue = queue; NdisReleaseSpinLock(&queue->queueLock); + + OvsAcquireCtrlLock(); + /* Insert the instance to pidHashArray */ + OvsAddPidInstance(gOvsSwitchContext, pid, instance); + OvsReleaseCtrlLock(); + } else { /* user mode should call only once for subscribe */ return STATUS_INVALID_PARAMETER; } + return STATUS_SUCCESS; } |