*) echo "$device: Invalid mode combination in config"; return 1;;
esac
- config_set "$device" vifs "${ap:+$ap }${adhoc:+$adhoc }${ahdemo:+$ahdemo }${sta:+$sta }${wds:+$wds }${monitor:+$monitor}"
+ config_set "$device" vifs "${sta:+$sta }${ap:+$ap }${adhoc:+$adhoc }${ahdemo:+$ahdemo }${wds:+$wds }${monitor:+$monitor}"
}
local device="$1"
set_wifi_down "$device"
- # kill all running hostapd and wpa_supplicant processes that
- # are running on atheros vifs
- for pid in `pidof hostapd wpa_supplicant`; do
- grep ath /proc/$pid/cmdline >/dev/null && \
- kill $pid
- done
include /lib/network
cd /proc/sys/net
for dev in *; do
grep "$device" "$dev/%parent" >/dev/null 2>/dev/null && {
- ifconfig "$dev" down
+ [ -f "/var/run/wifi-${dev}.pid" ] &&
+ kill "$(cat "/var/run/wifi-${dev}.pid")"
+ ifconfig "$dev" down
unbridge "$dev"
wlanconfig "$dev" destroy
}
config_set "$vif" ifname "$ifname"
# only need to change freq band and channel on the first vif
- config_get agmode "$device" agmode
- [ -z "$agmode" ] && config_get agmode "$device" mode
+ config_get hwmode "$device" hwmode
+ [ -z "$hwmode" ] && config_get hwmode "$device" mode
pureg=0
- case "$agmode" in
- *b) agmode=11b;;
- *bg) agmode=11g;;
- *g) agmode=11g; pureg=1;;
- *gdt) agmode=11gdt;;
- *a) agmode=11a;;
- *adt) agmode=11adt;;
- *ast) agmode=11ast;;
- *fh) agmode=fh;;
- *) agmode=auto;;
+ 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 "$agmode"
+ iwpriv "$ifname" mode "$hwmode"
iwpriv "$ifname" pureg "$pureg"
[ "$first" = 1 ] && {
esac
if [ -n "$antgpio" ]; then
softled=0
- config_get polarity "$device" polarity
+ 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
- config_get antenna "$device" antenna
+
[ -x "$(which gpioctl 2>/dev/null)" ] || antenna=
case "$antenna" in
- internal)
+ 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
- antdiv=0
- antrx=1
- anttx=1
;;
esac
fi
config_get distance "$device" distance
[ -n "$distance" ] && athctrl -i "$device" -d "$distance" >&-
- config_get txpwr "$vif" txpower
- [ -n "$txpwr" ] && iwconfig "$ifname" txpower "${txpwr%%.*}"
-
config_get rate "$vif" rate
[ -n "$rate" ] && iwconfig "$ifname" rate "${rate%%.*}"
esac
ifconfig "$ifname" up
+
+ # TXPower settings only work if device is up already
+ config_get txpwr "$vif" txpower
+ [ -n "$txpwr" ] && iwconfig "$ifname" txpower "${txpwr%%.*}"
+
local net_cfg bridge
net_cfg="$(find_net_config "$vif")"
[ -z "$net_cfg" ] || {
NanoStation*)
EXTRA_DEV="
# Ubiquiti NanoStation features
- option antenna internal
- option polarity auto # (auto|horizontal|vertical)
+ option antenna auto # (auto|horizontal|vertical|external)
"
;;
esac