hostap.sh 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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. [ -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. [ -n "$txpower" ] && iwconfig $device txpower $txpower
  47. [ -n "$maclist" ] && {
  48. # flush MAC list
  49. iwpriv $device maccmd 3
  50. for mac in $maclist; do
  51. iwpriv $device addmac $mac
  52. done
  53. }
  54. case "$macpolicy" in
  55. open)
  56. iwpriv $device maccmd 0
  57. ;;
  58. allow)
  59. iwpriv $device maccmd 1
  60. ;;
  61. deny)
  62. iwpriv $device maccmd 2
  63. ;;
  64. *)
  65. # default deny policy if mac list exists
  66. [ -n "$maclist" ] && iwpriv $device maccmd 2
  67. ;;
  68. esac
  69. # kick all stations if we have policy explicitly set
  70. [ -n "$macpolicy" ] && iwpriv $device maccmd 4
  71. local net_cfg bridge
  72. net_cfg="$(find_net_config "$device")"
  73. [ -z "$net_cfg" ] || {
  74. bridge="$(bridge_interface "$net_cfg")"
  75. config_set "$device" bridge "$bridge"
  76. start_net "$device" "$net_cfg"
  77. }
  78. set_wifi_up "$vif" "$ifname"
  79. }
  80. detect_prism2() {
  81. cd /proc/net/hostap
  82. [ -d wlan0 ] || return
  83. for dev in wlan*; do
  84. config_get type "$dev" type
  85. [ "$type" = prism2 ] && continue
  86. cat <<EOF
  87. config wifi-device $dev
  88. option type prism2
  89. # option rate 11M
  90. option channel 5
  91. option txpower 127
  92. option mode managed
  93. option ssid OpenWrt
  94. # option macpolicy deny
  95. # option maclist '12:34:56:78:90:12
  96. # 09:87:65:43:21:09'
  97. EOF
  98. done
  99. }