/** @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 | |