Ankur,

The NlFillOvsMsg function you add looks very similar to my versions:
BuildReplyMsgFromMsgIn and BuildMsgOut.

Please look on my latest patch on vport dump to see how I defined 
OvsCreateMsgFromVport. This patch of mine is not merged yet.
We could use both versions, and refactor later. Or you may wish to make some 
use of my functions as well.

Either way it's fine by me.
Acked-by: Samuel Ghinet <[email protected]>
________________________________________
Date: Wed, 24 Sep 2014 00:15:36 -0700
From: Ankur Sharma <[email protected]>
To: [email protected]
Subject: [ovs-dev] [PATCH v1 02/10] datapath-windows/Netlink: Add
        NlFillOvsMsg API for creating Netlink message headers.
Message-ID: <[email protected]>

Added NlFillOvsMsg API in Netlink.c This API will be used to populate
netlink message headers.
---
 datapath-windows/ovsext/Netlink/Netlink.c | 38 +++++++++++++++++++++++++++++++
 datapath-windows/ovsext/Netlink/Netlink.h | 14 ++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/datapath-windows/ovsext/Netlink/Netlink.c 
b/datapath-windows/ovsext/Netlink/Netlink.c
index c286c2f..efaba90 100644
--- a/datapath-windows/ovsext/Netlink/Netlink.c
+++ b/datapath-windows/ovsext/Netlink/Netlink.c
@@ -34,6 +34,44 @@

 /*
  * ---------------------------------------------------------------------------
+ * Prepare netlink message headers. Attributes should be added by caller.
+ * ---------------------------------------------------------------------------
+ */
+NTSTATUS
+NlFillOvsMsg(POVS_MESSAGE msgOut, PNL_BUFFER nlBuf,
+             UINT16 nlmsgType, UINT16 nlmsgFlags,
+             UINT32 nlmsgSeq, UINT32 nlmsgPid,
+             UINT8 genlCmd, UINT8 genlVer, UINT32 dpNo)
+{
+    BOOLEAN writeOk;
+    PNL_MSG_HDR nlMsg;
+
+    /* XXX: Add API for nlBuf->bufRemLen. */
+    ASSERT(NlBufAt(nlBuf, 0, 0) != 0 &&
+           nlBuf->bufRemLen >= sizeof (struct _OVS_MESSAGE));
+
+    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 = NlMsgPutHead(nlBuf, (PCHAR)msgOut,
+                           sizeof (struct _OVS_MESSAGE));
+
+    nlMsg = (PNL_MSG_HDR)NlBufAt(nlBuf, 0, 0);
+    nlMsg->nlmsgLen = NLMSG_ALIGN(NlBufSize(nlBuf));
+
+    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 b036723..8f30800 100644
--- a/datapath-windows/ovsext/Netlink/Netlink.h
+++ b/datapath-windows/ovsext/Netlink/Netlink.h
@@ -61,6 +61,14 @@ typedef struct _NL_POLICY
     BOOLEAN optional;
 } NL_POLICY, *PNL_POLICY;

+/* Structure to hold arguments needed by NlFillOvsMsg */
+typedef struct _NL_FILL_ARGS {
+    UINT16 nlmsgType;
+    UINT8 genlCmd;
+    UINT8 version;
+    UINT32 dpNo;
+} NL_FILL_ARGS, *PNL_FILL_ARGS;
+
 /* This macro is careful to check for attributes with bad lengths. */
 #define NL_ATTR_FOR_EACH(ITER, LEFT, ATTRS, ATTRS_LEN)                  \
     for ((ITER) = (ATTRS), (LEFT) = (ATTRS_LEN);                        \
@@ -78,6 +86,12 @@ typedef struct _NL_POLICY
 #define NL_ATTR_GET_AS(NLA, TYPE) \
         (*(TYPE*) NlAttrGetUnspec(nla, sizeof(TYPE)))

+NTSTATUS
+NlFillOvsMsg(POVS_MESSAGE msgOut, 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);
--
1.9.1
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev

Reply via email to