67 lines
2.5 KiB
C
67 lines
2.5 KiB
C
|
/********************************************************************/
|
||
|
/** Microsoft LAN Manager **/
|
||
|
/** Copyright(c) Microsoft Corp., 1990-1992 **/
|
||
|
/********************************************************************/
|
||
|
/* :ts=4 */
|
||
|
|
||
|
//*** icmp.h - IP ICMP header.
|
||
|
//
|
||
|
// This module contains private ICMP definitions.
|
||
|
//
|
||
|
#pragma once
|
||
|
|
||
|
#define PROT_ICMP 1
|
||
|
|
||
|
#define ICMP_ECHO_RESP 0
|
||
|
#define ICMP_ECHO 8
|
||
|
#define ICMP_TIMESTAMP 13
|
||
|
#define ICMP_TIMESTAMP_RESP 14
|
||
|
|
||
|
#define MIN_ERRDATA_LENGTH 8 // Minimum amount of data we need.
|
||
|
|
||
|
// Structure of an ICMP header.
|
||
|
|
||
|
typedef struct ICMPHeader {
|
||
|
uchar ich_type; // Type of ICMP packet.
|
||
|
uchar ich_code; // Subcode of type.
|
||
|
ushort ich_xsum; // Checksum of packet.
|
||
|
ulong ich_param; // Type-specific parameter field.
|
||
|
} ICMPHeader;
|
||
|
|
||
|
typedef struct ICMPRouterAdHeader {
|
||
|
uchar irah_numaddrs; // Number of addresses
|
||
|
uchar irah_addrentrysize; // Address Entry Size
|
||
|
ushort irah_lifetime; // Lifetime
|
||
|
} ICMPRouterAdHeader;
|
||
|
|
||
|
typedef struct ICMPRouterAdAddrEntry {
|
||
|
IPAddr irae_addr; // Router Address
|
||
|
long irae_preference; // Preference Level
|
||
|
} ICMPRouterAdAddrEntry;
|
||
|
|
||
|
typedef struct ICMPSendCompleteCtxt {
|
||
|
uchar iscc_Type;
|
||
|
uchar *iscc_DataPtr;
|
||
|
} ICMPSendCompleteCtxt;
|
||
|
|
||
|
typedef void (*EchoRtn)(struct EchoControl *, IP_STATUS, void *, uint, IPOptInfo *);
|
||
|
|
||
|
typedef struct EchoControl {
|
||
|
struct EchoControl *ec_next; // Next control structure in list.
|
||
|
EchoRtn ec_rtn; // Pointer to routine to call when completing request.
|
||
|
LARGE_INTEGER ec_starttime; // time request was issued
|
||
|
void *ec_replybuf; // buffer to store replies
|
||
|
ulong ec_replybuflen; // size of reply buffer
|
||
|
ulong ec_to; // Timeout
|
||
|
IPAddr ec_src; // IPAddr of source
|
||
|
uint ec_seq; // Seq. # of this ping request. 32-bit
|
||
|
// to reduce collisons from wraparound.
|
||
|
uchar ec_active; // Set when packet has been sent
|
||
|
} EchoControl;
|
||
|
|
||
|
extern ICMPHeader *GetICMPBuffer(uint Size, PNDIS_BUFFER *Buffer);
|
||
|
extern void FreeICMPBuffer(PNDIS_BUFFER Buffer, uchar Type);
|
||
|
extern void ICMPSendComplete(ICMPSendCompleteCtxt *SCC, PNDIS_BUFFER BufferChain, IP_STATUS SendStatus);
|
||
|
extern uint AddrMaskReply;
|
||
|
|