Module Name:    src
Committed By:   riastradh
Date:           Tue Oct 29 22:24:31 UTC 2024

Modified Files:
        src/tests/net/npf: t_npf.sh
        src/usr.sbin/npf/npftest: npftest.conf
        src/usr.sbin/npf/npftest/libnpftest: npf_rule_test.c

Log Message:
npftest: Add a test to match groups of IPv6 addresses.

The npf_rule test group is now an xfail.  (npftest doesn't have a way
to mark individual cases in a test group as xfail, so this will have
to do for now.)

PR bin/55403: npfctl miscompiles IPv6 rules


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/tests/net/npf/t_npf.sh
cvs rdiff -u -r1.9 -r1.10 src/usr.sbin/npf/npftest/npftest.conf
cvs rdiff -u -r1.20 -r1.21 \
    src/usr.sbin/npf/npftest/libnpftest/npf_rule_test.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/net/npf/t_npf.sh
diff -u src/tests/net/npf/t_npf.sh:1.4 src/tests/net/npf/t_npf.sh:1.5
--- src/tests/net/npf/t_npf.sh:1.4	Mon Jun  1 11:08:57 2020
+++ src/tests/net/npf/t_npf.sh	Tue Oct 29 22:24:30 2024
@@ -1,4 +1,4 @@
-# $NetBSD: t_npf.sh,v 1.4 2020/06/01 11:08:57 martin Exp $
+# $NetBSD: t_npf.sh,v 1.5 2024/10/29 22:24:30 riastradh Exp $
 #
 # Copyright (c) 2008, 2010 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -29,6 +29,12 @@ run_test()
 {
 	local name="${1}"
 
+	case $name in
+	npf_rule)
+		atf_expect_fail "PR bin/55403: npfctl miscompiles IPv6 rules"
+		;;
+	esac
+
 	atf_check -o ignore -e ignore npfctl debug -c "$(atf_get_srcdir)/npftest.conf" -o ./npf.plist
 	atf_check -o ignore npftest -c npf.plist -T "${name}"
 }

Index: src/usr.sbin/npf/npftest/npftest.conf
diff -u src/usr.sbin/npf/npftest/npftest.conf:1.9 src/usr.sbin/npf/npftest/npftest.conf:1.10
--- src/usr.sbin/npf/npftest/npftest.conf:1.9	Sat May 30 14:16:56 2020
+++ src/usr.sbin/npf/npftest/npftest.conf	Tue Oct 29 22:24:30 2024
@@ -1,4 +1,4 @@
-# $NetBSD: npftest.conf,v 1.9 2020/05/30 14:16:56 rmind Exp $
+# $NetBSD: npftest.conf,v 1.10 2024/10/29 22:24:30 riastradh Exp $
 
 $ext_if = "npftest0"
 $int_if = "npftest1"
@@ -30,6 +30,10 @@ map $ext_if dynamic $local_ip1 port 6000
 $net6_inner = fd01:203:405::/48
 $net6_outer = 2001:db8:1::/48
 
+# Example of multiple addresses with a common 32-bit word, taken from
+# PR bin/55403: npfctl miscompiles IPv6 rules.
+$net6_pr55403 = { fe80::1, fe80::2 }
+
 $net_a = 10.100.0.0/16
 $net_b = 10.255.0.0/16
 
@@ -51,6 +55,9 @@ group "ext" on $ext_if {
 	pass stateful out final from $local_net
 	pass stateful in final to any port $ports
 	pass stateful in final proto icmp all
+
+	pass in final family inet6 proto tcp from $net6_pr55403
+
 	block all
 }
 

Index: src/usr.sbin/npf/npftest/libnpftest/npf_rule_test.c
diff -u src/usr.sbin/npf/npftest/libnpftest/npf_rule_test.c:1.20 src/usr.sbin/npf/npftest/libnpftest/npf_rule_test.c:1.21
--- src/usr.sbin/npf/npftest/libnpftest/npf_rule_test.c:1.20	Tue Oct 29 22:13:52 2024
+++ src/usr.sbin/npf/npftest/libnpftest/npf_rule_test.c	Tue Oct 29 22:24:30 2024
@@ -52,6 +52,29 @@ static const struct test_case {
 		.stateful_ret = RESULT_BLOCK,	.ret = RESULT_BLOCK
 	},
 
+	/*
+	 * Pass any of the { fe80::1, fe80::2 } group but nothing else
+	 * in fe80::/112.
+	 */
+	{
+		.af = AF_INET6,
+		.src = "fe80::1", .dst = "fe80::adec:c91c:d116:7592",
+		.ifname = IFNAME_EXT,		.di = PFIL_IN,
+		.stateful_ret = RESULT_PASS,	.ret = RESULT_PASS
+	},
+	{
+		.af = AF_INET6,
+		.src = "fe80::2", .dst = "fe80::adec:c91c:d116:7592",
+		.ifname = IFNAME_EXT,		.di = PFIL_IN,
+		.stateful_ret = RESULT_PASS,	.ret = RESULT_PASS
+	},
+	{
+		.af = AF_INET6,
+		.src = "fe80::3", .dst = "fe80::adec:c91c:d116:7592",
+		.ifname = IFNAME_EXT,		.di = PFIL_IN,
+		.stateful_ret = RESULT_BLOCK,	.ret = RESULT_BLOCK
+	},
+
 	/* Block. */
 	{
 		.af = AF_INET,

Reply via email to