On Tue, Oct 7, 2025 at 11:36 PM Mairtin O'Loingsigh <[email protected]>
wrote:
> On Thu, Oct 02, 2025 at 01:20:03PM +0200, Ales Musil via dev wrote:
> > The test was checking if we are sending ARP probes when the MAC
> > Binding entry is close to expiration. But due to the possible race
> > condition between the flow and timestamp it could fail on slower
> > systems. Make sure we check the send part via the log message
> > produced by ovn-controller. That shouldn't have any race whatsoever.
> > At the same time slightly decrease the aging so the test doesn't take
> > that long to finish.
> >
> > Fixes: 1e4d4409f391 ("controller: Send ARP/ND for stale mac_bindings
> entries.")
> > Reported-at: https://issues.redhat.com/browse/FDP-1732
> > Signed-off-by: Ales Musil <[email protected]>
> > ---
> > tests/ovn.at | 36 +++++++++++++++---------------------
> > 1 file changed, 15 insertions(+), 21 deletions(-)
> >
> > diff --git a/tests/ovn.at b/tests/ovn.at
> > index 2ac9107c4..ab845936e 100644
> > --- a/tests/ovn.at
> > +++ b/tests/ovn.at
> > @@ -36936,7 +36936,7 @@ dump_icmp() {
> > echo $packet
> > }
> >
> > -aging_th=10
> > +aging_th=5
> > net_add n1
> > sim_add hv1
> > as hv1
> > @@ -37002,43 +37002,37 @@ OVS_WAIT_UNTIL([$(ovs-ofctl dump-flows br-int
> table=OFTABLE_MAC_BINDING | \
> > sed
> 's/reg15=0x.,metadata=0x./reg15=<cleared>,metadata=<cleared>/g' | \
> > grep -q
> "reg0=0xc0a81402,reg15=<cleared>,metadata=<cleared>
> actions=mod_dl_dst:00:00:00:00:30:00")])
> >
> > -n_arp=$(ovs-ofctl dump-flows br-int table=OFTABLE_MAC_CACHE_USE |awk
> '/arp_spa=192.168.20.2/{print <http://192.168.20.2/%7Bprint>
> substr($4,11,1)}')
> > -# Check GW router does not send any ARP requests in this case.
> > -OVS_WAIT_UNTIL([test $(ovs-ofctl dump-flows br-int
> table=OFTABLE_MAC_CACHE_USE | \
> > - awk '/nw_src=192.168.10.100/{print
> <http://192.168.10.100/%7Bprint> substr($6,10,1)}') -ge
> $((aging_th*3/16))])
> > -AT_CHECK([test $(ovs-ofctl dump-flows br-int
> table=OFTABLE_MAC_CACHE_USE |awk '/arp_spa=192.168.20.2/{print
> <http://192.168.20.2/%7Bprint> substr($4,11,1)}') -eq $n_arp])
> > -
> > +# Wait until ovn-controller sends the ARP request.
> > +OVS_WAIT_UNTIL([test $(grep -c "Sending ARP/ND.*ip: 192.168.20.2"
> hv1/ovn-controller.log) -eq 1])
> > send_imcp_echo_req hv1 public 00:00:00:00:10:00 00:00:00:00:10:1a
> 192.168.20.2 192.168.10.100
> > +
> > # Now drop ICMP echo reply in order to force OVN to arp the mac binding
> entry
> > # for the distributed router lr.
> > check ovn-nbctl --wait=hv acl-add join from-lport 1000 'inport ==
> "join-lr" && icmp' drop
> > -n_arp=$(ovs-ofctl dump-flows br-int table=OFTABLE_MAC_CACHE_USE |awk
> '/arp_spa=192.168.20.2/{print <http://192.168.20.2/%7Bprint>
> substr($4,11,1)}')
> > -OVS_WAIT_UNTIL([test $(ovs-ofctl dump-flows br-int
> table=OFTABLE_MAC_CACHE_USE | \
> > - awk '/nw_src=192.168.10.100/{print
> <http://192.168.10.100/%7Bprint> substr($6,10,1)}') -ge $((aging_th/2))])
> > +
> > +sleep $((aging_th / 2))
> > send_imcp_echo_req hv1 public 00:00:00:00:10:00 00:00:00:00:10:1a
> 192.168.20.2 192.168.10.100
> > -OVS_WAIT_UNTIL([test $(ovs-ofctl dump-flows br-int
> table=OFTABLE_MAC_CACHE_USE |awk '/arp_spa=192.168.20.2/{print
> <http://192.168.20.2/%7Bprint> substr($4,11,1)}') -ge $((n_arp+1))])
> > +OVS_WAIT_UNTIL([test $(grep -c "Sending ARP/ND.*ip: 192.168.20.2"
> hv1/ovn-controller.log) -eq 2])
> >
> > check ovn-nbctl --wait=hv acl-del join
> > wait_row_count mac_binding 0
> >
> > send_icmp6_echo_req hv1 public 00:00:00:00:10:00 00:00:00:00:50:01
> fd12::2 fd11::64
> > -check_row_count mac_binding 1 mac=\"00:00:00:00:30:00\" ip=\"fd12::2\"
> > +wait_row_count mac_binding 1 mac=\"00:00:00:00:30:00\" ip=\"fd12::2\"
> >
> > -n_ipv6=$(ovs-ofctl dump-flows br-int table=OFTABLE_MAC_CACHE_USE |awk
> '/ipv6_src=fd12::2/{print substr($4,11,1)}')
> > -OVS_WAIT_UNTIL([test $(ovs-ofctl dump-flows br-int
> table=OFTABLE_MAC_CACHE_USE | \
> > - awk '/ipv6_src=fd12::2/{print substr($6,10,1)}')
> -ge $((aging_th*3/16))])
> > -# Check GW router does not send any NS requests in this case.
> > -AT_CHECK([test $(ovs-ofctl dump-flows br-int
> table=OFTABLE_MAC_CACHE_USE |awk '/ipv6_src=fd12::2/{print
> substr($4,11,1)}') -eq $n_ipv6])
> > +# Wait until ovn-controller sends the NS request.
> > +OVS_WAIT_UNTIL([test $(grep -c "Sending ARP/ND.*ip: fd12::2"
> hv1/ovn-controller.log) -eq 1])
> > send_icmp6_echo_req hv1 public 00:00:00:00:10:00 00:00:00:00:50:01
> fd12::2 fd11::64
> >
> > # Now drop ICMPv6 echo reply in order to force OVN to send NS for the
> lr mac binding entry.
> > check ovn-nbctl --wait=hv acl-add join from-lport 1010 'inport ==
> "join-lr" && ip6 && icmp6.type == 0x87' allow
> > check ovn-nbctl --wait=hv acl-add join from-lport 1000 'inport ==
> "join-lr" && icmp' drop
> > -n_ipv6=$(ovs-ofctl dump-flows br-int table=OFTABLE_MAC_CACHE_USE |awk
> '/ipv6_src=fd12::2/{print substr($4,11,1)}')
> > -OVS_WAIT_UNTIL([test $(ovs-ofctl dump-flows br-int
> table=OFTABLE_MAC_CACHE_USE | \
> > - awk '/ipv6_src=fd12::2/{print substr($6,10,1)}')
> -ge $((aging_th/2))])
> > +
> > +sleep $((aging_th / 2))
> > send_icmp6_echo_req hv1 public 00:00:00:00:10:00 00:00:00:00:50:01
> fd12::2 fd11::64
> > -OVS_WAIT_UNTIL([test $(ovs-ofctl dump-flows br-int
> table=OFTABLE_MAC_CACHE_USE |awk '/ipv6_src=fd12::2/{print
> substr($4,11,1)}') -ge $((n_ipv6+1))])
> > +OVS_WAIT_UNTIL([test $(grep -c "Sending ARP/ND.*ip: fd12::2"
> hv1/ovn-controller.log) -eq 2])
> > +
> > +wait_row_count mac_binding 0
> >
> > OVN_CLEANUP([hv1])
> > AT_CLEANUP
> > --
> > 2.51.0
> >
> > _______________________________________________
> > dev mailing list
> > [email protected]
> > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
> >
>
> Hi Ales
>
> Patch looks good to me.
>
> Acked-by: Mairtin O'Loingsigh <[email protected]>
>
>
Thank you Mairtin,
I went ahead and merged this inton main and backported all the way down to
24.03.
Regards,
Ales
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev