aboutsummaryrefslogtreecommitdiffstats
path: root/package/hostap-driver/files/lib/wifi/hostap.sh
diff options
context:
space:
mode:
Diffstat (limited to 'package/hostap-driver/files/lib/wifi/hostap.sh')
-rwxr-xr-xpackage/hostap-driver/files/lib/wifi/hostap.sh112
1 files changed, 112 insertions, 0 deletions
diff --git a/package/hostap-driver/files/lib/wifi/hostap.sh b/package/hostap-driver/files/lib/wifi/hostap.sh
new file mode 100755
index 0000000000..964a504180
--- /dev/null
+++ b/package/hostap-driver/files/lib/wifi/hostap.sh
@@ -0,0 +1,112 @@
+#!/bin/sh
+append DRIVERS "prism2"
+
+scan_prism2() {
+ local device="$1"
+
+ config_get mode "$device" mode
+ case "$mode" in
+ ad-hoc|managed|master)
+ ;;
+ *) echo "$device: Invalid mode, ignored."; continue;;
+ esac
+
+}
+
+disable_prism2() (
+ local device="$1"
+
+ set_wifi_down "$device"
+
+ include /lib/network
+ ifconfig "$device" down
+ unbridge "$device"
+ return 0
+)
+
+enable_prism2() {
+ local irqdevs
+
+ config_get prifw "$device" prifw
+ config_get stafw "$device" stafw
+ config_get mode "$device" mode
+ config_get rate "$device" rate
+ config_get channel "$device" channel
+ config_get txpower "$device" txpower
+ config_get ssid "$device" ssid
+ config_get maclist "$device" maclist
+ config_get macpolicy "$device" macpolicy
+ [ -x /usr/sbin/prism2_srec ] && {
+ irqdevs=$(cat /proc/interrupts | grep wifi${device##wlan} | cut -b 37- | tr -d ",")
+ for dev in "$irqdevs"; do
+ [ "$(config_get "$dev" type)" = "atheros" ] && wifi down "$dev"
+ done
+ [ -f "$prifw" ] && prism2_srec -g $device $prifw
+ [ -f "$stafw" ] && prism2_srec -r $device $stafw
+ for dev in "$irqdevs"; do
+ [ "$(config_get "$dev" type)" = "atheros" ] && wifi up "$dev"
+ done
+ }
+ [ -n "$mode" ] && iwconfig $device mode $mode
+ [ -n "$rate" ] && iwconfig $device rate $rate
+ [ -n "$channel" ] && iwconfig $device channel $channel
+ [ -n "$ssid" ] && iwconfig $device essid $ssid
+ [ -n "$txpower" ] && iwconfig $device txpower $txpower
+ [ -n "$maclist" ] && {
+ # flush MAC list
+ iwpriv $device maccmd 3
+ for mac in $maclist; do
+ iwpriv $device addmac $mac
+ done
+ }
+ case "$macpolicy" in
+ open)
+ iwpriv $device maccmd 0
+ ;;
+ allow)
+ iwpriv $device maccmd 1
+ ;;
+ deny)
+ iwpriv $device maccmd 2
+ ;;
+ *)
+ # default deny policy if mac list exists
+ [ -n "$maclist" ] && iwpriv $device maccmd 2
+ ;;
+ esac
+ # kick all stations if we have policy explicitly set
+ [ -n "$macpolicy" ] && iwpriv $device maccmd 4
+ local net_cfg bridge
+ net_cfg="$(find_net_config "$device")"
+ [ -z "$net_cfg" ] || {
+ bridge="$(bridge_interface "$net_cfg")"
+ config_set "$device" bridge "$bridge"
+ start_net "$device" "$net_cfg"
+ }
+ set_wifi_up "$vif" "$ifname"
+}
+
+
+detect_prism2() {
+ cd /proc/net/hostap
+ [ -d wlan0 ] || return
+ for dev in wlan*; do
+ config_get type "$dev" type
+ [ "$type" = prism2 ] && continue
+ cat <<EOF
+
+config wifi-device $dev
+ option type prism2
+# option rate 11M
+ option channel 5
+ option txpower 127
+ option mode managed
+ option ssid OpenWrt
+# option macpolicy deny
+# option maclist '12:34:56:78:90:12
+# 09:87:65:43:21:09'
+
+EOF
+ done
+}
+