2 IKEv2 related definitions.
4 Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
6 SPDX-License-Identifier: BSD-2-Clause-Patent
15 #define IKEV2_TS_ANY_PORT 0xffff
16 #define IKEV2_TS_ANY_PROTOCOL 0
18 #define IKEV2_DELET_CHILDSA_LIST 0
19 #define IKEV2_ESTABLISHING_CHILDSA_LIST 1
20 #define IKEV2_ESTABLISHED_CHILDSA_LIST 2
22 #define IKEV2_SA_SESSION_SIGNATURE SIGNATURE_32 ('I', 'K', 'E', 'I')
23 #define IKEV2_SA_SESSION_FROM_COMMON(a) CR (a, IKEV2_SA_SESSION, SessionCommon, IKEV2_SA_SESSION_SIGNATURE)
24 #define IKEV2_SA_SESSION_BY_SESSION(a) CR (a, IKEV2_SA_SESSION, BySessionTable, IKEV2_SA_SESSION_SIGNATURE)
25 #define IKEV2_SA_SESSION_BY_ESTABLISHED(a) CR (a, IKEV2_SA_SESSION, ByEstablishedTable, IKEV2_SA_SESSION_SIGNATURE)
27 #define IKEV2_CHILD_SA_SESSION_SIGNATURE SIGNATURE_32 ('I', 'K', 'E', 'C')
28 #define IKEV2_CHILD_SA_SESSION_FROM_COMMON(a) CR (a, IKEV2_CHILD_SA_SESSION, SessionCommon, IKEV2_CHILD_SA_SESSION_SIGNATURE)
29 #define IKEV2_CHILD_SA_SESSION_BY_IKE_SA(a) CR (a, IKEV2_CHILD_SA_SESSION, ByIkeSa, IKEV2_CHILD_SA_SESSION_SIGNATURE)
30 #define IKEV2_CHILD_SA_SESSION_BY_DEL_SA(a) CR (a, IKEV2_CHILD_SA_SESSION, ByDelete, IKEV2_CHILD_SA_SESSION_SIGNATURE)
32 #define IS_IKEV2_SA_SESSION(s) ((s)->Common.IkeSessionType == IkeSessionTypeIkeSa)
33 #define IKEV2_SA_FIRST_PROPOSAL(Sa) (IKEV2_PROPOSAL *)((IKEV2_SA *)(Sa)+1)
34 #define IKEV2_NEXT_TRANSFORM_WITH_SIZE(Transform,TransformSize) \
35 (IKEV2_TRANSFORM *) ((UINT8 *)(Transform) + (TransformSize))
37 #define IKEV2_NEXT_PROPOSAL_WITH_SIZE(Proposal, ProposalSize) \
38 (IKEV2_PROPOSAL *) ((UINT8 *)(Proposal) + (ProposalSize))
40 #define IKEV2_PROPOSAL_FIRST_TRANSFORM(Proposal) \
41 (IKEV2_TRANSFORM *)((UINT8 *)((IKEV2_PROPOSAL *)(Proposal)+1) + \
42 (((IKEV2_PROPOSAL *)(Proposal))->SpiSize))
43 #define IKEV2_PROPOSAL_FIRST_TRANSFORM(Proposal) \
44 (IKEV2_TRANSFORM *)((UINT8 *)((IKEV2_PROPOSAL *)(Proposal)+1) + \
45 (((IKEV2_PROPOSAL *)(Proposal))->SpiSize))
50 IkeStateIkeSaEstablished
,
53 IkeStateChildSaEstablished
,
56 } IKEV2_SESSION_STATE
;
59 IkeRequestTypeCreateChildSa
,
60 IkeRequestTypeRekeyChildSa
,
61 IkeRequestTypeRekeyIkeSa
,
63 } IKEV2_CREATE_CHILD_REQUEST_TYPE
;
76 IKEV2_DH_BUFFER
*DhBuffer
;
112 // IKE_PROPOSAL_DATA Proposals[1];
122 // IKE_TRANSFORM_DATA Transforms[1];
124 } IKEV2_PROPOSAL_DATA
;
127 UINT8 TransformIndex
;
130 IKE_SA_ATTRIBUTE Attribute
;
131 } IKEV2_TRANSFORM_DATA
;
135 IKE_SESSION_TYPE IkeSessionType
;
137 BOOLEAN IsOnDeleting
; // Flag to indicate whether the SA is on deleting.
138 IKEV2_SESSION_STATE State
;
139 EFI_EVENT TimeoutEvent
;
140 UINT64 TimeoutInterval
;
142 IKE_PACKET
*LastSentPacket
;
143 IKEV2_SA_PARAMS
*SaParams
;
144 UINT16 PreferDhGroup
;
145 EFI_IP_ADDRESS RemotePeerIp
;
146 EFI_IP_ADDRESS LocalPeerIp
;
147 IKE_ON_PAYLOAD_FROM_NET BeforeDecodePayload
;
148 IKE_ON_PAYLOAD_FROM_NET AfterEncodePayload
;
149 IKE_UDP_SERVICE
*UdpService
;
150 IPSEC_PRIVATE_DATA
*Private
;
151 } IKEV2_SESSION_COMMON
;
155 IKEV2_SESSION_COMMON SessionCommon
;
156 UINT64 InitiatorCookie
;
157 UINT64 ResponderCookie
;
159 // Initiator: SA proposals to be sent
160 // Responder: SA proposals to be matched
162 IKEV2_SA_DATA
*SaData
; // SA Private struct used for SA payload generation
163 IKEV2_SESSION_KEYS
*IkeKeys
;
168 UINT8
*NCookie
; // Buffer Contains the Notify Cookie
169 UINTN NCookieSize
; // Size of NCookie
170 IPSEC_PAD_ENTRY
*Pad
;
171 IPSEC_SPD_ENTRY
*Spd
; // SPD that requested the negotiation, TODO: better use SPD selector
172 LIST_ENTRY ChildSaSessionList
;
173 LIST_ENTRY ChildSaEstablishSessionList
; // For Establish Child SA.
174 LIST_ENTRY InfoMIDList
; // For Information MID
175 LIST_ENTRY DeleteSaList
; // For deteling Child SA.
177 UINTN InitPacketSize
;
179 UINTN RespPacketSize
;
181 LIST_ENTRY BySessionTable
; // Use for all IkeSaSession Links
186 IKEV2_SESSION_COMMON SessionCommon
;
187 IKEV2_SA_SESSION
*IkeSaSession
;
189 IKEV2_SA_DATA
*SaData
;
192 UINT32 RemotePeerSpi
;
197 SA_KEYMATS ChildKeymats
;
198 IKEV2_DH_BUFFER
*DhBuffer
; //New DH exchnaged by CREATE_CHILD_SA
199 IPSEC_SPD_ENTRY
*Spd
;
200 EFI_IPSEC_SPD_SELECTOR
*SpdSelector
;
206 } IKEV2_CHILD_SA_SESSION
;
215 // This struct is used to pass the detail infromation to the InfoGenerator() for
216 // the response Information Exchange Message creatation.
220 IKEV2_INFO_TYPE InfoType
;
221 } IKEV2_INFO_EXCHANGE_CONTEXT
;
230 (*IKEV2_PACKET_GENERATOR
) (
237 (*IKEV2_PACKET_PARSER
) (
239 IN IKE_PACKET
*IkePacket
243 IKEV2_PACKET_PARSER Parser
;
244 IKEV2_PACKET_GENERATOR Generator
;
245 } IKEV2_PACKET_HANDLER
;
247 extern IKEV2_PACKET_HANDLER mIkev2Initial
[][2];
248 extern IKEV2_PACKET_HANDLER mIkev2CreateChild
;
249 extern IKEV2_PACKET_HANDLER mIkev2Info
;