git sha: 5892398e41ffddcb1b76c9ce7dc7b65e939a93b1
Author: Eelco Chaudron <[email protected]>
Subject: dpif-netlink: Remove netlink-offload integration.

This commit removes the legacy integration between dpif-netlink and
netlink-offload, eliminating netdev flow dump structures and APIs as
tc flow offload is now handled through dpif-offload.

> diff --git a/lib/dpif-netlink.c b/lib/dpif-netlink.c
> index 90e92d3a0..8a9acc904 100644
> --- a/lib/dpif-netlink.c
> +++ b/lib/dpif-netlink.c
> @@ -79,7 +79,6 @@ enum { MAX_PORTS = USHRT_MAX };
>   * missing if we have old headers. */
>  #define ETH_FLAG_LRO      (1 << 15)    /* LRO is enabled */
>  
> -#define FLOW_DUMP_MAX_BATCH 50
>  #define OPERATE_MAX_OPS 50
>  
>  #ifndef EPOLLEXCLUSIVE

[ ... ]

> @@ -1602,11 +1601,6 @@ struct dpif_netlink_flow_dump {
>      struct dpif_flow_dump up;
>      struct nl_dump nl_dump;
>      atomic_int status;
> -    struct netdev_flow_dump **netdev_dumps;
> -    int netdev_dumps_num;                    /* Number of netdev_flow_dumps 
> */
> -    struct ovs_mutex netdev_lock;            /* Guards the following. */
> -    int netdev_current_dump OVS_GUARDED;     /* Shared current dump */
> -    struct dpif_flow_dump_types types;       /* Type of dump */
>  };

[ ... ]

> @@ -1655,39 +1609,6 @@ dpif_netlink_flow_dump_cast(struct dpif_flow_dump 
> *dump)
>      return CONTAINER_OF(dump, struct dpif_netlink_flow_dump, up);
>  }
>  
> -static void
> -start_netdev_dump(const struct dpif *dpif_,
> -                  struct dpif_netlink_flow_dump *dump)
> -{
> -    ovs_mutex_init(&dump->netdev_lock);
> -
> -    if (!(dump->types.offloaded_flows)) {
> -        dump->netdev_dumps_num = 0;
> -        dump->netdev_dumps = NULL;
> -        return;
> -    }
> -
> -    ovs_mutex_lock(&dump->netdev_lock);
> -    dump->netdev_current_dump = 0;
> -    dump->netdev_dumps
> -        = 
> netdev_ports_flow_dump_create(dpif_normalize_type(dpif_type(dpif_)),
> -                                        &dump->netdev_dumps_num,
> -                                        dump->up.terse);
> -    ovs_mutex_unlock(&dump->netdev_lock);
> -}
> -

[ ... ]

