]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/Ip4Dxe/Ip4Icmp.h
NetworkPkg: Move Network library and drivers from MdeModulePkg to NetworkPkg
[mirror_edk2.git] / NetworkPkg / Ip4Dxe / Ip4Icmp.h
diff --git a/NetworkPkg/Ip4Dxe/Ip4Icmp.h b/NetworkPkg/Ip4Dxe/Ip4Icmp.h
new file mode 100644 (file)
index 0000000..922886a
--- /dev/null
@@ -0,0 +1,97 @@
+/** @file\r
+  Header file for ICMP protocol.\r
+\r
+Copyright (c) 2005 - 2018, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
+\r
+**/\r
+\r
+#ifndef __EFI_IP4_ICMP_H__\r
+#define __EFI_IP4_ICMP_H__\r
+\r
+  //\r
+  // ICMP type definations\r
+  //\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
+#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
+#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
+#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
+#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
+  UINT8                   IcmpClass;\r
+} IP4_ICMP_CLASS;\r
+\r
+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               *Head,\r
+  IN NET_BUF                *Packet\r
+  );\r
+#endif\r