[ovs-dev] [PATCH V10 10/33] dpif-netlink: Flush added ports using netdev flow api

Roi Dayan roid at mellanox.com
Thu Jun 8 11:46:27 UTC 2017


From: Paul Blakey <paulb at mellanox.com>

If netdev flow offloading is enabled, flush all
added ports using netdev flow api.

Signed-off-by: Paul Blakey <paulb at mellanox.com>
Reviewed-by: Roi Dayan <roid at mellanox.com>
Reviewed-by: Simon Horman <simon.horman at netronome.com>
Acked-by: Flavio Leitner <fbl at sysclose.org>
---
 lib/dpif-netlink.c |  5 +++++
 lib/netdev.c       | 14 ++++++++++++++
 lib/netdev.h       |  1 +
 3 files changed, 20 insertions(+)

diff --git a/lib/dpif-netlink.c b/lib/dpif-netlink.c
index 71b1d5d..f67b3c4 100644
--- a/lib/dpif-netlink.c
+++ b/lib/dpif-netlink.c
@@ -1154,6 +1154,11 @@ dpif_netlink_flow_flush(struct dpif *dpif_)
     dpif_netlink_flow_init(&flow);
     flow.cmd = OVS_FLOW_CMD_DEL;
     flow.dp_ifindex = dpif->dp_ifindex;
+
+    if (netdev_is_flow_api_enabled()) {
+        netdev_ports_flow_flush(DPIF_HMAP_KEY(dpif_));
+    }
+
     return dpif_netlink_flow_transact(&flow, NULL, NULL);
 }
 
diff --git a/lib/netdev.c b/lib/netdev.c
index b0e1abd..7707f40 100644
--- a/lib/netdev.c
+++ b/lib/netdev.c
@@ -2259,6 +2259,20 @@ netdev_ifindex_to_odp_port(int ifindex)
     return ret;
 }
 
+void
+netdev_ports_flow_flush(const void *obj)
+{
+    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_flush(data->netdev);
+        }
+    }
+    ovs_mutex_unlock(&netdev_hmap_mutex);
+}
+
 #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 e59d018..99dfde5 100644
--- a/lib/netdev.h
+++ b/lib/netdev.h
@@ -187,6 +187,7 @@ int netdev_ports_insert(struct netdev *, const void *obj, struct dpif_port *);
 struct netdev *netdev_ports_get(odp_port_t port, const void *obj);
 int netdev_ports_remove(odp_port_t port, const void *obj);
 odp_port_t netdev_ifindex_to_odp_port(int ifindex);
+void netdev_ports_flow_flush(const void *obj);
 
 /* native tunnel APIs */
 /* Structure to pass parameters required to build a tunnel header. */
-- 
2.7.4



More information about the dev mailing list