When a port with a globally-administered MAC address (e.g.,
00:00:00:00:00:04) is added to br-int, OVS may recalculate the
bridge datapath ID if no explicit datapath-id is configured.
The new DPID causes OVS to tear down all OpenFlow connections
to the bridge, since there is no OpenFlow message to notify
the controller of a DPID change.

This triggers ovn-controller's ofctrl_seqno_flush(), which
resets the internal sequence counter to 0. If a flow update
from before the reconnection is still in-flight, ofctrl_put()
detects that the new req_cfg is smaller than the pending one
and emits "req_cfg regressed from 2 to 1".

Fix this by deriving a stable other-config:datapath-id from
the bridge name in the ADD_BR macro.  This ensures the DPID
never changes when ports are added or removed, preventing
spurious OpenFlow reconnections during tests.

Assisted-by: Claude Opus 4.6, OpenCode
Signed-off-by: Ales Musil <[email protected]>
---
 tests/system-common-macros.at | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/tests/system-common-macros.at b/tests/system-common-macros.at
index b32fc0b68..b8237b483 100644
--- a/tests/system-common-macros.at
+++ b/tests/system-common-macros.at
@@ -42,7 +42,10 @@ m4_define([NS_CHECK_EXEC],
 #
 # Expands into the proper ovs-vsctl commands to create a bridge with the
 # appropriate type, and allows additional arguments to be passed.
-m4_define([ADD_BR], [ovs-vsctl _ADD_BR([$1]) -- $2])
+# A stable datapath-id derived from the bridge name is set.
+m4_define([ADD_BR],
+  [dpid=$(printf '%016x' $(echo '$1' | cksum | cut -d ' ' -f1))
+   ovs-vsctl _ADD_BR([$1]) -- set Bridge $1 other-config:datapath-id="$dpid" 
-- $2])
 
 # ADD_VETH([port], [namespace], [ovs-br], [ip_addr] [mac_addr], [gateway],
 #          [ip_addr_flags] [ip6_addr] [gateway6])
-- 
2.54.0

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to