/** @file\r
Driver Binding Protocol for IPsec Driver.\r
\r
- Copyright (c) 2009 - 2013, Intel Corporation. All rights reserved.<BR>\r
+ Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>\r
\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
@param[in] RemainingDevicePath Optional parameter used to pick a specific child\r
device to start.\r
@param[in] IpVersion IP_VERSION_4 or IP_VERSION_6.\r
- \r
+\r
@retval EFI_SUCCES This driver supports this device.\r
@retval EFI_ALREADY_STARTED This driver is already running on this device.\r
@retval other This driver does not support this device.\r
{\r
EFI_STATUS Status;\r
EFI_GUID *UdpServiceBindingGuid;\r
- \r
+\r
if (IpVersion == IP_VERSION_4) {\r
UdpServiceBindingGuid = &gEfiUdp4ServiceBindingProtocolGuid;\r
} else {\r
IKE_UDP_SERVICE *UdpSrv;\r
LIST_ENTRY *Entry;\r
LIST_ENTRY *Next;\r
+ IKEV2_SA_SESSION *Ikev2SaSession;\r
\r
//\r
// Locate ipsec protocol to get private data.\r
//\r
if ((IpVersion == IP_VERSION_4 && Private->Udp6Num ==0) ||\r
(IpVersion == IP_VERSION_6 && Private->Udp4Num ==0)) {\r
- IkeDeleteAllSas (Private, FALSE);\r
+ //\r
+ // If IKEv2 SAs are under establishing, delete it directly.\r
+ //\r
+ if (!IsListEmpty (&Private->Ikev2SessionList)) {\r
+ NET_LIST_FOR_EACH_SAFE (Entry, Next, &Private->Ikev2SessionList) {\r
+ Ikev2SaSession = IKEV2_SA_SESSION_BY_SESSION (Entry);\r
+ RemoveEntryList (&Ikev2SaSession->BySessionTable);\r
+ Ikev2SaSessionFree (Ikev2SaSession);\r
+ }\r
+ }\r
+\r
+ //\r
+ // Delete established IKEv2 SAs.\r
+ //\r
+ if (!IsListEmpty (&Private->Ikev2EstablishedList)) {\r
+ NET_LIST_FOR_EACH_SAFE (Entry, Next, &Private->Ikev2EstablishedList) {\r
+ Ikev2SaSession = IKEV2_SA_SESSION_BY_SESSION (Entry);\r
+ RemoveEntryList (&Ikev2SaSession->BySessionTable);\r
+ Ikev2SaSessionFree (Ikev2SaSession);\r
+ }\r
+ }\r
}\r
\r
if (IpVersion == IP_VERSION_4) {\r