X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/83b3afb1c9a3bd8cd6a0fbfcff8008403ff5dfad..9f5f35abdaa8bab4a6ae424413bbd9e9e64a3c41:/package/mac80211/files/lib/wifi/mac80211.sh diff --git a/package/mac80211/files/lib/wifi/mac80211.sh b/package/mac80211/files/lib/wifi/mac80211.sh index 4b254289d..738c2aa41 100644 --- a/package/mac80211/files/lib/wifi/mac80211.sh +++ b/package/mac80211/files/lib/wifi/mac80211.sh @@ -262,11 +262,27 @@ disable_mac80211() ( return 0 ) + get_freq() { local phy="$1" local chan="$2" iw "$phy" info | grep -E -m1 "(\* ${chan:-....} MHz${chan:+|\\[$chan\\]})" | grep MHz | awk '{print $2}' } + +mac80211_generate_mac() { + local off="$1" + local mac="$2" + local oIFS="$IFS"; IFS=":"; set -- $mac; IFS="$oIFS" + + local b2mask=0x00 + [ $off -gt 0 ] && b2mask=0x02 + + printf "%02x:%s:%s:%s:%02x:%02x" \ + $(( 0x$1 | $b2mask )) $2 $3 $4 \ + $(( (0x$5 + ($off / 0x100)) % 0x100 )) \ + $(( (0x$6 + $off) % 0x100 )) +} + enable_mac80211() { local device="$1" config_get channel "$device" channel @@ -286,6 +302,13 @@ enable_mac80211() { fixed="" local hostapd_ctrl="" + [ -n "$country" ] && { + iw reg get | grep -q "^country $country:" || { + iw reg set "$country" + sleep 1 + } + } + config_get ath9k_chanbw "$device" ath9k_chanbw [ -n "$ath9k_chanbw" -a -d /sys/kernel/debug/ieee80211/$phy/ath9k ] && echo "$ath9k_chanbw" > /sys/kernel/debug/ieee80211/$phy/ath9k/chanbw @@ -306,13 +329,9 @@ enable_mac80211() { wifi_fixup_hwmode "$device" "g" for vif in $vifs; do - while [ -d "/sys/class/net/wlan$i" ]; do - i=$(($i + 1)) - done - config_get ifname "$vif" ifname [ -n "$ifname" ] || { - ifname="wlan$i" + [ $i -gt 0 ] && ifname="wlan${phy#phy}-$i" || ifname="wlan${phy#phy}" } config_set "$vif" ifname "$ifname" @@ -328,7 +347,6 @@ enable_mac80211() { # Hostapd will handle recreating the interface and # it's accompanying monitor apidx="$(($apidx + 1))" - i=$(($i + 1)) [ "$apidx" -gt 1 ] || iw phy "$phy" interface add "$ifname" type managed ;; mesh) @@ -353,17 +371,9 @@ enable_mac80211() { # which can either be explicitly set in the device # section, or automatically generated config_get macaddr "$device" macaddr - local mac_1="${macaddr%%:*}" - local mac_2="${macaddr#*:}" - config_get vif_mac "$vif" macaddr [ -n "$vif_mac" ] || { - if [ "$macidx" -gt 0 ]; then - offset="$(( 2 + $macidx * 4 ))" - else - offset="0" - fi - vif_mac="$( printf %02x $((0x$mac_1 + $offset)) ):$mac_2" + vif_mac="$(mac80211_generate_mac $macidx $macaddr)" macidx="$(($macidx + 1))" } [ "$mode" = "ap" ] || ifconfig "$ifname" hw ether "$vif_mac" @@ -389,6 +399,8 @@ enable_mac80211() { # wifi-device) if the latter doesn't exist txpower="${txpower:-$vif_txpower}" [ -z "$txpower" ] || iw dev "$ifname" set txpower fixed "${txpower%%.*}00" + + i=$(($i + 1)) done local start_hostapd=