]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Icmp.h
MdeModulePkg: Fix issue about current Ip4Dxe implementation for DHCP DORA process
[mirror_edk2.git] / MdeModulePkg / Universal / Network / Ip4Dxe / Ip4Icmp.h
index 7999b2e306463ddbbb80946c11c91e9d2feefa0b..30199dced6ec66e142195145d31529394915ade7 100644 (file)
@@ -1,7 +1,8 @@
 /** @file\r
-\r
-Copyright (c) 2005 - 2006, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
+  Header file for ICMP protocol.\r
+  \r
+Copyright (c) 2005 - 2015, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
 http://opensource.org/licenses/bsd-license.php\r
@@ -9,78 +10,66 @@ http://opensource.org/licenses/bsd-license.php
 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 \r
-\r
-Module Name:\r
-\r
-  Ip4Icmp.h\r
-\r
-Abstract:\r
-\r
-  Header file for ICMP protocol.\r
-\r
-\r
 **/\r
 \r
 #ifndef __EFI_IP4_ICMP_H__\r
 #define __EFI_IP4_ICMP_H__\r
 \r
-enum {\r
   //\r
   // ICMP type definations\r
   //\r
-  ICMP_ECHO_REPLY           = 0,\r
-  ICMP_DEST_UNREACHABLE     = 3,\r
-  ICMP_SOURCE_QUENCH        = 4,\r
-  ICMP_REDIRECT             = 5,\r
-  ICMP_ECHO_REQUEST         = 8,\r
-  ICMP_TIME_EXCEEDED        = 11,\r
-  ICMP_PARAMETER_PROBLEM    = 12,\r
-  ICMP_TIMESTAMP            = 13,\r
-  ICMP_INFO_REQUEST         = 15,\r
-  ICMP_INFO_REPLY           = 16,\r
-  ICMP_TYPE_MAX             = ICMP_INFO_REPLY,\r
-\r
-  ICMP_DEFAULT_CODE         = 0,\r
+#define ICMP_ECHO_REPLY            0\r
+#define ICMP_DEST_UNREACHABLE      3\r
+#define ICMP_SOURCE_QUENCH         4\r
+#define ICMP_REDIRECT              5\r
+#define ICMP_ECHO_REQUEST          8\r
+#define ICMP_TIME_EXCEEDED         11\r
+#define ICMP_PARAMETER_PROBLEM     12\r
+#define ICMP_TIMESTAMP             13\r
+#define ICMP_INFO_REQUEST          15\r
+#define ICMP_INFO_REPLY            16\r
+#define ICMP_TYPE_MAX              ICMP_INFO_REPLY\r
+\r
+#define ICMP_DEFAULT_CODE          0\r
 \r
   //\r
   // ICMP code definations for ICMP_DEST_UNREACHABLE\r
   //\r
-  ICMP_NET_UNREACHABLE      = 0,\r
-  ICMP_HOST_UNREACHABLE     = 1,\r
-  ICMP_PROTO_UNREACHABLE    = 2,  // Host may generate\r
-  ICMP_PORT_UNREACHABLE     = 3,  // Host may generate\r
-  ICMP_FRAGMENT_FAILED      = 4,\r
-  ICMP_SOURCEROUTE_FAILED   = 5,  // Host may generate\r
-  ICMP_NET_UNKNOWN          = 6,\r
-  ICMP_HOST_UNKNOWN         = 7,\r
-  ICMP_SOURCE_ISOLATED      = 8,\r
-  ICMP_NET_PROHIBITED       = 9,\r
-  ICMP_HOST_PROHIBITED      = 10,\r
-  ICMP_NET_UNREACHABLE_TOS  = 11,\r
-  ICMP_HOST_UNREACHABLE_TOS = 12,\r
+#define ICMP_NET_UNREACHABLE       0\r
+#define ICMP_HOST_UNREACHABLE      1\r
+#define ICMP_PROTO_UNREACHABLE     2  // Host may generate\r
+#define ICMP_PORT_UNREACHABLE      3  // Host may generate\r
+#define ICMP_FRAGMENT_FAILED       4\r
+#define ICMP_SOURCEROUTE_FAILED    5  // Host may generate\r
+#define ICMP_NET_UNKNOWN           6\r
+#define ICMP_HOST_UNKNOWN          7\r
+#define ICMP_SOURCE_ISOLATED       8\r
+#define ICMP_NET_PROHIBITED        9\r
+#define ICMP_HOST_PROHIBITED       10\r
+#define ICMP_NET_UNREACHABLE_TOS   11\r
+#define ICMP_HOST_UNREACHABLE_TOS  12\r
 \r
   //\r
   // ICMP code definations for ICMP_TIME_EXCEEDED\r
   //\r
-  ICMP_TIMEOUT_IN_TRANSIT   = 0,\r
-  ICMp_TIMEOUT_REASSEMBLE   = 1,  // Host may generate\r
+#define ICMP_TIMEOUT_IN_TRANSIT    0\r
+#define ICMP_TIMEOUT_REASSEMBLE    1  // Host may generate\r
 \r
   //\r
   // ICMP code definations for ICMP_TIME_EXCEEDED\r
   //\r
-  ICMP_NET_REDIRECT         = 0,\r
-  ICMP_HOST_REDIRECT        = 1,\r
-  ICMP_NET_TOS_REDIRECT     = 2,\r
-  ICMP_HOST_TOS_REDIRECT    = 3,\r
+#define ICMP_NET_REDIRECT          0\r
+#define ICMP_HOST_REDIRECT         1\r
+#define ICMP_NET_TOS_REDIRECT      2\r
+#define ICMP_HOST_TOS_REDIRECT     3\r
 \r
   //\r
   // ICMP message classes, each class of ICMP message shares\r
   // a common message format. INVALID_MESSAGE is only a flag.\r
   //\r
-  ICMP_INVALID_MESSAGE      = 0,\r
-  ICMP_ERROR_MESSAGE        = 1,\r
-  ICMP_QUERY_MESSAGE        = 2\r
-};\r
+#define ICMP_INVALID_MESSAGE       0\r
+#define ICMP_ERROR_MESSAGE         1\r
+#define ICMP_QUERY_MESSAGE         2\r
 \r
 typedef struct {\r
   UINT8                   IcmpType;\r
@@ -90,10 +79,25 @@ typedef struct {
 extern IP4_ICMP_CLASS     mIcmpClass[];\r
 extern EFI_IP4_ICMP_TYPE  mIp4SupportedIcmp[];\r
 \r
+/**\r
+  Handle the ICMP packet. First validate the message format,\r
+  then according to the message types, process it as query or\r
+  error packet.\r
+\r
+  @param[in]  IpSb               The IP4 service that receivd the packet.\r
+  @param[in]  Head               The IP4 head of the ICMP query packet.\r
+  @param[in]  Packet             The content of the ICMP query with IP4 head\r
+                                 removed.\r
+\r
+  @retval EFI_INVALID_PARAMETER  The packet is malformated.\r
+  @retval EFI_SUCCESS            The ICMP message is successfully processed.\r
+  @retval Others                 Failed to handle ICMP packet.\r
+\r
+**/\r
 EFI_STATUS\r
 Ip4IcmpHandle (\r
-  IN IP4_SERVICE          *IpSb,\r
-  IN IP4_HEAD             *Header,\r
-  IN NET_BUF              *Packet\r
+  IN IP4_SERVICE            *IpSb,\r
+  IN IP4_HEAD               *Head,\r
+  IN NET_BUF                *Packet\r
   );\r
 #endif\r