diff options
| author | Felix Fietkau <nbd@nbd.name> | 2024-01-13 11:19:07 +0100 |
|---|---|---|
| committer | Felix Fietkau <nbd@nbd.name> | 2024-01-13 11:19:34 +0100 |
| commit | 5b8f188c0f0a18eecc7a5f4078b96338c3c282f2 (patch) | |
| tree | 3846fe8d76e8e181e24673355f27102516c49200 /package/kernel | |
| parent | b7f9742da82fa9b122e8d63e48a9a5c0dec298f2 (diff) | |
| download | upstream-5b8f188c0f0a18eecc7a5f4078b96338c3c282f2.tar.gz upstream-5b8f188c0f0a18eecc7a5f4078b96338c3c282f2.tar.bz2 upstream-5b8f188c0f0a18eecc7a5f4078b96338c3c282f2.zip | |
Revert "mac80211: rework interface setup, fix race condition"
This reverts commit b7f9742da82fa9b122e8d63e48a9a5c0dec298f2.
There are several reports of regressions with this commit. Will be added
back once I've figured out and fixed the cause
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Diffstat (limited to 'package/kernel')
| -rw-r--r-- | package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh | 159 |
1 files changed, 88 insertions, 71 deletions
diff --git a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh index cc7e1430308..6572999fbc8 100644 --- a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh +++ b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh @@ -635,6 +635,71 @@ mac80211_set_ifname() { eval "ifname=\"$phy-$prefix\${idx_$prefix:-0}\"; idx_$prefix=\$((\${idx_$prefix:-0 } + 1))" } +mac80211_prepare_vif() { + json_select config + + json_get_vars ifname mode ssid wds powersave macaddr enable wpa_psk_file vlan_file + + [ -n "$ifname" ] || { + local prefix; + + case "$mode" in + ap|sta|mesh) prefix=$mode;; + adhoc) prefix=ibss;; + monitor) prefix=mon;; + esac + + mac80211_set_ifname "$phy" "$prefix" + } + + append active_ifnames "$ifname" + set_default wds 0 + set_default powersave 0 + json_add_string _ifname "$ifname" + + default_macaddr= + if [ -z "$macaddr" ]; then + macaddr="$(mac80211_generate_mac $phy)" + macidx="$(($macidx + 1))" + default_macaddr=1 + elif [ "$macaddr" = 'random' ]; then + macaddr="$(macaddr_random)" + fi + json_add_string _macaddr "$macaddr" + json_add_string _default_macaddr "$default_macaddr" + json_select .. + + + [ "$mode" == "ap" ] && { + [ -z "$wpa_psk_file" ] && hostapd_set_psk "$ifname" + [ -z "$vlan_file" ] && hostapd_set_vlan "$ifname" + } + + json_select config + + # It is far easier to delete and create the desired interface + case "$mode" in + ap) + # Hostapd will handle recreating the interface and + # subsequent virtual APs belonging to the same PHY + if [ -n "$hostapd_ctrl" ]; then + type=bss + else + type=interface + fi + + mac80211_hostapd_setup_bss "$phy" "$ifname" "$macaddr" "$type" || return + + [ -n "$hostapd_ctrl" ] || { + ap_ifname="${ifname}" + hostapd_ctrl="${hostapd_ctrl:-/var/run/hostapd/$ifname}" + } + ;; + esac + + json_select .. +} + mac80211_prepare_iw_htmode() { case "$htmode" in VHT20|HT20|HE20) iw_htmode=HT20;; @@ -777,6 +842,17 @@ mac80211_setup_monitor() { json_set_namespace "$prev" } +mac80211_set_vif_txpower() { + local name="$1" + + json_select config + json_get_var ifname _ifname + json_get_vars vif_txpower + json_select .. + + [ -z "$vif_txpower" ] || iw dev "$ifname" set txpower fixed "${vif_txpower%%.*}00" +} + wpa_supplicant_init_config() { json_set_namespace wpa_supp prev @@ -881,41 +957,19 @@ mac80211_setup_supplicant() { return 0 } -mac80211_prepare_vif() { - json_select config - - json_get_vars ifname mode ssid wds powersave macaddr enable wpa_psk_file vlan_file - local config_wpa_psk_file="$wpa_psk_file" - local config_vlan_file="$vlan_file" - - [ -n "$ifname" ] || { - local prefix; - - case "$mode" in - ap|sta|mesh) prefix=$mode;; - adhoc) prefix=ibss;; - monitor) prefix=mon;; - esac - - mac80211_set_ifname "$phy" "$prefix" - } - - append active_ifnames "$ifname" +mac80211_setup_vif() { + local name="$1" + local failed - default_macaddr= - if [ -z "$macaddr" ]; then - macaddr="$(mac80211_generate_mac $phy)" - macidx="$(($macidx + 1))" - default_macaddr=1 - elif [ "$macaddr" = 'random' ]; then - macaddr="$(macaddr_random)" - fi + json_select config + json_get_var ifname _ifname + json_get_var macaddr _macaddr + json_get_var default_macaddr _default_macaddr + json_get_vars mode wds powersave - local failed= - set_default wds 0 set_default powersave 0 + set_default wds 0 - # It is far easier to delete and create the desired interface case "$mode" in mesh) json_get_vars $MP_CONFIG_INT $MP_CONFIG_BOOL $MP_CONFIG_STRING @@ -941,48 +995,10 @@ mac80211_prepare_vif() { monitor) mac80211_setup_monitor ;; - ap) - # Hostapd will handle recreating the interface and - # subsequent virtual APs belonging to the same PHY - if [ -n "$hostapd_ctrl" ]; then - type=bss - else - type=interface - fi - - mac80211_hostapd_setup_bss "$phy" "$ifname" "$macaddr" "$type" || return - - [ -n "$hostapd_ctrl" ] || { - ap_ifname="${ifname}" - hostapd_ctrl="${hostapd_ctrl:-/var/run/hostapd/$ifname}" - } - ;; esac - [ -n "$failed" ] || { - json_add_string _ifname "$ifname" - json_add_string _macaddr "$macaddr" - json_add_string _default_macaddr "$default_macaddr" - } - json_select .. - - [ "$mode" == "ap" ] && { - [ -z "$config_wpa_psk_file" ] && hostapd_set_psk "$ifname" - [ -z "$config_vlan_file" ] && hostapd_set_vlan "$ifname" - } -} - -mac80211_setup_vif() { - local name="$1" - - json_select config - json_get_var ifname _ifname - json_get_vars vif_txpower - json_select .. - - [ -z "$vif_txpower" ] || iw dev "$ifname" set txpower fixed "${vif_txpower%%.*}00" - [ -n "$ifname" ] && wireless_add_vif "$name" "$ifname" + [ -n "$failed" ] || wireless_add_vif "$name" "$ifname" } get_freq() { @@ -1128,6 +1144,7 @@ drv_mac80211_setup() { mac80211_prepare_iw_htmode active_ifnames= for_each_interface "ap sta adhoc mesh monitor" mac80211_prepare_vif + for_each_interface "ap sta adhoc mesh monitor" mac80211_setup_vif [ -x /usr/sbin/wpa_supplicant ] && wpa_supplicant_set_config "$phy" [ -x /usr/sbin/hostapd ] && hostapd_set_config "$phy" @@ -1138,7 +1155,7 @@ drv_mac80211_setup() { wdev_tool "$phy" set_config "$(json_dump)" $active_ifnames json_set_namespace "$prev" - for_each_interface "ap sta adhoc mesh monitor" mac80211_setup_vif + for_each_interface "ap sta adhoc mesh monitor" mac80211_set_vif_txpower wireless_set_up } |
