[ovs-dev] [PATCH] ofproto-dpif-xlate: Don't try to optimize goto table.
Ethan Jackson
ethan at nicira.com
Thu Aug 1 20:25:57 UTC 2013
Good Idea, here's a new version. The only change is the unit tests.
---
ofproto/ofproto-dpif-xlate.c | 30 ++----------------------------
tests/ofproto-dpif.at | 4 ++--
2 files changed, 4 insertions(+), 30 deletions(-)
diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c
index 18b0257..6f54b76 100644
--- a/ofproto/ofproto-dpif-xlate.c
+++ b/ofproto/ofproto-dpif-xlate.c
@@ -1927,7 +1927,6 @@ do_xlate_actions(const struct ofpact *ofpacts, size_t ofpacts_len,
ctx->rule->up.evictable = false;
}
- do_xlate_actions_again:
OFPACT_FOR_EACH (a, ofpacts, ofpacts_len) {
struct ofpact_controller *controller;
const struct ofpact_metadata *metadata;
@@ -2128,35 +2127,10 @@ do_xlate_actions(const struct ofpact *ofpacts, size_t ofpacts_len,
case OFPACT_GOTO_TABLE: {
/* It is assumed that goto-table is the last action. */
struct ofpact_goto_table *ogt = ofpact_get_GOTO_TABLE(a);
- struct rule_dpif *rule;
ovs_assert(ctx->table_id < ogt->table_id);
-
- ctx->table_id = ogt->table_id;
-
- /* Look up a flow from the new table. */
- rule = rule_dpif_lookup_in_table(ctx->xbridge->ofproto, flow, wc,
- ctx->table_id);
-
- ctx->xout->tags |= calculate_flow_tag(ctx->xbridge->ofproto,
- &ctx->xin->flow,
- ctx->table_id, rule);
-
- rule = ctx_rule_hooks(ctx, rule, true);
-
- if (rule) {
- if (ctx->rule) {
- ctx->rule->up.evictable = was_evictable;
- }
- ctx->rule = rule;
- was_evictable = rule->up.evictable;
- rule->up.evictable = false;
-
- /* Tail recursion removal. */
- ofpacts = rule->up.ofpacts;
- ofpacts_len = rule->up.ofpacts_len;
- goto do_xlate_actions_again;
- }
+ xlate_table_action(ctx, ctx->xin->flow.in_port.ofp_port,
+ ogt->table_id, true);
break;
}
diff --git a/tests/ofproto-dpif.at b/tests/ofproto-dpif.at
index 027f1c2..d5e5e3c 100644
--- a/tests/ofproto-dpif.at
+++ b/tests/ofproto-dpif.at
@@ -24,8 +24,8 @@ AT_SETUP([ofproto-dpif - goto table])
OVS_VSWITCHD_START
ADD_OF_PORTS([br0], [1], [10], [11])
echo "table=0 in_port=1 actions=output(10),goto_table(1)" > flows.txt
-for i in `seq 1 252`; do echo "table=$i actions=goto_table($(($i+1)))"; done >> flows.txt
-echo "table=253 actions=output(11)" >> flows.txt
+for i in `seq 1 63`; do echo "table=$i actions=goto_table($(($i+1)))"; done >> flows.txt
+echo "table=64 actions=output(11)" >> flows.txt
AT_CHECK([ovs-ofctl -O OpenFlow12 add-flows br0 flows.txt])
AT_CHECK([ovs-appctl ofproto/trace br0 'in_port=1,dl_src=50:54:00:00:00:05,dl_dst=50:54:00:00:00:07,dl_type=0x0800,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_proto=1,nw_tos=0,nw_ttl=128,icmp_type=8,icmp_code=0'], [0], [stdout])
AT_CHECK([tail -1 stdout], [0],
--
1.7.9.5
More information about the dev
mailing list