From 90439167684c9579aae518b291e7ae513da540bb Mon Sep 17 00:00:00 2001 From: Ankur Sharma Date: Fri, 3 Oct 2014 15:53:43 -0700 Subject: datapath-windows: Flow Dump handler In this patch we have added basic changes for handler registeration for FLOW_GET command. Signed-off-by: Ankur Sharma Acked-by: Nithin Raju Acked-by: Alin Gabriel Serdean Signed-off-by: Ben Pfaff --- datapath-windows/include/OvsPub.h | 2 +- datapath-windows/ovsext/Datapath.c | 27 ++++++++++----------------- datapath-windows/ovsext/Datapath.h | 14 ++++++++++++-- datapath-windows/ovsext/Flow.c | 19 +++++++++++++++++++ datapath-windows/ovsext/Flow.h | 2 ++ 5 files changed, 44 insertions(+), 20 deletions(-) (limited to 'datapath-windows') diff --git a/datapath-windows/include/OvsPub.h b/datapath-windows/include/OvsPub.h index a8516b6d2..e94dacfe2 100644 --- a/datapath-windows/include/OvsPub.h +++ b/datapath-windows/include/OvsPub.h @@ -349,7 +349,7 @@ typedef struct OvsFlowInfo { OvsFlowKey key; struct OvsFlowStats stats; uint32_t actionsLen; - NL_ATTR actions[0]; + PNL_ATTR actions; } OvsFlowInfo; enum GetFlags { diff --git a/datapath-windows/ovsext/Datapath.c b/datapath-windows/ovsext/Datapath.c index 2d2468eb4..e2d89a647 100644 --- a/datapath-windows/ovsext/Datapath.c +++ b/datapath-windows/ovsext/Datapath.c @@ -85,16 +85,6 @@ typedef struct _NETLINK_FAMILY { UINT16 opsCount; } NETLINK_FAMILY, *PNETLINK_FAMILY; -/* - * Device operations to tag netlink commands with. This is a bitmask since it is - * possible that a particular command can be invoked via different device - * operations. - */ -#define OVS_READ_DEV_OP (1 << 0) -#define OVS_WRITE_DEV_OP (1 << 1) -#define OVS_TRANSACTION_DEV_OP (1 << 2) -#define OVS_READ_EVENT_DEV_OP (1 << 3) - /* Handlers for the various netlink commands. */ static NetlinkCmdHandler OvsGetPidCmdHandler, OvsGetDpCmdHandler, @@ -157,7 +147,7 @@ NETLINK_CMD nlDatapathFamilyCmdOps[] = { .handler = OvsGetDpCmdHandler, .supportedDevOp = OVS_WRITE_DEV_OP | OVS_READ_DEV_OP | OVS_TRANSACTION_DEV_OP, - .validateDpIndex = FALSE + .validateDpIndex = FALSE }, { .cmd = OVS_DP_CMD_SET, .handler = OvsSetDpCmdHandler, @@ -214,7 +204,7 @@ NETLINK_CMD nlFlowFamilyCmdOps[] = { .supportedDevOp = OVS_TRANSACTION_DEV_OP, .validateDpIndex = TRUE }, - { .cmd = OVS_FLOW_CMD_SET, + { .cmd = OVS_FLOW_CMD_SET, .handler = OvsFlowNlCmdHandler, .supportedDevOp = OVS_TRANSACTION_DEV_OP, .validateDpIndex = TRUE @@ -223,7 +213,13 @@ NETLINK_CMD nlFlowFamilyCmdOps[] = { .handler = OvsFlowNlCmdHandler, .supportedDevOp = OVS_TRANSACTION_DEV_OP, .validateDpIndex = TRUE - } + }, + { .cmd = OVS_FLOW_CMD_GET, + .handler = OvsFlowNlGetCmdHandler, + .supportedDevOp = OVS_TRANSACTION_DEV_OP | + OVS_WRITE_DEV_OP | OVS_READ_DEV_OP, + .validateDpIndex = TRUE + }, }; NETLINK_FAMILY nlFLowFamilyOps = { @@ -246,8 +242,6 @@ static NTSTATUS ValidateNetlinkCmd(UINT32 devOp, static NTSTATUS InvokeNetlinkCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx, NETLINK_FAMILY *nlFamilyOps, UINT32 *replyLen); -static NTSTATUS OvsSetupDumpStart(POVS_USER_PARAMS_CONTEXT usrParamsCtx); - /* Handles to the device object for communication with userspace. */ NDIS_HANDLE gOvsDeviceHandle; @@ -985,7 +979,6 @@ OvsPendEventCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx, return status; } - /* * -------------------------------------------------------------------------- * Handler for the subscription for the event queue @@ -1216,7 +1209,7 @@ cleanup: } -static NTSTATUS +NTSTATUS OvsSetupDumpStart(POVS_USER_PARAMS_CONTEXT usrParamsCtx) { POVS_MESSAGE msgIn = (POVS_MESSAGE)usrParamsCtx->inputBuffer; diff --git a/datapath-windows/ovsext/Datapath.h b/datapath-windows/ovsext/Datapath.h index 689e0aede..e3bb638b0 100644 --- a/datapath-windows/ovsext/Datapath.h +++ b/datapath-windows/ovsext/Datapath.h @@ -36,12 +36,21 @@ typedef struct _OVS_MESSAGE_ERROR { NL_MSG_ERR errorMsg; } OVS_MESSAGE_ERROR, *POVS_MESSAGE_ERROR; +/* + * Device operations to tag netlink commands with. This is a bitmask since it + * is possible that a particular command can be invoked via different device + * operations. + */ +#define OVS_READ_DEV_OP (1 << 0) +#define OVS_WRITE_DEV_OP (1 << 1) +#define OVS_TRANSACTION_DEV_OP (1 << 2) +#define OVS_READ_EVENT_DEV_OP (1 << 3) + typedef struct _OVS_DEVICE_EXTENSION { INT numberOpenInstance; INT pidCount; } OVS_DEVICE_EXTENSION, *POVS_DEVICE_EXTENSION; - /* * Private context for each handle on the device. */ @@ -83,7 +92,6 @@ POVS_OPEN_INSTANCE OvsGetOpenInstance(PFILE_OBJECT fileObject, NTSTATUS OvsCompleteIrpRequest(PIRP irp, ULONG_PTR infoPtr, NTSTATUS status); - /* * Utility structure and functions to collect in one place all the parameters * passed during a call from userspace. @@ -151,6 +159,8 @@ FreeUserDumpState(POVS_OPEN_INSTANCE instance) } } +NTSTATUS OvsSetupDumpStart(POVS_USER_PARAMS_CONTEXT usrParamsCtx); + #endif /* __DATAPATH_H_ */ #endif /* OVS_USE_NL_INTERFACE */ diff --git a/datapath-windows/ovsext/Flow.c b/datapath-windows/ovsext/Flow.c index 5cab6e190..d1c318c2e 100644 --- a/datapath-windows/ovsext/Flow.c +++ b/datapath-windows/ovsext/Flow.c @@ -305,6 +305,25 @@ done: return rc; } +/* + *---------------------------------------------------------------------------- + * OvsFlowNlGetCmdHandler -- + * Handler for OVS_FLOW_CMD_GET/DUMP commands. + *---------------------------------------------------------------------------- + */ +NTSTATUS +OvsFlowNlGetCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx, + UINT32 *replyLen) +{ + NTSTATUS rc = STATUS_SUCCESS; + *replyLen = 0; + + UNREFERENCED_PARAMETER(usrParamsCtx); + UNREFERENCED_PARAMETER(replyLen); + + return rc; +} + /* *---------------------------------------------------------------------------- * _MapNlToFlowPut -- diff --git a/datapath-windows/ovsext/Flow.h b/datapath-windows/ovsext/Flow.h index 79cb79188..7835b8cfc 100644 --- a/datapath-windows/ovsext/Flow.h +++ b/datapath-windows/ovsext/Flow.h @@ -72,6 +72,8 @@ NTSTATUS OvsFlushFlowIoctl(UINT32 dpNo); NTSTATUS OvsFlowNlCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx, UINT32 *replyLen); +NTSTATUS OvsFlowNlGetCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx, + UINT32 *replyLen); /* Flags for tunneling */ #define OVS_TNL_F_DONT_FRAGMENT (1 << 0) -- cgit v1.2.1