One case only please.
[reactos.git] / reactos / lib / packet / include / packet32.h
1 /*
2 * Copyright (c) 1999, 2000
3 * Politecnico di Torino. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that: (1) source code distributions
7 * retain the above copyright notice and this paragraph in its entirety, (2)
8 * distributions including binary code include the above copyright notice and
9 * this paragraph in its entirety in the documentation or other materials
10 * provided with the distribution, and (3) all advertising materials mentioning
11 * features or use of this software display the following acknowledgement:
12 * ``This product includes software developed by the Politecnico
13 * di Torino, and its contributors.'' Neither the name of
14 * the University nor the names of its contributors may be used to endorse
15 * or promote products derived from this software without specific prior
16 * written permission.
17 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
18 * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
19 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
20 */
21
22 #ifndef __PACKET32
23 #define __PACKET32
24
25 #include <winsock2.h>
26 #include "devioctl.h"
27
28 // Working modes
29 #define PACKET_MODE_CAPT 0x0 ///< Capture mode
30 #define PACKET_MODE_STAT 0x1 ///< Statistical mode
31 #define PACKET_MODE_DUMP 0x10 ///< Dump mode
32 #define PACKET_MODE_STAT_DUMP MODE_DUMP | MODE_STAT ///< Statistical dump Mode
33
34 // ioctls
35 #define FILE_DEVICE_PROTOCOL 0x8000
36
37 #define IOCTL_PROTOCOL_STATISTICS CTL_CODE(FILE_DEVICE_PROTOCOL, 2 , METHOD_BUFFERED, FILE_ANY_ACCESS)
38 #define IOCTL_PROTOCOL_RESET CTL_CODE(FILE_DEVICE_PROTOCOL, 3 , METHOD_BUFFERED, FILE_ANY_ACCESS)
39 #define IOCTL_PROTOCOL_READ CTL_CODE(FILE_DEVICE_PROTOCOL, 4 , METHOD_BUFFERED, FILE_ANY_ACCESS)
40 #define IOCTL_PROTOCOL_WRITE CTL_CODE(FILE_DEVICE_PROTOCOL, 5 , METHOD_BUFFERED, FILE_ANY_ACCESS)
41 #define IOCTL_PROTOCOL_MACNAME CTL_CODE(FILE_DEVICE_PROTOCOL, 6 , METHOD_BUFFERED, FILE_ANY_ACCESS)
42 #define IOCTL_OPEN CTL_CODE(FILE_DEVICE_PROTOCOL, 7 , METHOD_BUFFERED, FILE_ANY_ACCESS)
43 #define IOCTL_CLOSE CTL_CODE(FILE_DEVICE_PROTOCOL, 8 , METHOD_BUFFERED, FILE_ANY_ACCESS)
44
45 #define pBIOCSETBUFFERSIZE 9592
46 #define pBIOCSETF 9030
47 #define pBIOCGSTATS 9031
48 #define pBIOCSRTIMEOUT 7416
49 #define pBIOCSMODE 7412
50 #define pBIOCSWRITEREP 7413
51 #define pBIOCSMINTOCOPY 7414
52 #define pBIOCSETOID 2147483648
53 #define pBIOCQUERYOID 2147483652
54 #define pATTACHPROCESS 7117
55 #define pDETACHPROCESS 7118
56 #define pBIOCSETDUMPFILENAME 9029
57 #define pBIOCEVNAME 7415
58
59 #define pBIOCSTIMEZONE 7471
60
61 // Alignment macros. Packet_WORDALIGN rounds up to the next
62 // even multiple of Packet_ALIGNMENT.
63 #define Packet_ALIGNMENT sizeof(int)
64 #define Packet_WORDALIGN(x) (((x)+(Packet_ALIGNMENT-1))&~(Packet_ALIGNMENT-1))
65
66 typedef struct NetType
67 {
68 UINT LinkType;
69 UINT LinkSpeed;
70 }NetType;
71
72
73 //some definitions stolen from libpcap
74
75 #ifndef BPF_MAJOR_VERSION
76
77 struct bpf_program {
78 UINT bf_len;
79 struct bpf_insn *bf_insns;
80 };
81
82 struct bpf_insn {
83 USHORT code;
84 UCHAR jt;
85 UCHAR jf;
86 int k;
87 };
88
89 struct bpf_stat {
90 UINT bs_recv;
91
92
93 UINT bs_drop;
94
95
96 };
97
98 struct bpf_hdr {
99 struct timeval bh_tstamp;
100 UINT bh_caplen;
101 UINT bh_datalen;
102 USHORT bh_hdrlen;
103 };
104
105 #endif
106
107 #define DOSNAMEPREFIX TEXT("Packet_")
108 #define MAX_LINK_NAME_LENGTH 64
109 #define NMAX_PACKET 65535
110
111 typedef struct _ADAPTER {
112 HANDLE hFile;
113 TCHAR SymbolicLink[MAX_LINK_NAME_LENGTH];
114 int NumWrites;
115 HANDLE ReadEvent;
116 UINT ReadTimeOut;
117 } ADAPTER, *LPADAPTER;
118
119 typedef struct _PACKET {
120 HANDLE hEvent;
121 OVERLAPPED OverLapped;
122 PVOID Buffer;
123 UINT Length;
124 UINT ulBytesReceived;
125 BOOLEAN bIoComplete;
126 } PACKET, *LPPACKET;
127
128 struct _PACKET_OID_DATA {
129 ULONG Oid;
130 ULONG Length;
131 UCHAR Data[1];
132
133 };
134 typedef struct _PACKET_OID_DATA PACKET_OID_DATA, *PPACKET_OID_DATA;
135
136 typedef struct npf_if_addr {
137 struct sockaddr IPAddress;
138 struct sockaddr SubnetMask;
139 struct sockaddr Broadcast;
140 }npf_if_addr;
141
142 #ifdef __cplusplus
143 extern "C" {
144 #endif
145
146 //---------------------------------------------------------------------------
147 // FUNCTIONS
148 //---------------------------------------------------------------------------
149
150 PCHAR PacketGetVersion();
151 BOOLEAN PacketSetMinToCopy(LPADAPTER AdapterObject,int nbytes);
152 BOOLEAN PacketSetNumWrites(LPADAPTER AdapterObject,int nwrites);
153 BOOLEAN PacketSetMode(LPADAPTER AdapterObject,int mode);
154 BOOLEAN PacketSetReadTimeout(LPADAPTER AdapterObject,int timeout);
155 BOOLEAN PacketSetBpf(LPADAPTER AdapterObject,struct bpf_program *fp);
156 BOOLEAN PacketGetStats(LPADAPTER AdapterObject,struct bpf_stat *s);
157 BOOLEAN PacketSetBuff(LPADAPTER AdapterObject,int dim);
158 BOOLEAN PacketGetNetType (LPADAPTER AdapterObject,NetType *type);
159 LPADAPTER PacketOpenAdapter(LPTSTR AdapterName);
160 BOOLEAN PacketSendPacket(LPADAPTER AdapterObject,LPPACKET pPacket,BOOLEAN Sync);
161 LPPACKET PacketAllocatePacket(void);
162 VOID PacketInitPacket(LPPACKET lpPacket,PVOID Buffer,UINT Length);
163 VOID PacketFreePacket(LPPACKET lpPacket);
164 BOOLEAN PacketReceivePacket(LPADAPTER AdapterObject,LPPACKET lpPacket,BOOLEAN Sync);
165 BOOLEAN PacketSetHwFilter(LPADAPTER AdapterObject,ULONG Filter);
166 BOOLEAN PacketGetAdapterNames(PTSTR pStr,PULONG BufferSize);
167 BOOLEAN PacketGetNetInfo(LPTSTR AdapterName, PULONG netp, PULONG maskp);
168 BOOLEAN PacketGetNetInfoEx(LPTSTR AdapterName, npf_if_addr* buffer, PLONG NEntries);
169 BOOLEAN PacketRequest(LPADAPTER AdapterObject,BOOLEAN Set,PPACKET_OID_DATA OidData);
170 HANDLE PacketGetReadEvent(LPADAPTER AdapterObject);
171 BOOLEAN PacketSetDumpName(LPADAPTER AdapterObject, void *name, int len);
172 BOOL PacketStopDriver();
173 VOID PacketCloseAdapter(LPADAPTER lpAdapter);
174
175 #ifdef __cplusplus
176 }
177 #endif
178
179 #endif //__PACKET32