4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Header file for ICMP protocol.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCopyright (c) 2005 - 2009, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncThis program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncare licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncwhich accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynchttp://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef __EFI_IP4_ICMP_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define __EFI_IP4_ICMP_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // ICMP type definations
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_ECHO_REPLY 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_DEST_UNREACHABLE 3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_SOURCE_QUENCH 4
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_REDIRECT 5
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_ECHO_REQUEST 8
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_TIME_EXCEEDED 11
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_PARAMETER_PROBLEM 12
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_TIMESTAMP 13
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_INFO_REQUEST 15
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_INFO_REPLY 16
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_TYPE_MAX ICMP_INFO_REPLY
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_DEFAULT_CODE 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // ICMP code definations for ICMP_DEST_UNREACHABLE
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_NET_UNREACHABLE 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_HOST_UNREACHABLE 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_PROTO_UNREACHABLE 2 // Host may generate
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_PORT_UNREACHABLE 3 // Host may generate
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_FRAGMENT_FAILED 4
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_SOURCEROUTE_FAILED 5 // Host may generate
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_NET_UNKNOWN 6
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_HOST_UNKNOWN 7
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_SOURCE_ISOLATED 8
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_NET_PROHIBITED 9
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_HOST_PROHIBITED 10
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_NET_UNREACHABLE_TOS 11
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_HOST_UNREACHABLE_TOS 12
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // ICMP code definations for ICMP_TIME_EXCEEDED
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_TIMEOUT_IN_TRANSIT 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_TIMEOUT_REASSEMBLE 1 // Host may generate
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // ICMP code definations for ICMP_TIME_EXCEEDED
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_NET_REDIRECT 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_HOST_REDIRECT 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_NET_TOS_REDIRECT 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_HOST_TOS_REDIRECT 3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // ICMP message classes, each class of ICMP message shares
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // a common message format. INVALID_MESSAGE is only a flag.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_INVALID_MESSAGE 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_ERROR_MESSAGE 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ICMP_QUERY_MESSAGE 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 IcmpType;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 IcmpClass;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} IP4_ICMP_CLASS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern IP4_ICMP_CLASS mIcmpClass[];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern EFI_IP4_ICMP_TYPE mIp4SupportedIcmp[];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Handle the ICMP packet. First validate the message format,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync then according to the message types, process it as query or
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync error packet.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] IpSb The IP service that receivd the packet
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Head The IP head of the ICMP query packet
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Packet The content of the ICMP query with IP head
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync removed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER The packet is malformated.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The ICMP message is successfully processed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval Others Failed to handle ICMP packet.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIp4IcmpHandle (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN IP4_SERVICE *IpSb,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN IP4_HEAD *Head,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN NET_BUF *Packet
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif