]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
mbssid: Add new configuration option
authorAloka Dixit <quic_alokad@quicinc.com>
Thu, 1 Dec 2022 03:18:33 +0000 (19:18 -0800)
committerJouni Malinen <j@w1.fi>
Fri, 2 Dec 2022 14:36:19 +0000 (16:36 +0200)
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>
hostapd/config_file.c
hostapd/hostapd.conf
src/ap/ap_config.c
src/ap/ap_config.h

index 9ce604f4903ac2e92ac311d0df1cbfb422ce9960..b5393fd6c7700a54ed4d062ba2c388178bb07afc 100644 (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);
index c3c03bba9b217bd479a13ef7cfca1f850ea22a36..6b9a7d26076d7cb295d369d432bff11cfe564f90 100644 (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
index e83347b832032023ce3f9416cbf283455f1c5a91..dd73e68b3b5767c66a751fa736dac323e5212947 100644 (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;
index 4e14bc6f22683dc8039b7c9dd4dd178f55e8f5da..92293dc885cc94516852cd384ff5df17c4fb6268 100644 (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;
 };