From: Paul Blakey <[email protected]> If a flow was offloaded to a netdev we delete it using netdev flow api.
Signed-off-by: Paul Blakey <[email protected]> Reviewed-by: Roi Dayan <[email protected]> Reviewed-by: Simon Horman <[email protected]> --- lib/dpif-netlink.c | 13 ++++++++++++- lib/netdev.c | 18 ++++++++++++++++++ lib/netdev.h | 2 ++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/lib/dpif-netlink.c b/lib/dpif-netlink.c index fc8bf20..f959ed9 100644 --- a/lib/dpif-netlink.c +++ b/lib/dpif-netlink.c @@ -2145,7 +2145,18 @@ try_send_to_netdev(struct dpif_netlink *dpif, struct dpif_op *op) err = parse_flow_put(dpif, put); break; } - case DPIF_OP_FLOW_DEL: + case DPIF_OP_FLOW_DEL: { + struct dpif_flow_del *del = &op->u.flow_del; + + if (!del->ufid) { + break; + } + dbg_print_flow(del->key, del->key_len, NULL, 0, NULL, 0, + del->ufid, "DEL"); + err = netdev_ports_flow_del(DPIF_HMAP_KEY(&dpif->dpif), del->ufid, + del->stats); + break; + } case DPIF_OP_FLOW_GET: case DPIF_OP_EXECUTE: default: diff --git a/lib/netdev.c b/lib/netdev.c index 41960b6..4311c21 100644 --- a/lib/netdev.c +++ b/lib/netdev.c @@ -2306,6 +2306,24 @@ netdev_ports_flow_dump_create(const void *obj, int *ports) return dumps; } +int +netdev_ports_flow_del(const void *obj, const ovs_u128 *ufid, + struct dpif_flow_stats *stats) +{ + struct port_to_netdev_data *data; + + ovs_mutex_lock(&netdev_hmap_mutex); + HMAP_FOR_EACH(data, node, &port_to_netdev) { + if (data->obj == obj && !netdev_flow_del(data->netdev, ufid, stats)) { + ovs_mutex_unlock(&netdev_hmap_mutex); + return 0; + } + } + ovs_mutex_unlock(&netdev_hmap_mutex); + + return ENOENT; +} + #ifdef __linux__ void netdev_set_flow_api_enabled(const struct smap *ovs_other_config) diff --git a/lib/netdev.h b/lib/netdev.h index 0b2e674..2ddc595 100644 --- a/lib/netdev.h +++ b/lib/netdev.h @@ -190,6 +190,8 @@ odp_port_t netdev_ifindex_to_odp_port(int ifindex); struct netdev_flow_dump **netdev_ports_flow_dump_create(const void *obj, int *ports); void netdev_ports_flow_flush(const void *obj); +int netdev_ports_flow_del(const void *obj, const ovs_u128 *ufid, + struct dpif_flow_stats *stats); /* native tunnel APIs */ /* Structure to pass parameters required to build a tunnel header. */ -- 2.7.4 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
