Map extension AKMs in AIDL to main AKM am: 1de410d064

Original change: https://googleplex-android-review.googlesource.com/c/platform/external/wpa_supplicant_8/+/23639894

Change-Id: I04e605d8a5d899336bc6dd335bc344ffd55c69f0
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Sunil Ravi
2023-06-15 01:40:43 +00:00
committed by Automerger Merge Worker

View File

@@ -646,6 +646,59 @@ int AidlManager::unregisterNetwork(
return 0;
}
// Some of the undefined AKMs in AIDL (Mostly extension AKMs like FT AKMs)
// are mapped to the main AKM. This is for the framework to map the AKM to
// correct security type.
KeyMgmtMask convertSupplicantSelectedKeyMgmtForConnectionToAidl(int key_mgmt)
{
switch (key_mgmt) {
case WPA_KEY_MGMT_IEEE8021X:
return KeyMgmtMask::WPA_EAP;
case WPA_KEY_MGMT_PSK:
return KeyMgmtMask::WPA_PSK;
case WPA_KEY_MGMT_NONE:
return KeyMgmtMask::NONE;
case WPA_KEY_MGMT_IEEE8021X_NO_WPA:
return KeyMgmtMask::IEEE8021X;
case WPA_KEY_MGMT_FT_IEEE8021X:
return KeyMgmtMask::FT_EAP;
case WPA_KEY_MGMT_FT_PSK:
return KeyMgmtMask::FT_PSK;
case WPA_KEY_MGMT_IEEE8021X_SHA256:
return KeyMgmtMask::WPA_EAP_SHA256;
case WPA_KEY_MGMT_PSK_SHA256:
return KeyMgmtMask::WPA_PSK_SHA256;
case WPA_KEY_MGMT_SAE:
case WPA_KEY_MGMT_FT_SAE:
case WPA_KEY_MGMT_SAE_EXT_KEY:
case WPA_KEY_MGMT_FT_SAE_EXT_KEY:
return KeyMgmtMask::SAE;
case WPA_KEY_MGMT_WAPI_PSK:
return KeyMgmtMask::WAPI_PSK;
case WPA_KEY_MGMT_WAPI_CERT:
return KeyMgmtMask::WAPI_CERT;
case WPA_KEY_MGMT_OSEN:
return KeyMgmtMask::OSEN;
case WPA_KEY_MGMT_IEEE8021X_SUITE_B_192:
case WPA_KEY_MGMT_FT_IEEE8021X_SHA384:
return KeyMgmtMask::SUITE_B_192;
case WPA_KEY_MGMT_FILS_SHA256:
case WPA_KEY_MGMT_FT_FILS_SHA256:
return KeyMgmtMask::FILS_SHA256;
case WPA_KEY_MGMT_FILS_SHA384:
case WPA_KEY_MGMT_FT_FILS_SHA384:
return KeyMgmtMask::FILS_SHA384;
case WPA_KEY_MGMT_OWE:
return KeyMgmtMask::OWE;
case WPA_KEY_MGMT_DPP:
return KeyMgmtMask::DPP;
default:
wpa_printf(MSG_INFO, "Unable to convert supplicant key_mgmt 0x%x to AIDL",
key_mgmt);
return (KeyMgmtMask) key_mgmt;
}
}
/**
* Notify all listeners about any state changes on a particular interface.
*
@@ -690,10 +743,17 @@ int AidlManager::notifyStateChange(struct wpa_supplicant *wpa_s)
(wpa_auth_alg_fils(wpa_s->auth_alg) &&
!dl_list_empty(&wpa_s->fils_hlp_req) &&
(wpa_s->wpa_state == WPA_COMPLETED)) ? true : false;
aidl_state_change_data.keyMgmtMask = (KeyMgmtMask) wpa_s->key_mgmt;
// wpa_supplicant sets the frequency on receiving the EVENT_ASSOC.
aidl_state_change_data.frequencyMhz =
wpa_s->wpa_state >= WPA_ASSOCIATED ? wpa_s->assoc_freq : 0;
if (wpa_s->wpa_state >= WPA_ASSOCIATED) {
// wpa_supplicant sets the frequency on receiving the EVENT_ASSOC.
aidl_state_change_data.frequencyMhz = wpa_s->assoc_freq;
// The key_mgmt is selected prior to sending the connect command
// to driver. But in case of CROSS-AKM Connection/Roaming, the
// key_mgmt is updated with the one from association IE. So the
// selected key_mgmt is accurate only after moving to
// associated state.
aidl_state_change_data.keyMgmtMask =
convertSupplicantSelectedKeyMgmtForConnectionToAidl(wpa_s->key_mgmt);
}
// Invoke the |onStateChanged| method on all registered callbacks.
std::function<