[ovs-dev] [PATCH V3 4/4] dpif-netdev: Log flow modification in debug level

Eli Britstein elibr at nvidia.com
Mon Jul 26 08:14:55 UTC 2021


Log flow modifications to help debugging.

Signed-off-by: Eli Britstein <elibr at nvidia.com>
Reviewed-by: Gaetan Rivet <gaetanr at nvidia.com>
---
 lib/dpif-netdev.c | 114 +++++++++++++++++++++++++++-------------------
 1 file changed, 68 insertions(+), 46 deletions(-)

diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
index 6a7bed840..4002bfb4e 100644
--- a/lib/dpif-netdev.c
+++ b/lib/dpif-netdev.c
@@ -2710,6 +2710,71 @@ queue_netdev_flow_del(struct dp_netdev_pmd_thread *pmd,
     dp_netdev_append_flow_offload(offload);
 }
 
+static void
+dump_netdev_flow_change(struct dp_netdev_flow *flow,
+                        struct match *match,
+                        const struct dp_netdev_actions *old_actions,
+                        const struct nlattr *actions,
+                        size_t actions_len)
+{
+    struct ds ds = DS_EMPTY_INITIALIZER;
+    struct ofpbuf key_buf, mask_buf;
+    struct odp_flow_key_parms odp_parms = {
+        .flow = &match->flow,
+        .mask = &match->wc.masks,
+        .support = dp_netdev_support,
+    };
+
+    if (OVS_LIKELY(VLOG_DROP_DBG((&upcall_rl)))) {
+        return;
+    }
+
+    ofpbuf_init(&key_buf, 0);
+    ofpbuf_init(&mask_buf, 0);
+
+    odp_flow_key_from_flow(&odp_parms, &key_buf);
+    odp_parms.key_buf = &key_buf;
+    odp_flow_key_from_mask(&odp_parms, &mask_buf);
+
+    if (old_actions) {
+        ds_put_cstr(&ds, "flow_mod: ");
+    } else {
+        ds_put_cstr(&ds, "flow_add: ");
+    }
+    odp_format_ufid(&flow->ufid, &ds);
+    ds_put_cstr(&ds, " mega_");
+    odp_format_ufid(&flow->mega_ufid, &ds);
+    ds_put_cstr(&ds, " ");
+    odp_flow_format(key_buf.data, key_buf.size,
+                    mask_buf.data, mask_buf.size,
+                    NULL, &ds, false);
+    if (old_actions) {
+        ds_put_cstr(&ds, ", old_actions:");
+        format_odp_actions(&ds, old_actions->actions, old_actions->size,
+                           NULL);
+    }
+    ds_put_cstr(&ds, ", actions:");
+    format_odp_actions(&ds, actions, actions_len, NULL);
+
+    VLOG_DBG("%s", ds_cstr(&ds));
+
+    ofpbuf_uninit(&key_buf);
+    ofpbuf_uninit(&mask_buf);
+
+    /* Add a printout of the actual match installed. */
+    struct match m;
+    ds_clear(&ds);
+    ds_put_cstr(&ds, "flow match: ");
+    miniflow_expand(&flow->cr.flow.mf, &m.flow);
+    miniflow_expand(&flow->cr.mask->mf, &m.wc.masks);
+    memset(&m.tun_md, 0, sizeof m.tun_md);
+    match_format(&m, NULL, &ds, OFP_DEFAULT_PRIORITY);
+
+    VLOG_DBG("%s", ds_cstr(&ds));
+
+    ds_destroy(&ds);
+}
+
 static void
 queue_netdev_flow_put(struct dp_netdev_pmd_thread *pmd,
                       struct dp_netdev_flow *flow, struct match *match,
@@ -3581,52 +3646,7 @@ dp_netdev_flow_add(struct dp_netdev_pmd_thread *pmd,
 
     queue_netdev_flow_put(pmd, flow, match, actions, actions_len,
                           orig_in_port, DP_NETDEV_FLOW_OFFLOAD_OP_ADD);
-
-    if (OVS_UNLIKELY(!VLOG_DROP_DBG((&upcall_rl)))) {
-        struct ds ds = DS_EMPTY_INITIALIZER;
-        struct ofpbuf key_buf, mask_buf;
-        struct odp_flow_key_parms odp_parms = {
-            .flow = &match->flow,
-            .mask = &match->wc.masks,
-            .support = dp_netdev_support,
-        };
-
-        ofpbuf_init(&key_buf, 0);
-        ofpbuf_init(&mask_buf, 0);
-
-        odp_flow_key_from_flow(&odp_parms, &key_buf);
-        odp_parms.key_buf = &key_buf;
-        odp_flow_key_from_mask(&odp_parms, &mask_buf);
-
-        ds_put_cstr(&ds, "flow_add: ");
-        odp_format_ufid(ufid, &ds);
-        ds_put_cstr(&ds, " mega_");
-        odp_format_ufid(&flow->mega_ufid, &ds);
-        ds_put_cstr(&ds, " ");
-        odp_flow_format(key_buf.data, key_buf.size,
-                        mask_buf.data, mask_buf.size,
-                        NULL, &ds, false);
-        ds_put_cstr(&ds, ", actions:");
-        format_odp_actions(&ds, actions, actions_len, NULL);
-
-        VLOG_DBG("%s", ds_cstr(&ds));
-
-        ofpbuf_uninit(&key_buf);
-        ofpbuf_uninit(&mask_buf);
-
-        /* Add a printout of the actual match installed. */
-        struct match m;
-        ds_clear(&ds);
-        ds_put_cstr(&ds, "flow match: ");
-        miniflow_expand(&flow->cr.flow.mf, &m.flow);
-        miniflow_expand(&flow->cr.mask->mf, &m.wc.masks);
-        memset(&m.tun_md, 0, sizeof m.tun_md);
-        match_format(&m, NULL, &ds, OFP_DEFAULT_PRIORITY);
-
-        VLOG_DBG("%s", ds_cstr(&ds));
-
-        ds_destroy(&ds);
-    }
+    dump_netdev_flow_change(flow, match, NULL, actions, actions_len);
 
     return flow;
 }
@@ -3669,6 +3689,8 @@ flow_put_on_pmd(struct dp_netdev_pmd_thread *pmd,
             queue_netdev_flow_put(pmd, netdev_flow, match,
                                   put->actions, put->actions_len, ODPP_NONE,
                                   DP_NETDEV_FLOW_OFFLOAD_OP_MOD);
+            dump_netdev_flow_change(netdev_flow, match, old_actions,
+                                    put->actions, put->actions_len);
 
             if (stats) {
                 get_dpif_flow_status(pmd->dp, netdev_flow, stats, NULL);
-- 
2.28.0.2311.g225365fb51



More information about the dev mailing list