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 <az...@nicira.com> --- 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 6a725e4..983cad5 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; } -- 1.9.1 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev