aboutsummaryrefslogtreecommitdiffstats
path: root/package/mac80211/files/lib
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2012-10-18 00:09:55 +0000
committerFelix Fietkau <nbd@openwrt.org>2012-10-18 00:09:55 +0000
commite36eb8579f6d608210b2e8007b00baace97b4de4 (patch)
tree470614f16f81fa3109367af05c6be060a9a78012 /package/mac80211/files/lib
parent93b4d13ed798486d590b842afe2fa344e8e12f84 (diff)
downloadupstream-e36eb8579f6d608210b2e8007b00baace97b4de4.tar.gz
upstream-e36eb8579f6d608210b2e8007b00baace97b4de4.tar.bz2
upstream-e36eb8579f6d608210b2e8007b00baace97b4de4.zip
mac80211: store the device path as identifier in the config instead of the mac address, makes it more robust against card replacement or user errors
SVN-Revision: 33834
Diffstat (limited to 'package/mac80211/files/lib')
-rw-r--r--package/mac80211/files/lib/wifi/mac80211.sh48
1 files changed, 38 insertions, 10 deletions
diff --git a/package/mac80211/files/lib/wifi/mac80211.sh b/package/mac80211/files/lib/wifi/mac80211.sh
index 1b0bea70ed..d834afea3b 100644
--- a/package/mac80211/files/lib/wifi/mac80211.sh
+++ b/package/mac80211/files/lib/wifi/mac80211.sh
@@ -184,26 +184,46 @@ mac80211_start_vif() {
set_wifi_up "$vif" "$ifname"
}
-find_mac80211_phy() {
- local device="$1"
+lookup_phy() {
+ [ -n "$phy" ] && {
+ [ -d /sys/class/ieee80211/phy ] && return
+ }
+
+ local devpath
+ config_get devpath "$device" path
+ [ -n "$devpath" -a -d "/sys/devices/$devpath/ieee80211" ] && {
+ phy="$(ls /sys/devices/$devpath/ieee80211 | grep -m 1 phy)"
+ [ -n "$phy" ] && return
+ }
local macaddr="$(config_get "$device" macaddr | tr 'A-Z' 'a-z')"
- config_get phy "$device" phy
- [ -z "$phy" -a -n "$macaddr" ] && {
- for phy in $(ls /sys/class/ieee80211 2>/dev/null); do
- [ "$macaddr" = "$(cat /sys/class/ieee80211/${phy}/macaddress)" ] || continue
- config_set "$device" phy "$phy"
- break
+ [ -n "$macaddr" ] && {
+ for _phy in $(ls /sys/class/ieee80211 2>/dev/null); do
+ [ "$macaddr" = "$(cat /sys/class/ieee80211/${_phy}/macaddress)" ] || continue
+ phy="$_phy"
+ return
done
- config_get phy "$device" phy
}
+ phy=
+ return
+}
+
+find_mac80211_phy() {
+ local device="$1"
+
+ config_get phy "$device" phy
+ lookup_phy
[ -n "$phy" -a -d "/sys/class/ieee80211/$phy" ] || {
echo "PHY for wifi device $1 not found"
return 1
}
+ config_set "$device" phy "$phy"
+
+ config_get macaddr "$device" macaddr
[ -z "$macaddr" ] && {
config_set "$device" macaddr "$(cat /sys/class/ieee80211/${phy}/macaddress)"
}
+
return 0
}
@@ -575,12 +595,20 @@ detect_mac80211() {
}
iw phy "$dev" info | grep -q '2412 MHz' || { mode_band="a"; channel="36"; }
+ if [ -x /usr/bin/readlink ]; then
+ path="$(readlink -f /sys/class/ieee80211/${dev}/device)"
+ path="${path##/sys/devices/}"
+ dev_id=" option path '$path'"
+ else
+ dev_id=" option macaddr $(cat /sys/class/ieee80211/${dev}/macaddress)"
+ fi
+
cat <<EOF
config wifi-device radio$devidx
option type mac80211
option channel ${channel}
- option macaddr $(cat /sys/class/ieee80211/${dev}/macaddress)
option hwmode 11${mode_11n}${mode_band}
+$dev_id
$ht_capab
# REMOVE THIS LINE TO ENABLE WIFI:
option disabled 1