add a simple /sbin/wifi script with support for the new broadcom driver (incomplete...
[openwrt.git] / package / broadcom-wl / files / lib / wifi / broadcom.sh
1 scan_broadcom() {
2 local device="$1"
3
4 config_get vifs "$device" vifs
5 for vif in $vifs; do
6 config_get mode "$vif" mode
7 case "$mode" in
8 adhoc)
9 adhoc=1
10 adhoc_if="$vif"
11 ;;
12 sta)
13 sta=1
14 sta_if="$vif"
15 ;;
16 ap)
17 ap=1
18 ap_if="${ap_if:+$ap_if }$vif"
19 ;;
20 *) echo "$device($vif): Invalid mode";;
21 esac
22 done
23
24 local _c=
25 for vif in ${adhoc_if:-$sta_if $ap_if}; do
26 config_set "$vif" ifname "wl0${_c:+.$_c}"
27 _c=$((${_c:-0} + 1))
28 done
29
30 ifdown="down"
31 for vif in 0 1 2 3; do
32 append ifdown "vif $vif" "$N"
33 append ifdown "enabled 0" "$N"
34 done
35
36 ap=1
37 infra=1
38 mssid=1
39 apsta=0
40 radio=1
41 case "$adhoc:$sta:$ap" in
42 1*)
43 ap=0
44 mssid=0
45 infra=0
46 ;;
47 :1:1)
48 apsta=1
49 wet=1
50 ;;
51 :1:)
52 wet=1
53 ap=0
54 mssid=0
55 ;;
56 ::)
57 radio=0
58 ;;
59 esac
60 }
61
62
63 setup_broadcom() {
64 local _c
65 config_get channel "$device" channel
66 config_get country "$device" country
67 config_get maxassoc "$device" maxassoc
68
69 _c=0
70 nas="$(which nas)"
71 nas_cmd=
72 for vif in ${adhoc_if:-$sta_if $ap_if}; do
73 append vif_pre_up "vif $_c" "$N"
74 append vif_post_up "vif $_c" "$N"
75
76 [ "$vif" = "$sta_if" ] || {
77 config_get_bool hidden "$vif" hidden 1
78 append vif_pre_up "closed $hidden" "$N"
79 config_get_bool isolate "$vif" isolate
80 append vif_pre_up "ap_isolate $hidden" "$N"
81 }
82
83 wsec_r=0
84 eap_r=0
85 wsec=0
86 auth=0
87 nasopts=
88 config_get enc "$vif" encryption
89 case "$enc" in
90 WEP|wep)
91 wsec_r=1
92 ;;
93 *psk*|*PSK*)
94 wsec_r=1
95 config_get key "$vif" key
96 case "$enc" in
97 wpa2*|WPA2*|PSK2*|psk2*) auth=128; wsec=4;;
98 *) auth=4; crypto=2;;
99 esac
100 eval "${vif}_key=\"\$key\""
101 nasopts="-k \"\$${vif}_key\""
102 ;;
103 *wpa*|*WPA*)
104 wsec_r=1
105 eap_r=1
106 config_get key "$vif" key
107 config_get server "$vif" server
108 config_get port "$vif" port
109 case "$enc" in
110 wpa2*|WPA2*) auth=64; wsec=4;;
111 *) auth=2; crypto=2;;
112 esac
113 eval "${vif}_key=\"\$key\""
114 nasopts="-r \"\$${vif}_key\" -h $server -p $port"
115 ;;
116 esac
117 append vif_post_up "wsec $wsec" "$N"
118 append vif_post_up "wpa_auth $auth" "$N"
119 append vif_post_up "wsec_restrict $wsec_r" "$N"
120 append vif_post_up "eap_restrict $eap_r" "$N"
121
122 config_get ssid "$vif" ssid
123 append vif_post_up "ssid $ssid" "$N"
124 append vif_post_up "enabled 1" "$N"
125
126 [ -z "$nasopts" ] || {
127 config_get ifname "$vif" ifname
128 config_get bridge "$vif" bridge # XXX: integrate with /etc/config/network later
129 eval "${vif}_ssid=\"\$ssid\""
130 mode="-A"
131 [ "$vif" = "$sta_if" ] && mode="-S"
132 [ -z "$nas" ] || nas_cmd="${nas_cmd:+$nas_cmd$N}$nas -P /var/run/nas.$ifname.pid -H 34954 -i $ifname${bridge:+ -l $bridge} $mode -m $auth -w $crypto -s \"\$${vif}_ssid\" -g 3600 $nasopts &"
133 }
134 _c=$(($_c + 1))
135 done
136 killall -KILL nas >&- 2>&-
137 cat <<EOF
138 $ifdown
139
140 mssid $mssid
141 ap $ap
142 apsta $apsta
143 infra $infra
144 ${wet:+wet 1}
145
146 radio ${radio:-1}
147 macfilter 0
148 maclist none
149 wds none
150 channel ${channel:-0}
151 country ${country:-IL0}
152 maxassoc ${maxassoc:-128}
153
154 $vif_pre_up
155 up
156 $vif_post_up
157 EOF
158 eval "$nas_cmd"
159 }
160
161
This page took 0.056017 seconds and 5 git commands to generate.