mbssid: Add new configuration option

Add configuration option 'mbssid' used to enable multiple BSSID (MBSSID)
and enhanced multiple BSSID advertisements (EMA) features.

Reject the configuration if any of the BSSes have hidden SSID enabled.

Signed-off-by: Aloka Dixit <quic_alokad@quicinc.com>
Co-developed-by: John Crispin <john@phrozen.org>
Signed-off-by: John Crispin <john@phrozen.org>
This commit is contained in:
Aloka Dixit 2022-11-30 19:18:33 -08:00 committed by Jouni Malinen
parent bb67d5b52b
commit 7452e54477
4 changed files with 87 additions and 0 deletions

View file

@ -3638,6 +3638,15 @@ static int hostapd_config_fill(struct hostapd_config *conf,
return 1;
}
bss->unsol_bcast_probe_resp_interval = val;
} else if (os_strcmp(buf, "mbssid") == 0) {
int mbssid = atoi(pos);
if (mbssid < 0 || mbssid > ENHANCED_MBSSID_ENABLED) {
wpa_printf(MSG_ERROR,
"Line %d: invalid mbssid (%d): '%s'.",
line, mbssid, pos);
return 1;
}
conf->mbssid = mbssid;
#endif /* CONFIG_IEEE80211AX */
} else if (os_strcmp(buf, "max_listen_interval") == 0) {
bss->max_listen_interval = atoi(pos);

View file

@ -3134,3 +3134,63 @@ own_ip_addr=127.0.0.1
#bss=wlan0_1
#bssid=00:13:10:95:fe:0b
# ...
#
# Multiple BSSID Advertisement in IEEE 802.11ax
# IEEE Std 802.11ax-2021 added a feature where instead of multiple interfaces
# on a common radio transmitting individual Beacon frames, those interfaces can
# form a set with a common Beacon frame transmitted for all. The interface
# which is brought up first is called the transmitting profile of the MBSSID
# set which transmits the Beacon frames. The remaining interfaces are called
# the non-transmitting profiles and these are advertised inside the Multiple
# BSSID element in the Beacon and Probe Response frames from the first
# interface.
#
# The transmitting interface is visible to all stations in the vicinity, however
# the stations that do not support parsing of the Multiple BSSID element will
# not be able to connect to the non-transmitting interfaces.
#
# Enhanced Multiple BSSID Advertisements (EMA)
# When enabled, the non-transmitting interfaces are split into multiple
# Beacon frames. The number of Beacon frames required to cover all the
# non-transmitting profiles is called the profile periodicity.
#
# Refer to IEEE Std 802.11-2020 for details regarding the procedure and
# required MAC address assignment.
#
# Following configuration is per radio.
# 0 = Disabled (default)
# 1 = Multiple BSSID advertisement enabled.
# 2 = Enhanced multiple BSSID advertisement enabled.
#mbssid=0
#
# The transmitting interface should be added with the 'interface' option while
# the non-transmitting interfaces should be added using the 'bss' option.
# Security configuration should be added separately per interface, if required.
#
# Example:
#mbssid=2
#interface=wlan2
#ctrl_interface=/var/run/hostapd
#wpa_passphrase=0123456789
#ieee80211w=2
#sae_pwe=1
#auth_algs=1
#wpa=2
#wpa_pairwise=CCMP
#ssid=<SSID-0>
#bridge=br-lan
#wpa_key_mgmt=SAE
#bssid=00:03:7f:12:84:84
#
#bss=wlan2-1
#ctrl_interface=/var/run/hostapd
#wpa_passphrase=0123456789
#ieee80211w=2
#sae_pwe=1
#auth_algs=1
#wpa=2
#wpa_pairwise=CCMP
#ssid=<SSID-1>
#bridge=br-lan
#wpa_key_mgmt=SAE
#bssid=00:03:7f:12:84:85

View file

@ -1460,6 +1460,12 @@ static int hostapd_config_check_bss(struct hostapd_bss_config *bss,
}
#endif /* CONFIG_IEEE80211BE */
if (full_config && bss->ignore_broadcast_ssid && conf->mbssid) {
wpa_printf(MSG_ERROR,
"Hidden SSID is not suppored when MBSSID is enabled");
return -1;
}
return 0;
}
@ -1543,6 +1549,12 @@ int hostapd_config_check(struct hostapd_config *conf, int full_config)
}
#endif /* CONFIG_IEEE80211BE */
if (full_config && conf->mbssid && !conf->ieee80211ax) {
wpa_printf(MSG_ERROR,
"Cannot enable multiple BSSID support without ieee80211ax");
return -1;
}
for (i = 0; i < conf->num_bss; i++) {
if (hostapd_config_check_bss(conf->bss[i], conf, full_config))
return -1;

View file

@ -1145,6 +1145,12 @@ struct hostapd_config {
#define CH_SWITCH_EHT_ENABLED BIT(0)
#define CH_SWITCH_EHT_DISABLED BIT(1)
unsigned int ch_switch_eht_config;
enum mbssid {
MBSSID_DISABLED = 0,
MBSSID_ENABLED = 1,
ENHANCED_MBSSID_ENABLED = 2,
} mbssid;
};