diff mbox

[ovs-dev,5/9] datapath-windows: Define new multicast conntrack events

Message ID 20160713233838.47648-6-vsairam@vmware.com
State Superseded
Delegated to: Guru Shetty
Headers show

Commit Message

Sairam Venugopal July 13, 2016, 11:38 p.m. UTC
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(-)

Comments

Yin Lin July 18, 2016, 6:14 p.m. UTC | #1
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
>
Alin Serdean July 22, 2016, 5:11 p.m. UTC | #2
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
Sairam Venugopal July 22, 2016, 8:14 p.m. UTC | #3
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=

>
Alin Serdean July 23, 2016, 12:59 a.m. UTC | #4
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

> =

> >
Sairam Venugopal July 25, 2016, 6:08 p.m. UTC | #5
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

>> =

>> >

>
Yin Lin July 25, 2016, 10:02 p.m. UTC | #6
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 mbox

Patch

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;