> @@ -1660,24 +1621,18 @@ dpif_netlink_flow_dump_create(const struct dpif 
> *dpif_, bool terse,
>      dump = xmalloc(sizeof *dump);
>      dpif_flow_dump_init(&dump->up, dpif_, terse, types);
>  
> -    dpif_netlink_populate_flow_dump_types(dump, types);
> -
> -    if (dump->types.ovs_flows) {
> -        dpif_netlink_flow_init(&request);
> -        request.cmd = OVS_FLOW_CMD_GET;
> -        request.dp_ifindex = dpif->dp_ifindex;
> -        request.ufid_present = false;
> -        request.ufid_terse = terse;
> +    dpif_netlink_flow_init(&request);
> +    request.cmd = OVS_FLOW_CMD_GET;
> +    request.dp_ifindex = dpif->dp_ifindex;
> +    request.ufid_present = false;
> +    request.ufid_terse = terse;
>  
> -        buf = ofpbuf_new(1024);
> -        dpif_netlink_flow_to_ofpbuf(&request, buf);
> -        nl_dump_start(&dump->nl_dump, NETLINK_GENERIC, buf);
> -        ofpbuf_delete(buf);
> -    }
> +    buf = ofpbuf_new(1024);
> +    dpif_netlink_flow_to_ofpbuf(&request, buf);
> +    nl_dump_start(&dump->nl_dump, NETLINK_GENERIC, buf);
> +    ofpbuf_delete(buf);
>      atomic_init(&dump->status, 0);
>  
> -    start_netdev_dump(dpif_, dump);
> -

With the removal of the types parameter handling, will this function
still respect the types argument passed in from callers? The types
parameter is still accepted but now completely ignored.

[ ... ]

> @@ -1685,24 +1640,9 @@ static int
>  dpif_netlink_flow_dump_destroy(struct dpif_flow_dump *dump_)
>  {
>      struct dpif_netlink_flow_dump *dump = dpif_netlink_flow_dump_cast(dump_);
> -    unsigned int nl_status = 0;
> +    unsigned int nl_status = nl_dump_done(&dump->nl_dump);
>      int dump_status;
>  
> -    if (dump->types.ovs_flows) {
> -        nl_status = nl_dump_done(&dump->nl_dump);
> -    }
> -
> -    for (int i = 0; i < dump->netdev_dumps_num; i++) {
> -        int err = netdev_flow_dump_destroy(dump->netdev_dumps[i]);
> -
> -        if (err != 0 && err != EOPNOTSUPP) {
> -            VLOG_ERR("failed dumping netdev: %s", ovs_strerror(err));
> -        }
> -    }
> -
> -    free(dump->netdev_dumps);
> -    ovs_mutex_destroy(&dump->netdev_lock);
> -

[ ... ]

> diff --git a/lib/dpif-offload-tc.c b/lib/dpif-offload-tc.c
> index c74bfb52e..e2e18b5b1 100644
> --- a/lib/dpif-offload-tc.c
> +++ b/lib/dpif-offload-tc.c
> @@ -48,7 +48,7 @@ struct dpif_offload_tc_flow_dump {
>      struct ovs_mutex netdev_dump_mutex;
>      size_t netdev_dump_index;
>      size_t netdev_dump_count;
> -    struct netdev_flow_dump *netdev_dumps[];
> +    struct netdev_tc_flow_dump *netdev_dumps[];
>  };

[ ... ]

> diff --git a/lib/netdev-offload-provider.h b/lib/netdev-offload-provider.h
> index f762af19a..6af97a723 100644
> --- a/lib/netdev-offload-provider.h
> +++ b/lib/netdev-offload-provider.h
> @@ -31,29 +31,6 @@ extern "C" {
>  struct netdev_flow_api {
>      char *type;
>  
> -    /* Flow dumping interface.
> -     *
> -     * This is the back-end for the flow dumping interface described in
> -     * dpif.h.  Please read the comments there first, because this code
> -     * closely follows it.
> -     *
> -     * On success returns 0 and allocates data, on failure returns
> -     * positive errno. */
> -    int (*flow_dump_create)(struct netdev *, struct netdev_flow_dump **dump,
> -                            bool terse);
> -    int (*flow_dump_destroy)(struct netdev_flow_dump *);
> -
> -    /* Returns true if there are more flows to dump.
> -     * 'rbuffer' is used as a temporary buffer and needs to be pre allocated
> -     * by the caller.  While there are more flows the same 'rbuffer'
> -     * should be provided. 'wbuffer' is used to store dumped actions and 
> needs
> -     * to be pre allocated by the caller. */
> -    bool (*flow_dump_next)(struct netdev_flow_dump *, struct match *,
> -                           struct nlattr **actions,
> -                           struct dpif_flow_stats *stats,
> -                           struct dpif_flow_attrs *attrs, ovs_u128 *ufid,
> -                           struct ofpbuf *rbuffer, struct ofpbuf *wbuffer);
> -

[ ... ]

> diff --git a/lib/netdev-offload-tc.h b/lib/netdev-offload-tc.h
> index d628e42ba..e4740c799 100644
> --- a/lib/netdev-offload-tc.h
> +++ b/lib/netdev-offload-tc.h
> @@ -21,13 +21,22 @@
>  struct dpif_offload;
>  struct netdev;
>  
> +/* Per Netdev flow dump structure. */
> +struct netdev_tc_flow_dump {
> +    struct nl_dump *nl_dump;
> +    struct netdev *netdev;
> +    odp_port_t port;
> +    bool terse;
> +};
> +

[ ... ]

> diff --git a/lib/netdev-offload.h b/lib/netdev-offload.h
> index 6006396b9..5570d5b71 100644
> --- a/lib/netdev-offload.h
> +++ b/lib/netdev-offload.h
> @@ -60,13 +60,6 @@ enum hw_info_type {
>      HW_INFO_TYPE_OFFL_COUNT = 3              /* Offloaded flow count */
>  };
>  
> -struct netdev_flow_dump {
> -    struct netdev *netdev;
> -    odp_port_t port;
> -    bool terse;
> -    struct nl_dump *nl_dump;
> -};
> -

Why does the new netdev_tc_flow_dump structure in netdev-offload-tc.h
have the same fields but reorder nl_dump to be first while the old
netdev_flow_dump had it last? Could this field ordering difference
cause compatibility issues?
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to