Skip to content

Commit

Permalink
datapath-windows: Some fixes in vport get code
Browse files Browse the repository at this point in the history
In this patch, we make some fixes in the vport get code as well as
elevating some utility functions from static to non-static.

Signed-off-by: Nithin Raju <nithin@vmware.com>
Acked-by: Ankur Sharma <ankursharma@vmware.com>
Acked-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Tested-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
  • Loading branch information
nithinrajub authored and blp committed Oct 6, 2014
1 parent 2b144cb commit d952b66
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 5 deletions.
17 changes: 12 additions & 5 deletions datapath-windows/ovsext/Datapath.c
Expand Up @@ -1261,7 +1261,7 @@ OvsSetupDumpStart(POVS_USER_PARAMS_CONTEXT usrParamsCtx)

static VOID
BuildMsgOut(POVS_MESSAGE msgIn, POVS_MESSAGE msgOut, UINT16 type,
UINT32 length, UINT16 flags)
UINT32 length, UINT16 flags)
{
msgOut->nlMsg.nlmsgType = type;
msgOut->nlMsg.nlmsgFlags = flags;
Expand All @@ -1270,18 +1270,23 @@ BuildMsgOut(POVS_MESSAGE msgIn, POVS_MESSAGE msgOut, UINT16 type,
msgOut->nlMsg.nlmsgLen = length;

msgOut->genlMsg.cmd = msgIn->genlMsg.cmd;
msgOut->genlMsg.version = nlDatapathFamilyOps.version;
msgOut->genlMsg.version = msgIn->genlMsg.version;
msgOut->genlMsg.reserved = 0;
}

static VOID
/*
* XXX: should move out these functions to a Netlink.c or to a OvsMessage.c
* or even make them inlined functions in Datapath.h. Can be done after the
* first sprint once we have more code to refactor.
*/
VOID
BuildReplyMsgFromMsgIn(POVS_MESSAGE msgIn, POVS_MESSAGE msgOut, UINT16 flags)
{
BuildMsgOut(msgIn, msgOut, msgIn->nlMsg.nlmsgType, sizeof(OVS_MESSAGE),
flags);
}

static VOID
VOID
BuildErrorMsg(POVS_MESSAGE msgIn, POVS_MESSAGE_ERROR msgOut, UINT errorCode)
{
BuildMsgOut(msgIn, (POVS_MESSAGE)msgOut, NLMSG_ERROR,
Expand Down Expand Up @@ -1538,6 +1543,7 @@ OvsGetVport(POVS_USER_PARAMS_CONTEXT usrParamsCtx,
}
OvsReleaseCtrlLock();

NdisAcquireRWLockRead(gOvsSwitchContext->dispatchLock, &lockState, 0);
if (vportAttrs[OVS_VPORT_ATTR_NAME] != NULL) {
vport = OvsFindVportByOvsName(gOvsSwitchContext,
NlAttrGet(vportAttrs[OVS_VPORT_ATTR_NAME]),
Expand All @@ -1547,15 +1553,16 @@ OvsGetVport(POVS_USER_PARAMS_CONTEXT usrParamsCtx,
NlAttrGetU32(vportAttrs[OVS_VPORT_ATTR_PORT_NO]));
} else {
nlError = NL_ERROR_INVAL;
NdisReleaseRWLock(gOvsSwitchContext->dispatchLock, &lockState);
goto Cleanup;
}

if (!vport) {
nlError = NL_ERROR_NODEV;
NdisReleaseRWLock(gOvsSwitchContext->dispatchLock, &lockState);
goto Cleanup;
}

NdisAcquireRWLockRead(gOvsSwitchContext->dispatchLock, &lockState, 0);
status = OvsCreateMsgFromVport(vport, msgIn, usrParamsCtx->outputBuffer,
usrParamsCtx->outputLength,
gOvsSwitchContext->dpNo);
Expand Down
9 changes: 9 additions & 0 deletions datapath-windows/ovsext/Datapath.h
Expand Up @@ -92,6 +92,15 @@ POVS_OPEN_INSTANCE OvsGetOpenInstance(PFILE_OBJECT fileObject,

NTSTATUS OvsCompleteIrpRequest(PIRP irp, ULONG_PTR infoPtr, NTSTATUS status);

VOID OvsAcquireCtrlLock();
VOID OvsReleaseCtrlLock();

/* XXX: Move this to netlink.[ch] eventually. */
VOID BuildReplyMsgFromMsgIn(POVS_MESSAGE msgIn, POVS_MESSAGE msgOut,
UINT16 flags);
VOID BuildErrorMsg(POVS_MESSAGE msgIn, POVS_MESSAGE_ERROR msgOut,
UINT errorCode);

/*
* Utility structure and functions to collect in one place all the parameters
* passed during a call from userspace.
Expand Down

0 comments on commit d952b66

Please sign in to comment.