1#!/bin/sh 2 3DIR="$( cd "$( dirname "$0" )" && pwd )" 4WPAS=$DIR/../../wpa_supplicant/wpa_supplicant 5WPACLI=$DIR/../../wpa_supplicant/wpa_cli 6HAPD=$DIR/../../hostapd/hostapd 7HAPD_AS=$DIR/../../hostapd/hostapd 8HAPDCLI=$DIR/../../hostapd/hostapd_cli 9WLANTEST=$DIR/../../wlantest/wlantest 10HLR_AUC_GW=$DIR/../../hostapd/hlr_auc_gw 11 12if [ -z "$LOGDIR" ] ; then 13 DATE="$(date +%s)" 14 LOGDIR="$DIR/logs/$DATE" 15 mkdir -p $LOGDIR 16else 17 if [ -e $LOGDIR/alt-wpa_supplicant/wpa_supplicant/wpa_supplicant ]; then 18 WPAS=$LOGDIR/alt-wpa_supplicant/wpa_supplicant/wpa_supplicant 19 WPACLI=$LOGDIR/alt-wpa_supplicant/wpa_supplicant/wpa_cli 20 # extra code coverage 21 $WPAS > /dev/null 2>&1 22 $WPAS -efoo -Ifoo -mfoo -ofoo -Ofoo -pfoo -Pfoo -h > /dev/null 2>&1 23 $WPAS -bfoo -B -Cfoo -q -W -N -L > /dev/null 2>&1 24 $WPAS -T -v > /dev/null 2>&1 25 $WPAS -u -z > /dev/null 2>&1 26 fi 27 if [ -e $LOGDIR/alt-hostapd/hostapd/hostapd ]; then 28 HAPD=$LOGDIR/alt-hostapd/hostapd/hostapd 29 HAPDCLI=$LOGDIR/alt-hostapd/hostapd/hostapd_cli 30 # extra code coverage 31 $HAPD > /dev/null 2>&1 32 $HAPD -v > /dev/null 2>&1 33 $HAPD -B -efoo -Pfoo -T -bfoo -h > /dev/null 2>&1 34 $HAPD -ufoo > /dev/null 2>&1 35 $HAPD -u00:11:22:33:44:55 > /dev/null 2>&1 36 $HAPD -gfoo > /dev/null 2>&1 37 $HAPD -Gfoo-not-exists > /dev/null 2>&1 38 $HAPD -z > /dev/null 2>&1 39 $HAPD -i foo1,foo2,foo3 > /dev/null 2>&1 40 fi 41 if [ -e $LOGDIR/alt-hostapd-as/hostapd/hostapd ]; then 42 HAPD_AS=$LOGDIR/alt-hostapd-as/hostapd/hostapd 43 fi 44 if [ -e $LOGDIR/alt-hlr_auc_gw/hostapd/hlr_auc_gw ]; then 45 HLR_AUC_GW=$LOGDIR/alt-hlr_auc_gw/hostapd/hlr_auc_gw 46 # extra code coverage 47 $HLR_AUC_GW > /dev/null 2>&1 48 $HLR_AUC_GW -Dfoo -i7 -sfoo -h > /dev/null 2>&1 49 $HLR_AUC_GW -i100 > /dev/null 2>&1 50 $HLR_AUC_GW -z > /dev/null 2>&1 51 fi 52fi 53 54LOGBASEDIR="$( cd "$(dirname "$LOGDIR")" && pwd )" 55if test "$LOGBASEDIR" = "$DIR/logs" -a -w "$LOGBASEDIR" ; then 56 rm -rf "$LOGBASEDIR/current" 57 ln -sf "$(basename "$LOGDIR")" "$LOGBASEDIR/current" 58fi 59 60if groups | tr ' ' "\n" | grep -q ^admin$; then 61 GROUP=admin 62elif groups | tr ' ' "\n" | grep -q ^wheel$; then 63 GROUP=wheel 64else 65 GROUP=adm 66fi 67 68for i in 0 1 2; do 69 sed "s/ GROUP=.*$/ GROUP=$GROUP/" "$DIR/p2p$i.conf" > "$LOGDIR/p2p$i.conf" 70done 71 72sed "s/group=admin/group=$GROUP/;s%LOGDIR%$LOGDIR%g" "$DIR/auth_serv/as.conf" > "$LOGDIR/as.conf" 73sed "s/group=admin/group=$GROUP/;s%LOGDIR%$LOGDIR%g" "$DIR/auth_serv/as2.conf" > "$LOGDIR/as2.conf" 74 75unset VM 76if [ "$1" = "VM" ]; then 77 VM="y" 78 shift 79fi 80 81if [ "$1" = "valgrind" ]; then 82 VALGRIND=y 83 if [ -r "$DIR/valgrind.suppressions" ]; then 84 VALGRIND_SUPP=" --gen-suppressions=all --suppressions=$DIR/valgrind.suppressions" 85 else 86 VALGRIND_SUPP="" 87 fi 88 VALGRIND_WPAS="valgrind --log-file=$LOGDIR/valgrind-wlan%d --leak-check=full --num-callers=20$VALGRIND_SUPP" 89 VALGRIND_HAPD="valgrind --log-file=$LOGDIR/valgrind-hostapd --leak-check=full --num-callers=20$VALGRIND_SUPP" 90 chmod -f a+rx $WPAS 91 chmod -f a+rx $HAPD 92 chmod -f a+rx $HAPD_AS 93 HAPD_AS="valgrind --log-file=$LOGDIR/valgrind-auth-serv --leak-check=full --num-callers=20$VALGRIND_SUPP $HAPD_AS" 94 shift 95else 96 unset VALGRIND 97 VALGRIND_WPAS= 98 VALGRIND_HAPD= 99fi 100 101if [ "$1" = "trace" ]; then 102 TRACE="T" 103 shift 104else 105 TRACE="" 106fi 107 108$DIR/stop.sh 109 110TMP=$1 111if [ x${TMP%=[0-9]*} = "xchannels" ]; then 112 NUM_CH=${TMP#channels=} 113 shift 114else 115 NUM_CH=1 116fi 117 118test -d /sys/module/mac80211_hwsim || sudo modprobe mac80211_hwsim radios=7 channels=$NUM_CH support_p2p_device=0 dyndbg=+p 119 120sudo ip link set hwsim0 up 121sudo $WLANTEST -i hwsim0 -n $LOGDIR/hwsim0.pcapng -c -dtN -L $LOGDIR/hwsim0 & 122for i in 0 1 2; do 123 DBUSARG="" 124 if [ $i = "0" ] && ([ -r /var/run/dbus/pid ] || [ -r /var/run/dbus/system_bus_socket ]); then 125 if $WPAS | grep -q -- -u; then 126 DBUSARG="-u" 127 fi 128 fi 129 sudo $(printf -- "$VALGRIND_WPAS" $i) $WPAS -g /tmp/wpas-wlan$i -G$GROUP -Dnl80211 -iwlan$i -c $LOGDIR/p2p$i.conf \ 130 -ddKt$TRACE -f $LOGDIR/log$i $DBUSARG & 131done 132sudo $(printf -- "$VALGRIND_WPAS" 5) $WPAS -g /tmp/wpas-wlan5 -G$GROUP \ 133 -ddKt$TRACE -f $LOGDIR/log5 & 134sudo $VALGRIND_HAPD $HAPD -ddKt$TRACE -g /var/run/hostapd-global -G $GROUP -f $LOGDIR/hostapd & 135HPID=$! 136 137if [ -z "$VM" ]; then 138 # Sleep a bit, otherwise pgrep may run before the child is forked 139 sleep 0.1 140 pgrep -P $HPID > $LOGDIR/hostapd-test.pid 141else 142 echo $HPID > $LOGDIR/hostapd-test.pid 143fi 144 145if [ -x $HLR_AUC_GW ]; then 146 cp $DIR/auth_serv/hlr_auc_gw.milenage_db $LOGDIR/hlr_auc_gw.milenage_db 147 sudo $HLR_AUC_GW -u -m $LOGDIR/hlr_auc_gw.milenage_db -g $DIR/auth_serv/hlr_auc_gw.gsm > $LOGDIR/hlr_auc_gw & 148fi 149 150openssl ocsp -index $DIR/auth_serv/index.txt \ 151 -rsigner $DIR/auth_serv/ocsp-responder.pem \ 152 -rkey $DIR/auth_serv/ocsp-responder.key \ 153 -CA $DIR/auth_serv/ca.pem \ 154 -issuer $DIR/auth_serv/ca.pem \ 155 -verify_other $DIR/auth_serv/ca.pem -trust_other \ 156 -ndays 7 \ 157 -reqin $DIR/auth_serv/ocsp-req.der \ 158 -respout $LOGDIR/ocsp-server-cache.der > $LOGDIR/ocsp.log 2>&1 159if [ ! -r $LOGDIR/ocsp-server-cache.der ]; then 160 cp $DIR/auth_serv/ocsp-server-cache.der $LOGDIR/ocsp-server-cache.der 161fi 162 163touch $LOGDIR/hostapd.db 164sudo $HAPD_AS -ddKt $LOGDIR/as.conf $LOGDIR/as2.conf > $LOGDIR/auth_serv & 165 166# wait for programs to be fully initialized 167for i in 0 1 2 3 4 5 6 7 8 9; do 168 if [ -e /tmp/wpas-wlan0 ]; then 169 break 170 fi 171 sleep 0.05 172done 173for i in 0 1 2; do 174 for j in `seq 1 10`; do 175 if $WPACLI -g /tmp/wpas-wlan$i ping | grep -q PONG; then 176 break 177 fi 178 if [ $j = "10" ]; then 179 echo "Could not connect to /tmp/wpas-wlan$i" 180 exit 1 181 fi 182 sleep 1 183 done 184done 185 186for j in `seq 1 10`; do 187 if $WPACLI -g /var/run/hostapd-global ping | grep -q PONG; then 188 break 189 fi 190 if [ $j = "10" ]; then 191 echo "Could not connect to /var/run/hostapd-global" 192 exit 1 193 fi 194 sleep 1 195done 196 197for j in `seq 1 10`; do 198 if $HAPDCLI -i as ping | grep -q PONG; then 199 break 200 fi 201 if [ $j = "10" ]; then 202 echo "Could not connect to hostapd-as-RADIUS-server" 203 exit 1 204 fi 205 sleep 1 206done 207 208if [ $USER = "0" -o $USER = "root" ]; then 209 exit 0 210fi 211 212sleep 0.75 213sudo chown -f $USER $LOGDIR/hwsim0.pcapng $LOGDIR/hwsim0 $LOGDIR/log* $LOGDIR/hostapd 214if [ "x$VALGRIND" = "xy" ]; then 215 sudo chown -f $USER $LOGDIR/*valgrind* 216fi 217 218exit 0 219