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