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