config_get_bool softled "$device" softled 1
devname="$(cat /proc/sys/dev/$device/dev_name)"
- antgpio=
+ local antgpio=
+ local invert=
case "$devname" in
- NanoStation2) antgpio=7;;
- NanoStation5) antgpio=1;;
+ NanoStation2) antgpio=7; invert=1;;
+ NanoStation5) antgpio=1; invert=1;;
+ "NanoStation Loco2") antgpio=2;;
esac
+ if [ -n "$invert" ]; then
+ _set="clear"
+ _clear="set"
+ else
+ _set="set"
+ _clear="clear"
+ fi
if [ -n "$antgpio" ]; then
softled=0
config_get antenna "$device" antenna
esac
[ -x "$(which gpioctl 2>/dev/null)" ] || antenna=
+ gpioctl "dirout" "$antgpio" >/dev/null 2>&1
case "$antenna" in
horizontal|vertical|auto)
- gpioctl "dirout" "$antgpio" >/dev/null 2>&1
- gpioctl "set" "$antgpio" >/dev/null 2>&1
+ gpioctl "$_clear" "$antgpio" >/dev/null 2>&1
;;
external)
- gpioctl "dirout" "$antgpio" >/dev/null 2>&1
- gpioctl "clear" "$antgpio" >/dev/null 2>&1
+ gpioctl "$_set" "$antgpio" >/dev/null 2>&1
;;
esac
fi
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= nosbeacon=
config_get ifname "$vif" ifname
config_get mode "$vif" mode
case "$mode" in
- sta) config_get nosbeacon "$device" nosbeacon;;
- adhoc) config_get nosbeacon "$vif" sw_merge;;
+ sta) config_get_bool nosbeacon "$device" nosbeacon;;
+ adhoc) config_get_bool nosbeacon "$vif" sw_merge 1;;
esac
+ [ "$nosbeacon" = 1 ] || nosbeacon=""
ifname=$(wlanconfig "$ifname" create wlandev "$device" wlanmode "$mode" ${nosbeacon:+nosbeacon})
[ $? -ne 0 ] && {
echo "enable_atheros($device): Failed to set up $mode vif $ifname" >&2
}
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" mode "$hwmode"
- iwpriv "$ifname" pureg "$pureg"
-
- iwconfig "$ifname" channel "$channel" >/dev/null 2>/dev/null
- }
-
+ 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
+
config_get_bool hidden "$vif" hidden 0
iwpriv "$ifname" hide_ssid "$hidden"
1|on|enabled) wds=1;;
*) wds=0;;
esac
- iwpriv "$ifname" wds "$wds"
+ iwpriv "$ifname" wds "$wds" >/dev/null 2>&1
[ "$mode" = ap -a "$wds" = 1 ] && {
config_get_bool wdssep "$vif" wdssep 1
;;
esac
+ config_get_bool uapsd "$vif" uapsd 0
+ iwpriv "$ifname" uapsd "$uapsd"
+
config_get_bool bgscan "$vif" bgscan
[ -n "$bgscan" ] && iwpriv "$ifname" bgscan "$bgscan"
[ -n "$rts" ] && iwconfig "$ifname" rts "${rts%%.*}"
config_get_bool comp "$vif" compression 0
- iwpriv "$ifname" compression "$comp"
+ iwpriv "$ifname" compression "$comp" >/dev/null 2>&1
config_get_bool minrate "$vif" minrate
[ -n "$minrate" ] && iwpriv "$ifname" minrate "$minrate"
fi
;;
esac
- first=0
done
}