1/** @file
2  Header file for ICMP protocol.
3
4Copyright (c) 2005 - 2015, Intel Corporation. All rights reserved.<BR>
5This program and the accompanying materials
6are licensed and made available under the terms and conditions of the BSD License
7which accompanies this distribution.  The full text of the license may be found at
8http://opensource.org/licenses/bsd-license.php
9
10THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11WITHOUT 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
74typedef struct {
75  UINT8                   IcmpType;
76  UINT8                   IcmpClass;
77} IP4_ICMP_CLASS;
78
79extern IP4_ICMP_CLASS     mIcmpClass[];
80extern 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**/
97EFI_STATUS
98Ip4IcmpHandle (
99  IN IP4_SERVICE            *IpSb,
100  IN IP4_HEAD               *Head,
101  IN NET_BUF                *Packet
102  );
103#endif
104