Removed remaining kernel imports from ip lib.
[reactos.git] / reactos / drivers / net / tcpip / include / tcpip.h
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS TCP/IP protocol driver
4 * FILE: include/tcpip.h
5 * PURPOSE: TCP/IP protocol driver definitions
6 * NOTES: Spin lock acquire order:
7 * - Net table list lock
8 * - Interface lock
9 * - Interface list lock
10 * - Prefix list lock
11 * - Neighbor cache lock
12 * - Route cache lock
13 */
14 #ifndef __TCPIP_H
15 #define __TCPIP_H
16
17 #ifdef _MSC_VER
18 #include <basetsd.h>
19 #include <ntddk.h>
20 #include <windef.h>
21 #include <ndis.h>
22 #include <tdikrnl.h>
23 #include <tdiinfo.h>
24 #else
25 #include <ddk/ntddk.h>
26 #include <ddk/ndis.h>
27 #include <ddk/tdikrnl.h>
28 #include <ddk/tdiinfo.h>
29 #endif
30
31 #include <debug.h>
32
33
34 /* Define _NTTEST_ to make test version. Device names are prefixed with
35 'NT' to allow the driver to run side by side with MS TCP/IP driver */
36 //#define _NTTEST_
37
38 /* FIXME: The following should be moved to ntddk.h or tdi headers */
39 #ifndef _MSC_VER
40
41 #ifndef IO_NETWORK_INCREMENT
42 #define IO_NETWORK_INCREMENT 2
43 #endif
44
45 #endif
46
47 #ifdef _MSC_VER
48 /* EXPORTED is already defined ddk/defines.h */
49 #define EXPORTED __declspec(dllexport)
50
51 #endif
52
53 #include <titypes.h>
54 #include <ticonsts.h>
55 #include <udp.h>
56
57
58 /* Macros */
59
60 #define MIN(value1, value2) \
61 ((value1 < value2)? value1 : value2)
62
63 #define MAX(value1, value2) \
64 ((value1 > value2)? value1 : value2)
65
66 #define NDIS_BUFFER_TAG FOURCC('n','b','u','f')
67 #define NDIS_PACKET_TAG FOURCC('n','p','k','t')
68
69 #ifdef i386
70
71 /* DWORD network to host byte order conversion for i386 */
72 #define DN2H(dw) \
73 ((((dw) & 0xFF000000L) >> 24) | \
74 (((dw) & 0x00FF0000L) >> 8) | \
75 (((dw) & 0x0000FF00L) << 8) | \
76 (((dw) & 0x000000FFL) << 24))
77
78 /* DWORD host to network byte order conversion for i386 */
79 #define DH2N(dw) \
80 ((((dw) & 0xFF000000L) >> 24) | \
81 (((dw) & 0x00FF0000L) >> 8) | \
82 (((dw) & 0x0000FF00L) << 8) | \
83 (((dw) & 0x000000FFL) << 24))
84
85 /* WORD network to host order conversion for i386 */
86 #define WN2H(w) \
87 ((((w) & 0xFF00) >> 8) | \
88 (((w) & 0x00FF) << 8))
89
90 /* WORD host to network byte order conversion for i386 */
91 #define WH2N(w) \
92 ((((w) & 0xFF00) >> 8) | \
93 (((w) & 0x00FF) << 8))
94
95 #else /* i386 */
96
97 /* DWORD network to host byte order conversion for other architectures */
98 #define DN2H(dw) \
99 (dw)
100
101 /* DWORD host to network byte order conversion for other architectures */
102 #define DH2N(dw) \
103 (dw)
104
105 /* WORD network to host order conversion for other architectures */
106 #define WN2H(w) \
107 (w)
108
109 /* WORD host to network byte order conversion for other architectures */
110 #define WH2N(w) \
111 (w)
112
113 #endif /* i386 */
114
115 typedef TDI_STATUS (*InfoRequest_f)( UINT InfoClass,
116 UINT InfoType,
117 UINT InfoId,
118 PVOID Context,
119 TDIEntityID *id,
120 PNDIS_BUFFER Buffer,
121 PUINT BufferSize );
122
123 typedef TDI_STATUS (*InfoSet_f)( UINT InfoClass,
124 UINT InfoType,
125 UINT InfoId,
126 PVOID Context,
127 TDIEntityID *id,
128 PCHAR Buffer,
129 UINT BufferSize );
130
131 /* Sufficient information to manage the entity list */
132 typedef struct {
133 UINT tei_entity;
134 UINT tei_instance;
135 PVOID context;
136 InfoRequest_f info_req;
137 InfoSet_f info_set;
138 } TDIEntityInfo;
139
140 #ifndef htons
141 #define htons(x) (((x) << 16) | (((x) >> 8) & 0xff))
142 #endif
143
144 /* Global variable */
145 extern PDEVICE_OBJECT TCPDeviceObject;
146 extern PDEVICE_OBJECT UDPDeviceObject;
147 extern PDEVICE_OBJECT IPDeviceObject;
148 extern PDEVICE_OBJECT RawIPDeviceObject;
149 extern LIST_ENTRY InterfaceListHead;
150 extern KSPIN_LOCK InterfaceListLock;
151 extern LIST_ENTRY AddressFileListHead;
152 extern KSPIN_LOCK AddressFileListLock;
153 extern NDIS_HANDLE GlobalPacketPool;
154 extern NDIS_HANDLE GlobalBufferPool;
155 extern KSPIN_LOCK EntityListLock;
156 extern TDIEntityInfo *EntityList;
157 extern ULONG EntityCount;
158 extern ULONG EntityMax;
159 extern UDP_STATISTICS UDPStats;
160
161 extern NTSTATUS TiGetProtocolNumber( PUNICODE_STRING FileName,
162 PULONG Protocol );
163
164 #endif /* __TCPIP_H */
165
166 /* EOF */