[ovs-dev] [PATCH ovs V2 15/21] dpif-netlink: delete a flow from netdev
Paul Blakey
paulb at mellanox.com
Sun Dec 25 11:39:43 UTC 2016
If a flow was offloaded to a netdev we delete it using netdev
flow api.
Signed-off-by: Paul Blakey <paulb at mellanox.com>
Reviewed-by: Roi Dayan <roid at mellanox.com>
---
lib/dpif-netlink.c | 30 +++++++++++++++++++++++++++++-
1 file changed, 29 insertions(+), 1 deletion(-)
diff --git a/lib/dpif-netlink.c b/lib/dpif-netlink.c
index 717af90..f8cc59d 100644
--- a/lib/dpif-netlink.c
+++ b/lib/dpif-netlink.c
@@ -2056,6 +2056,25 @@ parse_flow_put(struct dpif_netlink *dpif, struct dpif_flow_put *put)
return false;
}
+static bool
+parse_flow_del(struct dpif_netlink *dpif, struct dpif_flow_del *del)
+{
+ bool ret = false;
+ struct ovs_list port_list;
+ struct netdev_list_element *element;
+
+ netdev_hmap_port_get_list(dpif->dpif.dpif_class, &port_list);
+ LIST_FOR_EACH(element, node, &port_list) {
+ if (!netdev_flow_del(element->netdev, del->stats,
+ CONST_CAST(ovs_u128 *, del->ufid))) {
+ ret = true;
+ break;
+ }
+ }
+ netdev_port_list_del(&port_list);
+ return ret;
+}
+
static void
dbg_print_flow(const struct nlattr *key, size_t key_len,
const struct nlattr *mask, size_t mask_len,
@@ -2098,7 +2117,16 @@ try_send_to_netdev(struct dpif_netlink *dpif, struct dpif_op *op)
put->actions, put->actions_len, put->ufid, "PUT");
return parse_flow_put(dpif, put);
}
- case DPIF_OP_FLOW_DEL:
+ case DPIF_OP_FLOW_DEL: {
+ struct dpif_flow_del *del = &op->u.flow_del;
+
+ if (!del->ufid) {
+ return false;
+ }
+ dbg_print_flow(del->key, del->key_len, NULL, 0, NULL, 0,
+ del->ufid, "DEL");
+ return parse_flow_del(dpif, del);
+ }
case DPIF_OP_FLOW_GET:
case DPIF_OP_EXECUTE:
default:
--
1.8.3.1
More information about the dev
mailing list