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