On Mon, Oct 5, 2026 at 5:46 PM Xavier Simonart via dev < [email protected]> wrote:
> When ovn-fake-multinode is started with INLINE_BR_EX=yes, then > eth1 is an internal interface attached to br-ex instead of being a > physical interface. This results in all traffic (dataplane, > management and geneve) going through eth2. > > This patch ensures that, when a test restarts ovs, it is restarted > with the same configuration. > > Signed-off-by: Xavier Simonart <[email protected]> > --- > tests/multinode-macros.at | 12 ++++++++++++ > tests/multinode.at | 18 ++++++++++++++++-- > 2 files changed, 28 insertions(+), 2 deletions(-) > > diff --git a/tests/multinode-macros.at b/tests/multinode-macros.at > index 1c85f79f8..74f2d7894 100644 > --- a/tests/multinode-macros.at > +++ b/tests/multinode-macros.at > @@ -305,6 +305,12 @@ multinode_setup_controller() { > remote_ip=$4 > encap_type=${5:-"geneve"} > > + # Get info from eth1 > + local eth1_ip="" > + if m_as $c ovs-vsctl list-ports br-ex | grep -qx eth1; then > + eth1_ip=$(m_as $c ip -4 -o addr show eth1 | awk '{print $4}') > + fi > + > # Cleanup existing one > m_as $c /usr/share/openvswitch/scripts/ovs-ctl stop > m_as $c /usr/share/ovn/scripts/ovn-ctl stop_controller > @@ -324,6 +330,12 @@ multinode_setup_controller() { > # Add back br-ex which was removed when removing ovs conf.db > m_as $c ovs-vsctl --if-exists del-br br-ex > m_as $c ovs-vsctl add-br br-ex > + # Add eth1 back > + if [[ -n "$eth1_ip" ]]; then > + m_as $c ovs-vsctl add-port br-ex eth1 -- set interface eth1 > type=internal > + m_as $c ip addr add $eth1_ip dev eth1 > + m_as $c ip link set eth1 up > + fi > m_as $c ip link set eth2 down > m_as $c ovs-vsctl add-port br-ex eth2 > m_as $c ip link set eth2 up > diff --git a/tests/multinode.at b/tests/multinode.at > index 4948c3c67..bb9e47749 100644 > --- a/tests/multinode.at > +++ b/tests/multinode.at > @@ -2490,7 +2490,7 @@ cleanup_multinode_resources > for i in 1 2; do > chassis="ovn-chassis-$i" > ip=$(m_as $chassis ip -4 addr show eth1 | grep inet | awk '{print > $2}' | cut -d'/' -f1) > - central_ip=$(m_central_as ip -4 addr show eth1 | grep inet | awk > '{print $2}' | cut -d'/' -f1) > + central_ip=$( (m_central_as ip -4 addr show eth1 2>/dev/null || > m_central_as ip -4 addr show eth2) | grep inet | awk '{print $2}' | cut > -d'/' -f1) > > multinode_setup_northd $chassis > multinode_setup_controller $chassis $chassis $ip $ip > @@ -3546,6 +3546,9 @@ add_port() { > ln -sf /proc/$pid/ns/net /var/run/netns/$pid > port=$(host_ovs_vsctl --data=bare --no-heading --columns=name find > interface \ > external_ids:container_id=ovn-gw-1 > external_ids:container_iface="$interface") > + if [[ -z "$port" ]]; then > + return > + fi > port="${port:0:13}" > ip link del "${port}_l" 2>/dev/null || true > ip link del "${port}_c" 2>/dev/null || true > @@ -3703,6 +3706,8 @@ check_migration_between_gw1_and_gw2_kill_gw2() { > check_packets "true" "false" "false" "true" > > start_openvswitch ovn-gw-2 > + m_as ovn-gw-2 ip addr add $gw2_ip_mask dev eth1 > + m_as ovn-gw-2 ip link set eth1 up > > echo "$(date +%H:%M:%S.%03N) Restarting gw2 ovn-controller" > m_as ovn-gw-2 /usr/share/ovn/scripts/ovn-ctl start_controller > ${CONTROLLER_SSL_ARGS} > @@ -3719,10 +3724,13 @@ check_migration_between_gw1_and_gw2_kill_gw1() { > max_expected_loss2=$2 > prepare > > + gw1_ip_mask=$(m_as ovn-gw-1 ip -4 -o addr show eth1 | awk '{print > $4}') > on_exit 'm_as ovn-gw-1 /usr/share/openvswitch/scripts/ovs-ctl status > || > m_as ovn-gw-1 /usr/share/openvswitch/scripts/ovs-ctl start > --system-id=ovn-gw-1' > on_exit 'm_as ovn-gw-1 /usr/share/ovn/scripts/ovn-ctl > status_controller || > m_as ovn-gw-1 /usr/share/ovn/scripts/ovn-ctl > start_controller ${CONTROLLER_SSL_ARGS}' > + on_exit 'm_as ovn-gw-1 ip addr add $gw1_ip_mask dev eth1' > + on_exit 'm_as ovn-gw-1 ip link set eth1 up' > > m_as ovn-gw-1 kill -9 $(m_as ovn-gw-1 cat /run/ovn/ovn-controller.pid) > m_as ovn-gw-1 kill -9 $(m_as ovn-gw-1 cat > /run/openvswitch/ovs-vswitchd.pid) > @@ -3736,6 +3744,8 @@ check_migration_between_gw1_and_gw2_kill_gw1() { > check_garps "false" "true" "false" > check_packets "false" "true" "false" "true" > start_openvswitch ovn-gw-1 > + m_as ovn-gw-1 ip addr add $gw1_ip_mask dev eth1 > + m_as ovn-gw-1 ip link set eth1 up > > # Wait some long time before restarting ovn-controller > sleep 10 > @@ -3758,6 +3768,8 @@ check_migration_between_gw1_and_gw2_reboot_gw1() { > max_expected_loss2=$2 > prepare > > + gw1_ip_mask=$(m_as ovn-gw-1 ip -4 -o addr show eth1 | awk '{print > $4}') > + > podman stop -t 0 ovn-gw-1 > (exec 3>&- 4>&- 5>&- 6>&-; podman start ovn-gw-1) > > @@ -3773,6 +3785,8 @@ check_migration_between_gw1_and_gw2_reboot_gw1() { > check_packets "false" "true" "false" "true" > > start_openvswitch ovn-gw-1 > + m_as ovn-gw-1 ip addr add $gw1_ip_mask dev eth1 > + m_as ovn-gw-1 ip link set eth1 up > M_START_TCPDUMPS([ovn-gw-1], [-neei eth1], [gw1_eth1]) > > # Wait some long time before restarting ovn-controller > @@ -3882,7 +3896,7 @@ echo "$(date +%H:%M:%S.%03N) Checking it went > through gw1 and not gw2" > AT_CHECK([cat gw2.tcpdump | grep "ICMP echo"], [1], [dnl > ]) > > -AT_CHECK([cat gw1.tcpdump | grep "ICMP echo" | cut -d ' ' -f2-15], [0], > [dnl > +AT_CHECK([cat gw1.tcpdump | grep -v genev | grep "ICMP echo" | cut -d ' > ' -f2-15], [0], [dnl > f0:00:c0:a8:00:fe > 00:00:c0:a8:00:01, ethertype IPv4 (0x0800), length > 98: 192.168.1.1 > 192.168.0.1: ICMP echo request, > 00:00:c0:a8:00:01 > f0:00:c0:a8:00:fe, ethertype IPv4 (0x0800), length > 98: 192.168.0.1 > 192.168.1.1: ICMP echo reply, > f0:00:c0:a8:00:fe > 00:00:c0:a8:00:01, ethertype IPv4 (0x0800), length > 98: 192.168.1.1 > 192.168.0.1: ICMP echo request, > -- > 2.47.1 > > _______________________________________________ > dev mailing list > [email protected] > https://mail.openvswitch.org/mailman/listinfo/ovs-dev > > Thank you Xavier, applied to main. Regards, Ales _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
