Message ID | 1467245333-8112-3-git-send-email-vsairam@vmware.com |
---|---|
State | Superseded |
Delegated to: | Guru Shetty |
Headers | show |
Acked-by: Nithin Raju <nithin@vmware.com> -----Original Message----- From: dev <dev-bounces@openvswitch.org> on behalf of Sairam Venugopal <vsairam@vmware.com> Date: Wednesday, June 29, 2016 at 5:08 PM To: "dev@openvswitch.org" <dev@openvswitch.org> Subject: [ovs-dev] [PATCH v4 02/11] datapath-windows: Add support for Netfilter netlink message >Introduce NF_GEN_MSG_HDR similar to GENL_MSG_HDR that will be used for >communicating via netfilter-netlink channel. This will be used by >userspace to retrieve and modify Conntrack data in Windows. > >Signed-off-by: Sairam Venugopal <vsairam@vmware.com> >Acked-by: Paul-Daniel Boca <pboca@cloudbasesolutions.com> >Acked-by: Nithin Raju <nithin@vmware.com> >--- > datapath-windows/ovsext/Netlink/Netlink.c | 11 +++++++++++ > datapath-windows/ovsext/Netlink/Netlink.h | 9 +++++++-- > datapath-windows/ovsext/Netlink/NetlinkProto.h | 9 +++++++++ > 3 files changed, 27 insertions(+), 2 deletions(-) > >diff --git a/datapath-windows/ovsext/Netlink/Netlink.c >b/datapath-windows/ovsext/Netlink/Netlink.c >index 1eec320..ccf9ec1 100644 >--- a/datapath-windows/ovsext/Netlink/Netlink.c >+++ b/datapath-windows/ovsext/Netlink/Netlink.c >@@ -672,6 +672,17 @@ NlMsgAttrsLen(const PNL_MSG_HDR nlh) > return NlHdrPayloadLen(nlh) - GENL_HDRLEN - OVS_HDRLEN; > } > >+/* >+ * >-------------------------------------------------------------------------- >- >+ * Returns size of to nfnlmsg attributes. >+ * >-------------------------------------------------------------------------- >- >+ */ >+UINT32 >+NlNfMsgAttrsLen(const PNL_MSG_HDR nlh) >+{ >+ return NlHdrPayloadLen(nlh) - NF_GEN_MSG_HDRLEN - OVS_HDRLEN; >+} >+ > /* Netlink message parse. */ > > /* >diff --git a/datapath-windows/ovsext/Netlink/Netlink.h >b/datapath-windows/ovsext/Netlink/Netlink.h >index b1b3bed..5261b9e 100644 >--- a/datapath-windows/ovsext/Netlink/Netlink.h >+++ b/datapath-windows/ovsext/Netlink/Netlink.h >@@ -27,10 +27,14 @@ > */ > typedef struct _OVS_MESSAGE { > NL_MSG_HDR nlMsg; >- GENL_MSG_HDR genlMsg; >+ union { >+ GENL_MSG_HDR genlMsg; >+ NF_GEN_MSG_HDR nfGenMsg; >+ }; > OVS_HDR ovsHdr; > /* Variable length nl_attrs follow. */ > } OVS_MESSAGE, *POVS_MESSAGE; >+BUILD_ASSERT_DECL(sizeof(GENL_MSG_HDR) == sizeof(NF_GEN_MSG_HDR)); > > /* > * Structure of an error message sent as a reply from kernel. >@@ -107,6 +111,7 @@ PCHAR NlHdrPayload(const PNL_MSG_HDR nlh); > UINT32 NlHdrPayloadLen(const PNL_MSG_HDR nlh); > PNL_ATTR NlMsgAttrs(const PNL_MSG_HDR nlh); > UINT32 NlMsgAttrsLen(const PNL_MSG_HDR nlh); >+UINT32 NlNfMsgAttrsLen(const PNL_MSG_HDR nlh); > > /* Netlink message parse */ > PNL_MSG_HDR NlMsgNext(const PNL_MSG_HDR nlh); >@@ -135,7 +140,7 @@ const PNL_ATTR NlAttrFindNested(const PNL_ATTR nla, > UINT16 type); > BOOLEAN NlAttrParse(const PNL_MSG_HDR nlMsg, UINT32 attrOffset, > UINT32 totalAttrLen, const NL_POLICY policy[], >- const UINT32 numPolicy, PNL_ATTR attrs[], >+ const UINT32 numPolicy, PNL_ATTR attrs[], > UINT32 numAttrs); > BOOLEAN NlAttrParseNested(const PNL_MSG_HDR nlMsg, UINT32 attrOffset, > UINT32 totalAttrLen, const NL_POLICY policy[], >diff --git a/datapath-windows/ovsext/Netlink/NetlinkProto.h >b/datapath-windows/ovsext/Netlink/NetlinkProto.h >index f2e9aee..beb14d5 100644 >--- a/datapath-windows/ovsext/Netlink/NetlinkProto.h >+++ b/datapath-windows/ovsext/Netlink/NetlinkProto.h >@@ -98,6 +98,14 @@ typedef struct _GENL_MSG_HDR { > } GENL_MSG_HDR, *PGENL_MSG_HDR; > BUILD_ASSERT_DECL(sizeof(GENL_MSG_HDR) == 4); > >+/* Netfilter Generic Message */ >+typedef struct _NF_GEN_MSG_HDR { >+ UINT8 nfgenFamily; /* AF_xxx */ >+ UINT8 version; /* nfnetlink version */ >+ UINT16 resId; /* resource id */ >+} NF_GEN_MSG_HDR, *PNF_GEN_MSG_HDR; >+BUILD_ASSERT_DECL(sizeof(NF_GEN_MSG_HDR) == 4); >+ > /* Netlink attributes */ > typedef struct _NL_ATTR { > UINT16 nlaLen; >@@ -113,6 +121,7 @@ BUILD_ASSERT_DECL(sizeof(NL_ATTR) == 4); > > #define NLMSG_HDRLEN ((INT) NLMSG_ALIGN(sizeof(NL_MSG_HDR))) > #define GENL_HDRLEN NLMSG_ALIGN(sizeof(GENL_MSG_HDR)) >+#define NF_GEN_MSG_HDRLEN NLMSG_ALIGN(sizeof(NF_GEN_MSG_HDR)) > #define OVS_HDRLEN NLMSG_ALIGN(sizeof(OVS_HDR)) > #define NLA_HDRLEN ((INT) NLA_ALIGN(sizeof(NL_ATTR))) > >-- >2.5.0.windows.1 > >_______________________________________________ >dev mailing list >dev@openvswitch.org >https://urldefense.proofpoint.com/v2/url?u=http-3A__openvswitch.org_mailma >n_listinfo_dev&d=CwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=pN >HQcdr7B40b4h6Yb7FIedI1dnBsxdDuTLBYD3JqV80&m=ZzkqjQjg3Q4DbWawhwkkaFTLf9amIl >DsFBztOwnvRao&s=_u5VachrMIJPE-v7lSRJ15LmzK30ZAk4Rmmd9qLW2MI&e=
diff --git a/datapath-windows/ovsext/Netlink/Netlink.c b/datapath-windows/ovsext/Netlink/Netlink.c index 1eec320..ccf9ec1 100644 --- a/datapath-windows/ovsext/Netlink/Netlink.c +++ b/datapath-windows/ovsext/Netlink/Netlink.c @@ -672,6 +672,17 @@ NlMsgAttrsLen(const PNL_MSG_HDR nlh) return NlHdrPayloadLen(nlh) - GENL_HDRLEN - OVS_HDRLEN; } +/* + * --------------------------------------------------------------------------- + * Returns size of to nfnlmsg attributes. + * --------------------------------------------------------------------------- + */ +UINT32 +NlNfMsgAttrsLen(const PNL_MSG_HDR nlh) +{ + return NlHdrPayloadLen(nlh) - NF_GEN_MSG_HDRLEN - OVS_HDRLEN; +} + /* Netlink message parse. */ /* diff --git a/datapath-windows/ovsext/Netlink/Netlink.h b/datapath-windows/ovsext/Netlink/Netlink.h index b1b3bed..5261b9e 100644 --- a/datapath-windows/ovsext/Netlink/Netlink.h +++ b/datapath-windows/ovsext/Netlink/Netlink.h @@ -27,10 +27,14 @@ */ typedef struct _OVS_MESSAGE { NL_MSG_HDR nlMsg; - GENL_MSG_HDR genlMsg; + union { + GENL_MSG_HDR genlMsg; + NF_GEN_MSG_HDR nfGenMsg; + }; OVS_HDR ovsHdr; /* Variable length nl_attrs follow. */ } OVS_MESSAGE, *POVS_MESSAGE; +BUILD_ASSERT_DECL(sizeof(GENL_MSG_HDR) == sizeof(NF_GEN_MSG_HDR)); /* * Structure of an error message sent as a reply from kernel. @@ -107,6 +111,7 @@ PCHAR NlHdrPayload(const PNL_MSG_HDR nlh); UINT32 NlHdrPayloadLen(const PNL_MSG_HDR nlh); PNL_ATTR NlMsgAttrs(const PNL_MSG_HDR nlh); UINT32 NlMsgAttrsLen(const PNL_MSG_HDR nlh); +UINT32 NlNfMsgAttrsLen(const PNL_MSG_HDR nlh); /* Netlink message parse */ PNL_MSG_HDR NlMsgNext(const PNL_MSG_HDR nlh); @@ -135,7 +140,7 @@ const PNL_ATTR NlAttrFindNested(const PNL_ATTR nla, UINT16 type); BOOLEAN NlAttrParse(const PNL_MSG_HDR nlMsg, UINT32 attrOffset, UINT32 totalAttrLen, const NL_POLICY policy[], - const UINT32 numPolicy, PNL_ATTR attrs[], + const UINT32 numPolicy, PNL_ATTR attrs[], UINT32 numAttrs); BOOLEAN NlAttrParseNested(const PNL_MSG_HDR nlMsg, UINT32 attrOffset, UINT32 totalAttrLen, const NL_POLICY policy[], diff --git a/datapath-windows/ovsext/Netlink/NetlinkProto.h b/datapath-windows/ovsext/Netlink/NetlinkProto.h index f2e9aee..beb14d5 100644 --- a/datapath-windows/ovsext/Netlink/NetlinkProto.h +++ b/datapath-windows/ovsext/Netlink/NetlinkProto.h @@ -98,6 +98,14 @@ typedef struct _GENL_MSG_HDR { } GENL_MSG_HDR, *PGENL_MSG_HDR; BUILD_ASSERT_DECL(sizeof(GENL_MSG_HDR) == 4); +/* Netfilter Generic Message */ +typedef struct _NF_GEN_MSG_HDR { + UINT8 nfgenFamily; /* AF_xxx */ + UINT8 version; /* nfnetlink version */ + UINT16 resId; /* resource id */ +} NF_GEN_MSG_HDR, *PNF_GEN_MSG_HDR; +BUILD_ASSERT_DECL(sizeof(NF_GEN_MSG_HDR) == 4); + /* Netlink attributes */ typedef struct _NL_ATTR { UINT16 nlaLen; @@ -113,6 +121,7 @@ BUILD_ASSERT_DECL(sizeof(NL_ATTR) == 4); #define NLMSG_HDRLEN ((INT) NLMSG_ALIGN(sizeof(NL_MSG_HDR))) #define GENL_HDRLEN NLMSG_ALIGN(sizeof(GENL_MSG_HDR)) +#define NF_GEN_MSG_HDRLEN NLMSG_ALIGN(sizeof(NF_GEN_MSG_HDR)) #define OVS_HDRLEN NLMSG_ALIGN(sizeof(OVS_HDR)) #define NLA_HDRLEN ((INT) NLA_ALIGN(sizeof(NL_ATTR)))