recirculation: Do not drop packet when there is no match from
authorAlex Wang <alexw@nicira.com>
Sat, 13 Dec 2014 04:51:58 +0000 (20:51 -0800)
committerAlex Wang <alexw@nicira.com>
Sat, 13 Dec 2014 05:36:17 +0000 (21:36 -0800)
commit0c7812e5ebc843fbbabfdfcdd1b21bda9759e0ed
tree5c4957f70e92e0a4bd839abc6c95e10142fd1b2a
parentbc786797628efb67fb5fda93203b60481f6907db
recirculation: Do not drop packet when there is no match from
internal table.

In current recirculation implementation, the flow misses (with
'recirc_id' set) are always looked up on the receiving bridge's
internal flow table.  However, the bond port may actually reside
on another bridge which gets connected to the receiving bridge
via patch port.  Since the recirculation rules are pushed to the
other bridge's internal table, the flow lookup on the receiving
bridge will match nothing but the drop rule, causing unexpected
packet drops.

This commit fixes the above bug via keeping lookup the misses
(with 'recirc_id' set) in default table (table 0) and processing
it until reaching the bridge that owns the bond port.  Then,
the misses can hit the post recirculation flows as expected.

VMware-BZ: 1362178

Reported-by: Ansis Atteka <aatteka@nicira.com>
Signed-off-by: Alex Wang <alexw@nicira.com>
Acked-by: Andy Zhou <azhou@nicira.com>
ofproto/ofproto-dpif-xlate.c
ofproto/ofproto-dpif.c
ofproto/ofproto-dpif.h