define KernelPackage/cfg80211/install
$(INSTALL_DIR) $(1)/lib/wifi $(1)/lib/netifd/wireless
$(INSTALL_DATA) ./files/lib/wifi/mac80211.sh $(1)/lib/wifi
+ $(INSTALL_DATA) ./files/lib/netifd/mac80211.sh $(1)/lib/netifd
$(INSTALL_BIN) ./files/lib/netifd/wireless/mac80211.sh $(1)/lib/netifd/wireless
$(INSTALL_DIR) $(1)/etc/hotplug.d/ieee80211
$(INSTALL_DATA) ./files/mac80211.hotplug $(1)/etc/hotplug.d/ieee80211/10-wifi-detect
--- /dev/null
+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
+}
#!/bin/sh
. /lib/netifd/netifd-wireless.sh
. /lib/netifd/hostapd.sh
+. /lib/netifd/mac80211.sh
init_wireless_driver "$@"
find_phy() {
[ -n "$phy" -a -d /sys/class/ieee80211/$phy ] && return 0
[ -n "$path" ] && {
- for phy in $(ls /sys/class/ieee80211 2>/dev/null); do
- case "$(readlink -f /sys/class/ieee80211/$phy/device)" in
- *$path) return 0;;
- esac
- done
+ phy="$(mac80211_path_to_phy "$path")"
+ [ -n "$phy" ] && return 0
}
[ -n "$macaddr" ] && {
for phy in $(ls /sys/class/ieee80211 2>/dev/null); do
local phy="$1"
for wdev in $(list_phy_interfaces "$phy"); do
+ local wdev_phy="$(readlink /sys/class/net/${wdev}/phy80211)"
+ wdev_phy="$(basename "$wdev_phy")"
+ [ -n "$wdev_phy" -a "$wdev_phy" != "$phy" ] && continue
ip link set dev "$wdev" down 2>/dev/null
iw dev "$wdev" del
done
#!/bin/sh
+. /lib/netifd/mac80211.sh
+
append DRIVERS "mac80211"
lookup_phy() {
local devpath
config_get devpath "$device" path
[ -n "$devpath" ] && {
- for phy in $(ls /sys/class/ieee80211 2>/dev/null); do
- case "$(readlink -f /sys/class/ieee80211/$phy/device)" in
- *$devpath) return;;
- esac
- done
+ phy="$(mac80211_path_to_phy "$devpath")"
+ [ -n "$phy" ] && return
}
local macaddr="$(config_get "$device" macaddr | tr 'A-Z' 'a-z')"
[ -n "$htmode" ] && ht_capab="set wireless.radio${devidx}.htmode=$htmode"
- if [ -x /usr/bin/readlink -a -h /sys/class/ieee80211/${dev} ]; then
- path="$(readlink -f /sys/class/ieee80211/${dev}/device)"
- else
- path=""
- fi
+ path="$(mac80211_phy_to_path "$dev")"
if [ -n "$path" ]; then
- path="${path##/sys/devices/}"
- case "$path" in
- platform*/pci*) path="${path##platform/}";;
- esac
dev_id="set wireless.radio${devidx}.path='$path'"
else
dev_id="set wireless.radio${devidx}.macaddr=$(cat /sys/class/ieee80211/${dev}/macaddress)"