ReactOS 0.4.16-dev-340-g0540c21
ip.h
Go to the documentation of this file.
1/*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS TCP/IP protocol driver
4 * FILE: include/ip.h
5 * PURPOSE: Internet Protocol related definitions
6 */
7
8#pragma once
9
11
12#define FOURCC(a,b,c,d) (((a)<<24)|((b)<<16)|((c)<<8)|(d))
13
14/* Raw IPv4 style address */
17
18/* Raw IPv6 style address */
21
22/* IP style address */
23typedef struct IP_ADDRESS {
24 UCHAR Type; /* Type of IP address */
25 union {
26 IPv4_RAW_ADDRESS IPv4Address;/* IPv4 address (in network byte order) */
27 IPv6_RAW_ADDRESS IPv6Address;/* IPv6 address (in network byte order) */
30
31/* IP type constants */
32#define IP_ADDRESS_V4 0x04 /* IPv4 style address */
33#define IP_ADDRESS_V6 0x06 /* IPv6 style address */
34
35
36/* IPv4 header format */
37typedef struct IPv4_HEADER {
38 UCHAR VerIHL; /* 4-bit version, 4-bit Internet Header Length */
39 UCHAR Tos; /* Type of Service */
40 USHORT TotalLength; /* Total Length */
41 USHORT Id; /* Identification */
42 USHORT FlagsFragOfs; /* 3-bit Flags, 13-bit Fragment Offset */
43 UCHAR Ttl; /* Time to Live */
44 UCHAR Protocol; /* Protocol */
45 USHORT Checksum; /* Header Checksum */
46 IPv4_RAW_ADDRESS SrcAddr; /* Source Address */
47 IPv4_RAW_ADDRESS DstAddr; /* Destination Address */
49
50/* IPv6 header format */
51typedef struct IPv6_HEADER {
52 ULONG VTF; /* Version, Traffic Class, Flow Label */
54 UCHAR NextHeader; /* Same as Protocol in IPv4 */
55 UCHAR HopLimit; /* Same as Ttl in IPv4 */
59
60typedef union _IP_HEADER {
64
65#define IPv4_FRAGOFS_MASK 0x1FFF /* Fragment offset mask (host byte order) */
66#define IPv4_MF_MASK 0x2000 /* More fragments (host byte order) */
67#define IPv4_DF_MASK 0x4000 /* Don't fragment (host byte order) */
68#define IPv4_MAX_HEADER_SIZE 60
69
70/* Packet completion handler prototype */
73 PNDIS_PACKET NdisPacket,
74 NDIS_STATUS NdisStatus);
75
76/* Structure for an IP packet */
77typedef struct _IP_PACKET {
78 OBJECT_FREE_ROUTINE Free; /* Routine used to free resources for the object */
79 UCHAR Type; /* Type of IP packet (see IP_ADDRESS_xx above) */
80 UCHAR Flags; /* Flags for packet (see IP_PACKET_FLAG_xx below)*/
81 BOOLEAN MappedHeader; /* States whether Header is from an MDL or allocated from pool */
82 BOOLEAN ReturnPacket; /* States whether NdisPacket should be passed to NdisReturnPackets */
83 PVOID Header; /* Pointer to IP header for this packet */
84 UINT HeaderSize; /* Size of IP header */
85 PVOID Data; /* Current pointer into packet data */
86 UINT TotalSize; /* Total amount of data in packet (IP header and data) */
87 UINT Position; /* Current logical offset into packet */
88 PNDIS_PACKET NdisPacket; /* Pointer to NDIS packet */
89 IP_ADDRESS SrcAddr; /* Source address */
90 IP_ADDRESS DstAddr; /* Destination address */
92
93#define IP_PACKET_FLAG_RAW 0x01 /* Raw IP packet */
94
95
96/* Packet context */
97typedef struct _PACKET_CONTEXT {
98 PACKET_COMPLETION_ROUTINE DLComplete; /* Data link level completion handler
99 * Also used to link to next packet
100 * in a queue */
101 PVOID Context; /* Context information for handler */
102 UINT PacketType; /* Type of packet */
104
105/* The ProtocolReserved field is structured as a PACKET_CONTEXT */
106#define PC(Packet) ((PPACKET_CONTEXT)(&Packet->ProtocolReserved))
107
108/* Values for address type -- also the interface flags */
109/* These values are mean to overlap meaningfully with the BSD ones */
110#define ADE_UNICAST 0x01
111#define ADE_BROADCAST 0x02
112#define ADE_ADDRMASK 0x04
113#define ADE_POINTOPOINT 0x10
114#define ADE_MULTICAST 0x8000
115
116/* There is one NTE for each source (unicast) address assigned to an interface */
117/* Link layer transmit prototype */
120 PNDIS_PACKET NdisPacket,
121 UINT Offset,
122 PVOID LinkAddress,
123 USHORT Type);
124
125/* Link layer to IP binding information */
126typedef struct _LLIP_BIND_INFO {
127 PVOID Context; /* Pointer to link layer context information */
128 UINT HeaderSize; /* Size of link level header */
129 UINT MinFrameSize; /* Minimum frame size in bytes */
130 PUCHAR Address; /* Pointer to interface address */
131 UINT AddressLength; /* Length of address in bytes */
132 LL_TRANSMIT_ROUTINE Transmit; /* Transmit function for this interface */
134
135typedef struct _SEND_RECV_STATS {
148
149/* Information about an IP interface */
150typedef struct _IP_INTERFACE {
151 LIST_ENTRY ListEntry; /* Entry on list */
152 OBJECT_FREE_ROUTINE Free; /* Routine used to free resources used by the object */
153 KSPIN_LOCK Lock; /* Spin lock for this object */
154 PVOID Context; /* Pointer to link layer context information */
155 UINT HeaderSize; /* Size of link level header */
156 UINT MinFrameSize; /* Minimum frame size in bytes */
157 UINT MTU; /* Maximum transmission unit */
158 UINT Speed; /* Link speed */
159 IP_ADDRESS Unicast; /* Unicast address */
160 IP_ADDRESS PointToPoint; /* Point to point address */
161 IP_ADDRESS Netmask; /* Netmask */
162 IP_ADDRESS Broadcast; /* Broadcast */
163 UNICODE_STRING Name; /* Adapter name (GUID) */
164 UNICODE_STRING Description; /* Adapter description (Human readable) */
165 PUCHAR Address; /* Pointer to interface address */
166 UINT AddressLength; /* Length of address in bytes */
167 UINT Index; /* Index of adapter (used to add ip addr) */
168 LL_TRANSMIT_ROUTINE Transmit; /* Pointer to transmit function */
169 PVOID TCPContext; /* TCP Content for this interface */
170 SEND_RECV_STATS Stats; /* Send/Receive statistics */
172
173typedef struct _IP_SET_ADDRESS {
178
179#define IP_PROTOCOL_TABLE_SIZE 0x100
180
183 PIP_PACKET IPPacket);
184
185/* Loopback adapter address information (network byte order) */
186#define LOOPBACK_ADDRESS_IPv4 ((IPv4_RAW_ADDRESS)DH2N(0x7F000001))
187#define LOOPBACK_BCASTADDR_IPv4 ((IPv4_RAW_ADDRESS)DH2N(0x7FFFFFFF))
188#define LOOPBACK_ADDRMASK_IPv4 ((IPv4_RAW_ADDRESS)DH2N(0xFF000000))
189
190/* Protocol definitions */
191#ifndef IPPROTO_RAW
192#define IPPROTO_RAW 0 /* Raw IP */
193#endif
194#define IPPROTO_ICMP 1 /* Internet Control Message Protocol */
195#define IPPROTO_IGMP 2 /* Internet Group Management Protocol */
196#define IPPROTO_TCP 6 /* Transmission Control Protocol */
197#define IPPROTO_UDP 17 /* User Datagram Protocol */
198
199/* Timeout timer constants */
200#define IP_TIMEOUT 1000 /* Timeout in milliseconds */
201#define IP_DEFAULT_LINK_SPEED 10000
202
207
209 ULONG Type);
210
212 PIP_PACKET IPPacket,
213 ULONG Type);
214
216 PLLIP_BIND_INFO BindInfo);
217
219 PIP_INTERFACE IF);
220
222 PIP_INTERFACE IF);
223
225 PIP_INTERFACE IF);
226
228 PIP_INTERFACE IF);
229
231 PIP_INTERFACE IF);
232
237
240 PIP_PACKET IPPacket);
241
243 UINT ProtocolNumber,
245
247
249
250/* EOF */
unsigned char BOOLEAN
Type
Definition: Type.h:7
#define VOID
Definition: acefi.h:82
ACPI_PHYSICAL_ADDRESS ACPI_SIZE BOOLEAN Warn UINT32 *TableIdx UINT32 ACPI_TABLE_HEADER *OutTableHeader ACPI_TABLE_HEADER **OutTable ACPI_HANDLE UINT32 ACPI_WALK_CALLBACK ACPI_WALK_CALLBACK void void **ReturnValue UINT32 ACPI_BUFFER *RetPathPtr ACPI_OBJECT_HANDLER Handler
Definition: acpixf.h:672
LONG NTSTATUS
Definition: precomp.h:26
USHORT IPv6_RAW_ADDRESS[8]
Definition: ip.h:19
VOID(* LL_TRANSMIT_ROUTINE)(PVOID Context, PNDIS_PACKET NdisPacket, UINT Offset, PVOID LinkAddress, USHORT Type)
Definition: ip.h:118
VOID(* IP_PROTOCOL_HANDLER)(PIP_INTERFACE Interface, PIP_PACKET IPPacket)
Definition: ip.h:181
IPv6_RAW_ADDRESS * PIPv6_RAW_ADDRESS
Definition: ip.h:20
struct _IP_PACKET IP_PACKET
struct _PACKET_CONTEXT * PPACKET_CONTEXT
NTSTATUS IPStartup(PUNICODE_STRING RegistryPath)
Definition: ip.c:407
VOID IPAddInterfaceRoute(PIP_INTERFACE IF)
Definition: ip.c:262
VOID(* PACKET_COMPLETION_ROUTINE)(PVOID Context, PNDIS_PACKET NdisPacket, NDIS_STATUS NdisStatus)
Definition: ip.h:71
struct _LLIP_BIND_INFO LLIP_BIND_INFO
union _IP_HEADER * PIP_HEADER
ULONG IPv4_RAW_ADDRESS
Definition: ip.h:15
struct _IP_PACKET * PIP_PACKET
VOID(* OBJECT_FREE_ROUTINE)(PVOID Object)
Definition: ip.h:10
LIST_ENTRY NetTableListHead
Definition: ip.c:19
KSPIN_LOCK InterfaceListLock
Definition: ip.c:18
struct IPv4_HEADER * PIPv4_HEADER
IPv4_RAW_ADDRESS * PIPv4_RAW_ADDRESS
Definition: ip.h:16
VOID IPDestroyInterface(PIP_INTERFACE IF)
Definition: ip.c:244
KSPIN_LOCK NetTableListLock
Definition: ip.c:20
VOID IPRemoveInterfaceRoute(PIP_INTERFACE IF)
Definition: ip.c:331
struct _IP_SET_ADDRESS * PIP_SET_ADDRESS
LIST_ENTRY InterfaceListHead
Definition: ip.c:17
VOID IPUnregisterInterface(PIP_INTERFACE IF)
Definition: ip.c:349
VOID IPDispatchProtocol(PIP_INTERFACE Interface, PIP_PACKET IPPacket)
Definition: ip.c:142
struct _IP_INTERFACE * PIP_INTERFACE
union _IP_HEADER IP_HEADER
struct IPv6_HEADER * PIPv6_HEADER
NTSTATUS IPShutdown(VOID)
Definition: ip.c:473
struct _PACKET_CONTEXT PACKET_CONTEXT
VOID NTAPI IPTimeoutDpcFn(PKDPC Dpc, PVOID DeferredContext, PVOID SystemArgument1, PVOID SystemArgument2)
Definition: ip.c:112
PIP_PACKET IPCreatePacket(ULONG Type)
BOOLEAN IPRegisterInterface(PIP_INTERFACE IF)
Definition: ip.c:289
struct _SEND_RECV_STATS * PSEND_RECV_STATS
struct _IP_SET_ADDRESS IP_SET_ADDRESS
struct IP_ADDRESS * PIP_ADDRESS
PIP_INTERFACE IPCreateInterface(PLLIP_BIND_INFO BindInfo)
Definition: ip.c:182
VOID IPRegisterProtocol(UINT ProtocolNumber, IP_PROTOCOL_HANDLER Handler)
Definition: ip.c:386
PIP_PACKET IPInitializePacket(PIP_PACKET IPPacket, ULONG Type)
Definition: ip.c:92
struct _SEND_RECV_STATS SEND_RECV_STATS
struct _IP_INTERFACE IP_INTERFACE
struct _LLIP_BIND_INFO * PLLIP_BIND_INFO
ULONG KSPIN_LOCK
Definition: env_spec_w32.h:72
unsigned int UINT
Definition: ndis.h:50
int NDIS_STATUS
Definition: ntddndis.h:475
_In_ ULONG _In_ ULONG Offset
Definition: ntddpcm.h:101
unsigned short USHORT
Definition: pedump.c:61
Definition: ip.h:23
union IP_ADDRESS::@1016 Address
IPv6_RAW_ADDRESS IPv6Address
Definition: ip.h:27
UCHAR Type
Definition: ip.h:24
IPv4_RAW_ADDRESS IPv4Address
Definition: ip.h:26
UCHAR Tos
Definition: eth.h:29
IPv4_RAW_ADDRESS SrcAddr
Definition: ip.h:46
UCHAR Ttl
Definition: eth.h:33
USHORT Id
Definition: eth.h:31
USHORT TotalLength
Definition: eth.h:30
IPv4_RAW_ADDRESS DstAddr
Definition: ip.h:47
UCHAR Protocol
Definition: eth.h:34
USHORT Checksum
Definition: eth.h:35
UCHAR VerIHL
Definition: ip.h:38
USHORT FlagsFragOfs
Definition: ip.h:42
Definition: ip.h:51
UCHAR NextHeader
Definition: ip.h:54
IPv6_RAW_ADDRESS DstAddr
Definition: ip.h:57
USHORT PayloadLength
Definition: ip.h:53
UCHAR HopLimit
Definition: ip.h:55
IPv6_RAW_ADDRESS SrcAddr
Definition: ip.h:56
ULONG VTF
Definition: ip.h:52
UNICODE_STRING Description
Definition: ip.h:164
UINT Speed
Definition: ip.h:158
IP_ADDRESS Broadcast
Definition: ip.h:162
PUCHAR Address
Definition: ip.h:165
UNICODE_STRING Name
Definition: ip.h:163
IP_ADDRESS PointToPoint
Definition: ip.h:160
LL_TRANSMIT_ROUTINE Transmit
Definition: ip.h:168
IP_ADDRESS Unicast
Definition: ip.h:159
IP_ADDRESS Netmask
Definition: ip.h:161
OBJECT_FREE_ROUTINE Free
Definition: ip.h:152
UINT AddressLength
Definition: ip.h:166
UINT MTU
Definition: ip.h:157
UINT Index
Definition: ip.h:167
PVOID TCPContext
Definition: ip.h:169
SEND_RECV_STATS Stats
Definition: ip.h:170
KSPIN_LOCK Lock
Definition: ip.h:153
UINT MinFrameSize
Definition: ip.h:156
PVOID Context
Definition: ip.h:154
UINT HeaderSize
Definition: ip.h:155
LIST_ENTRY ListEntry
Definition: ip.h:151
Definition: ip.h:77
PVOID Data
Definition: ip.h:85
UCHAR Flags
Definition: ip.h:80
OBJECT_FREE_ROUTINE Free
Definition: ip.h:78
UCHAR Type
Definition: ip.h:79
IP_ADDRESS SrcAddr
Definition: ip.h:89
BOOLEAN ReturnPacket
Definition: ip.h:82
BOOLEAN MappedHeader
Definition: ip.h:81
UINT Position
Definition: ip.h:87
PNDIS_PACKET NdisPacket
Definition: ip.h:88
UINT HeaderSize
Definition: ip.h:84
PVOID Header
Definition: ip.h:83
IP_ADDRESS DstAddr
Definition: ip.h:90
UINT TotalSize
Definition: ip.h:86
ULONG NteIndex
Definition: ip.h:174
IPv4_RAW_ADDRESS Address
Definition: ip.h:175
IPv4_RAW_ADDRESS Netmask
Definition: ip.h:176
Definition: ketypes.h:699
Definition: typedefs.h:120
PUCHAR Address
Definition: ip.h:130
UINT MinFrameSize
Definition: ip.h:129
PVOID Context
Definition: ip.h:127
UINT HeaderSize
Definition: ip.h:128
UINT AddressLength
Definition: ip.h:131
LL_TRANSMIT_ROUTINE Transmit
Definition: ip.h:132
UINT PacketType
Definition: ip.h:102
PACKET_COMPLETION_ROUTINE DLComplete
Definition: ip.h:98
PVOID Context
Definition: ip.h:101
UINT InNUnicast
Definition: ip.h:138
UINT OutUnicast
Definition: ip.h:143
UINT OutErrors
Definition: ip.h:146
UINT OutNUnicast
Definition: ip.h:144
UINT InDiscardedUnknownProto
Definition: ip.h:141
UINT InDiscarded
Definition: ip.h:139
UINT OutBytes
Definition: ip.h:142
UINT InUnicast
Definition: ip.h:137
UINT InErrors
Definition: ip.h:140
UINT OutDiscarded
Definition: ip.h:145
UINT InBytes
Definition: ip.h:136
#define NTAPI
Definition: typedefs.h:36
unsigned char * PUCHAR
Definition: typedefs.h:53
uint32_t ULONG
Definition: typedefs.h:59
Definition: ip.h:60
IPv4_HEADER v4
Definition: ip.h:61
IPv6_HEADER v6
Definition: ip.h:62
_Must_inspect_result_ _In_ WDFCOLLECTION _In_ WDFOBJECT Object
_Must_inspect_result_ _In_ PWDF_DPC_CONFIG _In_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFDPC * Dpc
Definition: wdfdpc.h:112
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
Definition: wdfdriver.h:215
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE Interface
Definition: wdffdo.h:465
_In_opt_ PVOID _In_opt_ PVOID SystemArgument1
Definition: ketypes.h:688
_In_opt_ PVOID DeferredContext
Definition: ketypes.h:687
_In_opt_ PVOID _In_opt_ PVOID _In_opt_ PVOID SystemArgument2
Definition: ketypes.h:689
unsigned char UCHAR
Definition: xmlstorage.h:181