Updated through tag hostap_2_5 from git://w1.fi/hostap.git
[mech_eap.git] / libeap / tests / hwsim / start.sh
1 #!/bin/sh
2
3 DIR="$( cd "$( dirname "$0" )" && pwd )"
4 WPAS=$DIR/../../wpa_supplicant/wpa_supplicant
5 WPACLI=$DIR/../../wpa_supplicant/wpa_cli
6 HAPD=$DIR/../../hostapd/hostapd
7 HAPD_AS=$DIR/../../hostapd/hostapd
8 HAPDCLI=$DIR/../../hostapd/hostapd_cli
9 WLANTEST=$DIR/../../wlantest/wlantest
10 HLR_AUC_GW=$DIR/../../hostapd/hlr_auc_gw
11 DATE="$(date +%s)"
12
13 if [ -z "$LOGDIR" ] ; then
14     LOGDIR="$DIR/logs/$DATE"
15     mkdir -p $LOGDIR
16 else
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     fi
40     if [ -e $LOGDIR/alt-hostapd-as/hostapd/hostapd ]; then
41         HAPD_AS=$LOGDIR/alt-hostapd-as/hostapd/hostapd
42     fi
43     if [ -e $LOGDIR/alt-hlr_auc_gw/hostapd/hlr_auc_gw ]; then
44         HLR_AUC_GW=$LOGDIR/alt-hlr_auc_gw/hostapd/hlr_auc_gw
45         # extra code coverage
46         $HLR_AUC_GW > /dev/null 2>&1
47         $HLR_AUC_GW -Dfoo -i7 -sfoo -h > /dev/null 2>&1
48         $HLR_AUC_GW -i100 > /dev/null 2>&1
49         $HLR_AUC_GW -z > /dev/null 2>&1
50     fi
51 fi
52
53 if test -w "$DIR/logs" ; then
54     rm -rf $DIR/logs/current
55     ln -sf $DATE $DIR/logs/current
56 fi
57
58 if groups | tr ' ' "\n" | grep -q ^admin$; then
59     GROUP=admin
60 else
61     GROUP=adm
62 fi
63
64 for i in 0 1 2; do
65     sed "s/ GROUP=.*$/ GROUP=$GROUP/" "$DIR/p2p$i.conf" > "$LOGDIR/p2p$i.conf"
66 done
67
68 sed "s/group=admin/group=$GROUP/;s%LOGDIR%$LOGDIR%g" "$DIR/auth_serv/as.conf" > "$LOGDIR/as.conf"
69 sed "s/group=admin/group=$GROUP/;s%LOGDIR%$LOGDIR%g" "$DIR/auth_serv/as2.conf" > "$LOGDIR/as2.conf"
70
71 if [ "$1" = "valgrind" ]; then
72     VALGRIND=y
73     VALGRIND_WPAS="valgrind --log-file=$LOGDIR/valgrind-wlan%d"
74     VALGRIND_HAPD="valgrind --log-file=$LOGDIR/valgrind-hostapd"
75     chmod -f a+rx $WPAS
76     chmod -f a+rx $HAPD
77     chmod -f a+rx $HAPD_AS
78     HAPD_AS="valgrind --log-file=$LOGDIR/valgrind-auth-serv $HAPD_AS"
79     shift
80 else
81     unset VALGRIND
82     VALGRIND_WPAS=
83     VALGRIND_HAPD=
84 fi
85
86 if [ "$1" = "trace" ]; then
87     TRACE="T"
88     shift
89 else
90     TRACE=""
91 fi
92
93 $DIR/stop.sh
94
95 TMP=$1
96 if [ x${TMP%=[0-9]*} = "xchannels" ]; then
97         NUM_CH=${TMP#channels=}
98         shift
99 else
100         NUM_CH=1
101 fi
102
103 test -f /proc/modules && sudo modprobe mac80211_hwsim radios=7 channels=$NUM_CH support_p2p_device=0
104
105 sudo ifconfig hwsim0 up
106 sudo $WLANTEST -i hwsim0 -n $LOGDIR/hwsim0.pcapng -c -dt -L $LOGDIR/hwsim0 &
107 for i in 0 1 2; do
108     DBUSARG=""
109     if [ $i = "0" -a -r /var/run/dbus/pid -a -r /var/run/dbus/hwsim-test ]; then
110         if $WPAS | grep -q -- -u; then
111             DBUSARG="-u"
112         fi
113     fi
114     sudo $(printf -- "$VALGRIND_WPAS" $i) $WPAS -g /tmp/wpas-wlan$i -G$GROUP -Dnl80211 -iwlan$i -c $LOGDIR/p2p$i.conf \
115          -ddKt$TRACE -f $LOGDIR/log$i $DBUSARG &
116 done
117 sudo $(printf -- "$VALGRIND_WPAS" 5) $WPAS -g /tmp/wpas-wlan5 -G$GROUP \
118     -ddKt$TRACE -f $LOGDIR/log5 &
119 sudo $VALGRIND_HAPD $HAPD -ddKt$TRACE -g /var/run/hostapd-global -G $GROUP -f $LOGDIR/hostapd &
120
121 if [ -x $HLR_AUC_GW ]; then
122     cp $DIR/auth_serv/hlr_auc_gw.milenage_db $LOGDIR/hlr_auc_gw.milenage_db
123     sudo $HLR_AUC_GW -u -m $LOGDIR/hlr_auc_gw.milenage_db -g $DIR/auth_serv/hlr_auc_gw.gsm > $LOGDIR/hlr_auc_gw &
124 fi
125
126 openssl ocsp -index $DIR/auth_serv/index.txt \
127     -rsigner $DIR/auth_serv/ocsp-responder.pem \
128     -rkey $DIR/auth_serv/ocsp-responder.key \
129     -CA $DIR/auth_serv/ca.pem \
130     -issuer $DIR/auth_serv/ca.pem \
131     -verify_other $DIR/auth_serv/ca.pem -trust_other \
132     -ndays 7 \
133     -reqin $DIR/auth_serv/ocsp-req.der \
134     -respout $LOGDIR/ocsp-server-cache.der > $LOGDIR/ocsp.log 2>&1
135 if [ ! -r $LOGDIR/ocsp-server-cache.der ]; then
136     cp $DIR/auth_serv/ocsp-server-cache.der $LOGDIR/ocsp-server-cache.der
137 fi
138
139 for i in unknown revoked; do
140     openssl ocsp -index $DIR/auth_serv/index-$i.txt \
141         -rsigner $DIR/auth_serv/ocsp-responder.pem \
142         -rkey $DIR/auth_serv/ocsp-responder.key \
143         -CA $DIR/auth_serv/ca.pem \
144         -issuer $DIR/auth_serv/ca.pem \
145         -verify_other $DIR/auth_serv/ca.pem -trust_other \
146         -ndays 7 \
147         -reqin $DIR/auth_serv/ocsp-req.der \
148         -respout $LOGDIR/ocsp-server-cache-$i.der >> $LOGDIR/ocsp.log 2>&1
149 done
150 touch $LOGDIR/hostapd.db
151 sudo $HAPD_AS -ddKt $LOGDIR/as.conf $LOGDIR/as2.conf > $LOGDIR/auth_serv &
152
153 # wait for programs to be fully initialized
154 for i in 0 1 2 3 4 5 6 7 8 9; do
155     if [ -e /tmp/wpas-wlan0 ]; then
156         break
157     fi
158     sleep 0.05
159 done
160 for i in 0 1 2; do
161     for j in `seq 1 10`; do
162         if $WPACLI -g /tmp/wpas-wlan$i ping | grep -q PONG; then
163             break
164         fi
165         if [ $j = "10" ]; then
166             echo "Could not connect to /tmp/wpas-wlan$i"
167             exit 1
168         fi
169         sleep 1
170     done
171 done
172
173 for j in `seq 1 10`; do
174     if $WPACLI -g /var/run/hostapd-global ping | grep -q PONG; then
175         break
176     fi
177     if [ $j = "10" ]; then
178         echo "Could not connect to /var/run/hostapd-global"
179         exit 1
180     fi
181     sleep 1
182 done
183
184 for j in `seq 1 10`; do
185     if $HAPDCLI -i as ping | grep -q PONG; then
186         break
187     fi
188     if [ $j = "10" ]; then
189         echo "Could not connect to hostapd-as-RADIUS-server"
190         exit 1
191     fi
192     sleep 1
193 done
194
195 if [ $USER = "0" -o $USER = "root" ]; then
196     exit 0
197 fi
198
199 sleep 0.75
200 sudo chown -f $USER $LOGDIR/hwsim0.pcapng $LOGDIR/hwsim0 $LOGDIR/log* $LOGDIR/hostapd
201 if [ "x$VALGRIND" = "xy" ]; then
202     sudo chown -f $USER $LOGDIR/*valgrind*
203 fi
204
205 exit 0