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