MLD STA: Add support for SAE external authentication offload to userspace
Enable MLO for SAE authentication when the driver indicates the AP MLD address in an external authentication request. The MAC address of the interface on which the external authentication request received will be used as the own MLD address. This commit does below for enabling MLO during external SAE authentication: - Use MLD addresses for SAE authentication. - Add Basic Multi-Link element with the own MLD address in SAE Authentication frames. - Send SAE Authentication frames with the source address as the own MLD address, destination address and BSSID as the AP MLD address to the driver. - Validate the MLD address indicated by the AP in SAE Authentication frames against the AP MLD address indicated in external authentication request. - Store the PMKSA with the AP MLD address after completing SAE authentication. Signed-off-by: Veerendranath Jakkam <quic_vjakkam@quicinc.com>
This commit is contained in:
parent
575712450a
commit
c91852044d
4 changed files with 134 additions and 18 deletions
|
@ -2730,6 +2730,7 @@ enum wpa_drv_update_connect_params_mask {
|
|||
* the real status code for failures. Used only for the request interface
|
||||
* from user space to the driver.
|
||||
* @pmkid: Generated PMKID as part of external auth exchange (e.g., SAE).
|
||||
* @mld_addr: AP's MLD address or %NULL if MLO is not used
|
||||
*/
|
||||
struct external_auth {
|
||||
enum {
|
||||
|
@ -2742,6 +2743,7 @@ struct external_auth {
|
|||
unsigned int key_mgmt_suite;
|
||||
u16 status;
|
||||
const u8 *pmkid;
|
||||
const u8 *mld_addr;
|
||||
};
|
||||
|
||||
#define WPAS_MAX_PASN_PEERS 10
|
||||
|
|
|
@ -3116,6 +3116,7 @@ static void nl80211_external_auth(struct wpa_driver_nl80211_data *drv,
|
|||
{
|
||||
union wpa_event_data event;
|
||||
enum nl80211_external_auth_action act;
|
||||
char mld_addr[50];
|
||||
|
||||
if (!tb[NL80211_ATTR_AKM_SUITES] ||
|
||||
!tb[NL80211_ATTR_EXTERNAL_AUTH_ACTION] ||
|
||||
|
@ -3146,10 +3147,21 @@ static void nl80211_external_auth(struct wpa_driver_nl80211_data *drv,
|
|||
|
||||
event.external_auth.bssid = nla_data(tb[NL80211_ATTR_BSSID]);
|
||||
|
||||
mld_addr[0] = '\0';
|
||||
if (tb[NL80211_ATTR_MLD_ADDR]) {
|
||||
event.external_auth.mld_addr =
|
||||
nla_data(tb[NL80211_ATTR_MLD_ADDR]);
|
||||
os_snprintf(mld_addr, sizeof(mld_addr), ", MLD ADDR: " MACSTR,
|
||||
MAC2STR(event.external_auth.mld_addr));
|
||||
}
|
||||
|
||||
wpa_printf(MSG_DEBUG,
|
||||
"nl80211: External auth action: %u, AKM: 0x%x",
|
||||
"nl80211: External auth action: %u, AKM: 0x%x, SSID: %s, BSSID: " MACSTR "%s",
|
||||
event.external_auth.action,
|
||||
event.external_auth.key_mgmt_suite);
|
||||
event.external_auth.key_mgmt_suite,
|
||||
wpa_ssid_txt(event.external_auth.ssid,
|
||||
event.external_auth.ssid_len),
|
||||
MAC2STR(event.external_auth.bssid), mld_addr);
|
||||
wpa_supplicant_event(drv->ctx, EVENT_EXTERNAL_AUTH, &event);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue