[PATCH 10/29] 11bi: RSNE/RSNXE capability Extensions in AP mode
Sai Pratyusha Magam
smagam at qti.qualcomm.com
Thu Dec 11 05:14:24 PST 2025
Advertise EPPKE AKM suite in RSN IE of Beacons/Probe
Response frames
Add support to include RSNXE capability indications
for the following features in beacons/probe response
frames and EPPKE Authentication frame 2:
-(Re)Association Request/Response frame encryption
-IEEE802.1X (EAP) Authentication Utilizing Authentication
frames
-PMKSA Caching Privacy
Signed-off-by: Sai Pratyusha Magam <smagam at qti.qualcomm.com>
---
hostapd/config_file.c | 4 ++++
src/ap/ieee802_11_shared.c | 16 ++++++++++++++++
src/ap/wpa_auth_ie.c | 23 +++++++++++++++++++++--
3 files changed, 41 insertions(+), 2 deletions(-)
diff --git a/hostapd/config_file.c b/hostapd/config_file.c
index 6084602c8..e6258a053 100644
--- a/hostapd/config_file.c
+++ b/hostapd/config_file.c
@@ -717,6 +717,10 @@ static int hostapd_config_parse_key_mgmt(int line, const char *value)
else if (os_strcmp(start, "PASN") == 0)
val |= WPA_KEY_MGMT_PASN;
#endif /* CONFIG_PASN */
+#ifdef CONFIG_ENC_ASSOC
+ else if (os_strcmp(start, "EPPKE") == 0)
+ val |= WPA_KEY_MGMT_EPPKE;
+#endif /* CONFIG_ENC_ASSOC */
else {
wpa_printf(MSG_ERROR, "Line %d: invalid key_mgmt '%s'",
line, start);
diff --git a/src/ap/ieee802_11_shared.c b/src/ap/ieee802_11_shared.c
index 750891425..05fb35bf3 100644
--- a/src/ap/ieee802_11_shared.c
+++ b/src/ap/ieee802_11_shared.c
@@ -1153,6 +1153,22 @@ u8 * hostapd_eid_rsnxe(struct hostapd_data *hapd, u8 *eid, size_t len)
if ((hapd->iface->drv_flags2 & WPA_DRIVER_FLAGS2_SPP_AMSDU) &&
hapd->conf->spp_amsdu)
capab |= BIT(WLAN_RSNX_CAPAB_SPP_A_MSDU);
+#ifdef CONFIG_ENC_ASSOC
+ /* Per IEEE802.11bi/D1.2, 12.16.7 PMKSA caching privacy
+ * A STA that sets the PMKSA Caching Privacy Support
+ * field in the RSNXE to 1 shall set the (Re)Association
+ * Frame Encryption Support field in the RSNXE to 1
+ */
+ if ((hapd->iface->drv_flags2 &
+ WPA_DRIVER_FLAGS2_ASSOCIATION_FRAME_ENCRYPTION) &&
+ (hapd->conf->assoc_frame_encryption ||
+ hapd->conf->pmksa_caching_privacy))
+ capab |= BIT(WLAN_RSNX_CAPAB_ASSOC_FRAME_ENCRYPTION);
+ if (hapd->conf->pmksa_caching_privacy)
+ capab |= BIT(WLAN_RSNX_CAPAB_PMKSA_CACHING_PRIVACY);
+ if (hapd->conf->eap_using_authentication_frames)
+ capab |= BIT(WLAN_RSNX_CAPAB_1X_UTILIZING_AUTHENTICATION_FRAMES);
+#endif /* CONFIG_ENC_ASSOC */
if (!capab)
return eid; /* no supported extended RSN capabilities */
diff --git a/src/ap/wpa_auth_ie.c b/src/ap/wpa_auth_ie.c
index 220ac809f..6ae1350a0 100644
--- a/src/ap/wpa_auth_ie.c
+++ b/src/ap/wpa_auth_ie.c
@@ -303,7 +303,13 @@ static u8 * rsne_write_data(u8 *buf, size_t len, u8 *pos, int group,
num_suites++;
}
#endif /* CONFIG_PASN */
-
+#ifdef CONFIG_ENC_ASSOC
+ if (key_mgmt & WPA_KEY_MGMT_EPPKE) {
+ RSN_SELECTOR_PUT(pos, RSN_AUTH_KEY_MGMT_EPPKE);
+ pos += RSN_SELECTOR_LEN;
+ num_suites++;
+ }
+#endif /* CONFIG_ENC_ASSOC */
#ifdef CONFIG_RSN_TESTING
if (rsn_testing) {
RSN_SELECTOR_PUT(pos, RSN_SELECTOR(0x12, 0x34, 0x56, 2));
@@ -503,7 +509,20 @@ static u32 rsnxe_capab(struct wpa_auth_config *conf, int key_mgmt)
capab |= BIT(WLAN_RSNX_CAPAB_SSID_PROTECTION);
if (conf->spp_amsdu)
capab |= BIT(WLAN_RSNX_CAPAB_SPP_A_MSDU);
-
+#ifdef CONFIG_ENC_ASSOC
+ /* Per IEEE802.11bi/D2.0, 12.16.7 PMKSA caching privacy
+ * A STA that sets the PMKSA Caching Privacy Support
+ * field in the RSNXE to 1 shall set the (Re)Association
+ * Frame Encryption Support field in the RSNXE to 1
+ */
+ if (conf->assoc_frame_encryption ||
+ conf->pmksa_caching_privacy)
+ capab |= BIT(WLAN_RSNX_CAPAB_ASSOC_FRAME_ENCRYPTION);
+ if (conf->pmksa_caching_privacy)
+ capab |= BIT(WLAN_RSNX_CAPAB_PMKSA_CACHING_PRIVACY);
+ if (conf->eap_using_authentication_frames)
+ capab |= BIT(WLAN_RSNX_CAPAB_1X_UTILIZING_AUTHENTICATION_FRAMES);
+#endif /* CONFIG_ENC_ASSOC */
return capab;
}
--
2.34.1
More information about the Hostap
mailing list