Signed-off-by: Ankur Sharma <ankursha...@vmware.com> --- datapath-windows/ovsext/User.c | 45 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 5 deletions(-)
diff --git a/datapath-windows/ovsext/User.c b/datapath-windows/ovsext/User.c index 42473ab..95b8652 100644 --- a/datapath-windows/ovsext/User.c +++ b/datapath-windows/ovsext/User.c @@ -608,16 +608,35 @@ OvsGetNextPacket(POVS_OPEN_INSTANCE instance) return CONTAINING_RECORD(link, OVS_PACKET_QUEUE_ELEM, link); } - +/* + * --------------------------------------------------------------------------- + * Given a pid, returns the corresponding USER_PACKET_QUEUE. + * --------------------------------------------------------------------------- + */ POVS_USER_PACKET_QUEUE OvsGetQueue(UINT32 pid) { - /* XXX To be implemented. Return the queue assoiated with the pid*/ - UNREFERENCED_PARAMETER(pid); - ASSERT(FALSE); - return NULL; + POVS_OPEN_INSTANCE instance; + POVS_USER_PACKET_QUEUE ret = NULL; + + OvsAcquireCtrlLock(); + instance = OvsGetPidInstance(gOvsSwitchContext, pid); + + if (instance) { + ret = instance->packetQueue; + } + + OvsReleaseCtrlLock(); + + return ret; } +/* + * --------------------------------------------------------------------------- + * Given a pid, returns the corresponding instance. + * gOvsCtrlLock must be acquired before calling this API. + * --------------------------------------------------------------------------- + */ POVS_OPEN_INSTANCE OvsGetPidInstance(POVS_SWITCH_CONTEXT switchContext, UINT32 pid) { @@ -635,6 +654,12 @@ OvsGetPidInstance(POVS_SWITCH_CONTEXT switchContext, UINT32 pid) return NULL; } +/* + * --------------------------------------------------------------------------- + * Given a pid and an instance. This API adds instance to pidHashArray. + * gOvsCtrlLock must be acquired before calling this API. + * --------------------------------------------------------------------------- + */ VOID OvsAddPidInstance(POVS_SWITCH_CONTEXT switchContext, UINT32 pid, POVS_OPEN_INSTANCE instance) @@ -647,6 +672,12 @@ OvsAddPidInstance(POVS_SWITCH_CONTEXT switchContext, UINT32 pid, &(instance->pidLink)); } +/* + * --------------------------------------------------------------------------- + * Given a pid and an instance. This API removes instance from pidHashArray. + * gOvsCtrlLock must be acquired before calling this API. + * --------------------------------------------------------------------------- + */ VOID OvsDelPidInstance(POVS_SWITCH_CONTEXT switchContext, UINT32 pid) { @@ -903,6 +934,10 @@ OvsGetPid(POVS_VPORT_ENTRY vport, PNET_BUFFER nb, UINT32 *pid) { UNREFERENCED_PARAMETER(nb); + if (!vport) { + return STATUS_INVALID_PARAMETER; + } + /* XXX select a pid from an array of pids using a flow based hash */ *pid = vport->upcallPid; return STATUS_SUCCESS; -- 1.9.1 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev