2 * Copyright (c) 1999, 2000
3 * Politecnico di Torino. All rights reserved.
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
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.
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
35 #define FILE_DEVICE_PROTOCOL 0x8000
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)
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
59 #define pBIOCSTIMEZONE 7471
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))
66 typedef struct NetType
73 //some definitions stolen from libpcap
75 #ifndef BPF_MAJOR_VERSION
79 struct bpf_insn *bf_insns;
99 struct timeval bh_tstamp;
107 #define DOSNAMEPREFIX TEXT("Packet_")
108 #define MAX_LINK_NAME_LENGTH 64
109 #define NMAX_PACKET 65535
111 typedef struct _ADAPTER {
113 TCHAR SymbolicLink[MAX_LINK_NAME_LENGTH];
117 } ADAPTER, *LPADAPTER;
119 typedef struct _PACKET {
121 OVERLAPPED OverLapped;
124 UINT ulBytesReceived;
128 struct _PACKET_OID_DATA {
134 typedef struct _PACKET_OID_DATA PACKET_OID_DATA, *PPACKET_OID_DATA;
136 typedef struct npf_if_addr {
137 struct sockaddr IPAddress;
138 struct sockaddr SubnetMask;
139 struct sockaddr Broadcast;
146 //---------------------------------------------------------------------------
148 //---------------------------------------------------------------------------
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);