メイン   モジュール   デー タ構造   ファイルリスト   データフィールド   グローバル   関連ページ   注意事項   English

Packet.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 
00030 #ifndef __PACKET_INCLUDE______
00031 #define __PACKET_INCLUDE______
00032 
00033 #define NTKERNEL    
00034 
00035 #include "jitter.h"
00036 #include "tme.h"
00037 #include "win_bpf.h"
00038 
00039 #define  MAX_REQUESTS   32 
00040 
00041 #define Packet_ALIGNMENT sizeof(int) 
00042 #define Packet_WORDALIGN(x) (((x)+(Packet_ALIGNMENT-1))&~(Packet_ALIGNMENT-1))  
00043 
00044 /***************************/
00045 /*         IOCTLs          */
00046 /***************************/
00047 
00056 #define  BIOCSETBUFFERSIZE 9592
00057 
00068 #define  BIOCSETF 9030
00069 
00076 #define  BIOCGSTATS 9031
00077 
00083 #define  BIOCSRTIMEOUT 7416
00084 
00092 #define  BIOCSMODE 7412
00093 
00100 #define  BIOCSWRITEREP 7413
00101 
00107 #define  BIOCSMINTOCOPY 7414
00108 
00114 #define  BIOCSETOID 2147483648
00115 
00121 #define  BIOCQUERYOID 2147483652
00122 
00130 #define  BIOCSETDUMPFILENAME 9029
00131 
00138 #define  BIOCGEVNAME 7415
00139 
00147 #define  BIOCSENDPACKETSNOSYNC 9032
00148 
00157 #define  BIOCSENDPACKETSSYNC 9033
00158 
00165 #define  BIOCSETDUMPLIMITS 9034
00166 
00173 #define BIOCISDUMPENDED 7411
00174 
00175 // Working modes
00176 #define MODE_CAPT 0x0       
00177 #define MODE_STAT 0x1       
00178 #define MODE_MON  0x2       
00179 #define MODE_DUMP 0x10      
00180 
00181 
00182 #define IMMEDIATE 1         
00183 
00184 
00185 // The following definitions are used to provide compatibility 
00186 // of the dump files with the ones of libpcap
00187 #define TCPDUMP_MAGIC 0xa1b2c3d4    
00188 #define PCAP_VERSION_MAJOR 2        
00189 #define PCAP_VERSION_MINOR 4        
00190 
00191 
00196 struct packet_file_header 
00197 {
00198     UINT magic;             
00199     USHORT version_major;   
00200     USHORT version_minor;   
00201     UINT thiszone;          
00202     UINT sigfigs;           
00203     UINT snaplen;           
00204     UINT linktype;          
00205 };
00206 
00211 struct sf_pkthdr {
00212     struct timeval  ts;         
00213     UINT            caplen;     
00214 
00215 
00216     UINT            len;        
00217 };
00218 
00228 typedef struct _INTERNAL_REQUEST {
00229     LIST_ENTRY      ListElement;        
00230     PIRP            Irp;                
00231     BOOLEAN         Internal;           
00232     NDIS_REQUEST    Request;            
00233 } INTERNAL_REQUEST, *PINTERNAL_REQUEST;
00234 
00242 typedef struct _PACKET_RESERVED {
00243     LIST_ENTRY      ListElement;        
00244     PIRP            Irp;                
00245     PMDL            pMdl;               
00246     BOOLEAN         FreeBufAfterWrite;  
00247 
00248     ULONG           Cpu;                
00249 }  PACKET_RESERVED, *PPACKET_RESERVED;
00250 
00251 #define RESERVED(_p) ((PPACKET_RESERVED)((_p)->ProtocolReserved)) 
00252 
00253 
00258 typedef struct _DEVICE_EXTENSION {
00259     NDIS_HANDLE    NdisProtocolHandle;  
00260     NDIS_STRING    AdapterName;         
00261     PWSTR          ExportString;        
00262 
00263 } DEVICE_EXTENSION, *PDEVICE_EXTENSION;
00264 
00270 typedef struct __CPU_Private_Data
00271 {
00272     ULONG   P;                  
00273     ULONG   C;                  
00274     ULONG   Free;               
00275     PUCHAR  Buffer;             
00276     ULONG   Accepted;           
00277 
00278 
00279 
00280     ULONG   Received;           
00281 
00282 
00283 
00284     ULONG   Dropped;            
00285 
00286 
00287 
00288     ULONG   Processing;         
00289     PMDL    TransferMdl1;       
00290     PMDL    TransferMdl2;       
00291     ULONG   NewP;               
00292 }
00293     CpuPrivateData;
00294 
00295 
00303 typedef struct _OPEN_INSTANCE
00304 {
00305     PDEVICE_EXTENSION   DeviceExtension;    
00306 
00307     NDIS_HANDLE         AdapterHandle;      
00308     UINT                Medium;             
00309 
00310     NDIS_HANDLE         PacketPool;         
00311     PIRP                OpenCloseIrp;       
00312 
00313     KSPIN_LOCK          RequestSpinLock;    
00314     LIST_ENTRY          RequestList;        
00315     LIST_ENTRY          ResetIrpList;       
00316     INTERNAL_REQUEST    Requests[MAX_REQUESTS]; 
00317     PMDL                BufferMdl;          
00318     PKEVENT             ReadEvent;          
00319     HANDLE              ReadEventHandle;    
00320     UNICODE_STRING      ReadEventName;      
00321 
00322 
00323 
00324     PUCHAR              bpfprogram;         
00325 
00326 
00327 
00328 
00329     JIT_BPF_Filter      *Filter;            
00330 
00331     UINT                MinToCopy;          
00332 
00333     LARGE_INTEGER       TimeOut;            
00334 
00335                                             
00336     int                 mode;               
00337     LARGE_INTEGER       Nbytes;             
00338     LARGE_INTEGER       Npackets;           
00339     NDIS_SPIN_LOCK      CountersLock;       
00340     UINT                Nwrites;            
00341 
00342     UINT                Multiple_Write_Counter; 
00343     NDIS_EVENT          WriteEvent;         
00344     NDIS_EVENT          IOEvent;            
00345     NDIS_STATUS         IOStatus;           
00346     BOOLEAN             Bound;              
00347 
00348     HANDLE              DumpFileHandle;     
00349     PFILE_OBJECT        DumpFileObject;     
00350     PKTHREAD            DumpThreadObject;   
00351     HANDLE              DumpThreadHandle;   
00352     NDIS_EVENT          DumpEvent;          
00353     LARGE_INTEGER       DumpOffset;         
00354     UNICODE_STRING      DumpFileName;       
00355     UINT                MaxDumpBytes;       
00356 
00357     UINT                MaxDumpPacks;       
00358 
00359 
00360     BOOLEAN             DumpLimitReached;   
00361 
00362     MEM_TYPE            mem_ex;             
00363     TME_CORE            tme;                
00364     NDIS_SPIN_LOCK      MachineLock;        
00365     UINT                MaxFrameSize;       
00366 
00367     CpuPrivateData      CpuData[32];        
00368     ULONG               ReaderSN;           
00369     ULONG               WriterSN;           
00370 
00371     ULONG               Size;               
00372     ULONG               SkipProcessing;     
00373 
00374 
00375 
00376 }
00377 OPEN_INSTANCE, *POPEN_INSTANCE;
00378 
00386 struct PacketHeader
00387 {
00388     ULONG SN;                               
00389     struct bpf_hdr header;                  
00390 };
00391 
00392 
00393 #define TRANSMIT_PACKETS 256    
00394 
00395 
00396 
00398 #define EXIT_SUCCESS(quantity) Irp->IoStatus.Information=quantity;\
00399     Irp->IoStatus.Status = STATUS_SUCCESS;\
00400     IoCompleteRequest(Irp, IO_NO_INCREMENT);\
00401     return STATUS_SUCCESS;\
00402 
00403 
00404 #define EXIT_FAILURE(quantity) Irp->IoStatus.Information=quantity;\
00405     Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;\
00406     IoCompleteRequest(Irp, IO_NO_INCREMENT);\
00407     return STATUS_UNSUCCESSFUL;\
00408 
00409 
00414 /***************************/
00415 /*       Prototypes        */
00416 /***************************/
00417 
00434 NTSTATUS
00435 DriverEntry(
00436     IN PDRIVER_OBJECT DriverObject,
00437     IN PUNICODE_STRING RegistryPath
00438     );
00439 
00449 PWCHAR getAdaptersList(VOID);
00450 
00457 PKEY_VALUE_PARTIAL_INFORMATION getTcpBindings(VOID);
00458 
00470 BOOLEAN createDevice(
00471     IN OUT PDRIVER_OBJECT adriverObjectP,
00472     IN PUNICODE_STRING amacNameP,
00473     NDIS_HANDLE aProtoHandle);
00474 
00486 NTSTATUS
00487 NPF_Open(
00488     IN PDEVICE_OBJECT DeviceObject,
00489     IN PIRP Irp
00490     );
00491 
00501 VOID
00502 NPF_OpenAdapterComplete(
00503     IN NDIS_HANDLE  ProtocolBindingContext,
00504     IN NDIS_STATUS  Status,
00505     IN NDIS_STATUS  OpenErrorStatus
00506     );
00507 
00518 NTSTATUS
00519 NPF_Close(
00520     IN PDEVICE_OBJECT DeviceObject,
00521     IN PIRP Irp
00522     );
00523 
00532 VOID
00533 NPF_CloseAdapterComplete(
00534     IN NDIS_HANDLE  ProtocolBindingContext,
00535     IN NDIS_STATUS  Status
00536     );
00537 
00560 NDIS_STATUS
00561 NPF_tap(
00562     IN NDIS_HANDLE ProtocolBindingContext,
00563     IN NDIS_HANDLE MacReceiveContext,
00564     IN PVOID HeaderBuffer,
00565     IN UINT HeaderBufferSize,
00566     IN PVOID LookAheadBuffer,
00567     IN UINT LookaheadBufferSize,
00568     IN UINT PacketSize
00569     );
00570 
00581 VOID
00582 NPF_TransferDataComplete(
00583     IN NDIS_HANDLE ProtocolBindingContext,
00584     IN PNDIS_PACKET Packet,
00585     IN NDIS_STATUS Status,
00586     IN UINT BytesTransferred
00587     );
00588 
00595 VOID
00596 NPF_ReceiveComplete(IN NDIS_HANDLE  ProtocolBindingContext);
00597 
00621 NTSTATUS
00622 NPF_IoControl(
00623     IN PDEVICE_OBJECT DeviceObject,
00624     IN PIRP Irp
00625     );
00626 
00627 VOID
00628 
00638 NPF_RequestComplete(
00639     IN NDIS_HANDLE   ProtocolBindingContext,
00640     IN PNDIS_REQUEST pRequest,
00641     IN NDIS_STATUS   Status
00642     );
00643 
00656 NTSTATUS
00657 NPF_Write(
00658             IN PDEVICE_OBJECT DeviceObject,
00659             IN PIRP Irp
00660             );
00661 
00662 
00681 INT NPF_BufferedWrite(IN PIRP Irp, 
00682                         IN PCHAR UserBuff, 
00683                         IN ULONG UserBuffSize,
00684                         BOOLEAN sync);
00685 
00695 VOID
00696 NPF_SendComplete(
00697     IN NDIS_HANDLE   ProtocolBindingContext,
00698     IN PNDIS_PACKET  pPacket,
00699     IN NDIS_STATUS   Status
00700     );
00701 
00711 VOID
00712 NPF_ResetComplete(
00713     IN NDIS_HANDLE  ProtocolBindingContext,
00714     IN NDIS_STATUS  Status
00715     );
00716 
00720 VOID
00721 NPF_Status(
00722     IN NDIS_HANDLE   ProtocolBindingContext,
00723     IN NDIS_STATUS   Status,
00724     IN PVOID         StatusBuffer,
00725     IN UINT          StatusBufferSize
00726     );
00727 
00728 
00732 VOID
00733 NPF_StatusComplete(IN NDIS_HANDLE  ProtocolBindingContext);
00734 
00743 VOID
00744 NPF_Unload(IN PDRIVER_OBJECT DriverObject);
00745 
00746 
00765 NTSTATUS
00766 NPF_Read(
00767     IN PDEVICE_OBJECT DeviceObject,
00768     IN PIRP Irp
00769     );
00770 
00776 NTSTATUS
00777 NPF_ReadRegistry(
00778     IN  PWSTR              *MacDriverName,
00779     IN  PWSTR              *PacketDriverName,
00780     IN  PUNICODE_STRING     RegistryPath
00781     );
00782 
00789 NTSTATUS
00790 NPF_QueryRegistryRoutine(
00791     IN PWSTR     ValueName,
00792     IN ULONG     ValueType,
00793     IN PVOID     ValueData,
00794     IN ULONG     ValueLength,
00795     IN PVOID     Context,
00796     IN PVOID     EntryContext
00797     );
00798 
00804 VOID NPF_BindAdapter(
00805     OUT PNDIS_STATUS            Status,
00806     IN  NDIS_HANDLE             BindContext,
00807     IN  PNDIS_STRING            DeviceName,
00808     IN  PVOID                   SystemSpecific1,
00809     IN  PVOID                   SystemSpecific2
00810     );
00811 
00823 VOID
00824 NPF_UnbindAdapter(
00825     OUT PNDIS_STATUS        Status,
00826     IN  NDIS_HANDLE         ProtocolBindingContext,
00827     IN  NDIS_HANDLE         UnbindContext
00828     );
00829 
00842 int bpf_validate(struct bpf_insn *f,int len, uint32 mem_ex_size);
00843 
00860 UINT bpf_filter(register struct bpf_insn *pc,
00861                 register UCHAR *p,
00862                 UINT wirelen,
00863                 register UINT buflen,
00864                 PMEM_TYPE mem_ex,
00865                 PTME_CORE tme,
00866                 struct time_conv *time_ref);
00867 
00885 UINT bpf_filter_with_2_buffers(register struct bpf_insn *pc,
00886                                register UCHAR *p,
00887                                register UCHAR *pd,
00888                                register int headersize,
00889                                UINT wirelen,
00890                                register UINT buflen,
00891                                PMEM_TYPE mem_ex,
00892                                PTME_CORE tme,
00893                                struct time_conv *time_ref);
00894 
00902 NTSTATUS NPF_OpenDumpFile(POPEN_INSTANCE Open , PUNICODE_STRING fileName, BOOLEAN append);
00903 
00912 NTSTATUS NPF_StartDump(POPEN_INSTANCE Open);
00913 
00921 VOID NPF_DumpThread(PVOID Open);
00922 
00929 NTSTATUS NPF_SaveCurrentBuffer(POPEN_INSTANCE Open);
00930 
00943 VOID NPF_WriteDumpFile(PFILE_OBJECT FileObject,
00944                                 PLARGE_INTEGER Offset,
00945                                 ULONG Length,
00946                                 PMDL Mdl,
00947                                 PIO_STATUS_BLOCK IoStatusBlock);
00948 
00949 
00950 
00956 NTSTATUS NPF_CloseDumpFile(POPEN_INSTANCE Open);
00957 
00962 UINT GetBuffOccupation(POPEN_INSTANCE Open);
00963 
00975 #ifdef NDIS50
00976 NDIS_STATUS NPF_PowerChange(IN NDIS_HANDLE ProtocolBindingContext, IN PNET_PNP_EVENT pNetPnPEvent);
00977 #endif
00978 
00987 #endif  /*main ifndef/define*/

documentation. Copyright (c)2002-2003 Politecnico di Torino.
2005 translated by Telebusiness,Inc.
 All rights reserved.