English Language flag
// Log In
// CVSweb
Project: FreeWRT
// Summary // Activity // Search // Tracker // Lists // News // SCM // Wiki

SCM Repository

ViewVC logotype

Diff of /branches/common-nfo/package/broadcom-wl/files/wl-broadcom

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3426 by tg, Wed Jul 18 12:45:43 2007 UTC revision 3427 by tg, Wed Aug 8 11:08:41 2007 UTC
# Line 4  Line 4 
4  # material, please see the LICENCE file in the top-level directory  # material, please see the LICENCE file in the top-level directory
5  # or at http://www.freewrt.org/licence for details.  # or at http://www.freewrt.org/licence for details.
6  #  #
7  # Copyright (c) 2006 Dirk Nehring <dnehring@freewrt.org>  # Copyright (c) 2007
8  # Christian Fischer <spaetzle@freewrt.org>  #       Thorsten Glaser <tg@freewrt.org>
9  #  #   Christian Fischer <spaetzle@freewrt.org>
10    # Copyright (c) 2006
11    #       Dirk Nehring <dnehring@freewrt.org>
12    #       Christian Fischer <spaetzle@freewrt.org>
13    
14  init_debug() {  init_debug() {
15          err=$(eval "$*" 2>&1) && return 0          err=$(eval "$*" 2>&1) && return 0
# Line 18  init_debug() { Line 20  init_debug() {
20  }  }
21    
22  iface_type() {  iface_type() {
23          [ x"$IF_WIRELESS_TYPE" = x"broadcom" ] && echo $IFACE | grep -q ^wl[0-9]          [[ $IF_WIRELESS_TYPE = broadcom ]] && echo $IFACE | grep -q ^wl[0-9]
24  }  }
25    
26  security_none() {  security_none() {
27          wsec=0          wsec=0
28          [ x"$IF_WIRELESS_MODE" = x"sta" ] && init_debug wl join $IF_WIRELESS_SSID          [[ $IF_WIRELESS_MODE = sta ]] && init_debug wl join $IF_WIRELESS_SSID
29  }  }
30    
31  security_wep() {  security_wep() {
# Line 33  security_wep() { Line 35  security_wep() {
35          init_debug wl eap 0          init_debug wl eap 0
36          init_debug wl wpa_auth 0          init_debug wl wpa_auth 0
37    
38          if [ x"$IF_WIRELESS_MODE" = x"sta" ]; then          if [[ $IF_WIRELESS_MODE = sta ]]; then
39                  case $IF_WIRELESS_AUTHORIZATION in                  case $IF_WIRELESS_AUTHORIZATION in
40                          shared)                  shared)
41                                  authorization=shared                          authorization=shared
42                                  ;;                          ;;
43                          *)                  *)
44                                  authorization=open                          authorization=open
45                                  ;;                          ;;
46                  esac                  esac
47    
48                  init_debug wl join $IF_WIRELESS_SSID key $IF_WIRELESS_KEY1 \                  init_debug wl join $IF_WIRELESS_SSID key $IF_WIRELESS_KEY1 \
# Line 49  security_wep() { Line 51  security_wep() {
51          else          else
52                  for keyno in '' 0 1 2 3; do                  for keyno in '' 0 1 2 3; do
53                          eval wkey='$IF_WIRELESS_KEY'$keyno                          eval wkey='$IF_WIRELESS_KEY'$keyno
54                          test -z $wkey && continue                          [[ -z $wkey ]] && continue
55    
56                          # wkey ist set, do an entry                          # wkey ist set, do an entry
57                          init_debug wl addwep ${keyno:-0} $wkey                          init_debug wl addwep ${keyno:-0} $wkey
58                          wkey_set=1  # mark as done                          wkey_set=1  # mark as done
59    
60                          # is key numberless?                          # is key numberless?
61                          test -z "$keyno" && break  # yes, ignore numbered keys                          [[ -z $keyno ]] && break  # yes, ignore numbered keys
62    
63                          # primary key number set?                          # primary key number set?
64                          test -z "$pkey" && pkey=$keyno  # set it with the first one found                          [[ -z $pkey ]] && pkey=$keyno  # set it with the first one found
65    
66                          # set primary key number from config if it isn't out of range                          # set primary key number from config if it isn't out of range
67                          test x"$IF_WIRELESS_PRIMARY_KEY" = x"$keyno" && pkey=$keyno                          [[ $IF_WIRELESS_PRIMARY_KEY = $keyno ]] && pkey=$keyno
68                  done                  done
69    
70                  test -z "$wkey_set" && return 1  # no wepkey entries done, break here                  [[ -z $wkey_set ]] && return 1  # no wepkey entries done, break here
71                  init_debug wl primary_key $pkey                  init_debug wl primary_key $pkey
72          fi          fi
73  }  }
# Line 74  security_wpapsk() { Line 76  security_wpapsk() {
76          local postup          local postup
77    
78          case $IF_WIRELESS_AUTHORIZATION in          case $IF_WIRELESS_AUTHORIZATION in
79                  psk)          psk)
80                          auth=4                  auth=4
81                  ;;                  ;;
82                  psk2)          psk2)
83                          auth=128                  auth=128
84                  ;;                  ;;
85                  "psk psk2")          "psk psk2")
86                          auth=132                  auth=132
87                  ;;                  ;;
88                  *)          *)
89                          mstate 1                  mstate 1
90                          merr "Wrong wireless authorisation $IF_WIRELESS_AUTHORIZATION for security wpa-psk"                  merr "Wrong wireless authorisation $IF_WIRELESS_AUTHORIZATION for security wpa-psk"
91                          return 1                  return 1
92                  ;;                  ;;
93          esac          esac
94    
# Line 95  security_wpapsk() { Line 97  security_wpapsk() {
97    
98          # don't handle wds as special case, i think its only interesting          # don't handle wds as special case, i think its only interesting
99          # if we have routed or bridged networking          # if we have routed or bridged networking
100          if bridged_mode          if bridged_mode; then
101          then                  cat > ${postup}/postup <<EOF
                 cat > ${postup}/postup <<!  
102  mprint -n "Starting nas daemon"  mprint -n "Starting nas daemon"
103  /usr/sbin/nas -P /var/run/nas.lan.pid -l $BRIDGE_IFACE -H 34954 -i $IFACE \  (doquit=0
104  $nas_auth -m $auth -k $IF_WIRELESS_WPA_KEY -s $IF_WIRELESS_SSID -w $wsec \  trap 'doquit=1' USR1
105  -g $gtk_rekey &  while sleep 1; do
106            [[ \$doquit = 0 ]] || break
107            /usr/sbin/nas -P /var/run/nas.lan.pid -l $BRIDGE_IFACE -H 34954 \
108                -i $IFACE $nas_auth -m $auth -k $IF_WIRELESS_WPA_KEY \
109                -s $IF_WIRELESS_SSID -w $wsec -g $gtk_rekey
110    done) &
111    echo \$! >/var/run/nas.watch.pid
112  mstate 0  mstate 0
113  !  EOF
114          else          else
115                  # routed                  # routed
116                  mprint -n "Starting nas daemon"                  mprint -n "Starting nas daemon"
117                  /usr/sbin/nas -P /var/run/nas.lan.pid  -H 34954 -i $IFACE $nas_auth \                  (doquit=0
118                  -m $auth -k "${IF_WIRELESS_WPA_KEY:-""}" -s "$IF_WIRELESS_SSID" \                  trap 'doquit=1' USR1
119                  -w $wsec -g $gtk_rekey &                  while sleep 1; do
120                            [[ $doquit = 0 ]] || break
121                            /usr/sbin/nas -P /var/run/nas.lan.pid -H 34954 \
122                                -i $IFACE $nas_auth -m $auth \
123                                -k "$IF_WIRELESS_WPA_KEY" -s "$IF_WIRELESS_SSID" \
124                                -w $wsec -g $gtk_rekey
125                    done) &
126                    echo $! >/var/run/nas.watch.pid
127                  mstate 0                  mstate 0
128          fi          fi
129  }  }
# Line 118  security_8021x() { Line 132  security_8021x() {
132          local postup          local postup
133    
134          case $IF_WIRELESS_AUTHORIZATION in          case $IF_WIRELESS_AUTHORIZATION in
135                  wep)          wep)
136                          auth=0                  auth=0
137                          # only honour bridged or routed                  # only honour bridged or routed
138                          if bridged_mode; then                  if bridged_mode; then
139                                  cat > ${postup}/postup <<!                          cat > ${postup}/postup <<EOF
140  mprint -n "Starting nas daemon"  mprint -n "Starting nas daemon"
141  /usr/sbin/nas -P /var/run/nas.lan.pid -l $BRIDGE_IFACE -H 34954 -i $IFACE &  (doquit=0
142    trap 'doquit=1' USR1
143    while sleep 1; do
144            [[ \$doquit = 0 ]] || break
145            /usr/sbin/nas -P /var/run/nas.lan.pid -l $BRIDGE_IFACE -H 34954 \
146                -i $IFACE
147    done) &
148    echo \$! >/var/run/nas.watch.pid
149  mstate 0  mstate 0
150  !  EOF
151                          else                  else
152                                  mprint -n "Starting nas daemon"                          mprint -n "Starting nas daemon"
153                                  /usr/sbin/nas -P /var/run/nas.lan.pid -H 34954 -i $IFACE &                          (doquit=0
154                                  mstate 0                          trap 'doquit=1' USR1
155                          fi                          while sleep 1; do
156                          return 0                                  [[ $doquit = 0 ]] || break
157                                    /usr/sbin/nas -P /var/run/nas.lan.pid \
158                                        -H 34954 -i $IFACE
159                            done) &
160                            echo $! >/var/run/nas.watch.pid
161                            mstate 0
162                    fi
163                    return 0
164                  ;;                  ;;
165                  wpa)          wpa)
166                          auth=2                  auth=2
167                  ;;                  ;;
168                  wpa2)          wpa2)
169                          auth=64                  auth=64
170                  ;;                  ;;
171                  "wpa wpa2")          "wpa wpa2")
172                          auth=66                  auth=66
173                  ;;                  ;;
174                  *)          *)
175                          merr "Wrong wireless authorisation $IF_WIRELESS_AUTHORIZATION for security wpa-psk"                  merr "Wrong wireless authorisation $IF_WIRELESS_AUTHORIZATION for security wpa-psk"
176                          return 1                  return 1
177                  ;;                  ;;
178          esac          esac
179    
180          init_debug wl wpa_auth $auth          init_debug wl wpa_auth $auth
181          init_debug wl eap 0          init_debug wl eap 0
182    
183          if bridged_mode          if bridged_mode; then
184          then                  cat > ${postup}/postup <<EOF
                 cat > ${postup}/postup <<!  
185  mprint -n "Starting nas daemon"  mprint -n "Starting nas daemon"
186  /usr/sbin/nas -P /var/run/nas.lan.pid $BRIDGE_IFACE -H 34954 -i $IFACE -A \  (doquit=0
187  -m $auth -r "${IF_WIRELESS_RADIUS_KEY:-""}" -h $IF_WIRELESS_RADIUS_IPADDR \  trap 'doquit=1' USR1
188  -p ${IF_WIRELESS_RADIUS_PORT:-1812} -t 36000 -s "$IF_WIRELESS_SSID" \  while sleep 1; do
189  -w $crypto_num -g $gtk_rekey &          [[ \$doquit = 0 ]] || break
190            /usr/sbin/nas -P /var/run/nas.lan.pid $BRIDGE_IFACE -H 34954 \
191                -i $IFACE -A -m $auth -r "$IF_WIRELESS_RADIUS_KEY" \
192                -h $IF_WIRELESS_RADIUS_IPADDR -p ${IF_WIRELESS_RADIUS_PORT:-1812} \
193                -t 36000 -s "$IF_WIRELESS_SSID" -w $crypto_num -g $gtk_rekey
194    done) &
195    echo \$! >/var/run/nas.watch.pid
196  mstate 0  mstate 0
197  !  EOF
198          else          else
199                  mprint -n "Starting nas daemon"                  mprint -n "Starting nas daemon"
200                  /usr/sbin/nas -P /var/run/nas.lan.pid -H 34954 -i $IFACE -A -m $auth \                  (doquit=0
201                  -r "${IF_WIRELESS_RADIUS_KEY:-""}" -h $IF_WIRELESS_RADIUS_IPADDR \                  trap 'doquit=1' USR1
202                  -p ${IF_WIRELESS_RADIUS_PORT:-1812} -t 36000 -s "$IF_WIRELESS_SSID" \                  while sleep 1; do
203                  -w $crypto_num -g $gtk_rekey &                          [[ $doquit = 0 ]] || break
204                            /usr/sbin/nas -P /var/run/nas.lan.pid -H 34954 \
205                                -i $IFACE -A -m $auth -r "$IF_WIRELESS_RADIUS_KEY" \
206                                -h $IF_WIRELESS_RADIUS_IPADDR \
207                                -p ${IF_WIRELESS_RADIUS_PORT:-1812} -t 36000 \
208                                -s "$IF_WIRELESS_SSID" -w $crypto_num -g $gtk_rekey
209                    done) &
210                    echo $! >/var/run/nas.watch.pid
211                  mstate 0                  mstate 0
212          fi          fi
213  }  }
214    
215  get_bridge_iface() {  get_bridge_iface() {
216          [ -x "$(which brctl)" ] || return 1          [[ -x $(whence -p brctl) ]] || return 1
217          brctl show 2>&- | grep -q $IFACE || return 1          brctl show 2>&- | grep -q $IFACE || return 1
218          for var in $(brctl show 2>&- | grep -o ^[a-z]*[^[:space:]])          for var in $(brctl show 2>&- | grep -o ^[a-z]*[^[:space:]]); do
         do  
219                  brctl showstp $var | grep -q ^${IFACE}[[:space:]] || continue                  brctl showstp $var | grep -q ^${IFACE}[[:space:]] || continue
220                  BRIDGE_IFACE=$var                  BRIDGE_IFACE=$var
221                  return 0                  return 0
# Line 184  get_bridge_iface() { Line 223  get_bridge_iface() {
223  }  }
224    
225  bridged_mode() {  bridged_mode() {
226          if [ x"$PARENT_IFACE_TYPE" = x"bridge" ]          if [[ $PARENT_IFACE_TYPE = bridge ]]; then
         then  
227                  BRIDGE_IFACE=$PARENT_IFACE                  BRIDGE_IFACE=$PARENT_IFACE
228          else          else
229                  get_bridge_iface || return 1                  get_bridge_iface || return 1
230    
231                  if ! is_up $BRIDGE_IFACE                  if ! is_up $BRIDGE_IFACE; then
                 then  
232                          mprint -n "Starting nas daemon"                          mprint -n "Starting nas daemon"
233                          mstate 1                          mstate 1
234                          merr"Can not start nas daemon, bridge $BRIDGE_IFACE isn't up"                          merr "Can not start nas daemon, bridge $BRIDGE_IFACE isn't up"
235                          exit 1                          exit 1
236                  fi                  fi
237          fi          fi
238          postup="/tmp/ifupdown/pcode/${BRIDGE_IFACE}/${IFACE}"          postup="/tmp/ifupdown/pcode/${BRIDGE_IFACE}/$IFACE"
239          mkdir -p $postup          mkdir -p $postup
240          chmod 700 $postup          chmod 700 $postup
241          return 0          return 0
# Line 217  if_up() { Line 254  if_up() {
254    
255          mprint -n "Initializing $IFACE_TYPE $IFACE"          mprint -n "Initializing $IFACE_TYPE $IFACE"
256    
257          [ -z "$IF_WIRELESS_SSID" ] && err="ESSID not set"          [[ -z $IF_WIRELESS_SSID ]] && err="ESSID not set"
258          [ -z "$IF_WIRELESS_MODE" ] && err="Operation mode not set"          [[ -z $IF_WIRELESS_MODE ]] && err="Operation mode not set"
259          [ x"$IF_WIRELESS_SECURITY" = x"8021x" -a -z "$IF_WIRELESS_RADIUS_IPADDR" \          [[ $IF_WIRELESS_SECURITY = 8021x && -z $IF_WIRELESS_RADIUS_IPADDR &&\
260                  -a x"$IF_WIRELESS_AUTHORIZATION" != x"wep" ] && \                   $IF_WIRELESS_AUTHORIZATION != wep ]] && \
261                  err="Radius server address not set"                  err="Radius server address not set"
262    
263          [ -n "$err" ] && {          if [[ -n $err ]]; then
264                  mstate 1                  mstate 1
265                  merr $err                  merr $err
266                  return 1                  return 1
267          }          fi
268    
269    
270          # kill old nas process          # kill old nas process
271          pid="$(cat /var/run/nas.lan.pid 2>&-)"          thepid=
272          [ -n "$pid" -a -d "/proc/$pid" ] && kill $pid          [[ -e /var/run/nas.watch.pid ]] && thepid=$(</var/run/nas.watch.pid)
273            if [[ -n $thepid && -d /proc/$thepid ]]; then
274                    kill -USR1 $thepid
275                    sleep 1
276                    kill $thepid
277                    sleep 1
278                    kill -9 $thepid
279            fi
280            killall nas
281    
282    
283          ### init driver ###          ### init driver ###
# Line 256  if_up() { Line 301  if_up() {
301                  init_debug wl ap 1                  init_debug wl ap 1
302                  ;;                  ;;
303          wds)          wds)
304                  [ -z "$IF_WIRELESS_WDS" ] && return 1                  [[ -z $IF_WIRELESS_WDS ]] && return 1
305                  # TODO: messages                  # TODO: messages
306                  init_debug wl ap 1                  init_debug wl ap 1
307                  ;;                  ;;
# Line 273  if_up() { Line 318  if_up() {
318                  mstate 1                  mstate 1
319                  merr "Unknown operation mode $IF_WIRELESS_MODE"                  merr "Unknown operation mode $IF_WIRELESS_MODE"
320                  return 1                  return 1
321                  ;;                        ;;
322          esac          esac
323    
324          case $IF_WIRELESS_ENCRYPTION in          case $IF_WIRELESS_ENCRYPTION in
325                  wep)          wep)
326                          wsec=1                  wsec=1
327                          ;;                  ;;
328                  tkip)          tkip)
329                          wsec=2                  wsec=2
330                          ;;                  ;;
331                  aes)          aes)
332                          wsec=4                  wsec=4
333                          ;;                  ;;
334                  aes+tkip)          aes+tkip)
335                          wsec=6                  wsec=6
336                          ;;                  ;;
337          esac          esac
338    
339          # set country          # set country
340          [ -n "$IF_WIRELESS_COUNTRY" ] && init_debug wl country $IF_WIRELESS_COUNTRY          [[ -n $IF_WIRELESS_COUNTRY ]] && init_debug wl country $IF_WIRELESS_COUNTRY
341    
342          # set gmode          # set gmode
343          [ -n "$IF_WIRELESS_GMODE" ] && init_debug wl gmode $IF_WIRELESS_GMODE          [[ -n $IF_WIRELESS_GMODE ]] && init_debug wl gmode $IF_WIRELESS_GMODE
344    
345          # set isolate mode          # set isolate mode
346          [ -n "$IF_WIRELESS_ISOLATE" ] && init_debug wl ap_isolate \          [[ -n $IF_WIRELESS_ISOLATE ]] && init_debug wl ap_isolate \
347                  $IF_WIRELESS_ISOLATE                  $IF_WIRELESS_ISOLATE
348    
349          # set macmode mode          # set macmode mode
350          [ -n "$IF_WIRELESS_MACMODE" ] && init_debug wl macmode $IF_WIRELESS_MACMODE          [[ -n $IF_WIRELESS_MACMODE ]] && init_debug wl macmode $IF_WIRELESS_MACMODE
351    
352          # set MAC addresses          # set MAC addresses
353          [ -n "$IF_WIRELESS_MAC" ] && init_debug wl mac $IF_WIRELESS_MAC          [[ -n $IF_WIRELESS_MAC ]] && init_debug wl mac $IF_WIRELESS_MAC
354    
355          # set WLAN channel          # set WLAN channel
356          [ -n "$IF_WIRELESS_CHANNEL" ] && init_debug wl channel $IF_WIRELESS_CHANNEL          [[ -n $IF_WIRELESS_CHANNEL ]] && init_debug wl channel $IF_WIRELESS_CHANNEL
357    
358          # set frameburst          # set frameburst
359          [ -n "$IF_WIRELESS_FRAMEBURST" ] && init_debug wl frameburst \          [[ -n $IF_WIRELESS_FRAMEBURST ]] && init_debug wl frameburst \
360                  $IF_WIRELESS_FRAMEBURST                  $IF_WIRELESS_FRAMEBURST
361    
362          # set afterburner          # set afterburner
363          # remove this because command afterburner_override seems to be nonexistent for now          # remove this because command afterburner_override seems to be nonexistent for now
364          #[ -n "$IF_WIRELESS_AFTERBURNER" ] && init_debug wl afterburner_override \          #[[ -n $IF_WIRELESS_AFTERBURNER ]] && init_debug wl afterburner_override \
365          #       $IF_WIRELESS_AFTERBURNER          #       $IF_WIRELESS_AFTERBURNER
366    
367          gtk_rekey=${IF_WIRELESS_WPA_GTK_REKEY:-3600}          gtk_rekey=${IF_WIRELESS_WPA_GTK_REKEY:-3600}
368          gtk_rekey=${gtk_rekey#0}          gtk_rekey=${gtk_rekey#0}
369    
370          case $IF_WIRELESS_SECURITY in          case $IF_WIRELESS_SECURITY in
371                  none)          none)
372                          security_none                  security_none
373                          ;;                  ;;
374                  wep)          wep)
375                          security_wep                  security_wep
376                          ;;                  ;;
377                  wpa-psk)          wpa-psk)
378                          security_wpapsk                  security_wpapsk
379                          ;;                  ;;
380                  8021x)          8021x)
381                          security_8021x                  security_8021x
382                          ;;                  ;;
383                  *)          *)
384                          # no fallback                  # no fallback
385                          mstate 1                  mstate 1
386                          merr "Wireless security not set"                  merr "Wireless security not set"
387                          return 1                  return 1
388                          ;;                  ;;
389          esac          esac
390    
391          init_debug wl ssid $IF_WIRELESS_SSID          init_debug wl ssid $IF_WIRELESS_SSID
# Line 348  if_up() { Line 393  if_up() {
393          init_debug wl up          init_debug wl up
394          mstate 0          mstate 0
395    
396          [ -z "$PARENT_IFACE_TYPE" ] && is_up ${BRIDGE_IFACE:="FOO"} || return 0          [[ -z $PARENT_IFACE_TYPE ]] && is_up ${BRIDGE_IFACE:="FOO"} || return 0
397    
398          [ -f /tmp/ifupdown/pcode/${BRIDGE_IFACE}/${IFACE}/postup ] && \          [[ -f /tmp/ifupdown/pcode/${BRIDGE_IFACE}/${IFACE}/postup ]] && \
399                  . /tmp/ifupdown/pcode/${BRIDGE_IFACE}/${IFACE}/postup                  . /tmp/ifupdown/pcode/${BRIDGE_IFACE}/${IFACE}/postup
400  }  }
401    
# Line 360  if_down() { Line 405  if_down() {
405          init_debug wl radio off          init_debug wl radio off
406          init_debug wl down          init_debug wl down
407    
408          pid="$(cat /var/run/nas.lan.pid 2>&-)"          thepid=
409          [ -n "$pid" -a -d "/proc/$pid" ] && kill $pid          [[ -e /var/run/nas.watch.pid ]] && thepid=$(</var/run/nas.watch.pid)
410                    if [[ -n $thepid && -d /proc/$thepid ]]; then
411                    kill -USR1 $thepid
412                    sleep 1
413                    kill $thepid
414                    sleep 1
415                    kill -9 $thepid
416            fi
417            killall nas
418    
419          mstate 0          mstate 0
420          return          return
421  }  }

Legend:
Removed from v.3426  
changed lines
  Added in v.3427

root@freewrt.org:443
ViewVC Help
Powered by ViewVC 1.1.20