| diff --git a/package/kernel/mac80211/Makefile b/package/kernel/mac80211/Makefile |
| index b7059fe6..62c13eb2 100644 |
| --- a/package/kernel/mac80211/Makefile |
| +++ b/package/kernel/mac80211/Makefile |
| @@ -20,6 +20,7 @@ PKG_SOURCE:=backports-$(PKG_VERSION).tar.xz |
| PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/backports-$(PKG_VERSION) |
| PKG_BUILD_PARALLEL:=1 |
| |
| +SOURCE_PATH:=./src |
| PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name> |
| |
| PKG_DRIVERS = \ |
| @@ -72,6 +73,10 @@ config-y:= \ |
| WLAN_VENDOR_ST \ |
| WLAN_VENDOR_TI \ |
| WLAN_VENDOR_ZYDAS \ |
| + MAC80211_DEBUG_MENU \ |
| + MAC80211_MLME_DEBUG \ |
| + MAC80211_STA_DEBUG \ |
| + MAC80211_HT_DEBUG \ |
| |
| config-$(call config_package,cfg80211) += CFG80211 |
| config-$(CONFIG_PACKAGE_CFG80211_TESTMODE) += NL80211_TESTMODE |
| @@ -297,6 +302,8 @@ define Build/Prepare |
| mkdir -p $(PKG_BUILD_DIR) |
| $(PKG_UNPACK) |
| $(Build/Patch) |
| + $(CP) $(SOURCE_PATH)/net $(PKG_BUILD_DIR) 2>/dev/null || : |
| + $(CP) $(SOURCE_PATH)/include $(PKG_BUILD_DIR) 2>/dev/null || : |
| rm -rf \ |
| $(PKG_BUILD_DIR)/include/linux/ssb \ |
| $(PKG_BUILD_DIR)/include/linux/bcma \ |
| diff --git a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh |
| index 5aaba9af..6d051038 100644 |
| --- a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh |
| +++ b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh |
| @@ -27,6 +27,7 @@ drv_mac80211_init_device_config() { |
| |
| config_add_string path phy 'macaddr:macaddr' |
| config_add_string tx_burst |
| + config_add_int mbssid |
| config_add_string distance |
| config_add_int beacon_int chanbw frag rts |
| config_add_int rxantenna txantenna antenna_gain txpower min_tx_power |
| @@ -140,13 +141,10 @@ mac80211_hostapd_setup_base() { |
| [ -n "$acs_exclude_dfs" ] && [ "$acs_exclude_dfs" -gt 0 ] && |
| append base_cfg "acs_exclude_dfs=1" "$N" |
| |
| - json_get_vars noscan ht_coex min_tx_power:0 tx_burst |
| + json_get_vars noscan ht_coex min_tx_power:0 tx_burst mbssid |
| json_get_values ht_capab_list ht_capab |
| json_get_values channel_list channels |
| |
| - [ "$auto_channel" = 0 ] && [ -z "$channel_list" ] && \ |
| - channel_list="$channel" |
| - |
| [ "$min_tx_power" -gt 0 ] && append base_cfg "min_tx_power=$min_tx_power" |
| |
| set_default noscan 0 |
| @@ -315,7 +313,6 @@ mac80211_hostapd_setup_base() { |
| vht_link_adapt:3 \ |
| vht160:2 |
| |
| - set_default tx_burst 2.0 |
| append base_cfg "ieee80211ac=1" "$N" |
| vht_cap=0 |
| for cap in $(iw phy "$phy" info | awk -F "[()]" '/VHT Capabilities/ { print $2 }'); do |
| @@ -484,12 +481,15 @@ mac80211_hostapd_setup_base() { |
| append base_cfg "he_mu_edca_ac_vo_timer=255" "$N" |
| fi |
| |
| + set_default tx_burst 5.9 |
| + |
| hostapd_prepare_device_config "$hostapd_conf_file" nl80211 |
| cat >> "$hostapd_conf_file" <<EOF |
| ${channel:+channel=$channel} |
| ${channel_list:+chanlist=$channel_list} |
| ${hostapd_noscan:+noscan=1} |
| ${tx_burst:+tx_queue_data2_burst=$tx_burst} |
| +${mbssid:+mbssid=$mbssid} |
| $base_cfg |
| |
| EOF |
| @@ -517,7 +517,7 @@ mac80211_hostapd_setup_bss() { |
| append hostapd_cfg "wds_sta=1" "$N" |
| [ -n "$wds_bridge" ] && append hostapd_cfg "wds_bridge=$wds_bridge" "$N" |
| } |
| - [ "$staidx" -gt 0 -o "$start_disabled" -eq 1 ] && append hostapd_cfg "start_disabled=1" "$N" |
| + [ "$start_disabled" -eq 1 ] && append hostapd_cfg "start_disabled=1" "$N" |
| |
| cat >> /var/run/hostapd-$phy.conf <<EOF |
| $hostapd_cfg |
| @@ -527,6 +527,34 @@ ${max_listen_int:+max_listen_interval=$max_listen_int} |
| EOF |
| } |
| |
| +mac80211_generate_mbssid_mac() { |
| + local phy="$1" |
| + local transmitted_bssid="$2" |
| + local id="${macidx:-0}" |
| + |
| + local ref="$(cat /sys/class/ieee80211/${phy}/macaddress)" |
| + local mask="$(cat /sys/class/ieee80211/${phy}/address_mask)" |
| + |
| + if [ -z "$transmitted_bssid" ]; then |
| + transmitted_bssid=$ref |
| + fi |
| + |
| + if [ $id -eq 0 ]; then |
| + echo "$transmitted_bssid" |
| + return |
| + fi |
| + |
| + local oIFS="$IFS"; IFS=":"; set -- $transmitted_bssid; IFS="$oIFS" |
| + |
| + # Calculate nontransmitted bssid |
| + macidx=$(($id + 1)) |
| + mbssid_idx=$(($macidx - 1)) |
| + b6="0x$6" |
| + ref_b6=$(($b6 % $max_mbssid)) |
| + b6=$(($b6 - $ref_b6 + ($ref_b6 + $mbssid_idx) % $max_mbssid)) |
| + printf "%s:%s:%s:%s:%s:%02x" $1 $2 $3 $4 $5 $b6 |
| +} |
| + |
| mac80211_get_addr() { |
| local phy="$1" |
| local idx="$(($2 + 1))" |
| @@ -757,7 +785,13 @@ mac80211_prepare_vif() { |
| |
| json_select .. |
| |
| - if [ -z "$macaddr" ]; then |
| + if [ "$mbssid" -gt 0 ]; then |
| + [ "$macidx" -eq 0 ] && { |
| + transmitted_bssid=$macaddr |
| + } |
| + macaddr="$(mac80211_generate_mbssid_mac $phy $transmitted_bssid)" |
| + macidx="$(($macidx + 1))" |
| + elif [ -z "$macaddr" ]; then |
| macaddr="$(mac80211_generate_mac $phy)" |
| macidx="$(($macidx + 1))" |
| elif [ "$macaddr" = 'random' ]; then |
| @@ -1058,6 +1092,9 @@ mac80211_setup_vif() { |
| |
| json_select .. |
| [ -n "$failed" ] || wireless_add_vif "$name" "$ifname" |
| + |
| + echo "Setup SMP Affinity" |
| + /sbin/smp-mt76.sh |
| } |
| |
| get_freq() { |
| @@ -1122,6 +1159,10 @@ drv_mac80211_cleanup() { |
| hostapd_common_cleanup |
| } |
| |
| +mac80211_count_ap() { |
| + total_num_ap=$(($total_num_ap + 1)) |
| +} |
| + |
| drv_mac80211_setup() { |
| json_select config |
| json_get_vars \ |
| @@ -1219,6 +1260,16 @@ drv_mac80211_setup() { |
| for_each_interface "sta adhoc mesh" mac80211_set_noscan |
| [ -n "$has_ap" ] && mac80211_hostapd_setup_base "$phy" |
| |
| + total_num_ap=0 |
| + max_mbssid=1 |
| + for_each_interface "ap" mac80211_count_ap |
| + total_num_ap=$(($total_num_ap - 1)) |
| + while [ $total_num_ap -gt 0 ] |
| + do |
| + total_num_ap=$(($total_num_ap >> 1)) |
| + max_mbssid=$(($max_mbssid << 1)) |
| + done |
| + |
| mac80211_prepare_iw_htmode |
| for_each_interface "sta adhoc mesh monitor" mac80211_prepare_vif |
| NEWAPLIST= |
| diff --git a/package/kernel/mac80211/files/lib/wifi/mac80211.sh b/package/kernel/mac80211/files/lib/wifi/mac80211.sh |
| index e24a2a63..10a3f8b4 100644 |
| --- a/package/kernel/mac80211/files/lib/wifi/mac80211.sh |
| +++ b/package/kernel/mac80211/files/lib/wifi/mac80211.sh |
| @@ -120,6 +120,13 @@ get_band_defaults() { |
| mode_band="$band" |
| channel="$chan" |
| htmode="$mode" |
| + if [ "$band" = "6g" ] |
| + then |
| + encryption=sae |
| + key=12345678 |
| + else |
| + encryption=none |
| + fi |
| done |
| } |
| |
| @@ -162,6 +169,8 @@ detect_mac80211() { |
| channel="" |
| htmode="" |
| ht_capab="" |
| + encryption="" |
| + key="" |
| |
| get_band_defaults "$dev" |
| |
| @@ -210,8 +219,12 @@ detect_mac80211() { |
| set wireless.default_${name}.network=lan |
| set wireless.default_${name}.mode=ap |
| set wireless.default_${name}.ssid=OpenWrt |
| - set wireless.default_${name}.encryption=none |
| + set wireless.default_${name}.encryption=${encryption} |
| + |
| EOF |
| + [ -n "$key" ] && { |
| + uci -q set wireless.default_${name}.key=${key} |
| + } |
| uci -q commit wireless |
| done |
| } |
| diff --git a/package/network/services/hostapd/files/hostapd.sh b/package/network/services/hostapd/files/hostapd.sh |
| index 28bd2106..5e21d0d6 100644 |
| --- a/package/network/services/hostapd/files/hostapd.sh |
| +++ b/package/network/services/hostapd/files/hostapd.sh |
| @@ -376,6 +376,13 @@ hostapd_common_add_bss_config() { |
| config_add_string fils_dhcp |
| |
| config_add_int ocv |
| + |
| + config_add_int disable_eht |
| + config_add_int disable_he |
| + config_add_int disable_vht |
| + config_add_int disable_ht |
| + |
| + config_add_boolean beacon_prot |
| } |
| |
| hostapd_set_vlan_file() { |
| @@ -975,7 +982,7 @@ hostapd_set_bss_options() { |
| # RSN -> allow management frame protection |
| case "$ieee80211w" in |
| [012]) |
| - json_get_vars ieee80211w_mgmt_cipher ieee80211w_max_timeout ieee80211w_retry_timeout |
| + json_get_vars ieee80211w_mgmt_cipher ieee80211w_max_timeout ieee80211w_retry_timeout beacon_prot |
| append bss_conf "ieee80211w=$ieee80211w" "$N" |
| [ "$ieee80211w" -gt "0" ] && { |
| if [ "$auth_type" = "eap192" ]; then |
| @@ -983,6 +990,8 @@ hostapd_set_bss_options() { |
| else |
| append bss_conf "group_mgmt_cipher=${ieee80211w_mgmt_cipher:-AES-128-CMAC}" "$N" |
| fi |
| + [ -n "$beacon_prot" ] && \ |
| + append bss_conf "beacon_prot=$beacon_prot" "$N" |
| [ -n "$ieee80211w_max_timeout" ] && \ |
| append bss_conf "assoc_sa_query_max_timeout=$ieee80211w_max_timeout" "$N" |
| [ -n "$ieee80211w_retry_timeout" ] && \ |
| @@ -1559,6 +1568,20 @@ wpa_supplicant_add_network() { |
| [ -n "$bssid_blacklist" ] && append network_data "bssid_blacklist=$bssid_blacklist" "$N$T" |
| [ -n "$bssid_whitelist" ] && append network_data "bssid_whitelist=$bssid_whitelist" "$N$T" |
| |
| + local disable_eht |
| + local disable_he |
| + local disable_vht |
| + local disable_ht |
| + json_get_vars disable_eht |
| + json_get_vars disable_he |
| + json_get_vars disable_vht |
| + json_get_vars disable_ht |
| + |
| + [ -n "$disable_eht" ] && append network_data "disable_eht=$disable_eht" "$N$T" |
| + [ -n "$disable_he" ] && append network_data "disable_he=$disable_he" "$N$T" |
| + [ -n "$disable_vht" ] && append network_data "disable_vht=$disable_vht" "$N$T" |
| + [ -n "$disable_ht" ] && append network_data "disable_ht=$disable_ht" "$N$T" |
| + |
| [ -n "$basic_rate" ] && { |
| local br rate_list= |
| for br in $basic_rate; do |
| @@ -1573,6 +1596,11 @@ wpa_supplicant_add_network() { |
| append network_data "mcast_rate=$mc_rate" "$N$T" |
| } |
| |
| + if [ "$auth_type" = "sae" ]; then |
| + json_get_vars sae_pwe sae_pwe |
| + [ -n "$sae_pwe" ] && echo "sae_pwe=$sae_pwe" >> "$_config" |
| + fi |
| + |
| if [ "$key_mgmt" = "WPS" ]; then |
| echo "wps_cred_processing=1" >> "$_config" |
| else |