+mac80211_phy_to_path() {
+ local phy="$1"
+
+ [ -x /usr/bin/readlink -a -h /sys/class/ieee80211/${phy} ] || return
+
+ local path="$(readlink -f /sys/class/ieee80211/${phy}/device)"
+ [ -n "$path" ] || return
+
+ path="${path##/sys/devices/}"
+ case "$path" in
+ platform*/pci*) path="${path##platform/}";;
+ esac
+
+ local p
+ local seq=""
+ for p in $(ls /sys/class/ieee80211/$phy/device/ieee80211); do
+ [ "$p" = "$phy" ] && {
+ echo "$path${seq:++$seq}"
+ break
+ }
+
+ seq=$((${seq:-0} + 1))
+ done
+}
+
+mac80211_path_to_phy() {
+ local path="$1"
+
+ local p
+ for p in $(ls /sys/class/ieee80211); do
+ local cur="$(mac80211_phy_to_path "$p")"
+ case "$cur" in
+ *$path) echo "$p"; return;;
+ esac
+ done
+}