7a56e2a847f5a37b04a5733c2500dce0da0f86b9
[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 <net/ndis.h>
27 #include <net/tdikrnl.h>
28 #include <net/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
67 #ifdef i386
68
69 /* DWORD network to host byte order conversion for i386 */
70 #define DN2H(dw) \
71 ((((dw) & 0xFF000000L) >> 24) | \
72 (((dw) & 0x00FF0000L) >> 8) | \
73 (((dw) & 0x0000FF00L) << 8) | \
74 (((dw) & 0x000000FFL) << 24))
75
76 /* DWORD host to network byte order conversion for i386 */
77 #define DH2N(dw) \
78 ((((dw) & 0xFF000000L) >> 24) | \
79 (((dw) & 0x00FF0000L) >> 8) | \
80 (((dw) & 0x0000FF00L) << 8) | \
81 (((dw) & 0x000000FFL) << 24))
82
83 /* WORD network to host order conversion for i386 */
84 #define WN2H(w) \
85 ((((w) & 0xFF00) >> 8) | \
86 (((w) & 0x00FF) << 8))
87
88 /* WORD host to network byte order conversion for i386 */
89 #define WH2N(w) \
90 ((((w) & 0xFF00) >> 8) | \
91 (((w) & 0x00FF) << 8))
92
93 #else /* i386 */
94
95 /* DWORD network to host byte order conversion for other architectures */
96 #define DN2H(dw) \
97 (dw)
98
99 /* DWORD host to network byte order conversion for other architectures */
100 #define DH2N(dw) \
101 (dw)
102
103 /* WORD network to host order conversion for other architectures */
104 #define WN2H(w) \
105 (w)
106
107 /* WORD host to network byte order conversion for other architectures */
108 #define WH2N(w) \
109 (w)
110
111 #endif /* i386 */
112
113
114 /* Global variable */
115 extern PDEVICE_OBJECT TCPDeviceObject;
116 extern PDEVICE_OBJECT UDPDeviceObject;
117 extern PDEVICE_OBJECT IPDeviceObject;
118 extern PDEVICE_OBJECT RawIPDeviceObject;
119 extern LIST_ENTRY InterfaceListHead;
120 extern KSPIN_LOCK InterfaceListLock;
121 extern LIST_ENTRY AddressFileListHead;
122 extern KSPIN_LOCK AddressFileListLock;
123 extern NDIS_HANDLE GlobalPacketPool;
124 extern NDIS_HANDLE GlobalBufferPool;
125 extern TDIEntityID *EntityList;
126 extern ULONG EntityCount;
127 extern UDP_STATISTICS UDPStats;
128
129 #endif /* __TCPIP_H */
130
131 /* EOF */