[PATCH] hostapd: Add MBSSID DTIM fields for nontransmitting VAP

Aloka Dixit alokad at codeaurora.org
Wed Aug 5 00:45:52 EDT 2020


This patch adds missing mandatory fields in MBSSID Index element
(DTIM period and count) for non transmitting interfaces.

Signed-off-by: Aloka Dixit <alokad at codeaurora.org>
---
Depends-on: "multiple_bssid: add support" series in upstream review

 src/ap/beacon.c     |  4 ++--
 src/ap/ieee802_11.c | 18 +++++++++++++-----
 src/ap/ieee802_11.h |  3 ++-
 3 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/src/ap/beacon.c b/src/ap/beacon.c
index 03cca305a93e..5beaa5448b04 100644
--- a/src/ap/beacon.c
+++ b/src/ap/beacon.c
@@ -529,7 +529,7 @@ static u8 * hostapd_gen_probe_resp(struct hostapd_data *hapd,
 	pos = hostapd_get_mde(hapd, pos, epos - pos);
 
         if (hapd->iconf->multiple_bssid)
-		pos = hostapd_eid_multiple_bssid(hapd, pos, epos);
+		pos = hostapd_eid_multiple_bssid(hapd, pos, epos, 0);
 
 	/* eCSA IE */
 	csa_pos = hostapd_eid_ecsa(hapd, pos);
@@ -1255,7 +1255,7 @@ int ieee802_11_build_ap_params(struct hostapd_data *hapd,
 	tailpos = hostapd_get_mde(hapd, tailpos, tailend - tailpos);
 
 	if (hapd->iconf->multiple_bssid)
-		tailpos = hostapd_eid_multiple_bssid(hapd, tailpos, tailend);
+		tailpos = hostapd_eid_multiple_bssid(hapd, tailpos, tailend, 1);
 
 	/* eCSA IE */
 	csa_pos = hostapd_eid_ecsa(hapd, tailpos);
diff --git a/src/ap/ieee802_11.c b/src/ap/ieee802_11.c
index b0575337b2ee..dac144bb7cfa 100644
--- a/src/ap/ieee802_11.c
+++ b/src/ap/ieee802_11.c
@@ -5659,7 +5659,8 @@ int hostapd_eid_multiple_bssid_len(struct hostapd_data *hapd)
 
 
 static u8 * hostapd_eid_multiple_bssid_chunk(struct hostapd_data *hapd,
-					     u8 *eid, u8 *end, int *count)
+					     u8 *eid, u8 *end, int *count,
+					     u8 is_beacon)
 {
 	u8 *size_offset, *num_offset, num = 0;
 	int i;
@@ -5670,7 +5671,7 @@ static u8 * hostapd_eid_multiple_bssid_chunk(struct hostapd_data *hapd,
 
 	for (i = *count; i < hapd->iface->num_bss; i++) {
 		struct hostapd_data *bss = hapd->iface->bss[i];
-		u8 *bss_size_offset, *pos = eid;
+		u8 *bss_size_offset, *index_size_offset, *pos = eid;
 		u16 capab_info;
 
 		*eid++ = WLAN_EID_SUBELEMENT_NONTRANSMITTED_BSSID_PROFILE;
@@ -5688,8 +5689,13 @@ static u8 * hostapd_eid_multiple_bssid_chunk(struct hostapd_data *hapd,
 		eid += bss->conf->ssid.ssid_len;
 
 		*eid++ = WLAN_EID_MULTIPLE_BSSID_INDEX;
-		*eid++ = 1;
+		index_size_offset = eid++;
 		*eid++ = i;
+		if (is_beacon) {
+			*eid++ = bss->conf->dtim_period;
+			*eid++ = 0xFF;
+		}
+		*index_size_offset = (eid - index_size_offset) - 1;
 
 		eid = hostapd_get_rsne(bss, eid, end - eid);
 		*bss_size_offset = (eid - bss_size_offset) - 1;
@@ -5712,12 +5718,14 @@ multiple_bssid_too_big:
 }
 
 
-u8 * hostapd_eid_multiple_bssid(struct hostapd_data *hapd, u8 *eid, u8 *end)
+u8 * hostapd_eid_multiple_bssid(struct hostapd_data *hapd, u8 *eid, u8 *end,
+				u8 is_beacon)
 {
 	int count = 1;
 
 	while (count < hapd->iface->num_bss)
-		eid = hostapd_eid_multiple_bssid_chunk(hapd, eid, end, &count);
+		eid = hostapd_eid_multiple_bssid_chunk(hapd, eid, end, &count,
+						       is_beacon);
 
 	return eid;
 }
diff --git a/src/ap/ieee802_11.h b/src/ap/ieee802_11.h
index 466938f59ed4..d04adfef135d 100644
--- a/src/ap/ieee802_11.h
+++ b/src/ap/ieee802_11.h
@@ -119,7 +119,8 @@ u8 * hostapd_eid_time_zone(struct hostapd_data *hapd, u8 *eid);
 int hostapd_update_time_adv(struct hostapd_data *hapd);
 void hostapd_client_poll_ok(struct hostapd_data *hapd, const u8 *addr);
 u8 * hostapd_eid_bss_max_idle_period(struct hostapd_data *hapd, u8 *eid);
-u8 * hostapd_eid_multiple_bssid(struct hostapd_data *hapd, u8 *eid, u8 *end);
+u8 * hostapd_eid_multiple_bssid(struct hostapd_data *hapd, u8 *eid, u8 *end,
+				u8 is_beacon);
 int hostapd_eid_multiple_bssid_len(struct hostapd_data *hapd);
 
 int auth_sae_init_committed(struct hostapd_data *hapd, struct sta_info *sta);

base-commit: 02f4946172dea335d1ed7fde7e8de3ebbdef859a
prerequisite-patch-id: 6f0719fba383f1e0dc762be7da5788029f34cc3a
prerequisite-patch-id: 22601d88ad72e4e9addec18b0c9257c484045832
prerequisite-patch-id: 0705e4aacca8246468960bbc15f8286d666af505
prerequisite-patch-id: 8d54a8fe0bca799e6bcc4a00dd85106a8237dd5d
prerequisite-patch-id: ac87754ecaa990144d7fbf75ed2cebd2beab5de4
prerequisite-patch-id: e7bb814f80cee4bfe863b990695fcc3ba5229248
prerequisite-patch-id: 95cb792fddaafba73bb5e62dc6062b8e851b1421
-- 
2.25.0




More information about the Hostap mailing list