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
104