windows-nt/Source/XPSP1/NT/net/tcpip/tpipv6/tcpip6/inc/icmp.h

83 lines
3 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil -*- (for GNU Emacs)
//
// Copyright (c) 1985-2000 Microsoft Corporation
//
// This file is part of the Microsoft Research IPv6 Network Protocol Stack.
// You should have received a copy of the Microsoft End-User License Agreement
// for this software along with this release; see the file "license.txt".
// If not, please see http://www.research.microsoft.com/msripv6/license.htm,
// or write to Microsoft Research, One Microsoft Way, Redmond, WA 98052-6399.
//
// Abstract:
//
// Internet Control Message Protocol for IPv6 definitions.
// See RFC 1885 and RFC 1970 for details.
//
#ifndef ICMP_INCLUDED
#define ICMP_INCLUDED 1
#include "icmp6.h" // Protocol definitions & constants.
//
// Stuff to handle in-kernel ping functionality.
//
typedef void (*EchoRtn)(void *, IP_STATUS,
const IPv6Addr *, uint, void *, uint);
typedef struct EchoControl {
struct EchoControl *Next; // Next control structure in list.
ulong TimeoutTimer; // Timeout value (in IPv6Timer ticks).
EchoRtn CompleteRoutine; // Routine to call when completing request.
ulong Seq; // Sequence number of this ping request.
LARGE_INTEGER WhenIssued; // Timestamp (in system timer ticks since boot).
void *ReplyBuf; // Buffer to store replies.
ulong ReplyBufLen; // Size of reply buffer.
IPAddr V4Dest; // IPv4 destination (or INADDR_ANY).
} EchoControl;
extern void
ICMPv6EchoRequest(void *InputBuffer, uint InputBufferLength,
EchoControl *ControlBlock, EchoRtn Callback);
extern NTSTATUS
ICMPv6EchoComplete(EchoControl *ControlBlock,
IP_STATUS Status, const IPv6Addr *Address, uint ScopeId,
void *Data, uint DataSize, ULONG_PTR *BytesReturned);
extern void
ICMPv6ProcessTunnelError(IPAddr V4Dest,
IPv6Addr *V4Src, uint ScopeId,
IP_STATUS Status);
//
// General prototypes.
//
extern void
ICMPv6Send(
RouteCacheEntry *RCE, // RCE to send on
PNDIS_PACKET Packet, // Packet to send.
uint IPv6Offset, // Offset to IPv6 header in packet.
uint ICMPv6Offset, // Offset to ICMPv6 header in packet.
IPv6Header UNALIGNED *IP, // Pointer to IPv6 header.
uint PayloadLength, // Length of IPv6 payload in bytes.
ICMPv6Header UNALIGNED *ICMP); // Pointer to ICMPv6 header.
extern void
ICMPv6SendError(
IPv6Packet *Packet, // Offending/invoking packet.
uchar ICMPType, // ICMP error type.
uchar ICMPCode, // ICMP error code pertaining to type.
ulong ICMPPointer, // ICMP pointer indicating a packet offset.
uint NextHeader, // Type of header following in Packet.
int MulticastOverride); // Allow replies to multicast packets?
extern int
ICMPv6RateLimit(RouteCacheEntry *RCE);
#endif // ICMP_INCLUDED