xref: /openbsd/regress/sbin/pfctl/pfr.exec (revision 51f61a79)
1033527c7Scedric#!/bin/ksh
2*51f61a79SbluhmPFCTL="${PFCTL:=/sbin/pfctl}"
3d00d6a82ScedricD=`dirname $1`
42dc8cc6fSmpfA='regress'
5*51f61a79Sbluhm$PFCTL -a $A -FT 2>/dev/null
6*51f61a79Sbluhm$PFCTL -a $A -Fr 2>/dev/null
7eb1a5414SmpfKT_R=`vmstat -mv | awk '/pfrktable/{print $3}'`
8eb1a5414SmpfKT_I=`vmstat -mv | awk '/pfrktable/{print $5}'`
99c7c766bSmcbrideKEP_R=`vmstat -mv | awk '/pfrke_plain /{print $3}'`
109c7c766bSmcbrideKEP_I=`vmstat -mv | awk '/pfrke_plain /{print $5}'`
119c7c766bSmcbrideKER_R=`vmstat -mv | awk '/pfrke_route /{print $3}'`
129c7c766bSmcbrideKER_I=`vmstat -mv | awk '/pfrke_route /{print $5}'`
139c7c766bSmcbrideKEC_R=`vmstat -mv | awk '/pfrke_cost /{print $3}'`
149c7c766bSmcbrideKEC_I=`vmstat -mv | awk '/pfrke_cost /{print $5}'`
15033527c7Scedricecho "# create"
16*51f61a79Sbluhmecho "table <regress> persist" | $PFCTL -a $A -f - 2>&1 || exit 1
17033527c7Scedricfor LINE in `sed -e "s/ /_/g" $1`; do
18033527c7Scedric	RESULT=`echo $LINE | awk '{split($1,a,"_");print a[1]}'`
19033527c7Scedric	case $RESULT in
20033527c7Scedric		pass|fail) ;;
21033527c7Scedric		*) continue ;;
22033527c7Scedric	esac
23033527c7Scedric	CMD=`echo $LINE | awk '{split($1,a,"_");print a[2]}'`
24033527c7Scedric	ARGSX=`echo $LINE | awk '{split($1,a,"_");for(i=3;a[i];i++)print a[i]}'`
25033527c7Scedric	ARGS=""
26dea340d2Scedric	for ARG in $ARGSX; do
27dea340d2Scedric		if [ "X$ARGS" = "X" ]; then
28dea340d2Scedric			ARGS="$ARG"
29dea340d2Scedric		else
30dea340d2Scedric			ARGS="$ARGS $ARG"
31dea340d2Scedric		fi
32dea340d2Scedric	done
33033527c7Scedric	if [ "$RESULT" = "pass" ]; then case $CMD in
34dea340d2Scedric	add|delete|replace)
35dea340d2Scedric		echo "# pass $CMD -n $ARGS"
36*51f61a79Sbluhm		$PFCTL -a $A -t regress -nT $CMD $ARGS 2>&1 | sort || exit 1
37dea340d2Scedric		echo "# pass $CMD -nf-"
38*51f61a79Sbluhm		echo "# test\n" $ARGSX | $PFCTL -a $A -t regress -nT $CMD -f- \
39e4ab4bd2Scedric			2>&1 | sort || exit 1
40dea340d2Scedric		echo "# pass $CMD -nqv $ARGS"
41*51f61a79Sbluhm		$PFCTL -a $A -t regress -nqvT $CMD $ARGS 2>&1 | sort || exit 1
42dea340d2Scedric		echo "# pass $CMD -nqvv $ARGS"
43*51f61a79Sbluhm		$PFCTL -a $A -t regress -nqvvT $CMD $ARGS 2>&1 | sort || exit 1
44033527c7Scedric		;;
45033527c7Scedric	esac fi
46dea340d2Scedric	echo "# $RESULT $CMD $ARGS"
47033527c7Scedric	if [ "$RESULT" = "pass" ]; then
48dea340d2Scedric		case $CMD in
49dea340d2Scedric		list)
50*51f61a79Sbluhm			$PFCTL -a $A -sT 2>&1
51dea340d2Scedric			echo "# pass $CMD -v"
52*51f61a79Sbluhm			$PFCTL -a $A -gvsT 2>&1
53dea340d2Scedric			;;
54dea340d2Scedric		load)
55*51f61a79Sbluhm			echo $ARGS | sed "s,DIR,$D,g" | $PFCTL -a $A -f- \
5634cce5a3Scedric			    || exit 1
57dea340d2Scedric			;;
58dea340d2Scedric		rule)
59*51f61a79Sbluhm			echo $ARGS | $PFCTL -a $A -f- 2>&1 || exit 1
60dea340d2Scedric			;;
6150be49e7Smcbride		show)
62*51f61a79Sbluhm			$PFCTL -qvv -a $A -t regress -T $CMD $ARGS 2>&1 | \
6350be49e7Smcbride			    grep -v "Cleared:"
6450be49e7Smcbride			;;
65dea340d2Scedric		*)
66*51f61a79Sbluhm			$PFCTL -a $A -t regress -T $CMD $ARGS 2>&1 | sort \
6734cce5a3Scedric			    || exit 1
68dea340d2Scedric			;;
69dea340d2Scedric		esac
70033527c7Scedric	else
71dea340d2Scedric		case $CMD in
72dea340d2Scedric		load)
73*51f61a79Sbluhm			echo ARGS | sed "s,DIR,$D,g" | $PFCTL -a $A -Tl -f- \
7434cce5a3Scedric			    && exit 1
75dea340d2Scedric			;;
76dea340d2Scedric		rule)
77*51f61a79Sbluhm			echo $ARGS | $PFCTL -a $A -f- 2>&1 && exit 1
7834cce5a3Scedric			;;
79dea340d2Scedric		*)
80*51f61a79Sbluhm			$PFCTL -a $A -t regress -T $CMD $ARGS 2>&1 && exit 1
81dea340d2Scedric			;;
82dea340d2Scedric		esac
83033527c7Scedric	fi
84033527c7Scedricdone
85033527c7Scedricecho "# kill"
86*51f61a79Sbluhm$PFCTL -a $A -FT 2>&1
87*51f61a79Sbluhm$PFCTL -a $A -Fr 2>&1
88eb1a5414Smpflet KT_R=`vmstat -mv | awk '/pfrktable/{print $3}'`-$KT_R
89eb1a5414Smpflet KT_I=`vmstat -mv | awk '/pfrktable/{print $5}'`-$KT_I
90eb1a5414Smpflet KT_RL=$KT_R-$KT_I
919c7c766bSmcbridelet KEP_R=`vmstat -mv | awk '/pfrke_plain /{print $3}'`-$KEP_R
929c7c766bSmcbridelet KEP_I=`vmstat -mv | awk '/pfrke_plain /{print $5}'`-$KEP_I
939c7c766bSmcbridelet KEP_RL=$KEP_R-$KEP_I
949c7c766bSmcbridelet KER_R=`vmstat -mv | awk '/pfrke_route /{print $3}'`-$KER_R
959c7c766bSmcbridelet KER_I=`vmstat -mv | awk '/pfrke_route /{print $5}'`-$KER_I
969c7c766bSmcbridelet KER_RL=$KER_R-$KER_I
979c7c766bSmcbridelet KEC_R=`vmstat -mv | awk '/pfrke_cost /{print $3}'`-$KEC_R
989c7c766bSmcbridelet KEC_I=`vmstat -mv | awk '/pfrke_cost /{print $5}'`-$KEC_I
999c7c766bSmcbridelet KEC_RL=$KEC_R-$KEC_I
100eb1a5414Smpfecho "ktable: $KT_R allocated, $KT_RL released, $KT_I leaked."
1019c7c766bSmcbrideecho "pfrke_plain: $KEP_R allocated, $KEP_RL released, $KEP_I leaked."
1029c7c766bSmcbrideecho "pfrke_route: $KER_R allocated, $KER_RL released, $KER_I leaked."
1039c7c766bSmcbrideecho "pfrke_cost: $KEC_R allocated, $KEC_RL released, $KEC_I leaked."
104*51f61a79Sbluhm[ "$KT_I" = "0" -a "$KEP_I" = "0"  -a "$KER_I" = "0" -a "$KEC_I" = "0" ] || \
105*51f61a79Sbluhm    exit 1
106