Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 14 Sep 2021 20:01:44 GMT
From:      Kristof Provost <kp@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: 458e97f5fdbf - stable/12 - netpfil tests: IPv6 dummynet queue test
Message-ID:  <202109142001.18EK1itu089811@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch stable/12 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=458e97f5fdbfe05bbb467837881f8df3849a32c6

commit 458e97f5fdbfe05bbb467837881f8df3849a32c6
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-09-02 13:40:51 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-09-14 08:33:29 +0000

    netpfil tests: IPv6 dummynet queue test
    
    Same as the v4 test, but with IPv6.
    
    MFC after:      2 weeks
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D31789
    
    (cherry picked from commit 12184311c16160464a36ae05b1cd8c5e3c24fbaa)
---
 tests/sys/netpfil/common/dummynet.sh | 107 +++++++++++++++++++++++++++++++++++
 1 file changed, 107 insertions(+)

diff --git a/tests/sys/netpfil/common/dummynet.sh b/tests/sys/netpfil/common/dummynet.sh
index 4b3d01e124eb..7ff9a1e18fdc 100644
--- a/tests/sys/netpfil/common/dummynet.sh
+++ b/tests/sys/netpfil/common/dummynet.sh
@@ -214,10 +214,117 @@ queue_cleanup()
 	firewall_cleanup $1
 }
 
+queue_v6_head()
+{
+	atf_set descr 'Basic queue test'
+	atf_set require.user root
+}
+
+queue_v6_body()
+{
+	fw=$1
+	firewall_init $fw
+	dummynet_init $fw
+
+	epair=$(vnet_mkepair)
+	vnet_mkjail alcatraz ${epair}b
+
+	ifconfig ${epair}a inet6 2001:db8:42::1/64 no_dad up
+	jexec alcatraz ifconfig ${epair}b inet6 2001:db8:42::2 no_dad up
+	jexec alcatraz /usr/sbin/inetd -p inetd-alcatraz.pid \
+	    $(atf_get_srcdir)/../pf/echo_inetd.conf
+
+	# Sanity check
+	atf_check -s exit:0 -o ignore ping6 -i .1 -c 3 -s 1200 2001:db8:42::2
+	reply=$(echo "foo" | nc -N 2001:db8:42::2 7)
+	if [ "$reply" != "foo" ];
+	then
+		atf_fail "Echo sanity check failed"
+	fi
+
+	jexec alcatraz dnctl pipe 1 config bw 1MByte/s
+	jexec alcatraz dnctl sched 1 config pipe 1 type wf2q+
+	jexec alcatraz dnctl queue 100 config sched 1 weight 99 mask all
+	jexec alcatraz dnctl queue 200 config sched 1 weight 1 mask all
+
+	firewall_config alcatraz ${fw} \
+		"ipfw"	\
+			"ipfw add 1001 queue 100 tcp from 2001:db8:42::2 to any out" \
+			"ipfw add 1000 queue 200 ipv6-icmp from 2001:db8:42::2 to any out" \
+			"ipfw add 1002 allow ip6 from any to any" \
+		"pf" \
+			"pass out proto tcp dnqueue 100"	\
+			"pass out proto icmp6 dnqueue 200"
+
+	# Single ping succeeds
+	atf_check -s exit:0 -o ignore ping6 -c 1 2001:db8:42::2
+
+	# Unsaturated TCP succeeds
+	reply=$(echo "foo" | nc -w 5 -N 2001:db8:42::2 7)
+	if [ "$reply" != "foo" ];
+	then
+		atf_fail "Unsaturated echo failed"
+	fi
+
+	# Saturate the link
+	ping6 -f -s 1200 2001:db8:42::2 &
+
+	# Allow this to fill the queue
+	sleep 1
+
+	# TCP should still just pass
+	fails=0
+	for i in `seq 1 3`
+	do
+		result=$(dd if=/dev/zero bs=1024 count=1000 | timeout 3 nc -w 5 -N 2001:db8:42::2 7 | wc -c)
+		if [ $result -ne 1024000 ];
+		then
+			echo "Failed to prioritise TCP traffic. Got only $result bytes"
+			fails=$(( ${fails} + 1 ))
+		fi
+	done
+	if [ ${fails} -gt 0 ];
+	then
+		atf_fail "We failed prioritisation ${fails} times"
+	fi
+
+	# What happens if we prioritise ICMP over TCP?
+	firewall_config alcatraz ${fw} \
+		"ipfw"	\
+			"ipfw add 1001 queue 200 tcp from 2001:db8:42::2 to any out" \
+			"ipfw add 1000 queue 100 ipv6-icmp from 2001:db8:42::2 to any out" \
+			"ipfw add 1002 allow ip6 from any to any" \
+		"pf" \
+			"pass out proto tcp dnqueue 200"	\
+			"pass out proto icmp6 dnqueue 100"
+
+	fails=0
+	for i in `seq 1 3`
+	do
+		result=$(dd if=/dev/zero bs=1024 count=1000 | timeout 3 nc -w 5 -N 2001:db8:42::2 7 | wc -c)
+		if [ $result -ne 1024000 ];
+		then
+			echo "Failed to prioritise TCP traffic. Got only $result bytes"
+			fails=$(( ${fails} + 1 ))
+		fi
+	done
+	if [ ${fails} -lt 3 ];
+	then
+		atf_fail "We failed reversed prioritisation only ${fails} times."
+	fi
+}
+
+queue_v6_cleanup()
+{
+	firewall_cleanup $1
+}
+
 setup_tests		\
 	pipe		\
 		ipfw	\
 	pipe_v6		\
 		ipfw	\
 	queue		\
+		ipfw	\
+	queue_v6	\
 		ipfw



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202109142001.18EK1itu089811>