There was a race within packet buffering that could result in first packt being dropped. It could happen under following conditions and topology: S1 == R1 == public == R2 == S2 SNAT on R1 and DGP on port connecting R1 with public.
1) The GARP is sent for the GDP SNAT 2) The GARP is delayed on R2 because it's multicast 3) Some traffic that get's buffered on S2 4) An ARP is sent as consequence of the buffering 5) The delayed MAC binding is added to SB 6) Response for the ARP is ignored because the MAC binding already exists 7) The buffered packet is never sent out and times out In order to prevent this behavior add new node that will keep track of all recently changed MAC bindings. Those recently changed MAC bindings are kept around for a longer time than the buffered packets which should ensure that we can find them even if they are created before the packet is actually buffered. At the same time simplify the packet buffering process and move it to mac-learn module. Ales Musil (3): pinctrl: Simplify packet buffering controller: Add I-P node for recent MAC bindings controller: Prevent race in packet buffering controller/mac-learn.c | 171 ++++++++++++++++-- controller/mac-learn.h | 50 +++++- controller/ovn-controller.c | 208 +++++++++++++++++++++- controller/pinctrl.c | 336 ++++++++---------------------------- controller/pinctrl.h | 5 +- 5 files changed, 483 insertions(+), 287 deletions(-) -- 2.39.2 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev