summaryrefslogtreecommitdiffstats
path: root/contrib/ipfilter/test
diff options
context:
space:
mode:
authordarrenr <darrenr@FreeBSD.org>2005-04-25 17:31:50 +0000
committerdarrenr <darrenr@FreeBSD.org>2005-04-25 17:31:50 +0000
commit1c27d898b4c751a3eaf3754898bbfefa174dec6a (patch)
tree230d1d527f6b251fd46e2108f5e341c63e59cb39 /contrib/ipfilter/test
parent4a018e38da65e3b750e7541d80879f2b98b3ea95 (diff)
parentd438802dcb3e270d6fcc65f075c808c64853a7c2 (diff)
downloadFreeBSD-src-1c27d898b4c751a3eaf3754898bbfefa174dec6a.zip
FreeBSD-src-1c27d898b4c751a3eaf3754898bbfefa174dec6a.tar.gz
This commit was generated by cvs2svn to compensate for changes in r145510,
which included commits to RCS files with non-trunk default branches.
Diffstat (limited to 'contrib/ipfilter/test')
-rw-r--r--contrib/ipfilter/test/.cvsignore87
-rw-r--r--contrib/ipfilter/test/Makefile89
-rw-r--r--contrib/ipfilter/test/bpftest28
-rw-r--r--contrib/ipfilter/test/dotest3
-rwxr-xr-xcontrib/ipfilter/test/dotest64
-rw-r--r--contrib/ipfilter/test/expected/bpf-f120
-rw-r--r--contrib/ipfilter/test/expected/bpf14
-rw-r--r--contrib/ipfilter/test/expected/f174
-rw-r--r--contrib/ipfilter/test/expected/i110
-rw-r--r--contrib/ipfilter/test/expected/i117
-rw-r--r--contrib/ipfilter/test/expected/i1238
-rw-r--r--contrib/ipfilter/test/expected/i132
-rw-r--r--contrib/ipfilter/test/expected/i148
-rw-r--r--contrib/ipfilter/test/expected/i154
-rw-r--r--contrib/ipfilter/test/expected/i21
-rw-r--r--contrib/ipfilter/test/expected/i37
-rw-r--r--contrib/ipfilter/test/expected/i43
-rw-r--r--contrib/ipfilter/test/expected/i52
-rw-r--r--contrib/ipfilter/test/expected/i68
-rw-r--r--contrib/ipfilter/test/expected/i72
-rw-r--r--contrib/ipfilter/test/expected/i96
-rw-r--r--contrib/ipfilter/test/expected/in18
-rw-r--r--contrib/ipfilter/test/expected/in289
-rw-r--r--contrib/ipfilter/test/expected/in522
-rw-r--r--contrib/ipfilter/test/expected/in63
-rw-r--r--contrib/ipfilter/test/expected/ip168
-rw-r--r--contrib/ipfilter/test/expected/l16
-rw-r--r--contrib/ipfilter/test/expected/l1.b6
-rw-r--r--contrib/ipfilter/test/expected/n113
-rw-r--r--contrib/ipfilter/test/expected/n106
-rw-r--r--contrib/ipfilter/test/expected/n1151
-rw-r--r--contrib/ipfilter/test/expected/n124
-rw-r--r--contrib/ipfilter/test/expected/n446
-rw-r--r--contrib/ipfilter/test/expected/n56
-rw-r--r--contrib/ipfilter/test/expected/n710
-rw-r--r--contrib/ipfilter/test/expected/n85
-rw-r--r--contrib/ipfilter/test/expected/n95
-rw-r--r--contrib/ipfilter/test/expected/ni16
-rw-r--r--contrib/ipfilter/test/expected/ni108
-rw-r--r--contrib/ipfilter/test/expected/ni118
-rw-r--r--contrib/ipfilter/test/expected/ni125
-rw-r--r--contrib/ipfilter/test/expected/ni1332
-rw-r--r--contrib/ipfilter/test/expected/ni1432
-rw-r--r--contrib/ipfilter/test/expected/ni1532
-rw-r--r--contrib/ipfilter/test/expected/ni1632
-rw-r--r--contrib/ipfilter/test/expected/ni218
-rw-r--r--contrib/ipfilter/test/expected/ni36
-rw-r--r--contrib/ipfilter/test/expected/ni46
-rw-r--r--contrib/ipfilter/test/expected/ni593
-rw-r--r--contrib/ipfilter/test/expected/ni69
-rw-r--r--contrib/ipfilter/test/expected/ni74
-rw-r--r--contrib/ipfilter/test/expected/ni88
-rw-r--r--contrib/ipfilter/test/expected/ni95
-rw-r--r--contrib/ipfilter/test/expected/p119
-rw-r--r--contrib/ipfilter/test/expected/p220
-rw-r--r--contrib/ipfilter/test/expected/p333
-rw-r--r--contrib/ipfilter/test/hextest2
-rw-r--r--contrib/ipfilter/test/input/f112
-rw-r--r--contrib/ipfilter/test/input/f1241
-rw-r--r--contrib/ipfilter/test/input/f1348
-rw-r--r--contrib/ipfilter/test/input/f1735
-rw-r--r--contrib/ipfilter/test/input/ipv6.12
-rw-r--r--contrib/ipfilter/test/input/l158
-rw-r--r--contrib/ipfilter/test/input/n13
-rw-r--r--contrib/ipfilter/test/input/n106
-rw-r--r--contrib/ipfilter/test/input/n1116
-rw-r--r--contrib/ipfilter/test/input/n1218
-rw-r--r--contrib/ipfilter/test/input/n47
-rw-r--r--contrib/ipfilter/test/input/n830
-rw-r--r--contrib/ipfilter/test/input/n930
-rw-r--r--contrib/ipfilter/test/input/ni19
-rw-r--r--contrib/ipfilter/test/input/ni104
-rw-r--r--contrib/ipfilter/test/input/ni1224
-rw-r--r--contrib/ipfilter/test/input/ni13235
-rw-r--r--contrib/ipfilter/test/input/ni14235
-rw-r--r--contrib/ipfilter/test/input/ni15235
-rw-r--r--contrib/ipfilter/test/input/ni16235
-rw-r--r--contrib/ipfilter/test/input/ni654
-rw-r--r--contrib/ipfilter/test/input/ni74
-rw-r--r--contrib/ipfilter/test/input/ni924
-rw-r--r--contrib/ipfilter/test/input/p18
-rw-r--r--contrib/ipfilter/test/input/p28
-rw-r--r--contrib/ipfilter/test/input/p312
-rwxr-xr-xcontrib/ipfilter/test/intest3
-rw-r--r--contrib/ipfilter/test/iptest22
-rw-r--r--contrib/ipfilter/test/itest3
-rwxr-xr-xcontrib/ipfilter/test/mhtest2
-rwxr-xr-xcontrib/ipfilter/test/mtest4
-rwxr-xr-xcontrib/ipfilter/test/natipftest55
-rwxr-xr-xcontrib/ipfilter/test/nattest10
-rw-r--r--contrib/ipfilter/test/ptest31
-rw-r--r--contrib/ipfilter/test/regress/bpf-f14
-rw-r--r--contrib/ipfilter/test/regress/bpf14
-rw-r--r--contrib/ipfilter/test/regress/i15
-rw-r--r--contrib/ipfilter/test/regress/i117
-rw-r--r--contrib/ipfilter/test/regress/i1213
-rw-r--r--contrib/ipfilter/test/regress/i138
-rw-r--r--contrib/ipfilter/test/regress/i148
-rw-r--r--contrib/ipfilter/test/regress/i155
-rw-r--r--contrib/ipfilter/test/regress/i21
-rw-r--r--contrib/ipfilter/test/regress/i34
-rw-r--r--contrib/ipfilter/test/regress/i43
-rw-r--r--contrib/ipfilter/test/regress/i68
-rw-r--r--contrib/ipfilter/test/regress/i94
-rw-r--r--contrib/ipfilter/test/regress/in12
-rw-r--r--contrib/ipfilter/test/regress/in289
-rw-r--r--contrib/ipfilter/test/regress/in522
-rw-r--r--contrib/ipfilter/test/regress/in63
-rw-r--r--contrib/ipfilter/test/regress/ip178
-rw-r--r--contrib/ipfilter/test/regress/n103
-rw-r--r--contrib/ipfilter/test/regress/n113
-rw-r--r--contrib/ipfilter/test/regress/n121
-rw-r--r--contrib/ipfilter/test/regress/n41
-rw-r--r--contrib/ipfilter/test/regress/n71
-rw-r--r--contrib/ipfilter/test/regress/n81
-rw-r--r--contrib/ipfilter/test/regress/n91
-rw-r--r--contrib/ipfilter/test/regress/ni10.nat2
-rw-r--r--contrib/ipfilter/test/regress/ni11.nat2
-rw-r--r--contrib/ipfilter/test/regress/ni12.ipf4
-rw-r--r--contrib/ipfilter/test/regress/ni12.nat1
-rw-r--r--contrib/ipfilter/test/regress/ni13.ipf3
-rw-r--r--contrib/ipfilter/test/regress/ni13.nat1
-rw-r--r--contrib/ipfilter/test/regress/ni14.ipf3
-rw-r--r--contrib/ipfilter/test/regress/ni14.nat1
-rw-r--r--contrib/ipfilter/test/regress/ni15.ipf3
-rw-r--r--contrib/ipfilter/test/regress/ni15.nat1
-rw-r--r--contrib/ipfilter/test/regress/ni16.ipf3
-rw-r--r--contrib/ipfilter/test/regress/ni16.nat1
-rw-r--r--contrib/ipfilter/test/regress/ni6.ipf9
-rw-r--r--contrib/ipfilter/test/regress/ni6.nat3
-rw-r--r--contrib/ipfilter/test/regress/ni7.nat2
-rw-r--r--contrib/ipfilter/test/regress/ni8.nat2
-rw-r--r--contrib/ipfilter/test/regress/ni9.ipf1
-rw-r--r--contrib/ipfilter/test/regress/ni9.nat1
-rw-r--r--contrib/ipfilter/test/regress/p1.ipf1
-rw-r--r--contrib/ipfilter/test/regress/p1.pool2
-rw-r--r--contrib/ipfilter/test/regress/p2.ipf1
-rw-r--r--contrib/ipfilter/test/regress/p3.ipf6
-rw-r--r--contrib/ipfilter/test/regress/p3.pool4
-rw-r--r--contrib/ipfilter/test/test.format77
-rwxr-xr-xcontrib/ipfilter/test/vfycksum.pl41
141 files changed, 2681 insertions, 349 deletions
diff --git a/contrib/ipfilter/test/.cvsignore b/contrib/ipfilter/test/.cvsignore
new file mode 100644
index 0000000..5825abc
--- /dev/null
+++ b/contrib/ipfilter/test/.cvsignore
@@ -0,0 +1,87 @@
+results
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+i1
+i2
+i3
+i4
+i5
+i6
+i7
+i8
+i9
+i10
+i11
+f1
+f2
+f3
+f4
+f5
+f6
+f7
+f8
+f9
+f10
+f11
+f12
+f13
+f14
+n1
+n2
+n3
+n4
+n5
+n6
+n7
+f15
+f16
+ipv6.1
+ipv6.2
+l1
+ni1
+ni2
+ni3
+ni4
+f17
+in1
+in2
+in3
+in4
+p1
+p2
+i12
+ip1
+p3
+i13
+ni5
+ni6
+i14
+in5
+ipv6.3
+n8
+n9
+n10
+n11
+ni7
+ni8
+ni9
+ni10
+ni11
+ni12
+n12
+in6
+i15
+ni13
+ni14
+ni15
+ni16
diff --git a/contrib/ipfilter/test/Makefile b/contrib/ipfilter/test/Makefile
index a7a6c29..7f17241 100644
--- a/contrib/ipfilter/test/Makefile
+++ b/contrib/ipfilter/test/Makefile
@@ -1,15 +1,21 @@
#
# (C)opyright 1993-1996 by Darren Reed.
#
-# Redistribution and use in source and binary forms are permitted
-# provided that this notice is preserved and due credit is given
-# to the original author and the contributors.
+# See the IPFILTER.LICENCE file for details on licencing.
#
BINDEST=/usr/local/bin
SBINDEST=/sbin
MANDIR=/usr/share/man
+all: results tests
-tests: first 0 ftests ptests ntests nitests logtests ipv6 intests
+results:
+ mkdir -p results
+
+tests: ipf nat logtests ipv6 pools
+
+ipf: ftests ptests
+
+nat: ntests nitests intests
first:
-mkdir -p results
@@ -18,57 +24,70 @@ first:
ftests: f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13 f14 f15 f16 f17
# Rule parsing tests
-ptests: i1 i2 i3 i4 i5 i6 i7 i8 i9 i10 i11 i12
+ptests: i1 i2 i3 i4 i5 i6 i7 i8 i9 i10 i11 i12 i13 i14 i15
-ntests: n1 n2 n3 n4 n5 n6 n7
+ntests: n1 n2 n3 n4 n5 n6 n7 n8 n9 n10 n11 n12
-nitests: ni1 ni2 ni3 ni4 ni5
+nitests: ni1 ni2 ni3 ni4 ni5 ni6 ni7 ni8 ni9 ni10 ni11 ni12 ni13 ni14 ni15 ni16
-intests: in1 in2 in3 in4
+intests: in1 in2 in3 in4 in5 in6
logtests: l1
-ipv6: ipv6.1 ipv6.2 ipv6.3
+pools: p1 p2 p3 ip1
-0:
- @(cd ..; make ipftest; )
+ipv6: ipv6.1 ipv6.2 ipv6.3
-f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f14:
- @/bin/sh ./dotest $@
+bpf: bpf1 bpf-f1
-f12 f13:
- @/bin/sh ./hextest $@
+f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13 f14:
+ @/bin/sh ./dotest `awk "/^$@ / { print; } " test.format`
-f15 f16:
- @/bin/sh ./mtest $@
+f15 f16 f17:
+ @/bin/sh ./mtest `awk "/^$@ / { print; } " test.format`
-f17:
- @/bin/sh ./mhtest $@
+i1 i2 i3 i4 i5 i6 i7 i8 i9 i10 i11 i12 i13 i14 i15 bpf1:
+ @/bin/sh ./itest `awk "/^$@ / { print; } " test.format`
-i1 i2 i3 i4 i5 i6 i7 i8 i9 i10 i11 i12:
- @/bin/sh ./itest $@
+n1 n2 n3 n4 n5 n6 n7 n8 n9 n10 n11 n12:
+ @/bin/sh ./nattest `awk "/^$@ / { print; } " test.format`
-n1 n2 n3 n4 n5 n6 n7:
- @/bin/sh ./nattest $@
+ni1 ni2 ni3 ni4 ni5 ni7 ni8 ni9 ni10 ni11 ni12 ni13 ni14 ni15 ni16:
+ @/bin/sh ./natipftest single `awk "/^$@ / { print; } " test.format`
-ni1 ni2 ni3 ni4 ni5 ni7 ni8 ni10 ni11:
- @/bin/sh ./natipftest $@
+ni6:
+ @/bin/sh ./natipftest multi `awk "/^$@ / { print; } " test.format`
-in1 in2 in3 in4:
- @/bin/sh ./intest $@
+in1 in2 in3 in4 in5 in6:
+ @/bin/sh ./intest `awk "/^$@ / { print; } " test.format`
l1:
- @/bin/sh ./logtest $@
+ @/bin/sh ./logtest `awk "/^$@ / { print; } " test.format`
ipv6.1 ipv6.2 ipv6.3:
- @/bin/sh ./dotest6 $@
+ @/bin/sh ./dotest6 `awk "/^$@ / { print; } " test.format`
+
+p1 p2 p3:
+ @/bin/sh ./ptest `awk "/^$@ / { print; } " test.format`
+
+ip1:
+ @/bin/sh ./iptest `awk "/^$@ / { print; } " test.format`
+
+bpf-f1:
+ /bin/sh ./bpftest `awk "/^$@ / { print; } " test.format`
clean:
- /bin/rm -f f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f13 f12 f14 f15 f16 f17
- /bin/rm -f i1 i2 i3 i4 i5 i6 i7 i8 i9 i10 i11 i12
- /bin/rm -f n1 n2 n3 n4 n5 n6 n7
- /bin/rm -f ni1 ni2 ni3 ni4 ni5
- /bin/rm -f in1 in2 in3 in4
+ /bin/rm -f f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13 f14 f15 f16 f17
+ /bin/rm -f i1 i2 i3 i4 i5 i6 i7 i8 i9 i10 i11 i12 i13 i14 i15
+ /bin/rm -f n1 n2 n3 n4 n5 n6 n7 n8 n9 n10 n11 n12
+ /bin/rm -f ni1 ni2 ni3 ni4 ni5 ni6 ni7 ni8 ni9
+ /bin/rm -f ni10 ni11 ni12 ni13 ni14 ni15 ni16
+ /bin/rm -f in1 in2 in3 in4 in5 in6
+ /bin/rm -f p1 p2 p3 ip1
/bin/rm -f l1
/bin/rm -f ipv6.1 ipv6.2 ipv6.3
- /bin/rm -f results/*
+ /bin/rm -f bpf1 bpf-f1
+ /bin/rm -f results/* logout
+
+diffs:
+ -cd expected; for i in *; do if [ -f $$i -a ! -f ../$$i -a -f ../results/$$i ] ; then diff -c $$i ../results/$$i >> ../diff.out; fi done
diff --git a/contrib/ipfilter/test/bpftest b/contrib/ipfilter/test/bpftest
new file mode 100644
index 0000000..b24c0f1
--- /dev/null
+++ b/contrib/ipfilter/test/bpftest
@@ -0,0 +1,28 @@
+#!/bin/sh
+if [ -f /usr/ucb/touch ] ; then
+ TOUCH=/usr/ucb/touch
+else
+ if [ -f /usr/bin/touch ] ; then
+ TOUCH=/usr/bin/touch
+ else
+ if [ -f /bin/touch ] ; then
+ TOUCH=/bin/touch
+ fi
+ fi
+fi
+echo "$1...";
+input=`expr $1 : 'bpf-\(.*\)'`
+/bin/cp /dev/null results/$1
+( while read rule; do
+ echo "$rule" | ../ipftest -Rbr - -i input/$input >> results/$1;
+ if [ $? -ne 0 ] ; then
+ exit 1;
+ fi
+ echo "--------" >> results/$1
+done ) < regress/$1
+cmp expected/$1 results/$1
+status=$?
+if [ $status = 0 ] ; then
+ $TOUCH $1
+fi
+exit $status
diff --git a/contrib/ipfilter/test/dotest b/contrib/ipfilter/test/dotest
index 5a11605..71c8cce 100644
--- a/contrib/ipfilter/test/dotest
+++ b/contrib/ipfilter/test/dotest
@@ -1,4 +1,5 @@
#!/bin/sh
+format=$2
if [ -f /usr/ucb/touch ] ; then
TOUCH=/usr/ucb/touch
else
@@ -13,7 +14,7 @@ fi
echo "$1...";
/bin/cp /dev/null results/$1
( while read rule; do
- echo "$rule" | ../ipftest -br - -i input/$1 >> results/$1;
+ echo "$rule" | ../ipftest -F $format -Rbr - -i input/$1 >> results/$1;
if [ $? -ne 0 ] ; then
exit 1;
fi
diff --git a/contrib/ipfilter/test/dotest6 b/contrib/ipfilter/test/dotest6
index 297de6f..d6db564 100755
--- a/contrib/ipfilter/test/dotest6
+++ b/contrib/ipfilter/test/dotest6
@@ -1,4 +1,6 @@
#!/bin/sh
+format=$2
+mkdir -p results
if [ -f /usr/ucb/touch ] ; then
TOUCH=/usr/ucb/touch
else
@@ -19,7 +21,7 @@ if [ $? -ne 0 ] ; then
exit 0
fi
( while read rule; do
- echo "$rule" | ../ipftest -6Hbr - -i input/$1 >> results/$1;
+ echo "$rule" | ../ipftest -F $format -6br - -i input/$1 >> results/$1;
if [ $? -ne 0 ] ; then
exit 1;
fi
diff --git a/contrib/ipfilter/test/expected/bpf-f1 b/contrib/ipfilter/test/expected/bpf-f1
new file mode 100644
index 0000000..85ce84c
--- /dev/null
+++ b/contrib/ipfilter/test/expected/bpf-f1
@@ -0,0 +1,20 @@
+nomatch
+pass
+nomatch
+nomatch
+--------
+nomatch
+nomatch
+nomatch
+pass
+--------
+nomatch
+nomatch
+nomatch
+nomatch
+--------
+nomatch
+nomatch
+nomatch
+nomatch
+--------
diff --git a/contrib/ipfilter/test/expected/bpf1 b/contrib/ipfilter/test/expected/bpf1
new file mode 100644
index 0000000..9d0ad1b
--- /dev/null
+++ b/contrib/ipfilter/test/expected/bpf1
@@ -0,0 +1,4 @@
+pass in bpf { "0x20 0 0 0xc 0x15 0 0x1 0x1010101 0x6 0 0 0x60 0x6 0 0 0" }
+pass out bpf { "0x20 0 0 0xc 0x15 0 0x1 0x1010101 0x6 0 0 0x60 0x6 0 0 0" }
+pass in bpf { "0x20 0 0 0x10 0x15 0 0x1 0x1010101 0x6 0 0 0x60 0x6 0 0 0" }
+pass out bpf { "0x20 0 0 0x10 0x15 0 0x1 0x1010101 0x6 0 0 0x60 0x6 0 0 0" }
diff --git a/contrib/ipfilter/test/expected/f17 b/contrib/ipfilter/test/expected/f17
index 99eee84..4fe3acf 100644
--- a/contrib/ipfilter/test/expected/f17
+++ b/contrib/ipfilter/test/expected/f17
@@ -3,8 +3,4 @@ block return-rst
pass
pass
pass
-pass
-pass
-pass
-pass
--------
diff --git a/contrib/ipfilter/test/expected/i1 b/contrib/ipfilter/test/expected/i1
index 3eb14be..93530f9 100644
--- a/contrib/ipfilter/test/expected/i1
+++ b/contrib/ipfilter/test/expected/i1
@@ -1,7 +1,7 @@
-pass in from any to any
-block out from any to any
-log in from any to any
-log body in from any to any
+pass in all
+block out all
+log in all
+log body in all
count in from any to any
pass in from !any to any
block in from any to !any
@@ -11,3 +11,5 @@ pass in log body quick from any to any
block return-rst in quick on le0(!) proto tcp from any to any
block return-icmp in on qe0(!) from any to any
block return-icmp(host-unr) in on qe0(!) from any to any
+block return-icmp-as-dest(port-unr) in on qe0(!) from any to any
+pass out on longNICname0(!) from 254.220.186.152/32 to 254.220.186.152/32
diff --git a/contrib/ipfilter/test/expected/i11 b/contrib/ipfilter/test/expected/i11
index ddf8000..058d03a 100644
--- a/contrib/ipfilter/test/expected/i11
+++ b/contrib/ipfilter/test/expected/i11
@@ -1,5 +1,8 @@
pass in on ed0(!) proto tcp from 127.0.0.1/32 to 127.0.0.1/32 port = 23 keep state
block in log first on lo0(!) proto tcp/udp from any to any keep state
-pass in proto udp from 127.0.0.1/32 to 127.0.0.1/32 port = 2049 keep frags
+pass in proto udp from 127.0.0.1/32 to 127.0.0.1/32 port = 20499 keep frags
pass in proto udp from 127.0.0.1/32 to 127.0.0.1/32 port = 53 keep state keep frags
-pass in proto tcp from any port > 1024 to 127.0.0.1/32 port = 25 keep state
+pass in on ed0(!) out-via vx0(!) proto udp from any to any keep state
+pass out on ppp0(!) in-via le0(!) proto tcp from any to any keep state
+pass in proto tcp from any port > 1024 to 127.0.0.1/32 port = 1024 keep state
+pass in proto tcp from any to any flags S/FSRPAU keep state (limit 101,strict,newisn,no-icmp-err)
diff --git a/contrib/ipfilter/test/expected/i12 b/contrib/ipfilter/test/expected/i12
index 2a904a3..22a3488 100644
--- a/contrib/ipfilter/test/expected/i12
+++ b/contrib/ipfilter/test/expected/i12
@@ -1,4 +1,34 @@
-block in on eri0(!) from any to any head 1
-pass in on eri0(!) proto icmp from any to any group 1
-pass out on ed0(!) from any to any head 1000000
-block out on ed0(!) proto udp from any to any group 1000000
+pass in from 1.1.1.1/32 to 2.2.2.2/32
+pass in from 2.2.2.0/24 to 4.4.4.4/32
+pass in from 3.3.3.3/32 to 4.4.4.4/32
+pass in from 2.2.2.0/24 to 5.5.5.5/32
+pass in from 3.3.3.3/32 to 5.5.5.5/32
+pass in from 2.2.2.0/24 to 6.6.6.6/32
+pass in from 3.3.3.3/32 to 6.6.6.6/32
+pass in from 2.2.2.0/24 to 5.5.5.5/32 port = 22
+pass in from 3.3.3.3/32 to 5.5.5.5/32 port = 22
+pass in from 2.2.2.0/24 to 6.6.6.6/32 port = 22
+pass in from 3.3.3.3/32 to 6.6.6.6/32 port = 22
+pass in from 2.2.2.0/24 to 5.5.5.5/32 port = 25
+pass in from 3.3.3.3/32 to 5.5.5.5/32 port = 25
+pass in from 2.2.2.0/24 to 6.6.6.6/32 port = 25
+pass in from 3.3.3.3/32 to 6.6.6.6/32 port = 25
+pass in proto tcp from 2.2.2.0/24 to 5.5.5.5/32 port = 53
+pass in proto tcp from 3.3.3.3/32 to 5.5.5.5/32 port = 53
+pass in proto tcp from 2.2.2.0/24 to 6.6.6.6/32 port = 53
+pass in proto tcp from 3.3.3.3/32 to 6.6.6.6/32 port = 53
+pass in proto tcp from 2.2.2.0/24 to 5.5.5.5/32 port = 9
+pass in proto tcp from 3.3.3.3/32 to 5.5.5.5/32 port = 9
+pass in proto tcp from 2.2.2.0/24 to 6.6.6.6/32 port = 9
+pass in proto tcp from 3.3.3.3/32 to 6.6.6.6/32 port = 9
+pass in proto udp from 2.2.2.0/24 to 5.5.5.5/32 port = 53
+pass in proto udp from 3.3.3.3/32 to 5.5.5.5/32 port = 53
+pass in proto udp from 2.2.2.0/24 to 6.6.6.6/32 port = 53
+pass in proto udp from 3.3.3.3/32 to 6.6.6.6/32 port = 53
+pass in proto udp from 2.2.2.0/24 to 5.5.5.5/32 port = 9
+pass in proto udp from 3.3.3.3/32 to 5.5.5.5/32 port = 9
+pass in proto udp from 2.2.2.0/24 to 6.6.6.6/32 port = 9
+pass in proto udp from 3.3.3.3/32 to 6.6.6.6/32 port = 9
+pass in from 10.10.10.10/32 to 11.11.11.11/32
+pass in from pool/101(!) to hash/202(!)
+pass in from hash/303(!) to pool/404(!)
diff --git a/contrib/ipfilter/test/expected/i13 b/contrib/ipfilter/test/expected/i13
new file mode 100644
index 0000000..5c8d945
--- /dev/null
+++ b/contrib/ipfilter/test/expected/i13
@@ -0,0 +1,2 @@
+block in from any to any
+pass in from any to any
diff --git a/contrib/ipfilter/test/expected/i14 b/contrib/ipfilter/test/expected/i14
new file mode 100644
index 0000000..5a10155
--- /dev/null
+++ b/contrib/ipfilter/test/expected/i14
@@ -0,0 +1,8 @@
+block in on eri0(!) all head 1
+pass in on eri0(!) proto icmp from any to any group 1
+pass out on ed0(!) all head 1000000
+block out on ed0(!) proto udp from any to any group 1000000
+block in on vm0(!) proto tcp/udp from any to any head 101
+pass in proto tcp/udp from 1.1.1.1/32 to 2.2.2.2/32 group 101
+pass in proto tcp from 1.0.0.1/32 to 2.0.0.2/32 group 101
+pass in proto udp from 2.0.0.2/32 to 3.0.0.3/32 group 101
diff --git a/contrib/ipfilter/test/expected/i15 b/contrib/ipfilter/test/expected/i15
new file mode 100644
index 0000000..4974659
--- /dev/null
+++ b/contrib/ipfilter/test/expected/i15
@@ -0,0 +1,4 @@
+pass out on fxp0(!) all set-tag(log=100)
+pass out on fxp0(!) all set-tag(nat=foo)
+pass out on fxp0(!) all set-tag(log=100, nat=200)
+pass out on fxp0(!) all set-tag(log=2147483648, nat=overtherainbowis)
diff --git a/contrib/ipfilter/test/expected/i2 b/contrib/ipfilter/test/expected/i2
index 9d3398d..37ec9c4 100644
--- a/contrib/ipfilter/test/expected/i2
+++ b/contrib/ipfilter/test/expected/i2
@@ -1,6 +1,7 @@
log in proto tcp from any to any
pass in proto tcp from any to any
pass in proto udp from 127.0.0.1/32 to 127.0.0.1/32
+block in proto ipv6 from any to any
block in proto udp from any to any
block in proto 250 from any to any
pass in proto tcp/udp from any to any
diff --git a/contrib/ipfilter/test/expected/i3 b/contrib/ipfilter/test/expected/i3
index 18d9161..6150c7e 100644
--- a/contrib/ipfilter/test/expected/i3
+++ b/contrib/ipfilter/test/expected/i3
@@ -1,4 +1,5 @@
-log in from any to any
+log in all
+pass in from 128.16.0.0/16 to 129.10.10.0/24
pass in from 128.0.0.0/24 to 128.0.0.0/16
pass in from 128.0.0.0/24 to 128.0.0.0/16
pass in from 128.0.0.0/24 to 128.0.0.0/16
@@ -6,5 +7,5 @@ pass in from 128.0.0.0/24 to 128.0.0.0/16
pass in from 128.0.0.0/24 to 128.0.0.0/16
pass in from 127.0.0.1/32 to 127.0.0.1/32
block in log from any to any
-block in log level auth.info on hme0(!) from any to any
-log level local5.warn out from any to any
+block in log level auth.info on hme0(!) all
+log level local5.warn out all
diff --git a/contrib/ipfilter/test/expected/i4 b/contrib/ipfilter/test/expected/i4
index dfa3674..89c0995 100644
--- a/contrib/ipfilter/test/expected/i4
+++ b/contrib/ipfilter/test/expected/i4
@@ -2,6 +2,7 @@ log in proto tcp from any port > 0 to any
log in proto tcp from any to any port > 0
pass in proto tcp from any port != 0 to any port 0 >< 65535
pass in proto udp from 127.0.0.1/32 port > 32000 to 127.0.0.1/32 port < 29000
-block in proto udp from any port != 123 to any port < 123
+block in proto udp from any port != 123 to any port < 7
block in proto tcp from any port = 25 to any port > 25
pass in proto tcp/udp from any port 1 >< 3 to any port 1 <> 3
+pass in log first quick proto tcp from any port > 1023 to any port = 1723 flags S/FSRPAU keep state
diff --git a/contrib/ipfilter/test/expected/i5 b/contrib/ipfilter/test/expected/i5
index 3bcb10b..6947ad3 100644
--- a/contrib/ipfilter/test/expected/i5
+++ b/contrib/ipfilter/test/expected/i5
@@ -1,4 +1,4 @@
-log in from any to any
+log in all
count in tos 0x80 from any to any
pass in on ed0(!) tos 0x40 from 127.0.0.1/32 to 127.0.0.1/32
block in log on lo0(!) ttl 0 from any to any
diff --git a/contrib/ipfilter/test/expected/i6 b/contrib/ipfilter/test/expected/i6
index 4849626..40fe185 100644
--- a/contrib/ipfilter/test/expected/i6
+++ b/contrib/ipfilter/test/expected/i6
@@ -1,4 +1,10 @@
pass in on lo0(!) fastroute from any to any
+pass in on lo0(!) to qe0(!) from 127.0.0.1/32 to 127.0.0.1/32
+pass in on le0(!) to qe0(!):127.0.0.1 from 127.0.0.1/32 to 127.0.0.1/32
pass in on lo0(!) dup-to qe0(!) from 127.0.0.1/32 to 127.0.0.1/32
-pass in on qe0(!) dup-to qe0(!):127.0.0.1 from 127.0.0.1/32 to 127.0.0.1/32
+pass in on le0(!) dup-to qe0(!):127.0.0.1 from 127.0.0.1/32 to 127.0.0.1/32
+pass in on le0(!) dup-to qe0(!):127.0.0.1 to hme0(!):10.1.1.1 from 127.0.0.1/32 to 127.0.0.1/32
block in quick on qe0(!) to qe1(!) from any to any
+block in quick to qe1(!) from any to any
+pass out quick dup-to hme0(!) from any to any
+pass in quick fastroute all
diff --git a/contrib/ipfilter/test/expected/i7 b/contrib/ipfilter/test/expected/i7
index db9cd01..c46364b 100644
--- a/contrib/ipfilter/test/expected/i7
+++ b/contrib/ipfilter/test/expected/i7
@@ -1,4 +1,4 @@
pass in on ed0(!) proto tcp from 127.0.0.1/32 to 127.0.0.1/32 port = 23 flags S/SA
-block in on lo0(!) proto tcp from any to any flags A/FSRPAUC
+block in on lo0(!) proto tcp from any to any flags A/FSRPAU
pass in on lo0(!) proto tcp from any to any flags /SPA
block in on lo0(!) proto tcp from any to any flags C/A
diff --git a/contrib/ipfilter/test/expected/i9 b/contrib/ipfilter/test/expected/i9
index b36d864..bae7c9b 100644
--- a/contrib/ipfilter/test/expected/i9
+++ b/contrib/ipfilter/test/expected/i9
@@ -1,5 +1,7 @@
-pass in from 127.0.0.1/32 to 127.0.0.1/32 with short
-block in from any to any with ipopt
+pass in from 127.0.0.1/32 to 127.0.0.1/32 with short,frag
+block in from any to any with ipopts
pass in from any to any with opt nop,rr,zsu
pass in from any to any with opt nop,rr,zsu not opt lsrr,ssrr
pass in from 127.0.0.1/32 to 127.0.0.1/32 with not frag
+pass in proto tcp from any to any flags S/FSRPAU with not oow keep state
+pass in proto tcp from any to any flags S/FSRPAU with not bad,bad-src,bad-nat
diff --git a/contrib/ipfilter/test/expected/in1 b/contrib/ipfilter/test/expected/in1
index c507db7..ce5a610 100644
--- a/contrib/ipfilter/test/expected/in1
+++ b/contrib/ipfilter/test/expected/in1
@@ -10,16 +10,18 @@ map ppp0 192.168.0.0/16 -> 0.0.0.0/32 portmap tcp/udp 30000:39999
map ppp0 192.168.0.0/16 -> 0.0.0.0/32 portmap tcp auto
map ppp0 192.168.0.0/16 -> 0.0.0.0/32 portmap udp auto
map ppp0 192.168.0.0/16 -> 0.0.0.0/32 portmap tcp/udp auto
-map ppp0 192.168.0.0/16 -> 0.0.0.0/32 proxy port ftp ftp/tcp
+map ppp0 192.168.0.0/16 -> 0.0.0.0/32 proxy port 21 ftp/tcp
map ppp0 192.168.0.0/16 -> 0.0.0.0/32 proxy port 1010 ftp/tcp
map le0 0.0.0.0/0 -> 0.0.0.0/32 frag
map le0 192.168.0.0/16 -> range 203.1.1.23-203.1.3.45 frag
map ppp0 192.168.0.0/16 -> 0.0.0.0/32 portmap tcp 10000:19999 frag
-map ppp0 192.168.0.0/16 -> 0.0.0.0/32 proxy port ftp ftp/tcp frag
+map ppp0 192.168.0.0/16 -> 0.0.0.0/32 proxy port 21 ftp/tcp frag
map le0 0.0.0.0/0 -> 0.0.0.0/32 age 10/10
map le0 192.168.0.0/16 -> range 203.1.1.23-203.1.3.45 age 10/20
map ppp0 192.168.0.0/16 -> 0.0.0.0/32 portmap tcp 10000:19999 age 30/30
map le0 0.0.0.0/0 -> 0.0.0.0/32 frag age 10/10
map le0 192.168.0.0/16 -> range 203.1.1.23-203.1.3.45 frag age 10/20
map ppp0 192.168.0.0/16 -> 0.0.0.0/32 portmap tcp 10000:19999 frag age 30/30
-map fxp0 from 192.168.0.0/18 to any port = ftp -> 1.2.3.4/32 proxy port ftp ftp/tcp
+map fxp0 from 192.168.0.0/18 to any port = 21 -> 1.2.3.4/32 proxy port 21 ftp/tcp
+map thisisalonginte 0.0.0.0/0 -> 0.0.0.0/32 mssclamp 1452 tag freddyliveshere
+map bar0 0.0.0.0/0 -> 0.0.0.0/32 icmpidmap icmp 1000:2000
diff --git a/contrib/ipfilter/test/expected/in2 b/contrib/ipfilter/test/expected/in2
index ebe747b..61c0d18 100644
--- a/contrib/ipfilter/test/expected/in2
+++ b/contrib/ipfilter/test/expected/in2
@@ -1,22 +1,67 @@
-rdr le0 0.0.0.0/0 port 0 -> 1.1.1.1 port 0 tcp
-rdr le0 0.0.0.0/0 port 0 -> 1.1.1.1 port 0 ip
-rdr le0 0.0.0.0/0 port 80 -> 1.1.1.1 port 80 tcp
-rdr le0 0.0.0.0/0 port 0 -> 1.1.1.1 port 0 ip
-rdr le0 0.0.0.0/0 port 80 -> 1.1.1.1 port 80 tcp
-rdr le0 0.0.0.0/0 port 80 -> 1.1.1.1 port 80 udp
-rdr le0 0.0.0.0/0 port 80 -> 1.1.1.1 port 80 tcp/udp
-rdr le0 0.0.0.0/0 port 0 -> 1.1.1.1 port 0 icmp
-rdr le0 0.0.0.0/0 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp
-rdr le0 0.0.0.0/0 port 80 -> 1.1.1.1 port 80 tcp round-robin
-rdr le0 0.0.0.0/0 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp round-robin
-rdr le0 0.0.0.0/0 port 0 -> 1.1.1.1 port 0 ip frag
-rdr le0 0.0.0.0/0 port 0 -> 1.1.1.1 port 0 icmp frag
-rdr le0 0.0.0.0/0 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp frag
-rdr le0 0.0.0.0/0 port 80 -> 1.1.1.1 port 80 tcp round-robin frag
-rdr le0 0.0.0.0/0 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp round-robin frag
-rdr le0 0.0.0.0/0 port 0 -> 1.1.1.1 port 0 ip frag age 10/10
-rdr le0 0.0.0.0/0 port 0 -> 1.1.1.1 port 0 ip frag age 10/20
-rdr le0 0.0.0.0/0 port 0 -> 1.1.1.1 port 0 icmp frag age 10/10
-rdr le0 0.0.0.0/0 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp frag age 20/20
-rdr le0 0.0.0.0/0 port 80 -> 1.1.1.1 port 80 tcp round-robin frag age 30/30
-rdr le0 0.0.0.0/0 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp round-robin frag age 40/40
+rdr le0 9.8.7.6/32 port 0 -> 1.1.1.1 port 0 tcp
+rdr le0 9.8.7.6/32 -> 1.1.1.1 ip
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 tcp
+rdr le0 9.8.7.6/32 -> 1.1.1.1 ip
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 tcp
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 udp
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 tcp/udp
+rdr le0 9.8.7.6/32 -> 1.1.1.1 icmp
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 tcp round-robin
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp round-robin
+rdr le0 9.8.7.6/32 -> 1.1.1.1 ip frag
+rdr le0 9.8.7.6/32 -> 1.1.1.1 icmp frag
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp frag
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 tcp round-robin frag
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp round-robin frag
+rdr le0 9.8.7.6/32 -> 1.1.1.1 ip frag age 10/10
+rdr le0 9.8.7.6/32 -> 1.1.1.1 ip frag age 10/20
+rdr le0 9.8.7.6/32 -> 1.1.1.1 icmp frag age 10/10
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp frag age 20/20
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 tcp round-robin frag age 30/30
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp round-robin frag age 40/40
+rdr le0 9.8.7.6/32 -> 1.1.1.1 ip
+rdr le0 9.8.7.6/32 -> 1.1.1.1 ip frag
+rdr le0 9.8.7.6/32 -> 1.1.1.1 icmp frag
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp frag sticky
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 tcp round-robin frag sticky
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp round-robin frag sticky
+rdr le0 9.8.7.6/32 -> 1.1.1.1 ip frag age 10/10
+rdr le0 9.8.7.6/32 -> 1.1.1.1 ip frag age 10/20
+rdr le0 9.8.7.6/32 -> 1.1.1.1 icmp frag age 10/10
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp frag age 20/20 sticky
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 tcp round-robin frag age 30/30 sticky
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp round-robin frag age 40/40 sticky
+rdr le0 9.8.7.6/32 -> 1.1.1.1 ip mssclamp 1000
+rdr le0 9.8.7.6/32 -> 1.1.1.1 ip mssclamp 1000
+rdr le0 9.8.7.6/32 -> 1.1.1.1 ip frag mssclamp 1000
+rdr le0 9.8.7.6/32 -> 1.1.1.1 icmp frag mssclamp 1000
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp frag sticky mssclamp 1000
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 tcp round-robin frag sticky mssclamp 1000
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp round-robin frag sticky mssclamp 1000
+rdr le0 9.8.7.6/32 -> 1.1.1.1 ip frag age 10/10 mssclamp 1000
+rdr le0 9.8.7.6/32 -> 1.1.1.1 ip frag age 10/20 mssclamp 1000
+rdr le0 9.8.7.6/32 -> 1.1.1.1 icmp frag age 10/10 mssclamp 1000
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp frag age 20/20 sticky mssclamp 1000
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 tcp round-robin frag age 30/30 sticky mssclamp 1000
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp round-robin frag age 40/40 sticky mssclamp 1000
+rdr le0 9.8.7.6/32 -> 1.1.1.1 ip tag nattagcacheline
+rdr le0 9.8.7.6/32 -> 1.1.1.1 ip mssclamp 1000 tag nattagcacheline
+rdr le0 9.8.7.6/32 -> 1.1.1.1 ip mssclamp 1000 tag nattagcacheline
+rdr le0 9.8.7.6/32 -> 1.1.1.1 ip frag mssclamp 1000 tag nattagcacheline
+rdr le0 9.8.7.6/32 -> 1.1.1.1 icmp frag mssclamp 1000 tag nattagcacheline
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp frag sticky mssclamp 1000 tag nattagcacheline
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 tcp round-robin frag sticky mssclamp 1000 tag nattagcacheline
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp round-robin frag sticky mssclamp 1000 tag nattagcacheline
+rdr le0 9.8.7.6/32 -> 1.1.1.1 ip frag age 10/10 mssclamp 1000 tag nattagcacheline
+rdr le0 9.8.7.6/32 -> 1.1.1.1 ip frag age 10/20 mssclamp 1000 tag nattagcacheline
+rdr le0 9.8.7.6/32 -> 1.1.1.1 icmp frag age 10/10 mssclamp 1000 tag nattagcacheline
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp frag age 20/20 sticky mssclamp 1000 tag nattagcacheline
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 tcp round-robin frag age 30/30 sticky mssclamp 1000 tag nattagcacheline
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp round-robin frag age 40/40 sticky mssclamp 1000 tag nattagcacheline
+rdr ge0 9.8.7.6/32 port 21 -> 1.1.1.1 port 21 tcp proxy ftp
+rdr ge0 9.8.7.6/32 port 21 -> 1.1.1.1 port 21 tcp proxy ftp
+rdr le0 9.8.7.6/32 port 1000-2000 -> 1.1.1.1 port 5555 tcp
+rdr le0 9.8.7.6/32 port 1000-2000 -> 1.1.1.1 port = 5555 tcp
+rdr le0 0.0.0.0/0 -> 254.220.186.152 ip
+rdr le0 0.0.0.0/0 -> 254.220.186.152,254.220.186.152 ip
diff --git a/contrib/ipfilter/test/expected/in5 b/contrib/ipfilter/test/expected/in5
new file mode 100644
index 0000000..7b3120a
--- /dev/null
+++ b/contrib/ipfilter/test/expected/in5
@@ -0,0 +1,22 @@
+rdr le0 from any to 9.8.7.6/32 port = 0 -> 1.1.1.1 port 0 tcp
+rdr le0 from any to 9.8.7.6/32 -> 1.1.1.1 ip
+rdr le0 from any to 9.8.7.6/32 port = 8888 -> 1.1.1.1 port 888 tcp
+rdr le0 from any to 9.8.7.6/32 -> 1.1.1.1 ip
+rdr le0 from any to 9.8.7.6/32 port = 8888 -> 1.1.1.1 port 888 tcp
+rdr le0 from any to 9.8.7.6/32 port = 8888 -> 1.1.1.1 port 888 udp
+rdr le0 from any to 9.8.7.6/32 port = 8888 -> 1.1.1.1 port 888 tcp/udp
+rdr le0 from any to 9.8.7.6/32 -> 1.1.1.1 icmp
+rdr le0 from any to 9.8.7.6/32 port = 8888 -> 1.1.1.1,1.1.1.2 port 888 tcp
+rdr le0 from any to 9.8.7.6/32 port = 8888 -> 1.1.1.1 port 888 tcp round-robin
+rdr le0 from any to 9.8.7.6/32 port = 8888 -> 1.1.1.1,1.1.1.2 port 888 tcp round-robin
+rdr le0 from any to 9.8.7.6/32 -> 1.1.1.1 ip frag
+rdr le0 from any to 9.8.7.6/32 -> 1.1.1.1 icmp frag
+rdr le0 from any to 9.8.7.6/32 port = 8888 -> 1.1.1.1,1.1.1.2 port 888 tcp frag
+rdr le0 from any to 9.8.7.6/32 port = 8888 -> 1.1.1.1 port 888 tcp round-robin frag
+rdr le0 from any to 9.8.7.6/32 port = 8888 -> 1.1.1.1,1.1.1.2 port 888 tcp round-robin frag
+rdr le0 from any to 9.8.7.6/32 -> 1.1.1.1 ip frag age 10/10
+rdr le0 from any to 9.8.7.6/32 -> 1.1.1.1 ip frag age 10/20
+rdr le0 from any to 9.8.7.6/32 -> 1.1.1.1 icmp frag age 10/10
+rdr le0 from any to 9.8.7.6/32 port = 8888 -> 1.1.1.1,1.1.1.2 port 888 tcp frag age 20/20
+rdr le0 from any to 9.8.7.6/32 port = 8888 -> 1.1.1.1 port 888 tcp round-robin frag age 30/30
+rdr le0 from any to 9.8.7.6/32 port = 8888 -> 1.1.1.1,1.1.1.2 port 888 tcp round-robin frag age 40/40
diff --git a/contrib/ipfilter/test/expected/in6 b/contrib/ipfilter/test/expected/in6
new file mode 100644
index 0000000..08bbff0
--- /dev/null
+++ b/contrib/ipfilter/test/expected/in6
@@ -0,0 +1,3 @@
+map foo0 from any port = 1 to any port != 0 -> 0.0.0.0/32 udp
+map foo0 from any port < 1 to any port > 0 -> 0.0.0.0/32 tcp
+map foo0 from any port <= 1 to any port >= 0 -> 0.0.0.0/32 tcp/udp
diff --git a/contrib/ipfilter/test/expected/ip1 b/contrib/ipfilter/test/expected/ip1
new file mode 100644
index 0000000..b04fa9d
--- /dev/null
+++ b/contrib/ipfilter/test/expected/ip1
@@ -0,0 +1,68 @@
+table role = ipf type = tree number = 1
+ {; };
+table role = ipf type = tree number = 100
+ { 2.2.2.0/24; ! 2.2.0.0/16; 1.2.3.4/32; };
+table role = ipf type = tree number = 110
+ { 2.2.2.0/24; ! 2.2.0.0/16; 1.2.3.4/32; };
+table role = ipf type = tree number = 120
+ { 2.2.2.0/24; ! 2.2.0.0/16; 1.2.3.4/32; };
+table role = ipf type = tree number = 130
+ { 2.2.2.0/24; ! 2.2.0.0/16; 1.2.3.4/32; };
+table role = ipf type = hash number = 2 size = 1
+ {; };
+table role = ipf type = hash number = 200 size = 5
+ { 0/0; 1/32; 1.2.3.4/32; };
+table role = nat type = hash number = 210 size = 5
+ { 0/0; 2/32; 1.2.3.4/32; };
+table role = auth type = hash number = 220 size = 5
+ { 0/0; 3/32; 1.2.3.4/32; };
+table role = count type = hash number = 230 size = 5
+ { 0/0; 4/32; 1.2.3.4/32; };
+table role = ipf type = hash number = 240 size = 5 seed = 101
+ { 0/0; 1/32; 1.2.3.4/32; };
+table role = nat type = hash number = 250 size = 5 seed = 101
+ { 0/0; 2/32; 1.2.3.4/32; };
+table role = auth type = hash number = 260 size = 5 seed = 101
+ { 0/0; 3/32; 1.2.3.4/32; };
+table role = count type = hash number = 270 size = 5 seed = 101
+ { 0/0; 4/32; 1.2.3.4/32; };
+table role = ipf type = hash number = 2000 size = 1001
+ { 0/0; 1/32; 1.2.3.4/32; };
+table role = nat type = hash number = 2000 size = 1001
+ { 0/0; 2/32; 1.2.3.4/32; };
+table role = auth type = hash number = 2000 size = 1001
+ { 0/0; 3/32; 1.2.3.4/32; };
+table role = count type = hash number = 2000 size = 1001
+ { 0/0; 4/32; 1.2.3.4/32; };
+table role = ipf type = hash number = 100 size = 1001 seed = 101
+ { 0/0; 1/32; 1.2.3.4/32; };
+table role = nat type = hash number = 100 size = 1001 seed = 101
+ { 0/0; 2/32; 1.2.3.4/32; };
+table role = auth type = hash number = 100 size = 1001 seed = 101
+ { 0/0; 3/32; 1.2.3.4/32; };
+table role = count type = hash number = 100 size = 1001 seed = 101
+ { 0/0; 4/32; 1.2.3.4/32; };
+group-map in role = ipf number = 300 size = 5
+ { 0/0, group = 303; 5/32, group = 303; 1.2.3.4/32, group = 303; };
+group-map in role = nat number = 300 size = 5
+ { 0/0, group = 303; 6/32, group = 303; 1.2.3.4/32, group = 303; };
+group-map in role = auth number = 300 size = 5
+ { 0/0, group = 303; 7/32, group = 303; 1.2.3.4/32, group = 303; };
+group-map in role = count number = 300 size = 5
+ { 0/0, group = 303; 8/32, group = 303; 1.2.3.4/32, group = 303; };
+group-map out role = ipf number = 400 size = 5
+ { 0/0, group = 303; 5/32, group = 303; 1.2.3.4/32, group = 606; };
+group-map out role = nat number = 400 size = 5
+ { 0/0, group = 303; 6/32, group = 303; 1.2.3.4/32, group = 606; };
+group-map out role = auth number = 400 size = 5
+ { 0/0, group = 303; 7/32, group = 303; 1.2.3.4/32, group = 606; };
+group-map out role = count number = 400 size = 5
+ { 0/0, group = 303; 8/32, group = 303; 1.2.3.4/32, group = 606; };
+group-map in role = ipf number = 500 size = 5
+ { 0/0, group = 10; 5/32, group = 800; 1.2.3.4/32, group = 606; };
+group-map in role = nat number = 500 size = 5
+ { 0/0, group = 10; 6/32, group = 800; 1.2.3.4/32, group = 606; };
+group-map in role = auth number = 500 size = 5
+ { 0/0, group = 10; 7/32, group = 800; 1.2.3.4/32, group = 606; };
+group-map in role = count number = 500 size = 5
+ { 0/0, group = 10; 8/32, group = 800; 1.2.3.4/32, group = 606; };
diff --git a/contrib/ipfilter/test/expected/l1 b/contrib/ipfilter/test/expected/l1
index dbd6b01..ba0de69 100644
--- a/contrib/ipfilter/test/expected/l1
+++ b/contrib/ipfilter/test/expected/l1
@@ -2,7 +2,7 @@ log in all
01/01/1970 00:00:00.000000 anon0 @-1:-1 L 1.1.1.1,1025 -> 2.2.2.2,25 PR tcp len 20 40 -S IN
01/01/1970 00:00:00.000000 anon0 @-1:-1 L 1.1.1.1,1025 -> 2.2.2.2,25 PR tcp len 20 40 -A IN
01/01/1970 00:00:00.000000 anon0 @-1:-1 L 2.2.2.2,25 -> 1.1.1.1,1025 PR tcp len 20 40 -AS IN
-01/01/1970 00:00:00.000000 anon0 @-1:-1 L 1.1.1.1,1025 -> 2.2.2.2,25 PR tcp len 20 40 -F IN
+01/01/1970 00:00:00.000000 anon0 @-1:-1 L 1.1.1.1,1025 -> 2.2.2.2,25 PR tcp len 20 40 -AF IN
01/01/1970 00:00:00.000000 2x anon0 @-1:-1 L 1.1.1.1,1025 -> 2.2.2.2,25 PR tcp len 20 40 -A IN
01/01/1970 00:00:00.000000 anon0 @-1:-1 L 1.1.1.1,1 -> 4.4.4.4,53 PR udp len 20 40 IN
01/01/1970 00:00:00.000000 2x anon0 @-1:-1 L 2.2.2.2,1 -> 4.4.4.4,53 PR udp len 20 40 IN
@@ -24,7 +24,7 @@ pass in log quick proto tcp from 1.1.1.1 to any flags S keep state
01/01/1970 00:00:00.000000 anon0 @0:1 p 1.1.1.1,1025 -> 2.2.2.2,25 PR tcp len 20 40 -A K-S IN
01/01/1970 00:00:00.000000 anon0 @0:1 p 2.2.2.2,25 -> 1.1.1.1,1025 PR tcp len 20 40 -AS K-S IN
01/01/1970 00:00:00.000000 e1 @0:1 p 2.2.2.2,25 -> 1.1.1.1,1025 PR tcp len 20 40 -A K-S OUT
-01/01/1970 00:00:00.000000 anon0 @0:1 p 1.1.1.1,1025 -> 2.2.2.2,25 PR tcp len 20 40 -F K-S IN
+01/01/1970 00:00:00.000000 anon0 @0:1 p 1.1.1.1,1025 -> 2.2.2.2,25 PR tcp len 20 40 -AF K-S IN
--------
pass in log first quick proto tcp from 1.1.1.1 to any flags S keep state
01/01/1970 00:00:00.000000 anon0 @0:1 p 1.1.1.1,1025 -> 2.2.2.2,25 PR tcp len 20 40 -S K-S IN
@@ -34,7 +34,7 @@ pass in log first quick proto tcp from 1.1.1.1 to any flags S keep state
01/01/1970 00:00:00.000000 anon0 @0:4 p 1.1.1.1,1025 -> 2.2.2.2,25 PR tcp len 20 40 -A K-S IN
01/01/1970 00:00:00.000000 anon0 @0:4 p 2.2.2.2,25 -> 1.1.1.1,1025 PR tcp len 20 40 -AS K-S IN
01/01/1970 00:00:00.000000 e1 @0:4 p 2.2.2.2,25 -> 1.1.1.1,1025 PR tcp len 20 40 -A K-S OUT
-01/01/1970 00:00:00.000000 anon0 @0:4 p 1.1.1.1,1025 -> 2.2.2.2,25 PR tcp len 20 40 -F K-S IN
+01/01/1970 00:00:00.000000 anon0 @0:4 p 1.1.1.1,1025 -> 2.2.2.2,25 PR tcp len 20 40 -AF K-S IN
01/01/1970 00:00:00.000000 2x anon0 @-1:-1 L 1.1.1.1,1025 -> 2.2.2.2,25 PR tcp len 20 40 -A IN
01/01/1970 00:00:00.000000 anon0 @-1:-1 L 1.1.1.1,1 -> 4.4.4.4,53 PR udp len 20 40 IN
01/01/1970 00:00:00.000000 anon0 @-1:-1 L 2.2.2.2,1 -> 4.4.4.4,53 PR udp len 20 40 IN
diff --git a/contrib/ipfilter/test/expected/l1.b b/contrib/ipfilter/test/expected/l1.b
index e5c1077..c060086 100644
--- a/contrib/ipfilter/test/expected/l1.b
+++ b/contrib/ipfilter/test/expected/l1.b
@@ -1,7 +1,7 @@
01/01/1970 00:00:00.000000 anon0 @-1:-1 L 1.1.1.1,1025 -> 2.2.2.2,25 PR tcp len 20 40 -S IN
01/01/1970 00:00:00.000000 anon0 @-1:-1 L 1.1.1.1,1025 -> 2.2.2.2,25 PR tcp len 20 40 -A IN
01/01/1970 00:00:00.000000 anon0 @-1:-1 L 2.2.2.2,25 -> 1.1.1.1,1025 PR tcp len 20 40 -AS IN
-01/01/1970 00:00:00.000000 anon0 @-1:-1 L 1.1.1.1,1025 -> 2.2.2.2,25 PR tcp len 20 40 -F IN
+01/01/1970 00:00:00.000000 anon0 @-1:-1 L 1.1.1.1,1025 -> 2.2.2.2,25 PR tcp len 20 40 -AF IN
01/01/1970 00:00:00.000000 2x anon0 @-1:-1 L 1.1.1.1,1025 -> 2.2.2.2,25 PR tcp len 20 40 -A IN
01/01/1970 00:00:00.000000 anon0 @-1:-1 L 1.1.1.1,1 -> 4.4.4.4,53 PR udp len 20 40 IN
01/01/1970 00:00:00.000000 2x anon0 @-1:-1 L 2.2.2.2,1 -> 4.4.4.4,53 PR udp len 20 40 IN
@@ -20,7 +20,7 @@
01/01/1970 00:00:00.000000 anon0 @0:1 p 1.1.1.1,1025 -> 2.2.2.2,25 PR tcp len 20 40 -A K-S IN
01/01/1970 00:00:00.000000 anon0 @0:1 p 2.2.2.2,25 -> 1.1.1.1,1025 PR tcp len 20 40 -AS K-S IN
01/01/1970 00:00:00.000000 e1 @0:1 p 2.2.2.2,25 -> 1.1.1.1,1025 PR tcp len 20 40 -A K-S OUT
-01/01/1970 00:00:00.000000 anon0 @0:1 p 1.1.1.1,1025 -> 2.2.2.2,25 PR tcp len 20 40 -F K-S IN
+01/01/1970 00:00:00.000000 anon0 @0:1 p 1.1.1.1,1025 -> 2.2.2.2,25 PR tcp len 20 40 -AF K-S IN
--------
01/01/1970 00:00:00.000000 anon0 @0:1 p 1.1.1.1,1025 -> 2.2.2.2,25 PR tcp len 20 40 -S K-S IN
--------
@@ -29,7 +29,7 @@
01/01/1970 00:00:00.000000 anon0 @0:4 p 1.1.1.1,1025 -> 2.2.2.2,25 PR tcp len 20 40 -A K-S IN
01/01/1970 00:00:00.000000 anon0 @0:4 p 2.2.2.2,25 -> 1.1.1.1,1025 PR tcp len 20 40 -AS K-S IN
01/01/1970 00:00:00.000000 e1 @0:4 p 2.2.2.2,25 -> 1.1.1.1,1025 PR tcp len 20 40 -A K-S OUT
-01/01/1970 00:00:00.000000 anon0 @0:4 p 1.1.1.1,1025 -> 2.2.2.2,25 PR tcp len 20 40 -F K-S IN
+01/01/1970 00:00:00.000000 anon0 @0:4 p 1.1.1.1,1025 -> 2.2.2.2,25 PR tcp len 20 40 -AF K-S IN
01/01/1970 00:00:00.000000 2x anon0 @-1:-1 L 1.1.1.1,1025 -> 2.2.2.2,25 PR tcp len 20 40 -A IN
01/01/1970 00:00:00.000000 anon0 @-1:-1 L 1.1.1.1,1 -> 4.4.4.4,53 PR udp len 20 40 IN
01/01/1970 00:00:00.000000 anon0 @-1:-1 L 2.2.2.2,1 -> 4.4.4.4,53 PR udp len 20 40 IN
diff --git a/contrib/ipfilter/test/expected/n1 b/contrib/ipfilter/test/expected/n1
index c195f6f..0f87034 100644
--- a/contrib/ipfilter/test/expected/n1
+++ b/contrib/ipfilter/test/expected/n1
@@ -19,7 +19,10 @@ ip 20(20) 255 10.1.1.2 > 10.3.4.5
ip 40(20) 6 10.1.1.1,1025 > 10.3.4.5,1025
ip 48(20) 1 10.2.2.2 > 10.4.3.2
ip 48(20) 1 10.4.3.2 > 10.1.1.1
+ip 48(20) 1 10.4.3.2 > 10.3.4.1
+ip 48(20) 1 10.4.3.2 > 10.3.4.2
ip 48(20) 1 10.4.3.2 > 10.3.4.3
+ip 48(20) 1 10.4.3.2 > 10.3.4.4
ip 48(20) 1 10.4.3.2 > 10.3.4.5
ip 20(20) 34 10.1.1.2 > 10.4.3.2
ip 20(20) 34 10.4.3.2 > 10.3.4.4
@@ -51,7 +54,10 @@ ip 20(20) 255 10.1.1.2 > 10.1.1.0
ip 40(20) 6 10.1.1.1,1025 > 10.1.1.2,1025
ip 48(20) 1 10.3.4.5 > 10.4.3.2
ip 48(20) 1 10.4.3.2 > 10.2.2.2
+ip 48(20) 1 10.4.3.2 > 10.3.4.1
+ip 48(20) 1 10.4.3.2 > 10.3.4.2
ip 48(20) 1 10.4.3.2 > 10.3.4.3
+ip 48(20) 1 10.4.3.2 > 10.3.4.4
ip 48(20) 1 10.4.3.2 > 10.1.1.1
ip 20(20) 34 10.3.4.5 > 10.4.3.2
ip 20(20) 34 10.4.3.2 > 10.3.4.4
@@ -81,9 +87,12 @@ ip 20(20) 255 10.1.1.0 > 10.3.4.5
ip 20(20) 255 10.1.1.1 > 10.3.4.5
ip 20(20) 255 10.1.1.2 > 10.3.4.5
ip 40(20) 6 10.1.1.1,1025 > 10.3.4.5,1025
-ip 48(20) 1 10.3.4.2 > 10.4.3.2
+ip 48(20) 1 10.3.4.3 > 10.4.3.2
ip 48(20) 1 10.4.3.2 > 10.2.2.2
-ip 48(20) 1 10.4.3.2 > 10.3.4.3
+ip 48(20) 1 10.4.3.2 > 10.3.4.1
+ip 48(20) 1 10.4.3.2 > 10.3.4.2
+ip 48(20) 1 10.4.3.2 > 10.1.1.1
+ip 48(20) 1 10.4.3.2 > 10.3.4.4
ip 48(20) 1 10.4.3.2 > 10.3.4.5
ip 20(20) 34 10.3.4.3 > 10.4.3.2
ip 20(20) 34 10.4.3.2 > 10.3.4.4
diff --git a/contrib/ipfilter/test/expected/n10 b/contrib/ipfilter/test/expected/n10
new file mode 100644
index 0000000..f30d757
--- /dev/null
+++ b/contrib/ipfilter/test/expected/n10
@@ -0,0 +1,6 @@
+4500 002c 10c9 4000 ff06 5c9d cbcb cbcb 96cb e002 8032 0015 bd6b c9c8 0000 0000 6002 2238 655d 0000 0204 0064
+-------------------------------
+4500 002c 10c9 4000 ff06 5c9d cbcb cbcb 96cb e002 8032 0015 bd6b c9c8 0000 0000 6002 2238 61d9 0000 0204 03e8
+-------------------------------
+4500 002c 10c9 4000 ff06 5c9d cbcb cbcb 96cb e002 8032 0015 bd6b c9c8 0000 0000 6002 2238 600d 0000 0204 05b4
+-------------------------------
diff --git a/contrib/ipfilter/test/expected/n11 b/contrib/ipfilter/test/expected/n11
new file mode 100644
index 0000000..3732709
--- /dev/null
+++ b/contrib/ipfilter/test/expected/n11
@@ -0,0 +1,51 @@
+ip 20(20) 255 10.1.1.0 > 10.1.1.2
+ip 20(20) 255 1.6.7.8 > 10.1.1.2
+ip 20(20) 255 10.1.1.2 > 10.1.1.1
+ip 20(20) 255 10.2.2.1 > 10.1.2.1
+ip 20(20) 255 10.2.2.2 > 10.1.2.1
+ip 20(20) 255 10.1.1.1 > 10.1.1.2
+ip 20(20) 255 10.1.1.2 > 10.1.1.1
+ip 20(20) 255 10.2.2.1 > 10.2.1.1
+ip 20(20) 255 10.2.2.2 > 10.2.1.1
+ip 20(20) 255 10.2.2.3 > 10.1.1.1
+ip 20(20) 255 10.2.3.4 > 10.2.2.2
+ip 20(20) 255 10.1.1.1 > 10.2.2.2
+ip 20(20) 255 10.1.1.2 > 10.2.2.2
+ip 20(20) 255 10.1.1.0 > 10.3.4.5
+ip 20(20) 255 10.1.1.1 > 10.3.4.5
+ip 20(20) 255 10.1.1.2 > 10.3.4.5
+-------------------------------
+ip 20(20) 255 10.2.2.2 > 10.1.1.2
+ip 20(20) 255 10.1.1.1 > 10.1.1.2
+ip 20(20) 255 10.2.2.2 > 10.1.1.1
+ip 20(20) 255 10.2.2.1 > 10.1.2.1
+ip 20(20) 255 10.2.2.2 > 10.1.2.1
+ip 20(20) 255 10.1.1.1 > 10.1.1.2
+ip 20(20) 255 10.1.1.2 > 10.1.1.1
+ip 20(20) 255 10.2.2.1 > 10.2.1.1
+ip 20(20) 255 10.2.2.2 > 10.2.1.1
+ip 20(20) 255 10.2.2.3 > 10.1.1.1
+ip 20(20) 255 10.2.3.4 > 10.1.1.0
+ip 20(20) 255 10.1.1.1 > 10.1.1.2
+ip 20(20) 255 10.1.1.2 > 10.1.1.0
+ip 20(20) 255 10.1.1.0 > 10.3.4.5
+ip 20(20) 255 10.1.1.1 > 10.3.4.5
+ip 20(20) 255 10.1.1.2 > 10.3.4.5
+-------------------------------
+ip 20(20) 255 10.3.4.0 > 10.1.1.2
+ip 20(20) 255 10.3.4.1 > 10.1.1.2
+ip 20(20) 255 10.3.4.2 > 10.1.1.1
+ip 20(20) 255 10.2.2.1 > 10.1.2.1
+ip 20(20) 255 10.2.2.2 > 10.1.2.1
+ip 20(20) 255 10.1.1.1 > 10.1.1.2
+ip 20(20) 255 10.1.1.2 > 10.1.1.1
+ip 20(20) 255 10.2.2.1 > 10.2.1.1
+ip 20(20) 255 10.2.2.2 > 10.2.1.1
+ip 20(20) 255 10.2.2.3 > 10.1.1.1
+ip 20(20) 255 10.2.3.4 > 10.2.2.2
+ip 20(20) 255 10.1.1.1 > 10.2.2.2
+ip 20(20) 255 10.1.1.2 > 10.2.2.2
+ip 20(20) 255 10.1.1.0 > 10.1.1.5
+ip 20(20) 255 10.1.1.1 > 10.1.1.5
+ip 20(20) 255 10.1.1.2 > 10.1.1.5
+-------------------------------
diff --git a/contrib/ipfilter/test/expected/n12 b/contrib/ipfilter/test/expected/n12
new file mode 100644
index 0000000..010b77b
--- /dev/null
+++ b/contrib/ipfilter/test/expected/n12
@@ -0,0 +1,4 @@
+4510 0040 2020 4000 4006 9478 c0a8 01bc c0a8 0303 2710 0017 4e33 298e 0000 0000 b002 4000 6ff8 0000 0204 05b4 0101 0402 0103 0300 0101 080a 0c72 549e 0000 0000
+4500 003c 00b0 4000 fe06 7964 c0a8 0303 c0a8 7e53 0017 12c2 f674 e02c 4e33 298f a012 2798 7ace 0000 0101 080a 2c05 b797 0c72 549e 0103 0300 0204 05b4
+4510 0034 493b 4000 4006 6b69 c0a8 01bc c0a8 0303 2710 0017 4e33 298f f674 e02d 8010 4000 f673 0000 0101 080a 0c72 549e 2c05 b797
+-------------------------------
diff --git a/contrib/ipfilter/test/expected/n4 b/contrib/ipfilter/test/expected/n4
index c6fb4d4..8cdf78c 100644
--- a/contrib/ipfilter/test/expected/n4
+++ b/contrib/ipfilter/test/expected/n4
@@ -1,30 +1,66 @@
ip 40(20) 6 10.3.3.3,12345 > 10.2.2.1,10023
+ip 40(20) 6 10.1.1.1,23 > 10.3.3.3,12345
ip 40(20) 6 10.3.3.3,12345 > 10.1.1.1,53
-ip 40(20) 6 10.3.3.3,12345 > 10.1.0.0,23
+ip 40(20) 6 10.2.2.1,10053 > 10.3.3.3,12345
+ip 40(20) 6 10.3.3.3,12346 > 10.1.0.0,23
+ip 40(20) 6 10.2.2.1,10023 > 10.3.3.3,12346
ip 28(20) 17 10.3.3.3,12345 > 10.1.1.0,53
+ip 28(20) 17 10.2.2.1,10053 > 10.3.3.3,12345
ip 40(20) 6 10.3.3.3,12345 > 10.1.1.0,53
+ip 40(20) 6 10.2.2.1,53 > 10.3.3.3,12345
-------------------------------
ip 40(20) 6 10.3.3.3,12345 > 10.2.2.1,10023
+ip 40(20) 6 10.1.1.1,23 > 10.3.3.3,12345
ip 40(20) 6 10.3.3.3,12345 > 10.1.1.1,53
-ip 40(20) 6 10.3.3.3,12345 > 10.1.0.0,23
+ip 40(20) 6 10.2.2.1,10053 > 10.3.3.3,12345
+ip 40(20) 6 10.3.3.3,12346 > 10.1.0.0,23
+ip 40(20) 6 10.2.2.1,10023 > 10.3.3.3,12346
ip 28(20) 17 10.3.3.3,12345 > 10.1.1.0,53
+ip 28(20) 17 10.2.2.1,10053 > 10.3.3.3,12345
ip 40(20) 6 10.3.3.3,12345 > 10.1.1.0,53
+ip 40(20) 6 10.2.2.1,53 > 10.3.3.3,12345
-------------------------------
ip 40(20) 6 10.3.3.3,12345 > 10.2.2.1,10023
+ip 40(20) 6 10.1.1.1,23 > 10.3.3.3,12345
ip 40(20) 6 10.3.3.3,12345 > 10.1.1.1,53
-ip 40(20) 6 10.3.3.3,12345 > 10.2.2.1,10023
+ip 40(20) 6 10.2.2.1,10053 > 10.3.3.3,12345
+ip 40(20) 6 10.3.3.3,12346 > 10.2.2.1,10023
+ip 40(20) 6 10.1.0.0,23 > 10.3.3.3,12346
ip 28(20) 17 10.3.3.3,12345 > 10.1.1.0,53
+ip 28(20) 17 10.2.2.1,10053 > 10.3.3.3,12345
ip 40(20) 6 10.3.3.3,12345 > 10.1.1.0,53
+ip 40(20) 6 10.2.2.1,53 > 10.3.3.3,12345
-------------------------------
ip 40(20) 6 10.3.3.3,12345 > 10.1.1.1,23
+ip 40(20) 6 10.2.2.1,10023 > 10.3.3.3,12345
ip 40(20) 6 10.3.3.3,12345 > 10.1.1.1,53
-ip 40(20) 6 10.3.3.3,12345 > 10.1.0.0,23
+ip 40(20) 6 10.2.2.1,10053 > 10.3.3.3,12345
+ip 40(20) 6 10.3.3.3,12346 > 10.1.0.0,23
+ip 40(20) 6 10.2.2.1,10023 > 10.3.3.3,12346
ip 28(20) 17 10.3.3.3,12345 > 10.2.2.1,10053
+ip 28(20) 17 10.1.1.0,53 > 10.3.3.3,12345
ip 40(20) 6 10.3.3.3,12345 > 10.1.1.0,53
+ip 40(20) 6 10.2.2.1,53 > 10.3.3.3,12345
-------------------------------
ip 40(20) 6 10.3.3.3,12345 > 10.2.2.1,23
+ip 40(20) 6 10.2.2.1,10023 > 10.3.3.3,12345
ip 40(20) 6 10.3.3.3,12345 > 10.2.2.1,53
-ip 40(20) 6 10.3.3.3,12345 > 10.1.0.0,23
+ip 40(20) 6 10.2.2.1,10053 > 10.3.3.3,12345
+ip 40(20) 6 10.3.3.3,12346 > 10.1.0.0,23
+ip 40(20) 6 10.2.2.1,10023 > 10.3.3.3,12346
ip 28(20) 17 10.3.3.3,12345 > 10.1.1.0,53
+ip 28(20) 17 10.2.2.1,10053 > 10.3.3.3,12345
+ip 40(20) 6 10.3.3.3,12345 > 10.2.2.1,53
+ip 40(20) 6 10.1.1.0,53 > 10.3.3.3,12345
+-------------------------------
+ip 40(20) 6 10.3.3.3,12345 > 10.2.2.1,23
+ip 40(20) 6 10.2.2.1,10023 > 10.3.3.3,12345
+ip 40(20) 6 10.3.3.3,12345 > 10.2.2.1,53
+ip 40(20) 6 10.2.2.1,10053 > 10.3.3.3,12345
+ip 40(20) 6 10.3.3.3,12346 > 10.1.0.0,23
+ip 40(20) 6 10.2.2.1,10023 > 10.3.3.3,12346
+ip 28(20) 17 10.3.3.3,12345 > 10.2.2.1,53
+ip 28(20) 17 10.2.2.1,10053 > 10.3.3.3,12345
ip 40(20) 6 10.3.3.3,12345 > 10.2.2.1,53
+ip 40(20) 6 10.1.1.0,53 > 10.3.3.3,12345
-------------------------------
diff --git a/contrib/ipfilter/test/expected/n5 b/contrib/ipfilter/test/expected/n5
index 75f174b..521c737 100644
--- a/contrib/ipfilter/test/expected/n5
+++ b/contrib/ipfilter/test/expected/n5
@@ -154,11 +154,11 @@ ip 40(20) 6 10.1.1.3,2003 > 10.1.4.1,80
ip 20(20) 0 10.1.1.1 > 10.1.1.2
ip 40(20) 6 10.1.1.1,1025 > 10.1.1.2,1025
ip 20(20) 0 10.1.1.2 > 10.1.1.1
-ip 40(20) 6 10.3.4.1,1026 > 10.3.4.5,40000
+ip 40(20) 6 10.3.4.3,1026 > 10.3.4.5,40000
ip 40(20) 6 10.1.1.1,1026 > 10.3.4.5,40000
-ip 40(20) 6 10.3.4.1,1025 > 10.3.4.5,40000
+ip 40(20) 6 10.3.4.3,1025 > 10.3.4.5,40000
ip 40(20) 6 10.1.1.1,1025 > 10.3.4.5,40000
-ip 28(20) 17 10.3.4.1,1025 > 10.3.4.5,40001
+ip 28(20) 17 10.3.4.3,1025 > 10.3.4.5,40001
ip 28(20) 17 10.1.1.2,1025 > 10.3.4.5,40001
ip 40(20) 6 10.1.2.1,80 > 10.3.4.5,40001
ip 40(20) 6 10.1.2.1,80 > 10.3.4.5,40001
diff --git a/contrib/ipfilter/test/expected/n7 b/contrib/ipfilter/test/expected/n7
index 51aa987..db8bb50 100644
--- a/contrib/ipfilter/test/expected/n7
+++ b/contrib/ipfilter/test/expected/n7
@@ -9,6 +9,16 @@ ip 40(20) 6 10.2.3.1,1237 > 10.1.1.4,80
ip 40(20) 6 10.2.3.1,1238 > 10.1.1.4,80
-------------------------------
ip 40(20) 6 10.2.3.1,1230 > 10.1.1.1,22
+ip 40(20) 6 10.2.3.1,1231 > 10.2.2.1,10023
+ip 40(20) 6 10.2.3.1,1232 > 10.2.2.1,10023
+ip 40(20) 6 10.2.3.1,1233 > 10.2.2.1,10023
+ip 40(20) 6 10.2.3.1,1234 > 10.1.1.1,80
+ip 40(20) 6 10.2.3.1,1235 > 10.1.1.2,80
+ip 40(20) 6 10.2.3.1,1236 > 10.1.1.3,80
+ip 40(20) 6 10.2.3.1,1237 > 10.1.1.4,80
+ip 40(20) 6 10.2.3.1,1238 > 10.1.1.4,80
+-------------------------------
+ip 40(20) 6 10.2.3.1,1230 > 10.1.1.1,22
ip 40(20) 6 10.2.3.1,1231 > 10.1.1.1,23
ip 40(20) 6 10.2.3.1,1232 > 10.1.1.1,50
ip 40(20) 6 10.2.3.1,1233 > 10.1.1.1,79
diff --git a/contrib/ipfilter/test/expected/n8 b/contrib/ipfilter/test/expected/n8
new file mode 100644
index 0000000..7a26a26
--- /dev/null
+++ b/contrib/ipfilter/test/expected/n8
@@ -0,0 +1,5 @@
+4500 0054 8bc1 0000 ff01 13d5 0a0a 0a01 0404 0404 0800 efdf 6220 0000 3f6f 6e80 000b 0d02 0809 0a0b 0c0d 0e0f 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 3435 3637
+4500 0054 3fd5 4000 ff01 2fc8 0404 0404 0202 0202 0000 f7df 6220 0000 3f6f 6e80 000b 0d02 0809 0a0b 0c0d 0e0f 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 3435 3637
+4500 0054 8bc1 0000 ff01 13d5 0a0a 0a01 0404 0404 0800 efde 6220 0001 3f6f 6e80 000b 0d02 0809 0a0b 0c0d 0e0f 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 3435 3637
+4500 0054 3fd5 4000 ff01 2fc8 0404 0404 0202 0202 0000 f7de 6220 0001 3f6f 6e80 000b 0d02 0809 0a0b 0c0d 0e0f 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 3435 3637
+-------------------------------
diff --git a/contrib/ipfilter/test/expected/n9 b/contrib/ipfilter/test/expected/n9
new file mode 100644
index 0000000..39979fa
--- /dev/null
+++ b/contrib/ipfilter/test/expected/n9
@@ -0,0 +1,5 @@
+4500 0054 8bc1 0000 ff01 17d9 0202 0202 0a0a 0a01 0800 efdf 6220 0000 3f6f 6e80 000b 0d02 0809 0a0b 0c0d 0e0f 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 3435 3637
+4500 0054 3fd5 4000 ff01 2fc8 0404 0404 0202 0202 0000 f7df 6220 0000 3f6f 6e80 000b 0d02 0809 0a0b 0c0d 0e0f 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 3435 3637
+4500 0054 8bc1 0000 ff01 17d9 0202 0202 0a0a 0a01 0800 efde 6220 0001 3f6f 6e80 000b 0d02 0809 0a0b 0c0d 0e0f 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 3435 3637
+4500 0054 3fd5 4000 ff01 2fc8 0404 0404 0202 0202 0000 f7de 6220 0001 3f6f 6e80 000b 0d02 0809 0a0b 0c0d 0e0f 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 3435 3637
+-------------------------------
diff --git a/contrib/ipfilter/test/expected/ni1 b/contrib/ipfilter/test/expected/ni1
index 724d38e..be981f1 100644
--- a/contrib/ipfilter/test/expected/ni1
+++ b/contrib/ipfilter/test/expected/ni1
@@ -1,4 +1,4 @@
-4500 0028 4706 4000 0111 1eac 0606 0606 0404 0404 afc9 829e 0014 6308 0402 0000 3be5 468d 000a cfc3
-4500 0038 809a 0000 ff01 3121 0303 0303 0202 0202 0b00 5773 0000 0000 4500 0028 4706 4000 0111 26b4 0202 0202 0404 0404 afc9 829e 0014 6b10
-4500 0044 809a 0000 ff01 3115 0303 0303 0202 0202 0b00 0131 0000 0000 4500 0028 4706 4000 0111 26b4 0202 0202 0404 0404 afc9 829e 0014 6b10 0402 0000 3be5 468d 000a cfc3
+4500 0028 0000 4000 0111 65b2 0606 0606 0404 0404 afc9 829e 0014 6308 0402 0000 3be5 468d 000a cfc3
+4500 0038 809a 0000 ff01 3121 0303 0303 0202 0202 0b00 5773 0000 0000 4500 0028 0000 4000 0111 6dba 0202 0202 0404 0404 afc9 829e 0014 6b10
+4500 0044 809a 0000 ff01 3115 0303 0303 0202 0202 0b00 0131 0000 0000 4500 0028 0000 4000 0111 6dba 0202 0202 0404 0404 afc9 829e 0014 6b10 0402 0000 3be5 468d 000a cfc3
-------------------------------
diff --git a/contrib/ipfilter/test/expected/ni10 b/contrib/ipfilter/test/expected/ni10
index e784581..df7b03f 100644
--- a/contrib/ipfilter/test/expected/ni10
+++ b/contrib/ipfilter/test/expected/ni10
@@ -1,5 +1,5 @@
-4500 003c 4706 4000 ff06 20a2 0404 0404 0606 0606 5000 0050 0000 0001 0000 0000 a002 16d0 d0da 0000 0204 05b4 0402 080a 0047 fbb0 0000 0000 0103 0300
-4500 0038 809a 0000 ff01 2f1f 0202 0202 0404 0404 0303 acab 0000 0000 4500 003c 4706 4000 ff06 28aa 0404 0404 0202 0202 5000 0050 0000 0001
-4500 0058 809a 0000 ff01 2cfd 0303 0303 0404 0404 0303 113f 0000 0000 4500 003c 4706 4000 ff06 20a2 0404 0404 0606 0606 5000 0050 0000 0001 0000 0000 a002 16d0 d0da 0000 0204 05b4 0402 080a 0047 fbb0 0000 0000 0103 0300
-4500 0038 809a 0000 ff01 2b1b 0303 0303 0505 0505 0303 acab 0000 0000 4500 003c 4706 4000 ff06 28ab 0404 0404 0202 0201 5000 0050 0000 0001
+4500 003c 4706 4000 ff06 20a2 0404 0404 0606 0606 5000 0050 0000 0001 0000 0000 a002 16d0 d0da 0000 0204 05b4 0402 080a 0047 fbb0 0000 0000 0103 0300
+4500 0038 0000 0000 ff01 afb9 0202 0202 0404 0404 0303 acab 0000 0000 4500 003c 4706 4000 ff06 28aa 0404 0404 0202 0202 5000 0050 0000 0001
+4500 0058 0001 0000 ff01 af98 0202 0202 0404 0404 0303 0937 0000 0000 4500 003c 4706 4000 ff06 28aa 0404 0404 0202 0202 5000 0050 0000 0001 0000 0000 a002 16d0 d8e2 0000 0204 05b4 0402 080a 0047 fbb0 0000 0000 0103 0300
+4500 0038 809a 0000 ff01 2b1b 0303 0303 0505 0505 0303 acab 0000 0000 4500 003c 4706 4000 ff06 28ab 0404 0404 0202 0201 5000 0050 0000 0001
-------------------------------
diff --git a/contrib/ipfilter/test/expected/ni11 b/contrib/ipfilter/test/expected/ni11
index 8cc37f4..d6db012 100644
--- a/contrib/ipfilter/test/expected/ni11
+++ b/contrib/ipfilter/test/expected/ni11
@@ -1,5 +1,5 @@
-4500 003c 4706 4000 ff06 2aac 0404 0404 0101 0101 5000 9d58 0000 0001 0000 0000 a002 16d0 3ddc 0000 0204 05b4 0402 080a 0047 fbb0 0000 0000 0103 0300
-4500 0038 809a 0000 ff01 271f 0a02 0202 0404 0404 0303 a7fb 0000 0000 4500 003c 4706 4000 ff06 20aa 0404 0404 0a02 0202 5000 0500 0000 0001
-4500 0058 809a 0000 ff01 2cfd 0303 0303 0404 0404 0303 0735 0000 0000 4500 003c 4706 4000 ff06 2aac 0404 0404 0101 0101 5000 9d58 0000 0001 0000 0000 a002 16d0 3ddc 0000 0204 05b4 0402 080a 0047 fbb0 0000 0000 0103 0300
-4500 0038 809a 0000 ff01 2b1b 0303 0303 0505 0505 0303 0fa3 0000 0000 4500 003c 4706 4000 ff06 2aab 0404 0404 0101 0102 5000 9d58 0000 0001
+4500 003c 4706 4000 ff06 2aac 0404 0404 0101 0101 5000 9d58 0000 0001 0000 0000 a002 16d0 3ddc 0000 0204 05b4 0402 080a 0047 fbb0 0000 0000 0103 0300
+4500 0038 0000 0000 ff01 a7b9 0a02 0202 0404 0404 0303 a7fb 0000 0000 4500 003c 4706 4000 ff06 20aa 0404 0404 0a02 0202 5000 0500 0000 0001
+4500 0058 0001 0000 ff01 a798 0a02 0202 0404 0404 0303 1137 0000 0000 4500 003c 4706 4000 ff06 20aa 0404 0404 0a02 0202 5000 0500 0000 0001 0000 0000 a002 16d0 cc32 0000 0204 05b4 0402 080a 0047 fbb0 0000 0000 0103 0300
+4500 0038 809a 0000 ff01 2b1b 0303 0303 0505 0505 0303 0fa3 0000 0000 4500 003c 4706 4000 ff06 2aab 0404 0404 0101 0102 5000 9d58 0000 0001
-------------------------------
diff --git a/contrib/ipfilter/test/expected/ni12 b/contrib/ipfilter/test/expected/ni12
new file mode 100644
index 0000000..70f991b
--- /dev/null
+++ b/contrib/ipfilter/test/expected/ni12
@@ -0,0 +1,5 @@
+4500 003c 4706 4000 ff06 2aac 0404 0404 0101 0101 5000 9c40 0000 0001 0000 0000 a002 16d0 3ef4 0000 0204 05b4 0402 080a 0047 fbb0 0000 0000 0103 0300
+4500 0038 809a 0000 ff01 2d1d 0303 0303 0404 0404 0303 0fa3 0000 0000 4500 003c 4706 4000 ff06 2aac 0404 0404 0101 0101 5000 9d58 0000 0001
+4500 0058 809a 0000 ff01 2cfd 0303 0303 0404 0404 0303 0735 0000 0000 4500 003c 4706 4000 ff06 2aac 0404 0404 0101 0101 5000 9d58 0000 0001 0000 0000 a002 16d0 3ddc 0000 0204 05b4 0402 080a 0047 fbb0 0000 0000 0103 0300
+4500 0038 809a 0000 ff01 2b1b 0303 0303 0505 0505 0303 0fa3 0000 0000 4500 003c 4706 4000 ff06 2aab 0404 0404 0101 0102 5000 9d58 0000 0001
+-------------------------------
diff --git a/contrib/ipfilter/test/expected/ni13 b/contrib/ipfilter/test/expected/ni13
new file mode 100644
index 0000000..3848d39
--- /dev/null
+++ b/contrib/ipfilter/test/expected/ni13
@@ -0,0 +1,32 @@
+4500 0030 5e11 4000 8006 3961 c0a8 7101 c0a8 7103 05e7 06bb abf0 4aa5 0000 0000 7002 faf0 21a1 0000 0204 05b4 0101 0402
+4500 002c 0000 4000 4006 d776 c0a8 7103 c0a8 7101 06bb 05e7 a564 68da abf0 4aa6 6012 8000 a348 0000 0204 05b4
+4500 00c4 5e12 4000 8006 38cc c0a8 7101 c0a8 7103 05e7 06bb abf0 4aa6 a564 68db 5018 faf0 e2a0 0000 009c 0001 1a2b 3c4d 0001 0000 0100 0000 0000 0001 0000 0001 0000 0a28 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 4d69 6372 6f73 6f66 7420 5769 6e64 6f77 7320 4e54 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+4500 00c4 0001 4000 4006 d6dd c0a8 7103 c0a8 7101 06bb 05e7 a564 68db abf0 4b42 5018 832c cecf 0000 009c 0001 1a2b 3c4d 0002 0000 0100 0100 0000 0000 0000 0000 0001 0001 6c6f 6361 6c00 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 6c69 6e75 7800 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+4500 00d0 5e13 4000 8006 38bf c0a8 7101 c0a8 7103 05e7 06bb abf0 4b42 a564 6977 5018 fa54 ac07 0000 00a8 0001 1a2b 3c4d 0007 0000 4000 1331 0000 012c 05f5 e100 0000 0003 0000 0003 0040 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+4500 0048 0002 4000 4006 d758 c0a8 7103 c0a8 7101 06bb 05e7 a564 6977 abf0 4bea 5018 832c 36fa 0000 0020 0001 1a2b 3c4d 0008 0000 0000 4000 0100 0000 05f5 e100 0040 0000 0000 0000
+4500 0040 5e14 4000 8006 394e c0a8 7101 c0a8 7103 05e7 06bb abf0 4bea a564 6997 5018 fa34 e810 0000 0018 0001 1a2b 3c4d 000f 0000 0000 0000 ffff ffff ffff ffff
+4500 0039 5e15 0000 802f 792b c0a8 7101 c0a8 7103 3001 880b 0019 0000 0000 0000 ff03 c021 0100 0015 0104 0578 0506 577f 7c5b 0702 0802 0d03 06
+4500 0020 0003 0000 ff2f 5856 c0a8 7103 c0a8 7101 2081 880b 0000 4000 ffff ffff
+4500 0028 0004 4000 4006 d776 c0a8 7103 c0a8 7101 06bb 05e7 a564 6997 abf0 4c02 5010 832c b5c1 0000
+4500 0038 0005 0000 ff2f 583c c0a8 7103 c0a8 7101 3001 880b 0018 4000 0000 0000 ff03 c021 0101 0014 0206 0000 0000 0506 22d9 0cfa 0702 0802
+4500 002f 0006 0000 ff2f 5844 c0a8 7103 c0a8 7101 3081 880b 000b 4000 0000 0001 0000 0000 ff03 c021 0400 0007 0d03 06
+4500 003c 5e16 0000 802f 7927 c0a8 7101 c0a8 7103 3081 880b 0018 0000 0000 0001 0000 0001 ff03 c021 0201 0014 0206 0000 0000 0506 22d9 0cfa 0702 0802
+4500 0036 5e17 0000 802f 792c c0a8 7101 c0a8 7103 3001 880b 0016 0000 0000 0002 ff03 c021 0101 0012 0104 0578 0506 577f 7c5b 0702 0802
+4500 003a 0007 0000 ff2f 5838 c0a8 7103 c0a8 7101 3081 880b 0016 4000 0000 0002 0000 0002 ff03 c021 0201 0012 0104 0578 0506 577f 7c5b 0702 0802
+4500 0032 0008 0000 ff2f 583f c0a8 7103 c0a8 7101 3001 880b 0012 4000 0000 0003 8021 0101 0010 0306 c0a8 0001 0206 002d 0f01
+4500 0040 5e18 4000 8006 394a c0a8 7101 c0a8 7103 05e7 06bb abf0 4c02 a564 6997 5018 fa34 e7f8 0000 0018 0001 1a2b 3c4d 000f 0000 0000 0000 0000 0000 ffff ffff
+4500 0038 5e19 0000 802f 7928 c0a8 7101 c0a8 7103 3081 880b 0014 0000 0000 0003 0000 0003 c021 0c02 0012 577f 7c5b 4d53 5241 5356 352e 3130
+4500 003e 0009 0000 ff2f 5832 c0a8 7103 c0a8 7101 3081 880b 001a 4000 0000 0004 0000 0003 ff03 c021 0702 0016 0c02 0012 577f 7c5b 4d53 5241 5356 352e 3130
+4500 003e 5e1a 0000 802f 7921 c0a8 7101 c0a8 7103 3081 880b 001a 0000 0000 0004 0000 0004 c021 0c03 0018 577f 7c5b 4d53 5241 532d 302d 434c 4159 4d4f 4f52
+4500 0044 000a 0000 ff2f 582b c0a8 7103 c0a8 7101 3081 880b 0020 4000 0000 0005 0000 0004 ff03 c021 0703 001c 0c03 0018 577f 7c5b 4d53 5241 532d 302d 434c 4159 4d4f 4f52
+4500 0030 5e1b 0000 802f 792e c0a8 7101 c0a8 7103 3081 880b 000c 0000 0000 0005 0000 0005 80fd 0104 000a 1206 0100 0001
+4500 002a 000b 0000 ff2f 5844 c0a8 7103 c0a8 7101 3081 880b 0006 4000 0000 0006 0000 0005 80fd 0101 0004
+4500 002c 000c 0000 ff2f 5841 c0a8 7103 c0a8 7101 3001 880b 000c 4000 0000 0007 80fd 0404 000a 1206 0100 0001
+4500 0048 5e1c 0000 802f 7915 c0a8 7101 c0a8 7103 3081 880b 0024 0000 0000 0006 0000 0007 8021 0105 0022 0306 0000 0000 8106 0000 0000 8206 0000 0000 8306 0000 0000 8406 0000 0000
+4500 0042 000d 0000 ff2f 582a c0a8 7103 c0a8 7101 3081 880b 001e 4000 0000 0008 0000 0006 8021 0405 001c 8106 0000 0000 8206 0000 0000 8306 0000 0000 8406 0000 0000
+4500 0030 5e1d 0000 802f 792c c0a8 7101 c0a8 7103 3081 880b 000c 0000 0000 0007 0000 0008 8021 0401 000a 0206 002d 0f01
+4500 0030 000e 0000 ff2f 583b c0a8 7103 c0a8 7101 3081 880b 000c 4000 0000 0009 0000 0007 8021 0102 000a 0306 c0a8 0001
+4500 002a 5e1e 0000 802f 7933 c0a8 7101 c0a8 7103 3081 880b 0006 0000 0000 0008 0000 0009 80fd 0201 0004
+4500 0032 5e1f 0000 802f 792a c0a8 7101 c0a8 7103 3001 880b 0012 0000 0000 0009 80fd 0506 0010 577f 7c5b 003c cd74 0000 02dc
+4500 002a 000f 0000 ff2f 5840 c0a8 7103 c0a8 7101 3081 880b 0006 4000 0000 000a 0000 0009 80fd 0606 0004
+-------------------------------
diff --git a/contrib/ipfilter/test/expected/ni14 b/contrib/ipfilter/test/expected/ni14
new file mode 100644
index 0000000..8521323
--- /dev/null
+++ b/contrib/ipfilter/test/expected/ni14
@@ -0,0 +1,32 @@
+4500 0030 5e11 4000 8006 ec0b c0a8 7101 7f00 0001 05e7 06bb abf0 4aa5 0000 0000 7002 faf0 d44b 0000 0204 05b4 0101 0402
+4500 002c 0000 4000 4006 d776 c0a8 7103 c0a8 7101 06bb 05e7 a564 68da abf0 4aa6 6012 8000 a348 0000 0204 05b4
+4500 00c4 5e12 4000 8006 eb76 c0a8 7101 7f00 0001 05e7 06bb abf0 4aa6 a564 68db 5018 faf0 954b 0000 009c 0001 1a2b 3c4d 0001 0000 0100 0000 0000 0001 0000 0001 0000 0a28 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 4d69 6372 6f73 6f66 7420 5769 6e64 6f77 7320 4e54 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+4500 00c4 0001 4000 4006 d6dd c0a8 7103 c0a8 7101 06bb 05e7 a564 68db abf0 4b42 5018 832c cecf 0000 009c 0001 1a2b 3c4d 0002 0000 0100 0100 0000 0000 0000 0000 0001 0001 6c6f 6361 6c00 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 6c69 6e75 7800 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+4500 00d0 5e13 4000 8006 eb69 c0a8 7101 7f00 0001 05e7 06bb abf0 4b42 a564 6977 5018 fa54 5eb2 0000 00a8 0001 1a2b 3c4d 0007 0000 4000 1331 0000 012c 05f5 e100 0000 0003 0000 0003 0040 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+4500 0048 0002 4000 4006 d758 c0a8 7103 c0a8 7101 06bb 05e7 a564 6977 abf0 4bea 5018 832c 36fa 0000 0020 0001 1a2b 3c4d 0008 0000 0000 4000 0100 0000 05f5 e100 0040 0000 0000 0000
+4500 0040 5e14 4000 8006 ebf8 c0a8 7101 7f00 0001 05e7 06bb abf0 4bea a564 6997 5018 fa34 9abb 0000 0018 0001 1a2b 3c4d 000f 0000 0000 0000 ffff ffff ffff ffff
+4500 0039 5e15 0000 802f 2bd6 c0a8 7101 7f00 0001 3001 880b 0019 0000 0000 0000 ff03 c021 0100 0015 0104 0578 0506 577f 7c5b 0702 0802 0d03 06
+4500 0020 0003 0000 ff2f 5856 c0a8 7103 c0a8 7101 2081 880b 0000 4000 ffff ffff
+4500 0028 0004 4000 4006 d776 c0a8 7103 c0a8 7101 06bb 05e7 a564 6997 abf0 4c02 5010 832c b5c1 0000
+4500 0038 0005 0000 ff2f 583c c0a8 7103 c0a8 7101 3001 880b 0018 4000 0000 0000 ff03 c021 0101 0014 0206 0000 0000 0506 22d9 0cfa 0702 0802
+4500 002f 0006 0000 ff2f 5844 c0a8 7103 c0a8 7101 3081 880b 000b 4000 0000 0001 0000 0000 ff03 c021 0400 0007 0d03 06
+4500 003c 5e16 0000 802f 2bd2 c0a8 7101 7f00 0001 3081 880b 0018 0000 0000 0001 0000 0001 ff03 c021 0201 0014 0206 0000 0000 0506 22d9 0cfa 0702 0802
+4500 0036 5e17 0000 802f 2bd7 c0a8 7101 7f00 0001 3001 880b 0016 0000 0000 0002 ff03 c021 0101 0012 0104 0578 0506 577f 7c5b 0702 0802
+4500 003a 0007 0000 ff2f 5838 c0a8 7103 c0a8 7101 3081 880b 0016 4000 0000 0002 0000 0002 ff03 c021 0201 0012 0104 0578 0506 577f 7c5b 0702 0802
+4500 0032 0008 0000 ff2f a594 c0a8 7103 c0a8 7101 3001 880b 0012 4000 0000 0003 8021 0101 0010 0306 c0a8 0001 0206 002d 0f01
+4500 0040 5e18 4000 8006 ebf4 c0a8 7101 7f00 0001 05e7 06bb abf0 4c02 a564 6997 5018 fa34 9aa3 0000 0018 0001 1a2b 3c4d 000f 0000 0000 0000 0000 0000 ffff ffff
+4500 0038 5e19 0000 802f 2bd3 c0a8 7101 7f00 0001 3081 880b 0014 0000 0000 0003 0000 0003 c021 0c02 0012 577f 7c5b 4d53 5241 5356 352e 3130
+4500 003e 0009 0000 ff2f a587 c0a8 7103 c0a8 7101 3081 880b 001a 4000 0000 0004 0000 0003 ff03 c021 0702 0016 0c02 0012 577f 7c5b 4d53 5241 5356 352e 3130
+4500 003e 5e1a 0000 802f 2bcc c0a8 7101 7f00 0001 3081 880b 001a 0000 0000 0004 0000 0004 c021 0c03 0018 577f 7c5b 4d53 5241 532d 302d 434c 4159 4d4f 4f52
+4500 0044 000a 0000 ff2f a580 c0a8 7103 c0a8 7101 3081 880b 0020 4000 0000 0005 0000 0004 ff03 c021 0703 001c 0c03 0018 577f 7c5b 4d53 5241 532d 302d 434c 4159 4d4f 4f52
+4500 0030 5e1b 0000 802f 2bd9 c0a8 7101 7f00 0001 3081 880b 000c 0000 0000 0005 0000 0005 80fd 0104 000a 1206 0100 0001
+4500 002a 000b 0000 ff2f a599 c0a8 7103 c0a8 7101 3081 880b 0006 4000 0000 0006 0000 0005 80fd 0101 0004
+4500 002c 000c 0000 ff2f a596 c0a8 7103 c0a8 7101 3001 880b 000c 4000 0000 0007 80fd 0404 000a 1206 0100 0001
+4500 0048 5e1c 0000 802f 2bc0 c0a8 7101 7f00 0001 3081 880b 0024 0000 0000 0006 0000 0007 8021 0105 0022 0306 0000 0000 8106 0000 0000 8206 0000 0000 8306 0000 0000 8406 0000 0000
+4500 0042 000d 0000 ff2f a57f c0a8 7103 c0a8 7101 3081 880b 001e 4000 0000 0008 0000 0006 8021 0405 001c 8106 0000 0000 8206 0000 0000 8306 0000 0000 8406 0000 0000
+4500 0030 5e1d 0000 802f 2bd7 c0a8 7101 7f00 0001 3081 880b 000c 0000 0000 0007 0000 0008 8021 0401 000a 0206 002d 0f01
+4500 0030 000e 0000 ff2f a590 c0a8 7103 c0a8 7101 3081 880b 000c 4000 0000 0009 0000 0007 8021 0102 000a 0306 c0a8 0001
+4500 002a 5e1e 0000 802f 2bdc c0a8 7101 7f00 0001 3081 880b 0006 0000 0000 0008 0000 0009 80fd 0201 0004
+4500 0032 5e1f 0000 802f 2bd3 c0a8 7101 7f00 0001 3001 880b 0012 0000 0000 0009 80fd 0506 0010 577f 7c5b 003c cd74 0000 02dc
+4500 002a 000f 0000 ff2f a595 c0a8 7103 c0a8 7101 3081 880b 0006 4000 0000 000a 0000 0009 80fd 0606 0004
+-------------------------------
diff --git a/contrib/ipfilter/test/expected/ni15 b/contrib/ipfilter/test/expected/ni15
new file mode 100644
index 0000000..1c59de1
--- /dev/null
+++ b/contrib/ipfilter/test/expected/ni15
@@ -0,0 +1,32 @@
+4500 0030 0000 4000 8006 9772 c0a8 7101 c0a8 7103 05e7 06bb abf0 4aa5 0000 0000 7002 faf0 21a1 0000 0204 05b4 0101 0402
+4500 002c 69a6 4000 4006 6dd0 c0a8 7103 c0a8 7101 06bb 05e7 a564 68da abf0 4aa6 6012 8000 a348 0000 0204 05b4
+4500 00c4 0001 4000 8006 96dd c0a8 7101 c0a8 7103 05e7 06bb abf0 4aa6 a564 68db 5018 faf0 e2a0 0000 009c 0001 1a2b 3c4d 0001 0000 0100 0000 0000 0001 0000 0001 0000 0a28 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 4d69 6372 6f73 6f66 7420 5769 6e64 6f77 7320 4e54 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+4500 00c4 69a7 4000 4006 6d37 c0a8 7103 c0a8 7101 06bb 05e7 a564 68db abf0 4b42 5018 832c cecf 0000 009c 0001 1a2b 3c4d 0002 0000 0100 0100 0000 0000 0000 0000 0001 0001 6c6f 6361 6c00 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 6c69 6e75 7800 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+4500 00d0 0002 4000 8006 96d0 c0a8 7101 c0a8 7103 05e7 06bb abf0 4b42 a564 6977 5018 fa54 ac07 0000 00a8 0001 1a2b 3c4d 0007 0000 4000 1331 0000 012c 05f5 e100 0000 0003 0000 0003 0040 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+4500 0048 69a8 4000 4006 6db2 c0a8 7103 c0a8 7101 06bb 05e7 a564 6977 abf0 4bea 5018 832c 36fa 0000 0020 0001 1a2b 3c4d 0008 0000 0000 4000 0100 0000 05f5 e100 0040 0000 0000 0000
+4500 0040 0003 4000 8006 975f c0a8 7101 c0a8 7103 05e7 06bb abf0 4bea a564 6997 5018 fa34 e810 0000 0018 0001 1a2b 3c4d 000f 0000 0000 0000 ffff ffff ffff ffff
+4500 0039 0004 0000 802f d73c c0a8 7101 c0a8 7103 3001 880b 0019 0000 0000 0000 ff03 c021 0100 0015 0104 0578 0506 577f 7c5b 0702 0802 0d03 06
+4500 0020 69a9 0000 ff2f eeaf c0a8 7103 c0a8 7101 2081 880b 0000 4000 ffff ffff
+4500 0028 69aa 4000 4006 6dd0 c0a8 7103 c0a8 7101 06bb 05e7 a564 6997 abf0 4c02 5010 832c b5c1 0000
+4500 0038 69ab 0000 ff2f ee95 c0a8 7103 c0a8 7101 3001 880b 0018 4000 0000 0000 ff03 c021 0101 0014 0206 0000 0000 0506 22d9 0cfa 0702 0802
+4500 002f 69ac 0000 ff2f ee9d c0a8 7103 c0a8 7101 3081 880b 000b 4000 0000 0001 0000 0000 ff03 c021 0400 0007 0d03 06
+4500 003c 0005 0000 802f d738 c0a8 7101 c0a8 7103 3081 880b 0018 0000 0000 0001 0000 0001 ff03 c021 0201 0014 0206 0000 0000 0506 22d9 0cfa 0702 0802
+4500 0036 0006 0000 802f d73d c0a8 7101 c0a8 7103 3001 880b 0016 0000 0000 0002 ff03 c021 0101 0012 0104 0578 0506 577f 7c5b 0702 0802
+4500 003a 69ad 0000 ff2f ee91 c0a8 7103 c0a8 7101 3081 880b 0016 4000 0000 0002 0000 0002 ff03 c021 0201 0012 0104 0578 0506 577f 7c5b 0702 0802
+4500 0032 69ae 0000 ff2f ee98 c0a8 7103 c0a8 7101 3001 880b 0012 4000 0000 0003 8021 0101 0010 0306 c0a8 0001 0206 002d 0f01
+4500 0040 0007 4000 8006 975b c0a8 7101 c0a8 7103 05e7 06bb abf0 4c02 a564 6997 5018 fa34 e7f8 0000 0018 0001 1a2b 3c4d 000f 0000 0000 0000 0000 0000 ffff ffff
+4500 0038 0008 0000 802f d739 c0a8 7101 c0a8 7103 3081 880b 0014 0000 0000 0003 0000 0003 c021 0c02 0012 577f 7c5b 4d53 5241 5356 352e 3130
+4500 003e 69af 0000 ff2f ee8b c0a8 7103 c0a8 7101 3081 880b 001a 4000 0000 0004 0000 0003 ff03 c021 0702 0016 0c02 0012 577f 7c5b 4d53 5241 5356 352e 3130
+4500 003e 0009 0000 802f d732 c0a8 7101 c0a8 7103 3081 880b 001a 0000 0000 0004 0000 0004 c021 0c03 0018 577f 7c5b 4d53 5241 532d 302d 434c 4159 4d4f 4f52
+4500 0044 69b0 0000 ff2f ee84 c0a8 7103 c0a8 7101 3081 880b 0020 4000 0000 0005 0000 0004 ff03 c021 0703 001c 0c03 0018 577f 7c5b 4d53 5241 532d 302d 434c 4159 4d4f 4f52
+4500 0030 000a 0000 802f d73f c0a8 7101 c0a8 7103 3081 880b 000c 0000 0000 0005 0000 0005 80fd 0104 000a 1206 0100 0001
+4500 002a 69b1 0000 ff2f ee9d c0a8 7103 c0a8 7101 3081 880b 0006 4000 0000 0006 0000 0005 80fd 0101 0004
+4500 002c 69b2 0000 ff2f ee9a c0a8 7103 c0a8 7101 3001 880b 000c 4000 0000 0007 80fd 0404 000a 1206 0100 0001
+4500 0048 000b 0000 802f d726 c0a8 7101 c0a8 7103 3081 880b 0024 0000 0000 0006 0000 0007 8021 0105 0022 0306 0000 0000 8106 0000 0000 8206 0000 0000 8306 0000 0000 8406 0000 0000
+4500 0042 69b3 0000 ff2f ee83 c0a8 7103 c0a8 7101 3081 880b 001e 4000 0000 0008 0000 0006 8021 0405 001c 8106 0000 0000 8206 0000 0000 8306 0000 0000 8406 0000 0000
+4500 0030 000c 0000 802f d73d c0a8 7101 c0a8 7103 3081 880b 000c 0000 0000 0007 0000 0008 8021 0401 000a 0206 002d 0f01
+4500 0030 69b4 0000 ff2f ee94 c0a8 7103 c0a8 7101 3081 880b 000c 4000 0000 0009 0000 0007 8021 0102 000a 0306 c0a8 0001
+4500 002a 000d 0000 802f d742 c0a8 7101 c0a8 7103 3081 880b 0006 0000 0000 0008 0000 0009 80fd 0201 0004
+4500 0032 000e 0000 802f d739 c0a8 7101 c0a8 7103 3001 880b 0012 0000 0000 0009 80fd 0506 0010 577f 7c5b 003c cd74 0000 02dc
+4500 002a 69b5 0000 ff2f ee99 c0a8 7103 c0a8 7101 3081 880b 0006 4000 0000 000a 0000 0009 80fd 0606 0004
+-------------------------------
diff --git a/contrib/ipfilter/test/expected/ni16 b/contrib/ipfilter/test/expected/ni16
new file mode 100644
index 0000000..c30b0d2
--- /dev/null
+++ b/contrib/ipfilter/test/expected/ni16
@@ -0,0 +1,32 @@
+4500 0030 0000 4000 8006 9772 c0a8 7101 c0a8 7103 05e7 06bb abf0 4aa5 0000 0000 7002 faf0 21a1 0000 0204 05b4 0101 0402
+4500 002c 69a6 4000 4006 9376 c0a8 7103 0a02 0202 06bb 05e7 a564 68da abf0 4aa6 6012 8000 c8ee 0000 0204 05b4
+4500 00c4 0001 4000 8006 96dd c0a8 7101 c0a8 7103 05e7 06bb abf0 4aa6 a564 68db 5018 faf0 e2a0 0000 009c 0001 1a2b 3c4d 0001 0000 0100 0000 0000 0001 0000 0001 0000 0a28 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 4d69 6372 6f73 6f66 7420 5769 6e64 6f77 7320 4e54 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+4500 00c4 69a7 4000 4006 92dd c0a8 7103 0a02 0202 06bb 05e7 a564 68db abf0 4b42 5018 832c f475 0000 009c 0001 1a2b 3c4d 0002 0000 0100 0100 0000 0000 0000 0000 0001 0001 6c6f 6361 6c00 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 6c69 6e75 7800 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+4500 00d0 0002 4000 8006 96d0 c0a8 7101 c0a8 7103 05e7 06bb abf0 4b42 a564 6977 5018 fa54 ac07 0000 00a8 0001 1a2b 3c4d 0007 0000 4000 1331 0000 012c 05f5 e100 0000 0003 0000 0003 0040 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+4500 0048 69a8 4000 4006 9358 c0a8 7103 0a02 0202 06bb 05e7 a564 6977 abf0 4bea 5018 832c 5ca0 0000 0020 0001 1a2b 3c4d 0008 0000 0000 4000 0100 0000 05f5 e100 0040 0000 0000 0000
+4500 0040 0003 4000 8006 975f c0a8 7101 c0a8 7103 05e7 06bb abf0 4bea a564 6997 5018 fa34 e810 0000 0018 0001 1a2b 3c4d 000f 0000 0000 0000 ffff ffff ffff ffff
+4500 0039 0004 0000 802f d73c c0a8 7101 c0a8 7103 3001 880b 0019 0000 0000 0000 ff03 c021 0100 0015 0104 0578 0506 577f 7c5b 0702 0802 0d03 06
+4500 0020 69a9 0000 ff2f 1456 c0a8 7103 0a02 0202 2081 880b 0000 4000 ffff ffff
+4500 0028 69aa 4000 4006 9376 c0a8 7103 0a02 0202 06bb 05e7 a564 6997 abf0 4c02 5010 832c db67 0000
+4500 0038 69ab 0000 ff2f 143c c0a8 7103 0a02 0202 3001 880b 0018 4000 0000 0000 ff03 c021 0101 0014 0206 0000 0000 0506 22d9 0cfa 0702 0802
+4500 002f 69ac 0000 ff2f 1444 c0a8 7103 0a02 0202 3081 880b 000b 4000 0000 0001 0000 0000 ff03 c021 0400 0007 0d03 06
+4500 003c 0005 0000 802f d738 c0a8 7101 c0a8 7103 3081 880b 0018 0000 0000 0001 0000 0001 ff03 c021 0201 0014 0206 0000 0000 0506 22d9 0cfa 0702 0802
+4500 0036 0006 0000 802f d73d c0a8 7101 c0a8 7103 3001 880b 0016 0000 0000 0002 ff03 c021 0101 0012 0104 0578 0506 577f 7c5b 0702 0802
+4500 003a 69ad 0000 ff2f 1438 c0a8 7103 0a02 0202 3081 880b 0016 4000 0000 0002 0000 0002 ff03 c021 0201 0012 0104 0578 0506 577f 7c5b 0702 0802
+4500 0032 69ae 0000 ff2f 143f c0a8 7103 0a02 0202 3001 880b 0012 4000 0000 0003 8021 0101 0010 0306 c0a8 0001 0206 002d 0f01
+4500 0040 0007 4000 8006 975b c0a8 7101 c0a8 7103 05e7 06bb abf0 4c02 a564 6997 5018 fa34 e7f8 0000 0018 0001 1a2b 3c4d 000f 0000 0000 0000 0000 0000 ffff ffff
+4500 0038 0008 0000 802f d739 c0a8 7101 c0a8 7103 3081 880b 0014 0000 0000 0003 0000 0003 c021 0c02 0012 577f 7c5b 4d53 5241 5356 352e 3130
+4500 003e 69af 0000 ff2f 1432 c0a8 7103 0a02 0202 3081 880b 001a 4000 0000 0004 0000 0003 ff03 c021 0702 0016 0c02 0012 577f 7c5b 4d53 5241 5356 352e 3130
+4500 003e 0009 0000 802f d732 c0a8 7101 c0a8 7103 3081 880b 001a 0000 0000 0004 0000 0004 c021 0c03 0018 577f 7c5b 4d53 5241 532d 302d 434c 4159 4d4f 4f52
+4500 0044 69b0 0000 ff2f 142b c0a8 7103 0a02 0202 3081 880b 0020 4000 0000 0005 0000 0004 ff03 c021 0703 001c 0c03 0018 577f 7c5b 4d53 5241 532d 302d 434c 4159 4d4f 4f52
+4500 0030 000a 0000 802f d73f c0a8 7101 c0a8 7103 3081 880b 000c 0000 0000 0005 0000 0005 80fd 0104 000a 1206 0100 0001
+4500 002a 69b1 0000 ff2f 1444 c0a8 7103 0a02 0202 3081 880b 0006 4000 0000 0006 0000 0005 80fd 0101 0004
+4500 002c 69b2 0000 ff2f 1441 c0a8 7103 0a02 0202 3001 880b 000c 4000 0000 0007 80fd 0404 000a 1206 0100 0001
+4500 0048 000b 0000 802f d726 c0a8 7101 c0a8 7103 3081 880b 0024 0000 0000 0006 0000 0007 8021 0105 0022 0306 0000 0000 8106 0000 0000 8206 0000 0000 8306 0000 0000 8406 0000 0000
+4500 0042 69b3 0000 ff2f 142a c0a8 7103 0a02 0202 3081 880b 001e 4000 0000 0008 0000 0006 8021 0405 001c 8106 0000 0000 8206 0000 0000 8306 0000 0000 8406 0000 0000
+4500 0030 000c 0000 802f d73d c0a8 7101 c0a8 7103 3081 880b 000c 0000 0000 0007 0000 0008 8021 0401 000a 0206 002d 0f01
+4500 0030 69b4 0000 ff2f 143b c0a8 7103 0a02 0202 3081 880b 000c 4000 0000 0009 0000 0007 8021 0102 000a 0306 c0a8 0001
+4500 002a 000d 0000 802f d744 c0a8 7101 c0a8 7103 3081 880b 0006 0000 0000 0008 0000 0009 80fd 0201 0004
+4500 0032 000e 0000 802f d73b c0a8 7101 c0a8 7103 3001 880b 0012 0000 0000 0009 80fd 0506 0010 577f 7c5b 003c cd74 0000 02dc
+4500 002a 69b5 0000 ff2f 1440 c0a8 7103 0a02 0202 3081 880b 0006 4000 0000 000a 0000 0009 80fd 0606 0004
+-------------------------------
diff --git a/contrib/ipfilter/test/expected/ni2 b/contrib/ipfilter/test/expected/ni2
index bf05cf0..6aef39f 100644
--- a/contrib/ipfilter/test/expected/ni2
+++ b/contrib/ipfilter/test/expected/ni2
@@ -1,10 +1,10 @@
-4510 002c bd0d 4000 3e06 bbd1 0101 0101 c0a8 0133 9c40 0077 a664 2485 0000 0000 6002 4000 2ca8 0000 0204 05b4
-4500 002c ce83 4000 7e06 606b c0a8 0133 0a01 0201 0077 05f6 fbdf 1a21 a664 2486 6012 2238 c0a8 0000 0204 05b4
-4510 0028 bd0e 4000 3e06 bbd4 0101 0101 c0a8 0133 9c40 0077 a664 2486 fbdf 1a22 5010 4470 29e3 0000
-4500 005b cf83 4000 7e06 5f3c c0a8 0133 0a01 0201 0077 05f6 fbdf 1a22 a664 2486 5018 2238 ce2a 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0a
-4510 0028 bd18 4000 3e06 bbca 0101 0101 c0a8 0133 9c40 0077 a664 2486 fbdf 1a55 5010 4470 29b0 0000
-4510 002e bd1e 4000 3e06 bbbe 0101 0101 c0a8 0133 9c40 0077 a664 2486 fbdf 1a55 5018 4470 1c98 0000 0000 0000 0d0a
-4500 0048 e383 4000 7e06 4b4f c0a8 0133 0a01 0201 0077 05f6 fbdf 1a55 a664 248c 5018 2232 d80a 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
-4500 05dc e483 4000 7e06 44bb c0a8 0133 0a01 0201 0077 05f6 fbdf 1a75 a664 248c 5010 2232 9f2d 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1111 2222 3331 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
-4500 0038 d71d 4000 4001 9fca 0101 0101 c0a8 0133 0304 444f 0000 05a0 4500 05dc e483 4000 7e06 4ebb c0a8 0133 0101 0101 0077 9c40 fbdf 1a75
+4510 002c 0000 4000 3e06 78df 0101 0101 c0a8 0133 9c40 0077 a664 2485 0000 0000 6002 4000 2ca8 0000 0204 05b4
+4500 002c ce83 4000 7e06 606b c0a8 0133 0a01 0201 0077 05f6 fbdf 1a21 a664 2486 6012 2238 c0a8 0000 0204 05b4
+4510 0028 0001 4000 3e06 78e2 0101 0101 c0a8 0133 9c40 0077 a664 2486 fbdf 1a22 5010 4470 29e3 0000
+4500 005b cf83 4000 7e06 5f3c c0a8 0133 0a01 0201 0077 05f6 fbdf 1a22 a664 2486 5018 2238 ce2a 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0a
+4510 0028 0002 4000 3e06 78e1 0101 0101 c0a8 0133 9c40 0077 a664 2486 fbdf 1a55 5010 4470 29b0 0000
+4510 002e 0003 4000 3e06 78da 0101 0101 c0a8 0133 9c40 0077 a664 2486 fbdf 1a55 5018 4470 1c98 0000 0000 0000 0d0a
+4500 0048 e383 4000 7e06 4b4f c0a8 0133 0a01 0201 0077 05f6 fbdf 1a55 a664 248c 5018 2232 d80a 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+4500 05dc e483 4000 7e06 44bb c0a8 0133 0a01 0201 0077 05f6 fbdf 1a75 a664 248c 5010 2232 9f2d 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1111 2222 3331 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 1111 2222 3333 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+4500 0038 0004 4000 4001 76e4 0101 0101 c0a8 0133 0304 444f 0000 05a0 4500 05dc e483 4000 7e06 4ebb c0a8 0133 0101 0101 0077 9c40 fbdf 1a75
-------------------------------
diff --git a/contrib/ipfilter/test/expected/ni3 b/contrib/ipfilter/test/expected/ni3
index cf535f3..600b624 100644
--- a/contrib/ipfilter/test/expected/ni3
+++ b/contrib/ipfilter/test/expected/ni3
@@ -1,4 +1,4 @@
-4500 003c 4706 4000 ff06 20a2 0606 0606 0404 0404 5000 0050 0000 0001 0000 0000 a002 16d0 d0da 0000 0204 05b4 0402 080a 0047 fbb0 0000 0000 0103 0300
-4500 0038 809a 0000 ff01 3121 0303 0303 0202 0202 0303 acab 0000 0000 4500 003c 4706 4000 ff06 28aa 0202 0202 0404 0404 5000 0050 0000 0001
-4500 0058 809a 0000 ff01 3101 0303 0303 0202 0202 0303 0937 0000 0000 4500 003c 4706 4000 ff06 28aa 0202 0202 0404 0404 5000 0050 0000 0001 0000 0000 a002 16d0 d8e2 0000 0204 05b4 0402 080a 0047 fbb0 0000 0000 0103 0300
+4500 003c 0000 4000 ff06 67a8 0606 0606 0404 0404 5000 0050 0000 0001 0000 0000 a002 16d0 d0da 0000 0204 05b4 0402 080a 0047 fbb0 0000 0000 0103 0300
+4500 0038 809a 0000 ff01 3121 0303 0303 0202 0202 0303 acab 0000 0000 4500 003c 4706 4000 ff06 28aa 0202 0202 0404 0404 5000 0050 0000 0001
+4500 0058 809a 0000 ff01 3101 0303 0303 0202 0202 0303 0937 0000 0000 4500 003c 4706 4000 ff06 28aa 0202 0202 0404 0404 5000 0050 0000 0001 0000 0000 a002 16d0 d8e2 0000 0204 05b4 0402 080a 0047 fbb0 0000 0000 0103 0300
-------------------------------
diff --git a/contrib/ipfilter/test/expected/ni4 b/contrib/ipfilter/test/expected/ni4
index 95382cd..cd5ebac 100644
--- a/contrib/ipfilter/test/expected/ni4
+++ b/contrib/ipfilter/test/expected/ni4
@@ -1,4 +1,4 @@
-4500 003c 4706 4000 ff06 20a2 0606 0606 0404 0404 9c40 0050 0000 0001 0000 0000 a002 16d0 849a 0000 0204 05b4 0402 080a 0047 fbb0 0000 0000 0103 0300
-4500 0038 809a 0000 ff01 3121 0303 0303 0202 0202 0303 acab 0000 0000 4500 003c 4706 4000 ff06 28aa 0202 0202 0404 0404 5000 0050 0000 0001
-4500 0058 809a 0000 ff01 3101 0303 0303 0202 0202 0303 0937 0000 0000 4500 003c 4706 4000 ff06 28aa 0202 0202 0404 0404 5000 0050 0000 0001 0000 0000 a002 16d0 d8e2 0000 0204 05b4 0402 080a 0047 fbb0 0000 0000 0103 0300
+4500 003c 0000 4000 ff06 67a8 0606 0606 0404 0404 9c40 0050 0000 0001 0000 0000 a002 16d0 849a 0000 0204 05b4 0402 080a 0047 fbb0 0000 0000 0103 0300
+4500 0038 809a 0000 ff01 3121 0303 0303 0202 0202 0303 acab 0000 0000 4500 003c 4706 4000 ff06 28aa 0202 0202 0404 0404 5000 0050 0000 0001
+4500 0058 809a 0000 ff01 3101 0303 0303 0202 0202 0303 0937 0000 0000 4500 003c 4706 4000 ff06 28aa 0202 0202 0404 0404 5000 0050 0000 0001 0000 0000 a002 16d0 d8e2 0000 0204 05b4 0402 080a 0047 fbb0 0000 0000 0103 0300
-------------------------------
diff --git a/contrib/ipfilter/test/expected/ni5 b/contrib/ipfilter/test/expected/ni5
index 449c2c4..a64d812 100644
--- a/contrib/ipfilter/test/expected/ni5
+++ b/contrib/ipfilter/test/expected/ni5
@@ -1,48 +1,47 @@
-4500 002c 10c9 4000 ff06 f232 0101 0101 96cb e002 8032 0015 bd6b c9c8 0000 0000 6002 2238 f5a2 0000 0204 05b4
-4500 002c ffdd 4000 ef06 5374 96cb e002 c0a8 0103 0015 8032 3786 76c4 bd6b c9c9 6012 269c 8369 0000 0204 0584
-4500 0028 10ca 4000 ff06 f235 0101 0101 96cb e002 8032 0015 bd6b c9c9 3786 76c5 5010 269c 5aa0 0000
-4500 006f ffde 4000 ef06 5330 96cb e002 c0a8 0103 0015 8032 3786 76c5 bd6b c9c9 5018 269c 967e 0000 3232 302d 636f 6f6d 6273 2e61 6e75 2e65 6475 2e61 7520 4e63 4654 5064 2053 6572 7665 7220 2866 7265 6520 6564 7563 6174 696f 6e61 6c20 6c69 6365 6e73 6529 2072 6561 6479 2e0d 0a
-4500 0028 10cb 4000 ff06 f234 0101 0101 96cb e002 8032 0015 bd6b c9c9 3786 770c 5010 269c 5a59 0000
-ippr_ftp_server_valid:junk after cmd[220-Maintained by RSSS and RSPAS IT Staff (previously known as Coombs Comp]
-4500 00c7 ffdf 4000 ef06 52d7 96cb e002 c0a8 0103 0015 8032 3786 770c bd6b c9c9 5018 269c 1087 0000 3232 302d 0d0a 3232 302d 4d61 696e 7461 696e 6564 2062 7920 5253 5353 2061 6e64 2052 5350 4153 2049 5420 5374 6166 6620 2870 7265 7669 6f75 736c 7920 6b6e 6f77 6e20 6173 2043 6f6f 6d62 7320 436f 6d70 7574 696e 6720 556e 6974 290d 0a32 3230 2d41 6e79 2070 726f 626c 656d 7320 636f 6e74 6163 7420 6674 706d 6173 7465 7240 636f 6f6d 6273 2e61 6e75 2e65 6475 2e61 750d 0a32 3230 2d0d 0a32 3230 200d 0a
-4500 0028 10cc 4000 ff06 f233 0101 0101 96cb e002 8032 0015 bd6b c9c9 3786 77ab 5010 269c 59ba 0000
-4500 0038 10cd 4000 ff06 f222 0101 0101 96cb e002 8032 0015 bd6b c9c9 3786 77ab 5018 269c d1c5 0000 5553 4552 2061 6e6f 6e79 6d6f 7573 0d0a
-4500 0028 ffe0 4000 ef06 5375 96cb e002 c0a8 0103 0015 8032 3786 77ab bd6b c9d9 5010 269c 9a00 0000
-4500 006c ffe1 4000 ef06 5330 96cb e002 c0a8 0103 0015 8032 3786 77ab bd6b c9d9 5018 269c b00f 0000 3333 3120 4775 6573 7420 6c6f 6769 6e20 6f6b 2c20 7365 6e64 2079 6f75 7220 636f 6d70 6c65 7465 2065 2d6d 6169 6c20 6164 6472 6573 7320 6173 2070 6173 7377 6f72 642e 0d0a
-4500 0028 10ce 4000 ff06 f231 0101 0101 96cb e002 8032 0015 bd6b c9d9 3786 77ef 5010 269c 5966 0000
-4500 0036 10cf 4000 ff06 f222 0101 0101 96cb e002 8032 0015 bd6b c9d9 3786 77ef 5018 269c 373f 0000 5041 5353 2061 7661 6c6f 6e40 0d0a
-4500 005f ffe2 4000 ef06 533c 96cb e002 c0a8 0103 0015 8032 3786 77ef bd6b c9e7 5018 269c 895e 0000 3233 302d 596f 7520 6172 6520 7573 6572 2023 3420 6f66 2035 3020 7369 6d75 6c74 616e 656f 7573 2075 7365 7273 2061 6c6c 6f77 6564 2e0d 0a
-4500 0028 10d0 4000 ff06 f22f 0101 0101 96cb e002 8032 0015 bd6b c9e7 3786 7826 5010 269c 5921 0000
-4500 0099 ffe3 4000 ef06 5301 96cb e002 c0a8 0103 0015 8032 3786 7826 bd6b c9e7 5018 269c d399 0000 3233 302d 0d0a 3233 302d 0d0a 3233 302d 4869 2e20 2057 6527 7265 2063 6c65 616e 696e 6720 7570 2e20 2041 6e79 2066 6565 6462 6163 6b20 6d6f 7374 2077 656c 636f 6d65 2e20 3130 2041 7567 2030 300d 0a32 3330 2d0d 0a32 3330 204c 6f67 6765 6420 696e 2061 6e6f 6e79 6d6f 7573 6c79 2e0d 0a
-4500 0028 10d1 4000 ff06 f22e 0101 0101 96cb e002 8032 0015 bd6b c9e7 3786 7897 5010 269c 58b0 0000
-4500 0030 10d2 4000 ff06 f225 0101 0101 96cb e002 8032 0015 bd6b c9e7 3786 7897 5018 269c 86ae 0000 5459 5045 2049 0d0a
-4500 0038 ffe4 4000 ef06 5361 96cb e002 c0a8 0103 0015 8032 3786 7897 bd6b c9ef 5018 269c 5fae 0000 3230 3020 5479 7065 206f 6b61 792e 0d0a
-4500 0028 10d3 4000 ff06 f22c 0101 0101 96cb e002 8032 0015 bd6b c9ef 3786 78a7 5010 269c 5898 0000
-4500 003d 10d4 4000 ff06 f216 0101 0101 96cb e002 8032 0015 bd6b c9ef 3786 78a7 5018 269c 4b67 0000 504f 5254 2031 2c31 2c31 2c31 2c31 3238 2c35 310d 0a
-4500 0046 ffe5 4000 ef06 5352 96cb e002 c0a8 0103 0015 8032 3786 78a7 bd6b ca0c 5018 269c dbc3 0000 3230 3020 504f 5254 2063 6f6d 6d61 6e64 2073 7563 6365 7373 6675 6c2e 0d0a
-4500 0030 10d5 4000 ff06 f222 0101 0101 96cb e002 8032 0015 bd6b ca04 3786 78c5 5018 269c 866b 0000 5459 5045 2041 0d0a
-4500 0038 ffe6 4000 ef06 535f 96cb e002 c0a8 0103 0015 8032 3786 78c5 bd6b ca14 5018 269c 5f5b 0000 3230 3020 5479 7065 206f 6b61 792e 0d0a
-4500 002e 10d6 4000 ff06 f223 0101 0101 96cb e002 8032 0015 bd6b ca0c 3786 78d5 5018 269c a994 0000 4e4c 5354 0d0a
-4500 002c ffe7 4000 ef06 536a 96cb e002 c0a8 0103 0014 8033 d9f8 11d4 0000 0000 6002 2238 d190 0000 0204 0584
-4500 002c 10d7 4000 ff06 327b c0a8 0103 96cb e002 8033 0014 bd78 5c12 d9f8 11d5 6012 02f8 d734 0000 0204 0584
-4500 0028 ffe8 4000 ef06 536d 96cb e002 c0a8 0103 0014 8033 d9f8 11d5 bd78 5c13 5010 269c cb1d 0000
-4500 005d ffe9 4000 ef06 5337 96cb e002 c0a8 0103 0015 8032 3786 78d5 bd6b ca1a 5018 269c eed0 0000 3135 3020 4f70 656e 696e 6720 4153 4349 4920 6d6f 6465 2064 6174 6120 636f 6e6e 6563 7469 6f6e 2066 6f72 202f 6269 6e2f 6c73 2e0d 0a
-4500 0028 10d8 4000 ff06 327e c0a8 0103 96cb e002 8033 0014 bd78 5c13 d9f8 11d5 5010 6348 8e71 0000
-4500 0063 ffea 4000 ef06 5330 96cb e002 c0a8 0103 0014 8033 d9f8 11d5 bd78 5c13 5018 269c a315 0000 636f 6f6d 6273 7061 7065 7273 0d0a 6465 7074 730d 0a66 6f75 6e64 2d66 696c 6573 0d0a 696e 636f 6d69 6e67 0d0a 6e6c 632d 7465 7374 0d0a 7075 620d 0a
-4500 0028 10d9 4000 ff06 327d c0a8 0103 96cb e002 8033 0014 bd78 5c13 d9f8 1210 5010 6348 8e36 0000
-4500 0028 ffeb 4000 ef06 536a 96cb e002 c0a8 0103 0014 8033 d9f8 1210 bd78 5c13 5011 269c cae1 0000
-4500 0028 10da 4000 ff06 327c c0a8 0103 96cb e002 8033 0014 bd78 5c13 d9f8 1211 5010 6348 8e35 0000
-4500 0028 10db 4000 ff06 327b c0a8 0103 96cb e002 8033 0014 bd78 5c13 d9f8 1211 5011 6348 8e34 0000
-4500 0028 ffec 4000 ef06 5369 96cb e002 c0a8 0103 0014 8033 d9f8 1211 bd78 5c14 5010 269c cae0 0000
-4500 0028 10dc 4000 ff06 f223 0101 0101 96cb e002 8032 0015 bd6b ca12 3786 790a 5010 269c 5812 0000
-4500 0040 ffed 4000 ef06 5350 96cb e002 c0a8 0103 0015 8032 3786 790a bd6b ca1a 5018 269c 7c9e 0000 3232 3620 4c69 7374 696e 6720 636f 6d70 6c65 7465 642e 0d0a
-4500 0030 10dd 4000 ff06 f21a 0101 0101 96cb e002 8032 0015 bd6b ca12 3786 7922 5018 269c 85f8 0000 5459 5045 2049 0d0a
-4500 0038 ffee 4000 ef06 5357 96cb e002 c0a8 0103 0015 8032 3786 7922 bd6b ca22 5018 269c 5ef0 0000 3230 3020 5479 7065 206f 6b61 792e 0d0a
-4500 0028 10de 4000 ff06 f221 0101 0101 96cb e002 8032 0015 bd6b ca1a 3786 7932 5010 269c 57e2 0000
-4500 002e 10df 4000 ff06 f21a 0101 0101 96cb e002 8032 0015 bd6b ca1a 3786 7932 5018 269c b020 0000 5155 4954 0d0a
-4500 0036 ffef 4000 ef06 5358 96cb e002 c0a8 0103 0015 8032 3786 7932 bd6b ca28 5018 269c a93c 0000 3232 3120 476f 6f64 6279 652e 0d0a
-4500 0028 10e0 4000 ff06 f21f 0101 0101 96cb e002 8032 0015 bd6b ca20 3786 7940 5011 269c 57cd 0000
-4500 0028 fff0 4000 ef06 5365 96cb e002 c0a8 0103 0015 8032 3786 7940 bd6b ca28 5011 269c 981b 0000
-4500 0028 10e1 4000 ff06 3275 c0a8 0103 96cb e002 8032 0015 bd6b ca25 3786 7941 5010 269c 981e 0000
-4500 0028 fff1 4000 ef06 5364 96cb e002 c0a8 0103 0015 8032 3786 7941 bd6b ca29 5010 269c 981a 0000
+4500 002c 0000 4000 ff06 02fc 0101 0101 96cb e002 8032 0015 bd6b c9c8 0000 0000 6002 2238 f5a2 0000 0204 05b4
+4500 002c ffdd 4000 ef06 5374 96cb e002 c0a8 0103 0015 8032 3786 76c4 bd6b c9c9 6012 269c 8369 0000 0204 0584
+4500 0028 0001 4000 ff06 02ff 0101 0101 96cb e002 8032 0015 bd6b c9c9 3786 76c5 5010 269c 5aa0 0000
+4500 006f ffde 4000 ef06 5330 96cb e002 c0a8 0103 0015 8032 3786 76c5 bd6b c9c9 5018 269c 967e 0000 3232 302d 636f 6f6d 6273 2e61 6e75 2e65 6475 2e61 7520 4e63 4654 5064 2053 6572 7665 7220 2866 7265 6520 6564 7563 6174 696f 6e61 6c20 6c69 6365 6e73 6529 2072 6561 6479 2e0d 0a
+4500 0028 0002 4000 ff06 02fe 0101 0101 96cb e002 8032 0015 bd6b c9c9 3786 770c 5010 269c 5a59 0000
+4500 00c7 ffdf 4000 ef06 52d7 96cb e002 c0a8 0103 0015 8032 3786 770c bd6b c9c9 5018 269c 1087 0000 3232 302d 0d0a 3232 302d 4d61 696e 7461 696e 6564 2062 7920 5253 5353 2061 6e64 2052 5350 4153 2049 5420 5374 6166 6620 2870 7265 7669 6f75 736c 7920 6b6e 6f77 6e20 6173 2043 6f6f 6d62 7320 436f 6d70 7574 696e 6720 556e 6974 290d 0a32 3230 2d41 6e79 2070 726f 626c 656d 7320 636f 6e74 6163 7420 6674 706d 6173 7465 7240 636f 6f6d 6273 2e61 6e75 2e65 6475 2e61 750d 0a32 3230 2d0d 0a32 3230 200d 0a
+4500 0028 0003 4000 ff06 02fd 0101 0101 96cb e002 8032 0015 bd6b c9c9 3786 77ab 5010 269c 59ba 0000
+4500 0038 0004 4000 ff06 02ec 0101 0101 96cb e002 8032 0015 bd6b c9c9 3786 77ab 5018 269c d1c5 0000 5553 4552 2061 6e6f 6e79 6d6f 7573 0d0a
+4500 0028 ffe0 4000 ef06 5375 96cb e002 c0a8 0103 0015 8032 3786 77ab bd6b c9d9 5010 269c 9a00 0000
+4500 006c ffe1 4000 ef06 5330 96cb e002 c0a8 0103 0015 8032 3786 77ab bd6b c9d9 5018 269c b00f 0000 3333 3120 4775 6573 7420 6c6f 6769 6e20 6f6b 2c20 7365 6e64 2079 6f75 7220 636f 6d70 6c65 7465 2065 2d6d 6169 6c20 6164 6472 6573 7320 6173 2070 6173 7377 6f72 642e 0d0a
+4500 0028 0005 4000 ff06 02fb 0101 0101 96cb e002 8032 0015 bd6b c9d9 3786 77ef 5010 269c 5966 0000
+4500 0036 0006 4000 ff06 02ec 0101 0101 96cb e002 8032 0015 bd6b c9d9 3786 77ef 5018 269c 373f 0000 5041 5353 2061 7661 6c6f 6e40 0d0a
+4500 005f ffe2 4000 ef06 533c 96cb e002 c0a8 0103 0015 8032 3786 77ef bd6b c9e7 5018 269c 895e 0000 3233 302d 596f 7520 6172 6520 7573 6572 2023 3420 6f66 2035 3020 7369 6d75 6c74 616e 656f 7573 2075 7365 7273 2061 6c6c 6f77 6564 2e0d 0a
+4500 0028 0007 4000 ff06 02f9 0101 0101 96cb e002 8032 0015 bd6b c9e7 3786 7826 5010 269c 5921 0000
+4500 0099 ffe3 4000 ef06 5301 96cb e002 c0a8 0103 0015 8032 3786 7826 bd6b c9e7 5018 269c d399 0000 3233 302d 0d0a 3233 302d 0d0a 3233 302d 4869 2e20 2057 6527 7265 2063 6c65 616e 696e 6720 7570 2e20 2041 6e79 2066 6565 6462 6163 6b20 6d6f 7374 2077 656c 636f 6d65 2e20 3130 2041 7567 2030 300d 0a32 3330 2d0d 0a32 3330 204c 6f67 6765 6420 696e 2061 6e6f 6e79 6d6f 7573 6c79 2e0d 0a
+4500 0028 0008 4000 ff06 02f8 0101 0101 96cb e002 8032 0015 bd6b c9e7 3786 7897 5010 269c 58b0 0000
+4500 0030 0009 4000 ff06 02ef 0101 0101 96cb e002 8032 0015 bd6b c9e7 3786 7897 5018 269c 86ae 0000 5459 5045 2049 0d0a
+4500 0038 ffe4 4000 ef06 5361 96cb e002 c0a8 0103 0015 8032 3786 7897 bd6b c9ef 5018 269c 5fae 0000 3230 3020 5479 7065 206f 6b61 792e 0d0a
+4500 0028 000a 4000 ff06 02f6 0101 0101 96cb e002 8032 0015 bd6b c9ef 3786 78a7 5010 269c 5898 0000
+4500 003d 000b 4000 ff06 02e0 0101 0101 96cb e002 8032 0015 bd6b c9ef 3786 78a7 5018 269c 4b67 0000 504f 5254 2031 2c31 2c31 2c31 2c31 3238 2c35 310d 0a
+4500 0046 ffe5 4000 ef06 5352 96cb e002 c0a8 0103 0015 8032 3786 78a7 bd6b ca0c 5018 269c dbc3 0000 3230 3020 504f 5254 2063 6f6d 6d61 6e64 2073 7563 6365 7373 6675 6c2e 0d0a
+4500 0030 000c 4000 ff06 02ec 0101 0101 96cb e002 8032 0015 bd6b ca04 3786 78c5 5018 269c 866b 0000 5459 5045 2041 0d0a
+4500 0038 ffe6 4000 ef06 535f 96cb e002 c0a8 0103 0015 8032 3786 78c5 bd6b ca14 5018 269c 5f5b 0000 3230 3020 5479 7065 206f 6b61 792e 0d0a
+4500 002e 000d 4000 ff06 02ed 0101 0101 96cb e002 8032 0015 bd6b ca0c 3786 78d5 5018 269c a994 0000 4e4c 5354 0d0a
+4500 002c ffe7 4000 ef06 536a 96cb e002 c0a8 0103 0014 8033 d9f8 11d4 0000 0000 6002 2238 d190 0000 0204 0584
+4500 002c 000e 4000 ff06 02ee 0101 0101 96cb e002 8033 0014 bd78 5c12 d9f8 11d5 6012 02f8 96de 0000 0204 0584
+4500 0028 ffe8 4000 ef06 536d 96cb e002 c0a8 0103 0014 8033 d9f8 11d5 bd78 5c13 5010 269c cb1d 0000
+4500 005d ffe9 4000 ef06 5337 96cb e002 c0a8 0103 0015 8032 3786 78d5 bd6b ca1a 5018 269c eed0 0000 3135 3020 4f70 656e 696e 6720 4153 4349 4920 6d6f 6465 2064 6174 6120 636f 6e6e 6563 7469 6f6e 2066 6f72 202f 6269 6e2f 6c73 2e0d 0a
+4500 0028 000f 4000 ff06 02f1 0101 0101 96cb e002 8033 0014 bd78 5c13 d9f8 11d5 5010 6348 4e1b 0000
+4500 0063 ffea 4000 ef06 5330 96cb e002 c0a8 0103 0014 8033 d9f8 11d5 bd78 5c13 5018 269c a315 0000 636f 6f6d 6273 7061 7065 7273 0d0a 6465 7074 730d 0a66 6f75 6e64 2d66 696c 6573 0d0a 696e 636f 6d69 6e67 0d0a 6e6c 632d 7465 7374 0d0a 7075 620d 0a
+4500 0028 0010 4000 ff06 02f0 0101 0101 96cb e002 8033 0014 bd78 5c13 d9f8 1210 5010 6348 4de0 0000
+4500 0028 ffeb 4000 ef06 536a 96cb e002 c0a8 0103 0014 8033 d9f8 1210 bd78 5c13 5011 269c cae1 0000
+4500 0028 10da 4000 ff06 327c c0a8 0103 96cb e002 8033 0014 bd78 5c13 d9f8 1211 5010 6348 8e35 0000
+4500 0028 10db 4000 ff06 327b c0a8 0103 96cb e002 8033 0014 bd78 5c13 d9f8 1211 5011 6348 8e34 0000
+4500 0028 ffec 4000 ef06 5369 96cb e002 c0a8 0103 0014 8033 d9f8 1211 bd78 5c14 5010 269c cae0 0000
+4500 0028 0011 4000 ff06 02ef 0101 0101 96cb e002 8032 0015 bd6b ca12 3786 790a 5010 269c 5812 0000
+4500 0040 ffed 4000 ef06 5350 96cb e002 c0a8 0103 0015 8032 3786 790a bd6b ca1a 5018 269c 7c9e 0000 3232 3620 4c69 7374 696e 6720 636f 6d70 6c65 7465 642e 0d0a
+4500 0030 0012 4000 ff06 02e6 0101 0101 96cb e002 8032 0015 bd6b ca12 3786 7922 5018 269c 85f8 0000 5459 5045 2049 0d0a
+4500 0038 ffee 4000 ef06 5357 96cb e002 c0a8 0103 0015 8032 3786 7922 bd6b ca22 5018 269c 5ef0 0000 3230 3020 5479 7065 206f 6b61 792e 0d0a
+4500 0028 0013 4000 ff06 02ed 0101 0101 96cb e002 8032 0015 bd6b ca1a 3786 7932 5010 269c 57e2 0000
+4500 002e 0014 4000 ff06 02e6 0101 0101 96cb e002 8032 0015 bd6b ca1a 3786 7932 5018 269c b020 0000 5155 4954 0d0a
+4500 0036 ffef 4000 ef06 5358 96cb e002 c0a8 0103 0015 8032 3786 7932 bd6b ca28 5018 269c a93c 0000 3232 3120 476f 6f64 6279 652e 0d0a
+4500 0028 0015 4000 ff06 02eb 0101 0101 96cb e002 8032 0015 bd6b ca20 3786 7940 5011 269c 57cd 0000
+4500 0028 fff0 4000 ef06 5365 96cb e002 c0a8 0103 0015 8032 3786 7940 bd6b ca28 5011 269c 981b 0000
+4500 0028 10e1 4000 ff06 3275 c0a8 0103 96cb e002 8032 0015 bd6b ca25 3786 7941 5010 269c 981e 0000
+4500 0028 fff1 4000 ef06 5364 96cb e002 c0a8 0103 0015 8032 3786 7941 bd6b ca29 5010 269c 981a 0000
-------------------------------
diff --git a/contrib/ipfilter/test/expected/ni6 b/contrib/ipfilter/test/expected/ni6
new file mode 100644
index 0000000..a4e4ace
--- /dev/null
+++ b/contrib/ipfilter/test/expected/ni6
@@ -0,0 +1,9 @@
+4500 0054 cd8a 4000 ff11 1fbb c0a8 0601 c0a8 0701 8075 006f 0040 d26e 3e1d d249 0000 0000 0000 0002 0001 86a0 0000 0002 0000 0003 0000 0000 0000 0000 0000 0000 0000 0000 0001 86a3 0000 0003 0000 0011 0000 0000
+4500 0054 0000 4000 ff11 ec44 c0a8 0702 c0a8 0701 8075 006f 0040 d16d 3e1d d249 0000 0000 0000 0002 0001 86a0 0000 0002 0000 0003 0000 0000 0000 0000 0000 0000 0000 0000 0001 86a3 0000 0003 0000 0011 0000 0000
+4500 0038 cd83 4000 ff11 1fde c0a8 0701 c0a8 0601 006f 8075 0024 d805 3e1d d249 0000 0001 0000 0000 0000 0000 0000 0000 0000 0000 0000 0801
+4500 0038 0001 4000 ff11 ee5f c0a8 0602 c0a8 0601 006f 8075 0024 d904 3e1d d249 0000 0001 0000 0000 0000 0000 0000 0000 0000 0000 0000 0801
+4500 0044 d5a6 4000 ff11 17af c0a8 0601 c0a8 0701 80df 0801 0030 03f1 3e10 1fb1 0000 0000 0000 0002 0001 86a3 0000 0002 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+4500 0044 0002 4000 ff11 ec52 c0a8 0702 c0a8 0701 80df 0801 0030 02f0 3e10 1fb1 0000 0000 0000 0002 0001 86a3 0000 0002 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+4500 0034 0000 4000 fe11 ee65 c0a8 0701 c0a8 0601 0801 80df 0020 8ab8 3e10 1fb1 0000 0001 0000 0000 0000 0000 0000 0000 0000 0000
+4500 0034 0003 4000 fe11 ef61 c0a8 0602 c0a8 0601 0801 80df 0020 0000 3e10 1fb1 0000 0001 0000 0000 0000 0000 0000 0000 0000 0000
+-------------------------------
diff --git a/contrib/ipfilter/test/expected/ni7 b/contrib/ipfilter/test/expected/ni7
index d03ec58..f0d0010 100644
--- a/contrib/ipfilter/test/expected/ni7
+++ b/contrib/ipfilter/test/expected/ni7
@@ -1,3 +1,3 @@
-4500 0028 4706 4000 0111 1eac 0404 0404 0606 0606 afc9 829e 0014 6308 0402 0000 3be5 468d 000a cfc3
-4500 0038 809a 0000 ff01 2f1f 0202 0202 0404 0404 0b00 f91c 0000 0000 4500 0028 4706 4000 0111 26b4 0404 0404 0202 0202 afc9 829e 0014 c966
+4500 0028 4706 4000 0111 1eac 0404 0404 0606 0606 afc9 829e 0014 6308 0402 0000 3be5 468d 000a cfc3
+4500 0038 0000 0000 ff01 afb9 0202 0202 0404 0404 0b00 f91c 0000 0000 4500 0028 4706 4000 0111 26b4 0404 0404 0202 0202 afc9 829e 0014 c966
-------------------------------
diff --git a/contrib/ipfilter/test/expected/ni8 b/contrib/ipfilter/test/expected/ni8
index ebee8bc..4741b18 100644
--- a/contrib/ipfilter/test/expected/ni8
+++ b/contrib/ipfilter/test/expected/ni8
@@ -1,5 +1,5 @@
-4500 003c 4706 4000 ff06 2aac 0404 0404 0101 0101 5000 9d58 0000 0001 0000 0000 a002 16d0 3ddc 0000 0204 05b4 0402 080a 0047 fbb0 0000 0000 0103 0300
-4500 0038 809a 0000 ff01 271f 0a02 0202 0404 0404 0303 a7fb 0000 0000 4500 003c 4706 4000 ff06 20aa 0404 0404 0a02 0202 5000 0500 0000 0001
-4500 0058 809a 0000 ff01 26ff 0a02 0202 0404 0404 0303 1137 0000 0000 4500 003c 4706 4000 ff06 20aa 0404 0404 0a02 0202 5000 0500 0000 0001 0000 0000 a002 16d0 cc32 0000 0204 05b4 0402 080a 0047 fbb0 0000 0000 0103 0300
-4500 0038 809a 0000 ff01 2b1b 0303 0303 0505 0505 0303 0fa3 0000 0000 4500 003c 4706 4000 ff06 2aab 0404 0404 0101 0102 5000 9d58 0000 0001
+4500 003c 4706 4000 ff06 2aac 0404 0404 0101 0101 5000 9d58 0000 0001 0000 0000 a002 16d0 3ddc 0000 0204 05b4 0402 080a 0047 fbb0 0000 0000 0103 0300
+4500 0038 0000 0000 ff01 a7b9 0a02 0202 0404 0404 0303 a7fb 0000 0000 4500 003c 4706 4000 ff06 20aa 0404 0404 0a02 0202 5000 0500 0000 0001
+4500 0058 0001 0000 ff01 a798 0a02 0202 0404 0404 0303 1137 0000 0000 4500 003c 4706 4000 ff06 20aa 0404 0404 0a02 0202 5000 0500 0000 0001 0000 0000 a002 16d0 cc32 0000 0204 05b4 0402 080a 0047 fbb0 0000 0000 0103 0300
+4500 0038 0002 0000 ff01 abb3 0303 0303 0505 0505 0303 0fa3 0000 0000 4500 003c 4706 4000 ff06 2aab 0404 0404 0101 0102 5000 9d58 0000 0001
-------------------------------
diff --git a/contrib/ipfilter/test/expected/ni9 b/contrib/ipfilter/test/expected/ni9
new file mode 100644
index 0000000..9effc52
--- /dev/null
+++ b/contrib/ipfilter/test/expected/ni9
@@ -0,0 +1,5 @@
+4500 003c 4706 4000 ff06 2aac 0404 0404 0101 0101 5000 9c40 0000 0001 0000 0000 a002 16d0 3ef4 0000 0204 05b4 0402 080a 0047 fbb0 0000 0000 0103 0300
+4500 0038 0000 0000 ff01 adb7 0303 0303 0404 0404 0303 0fa3 0000 0000 4500 003c 4706 4000 ff06 2aac 0404 0404 0101 0101 5000 9d58 0000 0001
+4500 0058 0001 0000 ff01 ad96 0303 0303 0404 0404 0303 0735 0000 0000 4500 003c 4706 4000 ff06 2aac 0404 0404 0101 0101 5000 9d58 0000 0001 0000 0000 a002 16d0 3ddc 0000 0204 05b4 0402 080a 0047 fbb0 0000 0000 0103 0300
+4500 0038 0002 0000 ff01 abb3 0303 0303 0505 0505 0303 0fa3 0000 0000 4500 003c 4706 4000 ff06 2aab 0404 0404 0101 0102 5000 9d58 0000 0001
+-------------------------------
diff --git a/contrib/ipfilter/test/expected/p1 b/contrib/ipfilter/test/expected/p1
new file mode 100644
index 0000000..c3f7afa
--- /dev/null
+++ b/contrib/ipfilter/test/expected/p1
@@ -0,0 +1,19 @@
+nomatch
+pass
+nomatch
+nomatch
+nomatch
+pass
+nomatch
+nomatch
+List of active MAP/Redirect filters:
+
+List of active sessions:
+List of active state sessions:
+List of configured pools
+table role = ipf type = tree number = 100
+ { 1.1.1.1/32; ! 2.2.0.0/16; 2.2.2.0/24; };
+List of configured hash tables
+List of groups configured (set 0)
+List of groups configured (set 1)
+-------------------------------
diff --git a/contrib/ipfilter/test/expected/p2 b/contrib/ipfilter/test/expected/p2
new file mode 100644
index 0000000..bb15bdf
--- /dev/null
+++ b/contrib/ipfilter/test/expected/p2
@@ -0,0 +1,20 @@
+nomatch
+nomatch
+pass
+nomatch
+nomatch
+nomatch
+nomatch
+pass
+List of active MAP/Redirect filters:
+
+List of active sessions:
+List of active state sessions:
+List of configured pools
+List of configured hash tables
+# 'anonymous' table
+table role = ipf type = hash number = 2147483649 size = 3
+ { 4.4.0.0/16; 127.0.0.1/32; };
+List of groups configured (set 0)
+List of groups configured (set 1)
+-------------------------------
diff --git a/contrib/ipfilter/test/expected/p3 b/contrib/ipfilter/test/expected/p3
new file mode 100644
index 0000000..136543f
--- /dev/null
+++ b/contrib/ipfilter/test/expected/p3
@@ -0,0 +1,33 @@
+pass
+nomatch
+nomatch
+nomatch
+nomatch
+pass
+block
+nomatch
+nomatch
+pass
+nomatch
+block
+List of active MAP/Redirect filters:
+
+List of active sessions:
+List of active state sessions:
+List of configured pools
+List of configured hash tables
+group-map out role = ipf number = 2010 size = 5
+ { 5.0.0.0/8, group = 2040; 4.4.0.0/16, group = 2020; 2.2.2.2/32, group = 2020; };
+group-map in role = ipf number = 1010 size = 3
+ { 3.3.0.0/16, group = 1030; 1.1.1.1/32, group = 1020; };
+List of groups configured (set 0)
+Dev.0. Group 1020 Ref 1 Flags 0x8000
+2 pass in all group 1020
+Dev.0. Group 1030 Ref 1 Flags 0x8000
+2 block in all group 1030
+Dev.0. Group 2020 Ref 2 Flags 0x4000
+4 pass out all group 2020
+Dev.0. Group 2040 Ref 1 Flags 0x4000
+2 block out all group 2040
+List of groups configured (set 1)
+-------------------------------
diff --git a/contrib/ipfilter/test/hextest b/contrib/ipfilter/test/hextest
index c500c6b..b7b0b2c 100644
--- a/contrib/ipfilter/test/hextest
+++ b/contrib/ipfilter/test/hextest
@@ -13,7 +13,7 @@ fi
echo "$1...";
/bin/cp /dev/null results/$1
( while read rule; do
- echo "$rule" | ../ipftest -br - -Hi input/$1 >> results/$1;
+ echo "$rule" | ../ipftest -br - -F hex -i input/$1 >> results/$1;
if [ $? -ne 0 ] ; then
exit 1;
fi
diff --git a/contrib/ipfilter/test/input/f11 b/contrib/ipfilter/test/input/f11
index 25c670d..c54bb80 100644
--- a/contrib/ipfilter/test/input/f11
+++ b/contrib/ipfilter/test/input/f11
@@ -6,7 +6,7 @@ in on e0 tcp 1.1.1.1,1 2.1.2.2,23 A
in on e0 tcp 1.1.1.1,1 2.1.2.2,25 A
in on e1 tcp 2.1.2.2,23 1.1.1.1,1 A
in on e1 tcp 2.1.2.2,25 1.1.1.1,1 A
-in on e0 tcp 1.1.1.1,1 2.1.2.2,23 F
+in on e0 tcp 1.1.1.1,1 2.1.2.2,23 FA
in on e0 tcp 1.1.1.1,1 2.1.2.2,23 A
in on e0 tcp 1.1.1.1,2 2.1.2.2,23 A
in on e1 udp 1.1.1.1,1 4.4.4.4,53
diff --git a/contrib/ipfilter/test/input/f12 b/contrib/ipfilter/test/input/f12
index 682202f..52edde1 100644
--- a/contrib/ipfilter/test/input/f12
+++ b/contrib/ipfilter/test/input/f12
@@ -1,35 +1,44 @@
# 1.1.1.1,1025 -> 2.1.1.1,25 TTL=63 TCP DF SYN
-45 00 0028 0000 4000 3f 06 36cd 01010101 02010101
-0401 0019 00000000 00000000 50 02 2000 0000 0000
+[]
+4500 0028 0000 4000 3f06 36cd 0101 0101 0201 0101
+0401 0019 0000 0000 0000 0000 5002 2000 86c5 0000
# 1.1.1.1,1025 -> 2.1.1.1,25 TTL=63 TCP DF ACK
-45 00 0028 0000 4000 3f 06 36cd 01010101 02010101
-0401 0019 00000000 00000000 50 10 2000 0000 0000
+[]
+4500 0028 0000 4000 3f06 36cd 0101 0101 0201 0101
+0401 0019 0000 0000 0000 0000 5010 2000 86b7 0000
# 1.1.1.1,1025 -> 2.1.1.1,25 TTL=63 TCP DF MF FO=0 ACK
-45 00 0028 0000 6000 3f 06 16cd 01010101 02010101
-0401 0019 00000000 00000000 50 10 2000 0000 0000
+[]
+4500 0028 0000 6000 3f06 16cd 0101 0101 0201 0101
+0401 0019 0000 0000 0000 0000 5010 2000 86b7 0000
# 1.1.1.1,1025 -> 2.1.1.1,25 TTL=63 TCP DF FO=0
-45 00 001c 0000 6000 3f 06 16d9 01010101 02010101
-0401 0019 00000000
+[]
+4500 001c 0000 6000 3f06 16d9 0101 0101 0201 0101
+0401 0019 0000 0000
# 1.1.1.1 -> 2.1.1.1 TTL=63 TCP DF FO=1 ACK
-45 00 001c 0000 6001 3f 06 16d8 01010101 02010101
-00000000 50 10 2000
+[]
+4500 001c 0000 6001 3f06 16d8 0101 0101 0201 0101
+0000 0000 5010 2000
# 1.1.1.1 -> 2.1.1.1 TTL=63 UDP DF MF FO=0
-45 00 0014 0000 6000 3f 11 16d6 01010101 02010101
+[]
+4500 0014 0000 6000 3f11 16d6 0101 0101 0201 0101
# 1.1.1.1,53 -> 2.1.1.1,53 TTL=63 UDP MF FO=0
-45 00 0018 0000 2000 3f 11 56d2 01010101 02010101
+[]
+4500 0018 0000 2000 3f11 56d2 0101 0101 0201 0101
0035 0035
# 1.1.1.1,1 -> 2.1.1.1,1 TTL=63 UDP MF FO=0
-45 00 001c 0000 2000 3f 11 56ce 01010101 02010101
-0001 0001 0004 0000
+[]
+4500 001c 0000 2000 3f11 56ce 0101 0101 0201 0101
+0001 0001 0004 fadc
# 1.1.1.1,53 -> 2.1.1.1,53 TTL=63 UDP MF FO=0
-45 00 001c 0000 2000 3f 11 56ce 01010101 02010101
-0035 0035 0004 0000
+[]
+4500 001c 0000 2000 3f11 56ce 0101 0101 0201 0101
+0035 0035 0004 fa74
diff --git a/contrib/ipfilter/test/input/f13 b/contrib/ipfilter/test/input/f13
index d1c04d8..0ca607e 100644
--- a/contrib/ipfilter/test/input/f13
+++ b/contrib/ipfilter/test/input/f13
@@ -1,51 +1,51 @@
# 1.1.1.1,1025 -> 2.1.1.1,25 TTL=63 TCP DF,MF,FO=0 SYN
-45 00 0028 0001 4000 3f 06 36cc 01010101 02010101
-0401 0019 00000000 00000000 50 02 2000 0000 0000
+4500 0028 0001 4000 3f06 36cc 0101 0101 0201 0101
+0401 0019 0000 0000 0000 0000 50 02 2000 86c5 0000
# 1.1.1.1,1025 -> 2.1.1.1,25 TTL=63 TCP MF ACK
-45 00 0024 0002 2000 3f 06 56cf 01010101 02010101
-0401001900000000 0000000050102000
+4500 0024 0002 2000 3f06 56cf 0101 0101 0201 0101
+0401 0019 0000 0000 0000 0000 5010 2000
# 1.1.1.1,1025 -> 2.1.1.1,25 TTL=63 TCP FO=2 ACK
-45 00 002c 0002 0002 3f 06 76c5 01010101 02010101
-0000000000010203 0405060708090a0b 0c0d0e0f10111213
+4500 002c 0002 0002 3f06 76c5 0101 0101 0201 0101
+0000 0000 0001 0203 0405 0607 0809 0a0b 0c0d 0e0f 1011 1213
# 1.1.1.1,1025 -> 2.1.1.1,25 TTL=63 TCP DF MF FO=0 SYN
-45 00 0028 0003 6000 3f 06 16ca 01010101 02010101
-0401 0019 00000000 00000000 50 10 2000 0000 0000
+4500 0028 0003 6000 3f06 16ca 0101 0101 0201 0101
+0401 0019 0000 0000 0000 0000 5010 2000 0000 0000
# 1.1.1.1,1025 -> 2.1.1.1,25 TTL=63 TCP DF FO=0
-45 00 001c 0004 6000 3f 06 16d5 01010101 02010101
-0401 0019 00000000
+4500 001c 0004 6000 3f06 16d5 0101 0101 0201 0101
+0401 0019 0000 0000
# 1.1.1.1 -> 2.1.1.1 TTL=63 TCP DF FO=1 SYN
-45 00 001c 0005 6001 3f 06 16d3 01010101 02010101
-00000000 50 10 2000
+4500 001c 0005 6001 3f06 16d3 0101 0101 0201 0101
+0000 0000 5010 2000
# 1.1.1.1 -> 2.1.1.1 TTL=63 UDP DF MF FO=0
-45 00 0014 0006 6000 3f 11 16d0 01010101 02010101
+4500 0014 0006 6000 3f11 16d0 0101 0101 0201 0101
# 1.1.1.1,53 -> 2.1.1.1,53 TTL=63 UDP MF FO=0
-45 00 0018 0007 2000 3f 11 56cb 01010101 02010101
+4500 0018 0007 2000 3f11 56cb 0101 0101 0201 0101
0035 0035
# 1.1.1.1,53 -> 2.1.1.1,53 TTL=63 UDP MF FO=0
-45 00 001c 0008 2000 3f 11 56c6 01010101 02010101
-0035003500040000
+4500 001c 0008 2000 3f11 56c6 0101 0101 0201 0101
+0035 0035 0004 0000
# 1.1.1.1,53 -> 2.1.1.1,54 TTL=63 UDP MF FO=0 (short)
-45 00 0018 0008 2000 3f 11 56ca 01010101 02010101
-00350036
+4500 0018 0008 2000 3f11 56ca 0101 0101 0201 0101
+0035 0036
# 1.1.1.1,21 -> 2.1.1.1,54 TTL=63 UDP MF FO=0
-45 00 001c 0008 2000 3f 11 56c6 01010101 02010101
-0015003600040000
+4500 001c 0008 2000 3f11 56c6 0101 0101 0201 0101
+0015 0036 0004 0000
# 1.1.1.1,21 -> 2.1.1.1,54 TTL=63 TCP MF FO=0
-45 00 001c 0008 2000 3f 06 56d1 01010101 02010101
-0015 0036 00000000 00000000 50 02 2000 0000 0000
+4500 001c 0008 2000 3f06 56d1 0101 0101 0201 0101
+0015 0036 0000 0000 0000 0000 50 02 2000 0000 0000
# 1.1.1.1 -> 2.1.1.1 TTL=63 UDP FO=1
-45 00 001c 0008 0001 3f 11 76c5 01010101 02010101
-0000000000000000
+4500 001c 0008 0001 3f11 76c5 0101 0101 0201 0101
+0000 0000 0000 0000
diff --git a/contrib/ipfilter/test/input/f17 b/contrib/ipfilter/test/input/f17
index 1eba7e7..18af566 100644
--- a/contrib/ipfilter/test/input/f17
+++ b/contrib/ipfilter/test/input/f17
@@ -1,61 +1,28 @@
-# (1.1.1.1,54076,seq=0xbfd08989) -> (2.2.2.2,25,seq=0) SYN
[out,ppp0]
4500 003c 8262 0000 4006 f254 0101 0101
0202 0202 d33c 0019 bfd0 8989 0000 0000
a002 4000 cfcd 0000 0204 05b4 0103 0300
0101 080a 008e 17f7 0000 0000
-# (2.2.2.2,25,seq=0x40203436) -> (1.1.1.1,54076,seq=0xbfdfcbc9) ACK
[in,ppp0]
4500 003c 8262 0000 1106 2155 0202 0202
0101 0101 0019 d33c 4020 3436 bfdf cbc9
5010 4000 694a 0000 0204 0584 0103 0300
0101 080a 008e 17f7 0000 0000
-# (1.1.1.1,54076,seq=0xbfd08989) -> (2.2.2.2,25,seq=0x0) SYN
[out,ppp0]
4500 003c 8265 0000 4006 f251 0101 0101
0202 0202 d33c 0019 bfd0 8989 0000 0000
a002 4000 cfc2 0000 0204 05b4 0103 0300
0101 080a 008e 1802 0000 0000
-# (2.2.2.2,25,seq=0xed674d4e) -> (1.1.1.1,54076,seq=0xbfd0898a) SYN-ACK
[in,ppp0]
4500 002c 7442 4000 2906 d784 0202 0202
0101 0101 0019 d33c ed67 4d4e bfd0 898a
6012 2118 19c2 0000 0204 0584
-#
-# (2.2.2.2,25,seq=0xbfd0898a) -> (1.1.1.1,54076,seq=0xed674d4e) ACK
[out,ppp0]
4500 002c 8262 0000 4006 f264 0101 0101
0202 0202 d33c 0019 bfd0 898a ed67 4d4e
-5010 4000 6190 0000 0000
-
-# (1.1.1.1,54076,seq=0xcfd08989) -> (2.2.2.2,25,seq=0x0) SYN
-[out,ppp0]
-4500 003c 8265 0000 4006 f251 0101 0101
-0202 0202 d33c 0019 cfd0 8989 0000 0000
-a002 4000 bfc2 0000 0204 05b4 0103 0300
-0101 080a 008e 1802 0000 0000
-
-# (1.1.1.1,54076,seq=0xcfd08989) -> (2.2.2.2,25,seq=0x0) SYN
-[out,ppp0]
-4500 003c 8266 0000 4006 f250 0101 0101
-0202 0202 d33c 0019 cfd0 8989 0000 0000
-a002 4000 bfc2 0000 0204 05b4 0103 0300
-0101 080a 008e 1802 0000 0000
-
-# (2.2.2.2,25,seq=0xed674d4e) -> (1.1.1.1,54076,seq=0xcfd0898a) SYN-ACK
-[in,ppp0]
-4500 002c 7442 4000 2906 d784 0202 0202
-0101 0101 0019 d33c ed67 4d4e cfd0 898a
-6012 2118 09c2 0000 0204 0584
-
-#
-# (2.2.2.2,25,seq=0xcfd0898a) -> (1.1.1.1,54076,seq=0xed674d4e) ACK
-[out,ppp0]
-4500 002c 8262 0000 4006 f264 0101 0101
-0202 0202 d33c 0019 cfd0 898a ed67 4d4e
-5010 4000 6190 0000 0000
+5010 4000 0ce0 0000 0000
diff --git a/contrib/ipfilter/test/input/ipv6.1 b/contrib/ipfilter/test/input/ipv6.1
index 1d7d546..3920810 100644
--- a/contrib/ipfilter/test/input/ipv6.1
+++ b/contrib/ipfilter/test/input/ipv6.1
@@ -3,7 +3,7 @@ ef00 1001 2002 0001 0000 0000 0000 0070
2001 1002 3333 0001 0000 0000 0000 0001
8083 829a
0018
-f427
+f4c1
0000 0344 0000 0004 f8f1 9d3c ddba 0e00
[in,gif0] 6000 0000 0048 3a40
diff --git a/contrib/ipfilter/test/input/l1 b/contrib/ipfilter/test/input/l1
index afda0db..56d766a 100644
--- a/contrib/ipfilter/test/input/l1
+++ b/contrib/ipfilter/test/input/l1
@@ -1,52 +1,64 @@
# 1.1.1.1,1025 -> 2.2.2.2,25 TTL=63 TCP DF SYN
-45 00 0028 0000 4000 3f 06 0000 01010101 02020202
-0401 0019 00000000 00000000 50 02 2000 0000 0000
+[]
+4500 0028 0000 4000 3f06 35cb 0101 0101 0202 0202
+0401 0019 0000 0000 0000 0000 5002 2000 85c3 0000
#in on e0 tcp 1.1.1.1,1025 2.1.2.2,25 A
-45 00 0028 0000 4000 3f 06 0000 01010101 02020202
-0401 0019 00000000 00000000 50 10 2000 0000 0000
+[]
+4500 0028 0000 4000 3f06 35cb 0101 0101 0202 0202
+0401 0019 0000 0000 0000 0000 5010 2000 85b5 0000
#in on e1 tcp 2.1.2.2,25 1.1.1.1,1025 AS
-45 00 0028 0000 4000 3f 06 0000 02020202 01010101
-0019 0401 00000000 00000000 50 12 2000 0000 0000
+[]
+4500 0028 0000 4000 3f06 35cb 0202 0202 0101 0101
+0019 0401 0000 0000 0000 0000 5012 2000 85b3 0000
#in on e1 tcp 2.1.2.2,25 1.1.1.1,1025 A
-[out,e1] 45 00 0028 0000 4000 3f 06 0000 02020202 01010101
-0019 0401 00000000 00000000 50 10 2000 0000 0000
+[out,e1] 4500 0028 0000 4000 3f06 35cb 0202 0202 0101 0101
+0019 0401 0000 0000 0000 0000 5010 2000 85b5 0000
#in on e0 tcp 1.1.1.1,1025 2.1.2.2,25 F
-45 00 0028 0000 4000 3f 06 0000 01010101 02020202
-0401 0019 00000000 00000000 50 01 2000 0000 0000
+[]
+4500 0028 0000 4000 3f06 35cb 0101 0101 0202 0202
+0401 0019 0000 0000 0000 0000 5011 2000 85b4 0000
#in on e0 tcp 1.1.1.1,1025 2.1.2.2,25 A
-45 00 0028 0000 4000 3f 06 0000 01010101 02020202
-0401 0019 00000000 00000000 50 10 2000 0000 0000
+[]
+4500 0028 0000 4000 3f06 35cb 0101 0101 0202 0202
+0401 0019 0000 0000 0000 0000 5010 2000 85b5 0000
#in on e0 tcp 1.1.1.1,1025 2.1.2.2,25 A
-45 00 0028 0000 4000 3f 06 0000 01010101 02020202
-0401 0019 00000000 00000000 50 10 2000 0000 0000
+[]
+4500 0028 0000 4000 3f06 35cb 0101 0101 0202 0202
+0401 0019 0000 0000 0000 0000 5010 2000 85b5 0000
#in on e1 udp 1.1.1.1,1 4.4.4.4,53
-45 00 0028 0000 4000 3f 11 0000 01010101 04040404
-0001 0035 0000 0000 0102 0304 0506 0708 090a 0b0d
+[]
+4500 0028 0000 4000 3f11 31bc 0101 0101 0404 0404
+0001 0035 0000 d16f 0102 0304 0506 0708 090a 0b0d
#in on e1 udp 2.2.2.2,2 4.4.4.4,53
-45 00 0028 0000 4000 3f 11 0000 02020202 04040404
+[]
+4500 0028 0000 4000 3f11 2fba 0202 0202 0404 0404
0001 0035 0000 0000 0102 0304 0506 0708 090a 0b0d
#in on e1 udp 2.2.2.2,2 4.4.4.4,53
-45 00 0038 0000 4000 3f 11 0000 02020202 04040404
-0001 0035 0000 0000 0102 0304 0506 0708 090a 0b0d
+[]
+4500 0038 0000 4000 3f11 2faa 0202 0202 0404 0404
+0001 0035 0000 d47b 0102 0304 0506 0708 090a 0b0d
0e0f 4061 4263 4465 4667 4869 4a6b 4c6d
#in on e0 ip 4.4.4.4,53 1.1.1.1,1
-45 00 0014 0000 4000 3f 00 0000 02020202 04040404
+[]
+4500 0014 0000 4000 3f00 2fdf 0202 0202 0404 0404
#in on e0 udp 3.3.3.3,1023 1.1.1.1,2049
-45 00 001c 0000 4000 3f 11 0000 03030303 01010101
-03ff 0801 0000 0000
+[]
+4500 001c 0000 4000 3f11 33ca 0303 0303 0101 0101
+03ff 0801 0000 ebde
#in on e0 udp 1.1.1.1,2049 3.3.3.3,1023
-45 00 001c 0000 4000 3f 11 0000 01010101 03030303
+[]
+4500 001c 0000 4000 3f11 33ca 0101 0101 0303 0303
0801 03ff 0000 0000
diff --git a/contrib/ipfilter/test/input/n1 b/contrib/ipfilter/test/input/n1
index a607390..04b24ef 100644
--- a/contrib/ipfilter/test/input/n1
+++ b/contrib/ipfilter/test/input/n1
@@ -19,7 +19,10 @@ in on zx0 255 10.1.1.2 10.3.4.5
in on zx0 tcp 10.1.1.1,1025 10.3.4.5,1025
out on zx0 icmp 10.1.1.1 10.4.3.2
in on zx0 icmp 10.4.3.2 10.2.2.2
+in on zx0 icmp 10.4.3.2 10.3.4.1
+in on zx0 icmp 10.4.3.2 10.3.4.2
in on zx0 icmp 10.4.3.2 10.3.4.3
+in on zx0 icmp 10.4.3.2 10.3.4.4
in on zx0 icmp 10.4.3.2 10.3.4.5
out on zx0 34 10.1.1.2 10.4.3.2
in on zx0 34 10.4.3.2 10.3.4.4
diff --git a/contrib/ipfilter/test/input/n10 b/contrib/ipfilter/test/input/n10
new file mode 100644
index 0000000..321ed0b
--- /dev/null
+++ b/contrib/ipfilter/test/input/n10
@@ -0,0 +1,6 @@
+# TCP SYN packet with an MSS option
+[out,ppp0]
+4500 002c 10c9 4000 ff06 3289 c0a8 0103
+96cb e002 8032 0015 bd6b c9c8 0000 0000
+6002 2238 35f9 0000 0204 05b4
+
diff --git a/contrib/ipfilter/test/input/n11 b/contrib/ipfilter/test/input/n11
new file mode 100644
index 0000000..8712674
--- /dev/null
+++ b/contrib/ipfilter/test/input/n11
@@ -0,0 +1,16 @@
+out on zx0 255 10.1.1.0 10.1.1.2
+out on zx0 255 10.1.1.1 10.1.1.2
+out on zx0 255 10.1.1.2 10.1.1.1
+out on zx0 255 10.2.2.1 10.1.2.1
+out on zx0 255 10.2.2.2 10.1.2.1
+in on zx0 255 10.1.1.1 10.1.1.2
+in on zx0 255 10.1.1.2 10.1.1.1
+in on zx0 255 10.2.2.1 10.2.1.1
+in on zx0 255 10.2.2.2 10.2.1.1
+in on zx0 255 10.2.2.3 10.1.1.1
+in on zx0 255 10.2.3.4 10.2.2.2
+in on zx0 255 10.1.1.1 10.2.2.2
+in on zx0 255 10.1.1.2 10.2.2.2
+in on zx0 255 10.1.1.0 10.3.4.5
+in on zx0 255 10.1.1.1 10.3.4.5
+in on zx0 255 10.1.1.2 10.3.4.5
diff --git a/contrib/ipfilter/test/input/n12 b/contrib/ipfilter/test/input/n12
new file mode 100644
index 0000000..fb4d76d
--- /dev/null
+++ b/contrib/ipfilter/test/input/n12
@@ -0,0 +1,18 @@
+[out,le0=192.168.1.188]
+4510 0040 2020 4000 4006 17e1 c0a8 7e53
+c0a8 0303 12c2 0017 4e33 298e 0000 0000
+b002 4000 07af 0000 0204 05b4 0101 0402
+0103 0300 0101 080a 0c72 549e 0000 0000
+
+[in,le0]
+4500 003c 00b0 4000 fe06 f5fb c0a8 0303
+c0a8 01bc 0017 2710 f674 e02c 4e33 298f
+a012 2798 e317 0000 0101 080a 2c05 b797
+0c72 549e 0103 0300 0204 05b4
+
+[out,le0]
+4510 0034 493b 4000 4006 eed1 c0a8 7e53
+c0a8 0303 12c2 0017 4e33 298f f674 e02d
+8010 4000 8e2a 0000 0101 080a 0c72 549e
+2c05 b797
+
diff --git a/contrib/ipfilter/test/input/n4 b/contrib/ipfilter/test/input/n4
index 52c2d88..1218ef9 100644
--- a/contrib/ipfilter/test/input/n4
+++ b/contrib/ipfilter/test/input/n4
@@ -1,5 +1,10 @@
in on zx0 tcp 10.3.3.3,12345 10.1.1.1,23
+out on zx0 tcp 10.2.2.1,10023 10.3.3.3,12345
in on zx0 tcp 10.3.3.3,12345 10.1.1.1,53
-in on zx0 tcp 10.3.3.3,12345 10.1.0.0,23
+out on zx0 tcp 10.2.2.1,10053 10.3.3.3,12345
+in on zx0 tcp 10.3.3.3,12346 10.1.0.0,23
+out on zx0 tcp 10.2.2.1,10023 10.3.3.3,12346
in on zx0 udp 10.3.3.3,12345 10.1.1.0,53
+out on zx0 udp 10.2.2.1,10053 10.3.3.3,12345
in on zx0 tcp 10.3.3.3,12345 10.1.1.0,53
+out on zx0 tcp 10.2.2.1,53 10.3.3.3,12345
diff --git a/contrib/ipfilter/test/input/n8 b/contrib/ipfilter/test/input/n8
new file mode 100644
index 0000000..1f5b213
--- /dev/null
+++ b/contrib/ipfilter/test/input/n8
@@ -0,0 +1,30 @@
+#v tos len id off ttl p sum src dst
+# ICMP ECHO (ping) exchange
+[out,icmp0] 4500 0054 8bc1 0000 ff01 23dc 0202 0202 0404 0404
+0800 efdf 6220 0000 3f6f 6e80 000b
+0d02 0809 0a0b 0c0d 0e0f 1011 1213 1415
+1617 1819 1a1b 1c1d 1e1f 2021 2223 2425
+2627 2829 2a2b 2c2d 2e2f 3031 3233 3435
+3637
+
+[in,icmp0] 4500 0054 3fd5 4000 ff01 1fc1 0404 0404 0a0a 0a01
+0000 f7df 6220 0000 3f6f 6e80 000b
+0d02 0809 0a0b 0c0d 0e0f 1011 1213 1415
+1617 1819 1a1b 1c1d 1e1f 2021 2223 2425
+2627 2829 2a2b 2c2d 2e2f 3031 3233 3435
+3637
+
+[out,icmp0] 4500 0054 8bc1 0000 ff01 23dc 0202 0202 0404 0404
+0800 efde 6220 0001 3f6f 6e80 000b
+0d02 0809 0a0b 0c0d 0e0f 1011 1213 1415
+1617 1819 1a1b 1c1d 1e1f 2021 2223 2425
+2627 2829 2a2b 2c2d 2e2f 3031 3233 3435
+3637
+
+[in,icmp0] 4500 0054 3fd5 4000 ff01 1fc1 0404 0404 0a0a 0a01
+0000 f7de 6220 0001 3f6f 6e80 000b
+0d02 0809 0a0b 0c0d 0e0f 1011 1213 1415
+1617 1819 1a1b 1c1d 1e1f 2021 2223 2425
+2627 2829 2a2b 2c2d 2e2f 3031 3233 3435
+3637
+
diff --git a/contrib/ipfilter/test/input/n9 b/contrib/ipfilter/test/input/n9
new file mode 100644
index 0000000..c4aada8
--- /dev/null
+++ b/contrib/ipfilter/test/input/n9
@@ -0,0 +1,30 @@
+#v tos len id off ttl p sum src dst
+# ICMP ECHO (ping) exchange
+[in,icmp0] 4500 0054 8bc1 0000 ff01 23dc 0202 0202 0404 0404
+0800 efdf 6220 0000 3f6f 6e80 000b
+0d02 0809 0a0b 0c0d 0e0f 1011 1213 1415
+1617 1819 1a1b 1c1d 1e1f 2021 2223 2425
+2627 2829 2a2b 2c2d 2e2f 3031 3233 3435
+3637
+
+[out,icmp0] 4500 0054 3fd5 4000 ff01 23c5 0a0a 0a01 0202 0202
+0000 f7df 6220 0000 3f6f 6e80 000b
+0d02 0809 0a0b 0c0d 0e0f 1011 1213 1415
+1617 1819 1a1b 1c1d 1e1f 2021 2223 2425
+2627 2829 2a2b 2c2d 2e2f 3031 3233 3435
+3637
+
+[in,icmp0] 4500 0054 8bc1 0000 ff01 23dc 0202 0202 0404 0404
+0800 efde 6220 0001 3f6f 6e80 000b
+0d02 0809 0a0b 0c0d 0e0f 1011 1213 1415
+1617 1819 1a1b 1c1d 1e1f 2021 2223 2425
+2627 2829 2a2b 2c2d 2e2f 3031 3233 3435
+3637
+
+[out,icmp0] 4500 0054 3fd5 4000 ff01 23c5 0a0a 0a01 0202 0202
+0000 f7de 6220 0001 3f6f 6e80 000b
+0d02 0809 0a0b 0c0d 0e0f 1011 1213 1415
+1617 1819 1a1b 1c1d 1e1f 2021 2223 2425
+2627 2829 2a2b 2c2d 2e2f 3031 3233 3435
+3637
+
diff --git a/contrib/ipfilter/test/input/ni1 b/contrib/ipfilter/test/input/ni1
index dc2f05e..8f548d5 100644
--- a/contrib/ipfilter/test/input/ni1
+++ b/contrib/ipfilter/test/input/ni1
@@ -8,12 +8,13 @@
[in,df0]
4500 0038 809a 0000 ff01 2919 0303 0303
0606 0606 0b00 5f7b 0000 0000
-4500 0028 4706 4000 0111 1eac 0606 0606 0404 0404
-afc9 829e 0014 6308
+4500 0028 0000 4000 0111 65b2 0606 0606 0404 0404
+afc9 829e 0014 6308
[in,df0]
4500 0044 809a 0000 ff01 290d 0303 0303
0606 0606 0b00 0939 0000 0000
-4500 0028 4706 4000 0111 1eac 0606 0606 0404 0404
-afc9 829e 0014 6308 0402 0000 3be5 468d 000a cfc3
+4500 0028 0000 4000 0111 65b2 0606 0606 0404 0404
+afc9 829e 0014 6308
+0402 0000 3be5 468d 000a cfc3
diff --git a/contrib/ipfilter/test/input/ni10 b/contrib/ipfilter/test/input/ni10
index 041326f..48ac225 100644
--- a/contrib/ipfilter/test/input/ni10
+++ b/contrib/ipfilter/test/input/ni10
@@ -1,17 +1,21 @@
#v tos len id off ttl p sum src dst
# ICMP dest unreachable with 64 bits in payload (in reply to a TCP packet
# going out)
+# IP 4.4.4.4 2.2.2.2 TCP(20480,80)
[in,df0] 45 00 00 3c 47 06 40 00 ff 06 28 aa 04 04 04 04 02 02 02 02 50 00 00 50 00 00 00 01 00 00 00 00 a0 02 16 d0 d8 e2 00 00 02 04 05 b4 04 02 08 0a 00 47 fb b0 00 00 00 00 01 03 03 00
+# IP 3.3.3.3 -> 4.4.4.4 ICMP (IP(4.4.4.4,6.6.6.6) TCP(20480,80))
[out,df0]
4500 0038 809a 0000 ff01 2d1d 0303 0303 0404 0404
0303 acab 0000 0000
4500 003c 4706 4000 ff06 20a2 0404 0404 0606 0606
5000 0050 0000 0001
+# IP 3.3.3.3 -> 4.4.4.4 ICMP (IP(4.4.4.4,6.6.6.6) TCP(20480,80))
# ICMP dest unreachable with whole packet in payload (40 bytes = 320 bits)
[out,df0] 45 00 00 58 80 9a 00 00 ff 01 2c fd 03 03 03 03 04 04 04 04 03 03 11 3f 00 00 00 00 45 00 00 3c 47 06 40 00 ff 06 20 a2 04 04 04 04 06 06 06 06 50 00 00 50 00 00 00 01 00 00 00 00 a0 02 16 d0 d0 da 00 00 02 04 05 b4 04 02 08 0a 00 47 fb b0 00 00 00 00 01 03 03 00
+# IP 3.3.3.3 -> 4.4.4.4 ICMP (IP(4.4.4.4,6.6.6.6) TCP(20480,80))
[out,df0]
4500 0038 809a 0000 ff01 2b1b 0303 0303 0505 0505
0303 acab 0000 0000
diff --git a/contrib/ipfilter/test/input/ni12 b/contrib/ipfilter/test/input/ni12
new file mode 100644
index 0000000..788e603
--- /dev/null
+++ b/contrib/ipfilter/test/input/ni12
@@ -0,0 +1,24 @@
+#v tos len id off ttl p sum src dst
+# ICMP dest unreachable with 64 bits in payload (in reply to a TCP packet
+# going out)
+[in,df0] 45 00 00 3c 47 06 40 00 ff 06 20 aa 04 04 04 04 0a 02 02 02 50 00 05 00 00 00 00 01 00 00 00 00 a0 02 16 d0 cc 32 00 00 02 04 05 b4 04 02 08 0a 00 47 fb b0 00 00 00 00 01 03 03 00
+
+[out,df0]
+4500 0038 809a 0000 ff01 2d1d 0303 0303 0404 0404
+0303 0fa3 0000 0000
+4500 003c 4706 4000 ff06 2aac 0404 0404 0101 0101
+5000 9d58 0000 0001
+
+# ICMP dest unreachable with whole packet in payload (40 bytes = 320 bits)
+[out,df0]
+4500 0058 809a 0000 ff01 2cfd 0303 0303 0404 0404
+0303 0735 0000 0000
+4500 003c 4706 4000 ff06 2aac 0404 0404 0101 0101
+5000 9d58 0000 0001 0000 0000 a002 16d0 3ddc 0000
+0204 05b4 0402 080a 0047 fbb0 0000 0000 0103 0300
+
+[out,df0]
+4500 0038 809a 0000 ff01 2b1b 0303 0303 0505 0505
+0303 0fa3 0000 0000
+4500 003c 4706 4000 ff06 2aab 0404 0404 0101 0102 5000 9d58 0000 0001
+
diff --git a/contrib/ipfilter/test/input/ni13 b/contrib/ipfilter/test/input/ni13
new file mode 100644
index 0000000..56ddb79
--- /dev/null
+++ b/contrib/ipfilter/test/input/ni13
@@ -0,0 +1,235 @@
+# 23:18:36.130424 192.168.113.1.1511 > 192.168.113.3.1723: S 2884651685:2884651685(0) win 64240 <mss 1460,nop,nop,sackOK> (DF)
+[in,pcn1=192.168.113.3]
+4500 0030 5e11 4000 8006 3961 c0a8 7101
+c0a8 7103 05e7 06bb abf0 4aa5 0000 0000
+7002 faf0 21a1 0000 0204 05b4 0101 0402
+
+# 23:18:36.130778 192.168.113.3.1723 > 192.168.113.1.1511: S 2774821082:2774821082(0) ack 2884651686 win 32768 <mss 1460> (DF)
+[out,pcn1]
+4500 002c 69a6 4000 4006 6dd0 c0a8 7103
+c0a8 7101 06bb 05e7 a564 68da abf0 4aa6
+6012 8000 a348 0000 0204 05b4
+
+# 23:18:36.130784 192.168.113.1.1511 > 192.168.113.3.1723: P 1:157(156) ack 1 win 64240: pptp CTRL_MSGTYPE=SCCRQ PROTO_VER(1.0) FRAME_CAP(A) BEARER_CAP(A) MAX_CHAN(0) FIRM_REV(2600) HOSTNAME() VENDOR(Microsoft Windows NT) (DF)
+[in,pcn1]
+4500 00c4 5e12 4000 8006 38cc c0a8 7101
+c0a8 7103 05e7 06bb abf0 4aa6 a564 68db
+5018 faf0 e2a0 0000 009c 0001 1a2b 3c4d
+0001 0000 0100 0000 0000 0001 0000 0001
+0000 0a28 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 4d69 6372 6f73 6f66 7420 5769
+6e64 6f77 7320 4e54 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000
+
+# 23:18:36.260235 192.168.113.3.1723 > 192.168.113.1.1511: P 1:157(156) ack 157 win 33580: pptp CTRL_MSGTYPE=SCCRP PROTO_VER(1.0) RESULT_CODE(1) ERR_CODE(0) FRAME_CAP() BEARER_CAP() MAX_CHAN(1) FIRM_REV(1) HOSTNAME(local) VENDOR(linux) (DF)
+[out,pcn1]
+4500 00c4 69a7 4000 4006 6d37 c0a8 7103
+c0a8 7101 06bb 05e7 a564 68db abf0 4b42
+5018 832c cecf 0000 009c 0001 1a2b 3c4d
+0002 0000 0100 0100 0000 0000 0000 0000
+0001 0001 6c6f 6361 6c00 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 6c69 6e75 7800 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000
+
+# 23:18:36.260252 192.168.113.1.1511 > 192.168.113.3.1723: P 157:325(168) ack 157 win 64084: pptp CTRL_MSGTYPE=OCRQ CALL_ID(16384) CALL_SER_NUM(4913) MIN_BPS(300) MAX_BPS(100000000) BEARER_TYPE(Any) FRAME_TYPE(E) RECV_WIN(64) PROC_DELAY(0) PHONE_NO_LEN(0) PHONE_NO() SUB_ADDR() (DF)
+[in,pcn1]
+4500 00d0 5e13 4000 8006 38bf c0a8 7101
+c0a8 7103 05e7 06bb abf0 4b42 a564 6977
+5018 fa54 ac07 0000 00a8 0001 1a2b 3c4d
+0007 0000 4000 1331 0000 012c 05f5 e100
+0000 0003 0000 0003 0040 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+
+# 23:18:36.272856 192.168.113.3.1723 > 192.168.113.1.1511: P 157:189(32) ack 325 win 33580: pptp CTRL_MSGTYPE=OCRP CALL_ID(0) PEER_CALL_ID(16384) RESULT_CODE(1) ERR_CODE(0) CAUSE_CODE(0) CONN_SPEED(100000000) RECV_WIN(64) PROC_DELAY(0) PHY_CHAN_ID(0) (DF)
+[out,pcn1]
+4500 0048 69a8 4000 4006 6db2 c0a8 7103
+c0a8 7101 06bb 05e7 a564 6977 abf0 4bea
+5018 832c 36fa 0000 0020 0001 1a2b 3c4d
+0008 0000 0000 4000 0100 0000 05f5 e100
+0040 0000 0000 0000
+
+# 23:18:36.321819 192.168.113.1.1511 > 192.168.113.3.1723: P 325:349(24) ack 189 win 64052: pptp CTRL_MSGTYPE=SLI PEER_CALL_ID(0) SEND_ACCM(0xffffffff) RECV_ACCM(0xffffffff) (DF)
+[in,pcn1]
+4500 0040 5e14 4000 8006 394e c0a8 7101
+c0a8 7103 05e7 06bb abf0 4bea a564 6997
+5018 fa34 e810 0000 0018 0001 1a2b 3c4d
+000f 0000 0000 0000 ffff ffff ffff ffff
+
+# 23:18:36.349759 192.168.113.1 > 192.168.113.3: gre [KSv1] ID:0000 S:0 ppp: LCP 25: Conf-Req(0), MRU=1400, Magic-Num=577f7c5b, PFC, ACFC, Call-Back CBCP
+[in,pcn1]
+4500 0039 5e15 0000 802f 792b c0a8 7101
+c0a8 7103 3001 880b 0019 0000 0000 0000
+ff03 c021 0100 0015 0104 0578 0506 577f
+7c5b 0702 0802 0d03 06
+
+# 23:18:36.389970 192.168.113.3 > 192.168.113.1: gre [KAv1] ID:4000 A:4294967295 [|gre]
+[out,pcn1]
+4500 0020 69a9 0000 ff2f eeaf c0a8 7103
+c0a8 7101 2081 880b 0000 4000 ffff ffff
+
+# 23:18:36.518426 192.168.113.3.1723 > 192.168.113.1.1511: . ack 349 win 33580 (DF)
+[out,pcn1]
+4500 0028 69aa 4000 4006 6dd0 c0a8 7103
+c0a8 7101 06bb 05e7 a564 6997 abf0 4c02
+5010 832c b5c1 0000
+
+# 23:18:36.555363 192.168.113.3 > 192.168.113.1: gre [KSv1] ID:4000 S:0 ppp: LCP 24: Conf-Req(1), ACCM=00000000, Magic-Num=22d90cfa, PFC, ACFC
+[out,pcn1]
+4500 0038 69ab 0000 ff2f ee95 c0a8 7103
+c0a8 7101 3001 880b 0018 4000 0000 0000
+ff03 c021 0101 0014 0206 0000 0000 0506
+22d9 0cfa 0702 0802
+
+# 23:18:36.556030 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:1 A:0 ppp: LCP 11: Conf-Rej(0), Call-Back CBCP
+[out,pcn1]
+4500 002f 69ac 0000 ff2f ee9d c0a8 7103
+c0a8 7101 3081 880b 000b 4000 0000 0001
+0000 0000 ff03 c021 0400 0007 0d03 06
+
+# 23:18:36.557166 192.168.113.1 > 192.168.113.3: gre [KSAv1] ID:0000 S:1 A:1 ppp: LCP 24: Conf-Ack(1), ACCM=00000000, Magic-Num=22d90cfa, PFC, ACFC
+[in,pcn1]
+4500 003c 5e16 0000 802f 7927 c0a8 7101
+c0a8 7103 3081 880b 0018 0000 0000 0001
+0000 0001 ff03 c021 0201 0014 0206 0000
+0000 0506 22d9 0cfa 0702 0802
+
+# 23:18:36.557764 192.168.113.1 > 192.168.113.3: gre [KSv1] ID:0000 S:2 ppp: LCP 22: Conf-Req(1), MRU=1400, Magic-Num=577f7c5b, PFC, ACFC
+[in,pcn1]
+4500 0036 5e17 0000 802f 792c c0a8 7101
+c0a8 7103 3001 880b 0016 0000 0000 0002
+ff03 c021 0101 0012 0104 0578 0506 577f
+7c5b 0702 0802
+
+# 23:18:36.564658 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:2 A:2 ppp: LCP 22: Conf-Ack(1), MRU=1400, Magic-Num=577f7c5b, PFC, ACFC
+[out,pcn1]
+4500 003a 69ad 0000 ff2f ee91 c0a8 7103
+c0a8 7101 3081 880b 0016 4000 0000 0002
+0000 0002 ff03 c021 0201 0012 0104 0578
+0506 577f 7c5b 0702 0802
+
+# 23:18:36.564803 192.168.113.3 > 192.168.113.1: gre [KSv1] ID:4000 S:3 ppp: IPCP 18: Conf-Req(1), IP-Addr=192.168.0.1, IP-Comp VJ-Comp
+[out,pcn1]
+4500 0032 69ae 0000 ff2f ee98 c0a8 7103
+c0a8 7101 3001 880b 0012 4000 0000 0003
+8021 0101 0010 0306 c0a8 0001 0206 002d
+0f01
+
+# 23:18:36.570395 192.168.113.1.1511 > 192.168.113.3.1723: P 349:373(24) ack 189 win 64052: pptp CTRL_MSGTYPE=SLI PEER_CALL_ID(0) SEND_ACCM(0x00000000) RECV_ACCM(0xffffffff) (DF)
+[in,pcn1]
+4500 0040 5e18 4000 8006 394a c0a8 7101
+c0a8 7103 05e7 06bb abf0 4c02 a564 6997
+5018 fa34 e7f8 0000 0018 0001 1a2b 3c4d
+000f 0000 0000 0000 0000 0000 ffff ffff
+
+# 23:18:36.573307 192.168.113.1 > 192.168.113.3: gre [KSAv1] ID:0000 S:3 A:3 ppp: LCP 20: Ident(2), Magic-Num=577f7c5b
+[in,pcn1]
+4500 0038 5e19 0000 802f 7928 c0a8 7101
+c0a8 7103 3081 880b 0014 0000 0000 0003
+0000 0003 c021 0c02 0012 577f 7c5b 4d53
+5241 5356 352e 3130
+
+# 23:18:36.573856 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:4 A:3 ppp: LCP 26: Code-Rej(2)
+[out,pcn1]
+4500 003e 69af 0000 ff2f ee8b c0a8 7103
+c0a8 7101 3081 880b 001a 4000 0000 0004
+0000 0003 ff03 c021 0702 0016 0c02 0012
+577f 7c5b 4d53 5241 5356 352e 3130
+
+# 23:18:36.584936 192.168.113.1 > 192.168.113.3: gre [KSAv1] ID:0000 S:4 A:4 ppp: LCP 26: Ident(3), Magic-Num=577f7c5b
+[in,pcn1]
+4500 003e 5e1a 0000 802f 7921 c0a8 7101
+c0a8 7103 3081 880b 001a 0000 0000 0004
+0000 0004 c021 0c03 0018 577f 7c5b 4d53
+5241 532d 302d 434c 4159 4d4f 4f52
+
+# 23:18:36.585562 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:5 A:4 ppp: LCP 32: Code-Rej(3)
+[out,pcn1]
+4500 0044 69b0 0000 ff2f ee84 c0a8 7103
+c0a8 7101 3081 880b 0020 4000 0000 0005
+0000 0004 ff03 c021 0703 001c 0c03 0018
+577f 7c5b 4d53 5241 532d 302d 434c 4159
+4d4f 4f52
+
+# 23:18:36.588721 192.168.113.1 > 192.168.113.3: gre [KSAv1] ID:0000 S:5 A:5 ppp: CCP 12: Conf-Req(4), MPPC
+[in,pcn1]
+4500 0030 5e1b 0000 802f 792e c0a8 7101
+c0a8 7103 3081 880b 000c 0000 0000 0005
+0000 0005 80fd 0104 000a 1206 0100 0001
+
+# 23:18:36.589445 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:6 A:5 ppp: CCP 6: Conf-Req(1)
+[out,pcn1]
+4500 002a 69b1 0000 ff2f ee9d c0a8 7103
+c0a8 7101 3081 880b 0006 4000 0000 0006
+0000 0005 80fd 0101 0004
+
+# 23:18:36.589540 192.168.113.3 > 192.168.113.1: gre [KSv1] ID:4000 S:7 ppp: CCP 12: Conf-Rej(4), MPPC
+[out,pcn1]
+4500 002c 69b2 0000 ff2f ee9a c0a8 7103
+c0a8 7101 3001 880b 000c 4000 0000 0007
+80fd 0404 000a 1206 0100 0001
+
+# 23:18:36.590023 192.168.113.1 > 192.168.113.3: gre [KSAv1] ID:0000 S:6 A:7 ppp: IPCP 36: Conf-Req(5), IP-Addr=0.0.0.0, Pri-DNS=0.0.0.0, Pri-NBNS=0.0.0.0, Sec-DNS=0.0.0.0, Sec-NBNS=0.0.0.0
+[in,pcn1]
+4500 0048 5e1c 0000 802f 7915 c0a8 7101
+c0a8 7103 3081 880b 0024 0000 0000 0006
+0000 0007 8021 0105 0022 0306 0000 0000
+8106 0000 0000 8206 0000 0000 8306 0000
+0000 8406 0000 0000
+
+# 23:18:36.590489 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:8 A:6 ppp: IPCP 30: Conf-Rej(5), Pri-DNS=0.0.0.0, Pri-NBNS=0.0.0.0, Sec-DNS=0.0.0.0, Sec-NBNS=0.0.0.0
+[out,pcn1]
+4500 0042 69b3 0000 ff2f ee83 c0a8 7103
+c0a8 7101 3081 880b 001e 4000 0000 0008
+0000 0006 8021 0405 001c 8106 0000 0000
+8206 0000 0000 8306 0000 0000 8406 0000
+0000
+
+# 23:18:36.591003 192.168.113.1 > 192.168.113.3: gre [KSAv1] ID:0000 S:7 A:8 ppp: IPCP 12: Conf-Rej(1), IP-Comp VJ-Comp
+[in,pcn1]
+4500 0030 5e1d 0000 802f 792c c0a8 7101
+c0a8 7103 3081 880b 000c 0000 0000 0007
+0000 0008 8021 0401 000a 0206 002d 0f01
+
+# 23:18:36.593819 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:9 A:7 ppp: IPCP 12: Conf-Req(2), IP-Addr=192.168.0.1
+[out,pcn1]
+4500 0030 69b4 0000 ff2f ee94 c0a8 7103
+c0a8 7101 3081 880b 000c 4000 0000 0009
+0000 0007 8021 0102 000a 0306 c0a8 0001
+
+# 23:18:36.594840 192.168.113.1 > 192.168.113.3: gre [KSAv1] ID:0000 S:8 A:9 ppp: CCP 6: Conf-Ack(1)
+[in,pcn1]
+4500 002a 5e1e 0000 802f 7933 c0a8 7101
+c0a8 7103 3081 880b 0006 0000 0000 0008
+0000 0009 80fd 0201 0004 0000 0000
+
+# 23:18:36.595525 192.168.113.1 > 192.168.113.3: gre [KSv1] ID:0000 S:9 ppp: CCP 18: Term-Req(6)
+[in,pcn1]
+4500 0032 5e1f 0000 802f 792a c0a8 7101
+c0a8 7103 3001 880b 0012 0000 0000 0009
+80fd 0506 0010 577f 7c5b 003c cd74 0000
+02dc
+
+# 23:18:36.595937 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:10 A:9 ppp: CCP 6: Term-Ack(6)
+[out,pcn1]
+4500 002a 69b5 0000 ff2f ee99 c0a8 7103
+c0a8 7101 3081 880b 0006 4000 0000 000a
+0000 0009 80fd 0606 0004
+
diff --git a/contrib/ipfilter/test/input/ni14 b/contrib/ipfilter/test/input/ni14
new file mode 100644
index 0000000..00f0290
--- /dev/null
+++ b/contrib/ipfilter/test/input/ni14
@@ -0,0 +1,235 @@
+# 23:18:36.130424 192.168.113.1.1511 > 192.168.113.3.1723: S 2884651685:2884651685(0) win 64240 <mss 1460,nop,nop,sackOK> (DF)
+[in,pcn1=192.168.113.3]
+4500 0030 5e11 4000 8006 3961 c0a8 7101
+c0a8 7103 05e7 06bb abf0 4aa5 0000 0000
+7002 faf0 21a1 0000 0204 05b4 0101 0402
+
+# 23:18:36.130778 192.168.113.3.1723 > 192.168.113.1.1511: S 2774821082:2774821082(0) ack 2884651686 win 32768 <mss 1460> (DF)
+[out,pcn1]
+4500 002c 69a6 4000 4006 207b 7f00 0001
+c0a8 7101 06bb 05e7 a564 68da abf0 4aa6
+6012 8000 55f3 0000 0204 05b4
+
+# 23:18:36.130784 192.168.113.1.1511 > 192.168.113.3.1723: P 1:157(156) ack 1 win 64240: pptp CTRL_MSGTYPE=SCCRQ PROTO_VER(1.0) FRAME_CAP(A) BEARER_CAP(A) MAX_CHAN(0) FIRM_REV(2600) HOSTNAME() VENDOR(Microsoft Windows NT) (DF)
+[in,pcn1]
+4500 00c4 5e12 4000 8006 38cc c0a8 7101
+c0a8 7103 05e7 06bb abf0 4aa6 a564 68db
+5018 faf0 e2a0 0000 009c 0001 1a2b 3c4d
+0001 0000 0100 0000 0000 0001 0000 0001
+0000 0a28 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 4d69 6372 6f73 6f66 7420 5769
+6e64 6f77 7320 4e54 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000
+
+# 23:18:36.260235 192.168.113.3.1723 > 192.168.113.1.1511: P 1:157(156) ack 157 win 33580: pptp CTRL_MSGTYPE=SCCRP PROTO_VER(1.0) RESULT_CODE(1) ERR_CODE(0) FRAME_CAP() BEARER_CAP() MAX_CHAN(1) FIRM_REV(1) HOSTNAME(local) VENDOR(linux) (DF)
+[out,pcn1]
+4500 00c4 69a7 4000 4006 1fe2 7f00 0001
+c0a8 7101 06bb 05e7 a564 68db abf0 4b42
+5018 832c 817a 0000 009c 0001 1a2b 3c4d
+0002 0000 0100 0100 0000 0000 0000 0000
+0001 0001 6c6f 6361 6c00 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 6c69 6e75 7800 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000
+
+# 23:18:36.260252 192.168.113.1.1511 > 192.168.113.3.1723: P 157:325(168) ack 157 win 64084: pptp CTRL_MSGTYPE=OCRQ CALL_ID(16384) CALL_SER_NUM(4913) MIN_BPS(300) MAX_BPS(100000000) BEARER_TYPE(Any) FRAME_TYPE(E) RECV_WIN(64) PROC_DELAY(0) PHONE_NO_LEN(0) PHONE_NO() SUB_ADDR() (DF)
+[in,pcn1]
+4500 00d0 5e13 4000 8006 38bf c0a8 7101
+c0a8 7103 05e7 06bb abf0 4b42 a564 6977
+5018 fa54 ac07 0000 00a8 0001 1a2b 3c4d
+0007 0000 4000 1331 0000 012c 05f5 e100
+0000 0003 0000 0003 0040 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+
+# 23:18:36.272856 192.168.113.3.1723 > 192.168.113.1.1511: P 157:189(32) ack 325 win 33580: pptp CTRL_MSGTYPE=OCRP CALL_ID(0) PEER_CALL_ID(16384) RESULT_CODE(1) ERR_CODE(0) CAUSE_CODE(0) CONN_SPEED(100000000) RECV_WIN(64) PROC_DELAY(0) PHY_CHAN_ID(0) (DF)
+[out,pcn1]
+4500 0048 69a8 4000 4006 205d 7f00 0001
+c0a8 7101 06bb 05e7 a564 6977 abf0 4bea
+5018 832c e9a4 0000 0020 0001 1a2b 3c4d
+0008 0000 0000 4000 0100 0000 05f5 e100
+0040 0000 0000 0000
+
+# 23:18:36.321819 192.168.113.1.1511 > 192.168.113.3.1723: P 325:349(24) ack 189 win 64052: pptp CTRL_MSGTYPE=SLI PEER_CALL_ID(0) SEND_ACCM(0xffffffff) RECV_ACCM(0xffffffff) (DF)
+[in,pcn1]
+4500 0040 5e14 4000 8006 394e c0a8 7101
+c0a8 7103 05e7 06bb abf0 4bea a564 6997
+5018 fa34 e810 0000 0018 0001 1a2b 3c4d
+000f 0000 0000 0000 ffff ffff ffff ffff
+
+# 23:18:36.349759 192.168.113.1 > 192.168.113.3: gre [KSv1] ID:0000 S:0 ppp: LCP 25: Conf-Req(0), MRU=1400, Magic-Num=577f7c5b, PFC, ACFC, Call-Back CBCP
+[in,pcn1]
+4500 0039 5e15 0000 802f 792b c0a8 7101
+c0a8 7103 3001 880b 0019 0000 0000 0000
+ff03 c021 0100 0015 0104 0578 0506 577f
+7c5b 0702 0802 0d03 06
+
+# 23:18:36.389970 192.168.113.3 > 192.168.113.1: gre [KAv1] ID:4000 A:4294967295 [|gre]
+[out,pcn1]
+4500 0020 69a9 0000 ff2f a15a 7f00 0001
+c0a8 7101 2081 880b 0000 4000 ffff ffff
+
+# 23:18:36.518426 192.168.113.3.1723 > 192.168.113.1.1511: . ack 349 win 33580 (DF)
+[out,pcn1]
+4500 0028 69aa 4000 4006 207b 7f00 0001
+c0a8 7101 06bb 05e7 a564 6997 abf0 4c02
+5010 832c 686c 0000
+
+# 23:18:36.555363 192.168.113.3 > 192.168.113.1: gre [KSv1] ID:4000 S:0 ppp: LCP 24: Conf-Req(1), ACCM=00000000, Magic-Num=22d90cfa, PFC, ACFC
+[out,pcn1]
+4500 0038 69ab 0000 ff2f a140 7f00 0001
+c0a8 7101 3001 880b 0018 4000 0000 0000
+ff03 c021 0101 0014 0206 0000 0000 0506
+22d9 0cfa 0702 0802
+
+# 23:18:36.556030 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:1 A:0 ppp: LCP 11: Conf-Rej(0), Call-Back CBCP
+[out,pcn1]
+4500 002f 69ac 0000 ff2f a148 7f00 0001
+c0a8 7101 3081 880b 000b 4000 0000 0001
+0000 0000 ff03 c021 0400 0007 0d03 06
+
+# 23:18:36.557166 192.168.113.1 > 192.168.113.3: gre [KSAv1] ID:0000 S:1 A:1 ppp: LCP 24: Conf-Ack(1), ACCM=00000000, Magic-Num=22d90cfa, PFC, ACFC
+[in,pcn1]
+4500 003c 5e16 0000 802f 7927 c0a8 7101
+c0a8 7103 3081 880b 0018 0000 0000 0001
+0000 0001 ff03 c021 0201 0014 0206 0000
+0000 0506 22d9 0cfa 0702 0802
+
+# 23:18:36.557764 192.168.113.1 > 192.168.113.3: gre [KSv1] ID:0000 S:2 ppp: LCP 22: Conf-Req(1), MRU=1400, Magic-Num=577f7c5b, PFC, ACFC
+[in,pcn1]
+4500 0036 5e17 0000 802f 792c c0a8 7101
+c0a8 7103 3001 880b 0016 0000 0000 0002
+ff03 c021 0101 0012 0104 0578 0506 577f
+7c5b 0702 0802
+
+# 23:18:36.564658 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:2 A:2 ppp: LCP 22: Conf-Ack(1), MRU=1400, Magic-Num=577f7c5b, PFC, ACFC
+[out,pcn1]
+4500 003a 69ad 0000 ff2f a13c 7f00 0001
+c0a8 7101 3081 880b 0016 4000 0000 0002
+0000 0002 ff03 c021 0201 0012 0104 0578
+0506 577f 7c5b 0702 0802
+
+# 23:18:36.564803 192.168.113.3 > 192.168.113.1: gre [KSv1] ID:4000 S:3 ppp: IPCP 18: Conf-Req(1), IP-Addr=192.168.0.1, IP-Comp VJ-Comp
+[out,pcn1]
+4500 0032 69ae 0000 ff2f ee98 7f00 0001
+c0a8 7101 3001 880b 0012 4000 0000 0003
+8021 0101 0010 0306 c0a8 0001 0206 002d
+0f01
+
+# 23:18:36.570395 192.168.113.1.1511 > 192.168.113.3.1723: P 349:373(24) ack 189 win 64052: pptp CTRL_MSGTYPE=SLI PEER_CALL_ID(0) SEND_ACCM(0x00000000) RECV_ACCM(0xffffffff) (DF)
+[in,pcn1]
+4500 0040 5e18 4000 8006 394a c0a8 7101
+c0a8 7103 05e7 06bb abf0 4c02 a564 6997
+5018 fa34 e7f8 0000 0018 0001 1a2b 3c4d
+000f 0000 0000 0000 0000 0000 ffff ffff
+
+# 23:18:36.573307 192.168.113.1 > 192.168.113.3: gre [KSAv1] ID:0000 S:3 A:3 ppp: LCP 20: Ident(2), Magic-Num=577f7c5b
+[in,pcn1]
+4500 0038 5e19 0000 802f 7928 c0a8 7101
+c0a8 7103 3081 880b 0014 0000 0000 0003
+0000 0003 c021 0c02 0012 577f 7c5b 4d53
+5241 5356 352e 3130
+
+# 23:18:36.573856 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:4 A:3 ppp: LCP 26: Code-Rej(2)
+[out,pcn1]
+4500 003e 69af 0000 ff2f ee8b 7f00 0001
+c0a8 7101 3081 880b 001a 4000 0000 0004
+0000 0003 ff03 c021 0702 0016 0c02 0012
+577f 7c5b 4d53 5241 5356 352e 3130
+
+# 23:18:36.584936 192.168.113.1 > 192.168.113.3: gre [KSAv1] ID:0000 S:4 A:4 ppp: LCP 26: Ident(3), Magic-Num=577f7c5b
+[in,pcn1]
+4500 003e 5e1a 0000 802f 7921 c0a8 7101
+c0a8 7103 3081 880b 001a 0000 0000 0004
+0000 0004 c021 0c03 0018 577f 7c5b 4d53
+5241 532d 302d 434c 4159 4d4f 4f52
+
+# 23:18:36.585562 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:5 A:4 ppp: LCP 32: Code-Rej(3)
+[out,pcn1]
+4500 0044 69b0 0000 ff2f ee84 7f00 0001
+c0a8 7101 3081 880b 0020 4000 0000 0005
+0000 0004 ff03 c021 0703 001c 0c03 0018
+577f 7c5b 4d53 5241 532d 302d 434c 4159
+4d4f 4f52
+
+# 23:18:36.588721 192.168.113.1 > 192.168.113.3: gre [KSAv1] ID:0000 S:5 A:5 ppp: CCP 12: Conf-Req(4), MPPC
+[in,pcn1]
+4500 0030 5e1b 0000 802f 792e c0a8 7101
+c0a8 7103 3081 880b 000c 0000 0000 0005
+0000 0005 80fd 0104 000a 1206 0100 0001
+
+# 23:18:36.589445 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:6 A:5 ppp: CCP 6: Conf-Req(1)
+[out,pcn1]
+4500 002a 69b1 0000 ff2f ee9d 7f00 0001
+c0a8 7101 3081 880b 0006 4000 0000 0006
+0000 0005 80fd 0101 0004
+
+# 23:18:36.589540 192.168.113.3 > 192.168.113.1: gre [KSv1] ID:4000 S:7 ppp: CCP 12: Conf-Rej(4), MPPC
+[out,pcn1]
+4500 002c 69b2 0000 ff2f ee9a 7f00 0001
+c0a8 7101 3001 880b 000c 4000 0000 0007
+80fd 0404 000a 1206 0100 0001
+
+# 23:18:36.590023 192.168.113.1 > 192.168.113.3: gre [KSAv1] ID:0000 S:6 A:7 ppp: IPCP 36: Conf-Req(5), IP-Addr=0.0.0.0, Pri-DNS=0.0.0.0, Pri-NBNS=0.0.0.0, Sec-DNS=0.0.0.0, Sec-NBNS=0.0.0.0
+[in,pcn1]
+4500 0048 5e1c 0000 802f 7915 c0a8 7101
+c0a8 7103 3081 880b 0024 0000 0000 0006
+0000 0007 8021 0105 0022 0306 0000 0000
+8106 0000 0000 8206 0000 0000 8306 0000
+0000 8406 0000 0000
+
+# 23:18:36.590489 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:8 A:6 ppp: IPCP 30: Conf-Rej(5), Pri-DNS=0.0.0.0, Pri-NBNS=0.0.0.0, Sec-DNS=0.0.0.0, Sec-NBNS=0.0.0.0
+[out,pcn1]
+4500 0042 69b3 0000 ff2f ee83 7f00 0001
+c0a8 7101 3081 880b 001e 4000 0000 0008
+0000 0006 8021 0405 001c 8106 0000 0000
+8206 0000 0000 8306 0000 0000 8406 0000
+0000
+
+# 23:18:36.591003 192.168.113.1 > 192.168.113.3: gre [KSAv1] ID:0000 S:7 A:8 ppp: IPCP 12: Conf-Rej(1), IP-Comp VJ-Comp
+[in,pcn1]
+4500 0030 5e1d 0000 802f 792c c0a8 7101
+c0a8 7103 3081 880b 000c 0000 0000 0007
+0000 0008 8021 0401 000a 0206 002d 0f01
+
+# 23:18:36.593819 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:9 A:7 ppp: IPCP 12: Conf-Req(2), IP-Addr=192.168.0.1
+[out,pcn1]
+4500 0030 69b4 0000 ff2f ee94 7f00 0001
+c0a8 7101 3081 880b 000c 4000 0000 0009
+0000 0007 8021 0102 000a 0306 c0a8 0001
+
+# 23:18:36.594840 192.168.113.1 > 192.168.113.3: gre [KSAv1] ID:0000 S:8 A:9 ppp: CCP 6: Conf-Ack(1)
+[in,pcn1]
+4500 002a 5e1e 0000 802f 7931 c0a8 7101
+c0a8 7103 3081 880b 0006 0000 0000 0008
+0000 0009 80fd 0201 0004 0000 0000
+
+# 23:18:36.595525 192.168.113.1 > 192.168.113.3: gre [KSv1] ID:0000 S:9 ppp: CCP 18: Term-Req(6)
+[in,pcn1]
+4500 0032 5e1f 0000 802f 7928 c0a8 7101
+c0a8 7103 3001 880b 0012 0000 0000 0009
+80fd 0506 0010 577f 7c5b 003c cd74 0000
+02dc
+
+# 23:18:36.595937 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:10 A:9 ppp: CCP 6: Term-Ack(6)
+[out,pcn1]
+4500 002a 69b5 0000 ff2f ee99 7f00 0001
+c0a8 7101 3081 880b 0006 4000 0000 000a
+0000 0009 80fd 0606 0004
+
diff --git a/contrib/ipfilter/test/input/ni15 b/contrib/ipfilter/test/input/ni15
new file mode 100644
index 0000000..fb445bb
--- /dev/null
+++ b/contrib/ipfilter/test/input/ni15
@@ -0,0 +1,235 @@
+# 23:18:36.130424 192.168.113.1.1511 > 192.168.113.3.1723: S 2884651685:2884651685(0) win 64240 <mss 1460,nop,nop,sackOK> (DF)
+[out,pcn1=192.168.113.3]
+4500 0030 5e11 4000 8006 3961 c0a8 7101
+c0a8 7103 05e7 06bb abf0 4aa5 0000 0000
+7002 faf0 21a1 0000 0204 05b4 0101 0402
+
+# 23:18:36.130778 192.168.113.3.1723 > 192.168.113.1.1511: S 2774821082:2774821082(0) ack 2884651686 win 32768 <mss 1460> (DF)
+[in,pcn1]
+4500 002c 69a6 4000 4006 6dd0 c0a8 7103
+c0a8 7101 06bb 05e7 a564 68da abf0 4aa6
+6012 8000 a348 0000 0204 05b4
+
+# 23:18:36.130784 192.168.113.1.1511 > 192.168.113.3.1723: P 1:157(156) ack 1 win 64240: pptp CTRL_MSGTYPE=SCCRQ PROTO_VER(1.0) FRAME_CAP(A) BEARER_CAP(A) MAX_CHAN(0) FIRM_REV(2600) HOSTNAME() VENDOR(Microsoft Windows NT) (DF)
+[out,pcn1]
+4500 00c4 5e12 4000 8006 38cc c0a8 7101
+c0a8 7103 05e7 06bb abf0 4aa6 a564 68db
+5018 faf0 e2a0 0000 009c 0001 1a2b 3c4d
+0001 0000 0100 0000 0000 0001 0000 0001
+0000 0a28 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 4d69 6372 6f73 6f66 7420 5769
+6e64 6f77 7320 4e54 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000
+
+# 23:18:36.260235 192.168.113.3.1723 > 192.168.113.1.1511: P 1:157(156) ack 157 win 33580: pptp CTRL_MSGTYPE=SCCRP PROTO_VER(1.0) RESULT_CODE(1) ERR_CODE(0) FRAME_CAP() BEARER_CAP() MAX_CHAN(1) FIRM_REV(1) HOSTNAME(local) VENDOR(linux) (DF)
+[in,pcn1]
+4500 00c4 69a7 4000 4006 6d37 c0a8 7103
+c0a8 7101 06bb 05e7 a564 68db abf0 4b42
+5018 832c cecf 0000 009c 0001 1a2b 3c4d
+0002 0000 0100 0100 0000 0000 0000 0000
+0001 0001 6c6f 6361 6c00 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 6c69 6e75 7800 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000
+
+# 23:18:36.260252 192.168.113.1.1511 > 192.168.113.3.1723: P 157:325(168) ack 157 win 64084: pptp CTRL_MSGTYPE=OCRQ CALL_ID(16384) CALL_SER_NUM(4913) MIN_BPS(300) MAX_BPS(100000000) BEARER_TYPE(Any) FRAME_TYPE(E) RECV_WIN(64) PROC_DELAY(0) PHONE_NO_LEN(0) PHONE_NO() SUB_ADDR() (DF)
+[out,pcn1]
+4500 00d0 5e13 4000 8006 38bf c0a8 7101
+c0a8 7103 05e7 06bb abf0 4b42 a564 6977
+5018 fa54 ac07 0000 00a8 0001 1a2b 3c4d
+0007 0000 4000 1331 0000 012c 05f5 e100
+0000 0003 0000 0003 0040 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+
+# 23:18:36.272856 192.168.113.3.1723 > 192.168.113.1.1511: P 157:189(32) ack 325 win 33580: pptp CTRL_MSGTYPE=OCRP CALL_ID(0) PEER_CALL_ID(16384) RESULT_CODE(1) ERR_CODE(0) CAUSE_CODE(0) CONN_SPEED(100000000) RECV_WIN(64) PROC_DELAY(0) PHY_CHAN_ID(0) (DF)
+[in,pcn1]
+4500 0048 69a8 4000 4006 6db2 c0a8 7103
+c0a8 7101 06bb 05e7 a564 6977 abf0 4bea
+5018 832c 36fa 0000 0020 0001 1a2b 3c4d
+0008 0000 0000 4000 0100 0000 05f5 e100
+0040 0000 0000 0000
+
+# 23:18:36.321819 192.168.113.1.1511 > 192.168.113.3.1723: P 325:349(24) ack 189 win 64052: pptp CTRL_MSGTYPE=SLI PEER_CALL_ID(0) SEND_ACCM(0xffffffff) RECV_ACCM(0xffffffff) (DF)
+[out,pcn1]
+4500 0040 5e14 4000 8006 394e c0a8 7101
+c0a8 7103 05e7 06bb abf0 4bea a564 6997
+5018 fa34 e810 0000 0018 0001 1a2b 3c4d
+000f 0000 0000 0000 ffff ffff ffff ffff
+
+# 23:18:36.349759 192.168.113.1 > 192.168.113.3: gre [KSv1] ID:0000 S:0 ppp: LCP 25: Conf-Req(0), MRU=1400, Magic-Num=577f7c5b, PFC, ACFC, Call-Back CBCP
+[out,pcn1]
+4500 0039 5e15 0000 802f 792b c0a8 7101
+c0a8 7103 3001 880b 0019 0000 0000 0000
+ff03 c021 0100 0015 0104 0578 0506 577f
+7c5b 0702 0802 0d03 06
+
+# 23:18:36.389970 192.168.113.3 > 192.168.113.1: gre [KAv1] ID:4000 A:4294967295 [|gre]
+[in,pcn1]
+4500 0020 69a9 0000 ff2f eeaf c0a8 7103
+c0a8 7101 2081 880b 0000 4000 ffff ffff
+
+# 23:18:36.518426 192.168.113.3.1723 > 192.168.113.1.1511: . ack 349 win 33580 (DF)
+[in,pcn1]
+4500 0028 69aa 4000 4006 6dd0 c0a8 7103
+c0a8 7101 06bb 05e7 a564 6997 abf0 4c02
+5010 832c b5c1 0000
+
+# 23:18:36.555363 192.168.113.3 > 192.168.113.1: gre [KSv1] ID:4000 S:0 ppp: LCP 24: Conf-Req(1), ACCM=00000000, Magic-Num=22d90cfa, PFC, ACFC
+[in,pcn1]
+4500 0038 69ab 0000 ff2f ee95 c0a8 7103
+c0a8 7101 3001 880b 0018 4000 0000 0000
+ff03 c021 0101 0014 0206 0000 0000 0506
+22d9 0cfa 0702 0802
+
+# 23:18:36.556030 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:1 A:0 ppp: LCP 11: Conf-Rej(0), Call-Back CBCP
+[in,pcn1]
+4500 002f 69ac 0000 ff2f ee9d c0a8 7103
+c0a8 7101 3081 880b 000b 4000 0000 0001
+0000 0000 ff03 c021 0400 0007 0d03 06
+
+# 23:18:36.557166 192.168.113.1 > 192.168.113.3: gre [KSAv1] ID:0000 S:1 A:1 ppp: LCP 24: Conf-Ack(1), ACCM=00000000, Magic-Num=22d90cfa, PFC, ACFC
+[out,pcn1]
+4500 003c 5e16 0000 802f 7927 c0a8 7101
+c0a8 7103 3081 880b 0018 0000 0000 0001
+0000 0001 ff03 c021 0201 0014 0206 0000
+0000 0506 22d9 0cfa 0702 0802
+
+# 23:18:36.557764 192.168.113.1 > 192.168.113.3: gre [KSv1] ID:0000 S:2 ppp: LCP 22: Conf-Req(1), MRU=1400, Magic-Num=577f7c5b, PFC, ACFC
+[out,pcn1]
+4500 0036 5e17 0000 802f 792c c0a8 7101
+c0a8 7103 3001 880b 0016 0000 0000 0002
+ff03 c021 0101 0012 0104 0578 0506 577f
+7c5b 0702 0802
+
+# 23:18:36.564658 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:2 A:2 ppp: LCP 22: Conf-Ack(1), MRU=1400, Magic-Num=577f7c5b, PFC, ACFC
+[in,pcn1]
+4500 003a 69ad 0000 ff2f ee91 c0a8 7103
+c0a8 7101 3081 880b 0016 4000 0000 0002
+0000 0002 ff03 c021 0201 0012 0104 0578
+0506 577f 7c5b 0702 0802
+
+# 23:18:36.564803 192.168.113.3 > 192.168.113.1: gre [KSv1] ID:4000 S:3 ppp: IPCP 18: Conf-Req(1), IP-Addr=192.168.0.1, IP-Comp VJ-Comp
+[in,pcn1]
+4500 0032 69ae 0000 ff2f ee98 c0a8 7103
+c0a8 7101 3001 880b 0012 4000 0000 0003
+8021 0101 0010 0306 c0a8 0001 0206 002d
+0f01
+
+# 23:18:36.570395 192.168.113.1.1511 > 192.168.113.3.1723: P 349:373(24) ack 189 win 64052: pptp CTRL_MSGTYPE=SLI PEER_CALL_ID(0) SEND_ACCM(0x00000000) RECV_ACCM(0xffffffff) (DF)
+[out,pcn1]
+4500 0040 5e18 4000 8006 394a c0a8 7101
+c0a8 7103 05e7 06bb abf0 4c02 a564 6997
+5018 fa34 e7f8 0000 0018 0001 1a2b 3c4d
+000f 0000 0000 0000 0000 0000 ffff ffff
+
+# 23:18:36.573307 192.168.113.1 > 192.168.113.3: gre [KSAv1] ID:0000 S:3 A:3 ppp: LCP 20: Ident(2), Magic-Num=577f7c5b
+[out,pcn1]
+4500 0038 5e19 0000 802f 7928 c0a8 7101
+c0a8 7103 3081 880b 0014 0000 0000 0003
+0000 0003 c021 0c02 0012 577f 7c5b 4d53
+5241 5356 352e 3130
+
+# 23:18:36.573856 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:4 A:3 ppp: LCP 26: Code-Rej(2)
+[in,pcn1]
+4500 003e 69af 0000 ff2f ee8b c0a8 7103
+c0a8 7101 3081 880b 001a 4000 0000 0004
+0000 0003 ff03 c021 0702 0016 0c02 0012
+577f 7c5b 4d53 5241 5356 352e 3130
+
+# 23:18:36.584936 192.168.113.1 > 192.168.113.3: gre [KSAv1] ID:0000 S:4 A:4 ppp: LCP 26: Ident(3), Magic-Num=577f7c5b
+[out,pcn1]
+4500 003e 5e1a 0000 802f 7921 c0a8 7101
+c0a8 7103 3081 880b 001a 0000 0000 0004
+0000 0004 c021 0c03 0018 577f 7c5b 4d53
+5241 532d 302d 434c 4159 4d4f 4f52
+
+# 23:18:36.585562 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:5 A:4 ppp: LCP 32: Code-Rej(3)
+[in,pcn1]
+4500 0044 69b0 0000 ff2f ee84 c0a8 7103
+c0a8 7101 3081 880b 0020 4000 0000 0005
+0000 0004 ff03 c021 0703 001c 0c03 0018
+577f 7c5b 4d53 5241 532d 302d 434c 4159
+4d4f 4f52
+
+# 23:18:36.588721 192.168.113.1 > 192.168.113.3: gre [KSAv1] ID:0000 S:5 A:5 ppp: CCP 12: Conf-Req(4), MPPC
+[out,pcn1]
+4500 0030 5e1b 0000 802f 792e c0a8 7101
+c0a8 7103 3081 880b 000c 0000 0000 0005
+0000 0005 80fd 0104 000a 1206 0100 0001
+
+# 23:18:36.589445 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:6 A:5 ppp: CCP 6: Conf-Req(1)
+[in,pcn1]
+4500 002a 69b1 0000 ff2f ee9d c0a8 7103
+c0a8 7101 3081 880b 0006 4000 0000 0006
+0000 0005 80fd 0101 0004
+
+# 23:18:36.589540 192.168.113.3 > 192.168.113.1: gre [KSv1] ID:4000 S:7 ppp: CCP 12: Conf-Rej(4), MPPC
+[in,pcn1]
+4500 002c 69b2 0000 ff2f ee9a c0a8 7103
+c0a8 7101 3001 880b 000c 4000 0000 0007
+80fd 0404 000a 1206 0100 0001
+
+# 23:18:36.590023 192.168.113.1 > 192.168.113.3: gre [KSAv1] ID:0000 S:6 A:7 ppp: IPCP 36: Conf-Req(5), IP-Addr=0.0.0.0, Pri-DNS=0.0.0.0, Pri-NBNS=0.0.0.0, Sec-DNS=0.0.0.0, Sec-NBNS=0.0.0.0
+[out,pcn1]
+4500 0048 5e1c 0000 802f 7915 c0a8 7101
+c0a8 7103 3081 880b 0024 0000 0000 0006
+0000 0007 8021 0105 0022 0306 0000 0000
+8106 0000 0000 8206 0000 0000 8306 0000
+0000 8406 0000 0000
+
+# 23:18:36.590489 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:8 A:6 ppp: IPCP 30: Conf-Rej(5), Pri-DNS=0.0.0.0, Pri-NBNS=0.0.0.0, Sec-DNS=0.0.0.0, Sec-NBNS=0.0.0.0
+[in,pcn1]
+4500 0042 69b3 0000 ff2f ee83 c0a8 7103
+c0a8 7101 3081 880b 001e 4000 0000 0008
+0000 0006 8021 0405 001c 8106 0000 0000
+8206 0000 0000 8306 0000 0000 8406 0000
+0000
+
+# 23:18:36.591003 192.168.113.1 > 192.168.113.3: gre [KSAv1] ID:0000 S:7 A:8 ppp: IPCP 12: Conf-Rej(1), IP-Comp VJ-Comp
+[out,pcn1]
+4500 0030 5e1d 0000 802f 792c c0a8 7101
+c0a8 7103 3081 880b 000c 0000 0000 0007
+0000 0008 8021 0401 000a 0206 002d 0f01
+
+# 23:18:36.593819 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:9 A:7 ppp: IPCP 12: Conf-Req(2), IP-Addr=192.168.0.1
+[in,pcn1]
+4500 0030 69b4 0000 ff2f ee94 c0a8 7103
+c0a8 7101 3081 880b 000c 4000 0000 0009
+0000 0007 8021 0102 000a 0306 c0a8 0001
+
+# 23:18:36.594840 192.168.113.1 > 192.168.113.3: gre [KSAv1] ID:0000 S:8 A:9 ppp: CCP 6: Conf-Ack(1)
+[out,pcn1]
+4500 002a 5e1e 0000 802f 7931 c0a8 7101
+c0a8 7103 3081 880b 0006 0000 0000 0008
+0000 0009 80fd 0201 0004 0000 0000
+
+# 23:18:36.595525 192.168.113.1 > 192.168.113.3: gre [KSv1] ID:0000 S:9 ppp: CCP 18: Term-Req(6)
+[out,pcn1]
+4500 0032 5e1f 0000 802f 7928 c0a8 7101
+c0a8 7103 3001 880b 0012 0000 0000 0009
+80fd 0506 0010 577f 7c5b 003c cd74 0000
+02dc
+
+# 23:18:36.595937 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:10 A:9 ppp: CCP 6: Term-Ack(6)
+[in,pcn1]
+4500 002a 69b5 0000 ff2f ee99 c0a8 7103
+c0a8 7101 3081 880b 0006 4000 0000 000a
+0000 0009 80fd 0606 0004
+
diff --git a/contrib/ipfilter/test/input/ni16 b/contrib/ipfilter/test/input/ni16
new file mode 100644
index 0000000..b1cc521
--- /dev/null
+++ b/contrib/ipfilter/test/input/ni16
@@ -0,0 +1,235 @@
+# 23:18:36.130424 192.168.113.1.1511 > 192.168.113.3.1723: S 2884651685:2884651685(0) win 64240 <mss 1460,nop,nop,sackOK> (DF)
+[out,pcn1=192.168.113.1]
+4500 0030 5e11 4000 8006 5f07 0a02 0202
+c0a8 7103 05e7 06bb abf0 4aa5 0000 0000
+7002 faf0 4747 0000 0204 05b4 0101 0402
+
+# 23:18:36.130778 192.168.113.3.1723 > 192.168.113.1.1511: S 2774821082:2774821082(0) ack 2884651686 win 32768 <mss 1460> (DF)
+[in,pcn1]
+4500 002c 69a6 4000 4006 6dd0 c0a8 7103
+c0a8 7101 06bb 05e7 a564 68da abf0 4aa6
+6012 8000 a348 0000 0204 05b4
+
+# 23:18:36.130784 192.168.113.1.1511 > 192.168.113.3.1723: P 1:157(156) ack 1 win 64240: pptp CTRL_MSGTYPE=SCCRQ PROTO_VER(1.0) FRAME_CAP(A) BEARER_CAP(A) MAX_CHAN(0) FIRM_REV(2600) HOSTNAME() VENDOR(Microsoft Windows NT) (DF)
+[out,pcn1]
+4500 00c4 5e12 4000 8006 5e72 0a02 0202
+c0a8 7103 05e7 06bb abf0 4aa6 a564 68db
+5018 faf0 0847 0000 009c 0001 1a2b 3c4d
+0001 0000 0100 0000 0000 0001 0000 0001
+0000 0a28 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 4d69 6372 6f73 6f66 7420 5769
+6e64 6f77 7320 4e54 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000
+
+# 23:18:36.260235 192.168.113.3.1723 > 192.168.113.1.1511: P 1:157(156) ack 157 win 33580: pptp CTRL_MSGTYPE=SCCRP PROTO_VER(1.0) RESULT_CODE(1) ERR_CODE(0) FRAME_CAP() BEARER_CAP() MAX_CHAN(1) FIRM_REV(1) HOSTNAME(local) VENDOR(linux) (DF)
+[in,pcn1]
+4500 00c4 69a7 4000 4006 6d37 c0a8 7103
+c0a8 7101 06bb 05e7 a564 68db abf0 4b42
+5018 832c cecf 0000 009c 0001 1a2b 3c4d
+0002 0000 0100 0100 0000 0000 0000 0000
+0001 0001 6c6f 6361 6c00 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 6c69 6e75 7800 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000
+
+# 23:18:36.260252 192.168.113.1.1511 > 192.168.113.3.1723: P 157:325(168) ack 157 win 64084: pptp CTRL_MSGTYPE=OCRQ CALL_ID(16384) CALL_SER_NUM(4913) MIN_BPS(300) MAX_BPS(100000000) BEARER_TYPE(Any) FRAME_TYPE(E) RECV_WIN(64) PROC_DELAY(0) PHONE_NO_LEN(0) PHONE_NO() SUB_ADDR() (DF)
+[out,pcn1]
+4500 00d0 5e13 4000 8006 5e65 0a02 0202
+c0a8 7103 05e7 06bb abf0 4b42 a564 6977
+5018 fa54 d1ad 0000 00a8 0001 1a2b 3c4d
+0007 0000 4000 1331 0000 012c 05f5 e100
+0000 0003 0000 0003 0040 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0000 0000 0000 0000 0000
+
+# 23:18:36.272856 192.168.113.3.1723 > 192.168.113.1.1511: P 157:189(32) ack 325 win 33580: pptp CTRL_MSGTYPE=OCRP CALL_ID(0) PEER_CALL_ID(16384) RESULT_CODE(1) ERR_CODE(0) CAUSE_CODE(0) CONN_SPEED(100000000) RECV_WIN(64) PROC_DELAY(0) PHY_CHAN_ID(0) (DF)
+[in,pcn1]
+4500 0048 69a8 4000 4006 6db2 c0a8 7103
+c0a8 7101 06bb 05e7 a564 6977 abf0 4bea
+5018 832c 36fa 0000 0020 0001 1a2b 3c4d
+0008 0000 0000 4000 0100 0000 05f5 e100
+0040 0000 0000 0000
+
+# 23:18:36.321819 192.168.113.1.1511 > 192.168.113.3.1723: P 325:349(24) ack 189 win 64052: pptp CTRL_MSGTYPE=SLI PEER_CALL_ID(0) SEND_ACCM(0xffffffff) RECV_ACCM(0xffffffff) (DF)
+[out,pcn1]
+4500 0040 5e14 4000 8006 5ef4 0a02 0202
+c0a8 7103 05e7 06bb abf0 4bea a564 6997
+5018 fa34 0db7 0000 0018 0001 1a2b 3c4d
+000f 0000 0000 0000 ffff ffff ffff ffff
+
+# 23:18:36.349759 192.168.113.1 > 192.168.113.3: gre [KSv1] ID:0000 S:0 ppp: LCP 25: Conf-Req(0), MRU=1400, Magic-Num=577f7c5b, PFC, ACFC, Call-Back CBCP
+[out,pcn1]
+4500 0039 5e15 0000 802f 9ed1 0a02 0202
+c0a8 7103 3001 880b 0019 0000 0000 0000
+ff03 c021 0100 0015 0104 0578 0506 577f
+7c5b 0702 0802 0d03 06
+
+# 23:18:36.389970 192.168.113.3 > 192.168.113.1: gre [KAv1] ID:4000 A:4294967295 [|gre]
+[in,pcn1]
+4500 0020 69a9 0000 ff2f eeaf c0a8 7103
+c0a8 7101 2081 880b 0000 4000 ffff ffff
+
+# 23:18:36.518426 192.168.113.3.1723 > 192.168.113.1.1511: . ack 349 win 33580 (DF)
+[in,pcn1]
+4500 0028 69aa 4000 4006 6dd0 c0a8 7103
+c0a8 7101 06bb 05e7 a564 6997 abf0 4c02
+5010 832c b5c1 0000
+
+# 23:18:36.555363 192.168.113.3 > 192.168.113.1: gre [KSv1] ID:4000 S:0 ppp: LCP 24: Conf-Req(1), ACCM=00000000, Magic-Num=22d90cfa, PFC, ACFC
+[in,pcn1]
+4500 0038 69ab 0000 ff2f ee95 c0a8 7103
+c0a8 7101 3001 880b 0018 4000 0000 0000
+ff03 c021 0101 0014 0206 0000 0000 0506
+22d9 0cfa 0702 0802
+
+# 23:18:36.556030 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:1 A:0 ppp: LCP 11: Conf-Rej(0), Call-Back CBCP
+[in,pcn1]
+4500 002f 69ac 0000 ff2f ee9d c0a8 7103
+c0a8 7101 3081 880b 000b 4000 0000 0001
+0000 0000 ff03 c021 0400 0007 0d03 06
+
+# 23:18:36.557166 192.168.113.1 > 192.168.113.3: gre [KSAv1] ID:0000 S:1 A:1 ppp: LCP 24: Conf-Ack(1), ACCM=00000000, Magic-Num=22d90cfa, PFC, ACFC
+[out,pcn1]
+4500 003c 5e16 0000 802f 9ecd 0a02 0202
+c0a8 7103 3081 880b 0018 0000 0000 0001
+0000 0001 ff03 c021 0201 0014 0206 0000
+0000 0506 22d9 0cfa 0702 0802
+
+# 23:18:36.557764 192.168.113.1 > 192.168.113.3: gre [KSv1] ID:0000 S:2 ppp: LCP 22: Conf-Req(1), MRU=1400, Magic-Num=577f7c5b, PFC, ACFC
+[out,pcn1]
+4500 0036 5e17 0000 802f 9ed2 0a02 0202
+c0a8 7103 3001 880b 0016 0000 0000 0002
+ff03 c021 0101 0012 0104 0578 0506 577f
+7c5b 0702 0802
+
+# 23:18:36.564658 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:2 A:2 ppp: LCP 22: Conf-Ack(1), MRU=1400, Magic-Num=577f7c5b, PFC, ACFC
+[in,pcn1]
+4500 003a 69ad 0000 ff2f ee91 c0a8 7103
+c0a8 7101 3081 880b 0016 4000 0000 0002
+0000 0002 ff03 c021 0201 0012 0104 0578
+0506 577f 7c5b 0702 0802
+
+# 23:18:36.564803 192.168.113.3 > 192.168.113.1: gre [KSv1] ID:4000 S:3 ppp: IPCP 18: Conf-Req(1), IP-Addr=192.168.0.1, IP-Comp VJ-Comp
+[in,pcn1]
+4500 0032 69ae 0000 ff2f ee98 c0a8 7103
+c0a8 7101 3001 880b 0012 4000 0000 0003
+8021 0101 0010 0306 c0a8 0001 0206 002d
+0f01
+
+# 23:18:36.570395 192.168.113.1.1511 > 192.168.113.3.1723: P 349:373(24) ack 189 win 64052: pptp CTRL_MSGTYPE=SLI PEER_CALL_ID(0) SEND_ACCM(0x00000000) RECV_ACCM(0xffffffff) (DF)
+[out,pcn1]
+4500 0040 5e18 4000 8006 5ef0 0a02 0202
+c0a8 7103 05e7 06bb abf0 4c02 a564 6997
+5018 fa34 0d9f 0000 0018 0001 1a2b 3c4d
+000f 0000 0000 0000 0000 0000 ffff ffff
+
+# 23:18:36.573307 192.168.113.1 > 192.168.113.3: gre [KSAv1] ID:0000 S:3 A:3 ppp: LCP 20: Ident(2), Magic-Num=577f7c5b
+[out,pcn1]
+4500 0038 5e19 0000 802f 9ece 0a02 0202
+c0a8 7103 3081 880b 0014 0000 0000 0003
+0000 0003 c021 0c02 0012 577f 7c5b 4d53
+5241 5356 352e 3130
+
+# 23:18:36.573856 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:4 A:3 ppp: LCP 26: Code-Rej(2)
+[in,pcn1]
+4500 003e 69af 0000 ff2f ee8b c0a8 7103
+c0a8 7101 3081 880b 001a 4000 0000 0004
+0000 0003 ff03 c021 0702 0016 0c02 0012
+577f 7c5b 4d53 5241 5356 352e 3130
+
+# 23:18:36.584936 192.168.113.1 > 192.168.113.3: gre [KSAv1] ID:0000 S:4 A:4 ppp: LCP 26: Ident(3), Magic-Num=577f7c5b
+[out,pcn1]
+4500 003e 5e1a 0000 802f 9ec7 0a02 0202
+c0a8 7103 3081 880b 001a 0000 0000 0004
+0000 0004 c021 0c03 0018 577f 7c5b 4d53
+5241 532d 302d 434c 4159 4d4f 4f52
+
+# 23:18:36.585562 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:5 A:4 ppp: LCP 32: Code-Rej(3)
+[in,pcn1]
+4500 0044 69b0 0000 ff2f ee84 c0a8 7103
+c0a8 7101 3081 880b 0020 4000 0000 0005
+0000 0004 ff03 c021 0703 001c 0c03 0018
+577f 7c5b 4d53 5241 532d 302d 434c 4159
+4d4f 4f52
+
+# 23:18:36.588721 192.168.113.1 > 192.168.113.3: gre [KSAv1] ID:0000 S:5 A:5 ppp: CCP 12: Conf-Req(4), MPPC
+[out,pcn1]
+4500 0030 5e1b 0000 802f 9ed4 0a02 0202
+c0a8 7103 3081 880b 000c 0000 0000 0005
+0000 0005 80fd 0104 000a 1206 0100 0001
+
+# 23:18:36.589445 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:6 A:5 ppp: CCP 6: Conf-Req(1)
+[in,pcn1]
+4500 002a 69b1 0000 ff2f ee9d c0a8 7103
+c0a8 7101 3081 880b 0006 4000 0000 0006
+0000 0005 80fd 0101 0004
+
+# 23:18:36.589540 192.168.113.3 > 192.168.113.1: gre [KSv1] ID:4000 S:7 ppp: CCP 12: Conf-Rej(4), MPPC
+[in,pcn1]
+4500 002c 69b2 0000 ff2f ee9a c0a8 7103
+c0a8 7101 3001 880b 000c 4000 0000 0007
+80fd 0404 000a 1206 0100 0001
+
+# 23:18:36.590023 192.168.113.1 > 192.168.113.3: gre [KSAv1] ID:0000 S:6 A:7 ppp: IPCP 36: Conf-Req(5), IP-Addr=0.0.0.0, Pri-DNS=0.0.0.0, Pri-NBNS=0.0.0.0, Sec-DNS=0.0.0.0, Sec-NBNS=0.0.0.0
+[out,pcn1]
+4500 0048 5e1c 0000 802f 9ebb 0a02 0202
+c0a8 7103 3081 880b 0024 0000 0000 0006
+0000 0007 8021 0105 0022 0306 0000 0000
+8106 0000 0000 8206 0000 0000 8306 0000
+0000 8406 0000 0000
+
+# 23:18:36.590489 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:8 A:6 ppp: IPCP 30: Conf-Rej(5), Pri-DNS=0.0.0.0, Pri-NBNS=0.0.0.0, Sec-DNS=0.0.0.0, Sec-NBNS=0.0.0.0
+[in,pcn1]
+4500 0042 69b3 0000 ff2f ee83 c0a8 7103
+c0a8 7101 3081 880b 001e 4000 0000 0008
+0000 0006 8021 0405 001c 8106 0000 0000
+8206 0000 0000 8306 0000 0000 8406 0000
+0000
+
+# 23:18:36.591003 192.168.113.1 > 192.168.113.3: gre [KSAv1] ID:0000 S:7 A:8 ppp: IPCP 12: Conf-Rej(1), IP-Comp VJ-Comp
+[out,pcn1]
+4500 0030 5e1d 0000 802f 9ed2 0a02 0202
+c0a8 7103 3081 880b 000c 0000 0000 0007
+0000 0008 8021 0401 000a 0206 002d 0f01
+
+# 23:18:36.593819 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:9 A:7 ppp: IPCP 12: Conf-Req(2), IP-Addr=192.168.0.1
+[in,pcn1]
+4500 0030 69b4 0000 ff2f ee94 c0a8 7103
+c0a8 7101 3081 880b 000c 4000 0000 0009
+0000 0007 8021 0102 000a 0306 c0a8 0001
+
+# 23:18:36.594840 192.168.113.1 > 192.168.113.3: gre [KSAv1] ID:0000 S:8 A:9 ppp: CCP 6: Conf-Ack(1)
+[out,pcn1]
+4500 002a 5e1e 0000 802f 9ed9 0a02 0202
+c0a8 7103 3081 880b 0006 0000 0000 0008
+0000 0009 80fd 0201 0004 0000 0000
+
+# 23:18:36.595525 192.168.113.1 > 192.168.113.3: gre [KSv1] ID:0000 S:9 ppp: CCP 18: Term-Req(6)
+[out,pcn1]
+4500 0032 5e1f 0000 802f 9ed0 0a02 0202
+c0a8 7103 3001 880b 0012 0000 0000 0009
+80fd 0506 0010 577f 7c5b 003c cd74 0000
+02dc
+
+# 23:18:36.595937 192.168.113.3 > 192.168.113.1: gre [KSAv1] ID:4000 S:10 A:9 ppp: CCP 6: Term-Ack(6)
+[in,pcn1]
+4500 002a 69b5 0000 ff2f ee99 c0a8 7103
+c0a8 7101 3081 880b 0006 4000 0000 000a
+0000 0009 80fd 0606 0004
+
diff --git a/contrib/ipfilter/test/input/ni6 b/contrib/ipfilter/test/input/ni6
new file mode 100644
index 0000000..70e80c0
--- /dev/null
+++ b/contrib/ipfilter/test/input/ni6
@@ -0,0 +1,54 @@
+[in,nf0]
+4500 0054 cd8a 4000 ff11 20ba c0a8 0601
+c0a8 0602 8075 006f 0040 d36d 3e1d d249
+0000 0000 0000 0002 0001 86a0 0000 0002
+0000 0003 0000 0000 0000 0000 0000 0000
+0000 0000 0001 86a3 0000 0003 0000 0011
+0000 0000
+
+[out,qfe0]
+4500 0054 cd8a 4000 ff11 1fbb c0a8 0601
+c0a8 0701 8075 006f 0040 d26e 3e1d d249
+0000 0000 0000 0002 0001 86a0 0000 0002
+0000 0003 0000 0000 0000 0000 0000 0000
+0000 0000 0001 86a3 0000 0003 0000 0011
+0000 0000
+
+[in,qfe0]
+4500 0038 cd83 4000 ff11 1edd c0a8 0701
+c0a8 0702 006f 8075 0024 d704 3e1d d249
+0000 0001 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0801
+
+[out,nf0]
+4500 0038 cd83 4000 ff11 1fde c0a8 0701
+c0a8 0601 006f 8075 0024 d805 3e1d d249
+0000 0001 0000 0000 0000 0000 0000 0000
+0000 0000 0000 0801
+
+[in,nf0]
+4500 0044 d5a6 4000 ff11 18ae c0a8 0601
+c0a8 0602 80df 0801 0030 04f0 3e10 1fb1
+0000 0000 0000 0002 0001 86a3 0000 0002
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000
+
+[out,qfe0]
+4500 0044 d5a6 4000 ff11 17af c0a8 0601
+c0a8 0701 80df 0801 0030 03f1 3e10 1fb1
+0000 0000 0000 0002 0001 86a3 0000 0002
+0000 0000 0000 0000 0000 0000 0000 0000
+0000 0000
+
+[in,qfe0]
+4500 0034 0000 4000 fe11 ed64 c0a8 0701
+c0a8 0702 0801 80df 0020 89b7 3e10 1fb1
+0000 0001 0000 0000 0000 0000 0000 0000
+0000 0000
+
+[out,nf0]
+4500 0034 0000 4000 fe11 ee65 c0a8 0701
+c0a8 0601 0801 80df 0020 0000 3e10 1fb1
+0000 0001 0000 0000 0000 0000 0000 0000
+0000 0000
+
diff --git a/contrib/ipfilter/test/input/ni7 b/contrib/ipfilter/test/input/ni7
index 954bb7b..30f247d 100644
--- a/contrib/ipfilter/test/input/ni7
+++ b/contrib/ipfilter/test/input/ni7
@@ -7,7 +7,7 @@
[out,df0]
4500 0038 809a 0000 ff01 2d1d 0303 0303
-0404 0404 0b00 0125 0000 0000
-4500 0028 4706 4000 0111 1eac 0404 0404 0606 0606
+0404 0404 0b00 0125 0000 0000 4500 0028
+4706 4000 0111 1eac 0404 0404 0606 0606
afc9 829e 0014 c15e
diff --git a/contrib/ipfilter/test/input/ni9 b/contrib/ipfilter/test/input/ni9
new file mode 100644
index 0000000..788e603
--- /dev/null
+++ b/contrib/ipfilter/test/input/ni9
@@ -0,0 +1,24 @@
+#v tos len id off ttl p sum src dst
+# ICMP dest unreachable with 64 bits in payload (in reply to a TCP packet
+# going out)
+[in,df0] 45 00 00 3c 47 06 40 00 ff 06 20 aa 04 04 04 04 0a 02 02 02 50 00 05 00 00 00 00 01 00 00 00 00 a0 02 16 d0 cc 32 00 00 02 04 05 b4 04 02 08 0a 00 47 fb b0 00 00 00 00 01 03 03 00
+
+[out,df0]
+4500 0038 809a 0000 ff01 2d1d 0303 0303 0404 0404
+0303 0fa3 0000 0000
+4500 003c 4706 4000 ff06 2aac 0404 0404 0101 0101
+5000 9d58 0000 0001
+
+# ICMP dest unreachable with whole packet in payload (40 bytes = 320 bits)
+[out,df0]
+4500 0058 809a 0000 ff01 2cfd 0303 0303 0404 0404
+0303 0735 0000 0000
+4500 003c 4706 4000 ff06 2aac 0404 0404 0101 0101
+5000 9d58 0000 0001 0000 0000 a002 16d0 3ddc 0000
+0204 05b4 0402 080a 0047 fbb0 0000 0000 0103 0300
+
+[out,df0]
+4500 0038 809a 0000 ff01 2b1b 0303 0303 0505 0505
+0303 0fa3 0000 0000
+4500 003c 4706 4000 ff06 2aab 0404 0404 0101 0102 5000 9d58 0000 0001
+
diff --git a/contrib/ipfilter/test/input/p1 b/contrib/ipfilter/test/input/p1
new file mode 100644
index 0000000..f6753fa
--- /dev/null
+++ b/contrib/ipfilter/test/input/p1
@@ -0,0 +1,8 @@
+in 127.0.0.1 127.0.0.1
+in 1.1.1.1 1.2.1.1
+out 127.0.0.1 127.0.0.1
+out 1.1.1.1 1.2.1.1
+in 2.3.0.1 1.2.1.1
+in 2.2.2.1 1.2.1.1
+in 2.2.0.1 1.2.1.1
+out 4.4.1.1 1.2.1.1
diff --git a/contrib/ipfilter/test/input/p2 b/contrib/ipfilter/test/input/p2
new file mode 100644
index 0000000..f6753fa
--- /dev/null
+++ b/contrib/ipfilter/test/input/p2
@@ -0,0 +1,8 @@
+in 127.0.0.1 127.0.0.1
+in 1.1.1.1 1.2.1.1
+out 127.0.0.1 127.0.0.1
+out 1.1.1.1 1.2.1.1
+in 2.3.0.1 1.2.1.1
+in 2.2.2.1 1.2.1.1
+in 2.2.0.1 1.2.1.1
+out 4.4.1.1 1.2.1.1
diff --git a/contrib/ipfilter/test/input/p3 b/contrib/ipfilter/test/input/p3
new file mode 100644
index 0000000..4a6666b
--- /dev/null
+++ b/contrib/ipfilter/test/input/p3
@@ -0,0 +1,12 @@
+in 1.1.1.1 1.2.1.1
+in 1.2.1.1 1.1.1.1
+out 1.1.1.1 1.2.1.1
+out 1.2.1.1 1.1.1.1
+in 2.2.2.2 2.1.2.1
+out 2.1.2.1 2.2.2.2
+in 3.3.1.1 3.1.3.1
+out 3.1.3.1 3.3.1.1
+in 4.4.1.1 4.1.4.1
+out 4.1.4.1 4.4.1.1
+in 5.5.1.1 5.1.5.1
+out 5.1.5.1 5.5.1.1
diff --git a/contrib/ipfilter/test/intest b/contrib/ipfilter/test/intest
index 98241fc..e94ca08 100755
--- a/contrib/ipfilter/test/intest
+++ b/contrib/ipfilter/test/intest
@@ -1,4 +1,5 @@
#!/bin/sh
+mkdir -p results
if [ -f /usr/ucb/touch ] ; then
TOUCH=/usr/ucb/touch
else
@@ -12,7 +13,7 @@ else
fi
echo "$1...";
/bin/cp /dev/null results/$1
-../ipnat -nvf regress/$1 2>/dev/null > results/$1
+../ipnat -Rnvf regress/$1 2>/dev/null > results/$1
cmp expected/$1 results/$1
status=$?
if [ $status = 0 ] ; then
diff --git a/contrib/ipfilter/test/iptest b/contrib/ipfilter/test/iptest
new file mode 100644
index 0000000..bb3ab5e
--- /dev/null
+++ b/contrib/ipfilter/test/iptest
@@ -0,0 +1,22 @@
+#!/bin/sh
+mkdir -p results
+if [ -f /usr/ucb/touch ] ; then
+ TOUCH=/usr/ucb/touch
+else
+ if [ -f /usr/bin/touch ] ; then
+ TOUCH=/usr/bin/touch
+ else
+ if [ -f /bin/touch ] ; then
+ TOUCH=/bin/touch
+ fi
+ fi
+fi
+echo "$1...";
+/bin/cp /dev/null results/$1
+../ippool -f regress/$1 -nRv 2>/dev/null > results/$1
+cmp expected/$1 results/$1
+status=$?
+if [ $status = 0 ] ; then
+ $TOUCH $1
+fi
+exit $status
diff --git a/contrib/ipfilter/test/itest b/contrib/ipfilter/test/itest
index c1b5f57..333afde 100644
--- a/contrib/ipfilter/test/itest
+++ b/contrib/ipfilter/test/itest
@@ -1,4 +1,5 @@
#!/bin/sh
+mkdir -p results
if [ -f /usr/ucb/touch ] ; then
TOUCH=/usr/ucb/touch
else
@@ -12,7 +13,7 @@ else
fi
echo "$1...";
/bin/cp /dev/null results/$1
-../ipf -nvf regress/$1 2>/dev/null > results/$1
+../ipf -Rnvf regress/$1 2>/dev/null > results/$1
cmp expected/$1 results/$1
status=$?
if [ $status = 0 ] ; then
diff --git a/contrib/ipfilter/test/mhtest b/contrib/ipfilter/test/mhtest
index 52a0027..a4d48d6 100755
--- a/contrib/ipfilter/test/mhtest
+++ b/contrib/ipfilter/test/mhtest
@@ -16,7 +16,7 @@ echo "$1...";
/bin/cp /dev/null results/$1
-../ipftest -br regress/$1 -Hi input/$1 > results/$1
+../ipftest -br regress/$1 -F hex -i input/$1 > results/$1
if [ $? -ne 0 ] ; then
exit 1
fi
diff --git a/contrib/ipfilter/test/mtest b/contrib/ipfilter/test/mtest
index b185abb..2a3ed38 100755
--- a/contrib/ipfilter/test/mtest
+++ b/contrib/ipfilter/test/mtest
@@ -1,4 +1,6 @@
#!/bin/sh
+format=$2
+mkdir -p results
# multiple rules at the same time
if [ -f /usr/ucb/touch ] ; then
@@ -16,7 +18,7 @@ echo "$1...";
/bin/cp /dev/null results/$1
-../ipftest -br regress/$1 -i input/$1 > results/$1
+../ipftest -F $format -Rbr regress/$1 -i input/$1 > results/$1
if [ $? -ne 0 ] ; then
exit 1
fi
diff --git a/contrib/ipfilter/test/natipftest b/contrib/ipfilter/test/natipftest
index 8627168..f5cfdb8 100755
--- a/contrib/ipfilter/test/natipftest
+++ b/contrib/ipfilter/test/natipftest
@@ -1,4 +1,15 @@
#!/bin/sh
+mode=$1
+shift
+if [ $3 = hex ] ; then
+ format="-xF $2"
+else
+ format="-F $2"
+fi
+if [ "$4" != "" ] ; then
+ format="-T $4 $format"
+fi
+mkdir -p results
if [ -f /usr/ucb/touch ] ; then
TOUCH=/usr/ucb/touch
else
@@ -10,19 +21,39 @@ else
fi
fi
fi
-echo "$1...";
-/bin/cp /dev/null results/$1
-( while read rule; do
- echo "$rule" | ../ipftest -bHx -r regress/$1.ipf -Nr - -i input/$1 >> \
- results/$1;
+
+case $mode in
+single)
+ echo "$1...";
+ /bin/cp /dev/null results/$1
+ ( while read rule; do
+ echo "$rule" | ../ipftest -R $format -bx -r regress/$1.ipf -N - -i input/$1 >> \
+ results/$1;
+ if [ $? -ne 0 ] ; then
+ exit 1;
+ fi
+ echo "-------------------------------" >> results/$1
+ done ) < regress/$1.nat
+ cmp expected/$1 results/$1
+ status=$?
+ if [ $status = 0 ] ; then
+ $TOUCH $1
+ fi
+ ;;
+multi)
+ echo "$1...";
+ /bin/cp /dev/null results/$1
+ ../ipftest -R $format -bx -r regress/$1.ipf -N regress/$1.nat \
+ -i input/$1 >> results/$1;
if [ $? -ne 0 ] ; then
- exit 1;
+ exit 2;
fi
echo "-------------------------------" >> results/$1
-done ) < regress/$1.nat
-cmp expected/$1 results/$1
-status=$?
-if [ $status = 0 ] ; then
- $TOUCH $1
-fi
+ cmp expected/$1 results/$1
+ status=$?
+ if [ $status = 0 ] ; then
+ $TOUCH $1
+ fi
+ ;;
+esac
exit $status
diff --git a/contrib/ipfilter/test/nattest b/contrib/ipfilter/test/nattest
index 2b3e931..78b757e 100755
--- a/contrib/ipfilter/test/nattest
+++ b/contrib/ipfilter/test/nattest
@@ -1,4 +1,12 @@
#!/bin/sh
+if [ $3 = hex ] ; then
+ format="-xF $2"
+else
+ format="-F $2"
+fi
+if [ "$4" != "" ] ; then
+ format="-T $4 $format"
+fi
if [ -f /usr/ucb/touch ] ; then
TOUCH=/usr/ucb/touch
else
@@ -13,7 +21,7 @@ fi
echo "$1...";
/bin/cp /dev/null results/$1
( while read rule; do
- echo "$rule" | ../ipftest -Nbr - -i input/$1 >> results/$1;
+ echo "$rule" | ../ipftest $format -RbN - -i input/$1 >> results/$1;
if [ $? -ne 0 ] ; then
exit 1;
fi
diff --git a/contrib/ipfilter/test/ptest b/contrib/ipfilter/test/ptest
new file mode 100644
index 0000000..7deccd3
--- /dev/null
+++ b/contrib/ipfilter/test/ptest
@@ -0,0 +1,31 @@
+#!/bin/sh
+mkdir -p results
+if [ -f /usr/ucb/touch ] ; then
+ TOUCH=/usr/ucb/touch
+else
+ if [ -f /usr/bin/touch ] ; then
+ TOUCH=/usr/bin/touch
+ else
+ if [ -f /bin/touch ] ; then
+ TOUCH=/bin/touch
+ fi
+ fi
+fi
+echo "$1...";
+/bin/cp /dev/null results/$1
+if [ -f regress/$1.pool ] ; then
+ ../ipftest -RD -b -P regress/$1.pool -r regress/$1.ipf -i input/$1 >> \
+ results/$1
+else
+ ../ipftest -RD -b -r regress/$1.ipf -i input/$1 >> results/$1
+fi
+if [ $? -ne 0 ] ; then
+ exit 1;
+fi
+echo "-------------------------------" >> results/$1
+cmp expected/$1 results/$1
+status=$?
+if [ $status = 0 ] ; then
+ $TOUCH $1
+fi
+exit $status
diff --git a/contrib/ipfilter/test/regress/bpf-f1 b/contrib/ipfilter/test/regress/bpf-f1
new file mode 100644
index 0000000..2c80283
--- /dev/null
+++ b/contrib/ipfilter/test/regress/bpf-f1
@@ -0,0 +1,4 @@
+pass in bpf-v4 { "0x20 0 0 0xc 0x15 0 0x1 0x1010101 0x6 0 0 0x60 0x6 0 0 0" }
+pass out bpf-v4 { "0x20 0 0 0xc 0x15 0 0x1 0x1010101 0x6 0 0 0x60 0x6 0 0 0" }
+pass in bpf-v4 { "0x20 0 0 0x10 0x15 0 0x1 0x1010101 0x6 0 0 0x60 0x6 0 0 0" }
+pass out bpf-v4 { "0x20 0 0 0x10 0x15 0 0x1 0x1010101 0x6 0 0 0x60 0x6 0 0 0" }
diff --git a/contrib/ipfilter/test/regress/bpf1 b/contrib/ipfilter/test/regress/bpf1
new file mode 100644
index 0000000..2c80283
--- /dev/null
+++ b/contrib/ipfilter/test/regress/bpf1
@@ -0,0 +1,4 @@
+pass in bpf-v4 { "0x20 0 0 0xc 0x15 0 0x1 0x1010101 0x6 0 0 0x60 0x6 0 0 0" }
+pass out bpf-v4 { "0x20 0 0 0xc 0x15 0 0x1 0x1010101 0x6 0 0 0x60 0x6 0 0 0" }
+pass in bpf-v4 { "0x20 0 0 0x10 0x15 0 0x1 0x1010101 0x6 0 0 0x60 0x6 0 0 0" }
+pass out bpf-v4 { "0x20 0 0 0x10 0x15 0 0x1 0x1010101 0x6 0 0 0x60 0x6 0 0 0" }
diff --git a/contrib/ipfilter/test/regress/i1 b/contrib/ipfilter/test/regress/i1
index 736801e..df60d2b 100644
--- a/contrib/ipfilter/test/regress/i1
+++ b/contrib/ipfilter/test/regress/i1
@@ -1,5 +1,6 @@
pass in all
-block out all
+block out \
+all
log in all
log body in all
count in from any to any
@@ -11,3 +12,5 @@ pass in log body quick from any to any
block return-rst in quick on le0 proto tcp from any to any
block return-icmp in on qe0 from any to any
block return-icmp(1) in on qe0 from any to any
+block return-icmp-as-dest(port-unr) in on qe0 from any to any
+pass out on longNICname0 from test.host.dots to test\.host.dots
diff --git a/contrib/ipfilter/test/regress/i11 b/contrib/ipfilter/test/regress/i11
index 68e9283..2999a85 100644
--- a/contrib/ipfilter/test/regress/i11
+++ b/contrib/ipfilter/test/regress/i11
@@ -1,5 +1,8 @@
pass in on ed0 proto tcp from localhost to localhost port = telnet keep state
block in log first on lo0 proto tcp/udp from any to any keep state
-pass in proto udp from localhost to localhost port = 2049 keep frags
+pass in proto udp from localhost to localhost port = 20499 keep frag
pass in proto udp from localhost to localhost port = 53 keep state keep frags
-pass in proto tcp from any port gt 1024 to localhost port eq 25 keep state
+pass in on ed0 out-via vx0 proto udp from any to any keep state
+pass out on ppp0 in-via le0 proto tcp from any to any keep state
+pass in proto tcp from any port gt 1024 to localhost port eq 1024 keep state
+pass in proto tcp all flags S keep state(strict,newisn,no-icmp-err,limit 101)
diff --git a/contrib/ipfilter/test/regress/i12 b/contrib/ipfilter/test/regress/i12
index d923f08..b8b2f3e 100644
--- a/contrib/ipfilter/test/regress/i12
+++ b/contrib/ipfilter/test/regress/i12
@@ -1,4 +1,9 @@
-block in on eri0 all head 1
-pass in on eri0 proto icmp all group 1
-pass out on ed0 all head 1000000
-block out on ed0 proto udp all group 1000000
+pass in from 1.1.1.1/32 to 2.2.2.2/32
+pass in from (2.2.2.2/24,3.3.3.3/32) to 4.4.4.4/32
+pass in from (2.2.2.2/24,3.3.3.3/32) to (5.5.5.5/32,6.6.6.6/32)
+pass in from (2.2.2.2/24,3.3.3.3/32) to (5.5.5.5/32,6.6.6.6/32) port = (22,25)
+pass in proto tcp from (2.2.2.2/24,3.3.3.3/32) to (5.5.5.5/32,6.6.6.6/32) port = (53,9)
+pass in proto udp from (2.2.2.2/24,3.3.3.3/32) to (5.5.5.5/32,6.6.6.6/32) port = (53,9)
+pass in from 10.10.10.10 to 11.11.11.11
+pass in from pool/101 to hash/202
+pass in from hash/303 to pool/404
diff --git a/contrib/ipfilter/test/regress/i13 b/contrib/ipfilter/test/regress/i13
new file mode 100644
index 0000000..3ba343d
--- /dev/null
+++ b/contrib/ipfilter/test/regress/i13
@@ -0,0 +1,8 @@
+a=any;
+b="from $a";
+c='to $a';
+d=block;
+e="pass in";
+$d in $b $c
+f=" $b $c";
+$e${f}
diff --git a/contrib/ipfilter/test/regress/i14 b/contrib/ipfilter/test/regress/i14
new file mode 100644
index 0000000..3c9d7b8
--- /dev/null
+++ b/contrib/ipfilter/test/regress/i14
@@ -0,0 +1,8 @@
+block in on eri0 all head 1
+pass in on eri0 proto icmp all group 1
+pass out on ed0 all head 1000000
+block out on ed0 proto udp all group 1000000
+block in on vm0 proto tcp/udp all head 101
+pass in from 1.1.1.1 to 2.2.2.2 group 101
+pass in proto tcp from 1.0.0.1 to 2.0.0.2 group 101
+pass in proto udp from 2.0.0.2 to 3.0.0.3 group 101
diff --git a/contrib/ipfilter/test/regress/i15 b/contrib/ipfilter/test/regress/i15
new file mode 100644
index 0000000..5268ec35
--- /dev/null
+++ b/contrib/ipfilter/test/regress/i15
@@ -0,0 +1,5 @@
+pass out on fxp0 all set-tag(log=100)
+pass out on fxp0 all set-tag(nat=foo)
+pass out on fxp0 all set-tag(log=100, nat=200)
+pass out on fxp0 all set-tag(log=2147483648, nat=overtherainbowisapotof)
+
diff --git a/contrib/ipfilter/test/regress/i2 b/contrib/ipfilter/test/regress/i2
index 101deaa..a3b9cd8 100644
--- a/contrib/ipfilter/test/regress/i2
+++ b/contrib/ipfilter/test/regress/i2
@@ -1,6 +1,7 @@
log in proto tcp all
pass in proto 6 from any to any
pass in proto udp from localhost to localhost
+block in proto ipv6 from any to any
block in proto 17 from any to any
block in proto 250 from any to any
pass in proto tcp/udp from any to any
diff --git a/contrib/ipfilter/test/regress/i3 b/contrib/ipfilter/test/regress/i3
index 15e98bf..0d82e8a 100644
--- a/contrib/ipfilter/test/regress/i3
+++ b/contrib/ipfilter/test/regress/i3
@@ -1,5 +1,7 @@
log in all
-pass in from 128.0.0.1/24 to 128.0.0.1/16
+pass in from 128.16/16 to 129.10.10/24
+pass in from 128.0.0.1/24 to 128\
+.0.0.1/16
pass in from 128.0.0.1/0xffffff00 to 128.0.0.1/0xffff0000
pass in from 128.0.0.1/255.255.255.0 to 128.0.0.1/255.255.0.0
pass in from 128.0.0.1 mask 0xffffff00 to 128.0.0.1 mask 0xffff0000
diff --git a/contrib/ipfilter/test/regress/i4 b/contrib/ipfilter/test/regress/i4
index 1095ed9..7170dc2 100644
--- a/contrib/ipfilter/test/regress/i4
+++ b/contrib/ipfilter/test/regress/i4
@@ -2,6 +2,7 @@ log in proto tcp from any port > 0 to any
log in proto tcp from any to any port > 0
pass in proto 6 from any port != 0 to any port 0 >< 65535
pass in proto 17 from localhost port > 32000 to localhost port < 29000
-block in proto udp from any port != ntp to any port < ntp
+block in proto udp from any port != \ntp to any port < echo
block in proto tcp from any port = smtp to any port > 25
pass in proto tcp/udp from any port 1 >< 3 to any port 1 <> 3
+pass in log first quick proto tcp from any port > 1023 to any port = 1723 flags S keep state
diff --git a/contrib/ipfilter/test/regress/i6 b/contrib/ipfilter/test/regress/i6
index a35633b..1a53089 100644
--- a/contrib/ipfilter/test/regress/i6
+++ b/contrib/ipfilter/test/regress/i6
@@ -1,4 +1,10 @@
pass in on lo0 fastroute from any to any
+pass in on lo0 to qe0 from localhost to localhost
+pass in on le0 to qe0:127.0.0.1 from localhost to localhost
pass in on lo0 dup-to qe0 from localhost to localhost
-pass in on qe0 dup-to qe0:127.0.0.1 from localhost to localhost
+pass in on le0 dup-to qe0:127.0.0.1 from localhost to localhost
+pass in on le0 to hme0:10.1.1.1 dup-to qe0:127.0.0.1 from localhost to localhost
block in quick on qe0 to qe1 from any to any
+block in quick to qe1 from any to any
+pass out quick dup-to hme0 from any to any
+pass in quick fastroute all
diff --git a/contrib/ipfilter/test/regress/i9 b/contrib/ipfilter/test/regress/i9
index 327cff4..2b8fb10 100644
--- a/contrib/ipfilter/test/regress/i9
+++ b/contrib/ipfilter/test/regress/i9
@@ -1,5 +1,7 @@
-pass in from localhost to localhost with short
+pass in from localhost to localhost with short,frags
block in from any to any with ipopts
pass in from any to any with opt nop,rr,zsu
pass in from any to any with opt nop,rr,zsu not opt ssrr,lsrr
pass in from localhost to localhost with not frag
+pass in proto tcp all flags S with not oow keep state
+pass in proto tcp all flags S with not bad,bad-src,bad-nat
diff --git a/contrib/ipfilter/test/regress/in1 b/contrib/ipfilter/test/regress/in1
index 59c5754..145e3d0 100644
--- a/contrib/ipfilter/test/regress/in1
+++ b/contrib/ipfilter/test/regress/in1
@@ -23,3 +23,5 @@ map le0 0/0 -> 0/32 frag age 10
map le0 192.168.0.0/16 -> range 203.1.1.23-203.1.3.45 frag age 10/20
map ppp0 192.168.0.0/16 -> 0/32 portmap tcp 10000:19999 frag age 30
map fxp0 from 192.168.0.0/18 to 0/0 port = 21 -> 1.2.3.4/32 proxy port 21 ftp/tcp
+map thisisalonginte 0/0 -> 0/32 mssclamp 1452 tag freddyliveshere
+map bar0 0/0 -> 0/32 icmpidmap icmp 1000:2000
diff --git a/contrib/ipfilter/test/regress/in2 b/contrib/ipfilter/test/regress/in2
index 33151f0..222a28c 100644
--- a/contrib/ipfilter/test/regress/in2
+++ b/contrib/ipfilter/test/regress/in2
@@ -1,22 +1,67 @@
-rdr le0 0/0 port 0 -> 1.1.1.1 port 0
-rdr le0 0/0 port 0 -> 1.1.1.1 port 0 ip
-rdr le0 0/0 port 80 -> 1.1.1.1 port 80
-rdr le0 0/0 port 80 -> 1.1.1.1 port 80 ip
-rdr le0 0/0 port 80 -> 1.1.1.1 port 80 tcp
-rdr le0 0/0 port 80 -> 1.1.1.1 port 80 udp
-rdr le0 0/0 port 80 -> 1.1.1.1 port 80 tcp/udp
-rdr le0 0/0 port 80 -> 1.1.1.1 port 80 icmp
-rdr le0 0/0 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp
-rdr le0 0/0 port 80 -> 1.1.1.1 port 80 tcp round-robin
-rdr le0 0/0 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp round-robin
-rdr le0 0/0 port 0 -> 1.1.1.1 port 0 ip frag
-rdr le0 0/0 port 80 -> 1.1.1.1 port 80 icmp frag
-rdr le0 0/0 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp frag
-rdr le0 0/0 port 80 -> 1.1.1.1 port 80 tcp round-robin frag
-rdr le0 0/0 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp round-robin frag
-rdr le0 0/0 port 0 -> 1.1.1.1 port 0 ip frag age 10
-rdr le0 0/0 port 0 -> 1.1.1.1 port 0 ip frag age 10/20
-rdr le0 0/0 port 80 -> 1.1.1.1 port 80 icmp frag age 10
-rdr le0 0/0 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp frag age 20
-rdr le0 0/0 port 80 -> 1.1.1.1 port 80 tcp round-robin frag age 30
-rdr le0 0/0 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp round-robin frag age 40
+rdr le0 9.8.7.6/32 port 0 -> 1.1.1.1 port 0 tcp
+rdr le0 9.8.7.6/32 port 0 -> 1.1.1.1 port 0 ip
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 tcp
+rdr le0 9.8.7.6/32 -> 1.1.1.1 ip
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 tcp
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 udp
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 tcp/udp
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 icmp
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 tcp round-robin
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp round-robin
+rdr le0 9.8.7.6/32 port 0 -> 1.1.1.1 port 0 ip frag
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 icmp frag
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp frag
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 tcp round-robin frag
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp round-robin frag
+rdr le0 9.8.7.6/32 -> 1.1.1.1 ip frag age 10
+rdr le0 9.8.7.6/32 port 0 -> 1.1.1.1 port 0 ip frag age 10/20
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 icmp frag age 10
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp frag age 20
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 tcp round-robin frag age 30
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp round-robin frag age 40
+rdr le0 9.8.7.6/32 port 0 -> 1.1.1.1 port 0 ip sticky
+rdr le0 9.8.7.6/32 port 0 -> 1.1.1.1 port 0 ip frag sticky
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 icmp frag sticky
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp frag sticky
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 tcp round-robin frag sticky
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp round-robin frag sticky
+rdr le0 9.8.7.6/32 port 0 -> 1.1.1.1 port 0 ip frag age 10 sticky
+rdr le0 9.8.7.6/32 port 0 -> 1.1.1.1 port 0 ip frag age 10/20 sticky
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 icmp frag age 10 sticky
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp frag age 20 sticky
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 tcp round-robin frag age 30 sticky
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp round-robin frag age 40 sticky
+rdr le0 9.8.7.6/32 port 0 -> 1.1.1.1 port 0 ip mssclamp 1000
+rdr le0 9.8.7.6/32 port 0 -> 1.1.1.1 port 0 ip sticky mssclamp 1000
+rdr le0 9.8.7.6/32 port 0 -> 1.1.1.1 port 0 ip frag sticky mssclamp 1000
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 icmp frag sticky mssclamp 1000
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp frag sticky mssclamp 1000
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 tcp round-robin frag sticky mssclamp 1000
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp round-robin frag sticky mssclamp 1000
+rdr le0 9.8.7.6/32 port 0 -> 1.1.1.1 port 0 ip frag age 10 sticky mssclamp 1000
+rdr le0 9.8.7.6/32 port 0 -> 1.1.1.1 port 0 ip frag age 10/20 sticky mssclamp 1000
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 icmp frag age 10 sticky mssclamp 1000
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp frag age 20 sticky mssclamp 1000
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 tcp round-robin frag age 30 sticky mssclamp 1000
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp round-robin frag age 40 sticky mssclamp 1000
+rdr le0 9.8.7.6/32 port 0 -> 1.1.1.1 port 0 ip tag nattagcacheline
+rdr le0 9.8.7.6/32 port 0 -> 1.1.1.1 port 0 ip mssclamp 1000 tag nattagcacheline
+rdr le0 9.8.7.6/32 port 0 -> 1.1.1.1 port 0 ip sticky mssclamp 1000 tag nattagcacheline
+rdr le0 9.8.7.6/32 port 0 -> 1.1.1.1 port 0 ip frag sticky mssclamp 1000 tag nattagcacheline
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 icmp frag sticky mssclamp 1000 tag nattagcacheline
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp frag sticky mssclamp 1000 tag nattagcacheline
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 tcp round-robin frag sticky mssclamp 1000 tag nattagcacheline
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp round-robin frag sticky mssclamp 1000 tag nattagcacheline
+rdr le0 9.8.7.6/32 port 0 -> 1.1.1.1 port 0 ip frag age 10 sticky mssclamp 1000 tag nattagcacheline
+rdr le0 9.8.7.6/32 port 0 -> 1.1.1.1 port 0 ip frag age 10/20 sticky mssclamp 1000 tag nattagcacheline
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 icmp frag age 10 sticky mssclamp 1000 tag nattagcacheline
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp frag age 20 sticky mssclamp 1000 tag nattagcacheline
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1 port 80 tcp round-robin frag age 30 sticky mssclamp 1000 tag nattagcacheline
+rdr le0 9.8.7.6/32 port 80 -> 1.1.1.1,1.1.1.2 port 80 tcp round-robin frag age 40 sticky mssclamp 1000 tag nattagcacheline
+rdr ge0 9.8.7.6/32 -> 1.1.1.1 proxy port 21 ftp/tcp
+rdr ge0 9.8.7.6/32 port 21 -> 1.1.1.1 port 21 tcp proxy ftp
+rdr le0 9.8.7.6/32 port 1000-2000 -> 1.1.1.1 port 5555 tcp
+rdr le0 9.8.7.6/32 port 1000-2000 -> 1.1.1.1 port = 5555 tcp
+rdr le0 0/0 -> test.host.dots
+rdr le0 0/0 -> test.host.dots,test.host.dots
diff --git a/contrib/ipfilter/test/regress/in5 b/contrib/ipfilter/test/regress/in5
new file mode 100644
index 0000000..d0a115c
--- /dev/null
+++ b/contrib/ipfilter/test/regress/in5
@@ -0,0 +1,22 @@
+rdr le0 from any to 9.8.7.6/32 port = 0 -> 1.1.1.1 port 0 tcp
+rdr le0 from any to 9.8.7.6/32 port = 0 -> 1.1.1.1 port 0 ip
+rdr le0 from any to 9.8.7.6/32 port = 8888 -> 1.1.1.1 port 888 tcp
+rdr le0 from any to 9.8.7.6/32 port = 8888 -> 1.1.1.1 port 888 ip
+rdr le0 from any to 9.8.7.6/32 port = 8888 -> 1.1.1.1 port 888 tcp
+rdr le0 from any to 9.8.7.6/32 port = 8888 -> 1.1.1.1 port 888 udp
+rdr le0 from any to 9.8.7.6/32 port = 8888 -> 1.1.1.1 port 888 tcp/udp
+rdr le0 from any to 9.8.7.6/32 -> 1.1.1.1 port 888 icmp
+rdr le0 from any to 9.8.7.6/32 port = 8888 -> 1.1.1.1,1.1.1.2 port 888 tcp
+rdr le0 from any to 9.8.7.6/32 port = 8888 -> 1.1.1.1 port 888 tcp round-robin
+rdr le0 from any to 9.8.7.6/32 port = 8888 -> 1.1.1.1,1.1.1.2 port 888 tcp round-robin
+rdr le0 from any to 9.8.7.6/32 -> 1.1.1.1 port 0 ip frag
+rdr le0 from any to 9.8.7.6/32 port = 8888 -> 1.1.1.1 port 888 icmp frag
+rdr le0 from any to 9.8.7.6/32 port = 8888 -> 1.1.1.1,1.1.1.2 port 888 tcp frag
+rdr le0 from any to 9.8.7.6/32 port = 8888 -> 1.1.1.1 port 888 tcp round-robin frag
+rdr le0 from any to 9.8.7.6/32 port = 8888 -> 1.1.1.1,1.1.1.2 port 888 tcp round-robin frag
+rdr le0 from any to 9.8.7.6/32 -> 1.1.1.1 port 0 ip frag age 10
+rdr le0 from any to 9.8.7.6/32 port = 0 -> 1.1.1.1 port 0 ip frag age 10/20
+rdr le0 from any to 9.8.7.6/32 port = 8888 -> 1.1.1.1 port 888 icmp frag age 10
+rdr le0 from any to 9.8.7.6/32 port = 8888 -> 1.1.1.1,1.1.1.2 port 888 tcp frag age 20
+rdr le0 from any to 9.8.7.6/32 port = 8888 -> 1.1.1.1 port 888 tcp round-robin frag age 30
+rdr le0 from any to 9.8.7.6/32 port = 8888 -> 1.1.1.1,1.1.1.2 port 888 tcp round-robin frag age 40
diff --git a/contrib/ipfilter/test/regress/in6 b/contrib/ipfilter/test/regress/in6
new file mode 100644
index 0000000..6948799
--- /dev/null
+++ b/contrib/ipfilter/test/regress/in6
@@ -0,0 +1,3 @@
+map foo0 from any port = 1 to any port != 0 -> 0/32 udp
+map foo0 from any port < 1 to any port > 0 -> 0/32 tcp
+map foo0 from any port <= 1 to any port >= 0 -> 0/32 tcp/udp
diff --git a/contrib/ipfilter/test/regress/ip1 b/contrib/ipfilter/test/regress/ip1
new file mode 100644
index 0000000..c31ba25
--- /dev/null
+++ b/contrib/ipfilter/test/regress/ip1
@@ -0,0 +1,78 @@
+#:%s/ \(number = [0-9]*\) \(type = [a-z]*\)/ \2 \1/g
+
+table role = ipf type = tree number = 1
+ {; };
+table role = ipf type = tree number = 100
+ { 1.2.3.4/32; !2.2.0.0/16; 2.2.2.0/24; };
+table role = nat type = tree number = 110
+ { 1.2.3.4/32; !2.2.0.0/16; 2.2.2.0/24; };
+table role = auth type = tree number = 120
+ { 1.2.3.4/32; !2.2.0.0/16; 2.2.2.0/24; };
+table role = count type = tree number = 130
+ { 1.2.3.4; !2.2.0.0/16; 2.2.2.0/24; };
+
+table role = ipf type = hash number = 2
+ {; };
+table role = ipf type = hash number = 200
+ { 0/0; 1/32; 1.2.3.4/32; };
+table role = nat type = hash number = 210
+ { 0/0; 2/32; 1.2.3.4/32; };
+table role = auth type = hash number = 220
+ { 0/0; 3/32; 1.2.3.4/32; };
+table role = count type = hash number = 230
+ { 0/0; 4/32; 1.2.3.4/32; };
+
+table role = ipf type = hash number = 240 seed = 101
+ { 0/0; 1/32; 1.2.3.4/32; };
+table role = nat type = hash number = 250 seed = 101
+ { 0/0; 2/32; 1.2.3.4/32; };
+table role = auth type = hash number = 260 seed = 101
+ { 0/0; 3/32; 1.2.3.4/32; };
+table role = count type = hash number = 270 seed = 101
+ { 0/0; 4/32; 1.2.3.4/32; };
+
+table role = ipf type = hash number = 2000 size = 1001
+ { 0/0; 1/32; 1.2.3.4/32; };
+table role = nat type = hash number = 2000 size = 1001
+ { 0/0; 2/32; 1.2.3.4/32; };
+table role = auth type = hash number = 2000 size = 1001
+ { 0/0; 3/32; 1.2.3.4/32; };
+table role = count type = hash number = 2000 size = 1001
+ { 0/0; 4/32; 1.2.3.4/32; };
+
+table role = ipf type = hash number = 100 size = 1001 seed = 101
+ { 0/0; 1/32; 1.2.3.4/32; };
+table role = nat type = hash number = 100 size = 1001 seed = 101
+ { 0/0; 2/32; 1.2.3.4/32; };
+table role = auth type = hash number = 100 size = 1001 seed = 101
+ { 0/0; 3/32; 1.2.3.4/32; };
+table role = count type = hash number = 100 size = 1001 seed = 101
+ { 0/0; 4/32; 1.2.3.4/32; };
+
+group-map in role = ipf number = 300 group = 303
+ { 0/0; 5/32; 1.2.3.4/32; };
+group-map in role = nat number = 300 group = 303
+ { 0/0; 6/32; 1.2.3.4/32; };
+group-map in role = auth number = 300 group = 303
+ { 0/0; 7/32; 1.2.3.4/32; };
+group-map in role = count number = 300 group = 303
+ { 0/0; 8/32; 1.2.3.4/32; };
+
+group-map out role = ipf number = 400 group = 303
+ { 0/0; 5/32; 1.2.3.4/32, group = 606; };
+group-map out role = nat number = 400 group = 303
+ { 0/0; 6/32; 1.2.3.4/32, group = 606; };
+group-map out role = auth number = 400 group = 303
+ { 0/0; 7/32; 1.2.3.4/32, group = 606; };
+group-map out role = count number = 400 group = 303
+ { 0/0; 8/32; 1.2.3.4/32, group = 606; };
+
+group-map in role = ipf number = 500
+ { 0/0, group = 10; 5/32, group = 800; 1.2.3.4/32, group = 606; };
+group-map in role = nat number = 500
+ { 0/0, group = 10; 6/32, group = 800; 1.2.3.4/32, group = 606; };
+group-map in role = auth number = 500
+ { 0/0, group = 10; 7/32, group = 800; 1.2.3.4/32, group = 606; };
+group-map in role = count number = 500
+ { 0/0, group = 10; 8/32, group = 800; 1.2.3.4/32, group = 606; };
+
diff --git a/contrib/ipfilter/test/regress/n10 b/contrib/ipfilter/test/regress/n10
new file mode 100644
index 0000000..0f48192
--- /dev/null
+++ b/contrib/ipfilter/test/regress/n10
@@ -0,0 +1,3 @@
+map ppp0 0/0 -> 203.203.203.203/32 mssclamp 100
+map ppp0 0/0 -> 203.203.203.203/32 mssclamp 1000
+map ppp0 0/0 -> 203.203.203.203/32 mssclamp 10000
diff --git a/contrib/ipfilter/test/regress/n11 b/contrib/ipfilter/test/regress/n11
new file mode 100644
index 0000000..8cdf7fc
--- /dev/null
+++ b/contrib/ipfilter/test/regress/n11
@@ -0,0 +1,3 @@
+bimap zx0 10.1.1.1/32 -> 1.6.7.8/32
+bimap zx0 10.1.1.0/24 -> 10.2.2.2/32
+bimap zx0 10.1.1.0/24 -> 10.3.4.5/24
diff --git a/contrib/ipfilter/test/regress/n12 b/contrib/ipfilter/test/regress/n12
new file mode 100644
index 0000000..225675b
--- /dev/null
+++ b/contrib/ipfilter/test/regress/n12
@@ -0,0 +1 @@
+map le0 192.168.126.0/24 -> 0/32 portmap tcp/udp 10000:20000
diff --git a/contrib/ipfilter/test/regress/n4 b/contrib/ipfilter/test/regress/n4
index b066c7a..e7c0314 100644
--- a/contrib/ipfilter/test/regress/n4
+++ b/contrib/ipfilter/test/regress/n4
@@ -3,3 +3,4 @@ rdr zx0 10.1.1.0/24 port 23 -> 10.2.2.1 port 10023 tcp
rdr zx0 0/0 port 23 -> 10.2.2.1 port 10023 tcp
rdr zx0 10.1.1.0/24 port 53 -> 10.2.2.1 port 10053 udp
rdr zx0 10.1.1.0/24 port 0 -> 10.2.2.1 port 0 tcp
+rdr zx0 10.1.1.0/24 port 0 -> 10.2.2.1 port 0 ip
diff --git a/contrib/ipfilter/test/regress/n7 b/contrib/ipfilter/test/regress/n7
index 4abde53..be995c2 100644
--- a/contrib/ipfilter/test/regress/n7
+++ b/contrib/ipfilter/test/regress/n7
@@ -1,2 +1,3 @@
rdr zx0 10.1.1.1/32 port 23-79 -> 10.2.2.1 port 10023 tcp
+rdr zx0 10.1.1.1/32 port 23-79 -> 10.2.2.1 port = 10023 tcp
rdr zx0 10.1.1.0/24 port 80 -> 10.2.2.1,1.2.2.129 port 3128 tcp
diff --git a/contrib/ipfilter/test/regress/n8 b/contrib/ipfilter/test/regress/n8
new file mode 100644
index 0000000..bf0e94f
--- /dev/null
+++ b/contrib/ipfilter/test/regress/n8
@@ -0,0 +1 @@
+map icmp0 2.2.2.0/24 -> 10.10.10.0/24
diff --git a/contrib/ipfilter/test/regress/n9 b/contrib/ipfilter/test/regress/n9
new file mode 100644
index 0000000..81a7ccd
--- /dev/null
+++ b/contrib/ipfilter/test/regress/n9
@@ -0,0 +1 @@
+rdr icmp0 4.4.4.0/24 port 0 -> 10.10.10.1 port 0 ip
diff --git a/contrib/ipfilter/test/regress/ni10.nat b/contrib/ipfilter/test/regress/ni10.nat
index 5257818..2a04ef7 100644
--- a/contrib/ipfilter/test/regress/ni10.nat
+++ b/contrib/ipfilter/test/regress/ni10.nat
@@ -1 +1 @@
-rdr df0 2.2.2.2/32 port 0 -> 6.6.6.6 port 0 ip
+rdr df0 2.2.2.2/32 -> 6.6.6.6
diff --git a/contrib/ipfilter/test/regress/ni11.nat b/contrib/ipfilter/test/regress/ni11.nat
index 87e9673..1d0018c 100644
--- a/contrib/ipfilter/test/regress/ni11.nat
+++ b/contrib/ipfilter/test/regress/ni11.nat
@@ -1 +1 @@
-rdr df0 10.0.0.0/8 port 1000-2000 -> 1.1.1.1 port 40000 tcp/udp
+rdr df0 10.0.0.0/8 port 1000:2000 -> 1.1.1.1 port 40000 tcp/udp
diff --git a/contrib/ipfilter/test/regress/ni12.ipf b/contrib/ipfilter/test/regress/ni12.ipf
new file mode 100644
index 0000000..4151b6e
--- /dev/null
+++ b/contrib/ipfilter/test/regress/ni12.ipf
@@ -0,0 +1,4 @@
+block in all
+block out all
+pass in proto udp from any to any keep state
+pass in proto tcp from any to any flags S keep state
diff --git a/contrib/ipfilter/test/regress/ni12.nat b/contrib/ipfilter/test/regress/ni12.nat
new file mode 100644
index 0000000..8c36bc8
--- /dev/null
+++ b/contrib/ipfilter/test/regress/ni12.nat
@@ -0,0 +1 @@
+rdr df0 10.0.0.0/8 port 1000:2000 -> 1.1.1.1 port = 40000 tcp/udp
diff --git a/contrib/ipfilter/test/regress/ni13.ipf b/contrib/ipfilter/test/regress/ni13.ipf
new file mode 100644
index 0000000..04b6d13
--- /dev/null
+++ b/contrib/ipfilter/test/regress/ni13.ipf
@@ -0,0 +1,3 @@
+pass in quick on pcn1 proto tcp from any to any port = 1723 keep state
+block in all
+block out all
diff --git a/contrib/ipfilter/test/regress/ni13.nat b/contrib/ipfilter/test/regress/ni13.nat
new file mode 100644
index 0000000..7a879d8
--- /dev/null
+++ b/contrib/ipfilter/test/regress/ni13.nat
@@ -0,0 +1 @@
+rdr pcn1 192.168.113.3/32 port 1723 -> 0.0.0.0 port 1723 proxy pptp
diff --git a/contrib/ipfilter/test/regress/ni14.ipf b/contrib/ipfilter/test/regress/ni14.ipf
new file mode 100644
index 0000000..04b6d13
--- /dev/null
+++ b/contrib/ipfilter/test/regress/ni14.ipf
@@ -0,0 +1,3 @@
+pass in quick on pcn1 proto tcp from any to any port = 1723 keep state
+block in all
+block out all
diff --git a/contrib/ipfilter/test/regress/ni14.nat b/contrib/ipfilter/test/regress/ni14.nat
new file mode 100644
index 0000000..c546e99
--- /dev/null
+++ b/contrib/ipfilter/test/regress/ni14.nat
@@ -0,0 +1 @@
+rdr pcn1 192.168.113.3/32 port 1723 -> 127.0.0.1 port 1723 proxy pptp
diff --git a/contrib/ipfilter/test/regress/ni15.ipf b/contrib/ipfilter/test/regress/ni15.ipf
new file mode 100644
index 0000000..1b9a013
--- /dev/null
+++ b/contrib/ipfilter/test/regress/ni15.ipf
@@ -0,0 +1,3 @@
+pass out quick on pcn1 proto tcp from any to any port = 1723 keep state
+block in all
+block out all
diff --git a/contrib/ipfilter/test/regress/ni15.nat b/contrib/ipfilter/test/regress/ni15.nat
new file mode 100644
index 0000000..420c7b7
--- /dev/null
+++ b/contrib/ipfilter/test/regress/ni15.nat
@@ -0,0 +1 @@
+map pcn1 0/0 -> 0/0 proxy port 1723 pptp/tcp
diff --git a/contrib/ipfilter/test/regress/ni16.ipf b/contrib/ipfilter/test/regress/ni16.ipf
new file mode 100644
index 0000000..1b9a013
--- /dev/null
+++ b/contrib/ipfilter/test/regress/ni16.ipf
@@ -0,0 +1,3 @@
+pass out quick on pcn1 proto tcp from any to any port = 1723 keep state
+block in all
+block out all
diff --git a/contrib/ipfilter/test/regress/ni16.nat b/contrib/ipfilter/test/regress/ni16.nat
new file mode 100644
index 0000000..5fad3cd
--- /dev/null
+++ b/contrib/ipfilter/test/regress/ni16.nat
@@ -0,0 +1 @@
+map pcn1 10.2.2.2/32 -> 0/32 proxy port 1723 pptp/tcp
diff --git a/contrib/ipfilter/test/regress/ni6.ipf b/contrib/ipfilter/test/regress/ni6.ipf
new file mode 100644
index 0000000..f5b83b2
--- /dev/null
+++ b/contrib/ipfilter/test/regress/ni6.ipf
@@ -0,0 +1,9 @@
+block out log quick on qfe0 from 192.168.7.0/24 to any
+block out log quick on nf0 from 192.168.6.0/24 to any
+pass in quick on nf0 proto tcp from any to any port = 111 flags S keep state
+pass in quick on nf0 proto udp from any to any port = 111 keep state
+block return-rst in log quick on nf0 proto tcp from any to any
+block in log quick on nf0 from 192.168.7.0/24 to any
+block return-rst in log quick on qfe0 proto tcp from any to any
+block in log quick on qfe0 from 192.168.6.0/24 to any
+
diff --git a/contrib/ipfilter/test/regress/ni6.nat b/contrib/ipfilter/test/regress/ni6.nat
new file mode 100644
index 0000000..00d57d0
--- /dev/null
+++ b/contrib/ipfilter/test/regress/ni6.nat
@@ -0,0 +1,3 @@
+rdr nf0 192.168.6.2 port 111 -> 192.168.7.1 port 111 udp proxy rpcbu
+rdr nf0 192.168.6.2 port 111 -> 192.168.7.1 port 111 tcp proxy rpcbt
+map qfe0 192.168.6.0/24 -> 192.168.7.2/32
diff --git a/contrib/ipfilter/test/regress/ni7.nat b/contrib/ipfilter/test/regress/ni7.nat
index 5257818..2a04ef7 100644
--- a/contrib/ipfilter/test/regress/ni7.nat
+++ b/contrib/ipfilter/test/regress/ni7.nat
@@ -1 +1 @@
-rdr df0 2.2.2.2/32 port 0 -> 6.6.6.6 port 0 ip
+rdr df0 2.2.2.2/32 -> 6.6.6.6
diff --git a/contrib/ipfilter/test/regress/ni8.nat b/contrib/ipfilter/test/regress/ni8.nat
index 87e9673..1d0018c 100644
--- a/contrib/ipfilter/test/regress/ni8.nat
+++ b/contrib/ipfilter/test/regress/ni8.nat
@@ -1 +1 @@
-rdr df0 10.0.0.0/8 port 1000-2000 -> 1.1.1.1 port 40000 tcp/udp
+rdr df0 10.0.0.0/8 port 1000:2000 -> 1.1.1.1 port 40000 tcp/udp
diff --git a/contrib/ipfilter/test/regress/ni9.ipf b/contrib/ipfilter/test/regress/ni9.ipf
new file mode 100644
index 0000000..6666241
--- /dev/null
+++ b/contrib/ipfilter/test/regress/ni9.ipf
@@ -0,0 +1 @@
+pass in quick proto tcp from any to any flags S/SAFR keep state
diff --git a/contrib/ipfilter/test/regress/ni9.nat b/contrib/ipfilter/test/regress/ni9.nat
new file mode 100644
index 0000000..8c36bc8
--- /dev/null
+++ b/contrib/ipfilter/test/regress/ni9.nat
@@ -0,0 +1 @@
+rdr df0 10.0.0.0/8 port 1000:2000 -> 1.1.1.1 port = 40000 tcp/udp
diff --git a/contrib/ipfilter/test/regress/p1.ipf b/contrib/ipfilter/test/regress/p1.ipf
new file mode 100644
index 0000000..acaf639
--- /dev/null
+++ b/contrib/ipfilter/test/regress/p1.ipf
@@ -0,0 +1 @@
+pass in from pool/100 to any
diff --git a/contrib/ipfilter/test/regress/p1.pool b/contrib/ipfilter/test/regress/p1.pool
new file mode 100644
index 0000000..14ae3a3
--- /dev/null
+++ b/contrib/ipfilter/test/regress/p1.pool
@@ -0,0 +1,2 @@
+table role = ipf type = tree number = 100
+ { 1.1.1.1/32; !2.2.0.0/16; 2.2.2.0/24; };
diff --git a/contrib/ipfilter/test/regress/p2.ipf b/contrib/ipfilter/test/regress/p2.ipf
new file mode 100644
index 0000000..5b58647
--- /dev/null
+++ b/contrib/ipfilter/test/regress/p2.ipf
@@ -0,0 +1 @@
+pass out from hash=(127.0.0.1,4.4.0.0/16) to any
diff --git a/contrib/ipfilter/test/regress/p3.ipf b/contrib/ipfilter/test/regress/p3.ipf
new file mode 100644
index 0000000..aad7cb3
--- /dev/null
+++ b/contrib/ipfilter/test/regress/p3.ipf
@@ -0,0 +1,6 @@
+call now fr_srcgrpmap/1010 in all
+call now fr_dstgrpmap/2010 out all
+pass in all group 1020
+block in all group 1030
+pass out all group 2020
+block out all group 2040
diff --git a/contrib/ipfilter/test/regress/p3.pool b/contrib/ipfilter/test/regress/p3.pool
new file mode 100644
index 0000000..3fadd59
--- /dev/null
+++ b/contrib/ipfilter/test/regress/p3.pool
@@ -0,0 +1,4 @@
+group-map in role = ipf number = 1010
+ { 1.1.1.1/32, group = 1020; 3.3.0.0/16, group = 1030; };
+group-map out role = ipf number = 2010 group = 2020
+ { 2.2.2.2/32; 4.4.0.0/16; 5.0.0.0/8, group = 2040; };
diff --git a/contrib/ipfilter/test/test.format b/contrib/ipfilter/test/test.format
new file mode 100644
index 0000000..090c8a9
--- /dev/null
+++ b/contrib/ipfilter/test/test.format
@@ -0,0 +1,77 @@
+#test input-format output-format
+bpf-f1 text text
+bpf1 text text
+f1 text text
+f2 text text
+f3 text text
+f4 text text
+f5 text text
+f6 text text
+f7 text text
+f8 text text
+f9 text text
+f10 text text
+f11 text text
+f12 hex hex
+f13 hex hex
+f14 text text
+f15 text text
+f16 text text
+f17 hex hex
+i1 text text
+i2 text text
+i3 text text
+i4 text text
+i5 text text
+i6 text text
+i7 text text
+i8 text text
+i9 text text
+i10 text text
+i11 text text
+i12 text text
+i13 text text
+i14 text text
+i15 text text
+in1 text text
+in2 text text
+in3 text text
+in4 text text
+in5 text text
+in6 text text
+ip1 text text
+ipv6.1 hex hex
+ipv6.2 hex hex
+ipv6.3 hex hex
+l1 hex hex
+n1 text text
+n2 text text
+n3 text text
+n4 text text
+n5 text text
+n6 text text
+n7 text text
+n8 hex hex fr_update_ipid=0
+n9 hex hex fr_update_ipid=0
+n10 hex hex fr_update_ipid=0
+n11 text text
+n12 hex hex fr_update_ipid=0
+ni1 hex hex fr_update_ipid=1
+ni2 hex hex fr_update_ipid=1
+ni3 hex hex fr_update_ipid=1
+ni4 hex hex fr_update_ipid=1
+ni5 hex hex fr_update_ipid=1
+ni6 hex hex fr_update_ipid=1
+ni7 hex hex fr_update_ipid=1
+ni8 hex hex fr_update_ipid=1
+ni9 hex hex fr_update_ipid=1
+ni10 hex hex fr_update_ipid=1
+ni11 hex hex fr_update_ipid=1
+ni12 hex hex fr_update_ipid=1
+ni13 hex hex fr_update_ipid=1
+ni14 hex hex fr_update_ipid=1
+ni15 hex hex fr_update_ipid=1
+ni16 hex hex fr_update_ipid=1
+p1 text text
+p2 text text
+p3 text text
diff --git a/contrib/ipfilter/test/vfycksum.pl b/contrib/ipfilter/test/vfycksum.pl
index b6a2076..9cb47f6 100755
--- a/contrib/ipfilter/test/vfycksum.pl
+++ b/contrib/ipfilter/test/vfycksum.pl
@@ -62,7 +62,7 @@ sub tcpcheck {
local($base) = $_[0];
local($hl) = $bytes[$base] / 256;
return if (($hl >> 4) != 4);
- return if ($bytes[3] & 0x1fff);
+ return if ($bytes[$base + 3] & 0x1fff);
$hl &= 0xf;
$hl <<= 1;
@@ -79,10 +79,27 @@ sub tcpcheck {
local($thl) = $bytes[$base + $hl + 6] >> 8;
$thl &= 0xf0;
$thl >>= 2;
- if (($bytes[$base + 1] > ($cnt - $base) * 2) ||
- (($cnt - $base) * 2 < $hl + 20) ||
- (($cnt - $base) * 2 < $hl + $thl)) {
- print " TCP: missing data";
+
+ $x = $bytes[$base + 1];
+ $y = ($cnt - $base) * 2;
+ $z = 0;
+ if ($bytes[$base + 1] > ($cnt - $base) * 2) {
+ print "[cnt=$cnt base=$base]";
+ $x = $bytes[$base + 1];
+ $y = ($cnt - $base) * 2;
+ $z = 1;
+ } elsif (($cnt - $base) * 2 < $hl + 20) {
+ $x = ($cnt - $base) * 2;
+ $y = $hl + 20;
+ $z = 2;
+ } elsif (($cnt - $base) * 2 < $hl + $thl) {
+ $x = ($cnt - $base) * 2;
+ $y = $hl + $thl;
+ $z = 3;
+ }
+
+ if ($z) {
+ print " TCP: missing data($x $y $z)";
return;
}
@@ -95,7 +112,7 @@ sub tcpcheck {
$bytes[$tcpat + 8] = $osum;
printf " TCP: (%x) %x != %x", $hs, $osum, $hs2;
} else {
- print " TCP: ok";
+ print " TCP: ok ($x $y)";
}
}
@@ -161,8 +178,15 @@ sub icmpcheck {
local($len) = $bytes[$base + 1] - ($hl << 1);
- if ($len > $cnt * 2) {
- print "missing icmp data\n";
+ if ($bytes[$base + 1] > ($cnt - $base) * 2) {
+ print " ICMP: missing data(1)";
+ return;
+ } elsif ($bytes[$base + 1] < ($hl << 1) + 8) {
+ print " ICMP: missing data(2)";
+ return;
+ } elsif (($cnt - $base) * 2 < ($hl << 1) + 8) {
+ print " ICMP: missing data(3)";
+ return;
}
local($osum) = $bytes[$base + $hl + 1];
@@ -240,6 +264,7 @@ $b=$_;
$y = hex $x;
s/[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F] *(.*)/$1/;
$bytes[$cnt] = $y;
+#print "bytes[$cnt] = $x\n";
$cnt++;
}
OpenPOWER on IntegriCloud