From 8691e346bf6a1d8afed20b7629f36505473e5262 Mon Sep 17 00:00:00 2001 From: nbd Date: Thu, 18 Oct 2012 00:09:55 +0000 Subject: 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 --- package/mac80211/files/lib/wifi/mac80211.sh | 48 +++++++++++++++++++++++------ 1 file 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 <