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

Reply via email to