summaryrefslogtreecommitdiff
path: root/ofproto/ofproto-dpif.h
diff options
context:
space:
mode:
authorBen Pfaff <blp@ovn.org>2016-04-21 10:50:17 -0700
committerBen Pfaff <blp@ovn.org>2016-05-09 08:09:15 -0700
commit790c5d2694bb3ddc3927b2e3617157ba2b19dc39 (patch)
treeb25bbeb9abd0eb8517b2c9709beaee1d68ae04a1 /ofproto/ofproto-dpif.h
parent9a9b001a5831516bafddefd60d31bafb09548457 (diff)
downloadopenvswitch-790c5d2694bb3ddc3927b2e3617157ba2b19dc39.tar.gz
ofproto-dpif: Do not count resubmit to later tables against limit.
Open vSwitch must ensure that flow translation takes a finite amount of time. Until now it has implemented this by limiting the depth of recursion. The initial limit, in version 1.0.1, was no recursion at all, and then over the years it has increased to 8 levels, then 16, then 32, and 64 for the last few years. Now reports are coming in that 64 levels are inadequate for some OVN setups. The natural inclination would be to double the limit again to 128 levels. This commit attempts another approach. Instead of increasing the limit, it reduces the class of resubmits that count against the limit. Since the goal for the depth limit is to prevent an infinite amount of work, it's not necessary to count resubmits that can't lead to infinite work. In particular, a resubmit from a table numbered x to a table y > x cannot do this, because any OpenFlow switch has a finite number of tables. Because in fact a resubmit (or goto_table) from one table to a later table is the most common form of an OpenFlow pipeline, I suspect that this will greatly alleviate the pressure to increase the depth limit. Reported-by: Guru Shetty <guru@ovn.org> Signed-off-by: Ben Pfaff <blp@ovn.org> Acked-by: Ryan Moats <rmoats@us.ibm.com>
Diffstat (limited to 'ofproto/ofproto-dpif.h')
-rw-r--r--ofproto/ofproto-dpif.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/ofproto/ofproto-dpif.h b/ofproto/ofproto-dpif.h
index e4486142d..9e03b0124 100644
--- a/ofproto/ofproto-dpif.h
+++ b/ofproto/ofproto-dpif.h
@@ -149,7 +149,8 @@ int ofproto_dpif_execute_actions(struct ofproto_dpif *, const struct flow *,
int ofproto_dpif_execute_actions__(struct ofproto_dpif *, const struct flow *,
struct rule_dpif *, const struct ofpact *,
size_t ofpacts_len, int indentation,
- int resubmits, struct dp_packet *);
+ int depth, int resubmits,
+ struct dp_packet *);
void ofproto_dpif_send_async_msg(struct ofproto_dpif *,
struct ofproto_async_msg *);
bool ofproto_dpif_wants_packet_in_on_miss(struct ofproto_dpif *);