blob: 50ff659751bdf1407777e358b5e4197936314a0e [file] [log] [blame]
b.liue9582032025-04-17 19:18:16 +08001#!/bin/sh
2#
3# script file to start wlan applications (IAPP, Auth, Autoconf) daemon
4#
5# Usage: wlanapp.sh [start|kill] wlan_interface...br_interface
6#
7
8## error code
9ERROR_WSCD_START_FAIL=8
10
11if [ $# -lt 2 ] || [ $1 != 'start' -a $1 != 'kill' ] ; then
12 echo "Usage: $0 [start|kill] wlan_interface...br_interface"
13 exit 1
14fi
15
16TOP_VAR_DIR="/var"
17TOP_ETC_DIR="/etc"
18TOP_TMP_DIR="/tmp"
19if [ "$2" == "wlan0" ]; then
20 CONFIG_ROOT_DIR="/var/rtl8192c"
21elif [ "$2" == "wlan1" ]; then
22 CONFIG_ROOT_DIR="/var/rtl8192cd"
23fi
24
25if [ ! -d "$TOP_TMP_DIR" ]; then
26 mkdir $TOP_TMP_DIR
27fi
28
29if [ -z "$BIN_DIR" ]; then
30 BIN_DIR=`cat $CONFIG_ROOT_DIR/wifi_bin_dir`
31fi
32
33if [ -z "$WLAN_PREFIX" ]; then
34 WLAN_PREFIX=wlan
35fi
36#WLAN_PREFIX_LEN=${#WLAN_PREFIX}
37#WLAN_NAME_LEN=$((WLAN_PREFIX_LEN + 1))
38
39if [ -z "$ROOT_WLAN" ]; then
40# ROOT_WLAN=${2:0:$WLAN_NAME_LEN}
41 ROOT_WLAN=${2%%-*}
42fi
43ROOT_CONFIG_DIR=$CONFIG_ROOT_DIR/$ROOT_WLAN
44
45GET_VALUE=
46GET_VALUE_TMP=
47KILLALL=killall
48FLASH_PROG=flash
49SLEEP=sleep
50
51START=1
52PARAM_NUM=$#
53PARAM_ALL=$*
54PARAM1=$1
55PARAM_BR=
56WLAN_INTERFACE=
57
58WLAN0_MODE=
59WLAN0_DISABLED=
60WLAN0_WSC_DISABLED=
61
62WLAN1_MODE=0
63WLAN1_DISABLED=1
64WLAN1_WSC_DISABLED=1
65both_band_ap=0
66
67rtl_check_wlan_band(){
68
69 WLAN0_MODE=`cat $CONFIG_ROOT_DIR/wlan0/wlan_mode`
70 WLAN0_DISABLED=`cat $CONFIG_ROOT_DIR/wlan0/wlan_disabled`
71 WLAN0_WSC_DISABLED=`cat $CONFIG_ROOT_DIR/wlan0/wsc_disabled`
72
73 if [ -d "$CONFIG_ROOT_DIR/wlan1" ] ; then
74 WLAN1_MODE=`cat $CONFIG_ROOT_DIR/wlan1/wlan_mode`
75 WLAN1_DISABLED=`cat $CONFIG_ROOT_DIR/wlan1/wlan_disabled`
76 WLAN1_WSC_DISABLED=`cat $CONFIG_ROOT_DIR/wlan1/wsc_disabled`
77 fi
78
79 if [ "$WLAN0_MODE" = "0" -o "$WLAN0_MODE" = "3" ] && [ "$WLAN1_MODE" = "0" -o "$WLAN1_MODE" = "3" ] && [ "$WLAN0_DISABLED" = "0" ] && [ "$WLAN1_DISABLED" = "0" ] && [ "$WLAN0_WSC_DISABLED" = "0" ] && [ "$WLAN1_WSC_DISABLED" = "0" ]; then
80 both_band_ap = 1
81 fi
82}
83
84rtl_check_wlan_if() {
85 if [ $PARAM_NUM -ge 1 ]; then
86 for ARG in $PARAM_ALL ; do
87 case $ARG in
88 $WLAN_PREFIX*)
89 if [ -z "$WLAN_INTERFACE" ]; then
90 WLAN_INTERFACE="$ARG"
91 else
92 WLAN_INTERFACE="$WLAN_INTERFACE $ARG"
93 fi
94 ;;
95 *)
96 PARAM_BR=$ARG
97 ;;
98 esac
99 done
100 fi
101}
102
103DEBUG_EASYCONF=
104VXD_INTERFACE=
105
106
107## kill 802.1x, autoconf and IAPP daemon ##
108rtl_kill_iwcontrol_pid() {
109 PIDFILE="$TOP_VAR_DIR/run/iwcontrol.pid"
110 if [ -f $PIDFILE ] ; then
111 PID=`cat $PIDFILE`
112 echo "IWCONTROL_PID=$PID"
113 if [ "$PID" != "0" ]; then
114 kill -9 $PID 2>/dev/null
115 fi
116 rm -f $PIDFILE
117 fi
118}
119
120
121rtl_kill_wlan_pid() {
122 for WLAN in $WLAN_INTERFACE ; do
123 PIDFILE=$TOP_VAR_DIR/run/auth-$WLAN.pid
124 if [ -f $PIDFILE ] ; then
125 PID=`cat $PIDFILE`
126 echo "AUTH_PID=$PID"
127 if [ "$PID" != "0" ]; then
128 kill -9 $PID 2>/dev/null
129 fi
130 rm -f $PIDFILE
131
132 PIDFILE=$TOP_VAR_DIR/run/auth-$WLAN-vxd.pid
133 if [ -f $PIDFILE ] ; then
134 PID=`cat $PIDFILE`
135 if [ "$PID" != "0" ]; then
136 kill -9 $PID 2>/dev/null
137 fi
138 rm -f $PIDFILE
139 fi
140 fi
141
142 # for WPS ---------------------------------->>
143 PIDFILE=$TOP_VAR_DIR/run/wscd-$WLAN.pid
144 if [ "$both_band_ap" = "1" ]; then
145 PIDFILE=$TOP_VAR_DIR/run/wscd-wlan0-wlan1.pid
146 fi
147
148 if [ -f $PIDFILE ] ; then
149 PID=`cat $PIDFILE`
150 echo "WSCD_PID=$PID"
151 if [ "$PID" != "0" ]; then
152 kill -9 $PID 2>/dev/null
153 fi
154 rm -f $PIDFILE
155 fi
156 done
157 #<<----------------------------------- for WPS
158}
159
160## start 802.1x daemon ##
161DEAMON_CREATED=0
162VALID_WLAN_INTERFACE=
163
164
165rtl_start_wlan() {
166 for WLAN in $WLAN_INTERFACE ; do
167 CONFIG_DIR=$CONFIG_ROOT_DIR/$WLAN
168 GET_VALUE_WLAN_DISABLED=`cat $CONFIG_DIR/wlan_disabled`
169 if [ "$GET_VALUE_WLAN_DISABLED" != 0 ]; then
170 continue
171 fi
172
173 GET_VALUE_WLAN_MODE=`cat $CONFIG_DIR/wlan_mode`
174 GET_WLAN_WPA_AUTH_TYPE=`cat $CONFIG_DIR/wpa_auth`
175 GET_WLAN_ENCRYPT=`cat $CONFIG_DIR/encrypt`
176 GET_WLAN_AUTH_TYPE=`cat $CONFIG_DIR/auth_type`
177
178 EXT=${WLAN#$WLAN_PREFIX[0-9]}
179 EXT=${EXT#-}
180 VAP_AUTH_ENABLE=0
181 ROOT_AUTH_ENABLE=0
182
183 _ENABLE_1X=0
184 _USE_RS=0
185
186 if [ "$GET_WLAN_ENCRYPT" -lt 2 ]; then
187 GET_ENABLE_1X=`cat $CONFIG_DIR/enable_1x`
188 GET_MAC_AUTH_ENABLED=`cat $ROOT_CONFIG_DIR/mac_auth_enabled`
189 if [ "$GET_WLAN_AUTH_TYPE" = 1 ] && [ "$GET_WLAN_ENCRYPT" = 1 ] ; then
190 echo "8021x don't work in WEP-shared!!"
191 elif [ "$GET_ENABLE_1X" != 0 ] || [ "$GET_MAC_AUTH_ENABLED" != 0 ]; then
192 _ENABLE_1X=1
193 _USE_RS=1
194 fi
195 else
196 _ENABLE_1X=1
197 if [ "$GET_WLAN_WPA_AUTH_TYPE" = 1 ]; then
198 _USE_RS=1
199 fi
200 fi
201
202
203 ROLE=
204 if [ "$_ENABLE_1X" != 0 ]; then
205 $BIN_DIR/$FLASH_PROG wpa $WLAN $TOP_VAR_DIR/wpa-$WLAN.conf $WLAN
206 $BIN_DIR/$FLASH_PROG config_file_path $CONFIG_ROOT_DIR wpa $WLAN $TOP_VAR_DIR/wpa-$WLAN.conf $WLAN
207 if [ "$GET_VALUE_WLAN_MODE" = '1' ]; then
208 GET_VALUE=`cat $CONFIG_DIR/network_type`
209 if [ "$GET_VALUE" = '0' ]; then
210 ROLE=client-infra
211 else
212 ROLE=client-adhoc
213 fi
214 else
215 ROLE=auth
216 fi
217
218 VAP_NOT_IN_PURE_AP_MODE=0
219
220
221 if [ "$GET_VALUE_WLAN_MODE" = '0' ] && [ "$VAP_NOT_IN_PURE_AP_MODE" = '0' ]; then
222 if [ "$GET_WLAN_WPA_AUTH_TYPE" != 2 ] || [ "$_USE_RS" != 0 ]; then
223 $BIN_DIR/auth $WLAN $PARAM_BR $ROLE $TOP_VAR_DIR/wpa-$WLAN.conf
224 DEAMON_CREATED=1
225 ROOT_AUTH_ENABLE=1
226 fi
227
228 fi
229 fi
230
231 if [ "$EXT" = "vxd" ]; then
232 if [ "$ROLE" != "auth" ] || [ "$ROLE" = "auth" -a "$_USE_RS" != 0 ]; then
233 VXD_INTERFACE=$WLAN
234 fi
235 else
236 GET_WSC_DISABLE=`cat $CONFIG_DIR/wsc_disabled`
237 GET_IEEE80211K_DEAMON=`cat $CONFIG_DIR/rm_deamon_enable`
238 if [ $ROOT_AUTH_ENABLE = 1 ] || [ $GET_WSC_DISABLE = 0 ] || [ $GET_IEEE80211K_DEAMON = 1 ]; then
239 if [ -z "$VALID_WLAN_INTERFACE" ]; then
240 VALID_WLAN_INTERFACE="$WLAN"
241 else
242 VALID_WLAN_INTERFACE="$VALID_WLAN_INTERFACE $WLAN"
243 fi
244 fi
245 fi
246
247 done
248
249}
250
251#end of start wlan
252
253
254# for WPS ------------------------------------------------->>
255rtl_start_wps() {
256 if [ ! -e $BIN_DIR/wscd ]; then
257 return;
258 fi
259 for WLAN in $VALID_WLAN_INTERFACE ; do
260 EXT=${WLAN#$WLAN_PREFIX[0-9]}
261 EXT=${EXT#-}
262 if [ "$EXT" = "" ] || [ "$EXT" = "vxd" ]; then
263
264 USE_IWCONTROL=1
265 DEBUG_ON=0
266 _ENABLE_1X=0
267 WSC=1
268 CONFIG_DIR=$CONFIG_ROOT_DIR/$WLAN
269 CONF_FILE=$TOP_VAR_DIR/wsc-$WLAN.conf
270 FiFO_File=$TOP_VAR_DIR/wscd-$WLAN.fifo
271
272
273 GET_WSC_DISABLE=`cat $CONFIG_DIR/wsc_disabled`
274 GET_VALUE_WLAN_DISABLED=`cat $CONFIG_DIR/wlan_disabled`
275 GET_VALUE_WLAN_MODE=`cat $CONFIG_DIR/wlan_mode`
276 GET_WLAN_ENCRYPT=`cat $CONFIG_DIR/encrypt`
277 GET_WLAN_WPA_AUTH_TYPE=`cat $CONFIG_DIR/wpa_auth`
278 GET_ENABLE_1X=`cat $CONFIG_DIR/enable_1x`
279 GET_WSC_AUTH=`cat $CONFIG_DIR/wsc_auth`
280
281 if [ "$GET_WLAN_ENCRYPT" -lt 2 ]; then
282 GET_MAC_AUTH_ENABLED=`cat $CONFIG_DIR/mac_auth_enabled`
283 if [ "$GET_ENABLE_1X" != 0 ] || [ "$GET_MAC_AUTH_ENABLED" != 0 ]; then
284 _ENABLE_1X=1
285 fi
286 else
287 if [ "$GET_ENABLE_1X" != 0 ]; then
288 _ENABLE_1X=1
289 fi
290 fi
291
292 ## WSC: WPA and WPA2 authentication
293 if [ "$GET_WSC_AUTH" = 8 ] || [ "$GET_WSC_AUTH" = 0x10 ]; then
294 _ENABLE_1X=1
295 fi
296
297 if [ "$_ENABLE_1X" = "1" ]; then
298 echo "stop wscd if 1x is enabled"
299 continue
300 fi
301
302 if [ "$EXT" = "vxd" ]; then
303 GET_VALUE_WLAN_CURR_MODE=`cat $CONFIG_DIR/wlan_mode`
304 if [ $GET_VALUE_WLAN_CURR_MODE = 1 ]; then
305 GET_WSC_DISABLE = 1
306 fi
307 fi
308
309 if [ $GET_WSC_DISABLE != 0 ]; then
310 WSC=0
311 else
312 if [ "$GET_VALUE_WLAN_DISABLED" != 0 ] || [ "$GET_VALUE_WLAN_MODE" = 2 ]; then
313 WSC=0
314 else
315 if [ $GET_VALUE_WLAN_MODE = 1 ]; then
316 GET_VALUE=`cat $CONFIG_DIR/network_type`
317 if [ "$GET_VALUE" != 0 ]; then
318 WSC=0
319 fi
320 fi
321 if [ $GET_VALUE_WLAN_MODE = 0 ]; then
322 if [ $GET_WLAN_ENCRYPT = 0 ] && [ $_ENABLE_1X != 0 ]; then
323 WSC=0
324 fi
325 if [ $GET_WLAN_ENCRYPT = 1 ]; then
326 WSC=0
327 fi
328 if [ $GET_WLAN_ENCRYPT -ge 2 ] && [ $GET_WLAN_WPA_AUTH_TYPE = 1 ]; then
329 WSC=0
330 fi
331 fi
332 fi
333 fi
334
335 if [ $WSC = 1 ]; then
336 if [ ! -f $TOP_VAR_DIR/wps/simplecfgservice.xml ]; then
337 if [ -e $TOP_VAR_DIR/wps ]; then
338 rm $TOP_VAR_DIR/wps -rf
339 fi
340 mkdir $TOP_VAR_DIR/wps
341 #cp $TOP_ETC_DIR/simplecfg*.xml $TOP_VAR_DIR/wps
342 cat $TOP_ETC_DIR/simplecfgservice.xml > $TOP_VAR_DIR/wps/simplecfgservice.xml
343 fi
344
345 if [ $GET_VALUE_WLAN_MODE = 1 ]; then
346 UPNP=0
347 _CMD="-mode 2"
348 else
349 GET_WSC_UPNP_ENABLED=`cat $CONFIG_DIR/wsc_upnp_enabled`
350 UPNP=$GET_WSC_UPNP_ENABLED
351 _CMD="-start"
352 fi
353
354 if [ $UPNP = 1 ]; then
355 route del -net 239.255.255.250 netmask 255.255.255.255 dev "$PARAM_BR"
356 route add -net 239.255.255.250 netmask 255.255.255.255 dev "$PARAM_BR"
357 fi
358
359 if [ "$both_band_ap" = "1" ]; then
360 _CMD="$_CMD -both_band_ap"
361 fi
362
363 $BIN_DIR/$FLASH_PROG config_file_path $CONFIG_ROOT_DIR upd-wsc-conf $TOP_ETC_DIR/wscd.conf $CONF_FILE $WLAN
364
365 _CMD="$_CMD -c $CONF_FILE -w $WLAN"
366
367 if [ $DEBUG_ON = 1 ]; then
368 _CMD="$_CMD -debug"
369 fi
370 if [ $USE_IWCONTROL = 1 ]; then
371 _CMD="$_CMD -fi $FiFO_File"
372 DEAMON_CREATED=1
373 fi
374
375 if [ -f "$TOP_VAR_DIR/wps_start_pbc" ]; then
376 _CMD="$_CMD -start_pbc"
377 rm -f $TOP_VAR_DIR/wps_start_pbc
378 fi
379 if [ -f "$TOP_VAR_DIR/wps_start_pin" ]; then
380 _CMD="$_CMD -start"
381 rm -f $TOP_VAR_DIR/wps_start_pin
382 fi
383 if [ -f "$TOP_VAR_DIR/wps_local_pin" ]; then
384 PIN=`cat $TOP_VAR_DIR/wps_local_pin`
385 _CMD="$_CMD -local_pin $PIN"
386 rm -f $TOP_VAR_DIR/wps_local_pin
387 fi
388 if [ -f "$TOP_VAR_DIR/wps_peer_pin" ]; then
389 PIN=`cat $TOP_VAR_DIR/wps_peer_pin`
390 _CMD="$_CMD -peer_pin $PIN"
391 rm -f $TOP_VAR_DIR/wps_peer_pin
392 fi
393 WSC_CMD=$_CMD
394 echo "cmd: wscd $WSC_CMD"
395 $BIN_DIR/wscd $WSC_CMD -daemon
396
397 WAIT=5
398 while [ $USE_IWCONTROL != 0 -a $WAIT != 0 ]
399 do
400 if [ -e $FiFO_File ]; then
401 break;
402 else
403 $SLEEP 1
404 WAIT=$((WAIT - 1))
405 fi
406 done
407 if [ $WAIT = 0 ]; then
408 exit $ERROR_WSCD_START_FAIL;
409 fi
410 fi
411 fi
412 done
413}
414#<<--------------------------------------------------- for WPS
415
416rtl_start_iwcontrol() {
417 if [ $DEAMON_CREATED = 1 ]; then
418 $BIN_DIR/iwcontrol $VALID_WLAN_INTERFACE $VXD_INTERFACE $POLL
419 fi
420}
421
422rtl_start_dot11k_deamon() {
423
424
425 IEEE80211K_DEAMON_BRING_UP=`cat $CONFIG_DIR/rm_deamon_enable`
426
427 if [ $IEEE80211K_DEAMON_BRING_UP = 1 ]; then
428 IEEE80211K_ENABLE=`cat $CONFIG_DIR/rm_activated`
429 if [ $IEEE80211K_ENABLE = 1 ]; then
430 IEEE80211K_DEAMON_DEBUG_ENABLE=`cat $CONFIG_DIR/rm_deamon_debug`
431 IEEE80211K_DEAMON_DEBUG_OPTION=""
432 IEEE80211K_DEAMON_TIME_INTERVAL=`cat $CONFIG_DIR/rm_deamon_time_interval`
433
434 if [ $IEEE80211K_DEAMON_DEBUG_ENABLE = 1 ]; then
435 IEEE80211K_DEAMON_DEBUG_OPTION="$IEEE80211K_DEAMON_DEBUG_OPTION -d"
436 fi
437
438 IEEE80211K_DEAMON_DEBUG_OPTION="-i $VALID_WLAN_INTERFACE -t $IEEE80211K_DEAMON_TIME_INTERVAL $IEEE80211K_DEAMON_DEBUG_OPTION"
439
440 echo "dot11k_deamon $IEEE80211K_DEAMON_DEBUG_OPTION"
441 $BIN_DIR/dot11k_deamon $IEEE80211K_DEAMON_DEBUG_OPTION
442 else
443 echo "get_mib rm_actived=$IEEE80211K_ENABLE, 802.11k deamon is not enabled"
444 fi
445 fi
446}
447
448rtl_wlanapp() {
449 if [ $PARAM1 = 'kill' ]; then
450 START=0
451 fi
452
453 rtl_check_wlan_if
454
455 if [ -z "$WLAN_INTERFACE" ]; then
456 echo "Error in $0, no wlan interface is given!"
457 exit 0
458 fi
459
460 rtl_kill_iwcontrol_pid
461 rtl_kill_wlan_pid
462
463 rm -f $TOP_VAR_DIR/*.fifo
464
465 if [ $START = 0 ]; then
466 return;
467 fi
468
469# rtl_check_wlan_band
470 rtl_start_wlan
471 rtl_start_wps
472 rtl_start_iwcontrol
473 rtl_start_dot11k_deamon
474}
475
476rtl_wlanapp