diff options
author | Ankur Sharma <ankursharma@vmware.com> | 2014-09-26 17:32:21 -0700 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2014-09-29 09:03:41 -0700 |
commit | d5f1e533c3f0cda6ef07fc8b01c0049c391212b6 (patch) | |
tree | faa14903b103a7a0b17b968ad68a456faae2fab2 /datapath-windows/ovsext/Netlink | |
parent | 08288ce0bd23d5fe87cac47e777ce34d52e74efe (diff) | |
download | openvswitch-d5f1e533c3f0cda6ef07fc8b01c0049c391212b6.tar.gz |
datapath-windows/Netlink: Add NlFillOvsMsg API for creating Netlink message headers.
Added NlFillOvsMsg API in Netlink.c This API will be used to populate
netlink message headers.
Signed-off-by: Ankur Sharma <ankursharma@vmware.com>
Acked-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Acked-by: Eitan Eliahu <eliahue@vmware.com>
Acked-by: Nithin Raju <nithin@vmware.com>
Acked-by: Samuel Ghinet <sghinet@cloudbasesolutions.com>
Tested-by: Ankur Sharma <ankursharma@vmware.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
Diffstat (limited to 'datapath-windows/ovsext/Netlink')
-rw-r--r-- | datapath-windows/ovsext/Netlink/Netlink.c | 43 | ||||
-rw-r--r-- | datapath-windows/ovsext/Netlink/Netlink.h | 5 |
2 files changed, 48 insertions, 0 deletions
diff --git a/datapath-windows/ovsext/Netlink/Netlink.c b/datapath-windows/ovsext/Netlink/Netlink.c index c286c2fb3..cd21ae4d5 100644 --- a/datapath-windows/ovsext/Netlink/Netlink.c +++ b/datapath-windows/ovsext/Netlink/Netlink.c @@ -34,6 +34,49 @@ /* * --------------------------------------------------------------------------- + * Prepare netlink message headers. Attributes should be added by caller. + * --------------------------------------------------------------------------- + */ +NTSTATUS +NlFillOvsMsg(PNL_BUFFER nlBuf, UINT16 nlmsgType, + UINT16 nlmsgFlags, UINT32 nlmsgSeq, + UINT32 nlmsgPid, UINT8 genlCmd, + UINT8 genlVer, UINT32 dpNo) +{ + BOOLEAN writeOk; + PNL_MSG_HDR nlMsg; + OVS_MESSAGE msgOut; + UINT32 offset = NlBufSize(nlBuf); + + ASSERT(NlBufAt(nlBuf, offset, sizeof(struct _OVS_MESSAGE)) != 0); + + msgOut.nlMsg.nlmsgType = nlmsgType; + msgOut.nlMsg.nlmsgFlags = nlmsgFlags; + msgOut.nlMsg.nlmsgSeq = nlmsgSeq; + msgOut.nlMsg.nlmsgPid = nlmsgPid; + + msgOut.genlMsg.cmd = genlCmd; + msgOut.genlMsg.version = genlVer; + msgOut.genlMsg.reserved = 0; + + msgOut.ovsHdr.dp_ifindex = dpNo; + + writeOk = NlMsgPutTail(nlBuf, (PCHAR)(&msgOut), + sizeof (struct _OVS_MESSAGE)); + + if (!writeOk) { + goto done; + } + + nlMsg = (PNL_MSG_HDR)NlBufAt(nlBuf, offset, sizeof(struct _NL_MSG_HDR)); + nlMsg->nlmsgLen = sizeof(struct _OVS_MESSAGE); + +done: + return writeOk ? STATUS_SUCCESS : STATUS_INVALID_BUFFER_SIZE; +} + +/* + * --------------------------------------------------------------------------- * Adds Netlink Header to the NL_BUF. * --------------------------------------------------------------------------- */ diff --git a/datapath-windows/ovsext/Netlink/Netlink.h b/datapath-windows/ovsext/Netlink/Netlink.h index b03672334..9f7cc7001 100644 --- a/datapath-windows/ovsext/Netlink/Netlink.h +++ b/datapath-windows/ovsext/Netlink/Netlink.h @@ -78,6 +78,11 @@ typedef struct _NL_POLICY #define NL_ATTR_GET_AS(NLA, TYPE) \ (*(TYPE*) NlAttrGetUnspec(nla, sizeof(TYPE))) +NTSTATUS NlFillOvsMsg(PNL_BUFFER nlBuf, + UINT16 nlmsgType, UINT16 nlmsgFlags, + UINT32 nlmsgSeq, UINT32 nlmsgPid, + UINT8 genlCmd, UINT8 genlVer, UINT32 dpNo); + /* Netlink message accessing the payload */ PVOID NlMsgAt(const PNL_MSG_HDR nlh, UINT32 offset); UINT32 NlMsgSize(const PNL_MSG_HDR nlh); |