+++ /dev/null
-/** @file\r
- The operations for Child SA.\r
-\r
- Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>\r
-\r
- SPDX-License-Identifier: BSD-2-Clause-Patent\r
-\r
-**/\r
-\r
-#include "Utility.h"\r
-\r
-/**\r
- Generate IKE Packet for CREATE_CHILD_SA exchange.\r
-\r
- This IKE Packet would be the packet for creating new CHILD SA, or the packet for\r
- rekeying existing IKE SA, or the packet for existing CHILD SA.\r
-\r
- @param[in] SaSession Pointer to related SA session.\r
- @param[in] Context The data passed by the caller.\r
-\r
- return a pointer of IKE packet.\r
-\r
-**/\r
-IKE_PACKET *\r
-Ikev2CreateChildGenerator (\r
- IN UINT8 *SaSession,\r
- IN VOID *Context\r
- )\r
-{\r
-\r
- IKEV2_CHILD_SA_SESSION *ChildSaSession;\r
- IKEV2_SA_SESSION *IkeSaSession;\r
- IKE_PACKET *IkePacket;\r
- IKE_PAYLOAD *NotifyPayload;\r
- UINT32 *MessageId;\r
-\r
- NotifyPayload = NULL;\r
- MessageId = NULL;\r
-\r
- ChildSaSession = (IKEV2_CHILD_SA_SESSION *) SaSession;\r
- if (ChildSaSession == NULL) {\r
- return NULL;\r
- }\r
-\r
- IkePacket = IkePacketAlloc();\r
- if (IkePacket == NULL) {\r
- return NULL;\r
- }\r
-\r
-\r
- if (Context != NULL) {\r
- MessageId = (UINT32 *) Context;\r
- }\r
-\r
- IkePacket->Header->Version = (UINT8) (2 << 4);\r
- IkePacket->Header->NextPayload = IKEV2_PAYLOAD_TYPE_NOTIFY;\r
- IkePacket->Header->ExchangeType = IKE_XCG_TYPE_CREATE_CHILD_SA;\r
-\r
- if (ChildSaSession->SessionCommon.IkeSessionType == IkeSessionTypeChildSa) {\r
- //\r
- // 1.a Fill the IkePacket->Hdr\r
- //\r
- IkePacket->Header->InitiatorCookie = ChildSaSession->IkeSaSession->InitiatorCookie;\r
- IkePacket->Header->ResponderCookie = ChildSaSession->IkeSaSession->ResponderCookie;\r
-\r
- if (MessageId != NULL) {\r
- IkePacket->Header->MessageId = *MessageId;\r
- } else {\r
- IkePacket->Header->MessageId = ChildSaSession->MessageId;\r
- }\r
-\r
- if (ChildSaSession->SessionCommon.IsInitiator) {\r
- IkePacket->Header->Flags = IKE_HEADER_FLAGS_INIT;\r
- }\r
-\r
- } else {\r
- IkeSaSession = (IKEV2_SA_SESSION *) SaSession;\r
- //\r
- // 1.a Fill the IkePacket->Hdr\r
- //\r
- IkePacket->Header->InitiatorCookie = IkeSaSession->InitiatorCookie;\r
- IkePacket->Header->ResponderCookie = IkeSaSession->ResponderCookie;\r
-\r
- if (MessageId != NULL) {\r
- IkePacket->Header->MessageId = *MessageId;\r
- } else {\r
- IkePacket->Header->MessageId = IkeSaSession->MessageId;\r
- }\r
-\r
- if (IkeSaSession->SessionCommon.IsInitiator) {\r
- IkePacket->Header->Flags = IKE_HEADER_FLAGS_INIT;\r
- }\r
- }\r
-\r
- if (MessageId != NULL) {\r
- IkePacket->Header->Flags |= IKE_HEADER_FLAGS_RESPOND;\r
- }\r
-\r
- //\r
- // According to RFC4306, Chapter 4.\r
- // A minimal implementation may support the CREATE_CHILD_SA exchange only to\r
- // recognize requests and reject them with a Notify payload of type NO_ADDITIONAL_SAS.\r
- //\r
- NotifyPayload = Ikev2GenerateNotifyPayload (\r
- 0,\r
- IKEV2_PAYLOAD_TYPE_NONE,\r
- 0,\r
- IKEV2_NOTIFICATION_NO_ADDITIONAL_SAS,\r
- NULL,\r
- NULL,\r
- 0\r
- );\r
- if (NotifyPayload == NULL) {\r
- IkePacketFree (IkePacket);\r
- return NULL;\r
- }\r
-\r
- IKE_PACKET_APPEND_PAYLOAD (IkePacket, NotifyPayload);\r
- //\r
- // TODO: Support the CREATE_CHILD_SA exchange.\r
- //\r
- return IkePacket;\r
-}\r
-\r
-/**\r
- Parse the IKE packet of CREATE_CHILD_SA exchange.\r
-\r
- This function parse the IKE packet and save the related information to further\r
- calculation.\r
-\r
- @param[in] SaSession Pointer to IKEv2_CHILD_SA_SESSION related to this Exchange.\r
- @param[in] IkePacket Received packet to be parsed.\r
-\r
-\r
- @retval EFI_SUCCESS The IKE Packet is acceptable.\r
- @retval EFI_UNSUPPORTED Not support the CREATE_CHILD_SA request.\r
-\r
-**/\r
-EFI_STATUS\r
-Ikev2CreateChildParser (\r
- IN UINT8 *SaSession,\r
- IN IKE_PACKET *IkePacket\r
- )\r
-{\r
- return EFI_UNSUPPORTED;\r
-}\r
-\r
-/**\r
- Routine process before the payload decoding.\r
-\r
- @param[in] SessionCommon Pointer to ChildSa SessionCommon.\r
- @param[in] PayloadBuf Pointer to the payload.\r
- @param[in] PayloadSize Size of PayloadBuf in byte.\r
- @param[in] PayloadType Type of Payload.\r
-\r
-**/\r
-VOID\r
-Ikev2ChildSaBeforeDecodePayload (\r
- IN UINT8 *SessionCommon,\r
- IN UINT8 *PayloadBuf,\r
- IN UINTN PayloadSize,\r
- IN UINT8 PayloadType\r
- )\r
-{\r
-\r
-}\r
-\r
-/**\r
- Routine Process after the payload encoding.\r
-\r
- @param[in] SessionCommon Pointer to ChildSa SessionCommon.\r
- @param[in] PayloadBuf Pointer to the payload.\r
- @param[in] PayloadSize Size of PayloadBuf in byte.\r
- @param[in] PayloadType Type of Payload.\r
-\r
-**/\r
-VOID\r
-Ikev2ChildSaAfterEncodePayload (\r
- IN UINT8 *SessionCommon,\r
- IN UINT8 *PayloadBuf,\r
- IN UINTN PayloadSize,\r
- IN UINT8 PayloadType\r
- )\r
-{\r
-}\r
-\r
-IKEV2_PACKET_HANDLER mIkev2CreateChild = {\r
- //\r
- // Create Child\r
- //\r
- Ikev2CreateChildParser,\r
- Ikev2CreateChildGenerator\r
-};\r