Re: [ovs-dev] [PATCH v1 02/10] datapath-windows/Netlink: Add NlFillOvsMsg API for creating Netlink message headers.

2014-09-25 Thread Samuel Ghinet
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 sghi...@cloudbasesolutions.com

Date: Wed, 24 Sep 2014 00:15:36 -0700
From: Ankur Sharma ankursha...@vmware.com
To: dev@openvswitch.org
Subject: [ovs-dev] [PATCH v1 02/10] datapath-windows/Netlink: Add
NlFillOvsMsg API for creating Netlink message headers.
Message-ID: 1411542944-19374-2-git-send-email-ankursha...@vmware.com

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
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev


[ovs-dev] [PATCH v1 02/10] datapath-windows/Netlink: Add NlFillOvsMsg API for creating Netlink message headers.

2014-09-24 Thread Ankur Sharma
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
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev


Re: [ovs-dev] [PATCH v1 02/10] datapath-windows/Netlink: Add NlFillOvsMsg API for creating Netlink message headers.

2014-09-24 Thread Eitan Eliahu
Hi Ankur, do we really need to align the size of the NL  message to 4 bytes? In 
this case we don't add any attributes after the OVS header?
Otherwise, looks good.
Thanks,
Eitan

-Original Message-
From: dev [mailto:dev-boun...@openvswitch.org] On Behalf Of Ankur Sharma
Sent: Wednesday, September 24, 2014 12:16 AM
To: dev@openvswitch.org
Subject: [ovs-dev] [PATCH v1 02/10] 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.
---
 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
dev@openvswitch.org
https://urldefense.proofpoint.com/v1/url?u=http://openvswitch.org/mailman/listinfo/devk=oIvRg1%2BdGAgOoM1BIlLLqw%3D%3D%0Ar=yTvML8OxA42Jb6ViHe7fUXbvPVOYDPVq87w43doxtlY%3D%0Am=PlwQyoi4uGQk%2F46mB8rAsIW1K7aJijOQglddVQ8JBww%3D%0As=9f436d47bba141c08205e20e45e660efa55fa06e204565c2f70fcf232dfaa701
___
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev


Re: [ovs-dev] [PATCH v1 02/10] datapath-windows/Netlink: Add NlFillOvsMsg API for creating Netlink message headers.

2014-09-24 Thread Ankur Sharma
Hi Eitan,

You are right. We should let the caller deal with alignment.
I'll submit a v2 changing nlMsg-nlmsgLen = NLMSG_ALIGN(NlBufSize(nlBuf)); to 
nlMsg-nlmsgLen = (NlBufSize(nlBuf));

Thanks.

Regards,
Ankur

From: Eitan Eliahu
Sent: Wednesday, September 24, 2014 1:55 PM
To: Ankur Sharma; dev@openvswitch.org
Subject: RE: [ovs-dev] [PATCH v1 02/10] datapath-windows/Netlink: Add   
NlFillOvsMsg API for creating Netlink message headers.

Hi Ankur, do we really need to align the size of the NL  message to 4 bytes? In 
this case we don't add any attributes after the OVS header?
Otherwise, looks good.
Thanks,
Eitan

-Original Message-
From: dev [mailto:dev-boun...@openvswitch.org] On Behalf Of Ankur Sharma
Sent: Wednesday, September 24, 2014 12:16 AM
To: dev@openvswitch.org
Subject: [ovs-dev] [PATCH v1 02/10] 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.
---
 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
dev@openvswitch.org
https://urldefense.proofpoint.com/v1/url?u=http://openvswitch.org/mailman/listinfo/devk=oIvRg1%2BdGAgOoM1BIlLLqw%3D%3D%0Ar=yTvML8OxA42Jb6ViHe7fUXbvPVOYDPVq87w43doxtlY%3D%0Am=PlwQyoi4uGQk%2F46mB8rAsIW1K7aJijOQglddVQ8JBww%3D%0As=9f436d47bba141c08205e20e45e660efa55fa06e204565c2f70fcf232dfaa701
___
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev


Re: [ovs-dev] [PATCH v1 02/10] datapath-windows/Netlink: Add NlFillOvsMsg API for creating Netlink message headers.

2014-09-24 Thread Alin Serdean
Hi Ankur,



As Eitan was mentioning drop:

nlMsg-nlmsgLen = NLMSG_ALIGN(NlBufSize(nlBuf));



I see you declaring the following structure but never used:
/* 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;





Also NlFillOvsMsg has too many parameters in my opionion.



A suggestion for the prototype can be the following:
NlFillOvsMsg(POVS_MESSAGE msgOut, PNL_BUFFER nlBuf,
PNL_MSG_HDR nlHdr, PGENL_MSG_HDR genlHdr,

UINT32 dpNo);



Alin.





-Mesaj original-
De la: dev [mailto:dev-boun...@openvswitch.org] În numele Ankur Sharma
Trimis: Wednesday, September 24, 2014 10:16 AM
Către: dev@openvswitch.org
Subiect: [ovs-dev] [PATCH v1 02/10] 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.

---

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

dev@openvswitch.orgmailto:dev@openvswitch.org

http://openvswitch.org/mailman/listinfo/dev
___
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev


Re: [ovs-dev] [PATCH v1 02/10] datapath-windows/Netlink: Add NlFillOvsMsg API for creating Netlink message headers.

2014-09-24 Thread Ankur Sharma
Hi Alin,

Yes i'll remove NLMSG_ALIGN.
My bad i missed out removing NL_FILL_ARGS. I'll spin up a v2 with the review 
comments.

Thanks.

Regards,
Ankur

From: Alin Serdean aserd...@cloudbasesolutions.com
Sent: Wednesday, September 24, 2014 6:14 PM
To: Ankur Sharma; dev@openvswitch.org
Subject: RE: [ovs-dev] [PATCH v1 02/10] datapath-windows/Netlink: Add 
NlFillOvsMsg API for creating Netlink message headers.


Hi Ankur,



As Eitan was mentioning drop:

nlMsg-nlmsgLen = NLMSG_ALIGN(NlBufSize(nlBuf));



I see you declaring the following structure but never used:
/* 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;





Also NlFillOvsMsg has too many parameters in my opionion.



A suggestion for the prototype can be the following:
NlFillOvsMsg(POVS_MESSAGE msgOut, PNL_BUFFER nlBuf,
PNL_MSG_HDR nlHdr, PGENL_MSG_HDR genlHdr,

UINT32 dpNo);



Alin.





-Mesaj original-
De la: dev [mailto:dev-boun...@openvswitch.org] În numele Ankur Sharma
Trimis: Wednesday, September 24, 2014 10:16 AM
Către: dev@openvswitch.org
Subiect: [ovs-dev] [PATCH v1 02/10] 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.

---

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

dev@openvswitch.orgmailto:dev@openvswitch.org

http://openvswitch.org/mailman/listinfo/devhttps://urldefense.proofpoint.com/v1/url?u=http://openvswitch.org/mailman/listinfo/devk=oIvRg1%2BdGAgOoM1BIlLLqw%3D%3D%0Ar=f6EhnZ0ORGZNt5QbYmRaOxfWfx%2Bqd3KEiPf3%2FYaollU