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
);