Hello,

adds two test cases for issues reported by Leonardo.  I've created extra
pfloadanchors target in regress/sbin/pfctl/Makefile. The 'load anchor ... from
' construct still needs more love to be covered by existing targets.

consider output for command 'pfctl -o none -nvf  pf113.in':

--------8<---------------8<---------------8<------------------8<--------
anchor "one" all
anchor "two" all
addrs = "{      1.2.3.4,                10.20.30.40,            2.4.6.8,        
        20.40.60.80,            4.8.12.16,              40.80.120.160,          
5.6.7.8,                50.60.70.80,           
10.12.14.16,            100.120.140.160 }"
pass inet from 1.2.3.4 to any flags S/SA
pass inet from 10.20.30.40 to any flags S/SA
pass inet from 2.4.6.8 to any flags S/SA
pass inet from 20.40.60.80 to any flags S/SA
pass inet from 4.8.12.16 to any flags S/SA
pass inet from 40.80.120.160 to any flags S/SA
pass inet from 5.6.7.8 to any flags S/SA
pass inet from 50.60.70.80 to any flags S/SA
pass inet from 10.12.14.16 to any flags S/SA
pass inet from 100.120.140.160 to any flags S/SA
--------8<---------------8<---------------8<------------------8<--------

The output above thoygh it's syntactically valid, is not the ruleset, which
would loaded to kernel. See output here:
--------8<---------------8<---------------8<------------------8<--------
pfctl -a regress -o none -f pf113.in
pfctl -a 'regress/*' -sr
anchor "one" all {
  anchor "two" all {
    pass inet from 1.2.3.4 to any flags S/SA
    pass inet from 10.20.30.40 to any flags S/SA
    pass inet from 2.4.6.8 to any flags S/SA
    pass inet from 20.40.60.80 to any flags S/SA
    pass inet from 4.8.12.16 to any flags S/SA
    pass inet from 40.80.120.160 to any flags S/SA
    pass inet from 5.6.7.8 to any flags S/SA
    pass inet from 50.60.70.80 to any flags S/SA
    pass inet from 10.12.14.16 to any flags S/SA
    pass inet from 100.120.140.160 to any flags S/SA
  }
}
--------8<---------------8<---------------8<------------------8<--------

I've tried to fix it, but decided to postpone the work. I'll eventually get
back to it.

The test cases below, load rules to kernel and then dump them using 'pfctl
-sr'. rules pf112.in verify the user-defined table can get loaded in anchor
'two'. pf113.in checks if optimizer still works for nested anchors.

OK?

thanks and
regards
sasha


--------8<---------------8<---------------8<------------------8<--------
diff --git a/regress/sbin/pfctl/Makefile b/regress/sbin/pfctl/Makefile
index adc236cc8b7..744aa408d97 100644
--- a/regress/sbin/pfctl/Makefile
+++ b/regress/sbin/pfctl/Makefile
@@ -30,6 +30,7 @@ PFIF2IP=1 2 3
 PFCHKSUM=1 2 3
 PFCMD=1
 PFCMDFAIL=1
+PFLOADANCHORS=112 113
 
 PFCTL ?=       /sbin/pfctl
 
@@ -331,6 +332,21 @@ pfchksum-update:   ${PFCHKSUM_UPDATES}
 NODEFAULT_TARGETS+=pfchksum
 REGRESS_ROOT_TARGETS+=pfchksum
 
+.for n in ${PFLOADANCHORS}
+PFLOADANCHORS_TARGETS+=pfloadanchors${n}
+
+pfloadanchors${n}:
+       ${SUDO} ${PFCTL} -a regress -v -f - < ${.CURDIR}/pf${n}.in
+       (${SUDO} ${PFCTL} -a 'regress/*' -sr | \
+           sed -e 's/__automatic_[0-9a-f]*_.*>/__automatic_>/' ) | \
+           diff -u ${.CURDIR}/pf${n}.ok /dev/stdin
+       ${SUDO} ${PFCTL} -o none -a regress -Fr >/dev/null 2>&1
+.endfor
+
+pfloadanchors:         ${PFLOADANCHORS_TARGETS}
+
+REGRESS_TARGETS+=pfloadanchors
+
 update:        ${UPDATE_TARGETS}
 
 alltests: ${REGRESS_TARGETS} ${NODEFAULT_TARGETS}
diff --git a/regress/sbin/pfctl/pf112.in b/regress/sbin/pfctl/pf112.in
new file mode 100644
index 00000000000..5b40dc0e69d
--- /dev/null
+++ b/regress/sbin/pfctl/pf112.in
@@ -0,0 +1,2 @@
+anchor "one"
+load anchor "one" from "pf112.one"
diff --git a/regress/sbin/pfctl/pf112.ok b/regress/sbin/pfctl/pf112.ok
new file mode 100644
index 00000000000..67420f7eea0
--- /dev/null
+++ b/regress/sbin/pfctl/pf112.ok
@@ -0,0 +1,5 @@
+anchor "one" all {
+  anchor "two" all {
+    pass from <foo> to any flags S/SA
+  }
+}
diff --git a/regress/sbin/pfctl/pf112.one b/regress/sbin/pfctl/pf112.one
new file mode 100644
index 00000000000..68e20033087
--- /dev/null
+++ b/regress/sbin/pfctl/pf112.one
@@ -0,0 +1,2 @@
+anchor "two"
+load anchor "two" from "pf112.two"
diff --git a/regress/sbin/pfctl/pf112.two b/regress/sbin/pfctl/pf112.two
new file mode 100644
index 00000000000..84e5f759569
--- /dev/null
+++ b/regress/sbin/pfctl/pf112.two
@@ -0,0 +1,2 @@
+table <foo> { 10.0.0.1 }
+pass from <foo>
diff --git a/regress/sbin/pfctl/pf113.in b/regress/sbin/pfctl/pf113.in
new file mode 100644
index 00000000000..f62fa7ab84a
--- /dev/null
+++ b/regress/sbin/pfctl/pf113.in
@@ -0,0 +1,2 @@
+anchor "one"
+load anchor "one" from "pf113.one"
diff --git a/regress/sbin/pfctl/pf113.ok b/regress/sbin/pfctl/pf113.ok
new file mode 100644
index 00000000000..a599c3c7e74
--- /dev/null
+++ b/regress/sbin/pfctl/pf113.ok
@@ -0,0 +1,5 @@
+anchor "one" all {
+  anchor "two" all {
+    pass inet from <__automatic_> to any flags S/SA
+  }
+}
diff --git a/regress/sbin/pfctl/pf113.one b/regress/sbin/pfctl/pf113.one
new file mode 100644
index 00000000000..4e4b63316b4
--- /dev/null
+++ b/regress/sbin/pfctl/pf113.one
@@ -0,0 +1,2 @@
+anchor "two"
+load anchor "two" from "pf113.two"
diff --git a/regress/sbin/pfctl/pf113.two b/regress/sbin/pfctl/pf113.two
new file mode 100644
index 00000000000..a99c64f94dc
--- /dev/null
+++ b/regress/sbin/pfctl/pf113.two
@@ -0,0 +1,12 @@
+addrs = "{     1.2.3.4,
+               10.20.30.40,
+               2.4.6.8,
+               20.40.60.80,
+               4.8.12.16,
+               40.80.120.160,
+               5.6.7.8,
+               50.60.70.80,
+               10.12.14.16,
+               100.120.140.160
+       }"
+pass from $addrs 

Reply via email to