Main Page Modules Data Structures File List Data Fields Globals Related Pages

# Packet32.h

Go to the documentation of this file.

    00001 /*
    00002  * Copyright (c) 1999, 2000
    00003  *  Politecnico di Torino.  All rights reserved.
    00004  *
    00005  * Redistribution and use in source and binary forms, with or without
    00006  * modification, are permitted provided that: (1) source code distributions
    00007  * retain the above copyright notice and this paragraph in its entirety, (2)
    00008  * distributions including binary code include the above copyright notice and
    00009  * this paragraph in its entirety in the documentation or other materials
    00010  * provided with the distribution, and (3) all advertising materials mentioning
    00011  * features or use of this software display the following acknowledgement:
    00012  * ``This product includes software developed by the Politecnico
    00013  * di Torino, and its contributors.'' Neither the name of
    00014  * the University nor the names of its contributors may be used to endorse
    00015  * or promote products derived from this software without specific prior
    00016  * written permission.
    00017  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
    00018  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
    00019  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
    00020  */
    00021
    00033 #ifndef __PACKET32
    00034 #define __PACKET32
    00035
    00036 #include <winsock2.h>
    00037 #include "devioctl.h"
    00038
    00039 // Working modes
    00040 #define PACKET_MODE_CAPT 0x0
    00041 #define PACKET_MODE_STAT 0x1
    00042 #define PACKET_MODE_DUMP 0x10
    00043 #define PACKET_MODE_STAT_DUMP MODE_DUMP | MODE_STAT
    00044
    00045 // ioctls
    00046 #define FILE_DEVICE_PROTOCOL        0x8000
    00047
    00048 #define IOCTL_PROTOCOL_STATISTICS   CTL_CODE(FILE_DEVICE_PROTOCOL, 2 , METHOD_BUFFERED, FILE_ANY_ACCESS)
    00049 #define IOCTL_PROTOCOL_RESET        CTL_CODE(FILE_DEVICE_PROTOCOL, 3 , METHOD_BUFFERED, FILE_ANY_ACCESS)
    00050 #define IOCTL_PROTOCOL_READ         CTL_CODE(FILE_DEVICE_PROTOCOL, 4 , METHOD_BUFFERED, FILE_ANY_ACCESS)
    00051 #define IOCTL_PROTOCOL_WRITE        CTL_CODE(FILE_DEVICE_PROTOCOL, 5 , METHOD_BUFFERED, FILE_ANY_ACCESS)
    00052 #define IOCTL_PROTOCOL_MACNAME      CTL_CODE(FILE_DEVICE_PROTOCOL, 6 , METHOD_BUFFERED, FILE_ANY_ACCESS)
    00053 #define IOCTL_OPEN                  CTL_CODE(FILE_DEVICE_PROTOCOL, 7 , METHOD_BUFFERED, FILE_ANY_ACCESS)
    00054 #define IOCTL_CLOSE                 CTL_CODE(FILE_DEVICE_PROTOCOL, 8 , METHOD_BUFFERED, FILE_ANY_ACCESS)
    00055
    00056 #define  pBIOCSETBUFFERSIZE 9592
    00057 #define  pBIOCSETF 9030
    00058 #define  pBIOCGSTATS 9031
    00059 #define  pBIOCSRTIMEOUT 7416
    00060 #define  pBIOCSMODE 7412
    00061 #define  pBIOCSWRITEREP 7413
    00062 #define  pBIOCSMINTOCOPY 7414
    00063 #define  pBIOCSETOID 2147483648
    00064 #define  pBIOCQUERYOID 2147483652
    00065 #define  pATTACHPROCESS 7117
    00066 #define  pDETACHPROCESS 7118
    00067 #define  pBIOCSETDUMPFILENAME 9029
    00068 #define  pBIOCEVNAME 7415
    00069 #define  pBIOCSENDPACKETSNOSYNC 9032
    00070 #define  pBIOCSENDPACKETSSYNC 9033
    00071 #define  pBIOCSETDUMPLIMITS 9034
    00072 #define  pBIOCISDUMPENDED 7411
    00073
    00074 #define  pBIOCSTIMEZONE 7471
    00075
    00076
    00078 #define Packet_ALIGNMENT sizeof(int)
    00079
    00080 #define Packet_WORDALIGN(x) (((x)+(Packet_ALIGNMENT-1))&~(Packet_ALIGNMENT-1))
    00081
    00087 typedef struct NetType
    00088 {
    00089     UINT LinkType;
    00090     UINT LinkSpeed;
    00091 }NetType;
    00092
    00093
    00094 //some definitions stolen from libpcap
    00095
    00096 #ifndef BPF_MAJOR_VERSION
    00097
    00103 struct bpf_program {
    00104     UINT bf_len;
    00105     struct bpf_insn *bf_insns;
    00106 };
    00107
    00113 struct bpf_insn {
    00114     USHORT  code;
    00115     UCHAR   jt;
    00116     UCHAR   jf;
    00117     int k;
    00118 };
    00119
    00125 struct bpf_stat {
    00126     UINT bs_recv;
    00127
    00128
    00129     UINT bs_drop;
    00130
    00131
    00132     UINT ps_ifdrop;
    00133     UINT bs_capt;
    00134
    00135 };
    00136
    00142 struct bpf_hdr {
    00143     struct timeval  bh_tstamp;
    00144
    00145     UINT    bh_caplen;
    00146
    00147
    00148     UINT    bh_datalen;
    00149     USHORT      bh_hdrlen;
    00150
    00151
    00152
    00153 };
    00154
    00162 struct dump_bpf_hdr{
    00163     struct timeval  ts;
    00164     UINT            caplen;
    00165
    00166
    00167     UINT            len;
    00168 };
    00169
    00170
    00171 #endif
    00172
    00173 #define        DOSNAMEPREFIX   TEXT("Packet_")
    00174 #define        MAX_LINK_NAME_LENGTH 64          //< Maximum length of the devices symbolic links
    00175 #define        NMAX_PACKET 65535
    00176
    00183 typedef struct _ADAPTER  {
    00184     HANDLE hFile;
    00185     CHAR  SymbolicLink[MAX_LINK_NAME_LENGTH];
    00186     int NumWrites;
    00187
    00188     HANDLE ReadEvent;
    00189
    00190
    00191
    00192
    00193
    00194
    00195
    00196     UINT ReadTimeOut;
    00197
    00198 }  ADAPTER, *LPADAPTER;
    00199
    00205 typedef struct _PACKET {
    00206     HANDLE       hEvent;
    00207     OVERLAPPED   OverLapped;
    00208     PVOID        Buffer;
    00209
    00210     UINT         Length;
    00211     DWORD        ulBytesReceived;
    00212
    00213     BOOLEAN      bIoComplete;
    00214 }  PACKET, *LPPACKET;
    00215
    00223 struct _PACKET_OID_DATA {
    00224     ULONG Oid;
    00225
    00226     ULONG Length;
    00227     UCHAR Data[1];
    00228
    00229 };
    00230 typedef struct _PACKET_OID_DATA PACKET_OID_DATA, *PPACKET_OID_DATA;
    00231
    00238 typedef struct npf_if_addr {
    00239     struct sockaddr IPAddress;
    00240     struct sockaddr SubnetMask;
    00241     struct sockaddr Broadcast;
    00242 }npf_if_addr;
    00243
    00244 #ifdef __cplusplus
    00245 extern "C" {
    00246 #endif
    00247
    00252 //---------------------------------------------------------------------------
    00253 // FUNCTIONS
    00254 //---------------------------------------------------------------------------
    00255
    00256 PCHAR PacketGetVersion();
    00257 BOOLEAN PacketSetMinToCopy(LPADAPTER AdapterObject,int nbytes);
    00258 BOOLEAN PacketSetNumWrites(LPADAPTER AdapterObject,int nwrites);
    00259 BOOLEAN PacketSetMode(LPADAPTER AdapterObject,int mode);
    00260 BOOLEAN PacketSetReadTimeout(LPADAPTER AdapterObject,int timeout);
    00261 BOOLEAN PacketSetBpf(LPADAPTER AdapterObject,struct bpf_program *fp);
    00262 BOOLEAN PacketGetStats(LPADAPTER AdapterObject,struct bpf_stat *s);
    00263 BOOLEAN PacketGetStatsEx(LPADAPTER AdapterObject,struct bpf_stat *s);
    00264 BOOLEAN PacketSetBuff(LPADAPTER AdapterObject,int dim);
    00265 BOOLEAN PacketGetNetType (LPADAPTER AdapterObject,NetType *type);
    00266 LPADAPTER PacketOpenAdapter(LPTSTR AdapterName);
    00267 BOOLEAN PacketSendPacket(LPADAPTER AdapterObject,LPPACKET pPacket,BOOLEAN Sync);
    00268 INT PacketSendPackets(LPADAPTER AdapterObject,PVOID PacketBuff,ULONG Size, BOOLEAN Sync);
    00269 LPPACKET PacketAllocatePacket(void);
    00270 VOID PacketInitPacket(LPPACKET lpPacket,PVOID  Buffer,UINT  Length);
    00271 VOID PacketFreePacket(LPPACKET lpPacket);
    00272 BOOLEAN PacketReceivePacket(LPADAPTER AdapterObject,LPPACKET lpPacket,BOOLEAN Sync);
    00273 BOOLEAN PacketSetHwFilter(LPADAPTER AdapterObject,ULONG Filter);
    00274 BOOLEAN PacketGetAdapterNames(PTSTR pStr,PULONG  BufferSize);
    00275 BOOLEAN PacketGetNetInfo(LPTSTR AdapterName, PULONG netp, PULONG maskp);
    00276 BOOLEAN PacketGetNetInfoEx(LPTSTR AdapterName, npf_if_addr* buffer, PLONG NEntries);
    00277 BOOLEAN PacketRequest(LPADAPTER  AdapterObject,BOOLEAN Set,PPACKET_OID_DATA  OidData);
    00278 HANDLE PacketGetReadEvent(LPADAPTER AdapterObject);
    00279 BOOLEAN PacketSetDumpName(LPADAPTER AdapterObject, void *name, int len);
    00280 BOOLEAN PacketSetDumpLimits(LPADAPTER AdapterObject, UINT maxfilesize, UINT maxnpacks);
    00281 BOOLEAN PacketIsDumpEnded(LPADAPTER AdapterObject, BOOLEAN sync);
    00282 BOOL PacketStopDriver();
    00283 VOID PacketCloseAdapter(LPADAPTER lpAdapter);
    00284
    00285 #ifdef __cplusplus
    00286 }
    00287 #endif
    00288
    00289 #endif //__PACKET32

documentation. Copyright (c) 2002-2003 Politecnico di Torino. All rights reserved.