Acked-by: Michael D Kinney <michael.d.kin...@intel.com> Mike
> -----Original Message----- > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Wu, Jiaxin > Sent: Monday, January 9, 2023 7:03 PM > To: Clark-williams, Zachary <zachary.clark-willi...@intel.com>; > devel@edk2.groups.io > Cc: Zachary Clark-Williams <zclarkw...@gmail.com>; Maciej Rabeda > <maciej.rab...@linux.intel.com>; Otcheretianski, Andrei > <andrei.otcheretian...@intel.com> > Subject: Re: [edk2-devel] [PATCH] NetworkPkg: Add WiFi profile sync protocol > support > > One comment as below, Others good to me. > > Reviewed-by: Wu Jiaxin <jiaxin...@intel.com> > > > > + @param[in, out] WcmProfile WiFi Connection Manager profile > > structure > > + @param[in, out] MacAddress MAC address from AMT saved to NiC > > MAC address > > + > > + @retval EFI_SUCCESS Stored WiFi profile converted and > > returned > > succefully > > + @retval EFI_UNSUPPORTED Profile protocol sharing not supported > > or > > enabled > > + @retval EFI_NOT_FOUND No profiles to returned > > + @retval Others Error Occurred > > +**/ > > +typedef > > +EFI_STATUS > > +(EFIAPI *WIFI_PROFILE_GET)( > > + IN OUT WIFI_MGR_NETWORK_PROFILE *Profile, > > + IN OUT EFI_80211_MAC_ADDRESS MacAddress > > + ); > > Does it make sense remove the OUT declaring since this is just to get the > corresponding MacAddress Profile? For OUT, we expect > there will be changed when return but here it's not. > > Thanks, > Jiaxin > > > -----Original Message----- > > From: Clark-williams, Zachary <zachary.clark-willi...@intel.com> > > Sent: Saturday, January 7, 2023 9:31 AM > > To: devel@edk2.groups.io > > Cc: Zachary Clark-Williams <zclarkw...@gmail.com>; Maciej Rabeda > > <maciej.rab...@linux.intel.com>; Wu, Jiaxin <jiaxin...@intel.com>; > > Otcheretianski, Andrei <andrei.otcheretian...@intel.com>; Clark-williams, > > Zachary <zachary.clark-willi...@intel.com> > > Subject: [PATCH] NetworkPkg: Add WiFi profile sync protocol support > > > > From: Zachary Clark-Williams <zclarkw...@gmail.com> > > > > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3845 > > > > Enables KVM and One Click Recovery WLAN capability with WiFi Profile > > Sync feature and protocol. Adding WiFiProfileSyncProtocol, which > > supports the profilesync driver operations for transferring WiFi profiles > > from AMT to the Supplicant. WiFiConnectionManager will check for the > > WifiProfileSyncProtocol and if found will operate on the premise of a > > One Click Recovery, or KVM flow with a Wifi profile provided by AMT. > > > > Cc: Maciej Rabeda <maciej.rab...@linux.intel.com> > > Cc: Wu Jiaxin <jiaxin...@intel.com> > > Cc: Andrei Otcheretianski <andrei.otcheretian...@intel.com> > > > > Signed-off-by: Zachary Clark-Williams <zachary.clark-willi...@intel.com> > > --- > > .../Protocol/WiFiProfileSyncProtocol.h | 90 +++++++ > > NetworkPkg/NetworkPkg.dec | 3 + > > .../WifiConnectionManagerDxe.inf | 3 +- > > .../WifiConnectionMgrConfigNVDataStruct.h | 2 +- > > .../WifiConnectionMgrDriver.c | 125 ++++++---- > > .../WifiConnectionMgrDxe.h | 4 +- > > .../WifiConnectionMgrImpl.c | 219 +++++++++++++++--- > > .../WifiConnectionMgrMisc.c | 13 ++ > > 8 files changed, 386 insertions(+), 73 deletions(-) > > create mode 100644 > > NetworkPkg/Include/Protocol/WiFiProfileSyncProtocol.h > > > > diff --git a/NetworkPkg/Include/Protocol/WiFiProfileSyncProtocol.h > > b/NetworkPkg/Include/Protocol/WiFiProfileSyncProtocol.h > > new file mode 100644 > > index 0000000000..90523e30fa > > --- /dev/null > > +++ b/NetworkPkg/Include/Protocol/WiFiProfileSyncProtocol.h > > @@ -0,0 +1,90 @@ > > +/** @file > > + WiFi profile sync protocol. Supports One Click Recovery or KVM OS > > recovery > > + boot flow over WiFi. This protocol will hold the WiFi profile provided by > > AMT > > + in its original structure, then convert the profile when the > > WifiConnectionManager > > + is attempting a connection during a system recovery reboot, OCR or KVM. > > These > > + converstion and operations are found in the WifiProfileSync driver and in > > + the link provided below. > > + > > + Pulbic links to speficiation document for KVM and One Click Recovery > > feature. > > + > > https://software.intel.com/sites/manageability/AMT_Implementation_and_ > > Reference_Guide/default.htm?turl=WordDocuments%2Foneclickrecovery.h > > tm > > + > > + Copyright (c) 2022, Intel Corporation. All rights reserved.<BR> > > + > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > +**/ > > + > > +#ifndef WIFI_PROFILE_SYNC_PROTOCOL_H_ > > +#define WIFI_PROFILE_SYNC_PROTOCOL_H_ > > + > > +#include <WifiConnectionManagerDxe/WifiConnectionMgrConfig.h> > > + > > +// > > +// WiFi Profile Sync Protocol GUID variable. > > +// > > +extern EFI_GUID gEfiWiFiProfileSyncProtocolGuid; > > + > > +/** > > + Used by the WiFi connection manager to get the WiFi profile that AMT > > shared > > + and was stored in WiFi profile protocol. Aligns the AMT WiFi profile > > data to > > + the WiFi connection manager profile structure fo connection use. > > + > > + @param[in, out] WcmProfile WiFi Connection Manager profile > > structure > > + @param[in, out] MacAddress MAC address from AMT saved to NiC > > MAC address > > + > > + @retval EFI_SUCCESS Stored WiFi profile converted and > > returned > > succefully > > + @retval EFI_UNSUPPORTED Profile protocol sharing not supported > > or > > enabled > > + @retval EFI_NOT_FOUND No profiles to returned > > + @retval Others Error Occurred > > +**/ > > +typedef > > +EFI_STATUS > > +(EFIAPI *WIFI_PROFILE_GET)( > > + IN OUT WIFI_MGR_NETWORK_PROFILE *Profile, > > + IN OUT EFI_80211_MAC_ADDRESS MacAddress > > + ); > > + > > +/** > > + Saves the WiFi connection status recieved by the WiFiConnectionManager > > when > > + in a KVM OR One Click Recovery WLAN recovery flow. Input as > > + EFI_80211_CONNECT_NETWORK_RESULT_CODE then converted and > > stored as EFI_STATUS type. > > + > > + @param[in] ConnectionStatus WiFi connection attempt results > > +**/ > > +typedef > > +VOID > > +(EFIAPI *WIFI_SET_CONNECT_STATE)( > > + IN EFI_80211_CONNECT_NETWORK_RESULT_CODE ConnectionStatus > > + ); > > + > > +/** > > + Retrieves the stored WiFi connection status when in either KVM OR One > > Click > > + Recovery WLAN recovery flow. > > + > > + @retval EFI_SUCCESS WiFi connection completed succesfully > > + @retval Others Connection failure occurred > > +**/ > > +typedef > > +EFI_STATUS > > +(EFIAPI *WIFI_GET_CONNECT_STATE)( > > + VOID > > + ); > > + > > +// > > +// WiFi Profile Sync Protocol structure. > > +// > > +typedef struct { > > + UINT32 Revision; > > + WIFI_SET_CONNECT_STATE SetConnectState; > > + WIFI_GET_CONNECT_STATE GetConnectState; > > + WIFI_PROFILE_GET GetProfile; > > +} EDKII_WIFI_PROFILE_SYNC_PROTOCOL; > > + > > +/** > > + WiFi Profile Protocol revision number. > > + > > + Revision 1: Initial version > > +**/ > > +#define EDKII_WIFI_PROFILE_SYNC_PROTOCOL_REVISION 1 > > + > > +#endif // WIFI_PROFILE_SYNC_PROTOCOL_H_ > > diff --git a/NetworkPkg/NetworkPkg.dec b/NetworkPkg/NetworkPkg.dec > > index 5e43ebf8c5..53fb34c4a0 100644 > > --- a/NetworkPkg/NetworkPkg.dec > > +++ b/NetworkPkg/NetworkPkg.dec > > @@ -91,6 +91,9 @@ > > ## Include/Protocol/HttpCallback.h > > gEdkiiHttpCallbackProtocolGuid = {0x611114f1, 0xa37b, 0x4468, {0xa4, > > 0x36, > > 0x5b, 0xdd, 0xa1, 0x6a, 0xa2, 0x40}} > > > > + ## Include/Protocol/WiFiProfileSyncProtocol.h > > + gEfiWiFiProfileSyncProtocolGuid = {0x399a2b8a, 0xc267, 0x44aa, {0x9a, > > 0xb4, 0x30, 0x58, 0x8c, 0xd2, 0x2d, 0xcc}} > > + > > [PcdsFixedAtBuild] > > ## The max attempt number will be created by iSCSI driver. > > # @Prompt Max attempt number. > > diff --git > > a/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionManagerDxe.inf > > b/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionManagerDxe.inf > > index 4394b6f4bb..7e36016cf8 100644 > > --- > > a/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionManagerDxe.inf > > +++ > > b/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionManagerDxe.inf > > @@ -9,7 +9,7 @@ > > # 2). WPA2 Personal Network > > # 3). EAP Networks (EAP-TLS, EAP-TTLS/MSCHAPv2 and PEAPv0/MSCHAPv2) > > # > > -# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR> > > +# Copyright (c) 2019 - 2022, Intel Corporation. All rights reserved.<BR> > > # > > # SPDX-License-Identifier: BSD-2-Clause-Patent > > # > > @@ -71,6 +71,7 @@ > > gEfiAdapterInformationProtocolGuid ## SOMETIMES_CONSUMES > > gEfiSupplicantProtocolGuid ## SOMETIMES_CONSUMES > > gEfiEapConfigurationProtocolGuid ## SOMETIMES_CONSUMES > > + gEfiWiFiProfileSyncProtocolGuid ## SOMETIMES_CONSUMES > > > > [Guids] > > gWifiConfigGuid ## PRODUCES ## GUID > > diff --git > > a/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrConfigNVDa > > taStruct.h > > b/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrConfigNVDa > > taStruct.h > > index b5518a74d8..dcc4bf7e27 100644 > > --- > > a/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrConfigNVDa > > taStruct.h > > +++ > > b/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrConfigNVDa > > taStruct.h > > @@ -25,7 +25,7 @@ > > > > #define PASSWORD_MIN_LEN 8 > > #define PASSWORD_MAX_LEN 63 > > -#define PASSWORD_STORAGE_SIZE 64 > > +#define PASSWORD_STORAGE_SIZE 65 > > > > #define EAP_IDENTITY_LEN 63 > > #define EAP_IDENTITY_SIZE 64 > > diff --git > > a/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrDriver.c > > b/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrDriver.c > > index 67a01ca058..0af55db599 100644 > > --- a/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrDriver.c > > +++ b/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrDriver.c > > @@ -1,7 +1,7 @@ > > /** @file > > The driver binding protocol for the WiFi Connection Manager. > > > > - Copyright (c) 2019, Intel Corporation. All rights reserved.<BR> > > + Copyright (c) 2019 - 2022, Intel Corporation. All rights reserved.<BR> > > > > SPDX-License-Identifier: BSD-2-Clause-Patent > > > > @@ -39,6 +39,11 @@ EFI_GUID mWifiConfigNetworkListRefreshGuid = > > WIFI_CONFIG_NETWORK_LIST_REFRESH_G > > EFI_GUID mWifiConfigConnectFormRefreshGuid = > > WIFI_CONFIG_CONNECT_FORM_REFRESH_GUID; > > EFI_GUID mWifiConfigMainFormRefreshGuid = > > WIFI_CONFIG_MAIN_FORM_REFRESH_GUID; > > > > +// > > +// Wifi connection attempt counter for retries > > +// > > +extern UINT8 mWifiConnectionCount; > > + > > /** > > Tests to see if this driver supports a given controller. If a child > > device is > > provided, > > it further tests to see if this driver supports creating a handle for the > > specified child device. > > @@ -167,8 +172,10 @@ WifiMgrDxeDriverBindingStart ( > > EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL *Wmp; > > EFI_SUPPLICANT_PROTOCOL *Supplicant; > > EFI_EAP_CONFIGURATION_PROTOCOL *EapConfig; > > + EDKII_WIFI_PROFILE_SYNC_PROTOCOL *WiFiProfileSyncProtocol; > > > > - Nic = NULL; > > + mWifiConnectionCount = 0; > > + Nic = NULL; > > > > // > > // Open Protocols > > @@ -236,47 +243,72 @@ WifiMgrDxeDriverBindingStart ( > > InitializeListHead (&Nic->ProfileList); > > > > // > > - // Record the MAC address of the incoming NIC. > > + // WiFi profile sync protocol installation check for OS recovery flow. > > // > > - Status = NetLibGetMacAddress ( > > - ControllerHandle, > > - (EFI_MAC_ADDRESS *)&Nic->MacAddress, > > - &AddressSize > > - ); > > - if (EFI_ERROR (Status)) { > > - goto ERROR2; > > - } > > - > > - // > > - // Create and start the timer for the status check > > - // > > - Status = gBS->CreateEvent ( > > - EVT_NOTIFY_SIGNAL | EVT_TIMER, > > - TPL_CALLBACK, > > - WifiMgrOnTimerTick, > > - Nic, > > - &Nic->TickTimer > > + Status = gBS->LocateProtocol ( > > + &gEfiWiFiProfileSyncProtocolGuid, > > + NULL, > > + (VOID **)&WiFiProfileSyncProtocol > > ); > > - if (EFI_ERROR (Status)) { > > - goto ERROR2; > > - } > > + if (!EFI_ERROR (Status)) { > > + Nic->ConnectPendingNetwork = (WIFI_MGR_NETWORK_PROFILE > > *)AllocateZeroPool (sizeof (WIFI_MGR_NETWORK_PROFILE)); > > + if (Nic->ConnectPendingNetwork == NULL) { > > + Status = EFI_OUT_OF_RESOURCES; > > + goto ERROR1; > > + } > > > > - Status = gBS->SetTimer (Nic->TickTimer, TimerPeriodic, > > EFI_TIMER_PERIOD_MILLISECONDS (500)); > > - if (EFI_ERROR (Status)) { > > - goto ERROR3; > > - } > > + WiFiProfileSyncProtocol->GetProfile (Nic->ConnectPendingNetwork, Nic- > > >MacAddress); > > + if (Nic->ConnectPendingNetwork != NULL) { > > + Status = WifiMgrConnectToNetwork (Nic, Nic- > > >ConnectPendingNetwork); > > + if (!EFI_ERROR (Status)) { > > + goto ERROR1; > > + } > > + WiFiProfileSyncProtocol->SetConnectState (Status); > > + } > > + } else { > > + // > > + // Record the MAC address of the incoming NIC. > > + // > > + Status = NetLibGetMacAddress ( > > + ControllerHandle, > > + (EFI_MAC_ADDRESS *)&Nic->MacAddress, > > + &AddressSize > > + ); > > + if (EFI_ERROR (Status)) { > > + goto ERROR2; > > + } > > > > - Nic->ConnectState = WifiMgrDisconnected; > > - Nic->ScanState = WifiMgrScanFinished; > > + // > > + // Create and start the timer for the status check > > + // > > + Status = gBS->CreateEvent ( > > + EVT_NOTIFY_SIGNAL | EVT_TIMER, > > + TPL_CALLBACK, > > + WifiMgrOnTimerTick, > > + Nic, > > + &Nic->TickTimer > > + ); > > + if (EFI_ERROR (Status)) { > > + goto ERROR2; > > + } > > > > - OldTpl = gBS->RaiseTPL (TPL_CALLBACK); > > - InsertTailList (&mPrivate->NicList, &Nic->Link); > > - Nic->NicIndex = mPrivate->NicCount++; > > - if (mPrivate->CurrentNic == NULL) { > > - mPrivate->CurrentNic = Nic; > > - } > > + Status = gBS->SetTimer (Nic->TickTimer, TimerPeriodic, > > EFI_TIMER_PERIOD_MILLISECONDS (500)); > > + if (EFI_ERROR (Status)) { > > + goto ERROR3; > > + } > > > > - gBS->RestoreTPL (OldTpl); > > + Nic->ConnectState = WifiMgrDisconnected; > > + Nic->ScanState = WifiMgrScanFinished; > > + > > + OldTpl = gBS->RaiseTPL (TPL_CALLBACK); > > + InsertTailList (&mPrivate->NicList, &Nic->Link); > > + Nic->NicIndex = mPrivate->NicCount++; > > + if (mPrivate->CurrentNic == NULL) { > > + mPrivate->CurrentNic = Nic; > > + } > > + > > + gBS->RestoreTPL (OldTpl); > > + } > > > > Status = gBS->InstallProtocolInterface ( > > &ControllerHandle, > > @@ -385,10 +417,11 @@ WifiMgrDxeDriverBindingStop ( > > IN EFI_HANDLE *ChildHandleBuffer OPTIONAL > > ) > > { > > - EFI_STATUS Status; > > - EFI_TPL OldTpl; > > - WIFI_MGR_PRIVATE_PROTOCOL *WifiMgrIdentifier; > > - WIFI_MGR_DEVICE_DATA *Nic; > > + EFI_STATUS Status; > > + EFI_TPL OldTpl; > > + WIFI_MGR_PRIVATE_PROTOCOL *WifiMgrIdentifier; > > + WIFI_MGR_DEVICE_DATA *Nic; > > + EDKII_WIFI_PROFILE_SYNC_PROTOCOL *WiFiProfileSyncProtocol; > > > > Status = gBS->OpenProtocol ( > > ControllerHandle, > > @@ -481,7 +514,15 @@ WifiMgrDxeDriverBindingStop ( > > // > > OldTpl = gBS->RaiseTPL (TPL_CALLBACK); > > > > - RemoveEntryList (&Nic->Link); > > + Status = gBS->LocateProtocol ( > > + &gEfiWiFiProfileSyncProtocolGuid, > > + NULL, > > + (VOID **)&WiFiProfileSyncProtocol > > + ); > > + if (EFI_ERROR (Status)) { > > + RemoveEntryList (&Nic->Link); > > + } > > + > > mPrivate->NicCount--; > > if (mPrivate->CurrentNic == Nic) { > > mPrivate->CurrentNic = NULL; > > diff --git > > a/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrDxe.h > > b/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrDxe.h > > index 7b2e41e155..047f85dbc2 100644 > > --- a/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrDxe.h > > +++ b/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrDxe.h > > @@ -47,6 +47,7 @@ > > #include <Protocol/SimpleNetwork.h> > > #include <Protocol/SimpleFileSystem.h> > > #include <Protocol/EapConfiguration.h> > > +#include <Protocol/WiFiProfileSyncProtocol.h> > > > > // > > // Produced Protocols > > @@ -73,7 +74,8 @@ > > // > > #define WIFI_MGR_DXE_VERSION 0xb > > > > -#define OUI_IEEE_80211I 0xAC0F00 > > +#define OUI_IEEE_80211I 0xAC0F00 > > +#define MAX_WIFI_CONNETION_ATTEMPTS 3 > > > > typedef enum { > > Ieee80211PairwiseCipherSuiteUseGroupCipherSuite = 0, > > diff --git > > a/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrImpl.c > > b/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrImpl.c > > index 59bac48c42..7d471e7591 100644 > > --- a/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrImpl.c > > +++ b/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrImpl.c > > @@ -19,6 +19,8 @@ EFI_EAP_TYPE mEapSecondAuthMethod[] = { > > EFI_EAP_TYPE_MSCHAPV2 > > }; > > > > +UINT8 mWifiConnectionCount = 0; > > + > > /** > > The callback function for scan operation. This function updates networks > > according to the latest scan result, and trigger UI refresh. > > @@ -424,18 +426,26 @@ WifiMgrConfigPassword ( > > return EFI_NOT_FOUND; > > } > > > > - AsciiPassword = AllocateZeroPool ((StrLen (Profile->Password) + 1) * > > sizeof > > (UINT8)); > > + if (StrLen (Profile->Password) >= PASSWORD_STORAGE_SIZE) { > > + ASSERT (EFI_INVALID_PARAMETER); > > + return EFI_INVALID_PARAMETER; > > + } > > + > > + AsciiPassword = AllocateZeroPool ((StrLen (Profile->Password) + 1) * > > sizeof (CHAR8)); > > if (AsciiPassword == NULL) { > > return EFI_OUT_OF_RESOURCES; > > } > > > > - UnicodeStrToAsciiStrS (Profile->Password, (CHAR8 *)AsciiPassword, > > PASSWORD_STORAGE_SIZE); > > - Status = Supplicant->SetData ( > > - Supplicant, > > - EfiSupplicant80211PskPassword, > > - AsciiPassword, > > - (StrLen (Profile->Password) + 1) * sizeof (UINT8) > > - ); > > + Status = UnicodeStrToAsciiStrS (Profile->Password, (CHAR8 > > *)AsciiPassword, (StrLen (Profile->Password) + 1)); > > + if (!EFI_ERROR (Status)) { > > + Status = Supplicant->SetData ( > > + Supplicant, > > + EfiSupplicant80211PskPassword, > > + AsciiPassword, > > + (StrLen (Profile->Password) + 1) * sizeof > > (CHAR8) > > + ); > > + } > > + > > ZeroMem (AsciiPassword, AsciiStrLen ((CHAR8 *)AsciiPassword) + 1); > > FreePool (AsciiPassword); > > > > @@ -465,19 +475,20 @@ WifiMgrConfigEap ( > > IN WIFI_MGR_NETWORK_PROFILE *Profile > > ) > > { > > - EFI_STATUS Status; > > - EFI_EAP_CONFIGURATION_PROTOCOL *EapConfig; > > - EFI_EAP_TYPE EapAuthMethod; > > - EFI_EAP_TYPE EapSecondAuthMethod; > > - EFI_EAP_TYPE *AuthMethodList; > > - CHAR8 *Identity; > > - UINTN IdentitySize; > > - CHAR16 *Password; > > - UINTN PasswordSize; > > - UINTN EncryptPasswordLen; > > - CHAR8 *AsciiEncryptPassword; > > - UINTN AuthMethodListSize; > > - UINTN Index; > > + EFI_STATUS Status; > > + EDKII_WIFI_PROFILE_SYNC_PROTOCOL *WiFiProfileSyncProtocol; > > + EFI_EAP_CONFIGURATION_PROTOCOL *EapConfig; > > + EFI_EAP_TYPE EapAuthMethod; > > + EFI_EAP_TYPE EapSecondAuthMethod; > > + EFI_EAP_TYPE *AuthMethodList; > > + CHAR8 *Identity; > > + UINTN IdentitySize; > > + CHAR16 *Password; > > + UINTN PasswordSize; > > + UINTN EncryptPasswordLen; > > + CHAR8 *AsciiEncryptPassword; > > + UINTN AuthMethodListSize; > > + UINTN Index; > > > > if ((Nic == NULL) || (Nic->EapConfig == NULL) || (Profile == NULL)) { > > return EFI_INVALID_PARAMETER; > > @@ -567,7 +578,13 @@ WifiMgrConfigEap ( > > return EFI_OUT_OF_RESOURCES; > > } > > > > - UnicodeStrToAsciiStrS (Profile->EapIdentity, Identity, IdentitySize); > > + Status = gBS->LocateProtocol (&gEfiWiFiProfileSyncProtocolGuid, NULL, > > (VOID **)&WiFiProfileSyncProtocol); > > + if (!EFI_ERROR (Status)) { > > + CopyMem (Identity, &Profile->EapIdentity, IdentitySize); > > + } else { > > + UnicodeStrToAsciiStrS (Profile->EapIdentity, Identity, IdentitySize); > > + } > > + > > Status = EapConfig->SetData ( > > EapConfig, > > EFI_EAP_TYPE_IDENTITY, > > @@ -892,6 +909,133 @@ WifiMgrPrepareConnection ( > > return EFI_SUCCESS; > > } > > > > +/** > > + Will reset NiC data, get profile from profile sync driver, and send for > > + another connection attempt.This function should not be called more than > > + 3 times. > > + > > + @param[in] WiFiProfileSyncProtocol The target network profile to > > connect. > > + > > + @retval EFI_SUCCESS The operation is completed. > > + @retval other Operation failure. > > + > > +**/ > > +EFI_STATUS > > +ConnectionRetry ( > > + IN EDKII_WIFI_PROFILE_SYNC_PROTOCOL *WiFiProfileSyncProtocol > > + ) > > +{ > > + EFI_STATUS Status; > > + WIFI_MGR_DEVICE_DATA *Nic; > > + EFI_WIRELESS_MAC_CONNECTION_II_PROTOCOL *Wmp; > > + EFI_SUPPLICANT_PROTOCOL *Supplicant; > > + EFI_EAP_CONFIGURATION_PROTOCOL *EapConfig; > > + > > + Nic = NULL; > > + > > + Status = gBS->LocateProtocol ( > > + &gEfiWiFi2ProtocolGuid, > > + NULL, > > + (VOID **)&Wmp > > + ); > > + if (EFI_ERROR (Status)) { > > + return Status; > > + } > > + > > + Status = gBS->LocateProtocol ( > > + &gEfiSupplicantProtocolGuid, > > + NULL, > > + (VOID **)&Supplicant > > + ); > > + if (EFI_ERROR (Status)) { > > + Supplicant = NULL; > > + } > > + > > + Status = gBS->LocateProtocol ( > > + &gEfiEapConfigurationProtocolGuid, > > + NULL, > > + (VOID **)&EapConfig > > + ); > > + if (EFI_ERROR (Status)) { > > + EapConfig = NULL; > > + } > > + > > + // > > + // Initialize Nic device data > > + // > > + Nic = AllocateZeroPool (sizeof (WIFI_MGR_DEVICE_DATA)); > > + if (Nic == NULL) { > > + Status = EFI_OUT_OF_RESOURCES; > > + return Status; > > + } > > + > > + Nic->Signature = WIFI_MGR_DEVICE_DATA_SIGNATURE; > > + Nic->Private = mPrivate; > > + Nic->Wmp = Wmp; > > + Nic->Supplicant = Supplicant; > > + Nic->EapConfig = EapConfig; > > + Nic->UserSelectedProfile = NULL; > > + Nic->OneTimeScanRequest = FALSE; > > + > > + if (Nic->Supplicant != NULL) { > > + Status = WifiMgrGetSupportedSuites (Nic); > > + } > > + > > + if (!EFI_ERROR (Status)) { > > + InitializeListHead (&Nic->ProfileList); > > + > > + Nic->ConnectPendingNetwork = (WIFI_MGR_NETWORK_PROFILE > > *)AllocateZeroPool (sizeof (WIFI_MGR_NETWORK_PROFILE)); > > + if (Nic->ConnectPendingNetwork == NULL) { > > + Status = EFI_OUT_OF_RESOURCES; > > + DEBUG ((DEBUG_ERROR, "[WiFi Connection Manager] Failed to allocate > > memory for ConnectPendingNetwork\n")); > > + goto ERROR; > > + } > > + > > + Status = WiFiProfileSyncProtocol->GetProfile (Nic- > > >ConnectPendingNetwork, Nic->MacAddress); > > + if (!EFI_ERROR (Status) && (Nic->ConnectPendingNetwork != NULL)) { > > + Status = WifiMgrConnectToNetwork (Nic, Nic- > > >ConnectPendingNetwork); > > + if (!EFI_ERROR (Status)) { > > + return Status; > > + } > > + } else { > > + DEBUG ((DEBUG_ERROR, "[WiFi Connection Manager] Failed to get WiFi > > profile with status %r\n", Status)); > > + } > > + } else { > > + DEBUG ((DEBUG_ERROR, "[WiFi Connection Manager] Failed to get > > Supported suites with status %r\n", Status)); > > + } > > + > > + if (Nic->ConnectPendingNetwork != NULL) { > > + if (Nic->ConnectPendingNetwork->Network.AKMSuite != NULL) { > > + FreePool (Nic->ConnectPendingNetwork->Network.AKMSuite); > > + } > > + > > + if (Nic->ConnectPendingNetwork->Network.CipherSuite != NULL) { > > + FreePool (Nic->ConnectPendingNetwork->Network.CipherSuite); > > + } > > + > > + FreePool (Nic->ConnectPendingNetwork); > > + } > > + > > +ERROR: > > + if (Nic->Supplicant != NULL) { > > + if (Nic->SupportedSuites.SupportedAKMSuites != NULL) { > > + FreePool (Nic->SupportedSuites.SupportedAKMSuites); > > + } > > + > > + if (Nic->SupportedSuites.SupportedSwCipherSuites != NULL) { > > + FreePool (Nic->SupportedSuites.SupportedSwCipherSuites); > > + } > > + > > + if (Nic->SupportedSuites.SupportedHwCipherSuites != NULL) { > > + FreePool (Nic->SupportedSuites.SupportedHwCipherSuites); > > + } > > + } > > + > > + FreePool (Nic); > > + > > + return Status; > > +} > > + > > /** > > The callback function for connect operation. > > > > @@ -908,12 +1052,13 @@ WifiMgrOnConnectFinished ( > > IN VOID *Context > > ) > > { > > - EFI_STATUS Status; > > - WIFI_MGR_MAC_CONFIG_TOKEN *ConfigToken; > > - WIFI_MGR_NETWORK_PROFILE *ConnectedProfile; > > - UINT8 SecurityType; > > - UINT8 SSIdLen; > > - CHAR8 *AsciiSSId; > > + EFI_STATUS Status; > > + WIFI_MGR_MAC_CONFIG_TOKEN *ConfigToken; > > + WIFI_MGR_NETWORK_PROFILE *ConnectedProfile; > > + UINT8 SecurityType; > > + UINT8 SSIdLen; > > + CHAR8 *AsciiSSId; > > + EDKII_WIFI_PROFILE_SYNC_PROTOCOL *WiFiProfileSyncProtocol; > > > > ASSERT (Context != NULL); > > > > @@ -925,6 +1070,24 @@ WifiMgrOnConnectFinished ( > > ASSERT (ConfigToken->Type == TokenTypeConnectNetworkToken); > > > > ASSERT (ConfigToken->Token.ConnectNetworkToken != NULL); > > + > > + Status = gBS->LocateProtocol (&gEfiWiFiProfileSyncProtocolGuid, NULL, > > (VOID **)&WiFiProfileSyncProtocol); > > + if (!EFI_ERROR (Status)) { > > + WiFiProfileSyncProtocol->SetConnectState (ConfigToken- > > >Token.ConnectNetworkToken->ResultCode); > > + if ((mWifiConnectionCount < MAX_WIFI_CONNETION_ATTEMPTS) && > > + (ConfigToken->Token.ConnectNetworkToken->ResultCode != > > ConnectSuccess)) > > + { > > + mWifiConnectionCount++; > > + gBS->CloseEvent (Event); > > + Status = ConnectionRetry (WiFiProfileSyncProtocol); > > + if (!EFI_ERROR (Status)) { > > + return; > > + } > > + > > + WiFiProfileSyncProtocol->SetConnectState (Status); > > + } > > + } > > + > > if (ConfigToken->Token.ConnectNetworkToken->Status != EFI_SUCCESS) { > > if (ConfigToken->Nic->OneTimeConnectRequest) { > > // > > diff --git > > a/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrMisc.c > > b/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrMisc.c > > index 4ad5643c24..518572922f 100644 > > --- a/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrMisc.c > > +++ b/NetworkPkg/WifiConnectionManagerDxe/WifiConnectionMgrMisc.c > > @@ -672,10 +672,23 @@ WifiMgrCleanProfileSecrets ( > > IN WIFI_MGR_NETWORK_PROFILE *Profile > > ) > > { > > + EFI_STATUS Status; > > + EDKII_WIFI_PROFILE_SYNC_PROTOCOL *WiFiProfileSyncProtocol; > > + > > ZeroMem (Profile->Password, sizeof (CHAR16) * > > PASSWORD_STORAGE_SIZE); > > ZeroMem (Profile->EapPassword, sizeof (CHAR16) * > > PASSWORD_STORAGE_SIZE); > > ZeroMem (Profile->PrivateKeyPassword, sizeof (CHAR16) * > > PASSWORD_STORAGE_SIZE); > > > > + // > > + // When EFI WiFi profile sync protocol is found the system is > > performing a > > recovery boot in secure > > + // boot mode. The profile sync driver will manage the CA certificate, > > client > > certificate, and key > > + // data, cleaning them at exit boot services. > > + // > > + Status = gBS->LocateProtocol (&gEfiWiFiProfileSyncProtocolGuid, NULL, > > (VOID **)&WiFiProfileSyncProtocol); > > + if (!EFI_ERROR (Status)) { > > + return; > > + } > > + > > if (Profile->CACertData != NULL) { > > ZeroMem (Profile->CACertData, Profile->CACertSize); > > FreePool (Profile->CACertData); > > -- > > 2.37.3.windows.1 > > > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#98233): https://edk2.groups.io/g/devel/message/98233 Mute This Topic: https://groups.io/mt/95025543/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-