Re: [ovs-dev] [PATCH v1 02/10] datapath-windows/Netlink: Add NlFillOvsMsg API for creating Netlink message headers.
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.
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.
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.
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.
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.
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