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