> On 2/26/25 17:21, Lorenzo Bianconi wrote: > > Introduce the capability to actively refresh mac_binding entries available > > in OFTABLE_MAC_BINDING table when they are inactive for more than the > > configured threshold. Add the OFTABLE_MAC_BINDING table stats > > monitoring. This feature avoids possible unnecessary mac_entry removals > > if the destination is still alive but inactive for more than the configured > > value. > > > > Acked-by: Mark Michelson <mmich...@redhat.com> > > Reported-at: https://issues.redhat.com/browse/FDP-1135 > > Signed-off-by: Lorenzo Bianconi <lorenzo.bianc...@redhat.com> > > --- > > controller/mac-cache.c | 111 +++++++++++++++++- > > controller/mac-cache.h | 26 ++++- > > controller/ovn-controller.c | 40 +++++-- > > controller/pinctrl.c | 8 +- > > controller/pinctrl.h | 7 ++ > > controller/statctrl.c | 25 +++- > > tests/ovn.at | 221 ++++++++++++++++++++++++++++++++++++ > > tests/system-ovn.at | 108 ++++++++++++++++++ > > 8 files changed, 521 insertions(+), 25 deletions(-) > > Hi, Lorenzo. Not a full review, but see some comments for a system test > below.
Hi Ilya, thx for the review. > > > diff --git a/tests/system-ovn.at b/tests/system-ovn.at > > index 9982da7fe..d5858bec7 100644 > > --- a/tests/system-ovn.at > > +++ b/tests/system-ovn.at > > @@ -17240,3 +17240,111 @@ OVS_TRAFFIC_VSWITCHD_STOP(["/failed to query port > > patch-.*/d > > /connection dropped.*/d"]) > > AT_CLEANUP > > ]) > > + > > +OVN_FOR_EACH_NORTHD([ > > +AT_SETUP([Mac binding aging - Probing]) > > +AT_KEYWORDS([mac_binding_probing]) > > +ovn_start > > +OVS_TRAFFIC_VSWITCHD_START() > > + > > +ADD_BR([br-int]) > > +ADD_BR([br-ext]) > > +ADD_BR([br-gw]) > > + > > +check ovs-ofctl add-flow br-ext action=normal > > +check ovs-ofctl add-flow br-gw action=normal > > +# Set external-ids in br-int needed for ovn-controller > > +check ovs-vsctl \ > > + -- set Open_vSwitch . external-ids:system-id=hv1 \ > > + -- set Open_vSwitch . > > external-ids:ovn-remote=unix:$ovs_base/ovn-sb/ovn-sb.sock \ > > + -- set Open_vSwitch . external-ids:ovn-encap-type=geneve \ > > + -- set Open_vSwitch . external-ids:ovn-encap-ip=169.0.0.1 \ > > + -- set bridge br-int fail-mode=secure > > other-config:disable-in-band=true > > + > > +# Start ovn-controller > > +start_daemon ovn-controller > > + > > +check ovn-appctl -t ovn-controller vlog/set mac_cache:file:dbg > > pinctrl:file:dbg > > +check ovn-nbctl lr-add lr > > +check ovn-nbctl set logical_router lr options:chassis=hv1 > > +check ovn-nbctl set logical_router lr options:mac_binding_age_threshold=10 > > + > > +check ovn-nbctl ls-add sw > > +check ovn-nbctl ls-add public > > + > > +check ovn-nbctl lrp-add lr rp-sw 00:00:01:01:02:03 192.168.1.1/24 > > +check ovn-nbctl lrp-add lr rp-public 00:00:02:01:02:03 172.16.1.1/24 > > + > > +check ovn-nbctl lsp-add sw sw-rp -- set Logical_Switch_Port sw-rp \ > > + type=router options:router-port=rp-sw \ > > + -- lsp-set-addresses sw-rp router > > + > > +check ovn-nbctl lsp-add public public-rp -- set Logical_Switch_Port > > public-rp \ > > + type=router options:router-port=rp-public \ > > + -- lsp-set-addresses public-rp router > > + > > +ADD_NAMESPACES(alice) > > +ADD_VETH(alice, alice, br-int, "192.168.1.2/24", "f0:00:00:01:02:03", > > "192.168.1.1") > > +check ovn-nbctl lsp-add sw alice -- lsp-set-addresses alice > > "f0:00:00:01:02:03 192.168.1.2" > > + > > +check ovs-vsctl set Open_vSwitch . > > external-ids:ovn-bridge-mappings=phynet:br-ext > > +check ovn-nbctl lsp-add public public \ > > + -- lsp-set-addresses public unknown \ > > + -- lsp-set-type public localnet \ > > + -- lsp-set-options public network_name=phynet > > + > > +ADD_NAMESPACES(gw) > > +ADD_VETH(gw0, gw, br-ext, "172.16.1.2/24", "f0:00:00:01:02:04", > > "172.16.1.1") > > +ADD_VETH(gw1, gw, br-gw, "172.16.2.2/24", "f0:00:00:01:03:04") > > + > > +NS_CHECK_EXEC([gw], [sysctl -w net.ipv4.conf.all.forwarding=1],[0], [dnl > > +net.ipv4.conf.all.forwarding = 1 > > +]) > > + > > +ADD_NAMESPACES(bob) > > +ADD_VETH(bob, bob, br-gw, "172.16.2.10/24", "f0:00:00:01:02:06", > > "172.16.2.2") > > + > > +check ovn-nbctl lr-route-add lr 0.0.0.0/0 172.16.1.2 > > +check ovn-nbctl --wait=hv sync > > + > > +NS_CHECK_EXEC([alice], [ping -q -c 3 -i 0.3 -w 2 172.16.2.10 | > > FORMAT_PING], \ > > +[0], [dnl > > +3 packets transmitted, 3 received, 0% packet loss, time 0ms > > +]) > > +check_row_count mac_binding 1 mac=\"f0:00:00:01:02:04\" > > +mac_binding_uuid=$(fetch_column mac_binding _uuid logical_port=rp-public > > ip=172.16.1.2) > > + > > +NETNS_START_TCPDUMP([gw], [-n -c 2 -i gw0 arp[[6:2]] == 0x1 and > > arp[[24:4]] == 0xac100102], [gw]) > > +NS_CHECK_EXEC([alice], [ping -q -c 20 -i 0.5 172.16.2.10 | FORMAT_PING], \ > > Hmm. The aging threshold is 10, and we're sending 20 packets here with > 0.5 second interval, so also 10 seconds. It's possible that the entry > will just not age out on it's own, because we're on the edge of the allowed > time. So, this test may actually pass even without re-ARP in some cases. > northd is not precise in timing for entry removal and they can linger for > quite some time after the threashold. > > Please, reduce the age threshold to some lower value, e.g. 4-5 seconds > and ping for, let's say 12-15 seconds (3x the threshold). This would > guarantee that we hit the threshold if something goes wrong with the > probing. ack, I will fix it in v5. > > > +[0], [dnl > > +20 packets transmitted, 20 received, 0% packet loss, time 0ms > > +]) > > + > > +# Check mac binding entry is still active. > > +check_row_count mac_binding 1 mac=\"f0:00:00:01:02:04\" > > +OVS_WAIT_UNTIL([ > > + n_arp=$(cat gw.tcpdump | wc -l) > > + test ${n_arp} -ge 2 > > +]) > > + > > +AT_CHECK([test "$(fetch_column mac_binding _uuid logical_port=rp-public > > ip=172.16.1.2)" = "$mac_binding_uuid"]) > > This should be checked before waiting for tcpdump output to avoid > potential flakes where the entry expires while we wait. ack, I will fix it in v5. > > > + > > +# Wait for the mac binding entry to expire. > > +wait_row_count MAC_Binding 0 > > + > > +OVS_APP_EXIT_AND_WAIT([ovn-controller]) > > + > > +as ovn-sb > > +OVS_APP_EXIT_AND_WAIT([ovsdb-server]) > > + > > +as ovn-nb > > +OVS_APP_EXIT_AND_WAIT([ovsdb-server]) > > + > > +as northd > > +OVS_APP_EXIT_AND_WAIT([ovn-northd]) > > + > > +as > > +OVS_TRAFFIC_VSWITCHD_STOP(["/.*error receiving.*/d > > +/.*terminating with signal 15.*/d"]) > > Are these actually needed in this test? ack, I will fix it in v5. Regards, Lorenzo > > Best regards, Ilya Maximets. >
_______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev