broadcom.sh 3.3 KB

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