openwrt/package/hostap-driver/files/lib/wifi/hostap.sh

113 lines
2.5 KiB
Bash
Raw Normal View History

#!/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
}