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/dev&k=oIvRg1%2BdGAgOoM1BIlLLqw%3D%3D%0A&r=yTvML8OxA42Jb6ViHe7fUXbvPVOYDPVq87w43doxtlY%3D%0A&m=PlwQyoi4uGQk%2F46mB8rAsIW1K7aJijOQglddVQ8JBww%3D%0A&s=9f436d47bba141c08205e20e45e660efa55fa06e204565c2f70fcf232dfaa701 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev