2000-08-02 00:24:26 +00:00
|
|
|
/*
|
|
|
|
* COPYRIGHT: See COPYING in the top level directory
|
|
|
|
* PROJECT: ReactOS TCP/IP protocol driver
|
|
|
|
* FILE: include/receive.h
|
|
|
|
* PURPOSE: Internet Protocol receive prototypes
|
|
|
|
*/
|
2010-02-26 11:43:19 +00:00
|
|
|
|
|
|
|
#pragma once
|
2000-08-02 00:24:26 +00:00
|
|
|
|
|
|
|
#include <ip.h>
|
|
|
|
|
2011-10-17 01:37:56 +00:00
|
|
|
/* Number of seconds before destroying the IPDR */
|
2011-12-05 03:14:50 +00:00
|
|
|
#define MAX_TIMEOUT_COUNT 3
|
2000-08-02 00:24:26 +00:00
|
|
|
|
|
|
|
/* IP datagram fragment descriptor. Used to store IP datagram fragments */
|
|
|
|
typedef struct IP_FRAGMENT {
|
|
|
|
LIST_ENTRY ListEntry; /* Entry on list */
|
2011-12-04 22:31:49 +00:00
|
|
|
PNDIS_PACKET Packet; /* NDIS packet containing fragment data */
|
2011-12-05 03:14:50 +00:00
|
|
|
BOOLEAN ReturnPacket; /* States whether to call NdisReturnPackets */
|
2011-12-04 22:31:49 +00:00
|
|
|
UINT PacketOffset; /* Offset into NDIS packet where data is */
|
2000-08-02 00:24:26 +00:00
|
|
|
UINT Offset; /* Offset into datagram where this fragment is */
|
|
|
|
UINT Size; /* Size of this fragment */
|
|
|
|
} IP_FRAGMENT, *PIP_FRAGMENT;
|
|
|
|
|
|
|
|
/* IP datagram hole descriptor. Used to reassemble IP datagrams */
|
|
|
|
typedef struct IPDATAGRAM_HOLE {
|
|
|
|
LIST_ENTRY ListEntry; /* Entry on list */
|
|
|
|
UINT First; /* Offset of first octet of the hole */
|
|
|
|
UINT Last; /* Offset of last octet of the hole */
|
|
|
|
} IPDATAGRAM_HOLE, *PIPDATAGRAM_HOLE;
|
|
|
|
|
|
|
|
/* IP datagram reassembly information */
|
|
|
|
typedef struct IPDATAGRAM_REASSEMBLY {
|
|
|
|
LIST_ENTRY ListEntry; /* Entry on list */
|
|
|
|
KSPIN_LOCK Lock; /* Protecting spin lock */
|
|
|
|
UINT DataSize; /* Size of datagram data area */
|
|
|
|
IP_ADDRESS SrcAddr; /* Source address */
|
|
|
|
IP_ADDRESS DstAddr; /* Destination address */
|
|
|
|
UCHAR Protocol; /* Internet Protocol number */
|
|
|
|
USHORT Id; /* Identification number */
|
2011-12-05 03:51:01 +00:00
|
|
|
PIP_HEADER IPv4Header; /* Pointer to IP header */
|
2000-08-02 00:24:26 +00:00
|
|
|
UINT HeaderSize; /* Length of IP header */
|
|
|
|
LIST_ENTRY FragmentListHead; /* IP fragment list */
|
|
|
|
LIST_ENTRY HoleListHead; /* IP datagram hole list */
|
2009-09-20 21:07:45 +00:00
|
|
|
UINT TimeoutCount; /* Timeout counter */
|
2000-08-02 00:24:26 +00:00
|
|
|
} IPDATAGRAM_REASSEMBLY, *PIPDATAGRAM_REASSEMBLY;
|
|
|
|
|
|
|
|
|
|
|
|
extern LIST_ENTRY ReassemblyListHead;
|
|
|
|
extern KSPIN_LOCK ReassemblyListLock;
|
2001-07-04 20:40:24 +00:00
|
|
|
extern NPAGED_LOOKASIDE_LIST IPDRList;
|
|
|
|
extern NPAGED_LOOKASIDE_LIST IPFragmentList;
|
|
|
|
extern NPAGED_LOOKASIDE_LIST IPHoleList;
|
2000-08-02 00:24:26 +00:00
|
|
|
|
|
|
|
|
|
|
|
VOID IPFreeReassemblyList(
|
|
|
|
VOID);
|
|
|
|
|
|
|
|
VOID IPDatagramReassemblyTimeout(
|
|
|
|
VOID);
|
|
|
|
|
|
|
|
VOID IPReceive(
|
2004-07-18 22:03:49 +00:00
|
|
|
PIP_INTERFACE IF,
|
2000-08-02 00:24:26 +00:00
|
|
|
PIP_PACKET IPPacket);
|
|
|
|
|
|
|
|
/* EOF */
|