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