From c12cea0e269986bb0ab75a702da760db745b8143 Mon Sep 17 00:00:00 2001 From: Andy Zhou Date: Wed, 23 Apr 2014 13:05:40 -0700 Subject: [PATCH] ofproto-dpif: Improve code clarity and comments on recirc changes to rule_dpif_lookup() This patch improves the code readability and comments on the recirculation related changes to rule_dpif_lookup() base on off-line discussions with Jarno. There is no behavior changes. Signed-off-by: Andy Zhou Acked-by: Ethan Jackson --- ofproto/ofproto-dpif.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c index 6a725e465..983cad513 100644 --- a/ofproto/ofproto-dpif.c +++ b/ofproto/ofproto-dpif.c @@ -3199,14 +3199,21 @@ rule_dpif_lookup(struct ofproto_dpif *ofproto, struct flow *flow, uint8_t table_id; if (ofproto_dpif_get_enable_recirc(ofproto)) { - if (flow->recirc_id == 0) { - if (wc) { - wc->masks.recirc_id = UINT32_MAX; - } - table_id = 0; - } else { - table_id = TBL_INTERNAL; + /* Always exactly match recirc_id since datapath supports + * recirculation. */ + if (wc) { + wc->masks.recirc_id = UINT32_MAX; } + + /* Start looking up from internal table for post recirculation flows + * or packets. We can also simply send all, including normal flows + * or packets to the internal table. They will not match any post + * recirculation rules except the 'catch all' rule that resubmit + * them to table 0. + * + * As an optimization, we send normal flows and packets to table 0 + * directly, saving one table lookup. */ + table_id = flow->recirc_id ? TBL_INTERNAL : 0; } else { table_id = 0; } -- 2.43.0