]> git.proxmox.com Git - mirror_edk2.git/blame - NetworkPkg/IpSecDxe/IpSecDebug.c
Fix a bug about the iSCSI DHCP dependency issue.
[mirror_edk2.git] / NetworkPkg / IpSecDxe / IpSecDebug.c
CommitLineData
a3bcde70 1/** @file\r
9166f840 2 The Interfaces of IPsec debug information printing.\r
a3bcde70
HT
3\r
4 Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>\r
5\r
6 This program and the accompanying materials\r
7 are licensed and made available under the terms and conditions of the BSD License\r
8 which accompanies this distribution. The full text of the license may be found at\r
9 http://opensource.org/licenses/bsd-license.php.\r
10\r
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13\r
14**/\r
15\r
16#include "IpSecImpl.h"\r
17#include "IpSecDebug.h"\r
18\r
19//\r
20// The print title for IKEv1 variety phase.\r
21//\r
1a6fdcb0 22CHAR8 *mIkev1StateStr[IKE_STATE_NUM] = {\r
a3bcde70
HT
23 "IKEv1_MAIN_1",\r
24 "IKEv1_MAIN_2",\r
25 "IKEv1_MAIN_3",\r
26 "IKEv1_MAIN_ESTABLISHED",\r
27 "IKEv1_QUICK_1",\r
28 "IKEv1_QUICK_2",\r
29 "IKEv1_QUICK_ESTABLISHED"\r
30};\r
9166f840 31\r
32//\r
33// The print title for IKEv2 variety phase.\r
34//\r
1a6fdcb0 35CHAR8 *mIkev2StateStr[IKE_STATE_NUM] = {\r
9166f840 36 "IKEv2_STATE_INIT",\r
37 "IKEv2_STATE_AUTH",\r
38 "IKEv2_STATE_SA_ESTABLISH",\r
39 "IKEv2_STATE_CREATE_CHILD",\r
40 "IKEv2_STATE_SA_REKEYING",\r
41 "IKEv2_STATE_CHILD_SA_ESTABLISHED",\r
42 "IKEv2_STATE_SA_DELETING"\r
43};\r
44\r
a3bcde70
HT
45//\r
46// The print title for IKEv1 variety Exchagne.\r
47//\r
48CHAR8 *mExchangeStr[] = {\r
49 "IKEv1 Main Exchange",\r
50 "IKEv1 Info Exchange",\r
51 "IKEv1 Quick Exchange",\r
9166f840 52 "IKEv2 Initial Exchange",\r
53 "IKEv2 Auth Exchange",\r
54 "IKEv2 Create Child Exchange",\r
55 "IKEv2 Info Exchange",\r
56 "IKE Unknow Exchange"\r
a3bcde70
HT
57};\r
58\r
59//\r
60// The print title for IKEv1 variety Payload.\r
61//\r
9166f840 62CHAR8 *mIkev1PayloadStr[] = {\r
a3bcde70
HT
63 "IKEv1 None Payload",\r
64 "IKEv1 SA Payload",\r
65 "IKEv1 Proposal Payload",\r
66 "IKEv1 Transform Payload",\r
67 "IKEv1 KE Payload",\r
68 "IKEv1 ID Payload",\r
69 "IKEv1 Certificate Payload",\r
70 "IKEv1 Certificate Request Payload",\r
71 "IKEv1 Hash Payload",\r
72 "IKEv1 Signature Payload",\r
73 "IKEv1 Nonce Payload",\r
74 "IKEv1 Notify Payload",\r
75 "IKEv1 Delete Payload",\r
76 "IKEv1 Vendor Payload"\r
77};\r
78\r
9166f840 79//\r
80// The print title for IKEv2 variety Payload.\r
81//\r
82CHAR8* mIkev2PayloadStr[] = {\r
83 "IKEv2 SA Payload",\r
84 "IKEv2 Key Payload",\r
85 "IKEv2 Identity Initial Payload",\r
86 "IKEv2 Identity Respond Payload",\r
87 "IKEv2 Certificate Payload",\r
88 "IKEv2 Certificate Request Payload",\r
89 "IKEv2 Auth Payload",\r
90 "IKEv2 Nonce Payload",\r
91 "IKEv2 Notify Payload",\r
92 "IKEv2 Delet Payload",\r
93 "IKEv2 Vendor Payload",\r
94 "IKEv2 Traffic Selector Initiator Payload",\r
95 "IKEv2 Traffic Selector Respond Payload",\r
96 "IKEv2 Encrypt Payload",\r
97 "IKEv2 Configuration Payload",\r
98 "IKEv2 Extensible Authentication Payload"\r
99};\r
100\r
a3bcde70
HT
101/**\r
102 Print the IP address.\r
103\r
104 @param[in] Level Debug print error level. Pass to DEBUG().\r
105 @param[in] Ip Point to a specified IP address.\r
106 @param[in] IpVersion The IP Version.\r
107\r
108**/\r
109VOID\r
110IpSecDumpAddress (\r
111 IN UINTN Level,\r
112 IN EFI_IP_ADDRESS *Ip,\r
113 IN UINT8 IpVersion\r
114 )\r
115{\r
116 if (IpVersion == IP_VERSION_6) {\r
117 DEBUG (\r
118 (Level,\r
119 "%x%x:%x%x:%x%x:%x%x",\r
120 Ip->v6.Addr[0],\r
121 Ip->v6.Addr[1],\r
122 Ip->v6.Addr[2],\r
123 Ip->v6.Addr[3],\r
124 Ip->v6.Addr[4],\r
125 Ip->v6.Addr[5],\r
126 Ip->v6.Addr[6],\r
127 Ip->v6.Addr[7])\r
128 );\r
129 DEBUG (\r
130 (Level,\r
131 ":%x%x:%x%x:%x%x:%x%x\n",\r
132 Ip->v6.Addr[8],\r
133 Ip->v6.Addr[9],\r
134 Ip->v6.Addr[10],\r
135 Ip->v6.Addr[11],\r
136 Ip->v6.Addr[12],\r
137 Ip->v6.Addr[13],\r
138 Ip->v6.Addr[14],\r
139 Ip->v6.Addr[15])\r
140 );\r
141 } else {\r
142 DEBUG (\r
143 (Level,\r
144 "%d.%d.%d.%d\n",\r
145 Ip->v4.Addr[0],\r
146 Ip->v4.Addr[1],\r
147 Ip->v4.Addr[2],\r
148 Ip->v4.Addr[3])\r
149 );\r
150 }\r
151\r
152}\r
153\r
154/**\r
9166f840 155 Print IKE Current states.\r
a3bcde70 156\r
9166f840 157 @param[in] Previous The Previous state of IKE.\r
158 @param[in] Current The current state of IKE.\r
159 @param[in] IkeVersion The version of IKE.\r
a3bcde70
HT
160\r
161**/\r
162VOID\r
9166f840 163IkeDumpState (\r
a3bcde70 164 IN UINT32 Previous,\r
9166f840 165 IN UINT32 Current,\r
166 IN UINT8 IkeVersion\r
a3bcde70
HT
167 )\r
168{\r
1a6fdcb0 169 if (Previous >= IKE_STATE_NUM || Current >= IKE_STATE_NUM) {\r
170 return; \r
171 }\r
9166f840 172 \r
a3bcde70 173 if (Previous == Current) {\r
9166f840 174 if (IkeVersion == 1) {\r
175 DEBUG ((DEBUG_INFO, "\n****Current state is %a\n", mIkev1StateStr[Previous]));\r
176 } else if (IkeVersion == 2) {\r
177 DEBUG ((DEBUG_INFO, "\n****Current state is %a\n", mIkev2StateStr[Previous]));\r
1a6fdcb0 178 } \r
9166f840 179 } else {\r
180 if (IkeVersion == 1) {\r
181 DEBUG ((DEBUG_INFO, "\n****Change state from %a to %a\n", mIkev1StateStr[Previous], mIkev1StateStr[Current]));\r
182 } else {\r
183 DEBUG ((DEBUG_INFO, "\n****Change state from %a to %a\n", mIkev2StateStr[Previous], mIkev2StateStr[Current]));\r
1a6fdcb0 184 } \r
9166f840 185 }\r
9166f840 186}\r
187\r
188/**\r
189 Print the IKE Packet.\r
190\r
191 @param[in] Packet Point to IKE packet to be printed.\r
192 @param[in] Direction Point to the IKE packet is inbound or outbound.\r
193 @param[in] IpVersion Specified IP Version.\r
194\r
195**/\r
196VOID\r
197IpSecDumpPacket (\r
198 IN IKE_PACKET *Packet,\r
199 IN EFI_IPSEC_TRAFFIC_DIR Direction,\r
200 IN UINT8 IpVersion\r
201 )\r
202{\r
203 CHAR8 *TypeStr;\r
204 UINTN PacketSize;\r
205 UINT64 InitCookie;\r
206 UINT64 RespCookie;\r
207\r
208 ASSERT (Packet != NULL);\r
209\r
210 PacketSize = Packet->PayloadTotalSize + sizeof (IKE_HEADER);\r
211 InitCookie = (Direction == EfiIPsecOutBound) ? HTONLL (Packet->Header->InitiatorCookie) : Packet->Header->InitiatorCookie;\r
212 RespCookie = (Direction == EfiIPsecOutBound) ? HTONLL (Packet->Header->ResponderCookie) : Packet->Header->ResponderCookie;\r
213\r
214 switch (Packet->Header->ExchangeType) {\r
215 case IKE_XCG_TYPE_IDENTITY_PROTECT:\r
216 TypeStr = mExchangeStr[0];\r
217 break;\r
218\r
219 case IKE_XCG_TYPE_INFO:\r
220 TypeStr = mExchangeStr[1];\r
221 break;\r
222\r
223 case IKE_XCG_TYPE_QM:\r
224 TypeStr = mExchangeStr[2];\r
225 break;\r
226 \r
227 case IKE_XCG_TYPE_SA_INIT:\r
228 TypeStr = mExchangeStr[3];\r
229 break;\r
230\r
231 case IKE_XCG_TYPE_AUTH:\r
232 TypeStr = mExchangeStr[4];\r
233 break;\r
234\r
235 case IKE_XCG_TYPE_CREATE_CHILD_SA:\r
236 TypeStr = mExchangeStr[5];\r
237 break;\r
238\r
239 case IKE_XCG_TYPE_INFO2:\r
240 TypeStr = mExchangeStr[6];\r
241 break;\r
242 \r
243 default:\r
244 TypeStr = mExchangeStr[7];\r
245 break;\r
246 }\r
247\r
248 if (Direction == EfiIPsecOutBound) {\r
249 DEBUG ((DEBUG_INFO, "\n>>>Sending %d bytes %a to ", PacketSize, TypeStr));\r
a3bcde70 250 } else {\r
9166f840 251 DEBUG ((DEBUG_INFO, "\n>>>Receiving %d bytes %a from ", PacketSize, TypeStr));\r
a3bcde70
HT
252 }\r
253\r
9166f840 254 IpSecDumpAddress (DEBUG_INFO, &Packet->RemotePeerIp, IpVersion);\r
255\r
256 DEBUG ((DEBUG_INFO, " InitiatorCookie:0x%lx ResponderCookie:0x%lx\n", InitCookie, RespCookie));\r
257 DEBUG (\r
258 (DEBUG_INFO,\r
259 " Version: 0x%x Flags:0x%x ExchangeType:0x%x\n",\r
260 Packet->Header->Version,\r
261 Packet->Header->Flags,\r
262 Packet->Header->ExchangeType)\r
263 );\r
264 DEBUG (\r
265 (DEBUG_INFO,\r
266 " MessageId:0x%x NextPayload:0x%x\n",\r
267 Packet->Header->MessageId,\r
268 Packet->Header->NextPayload)\r
269 );\r
270\r
271}\r
272\r
273/**\r
274 Print the IKE Paylolad.\r
275\r
276 @param[in] IkePayload Point to payload to be printed.\r
277 @param[in] IkeVersion The specified version of IKE.\r
278 \r
279**/\r
280VOID\r
281IpSecDumpPayload (\r
282 IN IKE_PAYLOAD *IkePayload,\r
283 IN UINT8 IkeVersion\r
284 )\r
285{\r
286 if (IkeVersion == 1) {\r
287 DEBUG ((DEBUG_INFO, "+%a\n", mIkev1PayloadStr[IkePayload->PayloadType]));\r
288 } else {\r
289 //\r
290 // For IKEV2 the first Payload type is started from 33.\r
291 //\r
292 DEBUG ((DEBUG_INFO, "+%a\n", mIkev2PayloadStr[IkePayload->PayloadType - 33]));\r
293 }\r
294 IpSecDumpBuf ("Payload data", IkePayload->PayloadBuf, IkePayload->PayloadSize);\r
a3bcde70
HT
295}\r
296\r
297/**\r
298 Print the buffer in form of Hex.\r
299\r
300 @param[in] Title The strings to be printed before the data of the buffer.\r
301 @param[in] Data Points to buffer to be printed.\r
302 @param[in] DataSize The size of the buffer to be printed.\r
303\r
304**/\r
305VOID\r
306IpSecDumpBuf (\r
307 IN CHAR8 *Title,\r
308 IN UINT8 *Data,\r
309 IN UINTN DataSize\r
310 )\r
311{\r
312 UINTN Index;\r
313 UINTN DataIndex;\r
314 UINTN BytesRemaining;\r
315 UINTN BytesToPrint;\r
316\r
317 DataIndex = 0;\r
318 BytesRemaining = DataSize;\r
319\r
320 DEBUG ((DEBUG_INFO, "==%a %d bytes==\n", Title, DataSize));\r
321\r
322 while (BytesRemaining > 0) {\r
323\r
324 BytesToPrint = (BytesRemaining > IPSEC_DEBUG_BYTE_PER_LINE) ? IPSEC_DEBUG_BYTE_PER_LINE : BytesRemaining;\r
325\r
326 for (Index = 0; Index < BytesToPrint; Index++) {\r
327 DEBUG ((DEBUG_INFO, " 0x%02x,", Data[DataIndex++]));\r
328 }\r
329\r
330 DEBUG ((DEBUG_INFO, "\n"));\r
331 BytesRemaining -= BytesToPrint;\r
332 }\r
333\r
334}\r