/** @file\r
- Interface of IPsec printing debug information.\r
+ The Interfaces of IPsec debug information printing.\r
\r
Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>\r
\r
//\r
// The print title for IKEv1 variety phase.\r
//\r
-CHAR8 *mStateStr[] = {\r
+CHAR8 *mIkev1StateStr[] = {\r
"IKEv1_MAIN_1",\r
"IKEv1_MAIN_2",\r
"IKEv1_MAIN_3",\r
"IKEv1_QUICK_2",\r
"IKEv1_QUICK_ESTABLISHED"\r
};\r
+\r
+//\r
+// The print title for IKEv2 variety phase.\r
+//\r
+CHAR8 *mIkev2StateStr[] = {\r
+ "IKEv2_STATE_INIT",\r
+ "IKEv2_STATE_AUTH",\r
+ "IKEv2_STATE_SA_ESTABLISH",\r
+ "IKEv2_STATE_CREATE_CHILD",\r
+ "IKEv2_STATE_SA_REKEYING",\r
+ "IKEv2_STATE_CHILD_SA_ESTABLISHED",\r
+ "IKEv2_STATE_SA_DELETING"\r
+};\r
+\r
//\r
// The print title for IKEv1 variety Exchagne.\r
//\r
"IKEv1 Main Exchange",\r
"IKEv1 Info Exchange",\r
"IKEv1 Quick Exchange",\r
- "IKEv1 Unknown Exchange"\r
+ "IKEv2 Initial Exchange",\r
+ "IKEv2 Auth Exchange",\r
+ "IKEv2 Create Child Exchange",\r
+ "IKEv2 Info Exchange",\r
+ "IKE Unknow Exchange"\r
};\r
\r
//\r
// The print title for IKEv1 variety Payload.\r
//\r
-CHAR8 *mPayloadStr[] = {\r
+CHAR8 *mIkev1PayloadStr[] = {\r
"IKEv1 None Payload",\r
"IKEv1 SA Payload",\r
"IKEv1 Proposal Payload",\r
"IKEv1 Vendor Payload"\r
};\r
\r
+//\r
+// The print title for IKEv2 variety Payload.\r
+//\r
+CHAR8* mIkev2PayloadStr[] = {\r
+ "IKEv2 SA Payload",\r
+ "IKEv2 Key Payload",\r
+ "IKEv2 Identity Initial Payload",\r
+ "IKEv2 Identity Respond Payload",\r
+ "IKEv2 Certificate Payload",\r
+ "IKEv2 Certificate Request Payload",\r
+ "IKEv2 Auth Payload",\r
+ "IKEv2 Nonce Payload",\r
+ "IKEv2 Notify Payload",\r
+ "IKEv2 Delet Payload",\r
+ "IKEv2 Vendor Payload",\r
+ "IKEv2 Traffic Selector Initiator Payload",\r
+ "IKEv2 Traffic Selector Respond Payload",\r
+ "IKEv2 Encrypt Payload",\r
+ "IKEv2 Configuration Payload",\r
+ "IKEv2 Extensible Authentication Payload"\r
+};\r
+\r
/**\r
Print the IP address.\r
\r
}\r
\r
/**\r
- Print IKEv1 Current states.\r
+ Print IKE Current states.\r
\r
- @param[in] Previous The Previous state of IKEv1.\r
- @param[in] Current The current state of IKEv1.\r
+ @param[in] Previous The Previous state of IKE.\r
+ @param[in] Current The current state of IKE.\r
+ @param[in] IkeVersion The version of IKE.\r
\r
**/\r
VOID\r
-IpSecDumpState (\r
+IkeDumpState (\r
IN UINT32 Previous,\r
- IN UINT32 Current\r
+ IN UINT32 Current,\r
+ IN UINT8 IkeVersion\r
)\r
{\r
+ \r
if (Previous == Current) {\r
- DEBUG ((DEBUG_INFO, "\n****Current state is %a\n", mStateStr[Previous]));\r
+ if (IkeVersion == 1) {\r
+ DEBUG ((DEBUG_INFO, "\n****Current state is %a\n", mIkev1StateStr[Previous]));\r
+ } else if (IkeVersion == 2) {\r
+ DEBUG ((DEBUG_INFO, "\n****Current state is %a\n", mIkev2StateStr[Previous]));\r
+ }\r
+ \r
+ } else {\r
+ if (IkeVersion == 1) {\r
+ DEBUG ((DEBUG_INFO, "\n****Change state from %a to %a\n", mIkev1StateStr[Previous], mIkev1StateStr[Current]));\r
+ } else {\r
+ DEBUG ((DEBUG_INFO, "\n****Change state from %a to %a\n", mIkev2StateStr[Previous], mIkev2StateStr[Current]));\r
+ }\r
+ \r
+ }\r
+\r
+}\r
+\r
+/**\r
+ Print the IKE Packet.\r
+\r
+ @param[in] Packet Point to IKE packet to be printed.\r
+ @param[in] Direction Point to the IKE packet is inbound or outbound.\r
+ @param[in] IpVersion Specified IP Version.\r
+\r
+**/\r
+VOID\r
+IpSecDumpPacket (\r
+ IN IKE_PACKET *Packet,\r
+ IN EFI_IPSEC_TRAFFIC_DIR Direction,\r
+ IN UINT8 IpVersion\r
+ )\r
+{\r
+ CHAR8 *TypeStr;\r
+ UINTN PacketSize;\r
+ UINT64 InitCookie;\r
+ UINT64 RespCookie;\r
+\r
+ ASSERT (Packet != NULL);\r
+\r
+ PacketSize = Packet->PayloadTotalSize + sizeof (IKE_HEADER);\r
+ InitCookie = (Direction == EfiIPsecOutBound) ? HTONLL (Packet->Header->InitiatorCookie) : Packet->Header->InitiatorCookie;\r
+ RespCookie = (Direction == EfiIPsecOutBound) ? HTONLL (Packet->Header->ResponderCookie) : Packet->Header->ResponderCookie;\r
+\r
+ switch (Packet->Header->ExchangeType) {\r
+ case IKE_XCG_TYPE_IDENTITY_PROTECT:\r
+ TypeStr = mExchangeStr[0];\r
+ break;\r
+\r
+ case IKE_XCG_TYPE_INFO:\r
+ TypeStr = mExchangeStr[1];\r
+ break;\r
+\r
+ case IKE_XCG_TYPE_QM:\r
+ TypeStr = mExchangeStr[2];\r
+ break;\r
+ \r
+ case IKE_XCG_TYPE_SA_INIT:\r
+ TypeStr = mExchangeStr[3];\r
+ break;\r
+\r
+ case IKE_XCG_TYPE_AUTH:\r
+ TypeStr = mExchangeStr[4];\r
+ break;\r
+\r
+ case IKE_XCG_TYPE_CREATE_CHILD_SA:\r
+ TypeStr = mExchangeStr[5];\r
+ break;\r
+\r
+ case IKE_XCG_TYPE_INFO2:\r
+ TypeStr = mExchangeStr[6];\r
+ break;\r
+ \r
+ default:\r
+ TypeStr = mExchangeStr[7];\r
+ break;\r
+ }\r
+\r
+ if (Direction == EfiIPsecOutBound) {\r
+ DEBUG ((DEBUG_INFO, "\n>>>Sending %d bytes %a to ", PacketSize, TypeStr));\r
} else {\r
- DEBUG ((DEBUG_INFO, "\n****Change state from %a to %a\n", mStateStr[Previous], mStateStr[Current]));\r
+ DEBUG ((DEBUG_INFO, "\n>>>Receiving %d bytes %a from ", PacketSize, TypeStr));\r
}\r
\r
+ IpSecDumpAddress (DEBUG_INFO, &Packet->RemotePeerIp, IpVersion);\r
+\r
+ DEBUG ((DEBUG_INFO, " InitiatorCookie:0x%lx ResponderCookie:0x%lx\n", InitCookie, RespCookie));\r
+ DEBUG (\r
+ (DEBUG_INFO,\r
+ " Version: 0x%x Flags:0x%x ExchangeType:0x%x\n",\r
+ Packet->Header->Version,\r
+ Packet->Header->Flags,\r
+ Packet->Header->ExchangeType)\r
+ );\r
+ DEBUG (\r
+ (DEBUG_INFO,\r
+ " MessageId:0x%x NextPayload:0x%x\n",\r
+ Packet->Header->MessageId,\r
+ Packet->Header->NextPayload)\r
+ );\r
+\r
+}\r
+\r
+/**\r
+ Print the IKE Paylolad.\r
+\r
+ @param[in] IkePayload Point to payload to be printed.\r
+ @param[in] IkeVersion The specified version of IKE.\r
+ \r
+**/\r
+VOID\r
+IpSecDumpPayload (\r
+ IN IKE_PAYLOAD *IkePayload,\r
+ IN UINT8 IkeVersion\r
+ )\r
+{\r
+ if (IkeVersion == 1) {\r
+ DEBUG ((DEBUG_INFO, "+%a\n", mIkev1PayloadStr[IkePayload->PayloadType]));\r
+ } else {\r
+ //\r
+ // For IKEV2 the first Payload type is started from 33.\r
+ //\r
+ DEBUG ((DEBUG_INFO, "+%a\n", mIkev2PayloadStr[IkePayload->PayloadType - 33]));\r
+ }\r
+ IpSecDumpBuf ("Payload data", IkePayload->PayloadBuf, IkePayload->PayloadSize);\r
}\r
\r
/**\r