hostap.sh 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #!/bin/sh
  2. append DRIVERS "prism2"
  3. scan_prism2() {
  4. local device="$1"
  5. config_get mode "$device" mode
  6. case "$mode" in
  7. ad-hoc|managed|master)
  8. ;;
  9. *) echo "$device: Invalid mode, ignored."; continue;;
  10. esac
  11. }
  12. disable_prism2() (
  13. local device="$1"
  14. set_wifi_down "$device"
  15. include /lib/network
  16. ifconfig "$device" down
  17. unbridge "$device"
  18. return 0
  19. )
  20. enable_prism2() {
  21. local irqdevs
  22. config_get prifw "$device" prifw
  23. config_get stafw "$device" stafw
  24. config_get mode "$device" mode
  25. config_get rate "$device" rate
  26. config_get channel "$device" channel
  27. config_get txpower "$device" txpower
  28. config_get ssid "$device" ssid
  29. config_get maclist "$device" maclist
  30. config_get macpolicy "$device" macpolicy
  31. [ -f "$prifw" ] || [ -f "$stafw" ] && [ -x /usr/sbin/prism2_srec ] && {
  32. irqdevs=$(cat /proc/interrupts | grep wifi${device##wlan} | cut -b 37- | tr -d ",")
  33. for dev in $irqdevs; do
  34. [ "$(config_get "$dev" type)" = "atheros" ] && wifi down "$dev"
  35. done
  36. [ -f "$prifw" ] && prism2_srec -g $device $prifw
  37. [ -f "$stafw" ] && prism2_srec -r $device $stafw
  38. for dev in $irqdevs; do
  39. [ "$(config_get "$dev" type)" = "atheros" ] && wifi up "$dev"
  40. done
  41. }
  42. [ -n "$mode" ] && iwconfig $device mode $mode
  43. [ -n "$rate" ] && iwconfig $device rate $rate
  44. [ -n "$channel" ] && iwconfig $device channel $channel
  45. [ -n "$ssid" ] && iwconfig $device essid $ssid
  46. ifconfig "$device" up
  47. [ -n "$txpower" ] && iwconfig $device txpower $txpower
  48. [ -n "$maclist" ] && {
  49. # flush MAC list
  50. iwpriv $device maccmd 3
  51. for mac in $maclist; do
  52. iwpriv $device addmac $mac
  53. done
  54. }
  55. case "$macpolicy" in
  56. open)
  57. iwpriv $device maccmd 0
  58. ;;
  59. allow)
  60. iwpriv $device maccmd 1
  61. ;;
  62. deny)
  63. iwpriv $device maccmd 2
  64. ;;
  65. *)
  66. # default deny policy if mac list exists
  67. [ -n "$maclist" ] && iwpriv $device maccmd 2
  68. ;;
  69. esac
  70. # kick all stations if we have policy explicitly set
  71. [ -n "$macpolicy" ] && iwpriv $device maccmd 4
  72. local net_cfg bridge
  73. net_cfg="$(find_net_config "$device")"
  74. [ -z "$net_cfg" ] || {
  75. bridge="$(bridge_interface "$net_cfg")"
  76. config_set "$device" bridge "$bridge"
  77. start_net "$device" "$net_cfg"
  78. }
  79. set_wifi_up "$device" "$device"
  80. }
  81. detect_prism2() {
  82. cd /proc/net/hostap
  83. [ -d wlan0 ] || return
  84. for dev in wlan*; do
  85. config_get type "$dev" type
  86. [ "$type" = prism2 ] && continue
  87. cat <<EOF
  88. config wifi-device $dev
  89. option type prism2
  90. # option rate 11M
  91. option channel 5
  92. option txpower 127
  93. option mode managed
  94. option ssid OpenWrt
  95. # option macpolicy deny
  96. # option maclist '12:34:56:78:90:12
  97. # 09:87:65:43:21:09'
  98. # REMOVE THIS LINE TO ENABLE WIFI:
  99. option disabled 1
  100. EOF
  101. done
  102. }