Reactos
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 */
16typedef 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 */
26typedef 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 */
33typedef 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
49extern LIST_ENTRY ReassemblyListHead;
50extern KSPIN_LOCK ReassemblyListLock;
51extern NPAGED_LOOKASIDE_LIST IPDRList;
52extern NPAGED_LOOKASIDE_LIST IPFragmentList;
53extern NPAGED_LOOKASIDE_LIST IPHoleList;
54
55
56VOID IPFreeReassemblyList(
57 VOID);
58
59VOID IPDatagramReassemblyTimeout(
60 VOID);
61
62VOID IPReceive(
63 PIP_INTERFACE IF,
64 PIP_PACKET IPPacket);
65
66/* EOF */