On Wed, Jun 24, 2026 at 10:09 AM Xavier Simonart via dev <
[email protected]> wrote:

> - Ensure that dhcpd is started before sending traffic (potential flaky
>   tests).
> - Fix total_pkts=$(cat pkt.pcap | wc -l) which did not count number of
>   packets as using tcpdump -vv.
> - Modify NETNS_START_DHCPD to also support ipv4.
> - Use created dhcpd.leases file (some tests created it but did not use it).
> - Have dhclient related folder in /tmp to avoid writing permission issue.
> - Check dhclient pid still exists before trying to kill it when exiting,
>   to avoid confusing kill errors.
>
> Fixes: dce4abfc68eb ("northd, tests: DHCP Relay Agent support for overlay
> IPv4 subnets.")
> Fixes: f9ffb0ee9dd3 ("controller: ACL correctly handles fragmented
> traffic.")
> Signed-off-by: Xavier Simonart <[email protected]>
> ---
>  tests/system-common-macros.at | 37 ++++++++++++++++++------------
>  tests/system-ovn.at           | 42 +++++++++++------------------------
>  2 files changed, 36 insertions(+), 43 deletions(-)
>
> diff --git a/tests/system-common-macros.at b/tests/system-common-macros.at
> index 16c59c3ce..a995af301 100644
> --- a/tests/system-common-macros.at
> +++ b/tests/system-common-macros.at
> @@ -161,23 +161,32 @@ m4_define([NETNS_START_TCPDUMP],
>      ]
>  )
>
> -# NETNS_START_DHCPD([namespace], [iface], [dhcpd.conf])
> +# NETNS_START_DHCPD([namespace], [iface], [dhcpd.conf], [extra_dhcp_args],
> +#                   [extra_tcpdump_args])
>  #
> -# Helper to properly start dhcpd
> +# Helper to properly start dhcpd. extra_dhcp_args is optional ("-6" if
> not set)
> +# extra_tcpdump_args is also optional.
>  m4_define([NETNS_START_DHCPD],
>      [
> -        DHCP_TEST_DIR="$ovs_base/dhcp-test"
> -        mkdir -p $DHCP_TEST_DIR
> -
> -        mv $3 $DHCP_TEST_DIR/dhcpd.conf
> -
> -        touch $DHCP_TEST_DIR/dhcpd.leases
> -        chown root:dhcpd $DHCP_TEST_DIR $DHCP_TEST_DIR/dhcpd.leases
> -        chmod 775 $DHCP_TEST_DIR
> -        chmod 664 $DHCP_TEST_DIR/dhcpd.leases
> -
> -        NETNS_START_TCPDUMP([$1], [-nni $2], [$1])
> -        NETNS_DAEMONIZE([$1], [dhcpd -6 -f -lf
> $DHCP_TEST_DIR/dhcpd.leases -cf $DHCP_TEST_DIR/dhcpd.conf $2 > dhcpd.log
> 2>&1], [dhcpd.pid])
> +        DHCP_MACRO_TEST_DIR="$ovs_base/dhcp-test"
> +        dhcp_macro_arg="$4"
> +        if test "x$dhcp_macro_arg" = "x"; then
> +            EXTRA_DHCP_MACRO_ARGS="-6"
> +        else
> +            EXTRA_DHCP_MACRO_ARGS="$dhcp_macro_arg"
> +        fi
> +        mkdir -p $DHCP_MACRO_TEST_DIR
> +
> +        mv $3 $DHCP_MACRO_TEST_DIR/dhcpd.conf
> +
> +        touch $DHCP_MACRO_TEST_DIR/dhcpd.leases
> +        chown root:dhcpd $DHCP_MACRO_TEST_DIR
> $DHCP_MACRO_TEST_DIR/dhcpd.leases
> +        chmod 775 $DHCP_MACRO_TEST_DIR
> +        chmod 664 $DHCP_MACRO_TEST_DIR/dhcpd.leases
> +
> +        NETNS_START_TCPDUMP([$1], [-nni $2 $5], [$1])
> +        NETNS_DAEMONIZE([$1], [dhcpd $EXTRA_DHCP_MACRO_ARGS -d -f -lf
> $DHCP_MACRO_TEST_DIR/dhcpd.leases -cf $DHCP_MACRO_TEST_DIR/dhcpd.conf $2 >
> dhcpd.log 2>&1], [dhcpd.pid])
> +        OVS_WAIT_UNTIL([grep -q "Server starting service" dhcpd.log])
>      ]
>  )
>
> diff --git a/tests/system-ovn.at b/tests/system-ovn.at
> index a4afab4e5..1f227335b 100644
> --- a/tests/system-ovn.at
> +++ b/tests/system-ovn.at
> @@ -12704,6 +12704,7 @@ check ovn-nbctl --wait=hv sync
>
>  DHCP_TEST_DIR="/tmp/dhcp-test"
>  rm -rf $DHCP_TEST_DIR
> +on_exit "rm -rf $DHCP_TEST_DIR"
>  mkdir $DHCP_TEST_DIR
>  cat > $DHCP_TEST_DIR/dhcpd.conf <<EOF
>  subnet 172.16.1.0 netmask 255.255.255.0 {
> @@ -12723,32 +12724,22 @@ subnet 192.168.2.0 netmask 255.255.255.0 {
>    max-lease-time 120;
>  }
>  EOF
> -cat > $DHCP_TEST_DIR/dhclien.conf <<EOF
> +cat > $DHCP_TEST_DIR/dhclient.conf <<EOF
>  timeout 2
>  EOF
>
> -touch $DHCP_TEST_DIR/dhcpd.leases
> -chown root:dhcpd $DHCP_TEST_DIR $DHCP_TEST_DIR/dhcpd.leases
> -chmod 775 $DHCP_TEST_DIR
> -chmod 664 $DHCP_TEST_DIR/dhcpd.leases
> +NETNS_START_DHCPD([server], [s1], [$DHCP_TEST_DIR/dhcpd.conf], [-4],
> [-nvv])
>
> -
> -NETNS_DAEMONIZE([server], [dhcpd -4 -f -cf $DHCP_TEST_DIR/dhcpd.conf s1 >
> dhcpd.log 2>&1], [dhcpd.pid])
> -
> -NS_CHECK_EXEC([server], [tcpdump -l -nvv -i s1  udp > pkt.pcap
> 2>tcpdump_err &])
> -OVS_WAIT_UNTIL([grep "listening" tcpdump_err])
> -on_exit 'kill $(pidof tcpdump)'
> -
> -NS_CHECK_EXEC([sw01], [dhclient -1 -q -lf
> $DHCP_TEST_DIR/dhclient-sw01.lease -pf $DHCP_TEST_DIR/dhclient-sw01.pid -cf
> $DHCP_TEST_DIR/dhclien.conf sw01])
> -NS_CHECK_EXEC([sw11], [dhclient -1 -q -lf
> $DHCP_TEST_DIR/dhclient-sw11.lease -pf $DHCP_TEST_DIR/dhclient-sw11.pid -cf
> $DHCP_TEST_DIR/dhclien.conf sw11])
> +NS_CHECK_EXEC([sw01], [dhclient -1 -q -lf
> $DHCP_TEST_DIR/dhclient-sw01.lease -pf $DHCP_TEST_DIR/dhclient-sw01.pid -cf
> $DHCP_TEST_DIR/dhclient.conf sw01])
> +NS_CHECK_EXEC([sw11], [dhclient -1 -q -lf
> $DHCP_TEST_DIR/dhclient-sw11.lease -pf $DHCP_TEST_DIR/dhclient-sw11.pid -cf
> $DHCP_TEST_DIR/dhclient.conf sw11])
>
>  OVS_WAIT_UNTIL([
> -    total_pkts=$(cat pkt.pcap | wc -l)
> +    total_pkts=$(grep "BOOTP/DHCP" server.tcpdump | wc -l)
>      test ${total_pkts} -ge 8
>  ])
>
> -on_exit 'kill `cat $DHCP_TEST_DIR/dhclient-sw01.pid` &&
> -kill `cat $DHCP_TEST_DIR/dhclient-sw11.pid` && rm -rf $DHCP_TEST_DIR'
> +on_exit "test -e $DHCP_TEST_DIR/dhclient-sw01.pid && kill \`cat
> $DHCP_TEST_DIR/dhclient-sw01.pid\` 2>/dev/null
> +test -e $DHCP_TEST_DIR/dhclient-sw11.pid && kill \`cat
> $DHCP_TEST_DIR/dhclient-sw11.pid\` 2>/dev/null"
>
>  NS_CHECK_EXEC([sw01], [ip addr show sw01 | grep -oP
> '(?<=inet\s)\d+(\.\d+){3}'], [0], [dnl
>  192.168.1.10
> @@ -21558,7 +21549,8 @@ check ovn-nbctl --wait=hv set NB_Global .
> options:acl_ct_translation=true
>  check ovn-nbctl --wait=hv sync
>
>  # Setup DHCP server configuration.
> -DHCP_TEST_DIR="$ovs_base/dhcp-test"
> +DHCP_TEST_DIR="/tmp/dhcp-test"
> +on_exit "rm -rf $DHCP_TEST_DIR"
>  mkdir -p $DHCP_TEST_DIR
>
>  cat > $DHCP_TEST_DIR/dhcpd.conf <<EOF
> @@ -21571,21 +21563,13 @@ subnet 192.168.1.0 netmask 255.255.255.0 {
>  }
>  EOF
>
> -touch $DHCP_TEST_DIR/dhcpd.leases
> -chown root:dhcpd $DHCP_TEST_DIR $DHCP_TEST_DIR/dhcpd.leases
> -chmod 775 $DHCP_TEST_DIR
> -chmod 664 $DHCP_TEST_DIR/dhcpd.leases
> -
>  # Start dhcpd as DHCP server in the server namespace.
> -NETNS_DAEMONIZE([server], [dhcpd -4 -f -cf $DHCP_TEST_DIR/dhcpd.conf
> server > $DHCP_TEST_DIR/dhcpd.log 2>&1], [dhcpd.pid])
> -
> -# Give dhcpd time to start.
> -sleep 1
> +NETNS_START_DHCPD([server], [server], [$DHCP_TEST_DIR/dhcpd.conf], [-4],
> [udp])
>
>  # Request IP via DHCP using dhclient.
> -NS_CHECK_EXEC([client], [dhclient -1 -v -lf $DHCP_TEST_DIR/dhclient.lease
> -pf $DHCP_TEST_DIR/dhclient.pid client], [0], [ignore], [ignore])
> +NS_CHECK_EXEC([client], [dhclient -1 -lf $DHCP_TEST_DIR/dhclient.lease
> -pf $DHCP_TEST_DIR/dhclient.pid client])
>  # Register cleanup handler to kill dhclient when test exits.
> -on_exit 'kill $(cat $DHCP_TEST_DIR/dhclient.pid) 2>/dev/null || true'
> +on_exit "test -e $DHCP_TEST_DIR/dhclient.pid && kill \$(cat
> $DHCP_TEST_DIR/dhclient.pid) 2>/dev/null || true"
>
>  # Verify client got an IP address from DHCP.
>  NS_CHECK_EXEC([client], [ip addr show client | grep -q "192.168.1.100"],
> [0])
> --
> 2.47.1
>
> _______________________________________________
> dev mailing list
> [email protected]
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
>
Thank you Xavier,

applied to main and backported down to 25.03.

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

Reply via email to