[TCPIP]
[reactos.git] / reactos / drivers / network / tcpip / include / receive.h
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 5
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 UINT PacketOffset; /* Offset into NDIS packet where data is */
20 UINT Offset; /* Offset into datagram where this fragment is */
21 UINT Size; /* Size of this fragment */
22 } IP_FRAGMENT, *PIP_FRAGMENT;
23
24 /* IP datagram hole descriptor. Used to reassemble IP datagrams */
25 typedef struct IPDATAGRAM_HOLE {
26 LIST_ENTRY ListEntry; /* Entry on list */
27 UINT First; /* Offset of first octet of the hole */
28 UINT Last; /* Offset of last octet of the hole */
29 } IPDATAGRAM_HOLE, *PIPDATAGRAM_HOLE;
30
31 /* IP datagram reassembly information */
32 typedef struct IPDATAGRAM_REASSEMBLY {
33 LIST_ENTRY ListEntry; /* Entry on list */
34 KSPIN_LOCK Lock; /* Protecting spin lock */
35 UINT DataSize; /* Size of datagram data area */
36 IP_ADDRESS SrcAddr; /* Source address */
37 IP_ADDRESS DstAddr; /* Destination address */
38 UCHAR Protocol; /* Internet Protocol number */
39 USHORT Id; /* Identification number */
40 IP_HEADER IPv4Header; /* Pointer to IP header */
41 UINT HeaderSize; /* Length of IP header */
42 LIST_ENTRY FragmentListHead; /* IP fragment list */
43 LIST_ENTRY HoleListHead; /* IP datagram hole list */
44 UINT TimeoutCount; /* Timeout counter */
45 } IPDATAGRAM_REASSEMBLY, *PIPDATAGRAM_REASSEMBLY;
46
47
48 extern LIST_ENTRY ReassemblyListHead;
49 extern KSPIN_LOCK ReassemblyListLock;
50 extern NPAGED_LOOKASIDE_LIST IPDRList;
51 extern NPAGED_LOOKASIDE_LIST IPFragmentList;
52 extern NPAGED_LOOKASIDE_LIST IPHoleList;
53
54
55 VOID IPFreeReassemblyList(
56 VOID);
57
58 VOID IPDatagramReassemblyTimeout(
59 VOID);
60
61 VOID IPReceive(
62 PIP_INTERFACE IF,
63 PIP_PACKET IPPacket);
64
65 /* EOF */