diff options
author | Nithin Raju <nithin@vmware.com> | 2014-08-29 15:47:21 -0700 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2014-09-04 12:40:22 -0700 |
commit | 81fed0452f46bbd3a1a77aeddb8bb4983a82baee (patch) | |
tree | c5ebf27f28e8e49fd00e0d219955ede7f6038a79 /datapath-windows/ovsext/Datapath.h | |
parent | 6b2dfe8e9f575f21faae2538f10bc2be8b5cf09e (diff) | |
download | openvswitch-81fed0452f46bbd3a1a77aeddb8bb4983a82baee.tar.gz |
datapath-windows: Data structures and functions for dump state
Signed-off-by: Nithin Raju <nithin@vmware.com>
Signed-off-by: Ankur Sharma <ankursharma@vmware.com>
Acked-by: Ankur Sharma <ankursharma@vmware.com>
Acked-by: Saurabh Shah <ssaurabh@vmware.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
Diffstat (limited to 'datapath-windows/ovsext/Datapath.h')
-rw-r--r-- | datapath-windows/ovsext/Datapath.h | 58 |
1 files changed, 48 insertions, 10 deletions
diff --git a/datapath-windows/ovsext/Datapath.h b/datapath-windows/ovsext/Datapath.h index bfbbd71f4..a8faeffbf 100644 --- a/datapath-windows/ovsext/Datapath.h +++ b/datapath-windows/ovsext/Datapath.h @@ -28,6 +28,16 @@ #ifndef __DATAPATH_H_ #define __DATAPATH_H_ 1 +/* + * Structure of any message passed between userspace and kernel. + */ +typedef struct _OVS_MESSAGE { + NL_MSG_HDR nlMsg; + GENL_MSG_HDR genlMsg; + OVS_HDR ovsHdr; + /* Variable length nl_attrs follow. */ +} OVS_MESSAGE, *POVS_MESSAGE; + typedef struct _OVS_DEVICE_EXTENSION { INT numberOpenInstance; INT pidCount; @@ -56,7 +66,15 @@ typedef struct _OVS_OPEN_INSTANCE { * the state in "state-aware" read calls which rely on previous state. This * restriction might go away as the userspace code gets implemented. */ - INT inUse; + INT inUse; + + struct { + POVS_MESSAGE ovsMsg; /* OVS message passed during dump start. */ + UINT32 index[2]; /* markers to continue dump from. One or more + * of them may be used. Eg. in flow dump, the + * markers can store the row and the column + * indices. */ + } dumpState; /* data to support dump commands. */ } OVS_OPEN_INSTANCE, *POVS_OPEN_INSTANCE; NDIS_STATUS OvsCreateDeviceObject(NDIS_HANDLE ovsExtDriverHandle); @@ -67,15 +85,35 @@ POVS_OPEN_INSTANCE OvsGetOpenInstance(PFILE_OBJECT fileObject, NTSTATUS OvsCompleteIrpRequest(PIRP irp, ULONG_PTR infoPtr, NTSTATUS status); -/* - * Structure of any message passed between userspace and kernel. - */ -typedef struct _OVS_MESSAGE { - NL_MSG_HDR nlMsg; - GENL_MSG_HDR genlMsg; - struct ovs_header ovsHdr; - /* Variable length nl_attrs follow. */ -} OVS_MESSAGE, *POVS_MESSAGE; +static __inline NTSTATUS +InitUserDumpState(POVS_OPEN_INSTANCE instance, + POVS_MESSAGE ovsMsg) +{ + /* Clear the dumpState from a previous dump sequence. */ + ASSERT(instance->dumpState.ovsMsg == NULL); + ASSERT(ovsMsg); + + instance->dumpState.ovsMsg = + (POVS_MESSAGE) OvsAllocateMemory(sizeof (OVS_MESSAGE)); + if (instance->dumpState.ovsMsg == NULL) { + return STATUS_NO_MEMORY; + } + RtlCopyMemory(instance->dumpState.ovsMsg, ovsMsg, + sizeof *instance->dumpState.ovsMsg); + RtlZeroMemory(instance->dumpState.index, + sizeof instance->dumpState.index); + + return STATUS_SUCCESS; +} + +static __inline VOID +FreeUserDumpState(POVS_OPEN_INSTANCE instance) +{ + if (instance->dumpState.ovsMsg != NULL) { + OvsFreeMemory(instance->dumpState.ovsMsg); + RtlZeroMemory(&instance->dumpState, sizeof instance->dumpState); + } +} #endif /* __DATAPATH_H_ */ |