Acked-By: Yin Lin <li...@vmware.com> On Mon, Jul 25, 2016 at 5:04 PM, Sairam Venugopal <vsai...@vmware.com> wrote:
> The Hyper-V datapath supports NETLINK_GENERIC and NETLINK_NETFILTER > protocols for netlink communication. Define these two protocols in the > datapath. > > Define new Conntrack events (new and delete) and add support for > subscribing to these events. Parse out OVS_NL_ATTR_MCAST_GRP and store it > as part of OVS_EVENT_SUBSCRIBE structure. > > v2: Squashed patches 2/9 and 5/9 into one. Addressed review comments from > Yin Lin and Alin Serdean > > Signed-off-by: Sairam Venugopal <vsai...@vmware.com> > --- > datapath-windows/ovsext/Datapath.c | 21 ++++++++++++++++++--- > datapath-windows/ovsext/Datapath.h | 3 ++- > datapath-windows/ovsext/DpInternal.h | 16 ++++++++++++++++ > datapath-windows/ovsext/Netlink/NetlinkProto.h | 3 +++ > 4 files changed, 39 insertions(+), 4 deletions(-) > > diff --git a/datapath-windows/ovsext/Datapath.c > b/datapath-windows/ovsext/Datapath.c > index 75f133a..f9f965c 100644 > --- a/datapath-windows/ovsext/Datapath.c > +++ b/datapath-windows/ovsext/Datapath.c > @@ -1273,11 +1273,12 @@ > OvsSubscribeEventCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx, > OVS_EVENT_SUBSCRIBE request; > BOOLEAN rc; > UINT8 join; > + UINT32 mcastGrp; > PNL_ATTR attrs[2]; > const NL_POLICY policy[] = { > [OVS_NL_ATTR_MCAST_GRP] = {.type = NL_A_U32 }, > [OVS_NL_ATTR_MCAST_JOIN] = {.type = NL_A_U8 }, > - }; > + }; > > UNREFERENCED_PARAMETER(replyLen); > > @@ -1293,11 +1294,25 @@ > OvsSubscribeEventCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx, > goto done; > } > > - /* XXX Ignore the MC group for now */ > + mcastGrp = NlAttrGetU32(attrs[OVS_NL_ATTR_MCAST_GRP]); > join = NlAttrGetU8(attrs[OVS_NL_ATTR_MCAST_JOIN]); > request.dpNo = msgIn->ovsHdr.dp_ifindex; > request.subscribe = join; > - request.mask = OVS_EVENT_MASK_ALL; > + request.mcastGrp = mcastGrp; > + request.protocol = instance->protocol; > + request.mask = 0; > + > + /* We currently support Vport and CT related events */ > + if (instance->protocol == NETLINK_GENERIC) { > + request.mask = OVS_EVENT_MASK_ALL; > + } else if (instance->protocol == NETLINK_NETFILTER) { > + if (mcastGrp == NFNLGRP_CONNTRACK_NEW) { > + request.mask = OVS_EVENT_CT_NEW; > + } > + if (mcastGrp == NFNLGRP_CONNTRACK_DESTROY) { > + request.mask = OVS_EVENT_CT_DELETE; > + } > + } > > status = OvsSubscribeEventIoctl(instance->fileObject, &request, > sizeof request); > diff --git a/datapath-windows/ovsext/Datapath.h > b/datapath-windows/ovsext/Datapath.h > index 2b41d82..57b483a 100644 > --- a/datapath-windows/ovsext/Datapath.h > +++ b/datapath-windows/ovsext/Datapath.h > @@ -51,7 +51,8 @@ typedef struct _OVS_OPEN_INSTANCE { > PVOID eventQueue; > POVS_USER_PACKET_QUEUE packetQueue; > UINT32 pid; > - UINT32 protocol; /* Refers to NETLINK Family (eg. NETLINK_GENERIC)*/ > + UINT32 protocol; /* Refers to NETLINK Family (eg. > NETLINK_GENERIC)*/ > + UINT32 mcastMask; /* Mask of subscribed Mcast Groups */ > > struct { > POVS_MESSAGE ovsMsg; /* OVS message passed during dump start. > */ > diff --git a/datapath-windows/ovsext/DpInternal.h > b/datapath-windows/ovsext/DpInternal.h > index 8abe61d..22599a0 100644 > --- a/datapath-windows/ovsext/DpInternal.h > +++ b/datapath-windows/ovsext/DpInternal.h > @@ -310,6 +310,8 @@ typedef struct _OVS_EVENT_SUBSCRIBE { > uint32_t dpNo; > uint32_t subscribe; > uint32_t mask; > + uint32_t mcastGrp; > + uint32_t protocol; > } OVS_EVENT_SUBSCRIBE, *POVS_EVENT_SUBSCRIBE; > > typedef struct _OVS_EVENT_POLL { > @@ -327,6 +329,20 @@ enum { > OVS_EVENT_MASK_ALL = 0x3f, > }; > > +enum { > + OVS_EVENT_CT_NEW = (1 << 0), > + OVS_EVENT_CT_DELETE = (1 << 1), > + OVS_EVENT_CT_MASK_ALL = 0x3 > +}; > + > +/* Supported mcast event groups */ > +enum OVS_MCAST_EVENT_TYPES { > + OVS_MCAST_VPORT_EVENT, > + OVS_MCAST_CT_EVENT, > + __OVS_MCAST_EVENT_TYPES_MAX > +}; > +#define OVS_MCAST_EVENT_TYPES_MAX (__OVS_MCAST_EVENT_TYPES_MAX \ > + - OVS_MCAST_VPORT_EVENT) > > typedef struct _OVS_VPORT_EVENT_ENTRY { > UINT32 portNo; > diff --git a/datapath-windows/ovsext/Netlink/NetlinkProto.h > b/datapath-windows/ovsext/Netlink/NetlinkProto.h > index beb14d5..5175311 100644 > --- a/datapath-windows/ovsext/Netlink/NetlinkProto.h > +++ b/datapath-windows/ovsext/Netlink/NetlinkProto.h > @@ -125,4 +125,7 @@ BUILD_ASSERT_DECL(sizeof(NL_ATTR) == 4); > #define OVS_HDRLEN NLMSG_ALIGN(sizeof(OVS_HDR)) > #define NLA_HDRLEN ((INT) NLA_ALIGN(sizeof(NL_ATTR))) > > +#define NETLINK_NETFILTER 12 > +#define NETLINK_GENERIC 16 > + > #endif /* NetlinProto.h */ > -- > 2.9.0.windows.1 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev