|
|
|
@ -4,7 +4,7 @@ append DRIVERS "atheros" |
|
|
|
|
scan_atheros() { |
|
|
|
|
local device="$1" |
|
|
|
|
local wds |
|
|
|
|
local adhoc sta ap |
|
|
|
|
local adhoc ahdemo sta ap monitor |
|
|
|
|
|
|
|
|
|
config_get vifs "$device" vifs |
|
|
|
|
for vif in $vifs; do |
|
|
|
@ -84,6 +84,48 @@ enable_atheros() { |
|
|
|
|
|
|
|
|
|
[ auto = "$channel" ] && channel=0 |
|
|
|
|
|
|
|
|
|
config_get_bool antdiv "$device" diversity |
|
|
|
|
config_get antrx "$device" rxantenna |
|
|
|
|
config_get anttx "$device" txantenna |
|
|
|
|
config_get_bool softled "$device" softled 1 |
|
|
|
|
|
|
|
|
|
devname="$(cat /proc/sys/dev/$device/dev_name)" |
|
|
|
|
antgpio= |
|
|
|
|
case "$devname" in |
|
|
|
|
NanoStation2) antgpio=7;; |
|
|
|
|
NanoStation5) antgpio=1;; |
|
|
|
|
esac |
|
|
|
|
if [ -n "$antgpio" ]; then |
|
|
|
|
softled=0 |
|
|
|
|
config_get antenna "$device" antenna |
|
|
|
|
case "$antenna" in |
|
|
|
|
external) antdiv=0; antrx=1; anttx=1 ;; |
|
|
|
|
horizontal) antdiv=0; antrx=1; anttx=1 ;; |
|
|
|
|
vertical) antdiv=0; antrx=2; anttx=2 ;; |
|
|
|
|
auto) antdiv=1; antrx=0; anttx=0 ;; |
|
|
|
|
esac |
|
|
|
|
|
|
|
|
|
[ -x "$(which gpioctl 2>/dev/null)" ] || antenna= |
|
|
|
|
case "$antenna" in |
|
|
|
|
horizontal|vertical|auto) |
|
|
|
|
gpioctl "dirout" "$antgpio" >/dev/null 2>&1 |
|
|
|
|
gpioctl "set" "$antgpio" >/dev/null 2>&1 |
|
|
|
|
;; |
|
|
|
|
external) |
|
|
|
|
gpioctl "dirout" "$antgpio" >/dev/null 2>&1 |
|
|
|
|
gpioctl "clear" "$antgpio" >/dev/null 2>&1 |
|
|
|
|
;; |
|
|
|
|
esac |
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
[ -n "$antdiv" ] && sysctl -w dev."$device".diversity="$antdiv" >&- |
|
|
|
|
[ -n "$antrx" ] && sysctl -w dev."$device".rxantenna="$antrx" >&- |
|
|
|
|
[ -n "$anttx" ] && sysctl -w dev."$device".txantenna="$anttx" >&- |
|
|
|
|
[ -n "$softled" ] && sysctl -w dev."$device".softled="$softled" >&- |
|
|
|
|
|
|
|
|
|
config_get distance "$device" distance |
|
|
|
|
[ -n "$distance" ] && sysctl -w dev."$device".distance="$distance" >&- |
|
|
|
|
|
|
|
|
|
local first=1 |
|
|
|
|
for vif in $vifs; do |
|
|
|
|
local start_hostapd vif_txpower |
|
|
|
@ -98,7 +140,6 @@ enable_atheros() { |
|
|
|
|
adhoc) config_get nosbeacon "$vif" sw_merge;; |
|
|
|
|
esac |
|
|
|
|
|
|
|
|
|
config_get ifname "$vif" ifname |
|
|
|
|
ifname=$(wlanconfig "$ifname" create wlandev "$device" wlanmode "$mode" ${nosbeacon:+nosbeacon}) |
|
|
|
|
[ $? -ne 0 ] && { |
|
|
|
|
echo "enable_atheros($device): Failed to set up $mode vif $ifname" >&2 |
|
|
|
@ -107,25 +148,25 @@ enable_atheros() { |
|
|
|
|
config_set "$vif" ifname "$ifname" |
|
|
|
|
|
|
|
|
|
# only need to change freq band and channel on the first vif |
|
|
|
|
[ "$first" = 1 ] && { |
|
|
|
|
config_get hwmode "$device" hwmode |
|
|
|
|
[ -z "$hwmode" ] && config_get hwmode "$device" mode |
|
|
|
|
|
|
|
|
|
pureg=0 |
|
|
|
|
case "$hwmode" in |
|
|
|
|
*b) hwmode=11b;; |
|
|
|
|
*bg) hwmode=11g;; |
|
|
|
|
*g) hwmode=11g; pureg=1;; |
|
|
|
|
*gdt) hwmode=11gdt;; |
|
|
|
|
*a) hwmode=11a;; |
|
|
|
|
*adt) hwmode=11adt;; |
|
|
|
|
*ast) hwmode=11ast;; |
|
|
|
|
*fh) hwmode=fh;; |
|
|
|
|
*) hwmode=auto;; |
|
|
|
|
esac |
|
|
|
|
iwpriv "$ifname" pureg "$pureg" |
|
|
|
|
|
|
|
|
|
[ "$first" = 1 ] && { |
|
|
|
|
pureg=0 |
|
|
|
|
case "$hwmode" in |
|
|
|
|
*b) hwmode=11b;; |
|
|
|
|
*bg) hwmode=11g;; |
|
|
|
|
*g) hwmode=11g; pureg=1;; |
|
|
|
|
*gdt) hwmode=11gdt;; |
|
|
|
|
*a) hwmode=11a;; |
|
|
|
|
*adt) hwmode=11adt;; |
|
|
|
|
*ast) hwmode=11ast;; |
|
|
|
|
*fh) hwmode=fh;; |
|
|
|
|
*) hwmode=auto;; |
|
|
|
|
esac |
|
|
|
|
iwpriv "$ifname" mode "$hwmode" |
|
|
|
|
iwpriv "$ifname" pureg "$pureg" |
|
|
|
|
|
|
|
|
|
iwconfig "$ifname" channel "$channel" >/dev/null 2>/dev/null |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|