Message ID | 20201228101903.18186-5-elibr@nvidia.com |
---|---|
State | Accepted |
Headers | show |
Series | netdev datapath flush offloaded flows | expand |
> -----Original Message----- > From: dev <ovs-dev-bounces@openvswitch.org> On Behalf Of Eli Britstein > Sent: Monday 28 December 2020 10:19 > To: dev@openvswitch.org; Ilya Maximets <i.maximets@ovn.org> > Cc: Eli Britstein <elibr@nvidia.com>; Gaetan Rivet <gaetanr@nvidia.com> > Subject: [ovs-dev] [PATCH V3 4/4] netdev-offload-dpdk: Implement flow flush > > Remove all the rules for the specified netdev. > > Signed-off-by: Eli Britstein <elibr@nvidia.com> > Reviewed-by: Gaetan Rivet <gaetanr@nvidia.com> > --- > lib/netdev-offload-dpdk.c | 17 +++++++++++++++++ > 1 file changed, 17 insertions(+) > > diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c index > dece4fd06..c45dd3e90 100644 > --- a/lib/netdev-offload-dpdk.c > +++ b/lib/netdev-offload-dpdk.c > @@ -1585,10 +1585,27 @@ out: > return ret; > } > > +static int > +netdev_offload_dpdk_flow_flush(struct netdev *netdev) { > + struct ufid_to_rte_flow_data *data; > + > + CMAP_FOR_EACH (data, node, &ufid_to_rte_flow) { > + if (data->netdev != netdev) { > + continue; > + } > + > + netdev_offload_dpdk_flow_destroy(data); > + } > + > + return 0; > +} > + > const struct netdev_flow_api netdev_offload_dpdk = { > .type = "dpdk_flow_api", > .flow_put = netdev_offload_dpdk_flow_put, > .flow_del = netdev_offload_dpdk_flow_del, > .init_flow_api = netdev_offload_dpdk_init_flow_api, > .flow_get = netdev_offload_dpdk_flow_get, > + .flow_flush = netdev_offload_dpdk_flow_flush, > }; LGTM. Tested with Intel XL710 Devices. Acked-by: Emma Finn <emma.finn@intel.com> Tested-by: Emma Finn <emma.finn@intel.com> Thanks, Emma > -- > 2.28.0.546.g385c171 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c index dece4fd06..c45dd3e90 100644 --- a/lib/netdev-offload-dpdk.c +++ b/lib/netdev-offload-dpdk.c @@ -1585,10 +1585,27 @@ out: return ret; } +static int +netdev_offload_dpdk_flow_flush(struct netdev *netdev) +{ + struct ufid_to_rte_flow_data *data; + + CMAP_FOR_EACH (data, node, &ufid_to_rte_flow) { + if (data->netdev != netdev) { + continue; + } + + netdev_offload_dpdk_flow_destroy(data); + } + + return 0; +} + const struct netdev_flow_api netdev_offload_dpdk = { .type = "dpdk_flow_api", .flow_put = netdev_offload_dpdk_flow_put, .flow_del = netdev_offload_dpdk_flow_del, .init_flow_api = netdev_offload_dpdk_init_flow_api, .flow_get = netdev_offload_dpdk_flow_get, + .flow_flush = netdev_offload_dpdk_flow_flush, };