| #!/bin/sh |
| |
| DIR="$( cd "$( dirname "$0" )" && pwd )" |
| WPAS=$DIR/../../wpa_supplicant/wpa_supplicant |
| WPACLI=$DIR/../../wpa_supplicant/wpa_cli |
| HAPD=$DIR/../../hostapd/hostapd |
| HAPD_AS=$DIR/../../hostapd/hostapd |
| HAPDCLI=$DIR/../../hostapd/hostapd_cli |
| WLANTEST=$DIR/../../wlantest/wlantest |
| HLR_AUC_GW=$DIR/../../hostapd/hlr_auc_gw |
| DATE="$(date +%s)" |
| |
| if [ -z "$LOGDIR" ] ; then |
| LOGDIR="$DIR/logs/$DATE" |
| mkdir -p $LOGDIR |
| else |
| if [ -e $LOGDIR/alt-wpa_supplicant/wpa_supplicant/wpa_supplicant ]; then |
| WPAS=$LOGDIR/alt-wpa_supplicant/wpa_supplicant/wpa_supplicant |
| WPACLI=$LOGDIR/alt-wpa_supplicant/wpa_supplicant/wpa_cli |
| # extra code coverage |
| $WPAS > /dev/null 2>&1 |
| $WPAS -efoo -Ifoo -mfoo -ofoo -Ofoo -pfoo -Pfoo -h > /dev/null 2>&1 |
| $WPAS -bfoo -B -Cfoo -q -W -N -L > /dev/null 2>&1 |
| $WPAS -T -v > /dev/null 2>&1 |
| $WPAS -u -z > /dev/null 2>&1 |
| fi |
| if [ -e $LOGDIR/alt-hostapd/hostapd/hostapd ]; then |
| HAPD=$LOGDIR/alt-hostapd/hostapd/hostapd |
| HAPDCLI=$LOGDIR/alt-hostapd/hostapd/hostapd_cli |
| # extra code coverage |
| $HAPD > /dev/null 2>&1 |
| $HAPD -v > /dev/null 2>&1 |
| $HAPD -B -efoo -Pfoo -T -bfoo -h > /dev/null 2>&1 |
| $HAPD -ufoo > /dev/null 2>&1 |
| $HAPD -u00:11:22:33:44:55 > /dev/null 2>&1 |
| $HAPD -gfoo > /dev/null 2>&1 |
| $HAPD -Gfoo-not-exists > /dev/null 2>&1 |
| $HAPD -z > /dev/null 2>&1 |
| fi |
| if [ -e $LOGDIR/alt-hostapd-as/hostapd/hostapd ]; then |
| HAPD_AS=$LOGDIR/alt-hostapd-as/hostapd/hostapd |
| fi |
| if [ -e $LOGDIR/alt-hlr_auc_gw/hostapd/hlr_auc_gw ]; then |
| HLR_AUC_GW=$LOGDIR/alt-hlr_auc_gw/hostapd/hlr_auc_gw |
| # extra code coverage |
| $HLR_AUC_GW > /dev/null 2>&1 |
| $HLR_AUC_GW -Dfoo -i7 -sfoo -h > /dev/null 2>&1 |
| $HLR_AUC_GW -i100 > /dev/null 2>&1 |
| $HLR_AUC_GW -z > /dev/null 2>&1 |
| fi |
| fi |
| |
| if test -w "$DIR/logs" ; then |
| rm -rf $DIR/logs/current |
| ln -sf $DATE $DIR/logs/current |
| fi |
| |
| if groups | tr ' ' "\n" | grep -q ^admin$; then |
| GROUP=admin |
| else |
| GROUP=adm |
| fi |
| |
| for i in 0 1 2; do |
| sed "s/ GROUP=.*$/ GROUP=$GROUP/" "$DIR/p2p$i.conf" > "$LOGDIR/p2p$i.conf" |
| done |
| |
| sed "s/group=admin/group=$GROUP/;s%LOGDIR%$LOGDIR%g" "$DIR/auth_serv/as.conf" > "$LOGDIR/as.conf" |
| sed "s/group=admin/group=$GROUP/;s%LOGDIR%$LOGDIR%g" "$DIR/auth_serv/as2.conf" > "$LOGDIR/as2.conf" |
| |
| if [ "$1" = "valgrind" ]; then |
| VALGRIND=y |
| VALGRIND_WPAS="valgrind --log-file=$LOGDIR/valgrind-wlan%d" |
| VALGRIND_HAPD="valgrind --log-file=$LOGDIR/valgrind-hostapd" |
| chmod -f a+rx $WPAS |
| chmod -f a+rx $HAPD |
| chmod -f a+rx $HAPD_AS |
| HAPD_AS="valgrind --log-file=$LOGDIR/valgrind-auth-serv $HAPD_AS" |
| shift |
| else |
| unset VALGRIND |
| VALGRIND_WPAS= |
| VALGRIND_HAPD= |
| fi |
| |
| if [ "$1" = "trace" ]; then |
| TRACE="T" |
| shift |
| else |
| TRACE="" |
| fi |
| |
| $DIR/stop.sh |
| |
| TMP=$1 |
| if [ x${TMP%=[0-9]*} = "xchannels" ]; then |
| NUM_CH=${TMP#channels=} |
| shift |
| else |
| NUM_CH=1 |
| fi |
| |
| test -f /proc/modules && sudo modprobe mac80211_hwsim radios=6 channels=$NUM_CH support_p2p_device=0 |
| sudo ifconfig hwsim0 up |
| sudo $WLANTEST -i hwsim0 -n $LOGDIR/hwsim0.pcapng -c -dt -L $LOGDIR/hwsim0 & |
| for i in 0 1 2; do |
| DBUSARG="" |
| if [ $i = "0" -a -r /var/run/dbus/pid -a -r /var/run/dbus/hwsim-test ]; then |
| if $WPAS | grep -q -- -u; then |
| DBUSARG="-u" |
| fi |
| fi |
| sudo $(printf -- "$VALGRIND_WPAS" $i) $WPAS -g /tmp/wpas-wlan$i -G$GROUP -Dnl80211 -iwlan$i -c $LOGDIR/p2p$i.conf \ |
| -ddKt$TRACE -f $LOGDIR/log$i $DBUSARG & |
| done |
| sudo $(printf -- "$VALGRIND_WPAS" 5) $WPAS -g /tmp/wpas-wlan5 -G$GROUP \ |
| -ddKt$TRACE -f $LOGDIR/log5 & |
| sudo $VALGRIND_HAPD $HAPD -ddKt$TRACE -g /var/run/hostapd-global -G $GROUP -ddKt -f $LOGDIR/hostapd & |
| |
| if [ -x $HLR_AUC_GW ]; then |
| cp $DIR/auth_serv/hlr_auc_gw.milenage_db $LOGDIR/hlr_auc_gw.milenage_db |
| sudo $HLR_AUC_GW -u -m $LOGDIR/hlr_auc_gw.milenage_db -g $DIR/auth_serv/hlr_auc_gw.gsm > $LOGDIR/hlr_auc_gw & |
| fi |
| |
| openssl ocsp -index $DIR/auth_serv/index.txt \ |
| -rsigner $DIR/auth_serv/ocsp-responder.pem \ |
| -rkey $DIR/auth_serv/ocsp-responder.key \ |
| -CA $DIR/auth_serv/ca.pem \ |
| -issuer $DIR/auth_serv/ca.pem \ |
| -verify_other $DIR/auth_serv/ca.pem -trust_other \ |
| -ndays 7 \ |
| -reqin $DIR/auth_serv/ocsp-req.der \ |
| -respout $LOGDIR/ocsp-server-cache.der > $LOGDIR/ocsp.log 2>&1 |
| if [ ! -r $LOGDIR/ocsp-server-cache.der ]; then |
| cp $DIR/auth_serv/ocsp-server-cache.der $LOGDIR/ocsp-server-cache.der |
| fi |
| |
| for i in unknown revoked; do |
| openssl ocsp -index $DIR/auth_serv/index-$i.txt \ |
| -rsigner $DIR/auth_serv/ocsp-responder.pem \ |
| -rkey $DIR/auth_serv/ocsp-responder.key \ |
| -CA $DIR/auth_serv/ca.pem \ |
| -issuer $DIR/auth_serv/ca.pem \ |
| -verify_other $DIR/auth_serv/ca.pem -trust_other \ |
| -ndays 7 \ |
| -reqin $DIR/auth_serv/ocsp-req.der \ |
| -respout $LOGDIR/ocsp-server-cache-$i.der >> $LOGDIR/ocsp.log 2>&1 |
| done |
| touch $LOGDIR/hostapd.db |
| sudo $HAPD_AS -ddKt $LOGDIR/as.conf $LOGDIR/as2.conf > $LOGDIR/auth_serv & |
| |
| # wait for programs to be fully initialized |
| for i in 0 1 2 3 4 5 6 7 8 9; do |
| if [ -e /tmp/wpas-wlan0 ]; then |
| break |
| fi |
| sleep 0.05 |
| done |
| for i in 0 1 2; do |
| for j in `seq 1 10`; do |
| if $WPACLI -g /tmp/wpas-wlan$i ping | grep -q PONG; then |
| break |
| fi |
| if [ $j = "10" ]; then |
| echo "Could not connect to /tmp/wpas-wlan$i" |
| exit 1 |
| fi |
| sleep 1 |
| done |
| done |
| |
| for j in `seq 1 10`; do |
| if $WPACLI -g /var/run/hostapd-global ping | grep -q PONG; then |
| break |
| fi |
| if [ $j = "10" ]; then |
| echo "Could not connect to /var/run/hostapd-global" |
| exit 1 |
| fi |
| sleep 1 |
| done |
| |
| for j in `seq 1 10`; do |
| if $HAPDCLI -i as ping | grep -q PONG; then |
| break |
| fi |
| if [ $j = "10" ]; then |
| echo "Could not connect to hostapd-as-RADIUS-server" |
| exit 1 |
| fi |
| sleep 1 |
| done |
| |
| if [ $USER = "0" -o $USER = "root" ]; then |
| exit 0 |
| fi |
| |
| sleep 0.75 |
| sudo chown -f $USER $LOGDIR/hwsim0.pcapng $LOGDIR/hwsim0 $LOGDIR/log* $LOGDIR/hostapd |
| if [ "x$VALGRIND" = "xy" ]; then |
| sudo chown -f $USER $LOGDIR/*valgrind* |
| fi |
| |
| exit 0 |