X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fsvn-archive%2Farchive.git;a=blobdiff_plain;f=package%2Fmadwifi%2Ffiles%2Flib%2Fwifi%2Fmadwifi.sh;h=0ff929260056cf2680944f15aec3b5758ee24b76;hp=001ea0933d95282a9e45561240cb9ea9010d9fd5;hb=e7eff11dc8c8d6e2bbb5b0cf48319198575ec34e;hpb=cebc25b3589bcc3a0b3c75a9185b52de739e240c diff --git a/package/madwifi/files/lib/wifi/madwifi.sh b/package/madwifi/files/lib/wifi/madwifi.sh index 001ea0933d..0ff9292600 100755 --- a/package/madwifi/files/lib/wifi/madwifi.sh +++ b/package/madwifi/files/lib/wifi/madwifi.sh @@ -42,7 +42,7 @@ scan_atheros() { *) 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}" } @@ -50,18 +50,14 @@ disable_atheros() ( 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 } @@ -85,7 +81,10 @@ enable_atheros() { config_get eap_type "$vif" eap_type config_get mode "$vif" mode - [ "$mode" = sta ] && config_get nosbeacon "$device" nosbeacon + case "$mode" in + sta) config_get nosbeacon "$device" nosbeacon;; + adhoc) config_get nosbeacon "$vif" sw_merge;; + esac config_get ifname "$vif" ifname ifname=$(wlanconfig "$ifname" create wlandev "$device" wlanmode "$mode" ${nosbeacon:+nosbeacon}) @@ -153,6 +152,7 @@ enable_atheros() { ;; psk*|wpa*) start_hostapd=1 + config_get key "$vif" key ;; esac @@ -170,13 +170,43 @@ enable_atheros() { [ -n "$bgscan" ] && iwpriv "$ifname" bgscan "$bgscan" config_get_bool antdiv "$device" diversity - [ -n "$antdiv" ] && sysctl -w dev."$device".diversity="$antdiv" >&- - config_get antrx "$device" rxantenna - [ -n "$antrx" ] && sysctl -w dev."$device".rxantenna="$antrx" >&- - 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" >&- @@ -254,6 +284,7 @@ enable_atheros() { config_set "$vif" bridge "$bridge" start_net "$ifname" "$net_cfg" } + [ -n "$ssid" ] && iwconfig "$ifname" essid on iwconfig "$ifname" essid "$ssid" set_wifi_up "$vif" "$ifname" case "$mode" in @@ -292,12 +323,21 @@ detect_atheros() { [ -d ath ] || return for dev in $(ls -d wifi* 2>&-); do config_get type "$dev" type + devname="$(cat /proc/sys/dev/$dev/dev_name)" + case "$devname" in + NanoStation*) + EXTRA_DEV=" +# Ubiquiti NanoStation features + option antenna auto # (auto|horizontal|vertical|external) +" + ;; + esac [ "$type" = atheros ] && return cat <