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
[ 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
- nosbeacon=
+ local start_hostapd= vif_txpower= nosbeacon=
config_get ifname "$vif" ifname
config_get enc "$vif" encryption
config_get eap_type "$vif" eap_type
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
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
}
}
;;
esac
- config_get ssid "$vif" ssid
config_get_bool bgscan "$vif" bgscan
[ -n "$bgscan" ] && iwpriv "$ifname" bgscan "$bgscan"
- 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" ] && athctrl -i "$device" -d "$distance" >&-
-
config_get rate "$vif" rate
[ -n "$rate" ] && iwconfig "$ifname" rate "${rate%%.*}"
config_get_bool ar "$vif" ar
[ -n "$ar" ] && iwpriv "$ifname" ar "$ar"
- config_get_bool turbo "$vif" turbo
- [ -n "$turbo" ] && iwpriv "$ifname" turbo "$turbo"
-
config_get_bool beacon_power "$vif" beacon_power
[ -n "$beacon_power" ] && iwpriv "$ifname" beacon_pwr "$beacon_power"
config_set "$vif" bridge "$bridge"
start_net "$ifname" "$net_cfg"
}
- [ -n "$ssid" ] && iwconfig "$ifname" essid on
- iwconfig "$ifname" essid "$ssid"
+
+ config_get ssid "$vif" ssid
+ [ -n "$ssid" ] && {
+ iwconfig "$ifname" essid on
+ iwconfig "$ifname" essid "$ssid"
+ }
+
set_wifi_up "$vif" "$ifname"
# TXPower settings only work if device is up already
"
;;
esac
- [ "$type" = atheros ] && return
+ [ "$type" = atheros ] && continue
cat <<EOF
config wifi-device $dev
option type atheros