1 /* 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 6 */ 7 8 #pragma once 9 10 #include <ip.h> 11 12 /* Number of seconds before destroying the IPDR */ 13 #define MAX_TIMEOUT_COUNT 3 14 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; 24 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; 31 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 PIP_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; 47 48 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; 54 55 56 VOID IPFreeReassemblyList( 57 VOID); 58 59 VOID IPDatagramReassemblyTimeout( 60 VOID); 61 62 VOID IPReceive( 63 PIP_INTERFACE IF, 64 PIP_PACKET IPPacket); 65 66 /* EOF */ 67