summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2012-10-18 00:09:55 +0000
committernbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2012-10-18 00:09:55 +0000
commit8691e346bf6a1d8afed20b7629f36505473e5262 (patch)
tree62055795f0fb6f5fab9b085272c8b1ddf575864d
parent3cd6424cb624617e920e248433c211352eed815f (diff)
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
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@33834 3c298f89-4303-0410-b956-a3cf2f4a3e73
-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 1b0bea70e..d834afea3 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