]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Icmp.h
MdeModulePkg: Update Ip4Dxe driver to support Ip4Config2 protocol,
[mirror_edk2.git] / MdeModulePkg / Universal / Network / Ip4Dxe / Ip4Icmp.h
1 /** @file
2 Header file for ICMP protocol.
3
4 Copyright (c) 2005 - 2015, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13 **/
14
15 #ifndef __EFI_IP4_ICMP_H__
16 #define __EFI_IP4_ICMP_H__
17
18 //
19 // ICMP type definations
20 //
21 #define ICMP_ECHO_REPLY 0
22 #define ICMP_DEST_UNREACHABLE 3
23 #define ICMP_SOURCE_QUENCH 4
24 #define ICMP_REDIRECT 5
25 #define ICMP_ECHO_REQUEST 8
26 #define ICMP_TIME_EXCEEDED 11
27 #define ICMP_PARAMETER_PROBLEM 12
28 #define ICMP_TIMESTAMP 13
29 #define ICMP_INFO_REQUEST 15
30 #define ICMP_INFO_REPLY 16
31 #define ICMP_TYPE_MAX ICMP_INFO_REPLY
32
33 #define ICMP_DEFAULT_CODE 0
34
35 //
36 // ICMP code definations for ICMP_DEST_UNREACHABLE
37 //
38 #define ICMP_NET_UNREACHABLE 0
39 #define ICMP_HOST_UNREACHABLE 1
40 #define ICMP_PROTO_UNREACHABLE 2 // Host may generate
41 #define ICMP_PORT_UNREACHABLE 3 // Host may generate
42 #define ICMP_FRAGMENT_FAILED 4
43 #define ICMP_SOURCEROUTE_FAILED 5 // Host may generate
44 #define ICMP_NET_UNKNOWN 6
45 #define ICMP_HOST_UNKNOWN 7
46 #define ICMP_SOURCE_ISOLATED 8
47 #define ICMP_NET_PROHIBITED 9
48 #define ICMP_HOST_PROHIBITED 10
49 #define ICMP_NET_UNREACHABLE_TOS 11
50 #define ICMP_HOST_UNREACHABLE_TOS 12
51
52 //
53 // ICMP code definations for ICMP_TIME_EXCEEDED
54 //
55 #define ICMP_TIMEOUT_IN_TRANSIT 0
56 #define ICMP_TIMEOUT_REASSEMBLE 1 // Host may generate
57
58 //
59 // ICMP code definations for ICMP_TIME_EXCEEDED
60 //
61 #define ICMP_NET_REDIRECT 0
62 #define ICMP_HOST_REDIRECT 1
63 #define ICMP_NET_TOS_REDIRECT 2
64 #define ICMP_HOST_TOS_REDIRECT 3
65
66 //
67 // ICMP message classes, each class of ICMP message shares
68 // a common message format. INVALID_MESSAGE is only a flag.
69 //
70 #define ICMP_INVALID_MESSAGE 0
71 #define ICMP_ERROR_MESSAGE 1
72 #define ICMP_QUERY_MESSAGE 2
73
74 typedef struct {
75 UINT8 IcmpType;
76 UINT8 IcmpClass;
77 } IP4_ICMP_CLASS;
78
79 extern IP4_ICMP_CLASS mIcmpClass[];
80 extern EFI_IP4_ICMP_TYPE mIp4SupportedIcmp[];
81
82 /**
83 Handle the ICMP packet. First validate the message format,
84 then according to the message types, process it as query or
85 error packet.
86
87 @param[in] IpSb The IP4 service that receivd the packet.
88 @param[in] Head The IP4 head of the ICMP query packet.
89 @param[in] Packet The content of the ICMP query with IP4 head
90 removed.
91
92 @retval EFI_INVALID_PARAMETER The packet is malformated.
93 @retval EFI_SUCCESS The ICMP message is successfully processed.
94 @retval Others Failed to handle ICMP packet.
95
96 **/
97 EFI_STATUS
98 Ip4IcmpHandle (
99 IN IP4_SERVICE *IpSb,
100 IN IP4_HEAD *Head,
101 IN NET_BUF *Packet
102 );
103 #endif