mirror of
git://git.openwrt.org/openwrt/openwrt.git
synced 2024-12-15 03:14:50 +00:00
be9bf2bf40
SVN-Revision: 9610
113 lines
2.5 KiB
Bash
Executable File
113 lines
2.5 KiB
Bash
Executable File
#!/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
|
|
}
|
|
|