xref: /openbsd/regress/sbin/pfctl/pfr.exec (revision 4bdff4be)
1#!/bin/ksh
2PFCTL="${PFCTL:=/sbin/pfctl}"
3D=`dirname $1`
4A='regress'
5$PFCTL -a $A -FT 2>/dev/null
6$PFCTL -a $A -Fr 2>/dev/null
7KT_R=`vmstat -mv | awk '/pfrktable/{print $3}'`
8KT_I=`vmstat -mv | awk '/pfrktable/{print $5}'`
9KEP_R=`vmstat -mv | awk '/pfrke_plain /{print $3}'`
10KEP_I=`vmstat -mv | awk '/pfrke_plain /{print $5}'`
11KER_R=`vmstat -mv | awk '/pfrke_route /{print $3}'`
12KER_I=`vmstat -mv | awk '/pfrke_route /{print $5}'`
13KEC_R=`vmstat -mv | awk '/pfrke_cost /{print $3}'`
14KEC_I=`vmstat -mv | awk '/pfrke_cost /{print $5}'`
15echo "# create"
16echo "table <regress> persist" | $PFCTL -a $A -f - 2>&1 || exit 1
17for LINE in `sed -e "s/ /_/g" $1`; do
18	RESULT=`echo $LINE | awk '{split($1,a,"_");print a[1]}'`
19	case $RESULT in
20		pass|fail) ;;
21		*) continue ;;
22	esac
23	CMD=`echo $LINE | awk '{split($1,a,"_");print a[2]}'`
24	ARGSX=`echo $LINE | awk '{split($1,a,"_");for(i=3;a[i];i++)print a[i]}'`
25	ARGS=""
26	for ARG in $ARGSX; do
27		if [ "X$ARGS" = "X" ]; then
28			ARGS="$ARG"
29		else
30			ARGS="$ARGS $ARG"
31		fi
32	done
33	if [ "$RESULT" = "pass" ]; then case $CMD in
34	add|delete|replace)
35		echo "# pass $CMD -n $ARGS"
36		$PFCTL -a $A -t regress -nT $CMD $ARGS 2>&1 | sort || exit 1
37		echo "# pass $CMD -nf-"
38		echo "# test\n" $ARGSX | $PFCTL -a $A -t regress -nT $CMD -f- \
39			2>&1 | sort || exit 1
40		echo "# pass $CMD -nqv $ARGS"
41		$PFCTL -a $A -t regress -nqvT $CMD $ARGS 2>&1 | sort || exit 1
42		echo "# pass $CMD -nqvv $ARGS"
43		$PFCTL -a $A -t regress -nqvvT $CMD $ARGS 2>&1 | sort || exit 1
44		;;
45	esac fi
46	echo "# $RESULT $CMD $ARGS"
47	if [ "$RESULT" = "pass" ]; then
48		case $CMD in
49		list)
50			$PFCTL -a $A -sT 2>&1
51			echo "# pass $CMD -v"
52			$PFCTL -a $A -gvsT 2>&1
53			;;
54		load)
55			echo $ARGS | sed "s,DIR,$D,g" | $PFCTL -a $A -f- \
56			    || exit 1
57			;;
58		rule)
59			echo $ARGS | $PFCTL -a $A -f- 2>&1 || exit 1
60			;;
61		show)
62			$PFCTL -qvv -a $A -t regress -T $CMD $ARGS 2>&1 | \
63			    grep -v "Cleared:"
64			;;
65		*)
66			$PFCTL -a $A -t regress -T $CMD $ARGS 2>&1 | sort \
67			    || exit 1
68			;;
69		esac
70	else
71		case $CMD in
72		load)
73			echo ARGS | sed "s,DIR,$D,g" | $PFCTL -a $A -Tl -f- \
74			    && exit 1
75			;;
76		rule)
77			echo $ARGS | $PFCTL -a $A -f- 2>&1 && exit 1
78			;;
79		*)
80			$PFCTL -a $A -t regress -T $CMD $ARGS 2>&1 && exit 1
81			;;
82		esac
83	fi
84done
85echo "# kill"
86$PFCTL -a $A -FT 2>&1
87$PFCTL -a $A -Fr 2>&1
88let KT_R=`vmstat -mv | awk '/pfrktable/{print $3}'`-$KT_R
89let KT_I=`vmstat -mv | awk '/pfrktable/{print $5}'`-$KT_I
90let KT_RL=$KT_R-$KT_I
91let KEP_R=`vmstat -mv | awk '/pfrke_plain /{print $3}'`-$KEP_R
92let KEP_I=`vmstat -mv | awk '/pfrke_plain /{print $5}'`-$KEP_I
93let KEP_RL=$KEP_R-$KEP_I
94let KER_R=`vmstat -mv | awk '/pfrke_route /{print $3}'`-$KER_R
95let KER_I=`vmstat -mv | awk '/pfrke_route /{print $5}'`-$KER_I
96let KER_RL=$KER_R-$KER_I
97let KEC_R=`vmstat -mv | awk '/pfrke_cost /{print $3}'`-$KEC_R
98let KEC_I=`vmstat -mv | awk '/pfrke_cost /{print $5}'`-$KEC_I
99let KEC_RL=$KEC_R-$KEC_I
100echo "ktable: $KT_R allocated, $KT_RL released, $KT_I leaked."
101echo "pfrke_plain: $KEP_R allocated, $KEP_RL released, $KEP_I leaked."
102echo "pfrke_route: $KER_R allocated, $KER_RL released, $KER_I leaked."
103echo "pfrke_cost: $KEC_R allocated, $KEC_RL released, $KEC_I leaked."
104[ "$KT_I" = "0" -a "$KEP_I" = "0"  -a "$KER_I" = "0" -a "$KEC_I" = "0" ] || \
105    exit 1
106