Message ID | 20160713233838.47648-6-vsairam@vmware.com |
---|---|
State | Superseded |
Delegated to: | Guru Shetty |
Headers | show |
Acked-By: Yin Lin <linyi@vmware.com> On Wed, Jul 13, 2016 at 4:38 PM, Sairam Venugopal <vsairam@vmware.com> wrote: > 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. > > Signed-off-by: Sairam Venugopal <vsairam@vmware.com> > --- > datapath-windows/ovsext/Datapath.c | 21 ++++++++++++++++++--- > datapath-windows/ovsext/Datapath.h | 3 ++- > datapath-windows/ovsext/DpInternal.h | 15 +++++++++++++++ > 3 files changed, 35 insertions(+), 4 deletions(-) > > diff --git a/datapath-windows/ovsext/Datapath.c > b/datapath-windows/ovsext/Datapath.c > index e4d6ab1..a5a0b35 100644 > --- a/datapath-windows/ovsext/Datapath.c > +++ b/datapath-windows/ovsext/Datapath.c > @@ -1268,11 +1268,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); > > @@ -1288,11 +1289,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..9641bf6 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,19 @@ enum { > OVS_EVENT_MASK_ALL = 0x3f, > }; > > +enum { > + OVS_EVENT_CT_NEW = ((uint32_t)0x1 << 0), > + OVS_EVENT_CT_DELETE = ((uint32_t)0x1 << 1), > + OVS_EVENT_CT_MASK_ALL = 0x3 > +}; > + > +/* Supported mcast event groups */ > +enum OVS_MCAST_EVENT_ENTRIES { > + OVS_MCAST_VPORT_EVENT, > + OVS_MCAST_CT_EVENT, > + __OVS_MCAST_EVENT_ENTRIES_MAX > +}; > +#define OVS_MCAST_EVENT_ENTRIES_MAX (__OVS_MCAST_EVENT_ENTRIES_MAX - > OVS_MCAST_VPORT_EVENT) > > typedef struct _OVS_VPORT_EVENT_ENTRY { > UINT32 portNo; > -- > 2.9.0.windows.1 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev >
Looks good just one question inlined. > -----Mesaj original----- > De la: dev [mailto:dev-bounces@openvswitch.org] În numele Sairam > Venugopal > Trimis: Thursday, July 14, 2016 2:39 AM > Către: dev@openvswitch.org > Subiect: [ovs-dev] [PATCH 5/9] datapath-windows: Define new multicast > conntrack events > > 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. > > Signed-off-by: Sairam Venugopal <vsairam@vmware.com> > --- > datapath-windows/ovsext/Datapath.c | 21 ++++++++++++++++++--- > datapath-windows/ovsext/Datapath.h | 3 ++- > datapath-windows/ovsext/DpInternal.h | 15 +++++++++++++++ > 3 files changed, 35 insertions(+), 4 deletions(-) > > +enum { > + OVS_EVENT_CT_NEW = ((uint32_t)0x1 << 0), > + OVS_EVENT_CT_DELETE = ((uint32_t)0x1 << 1), > + OVS_EVENT_CT_MASK_ALL = 0x3 [Alin Gabriel Serdean: ] Any particular reason for not using: 1 << 0, 1 << 1, 1 << 2, etc? > +}; > + > +/* Supported mcast event groups */ > +enum OVS_MCAST_EVENT_ENTRIES { > + OVS_MCAST_VPORT_EVENT, > + OVS_MCAST_CT_EVENT, > + __OVS_MCAST_EVENT_ENTRIES_MAX > +}; > +#define OVS_MCAST_EVENT_ENTRIES_MAX > (__OVS_MCAST_EVENT_ENTRIES_MAX - > +OVS_MCAST_VPORT_EVENT) > > typedef struct _OVS_VPORT_EVENT_ENTRY { > UINT32 portNo; > -- > 2.9.0.windows.1 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev
Yes, I wanted to keep it similar to the VPORT events: enum { OVS_EVENT_CONNECT = ((uint32_t)0x1 << 0), OVS_EVENT_DISCONNECT = ((uint32_t)0x1 << 1), OVS_EVENT_LINK_UP = ((uint32_t)0x1 << 2), OVS_EVENT_LINK_DOWN = ((uint32_t)0x1 << 3), OVS_EVENT_MAC_CHANGE = ((uint32_t)0x1 << 4), OVS_EVENT_MTU_CHANGE = ((uint32_t)0x1 << 5), OVS_EVENT_MASK_ALL = 0x3f, }; As you can see, we need to update these EVENT_FOO to EVENT_VPORT_FOO. On 7/22/16, 10:11 AM, "Alin Serdean" <aserdean@cloudbasesolutions.com> wrote: >Looks good just one question inlined. > > > >> -----Mesaj original----- > >> De la: dev [mailto:dev-bounces@openvswitch.org] În numele Sairam > >> Venugopal > >> Trimis: Thursday, July 14, 2016 2:39 AM > >> Către: dev@openvswitch.org > >> Subiect: [ovs-dev] [PATCH 5/9] datapath-windows: Define new multicast > >> conntrack events > >> > >> 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. > >> > >> Signed-off-by: Sairam Venugopal <vsairam@vmware.com> > >> --- > >> datapath-windows/ovsext/Datapath.c | 21 ++++++++++++++++++--- > >> datapath-windows/ovsext/Datapath.h | 3 ++- > >> datapath-windows/ovsext/DpInternal.h | 15 +++++++++++++++ > >> 3 files changed, 35 insertions(+), 4 deletions(-) > >> > > > >> +enum { > >> + OVS_EVENT_CT_NEW = ((uint32_t)0x1 << 0), > >> + OVS_EVENT_CT_DELETE = ((uint32_t)0x1 << 1), > >> + OVS_EVENT_CT_MASK_ALL = 0x3 > > > >[Alin Gabriel Serdean: ] Any particular reason for not using: 1 << 0, 1 ><< 1, 1 << 2, etc? > >> +}; > >> + > >> +/* Supported mcast event groups */ > >> +enum OVS_MCAST_EVENT_ENTRIES { > >> + OVS_MCAST_VPORT_EVENT, > >> + OVS_MCAST_CT_EVENT, > >> + __OVS_MCAST_EVENT_ENTRIES_MAX > >> +}; > >> +#define OVS_MCAST_EVENT_ENTRIES_MAX > >> (__OVS_MCAST_EVENT_ENTRIES_MAX - > >> +OVS_MCAST_VPORT_EVENT) > >> > >> typedef struct _OVS_VPORT_EVENT_ENTRY { > >> UINT32 portNo; > >> -- > >> 2.9.0.windows.1 > >> > >> _______________________________________________ > >> dev mailing list > >> dev@openvswitch.org > >> >>https://urldefense.proofpoint.com/v2/url?u=http-3A__openvswitch.org_mailm >>an_listinfo_dev&d=CwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r= >>Dcruz40PROJ40ROzSpxyQSLw6fcrOWpJgEcEmNR3JEQ&m=iSTxSaNGMjpm4rJ9g61SytrFDZZ >>UmN9pPUtTtra_Jio&s=C57tzRDXzgUTFoJQMs5YrgcOVl_5UQLicoBzRg2b7lI&e= >
It looks like a mistake was done when setting them up, don't know if it such a good idea to propagate it. Thanks, Alin. > -----Mesaj original----- > De la: Sairam Venugopal [mailto:vsairam@vmware.com] > Trimis: Friday, July 22, 2016 11:15 PM > Către: Alin Serdean <aserdean@cloudbasesolutions.com>; > dev@openvswitch.org > Subiect: Re: [ovs-dev] [PATCH 5/9] datapath-windows: Define new multicast > conntrack events > > Yes, I wanted to keep it similar to the VPORT events: > > enum { > OVS_EVENT_CONNECT = ((uint32_t)0x1 << 0), > OVS_EVENT_DISCONNECT = ((uint32_t)0x1 << 1), > OVS_EVENT_LINK_UP = ((uint32_t)0x1 << 2), > OVS_EVENT_LINK_DOWN = ((uint32_t)0x1 << 3), > OVS_EVENT_MAC_CHANGE = ((uint32_t)0x1 << 4), > OVS_EVENT_MTU_CHANGE = ((uint32_t)0x1 << 5), > OVS_EVENT_MASK_ALL = 0x3f, > }; > > > > > As you can see, we need to update these EVENT_FOO to > EVENT_VPORT_FOO. > > > On 7/22/16, 10:11 AM, "Alin Serdean" <aserdean@cloudbasesolutions.com> > wrote: > > >Looks good just one question inlined. > > > > > > > >> -----Mesaj original----- > > > >> De la: dev [mailto:dev-bounces@openvswitch.org] În numele Sairam > > > >> Venugopal > > > >> Trimis: Thursday, July 14, 2016 2:39 AM > > > >> Către: dev@openvswitch.org > > > >> Subiect: [ovs-dev] [PATCH 5/9] datapath-windows: Define new multicast > > > >> conntrack events > > > >> > > > >> 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. > > > >> > > > >> Signed-off-by: Sairam Venugopal <vsairam@vmware.com> > > > >> --- > > > >> datapath-windows/ovsext/Datapath.c | 21 ++++++++++++++++++--- > > > >> datapath-windows/ovsext/Datapath.h | 3 ++- > > > >> datapath-windows/ovsext/DpInternal.h | 15 +++++++++++++++ > > > >> 3 files changed, 35 insertions(+), 4 deletions(-) > > > >> > > > > > > > >> +enum { > > > >> + OVS_EVENT_CT_NEW = ((uint32_t)0x1 << 0), > > > >> + OVS_EVENT_CT_DELETE = ((uint32_t)0x1 << 1), > > > >> + OVS_EVENT_CT_MASK_ALL = 0x3 > > > > > > > >[Alin Gabriel Serdean: ] Any particular reason for not using: 1 << 0, 1 > ><< 1, 1 << 2, etc? > > > >> +}; > > > >> + > > > >> +/* Supported mcast event groups */ > > > >> +enum OVS_MCAST_EVENT_ENTRIES { > > > >> + OVS_MCAST_VPORT_EVENT, > > > >> + OVS_MCAST_CT_EVENT, > > > >> + __OVS_MCAST_EVENT_ENTRIES_MAX > > > >> +}; > > > >> +#define OVS_MCAST_EVENT_ENTRIES_MAX > > > >> (__OVS_MCAST_EVENT_ENTRIES_MAX - > > > >> +OVS_MCAST_VPORT_EVENT) > > > >> > > > >> typedef struct _OVS_VPORT_EVENT_ENTRY { > > > >> UINT32 portNo; > > > >> -- > > > >> 2.9.0.windows.1 > > > >> > > > >> _______________________________________________ > > > >> dev mailing list > > > >> dev@openvswitch.org > > > >> > >>https://urldefense.proofpoint.com/v2/url?u=http- > 3A__openvswitch.org_ma > >>ilm > >>an_listinfo_dev&d=CwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw- > YihVMNtXt-uEs > >>&r= > >>Dcruz40PROJ40ROzSpxyQSLw6fcrOWpJgEcEmNR3JEQ&m=iSTxSaNGMjpm > 4rJ9g61SytrF > >>DZZ > UmN9pPUtTtra_Jio&s=C57tzRDXzgUTFoJQMs5YrgcOVl_5UQLicoBzRg2b7lI&e > = > >
I will update the current one and make a note to update VPORT usage as well. On 7/22/16, 5:59 PM, "Alin Serdean" <aserdean@cloudbasesolutions.com> wrote: >It looks like a mistake was done when setting them up, don't know if it >such a good idea to propagate it. > >Thanks, >Alin. > >> -----Mesaj original----- >> De la: Sairam Venugopal [mailto:vsairam@vmware.com] >> Trimis: Friday, July 22, 2016 11:15 PM >> Către: Alin Serdean <aserdean@cloudbasesolutions.com>; >> dev@openvswitch.org >> Subiect: Re: [ovs-dev] [PATCH 5/9] datapath-windows: Define new >>multicast >> conntrack events >> >> Yes, I wanted to keep it similar to the VPORT events: >> >> enum { >> OVS_EVENT_CONNECT = ((uint32_t)0x1 << 0), >> OVS_EVENT_DISCONNECT = ((uint32_t)0x1 << 1), >> OVS_EVENT_LINK_UP = ((uint32_t)0x1 << 2), >> OVS_EVENT_LINK_DOWN = ((uint32_t)0x1 << 3), >> OVS_EVENT_MAC_CHANGE = ((uint32_t)0x1 << 4), >> OVS_EVENT_MTU_CHANGE = ((uint32_t)0x1 << 5), >> OVS_EVENT_MASK_ALL = 0x3f, >> }; >> >> >> >> >> As you can see, we need to update these EVENT_FOO to >> EVENT_VPORT_FOO. >> >> >> On 7/22/16, 10:11 AM, "Alin Serdean" <aserdean@cloudbasesolutions.com> >> wrote: >> >> >Looks good just one question inlined. >> > >> > >> > >> >> -----Mesaj original----- >> > >> >> De la: dev [mailto:dev-bounces@openvswitch.org] În numele Sairam >> > >> >> Venugopal >> > >> >> Trimis: Thursday, July 14, 2016 2:39 AM >> > >> >> Către: dev@openvswitch.org >> > >> >> Subiect: [ovs-dev] [PATCH 5/9] datapath-windows: Define new multicast >> > >> >> conntrack events >> > >> >> >> > >> >> 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. >> > >> >> >> > >> >> Signed-off-by: Sairam Venugopal <vsairam@vmware.com> >> > >> >> --- >> > >> >> datapath-windows/ovsext/Datapath.c | 21 ++++++++++++++++++--- >> > >> >> datapath-windows/ovsext/Datapath.h | 3 ++- >> > >> >> datapath-windows/ovsext/DpInternal.h | 15 +++++++++++++++ >> > >> >> 3 files changed, 35 insertions(+), 4 deletions(-) >> > >> >> >> > >> > >> > >> >> +enum { >> > >> >> + OVS_EVENT_CT_NEW = ((uint32_t)0x1 << 0), >> > >> >> + OVS_EVENT_CT_DELETE = ((uint32_t)0x1 << 1), >> > >> >> + OVS_EVENT_CT_MASK_ALL = 0x3 >> > >> > >> > >> >[Alin Gabriel Serdean: ] Any particular reason for not using: 1 << 0, 1 >> ><< 1, 1 << 2, etc? >> > >> >> +}; >> > >> >> + >> > >> >> +/* Supported mcast event groups */ >> > >> >> +enum OVS_MCAST_EVENT_ENTRIES { >> > >> >> + OVS_MCAST_VPORT_EVENT, >> > >> >> + OVS_MCAST_CT_EVENT, >> > >> >> + __OVS_MCAST_EVENT_ENTRIES_MAX >> > >> >> +}; >> > >> >> +#define OVS_MCAST_EVENT_ENTRIES_MAX >> > >> >> (__OVS_MCAST_EVENT_ENTRIES_MAX - >> > >> >> +OVS_MCAST_VPORT_EVENT) >> > >> >> >> > >> >> typedef struct _OVS_VPORT_EVENT_ENTRY { >> > >> >> UINT32 portNo; >> > >> >> -- >> > >> >> 2.9.0.windows.1 >> > >> >> >> > >> >> _______________________________________________ >> > >> >> dev mailing list >> > >> >> dev@openvswitch.org >> > >> >> >> >>https://urldefense.proofpoint.com/v2/url?u=http- >> 3A__openvswitch.org_ma >> >>ilm >> >>an_listinfo_dev&d=CwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw- >> YihVMNtXt-uEs >> >>&r= >> >>Dcruz40PROJ40ROzSpxyQSLw6fcrOWpJgEcEmNR3JEQ&m=iSTxSaNGMjpm >> 4rJ9g61SytrF >> >>DZZ >> UmN9pPUtTtra_Jio&s=C57tzRDXzgUTFoJQMs5YrgcOVl_5UQLicoBzRg2b7lI&e >> = >> > >
Hi Sai, After looking at your follow up patches, I feel it's better to rename OVS_MCAST_EVENT_ENTRIES as OVS_MCAST_EVENT_TYPE, and rename OVS_MCAST_EVENT_ENTRIES_MAX as OVS_MCAST_EVENT_TYPES_MAX. At first glance, event_entries_max seems to suggest the maximum number of events in a queue, which is not the case. Best regards, Yin Lin On Wed, Jul 13, 2016 at 4:38 PM, Sairam Venugopal <vsairam@vmware.com> wrote: > 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. > > Signed-off-by: Sairam Venugopal <vsairam@vmware.com> > --- > datapath-windows/ovsext/Datapath.c | 21 ++++++++++++++++++--- > datapath-windows/ovsext/Datapath.h | 3 ++- > datapath-windows/ovsext/DpInternal.h | 15 +++++++++++++++ > 3 files changed, 35 insertions(+), 4 deletions(-) > > diff --git a/datapath-windows/ovsext/Datapath.c > b/datapath-windows/ovsext/Datapath.c > index e4d6ab1..a5a0b35 100644 > --- a/datapath-windows/ovsext/Datapath.c > +++ b/datapath-windows/ovsext/Datapath.c > @@ -1268,11 +1268,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); > > @@ -1288,11 +1289,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..9641bf6 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,19 @@ enum { > OVS_EVENT_MASK_ALL = 0x3f, > }; > > +enum { > + OVS_EVENT_CT_NEW = ((uint32_t)0x1 << 0), > + OVS_EVENT_CT_DELETE = ((uint32_t)0x1 << 1), > + OVS_EVENT_CT_MASK_ALL = 0x3 > +}; > + > +/* Supported mcast event groups */ > +enum OVS_MCAST_EVENT_ENTRIES { > + OVS_MCAST_VPORT_EVENT, > + OVS_MCAST_CT_EVENT, > + __OVS_MCAST_EVENT_ENTRIES_MAX > +}; > +#define OVS_MCAST_EVENT_ENTRIES_MAX (__OVS_MCAST_EVENT_ENTRIES_MAX - > OVS_MCAST_VPORT_EVENT) > > typedef struct _OVS_VPORT_EVENT_ENTRY { > UINT32 portNo; > -- > 2.9.0.windows.1 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev >
diff --git a/datapath-windows/ovsext/Datapath.c b/datapath-windows/ovsext/Datapath.c index e4d6ab1..a5a0b35 100644 --- a/datapath-windows/ovsext/Datapath.c +++ b/datapath-windows/ovsext/Datapath.c @@ -1268,11 +1268,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); @@ -1288,11 +1289,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..9641bf6 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,19 @@ enum { OVS_EVENT_MASK_ALL = 0x3f, }; +enum { + OVS_EVENT_CT_NEW = ((uint32_t)0x1 << 0), + OVS_EVENT_CT_DELETE = ((uint32_t)0x1 << 1), + OVS_EVENT_CT_MASK_ALL = 0x3 +}; + +/* Supported mcast event groups */ +enum OVS_MCAST_EVENT_ENTRIES { + OVS_MCAST_VPORT_EVENT, + OVS_MCAST_CT_EVENT, + __OVS_MCAST_EVENT_ENTRIES_MAX +}; +#define OVS_MCAST_EVENT_ENTRIES_MAX (__OVS_MCAST_EVENT_ENTRIES_MAX - OVS_MCAST_VPORT_EVENT) typedef struct _OVS_VPORT_EVENT_ENTRY { UINT32 portNo;
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. Signed-off-by: Sairam Venugopal <vsairam@vmware.com> --- datapath-windows/ovsext/Datapath.c | 21 ++++++++++++++++++--- datapath-windows/ovsext/Datapath.h | 3 ++- datapath-windows/ovsext/DpInternal.h | 15 +++++++++++++++ 3 files changed, 35 insertions(+), 4 deletions(-)