@ -1097,29 +1097,45 @@ u8 * hostapd_eid_rsnxe(struct hostapd_data *hapd, u8 *eid, size_t len)
{
u8 * pos = eid ;
bool sae_pk = false ;
u16 capab = 0 ;
size_t flen ;
if ( ! ( hapd - > conf - > wpa & WPA_PROTO_RSN ) )
return eid ;
# ifdef CONFIG_SAE_PK
sae_pk = hostapd_sae_pk_in_use ( hapd - > conf ) ;
# endif /* CONFIG_SAE_PK */
if ( ! ( hapd - > conf - > wpa & WPA_PROTO_RSN ) | |
! wpa_key_mgmt_sae ( hapd - > conf - > wpa_key_mgmt ) | |
( hapd - > conf - > sae_pwe ! = 1 & & hapd - > conf - > sae_pwe ! = 2 & &
! hostapd_sae_pw_id_in_use ( hapd - > conf ) & & ! sae_pk ) | |
hapd - > conf - > sae_pwe = = 3 | |
len < 3 )
return pos ;
* pos + + = WLAN_EID_RSNX ;
* pos + + = 1 ;
/* bits 0-3 = 0 since only one octet of Extended RSN Capabilities is
* used for now */
* pos = BIT ( WLAN_RSNX_CAPAB_SAE_H2E ) ;
if ( wpa_key_mgmt_sae ( hapd - > conf - > wpa_key_mgmt ) & &
( hapd - > conf - > sae_pwe = = 1 | | hapd - > conf - > sae_pwe = = 2 | |
hostapd_sae_pw_id_in_use ( hapd - > conf ) | | sae_pk ) & &
hapd - > conf - > sae_pwe ! = 3 ) {
capab | = BIT ( WLAN_RSNX_CAPAB_SAE_H2E ) ;
# ifdef CONFIG_SAE_PK
if ( sae_pk )
* pos | = BIT ( WLAN_RSNX_CAPAB_SAE_PK ) ;
if ( sae_pk )
capab | = BIT ( WLAN_RSNX_CAPAB_SAE_PK ) ;
# endif /* CONFIG_SAE_PK */
pos + + ;
}
if ( hapd - > iface - > drv_flags2 & WPA_DRIVER_FLAGS2_SEC_LTF )
capab | = BIT ( WLAN_RSNX_CAPAB_SECURE_LTF - 8 ) ;
if ( hapd - > iface - > drv_flags2 & WPA_DRIVER_FLAGS2_SEC_RTT )
capab | = BIT ( WLAN_RSNX_CAPAB_SECURE_RTT - 8 ) ;
if ( hapd - > iface - > drv_flags2 & WPA_DRIVER_FLAGS2_PROT_RANGE_NEG )
capab | = BIT ( WLAN_RSNX_CAPAB_PROT_RANGE_NEG - 8 ) ;
flen = ( capab & 0xff00 ) ? 2 : 1 ;
if ( len < 2 + flen | | ! capab )
return eid ; /* no supported extended RSN capabilities */
capab | = flen - 1 ; /* bit 0-3 = Field length (n - 1) */
* pos + + = WLAN_EID_RSNX ;
* pos + + = flen ;
* pos + + = capab & 0x00ff ;
capab > > = 8 ;
if ( capab )
* pos + + = capab ;
return pos ;
}