Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 27 Jan 2022 09:20:28 GMT
From:      Kristof Provost <kp@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 74e6b014b488 - main - netpfil tests: test removing interfaces with pending dummynet packets
Message-ID:  <202201270920.20R9KSZE032902@gitrepo.freebsd.org>

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

URL: https://cgit.FreeBSD.org/src/commit/?id=74e6b014b48844a00d88a5197c68dee12d4d20b1

commit 74e6b014b48844a00d88a5197c68dee12d4d20b1
Author:     Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2021-11-19 22:05:48 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2022-01-27 08:36:09 +0000

    netpfil tests: test removing interfaces with pending dummynet packets
    
    Dummynet queues packets with an associated struct ifnet pointer. Ensure
    that things do not explode if that interface goes away with packets
    still in the queue.
    
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D33065
---
 tests/sys/netpfil/common/dummynet.sh | 50 ++++++++++++++++++++++++++++++++++++
 1 file changed, 50 insertions(+)

diff --git a/tests/sys/netpfil/common/dummynet.sh b/tests/sys/netpfil/common/dummynet.sh
index 448bb79a46f9..99d4f22ca366 100644
--- a/tests/sys/netpfil/common/dummynet.sh
+++ b/tests/sys/netpfil/common/dummynet.sh
@@ -28,6 +28,53 @@
 . $(atf_get_srcdir)/utils.subr
 . $(atf_get_srcdir)/runner.subr
 
+interface_removal_head()
+{
+	atf_set descr 'Test removing interfaces with dummynet delayed traffic'
+	atf_set require.user root
+}
+
+interface_removal_body()
+{
+	fw=$1
+	firewall_init $fw
+	dummynet_init $fw
+
+	epair=$(vnet_mkepair)
+	vnet_mkjail alcatraz ${epair}b
+
+	ifconfig ${epair}a 192.0.2.1/24 up
+	jexec alcatraz ifconfig ${epair}b 192.0.2.2/24 up
+
+	# Sanity check
+	atf_check -s exit:0 -o ignore ping -i .1 -c 3 -s 1200 192.0.2.2
+
+	jexec alcatraz dnctl pipe 1 config delay 1500
+
+	firewall_config alcatraz ${fw} \
+		"ipfw"	\
+			"ipfw add 1000 pipe 1 ip from any to any" \
+		"pf"	\
+			"pass dnpipe 1"
+
+	# single ping succeeds just fine
+	atf_check -s exit:0 -o ignore ping -c 1 192.0.2.2
+
+	# Send traffic that'll still be pending when we remove the interface
+	ping -c 5 -s 1200 192.0.2.2 &
+	sleep 1 # Give ping the chance to start.
+
+	# Remove the interface, but keep the jail around for a bit
+	ifconfig ${epair}a destroy
+
+	sleep 3
+}
+
+interface_removal_cleanup()
+{
+	firewall_cleanup $1
+}
+
 pipe_head()
 {
 	atf_set descr 'Basic pipe test'
@@ -374,6 +421,9 @@ nat_cleanup()
 }
 
 setup_tests		\
+	interface_removal	\
+		ipfw	\
+		pf	\
 	pipe		\
 		ipfw	\
 		pf	\



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