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