xref: /reactos/sdk/include/psdk/tcpioctl.h (revision dd2ff41d)
1 /*
2  * tcpioctl.h
3  *
4  * Set and query ioctl constants for tcpip.sys
5  *
6  * Contributors:
7  *   Created by Art Yerkes (ayerkes@speakeasy.net) from
8  *    drivers/net/tcpip/include/ticonsts.h
9  *
10  * THIS SOFTWARE IS NOT COPYRIGHTED
11  *
12  * This source code is offered for use in the public domain. You may
13  * use, modify or distribute it freely.
14  *
15  * This code is distributed in the hope that it will be useful but
16  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
17  * DISCLAIMED. This includes but is not limited to warranties of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
19  *
20  */
21 
22 #ifndef _TCPIOCTL_H
23 #define _TCPIOCTL_H
24 
25 #define DD_TCP_DEVICE_NAME L"\\Device\\Tcp"
26 
27 /* TCP/UDP/RawIP IOCTL code definitions */
28 
29 #define FSCTL_TCP_BASE     FILE_DEVICE_NETWORK
30 
31 #define _TCP_CTL_CODE(Function, Method, Access) \
32     CTL_CODE(FSCTL_TCP_BASE, Function, Method, Access)
33 
34 #define IOCTL_TCP_QUERY_INFORMATION_EX \
35     _TCP_CTL_CODE(0, METHOD_NEITHER, FILE_ANY_ACCESS)
36 
37 #define IOCTL_TCP_SET_INFORMATION_EX \
38     _TCP_CTL_CODE(1, METHOD_BUFFERED, FILE_WRITE_ACCESS)
39 
40 #define IOCTL_QUERY_IP_HW_ADDRESS \
41     _TCP_CTL_CODE(15, METHOD_BUFFERED, FILE_ANY_ACCESS)
42 
43 #define IOCTL_SET_IP_ADDRESS \
44     _TCP_CTL_CODE(14, METHOD_BUFFERED, FILE_WRITE_ACCESS)
45 
46 #define IOCTL_DELETE_IP_ADDRESS \
47     _TCP_CTL_CODE(16, METHOD_BUFFERED, FILE_WRITE_ACCESS)
48 
49 #define IOCTL_ICMP_ECHO_REQUEST \
50     _TCP_CTL_CODE(0, METHOD_BUFFERED, FILE_ANY_ACCESS)
51 
52 #define IF_MIB_STATS_ID                 1
53 #define IP_MIB_STATS_ID                 1
54 #define IP_MIB_ARPTABLE_ENTRY_ID        0x101
55 #define IP_MIB_ADDRTABLE_ENTRY_ID       0x102
56 #define IP_INTFC_INFO_ID                0x103
57 /* Non public TOIID used to query modules info */
58 #ifdef __REACTOS__
59 #define IP_SPECIFIC_MODULE_ENTRY_ID     0x110
60 #endif
61 #define MAX_PHYSADDR_SIZE               8
62 
63 /* Address Object Options */
64 #define AO_OPTION_TTL                1
65 #define AO_OPTION_MCASTTTL           2
66 #define AO_OPTION_MCASTIF            3
67 #define AO_OPTION_XSUM               4
68 #define AO_OPTION_IPOPTIONS          5
69 #define AO_OPTION_ADD_MCAST          6
70 #define AO_OPTION_DEL_MCAST          7
71 #define AO_OPTION_TOS                8
72 #define AO_OPTION_IP_DONTFRAGMENT    9
73 #define AO_OPTION_MCASTLOOP         10
74 #define AO_OPTION_BROADCAST         11
75 #define AO_OPTION_IP_HDRINCL        12
76 #define AO_OPTION_RCVALL            13
77 #define AO_OPTION_RCVALL_MCAST      14
78 #define AO_OPTION_RCVALL_IGMPMCAST  15
79 #define AO_OPTION_UNNUMBEREDIF      16
80 #define AO_OPTION_IP_UCASTIF        17
81 #define AO_OPTION_ABSORB_RTRALERT   18
82 #define AO_OPTION_LIMIT_BCASTS      19
83 #define AO_OPTION_INDEX_BIND        20
84 #define AO_OPTION_INDEX_MCASTIF     21
85 #define AO_OPTION_INDEX_ADD_MCAST   22
86 #define AO_OPTION_INDEX_DEL_MCAST   23
87 #define AO_OPTION_IFLIST            24
88 #define AO_OPTION_ADD_IFLIST        25
89 #define AO_OPTION_DEL_IFLIST        26
90 #define AO_OPTION_IP_PKTINFO        27
91 #define AO_OPTION_ADD_MCAST_SRC     28
92 #define AO_OPTION_DEL_MCAST_SRC     29
93 #define AO_OPTION_MCAST_FILTER      30
94 #define AO_OPTION_BLOCK_MCAST_SRC   31
95 #define AO_OPTION_UNBLOCK_MCAST_SRC 32
96 #define AO_OPTION_UDP_CKSUM_COVER   33
97 #define AO_OPTION_WINDOW            34
98 #define AO_OPTION_SCALE_CWIN        35
99 #define AO_OPTION_RCV_HOPLIMIT      36
100 #define AO_OPTION_UNBIND            37
101 #define AO_OPTION_PROTECT           38
102 
103 /* TCP connection options */
104 #define TCP_SOCKET_NODELAY 1
105 
106 typedef struct IFEntry
107 {
108     ULONG if_index;
109     ULONG if_type;
110     ULONG if_mtu;
111     ULONG if_speed;
112     ULONG if_physaddrlen;
113     UCHAR if_physaddr[MAX_PHYSADDR_SIZE];
114     ULONG if_adminstatus;
115     ULONG if_operstatus;
116     ULONG if_lastchange;
117     ULONG if_inoctets;
118     ULONG if_inucastpkts;
119     ULONG if_innucastpkts;
120     ULONG if_indiscards;
121     ULONG if_inerrors;
122     ULONG if_inunknownprotos;
123     ULONG if_outoctets;
124     ULONG if_outucastpkts;
125     ULONG if_outnucastpkts;
126     ULONG if_outdiscards;
127     ULONG if_outerrors;
128     ULONG if_outqlen;
129     ULONG if_descrlen;
130     UCHAR if_descr[1];
131 } IFEntry;
132 
133 typedef struct IPSNMPInfo
134 {
135     ULONG ipsi_forwarding;
136     ULONG ipsi_defaultttl;
137     ULONG ipsi_inreceives;
138     ULONG ipsi_inhdrerrors;
139     ULONG ipsi_inaddrerrors;
140     ULONG ipsi_forwdatagrams;
141     ULONG ipsi_inunknownprotos;
142     ULONG ipsi_indiscards;
143     ULONG ipsi_indelivers;
144     ULONG ipsi_outrequests;
145     ULONG ipsi_routingdiscards;
146     ULONG ipsi_outdiscards;
147     ULONG ipsi_outnoroutes;
148     ULONG ipsi_reasmtimeout;
149     ULONG ipsi_reasmreqds;
150     ULONG ipsi_reasmoks;
151     ULONG ipsi_reasmfails;
152     ULONG ipsi_fragoks;
153     ULONG ipsi_fragfails;
154     ULONG ipsi_fragcreates;
155     ULONG ipsi_numif;
156     ULONG ipsi_numaddr;
157     ULONG ipsi_numroutes;
158 } IPSNMPInfo;
159 
160 typedef struct IPAddrEntry
161 {
162     ULONG iae_addr;
163     ULONG iae_index;
164     ULONG iae_mask;
165     ULONG iae_bcastaddr;
166     ULONG iae_reasmsize;
167     USHORT iae_context;
168     USHORT iae_pad;
169 } IPAddrEntry;
170 
171 typedef struct IPInterfaceInfo
172 {
173     ULONG iii_flags;
174     ULONG iii_mtu;
175     ULONG iii_speed;
176     ULONG iii_addrlength;
177     UCHAR iii_addr[1];
178 } IPInterfaceInfo;
179 
180 #endif/*_TCPIOCTL_H*/
181