1 /** @file
2   Header file for ICMPv6 protocol.
3 
4   Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
5 
6   SPDX-License-Identifier: BSD-2-Clause-Patent
7 
8 **/
9 
10 #ifndef __EFI_IP6_ICMP_H__
11 #define __EFI_IP6_ICMP_H__
12 
13 #define ICMP_V6_DEFAULT_CODE          0
14 
15 #define ICMP_V6_ERROR_MAX             127
16 
17 //
18 // ICMPv6 message classes, each class of ICMPv6 message shares
19 // a common message format. INVALID_MESSAGE is only a flag.
20 //
21 #define ICMP_V6_INVALID_MESSAGE       0
22 #define ICMP_V6_ERROR_MESSAGE         1
23 #define ICMP_V6_INFORMATION_MESSAGE   2
24 
25 
26 extern EFI_IP6_ICMP_TYPE  mIp6SupportedIcmp[];
27 
28 /**
29   Handle the ICMPv6 packet. First validate the message format,
30   then, according to the message types, process it as an informational packet or
31   an error packet.
32 
33   @param[in]  IpSb               The IP service that received the packet.
34   @param[in]  Head               The IP head of the ICMPv6 packet.
35   @param[in]  Packet             The content of the ICMPv6 packet with IP head
36                                  removed.
37 
38   @retval EFI_INVALID_PARAMETER  The packet is malformatted.
39   @retval EFI_SUCCESS            The ICMPv6 message successfully processed.
40   @retval Others                 Failed to handle the ICMPv6 packet.
41 
42 **/
43 EFI_STATUS
44 Ip6IcmpHandle (
45   IN IP6_SERVICE            *IpSb,
46   IN EFI_IP6_HEADER         *Head,
47   IN NET_BUF                *Packet
48   );
49 
50 /**
51   Check whether the DestinationAddress is an anycast address.
52 
53   @param[in]  IpSb               The IP service that received the packet.
54   @param[in]  DestinationAddress Points to the Destination Address of the packet.
55 
56   @retval TRUE                   The DestinationAddress is anycast address.
57   @retval FALSE                  The DestinationAddress is not anycast address.
58 
59 **/
60 BOOLEAN
61 Ip6IsAnycast (
62   IN IP6_SERVICE            *IpSb,
63   IN EFI_IPv6_ADDRESS       *DestinationAddress
64   );
65 
66 /**
67   Generate ICMPv6 error message and send it out to DestinationAddress. Currently
68   Destination Unreachable message, Time Exceeded message and Parameter Problem
69   message are supported.
70 
71   @param[in]  IpSb               The IP service that received the packet.
72   @param[in]  Packet             The packet which invoking ICMPv6 error.
73   @param[in]  SourceAddress      If not NULL, points to the SourceAddress.
74                                  Otherwise, the IP layer will select a source address
75                                  according to the DestinationAddress.
76   @param[in]  DestinationAddress Points to the Destination Address of the ICMPv6
77                                  error message.
78   @param[in]  Type               The type of the ICMPv6 message.
79   @param[in]  Code               The additional level of the ICMPv6 message.
80   @param[in]  Pointer            If not NULL, identifies the octet offset within
81                                  the invoking packet where the error was detected.
82 
83   @retval EFI_INVALID_PARAMETER  The packet is malformatted.
84   @retval EFI_OUT_OF_RESOURCES   There is no sufficient resource to complete the
85                                  operation.
86   @retval EFI_SUCCESS            The ICMPv6 message was successfully sent out.
87   @retval Others                 Failed to generate the ICMPv6 packet.
88 
89 **/
90 EFI_STATUS
91 Ip6SendIcmpError (
92   IN IP6_SERVICE            *IpSb,
93   IN NET_BUF                *Packet,
94   IN EFI_IPv6_ADDRESS       *SourceAddress       OPTIONAL,
95   IN EFI_IPv6_ADDRESS       *DestinationAddress,
96   IN UINT8                  Type,
97   IN UINT8                  Code,
98   IN UINT32                 *Pointer             OPTIONAL
99   );
100 
101 #endif
102 
103