X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/be4aa36f4873365cbb465e3dfc648d023b681853..e5c40dc4c357665c3129ac5ad15943643183c32e:/package/madwifi/files/lib/wifi/madwifi.sh?ds=sidebyside diff --git a/package/madwifi/files/lib/wifi/madwifi.sh b/package/madwifi/files/lib/wifi/madwifi.sh index 7b696f0d5..8a4572db6 100755 --- a/package/madwifi/files/lib/wifi/madwifi.sh +++ b/package/madwifi/files/lib/wifi/madwifi.sh @@ -28,15 +28,22 @@ find_atheros_phy() { scan_atheros() { local device="$1" local wds - local adhoc ahdemo sta ap monitor + local adhoc ahdemo sta ap monitor disabled [ ${device%[0-9]} = "wifi" ] && config_set "$device" phy "$device" + + local ifidx=0 config_get vifs "$device" vifs for vif in $vifs; do - + config_get_bool disabled "$vif" disabled 0 + [ $disabled = 0 ] || continue + + local vifname + [ $ifidx -gt 0 ] && vifname="ath${device#radio}-$ifidx" || vifname="ath${device#radio}" + config_get ifname "$vif" ifname - config_set "$vif" ifname "${ifname:-ath}" + config_set "$vif" ifname "${ifname:-$vifname}" config_get mode "$vif" mode case "$mode" in @@ -55,6 +62,8 @@ scan_atheros() { ;; *) echo "$device($vif): Invalid mode, ignored."; continue;; esac + + ifidx=$(($ifidx + 1)) done case "${adhoc:+1}:${sta:+1}:${ap:+1}" in @@ -79,7 +88,7 @@ disable_atheros() ( config_get phy "$device" phy set_wifi_down "$device" - + include /lib/network cd /proc/sys/net for dev in *; do @@ -104,8 +113,12 @@ enable_atheros() { [ -n "$regdomain" ] && echo "$regdomain" > /proc/sys/dev/$phy/regdomain config_get country "$device" country - [ -z "$country" ] && country="0" - echo "$country" > /proc/sys/dev/$phy/countrycode + case "$country" in + [A-Za-z]*) country=`grep -i "$country" /lib/wifi/madwifi_countrycodes.txt |cut -d " " -f 2`;; + [0-9]*) ;; + *) country="" ;; + esac + [ -n "$country" ] && echo "$country" > /proc/sys/dev/$phy/countrycode config_get_bool outdoor "$device" outdoor "0" echo "$outdoor" > /proc/sys/dev/$phy/outdoor @@ -165,7 +178,7 @@ enable_atheros() { esac ;; esac - + [ -x "$(which gpioctl 2>/dev/null)" ] || antenna= gpioctl "dirout" "$antgpio" >/dev/null 2>&1 case "$gpioval" in @@ -192,14 +205,14 @@ enable_atheros() { config_get enc "$vif" encryption config_get eap_type "$vif" eap_type config_get mode "$vif" mode - + case "$mode" in 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 "$phy" wlanmode "$mode" ${nosbeacon:+nosbeacon}) + ifname=$(wlanconfig "$ifname" create nounit wlandev "$phy" wlanmode "$mode" ${nosbeacon:+nosbeacon}) [ $? -ne 0 ] && { echo "enable_atheros($device): Failed to set up $mode vif $ifname" >&2 continue @@ -299,10 +312,10 @@ enable_atheros() { config_get_bool comp "$vif" compression 0 iwpriv "$ifname" compression "$comp" >/dev/null 2>&1 - config_get_bool minrate "$vif" minrate + config_get minrate "$vif" minrate [ -n "$minrate" ] && iwpriv "$ifname" minrate "$minrate" - config_get_bool maxrate "$vif" maxrate + config_get maxrate "$vif" maxrate [ -n "$maxrate" ] && iwpriv "$ifname" maxrate "$maxrate" config_get_bool burst "$vif" bursting @@ -362,7 +375,7 @@ enable_atheros() { config_get ssid "$vif" ssid [ -n "$ssid" ] && { iwconfig "$ifname" essid on - iwconfig "$ifname" essid "$ssid" + iwconfig "$ifname" essid ${ssid:+-- }"$ssid" } set_wifi_up "$vif" "$ifname" @@ -406,7 +419,7 @@ enable_atheros() { done } -check_device() { +check_atheros_device() { [ ${1%[0-9]} = "wifi" ] && config_set "$1" phy "$1" config_get phy "$1" phy [ -z "$phy" ] && { @@ -429,7 +442,7 @@ detect_atheros() { [ -d ath ] || return for dev in $(ls -d wifi* 2>&-); do found=0 - config_foreach check_device wifi-device + config_foreach check_atheros_device wifi-device [ "$found" -gt 0 ] && continue devname="$(cat /proc/sys/dev/$dev/dev_name)" @@ -469,6 +482,7 @@ config wifi-iface option mode ap option ssid OpenWrt option encryption none + EOF devidx=$(($devidx + 1)) done