This commit makes the ofproto/dpif command show the "Relevant fields"
of each resubmit.

Signed-off-by: Alex Wang <al...@nicira.com>
---
 ofproto/ofproto-dpif.c |   22 ++++++++++++++++------
 tests/ofproto-dpif.at  |   35 +++++++++++++++++++++++++++++++++++
 2 files changed, 51 insertions(+), 6 deletions(-)

diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c
index 8a7f47c..4ba273b 100644
--- a/ofproto/ofproto-dpif.c
+++ b/ofproto/ofproto-dpif.c
@@ -5104,6 +5104,19 @@ trace_format_odp(struct ds *result, int level, const 
char *title,
 }
 
 static void
+trace_format_relevant_fields(struct ds *result, int level, const char *title,
+                             struct trace_ctx *trace)
+{
+    struct match match;
+
+    ds_put_char_multiple(result, '\t', level);
+    ds_put_format(result, "%s: ", title);
+    match_init(&match, &trace->flow, &trace->xout.wc);
+    match_format(&match, result, OFP_DEFAULT_PRIORITY);
+    ds_put_char(result, '\n');
+}
+
+static void
 trace_resubmit(struct xlate_in *xin, struct rule_dpif *rule, int recurse)
 {
     struct trace_ctx *trace = CONTAINER_OF(xin, struct trace_ctx, xin);
@@ -5113,6 +5126,8 @@ trace_resubmit(struct xlate_in *xin, struct rule_dpif 
*rule, int recurse)
     trace_format_flow(result, recurse + 1, "Resubmitted flow", trace);
     trace_format_regs(result, recurse + 1, "Resubmitted regs", trace);
     trace_format_odp(result,  recurse + 1, "Resubmitted  odp", trace);
+    trace_format_relevant_fields(result, recurse + 1, "Resubmitted relevant "
+                                 "fields", trace);
     trace_format_rule(result, recurse + 1, rule);
 }
 
@@ -5282,7 +5297,6 @@ ofproto_trace(struct ofproto_dpif *ofproto, const struct 
flow *flow,
         uint64_t odp_actions_stub[1024 / 8];
         struct ofpbuf odp_actions;
         struct trace_ctx trace;
-        struct match match;
         uint8_t tcp_flags;
 
         tcp_flags = packet ? packet_get_tcp_flags(packet, flow) : 0;
@@ -5299,11 +5313,7 @@ ofproto_trace(struct ofproto_dpif *ofproto, const struct 
flow *flow,
 
         ds_put_char(ds, '\n');
         trace_format_flow(ds, 0, "Final flow", &trace);
-
-        match_init(&match, &trace.flow, &trace.xout.wc);
-        ds_put_cstr(ds, "Relevant fields: ");
-        match_format(&match, ds, OFP_DEFAULT_PRIORITY);
-        ds_put_char(ds, '\n');
+        trace_format_relevant_fields(ds, 0, "Relevant fields", &trace);
 
         ds_put_cstr(ds, "Datapath actions: ");
         format_odp_actions(ds, trace.xout.odp_actions.data,
diff --git a/tests/ofproto-dpif.at b/tests/ofproto-dpif.at
index 3630cda..be100cb 100644
--- a/tests/ofproto-dpif.at
+++ b/tests/ofproto-dpif.at
@@ -1506,6 +1506,41 @@ ovs-appctl: ovs-vswitchd: server returned an error
 OVS_VSWITCHD_STOP
 AT_CLEANUP
 
+# The third test tests the resubmit and relevant fields
+AT_SETUP([ofproto-dpif - ofproto/trace command 3])
+OVS_VSWITCHD_START
+ADD_OF_PORTS([br0], 1, 2, 3)
+
+ovs-ofctl add-flow br0 "table=0, priority=0, actions=resubmit(,1)"
+
+ovs-ofctl add-flow br0 "table=1, priority=99, in_port=2, vlan_tci=0, 
actions=mod_vlan_vid:20, resubmit(,2)"
+
+AT_CHECK([ovs-appctl ofproto/trace br0 in_port=2], [0], [dnl
+Flow: 
metadata=0,in_port=2,vlan_tci=0x0000,dl_src=00:00:00:00:00:00,dl_dst=00:00:00:00:00:00,dl_type=0x0000
+Rule: table=0 cookie=0 priority=0
+OpenFlow actions=resubmit(,1)
+
+       Resubmitted flow: unchanged
+       Resubmitted regs: reg0=0x0 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 
reg6=0x0 reg7=0x0
+       Resubmitted  odp: drop
+       Resubmitted relevant fields: 
skb_priority=0,in_port=2,vlan_tci=0x0000,dl_type=0x0000,nw_frag=no
+       Rule: table=1 cookie=0 priority=99,in_port=2,vlan_tci=0x0000
+       OpenFlow actions=mod_vlan_vid:20,resubmit(,2)
+
+               Resubmitted flow: 
metadata=0,in_port=2,dl_vlan=20,dl_vlan_pcp=0,dl_src=00:00:00:00:00:00,dl_dst=00:00:00:00:00:00,dl_type=0x0000
+               Resubmitted regs: reg0=0x0 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 
reg5=0x0 reg6=0x0 reg7=0x0
+               Resubmitted  odp: drop
+               Resubmitted relevant fields: 
skb_priority=0,in_port=2,dl_vlan=20,dl_vlan_pcp=0,dl_type=0x0000,nw_frag=no
+               No match
+
+Final flow: unchanged
+Relevant fields: 
skb_priority=0,in_port=2,dl_vlan=20,dl_vlan_pcp=0,dl_type=0x0000,nw_frag=no
+Datapath actions: drop
+])
+
+OVS_VSWITCHD_STOP
+AT_CLEANUP
+
 m4_define([OFPROTO_TRACE],
   [flow="$2"
    AT_CHECK([ovs-appctl ofproto/trace $1 "$flow" $3], [0], [stdout])
-- 
1.7.9.5

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to