summaryrefslogtreecommitdiff
path: root/datapath-windows/ovsext/Netlink
diff options
context:
space:
mode:
authorAnkur Sharma <ankursharma@vmware.com>2014-09-26 17:32:21 -0700
committerBen Pfaff <blp@nicira.com>2014-09-29 09:03:41 -0700
commitd5f1e533c3f0cda6ef07fc8b01c0049c391212b6 (patch)
treefaa14903b103a7a0b17b968ad68a456faae2fab2 /datapath-windows/ovsext/Netlink
parent08288ce0bd23d5fe87cac47e777ce34d52e74efe (diff)
downloadopenvswitch-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.c43
-rw-r--r--datapath-windows/ovsext/Netlink/Netlink.h5
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);