[ovs-dev] [PATCH v2 3/7] datapath-windows: Define new multicast conntrack events and netlink protocol

Alin Serdean aserdean at cloudbasesolutions.com
Tue Jul 26 12:55:50 UTC 2016


Acked-by: Alin Gabriel Serdean <aserdean at cloudbasesolutions.com>


> -----Mesaj original-----
> De la: dev [mailto:dev-bounces at openvswitch.org] În numele Sairam
> Venugopal
> Trimis: Tuesday, July 26, 2016 3:05 AM
> Către: dev at openvswitch.org
> Subiect: [ovs-dev] [PATCH v2 3/7] datapath-windows: Define new multicast
> conntrack events and netlink protocol
> 
> 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 <vsairam at 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 at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev


More information about the dev mailing list