2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS TCP/IP protocol driver
4 * FILE: include/receive.h
5 * PURPOSE: Internet Protocol receive prototypes
12 /* Number of seconds before destroying the IPDR */
13 #define MAX_TIMEOUT_COUNT 3
15 /* IP datagram fragment descriptor. Used to store IP datagram fragments */
16 typedef struct IP_FRAGMENT
{
17 LIST_ENTRY ListEntry
; /* Entry on list */
18 PNDIS_PACKET Packet
; /* NDIS packet containing fragment data */
19 BOOLEAN ReturnPacket
; /* States whether to call NdisReturnPackets */
20 UINT PacketOffset
; /* Offset into NDIS packet where data is */
21 UINT Offset
; /* Offset into datagram where this fragment is */
22 UINT Size
; /* Size of this fragment */
23 } IP_FRAGMENT
, *PIP_FRAGMENT
;
25 /* IP datagram hole descriptor. Used to reassemble IP datagrams */
26 typedef struct IPDATAGRAM_HOLE
{
27 LIST_ENTRY ListEntry
; /* Entry on list */
28 UINT First
; /* Offset of first octet of the hole */
29 UINT Last
; /* Offset of last octet of the hole */
30 } IPDATAGRAM_HOLE
, *PIPDATAGRAM_HOLE
;
32 /* IP datagram reassembly information */
33 typedef struct IPDATAGRAM_REASSEMBLY
{
34 LIST_ENTRY ListEntry
; /* Entry on list */
35 KSPIN_LOCK Lock
; /* Protecting spin lock */
36 UINT DataSize
; /* Size of datagram data area */
37 IP_ADDRESS SrcAddr
; /* Source address */
38 IP_ADDRESS DstAddr
; /* Destination address */
39 UCHAR Protocol
; /* Internet Protocol number */
40 USHORT Id
; /* Identification number */
41 IP_HEADER IPv4Header
; /* Pointer to IP header */
42 UINT HeaderSize
; /* Length of IP header */
43 LIST_ENTRY FragmentListHead
; /* IP fragment list */
44 LIST_ENTRY HoleListHead
; /* IP datagram hole list */
45 UINT TimeoutCount
; /* Timeout counter */
46 } IPDATAGRAM_REASSEMBLY
, *PIPDATAGRAM_REASSEMBLY
;
49 extern LIST_ENTRY ReassemblyListHead
;
50 extern KSPIN_LOCK ReassemblyListLock
;
51 extern NPAGED_LOOKASIDE_LIST IPDRList
;
52 extern NPAGED_LOOKASIDE_LIST IPFragmentList
;
53 extern NPAGED_LOOKASIDE_LIST IPHoleList
;
56 VOID
IPFreeReassemblyList(
59 VOID
IPDatagramReassemblyTimeout(