Hello,
My program is written in Delphi 6.0
I use 2 interfaces
in : card 0
out : card 1
I use 4 handlers:
Adapter_R_in : Reading data in the interface 0
Adapter_W_in : Writing data in the interface 0
Adapter_R_out : Reading data in the interface 1
Adapter_W_out : Writing data in the interface 1
NetworkSetup_in : Registre for set parameters in interface 0
NetworkSetup_out : Registre for set parameters in interface 1
(these parameters are similar for both interfaces)
I use 2 process
demo_in. : read data from the interface 0 and then write to the interface
1
demo_out : read data from the interface 1 and then write to the interface
0
Part of my code is here:
Procedure Setup
begin
Adapter_R_in:=nil;
Adapter_R_in:= PacketOpenAdapter(@s_in);
asm add esp,4 end;
Adapter_W_in:=nil;
Adapter_W_in:= PacketOpenAdapter(@s_in);
asm add esp,4 end;
if (Adapter_R_in^.hFile=INVALID_HANDLE_VALUE) then
begin halt; end;
if (Adapter_W_in^.hFile=INVALID_HANDLE_VALUE) then
begin halt; end;
// mode promiscous
if not(PacketSetHwFilter(Adapter_R_in,NetworkSetup_in.mode)) then halt;
asm
add esp,8
end;
if not(PacketSetBuff(Adapter_R_in,NetworkSetup_in.memoriesize)) then halt;
asm
add esp,8
end;
l:=NetworkSetup_in.memoriesize;
PacketSetReadTimeout(Adapter_R_in,0);
asm
add esp,8
end;
Packet_R_in :=NIL;
Packet_R_in := PacketAllocatePacket();
if Packet_R_in=NIL then halt;
Packet_w_in :=NIL;
Packet_w_in := PacketAllocatePacket();
if Packet_w_in=NIL then halt;
l:=NetworkSetup_in.memoriesize;
PacketInitPacket(Packet_R_in,@buffer_in,l);
asm
add esp,12
end;
/// end of the interface in
Adapter_R_out:=nil;
Adapter_R_out:= PacketOpenAdapter(@s_out);
asm add esp,4 end;
Adapter_W_out:=nil;
Adapter_W_out:= PacketOpenAdapter(@s_out);
asm add esp,4 end;
if (Adapter_R_out^.hFile=INVALID_HANDLE_VALUE) then
begin halt; end;
if (Adapter_W_out^.hFile=INVALID_HANDLE_VALUE) then
begin halt; end;
// mode promiscous
if not(PacketSetHwFilter(Adapter_R_out,NetworkSetup_out.mode)) then halt;
asm
add esp,8
end;
if not(PacketSetBuff(Adapter_R_out,NetworkSetup_out.memoriesize)) then halt;
asm
add esp,8
end;
PacketSetReadTimeout(Adapter_R_out,0);
asm
add esp,8
end;
Packet_R_out :=NIL;
Packet_R_out := PacketAllocatePacket();
if Packet_R_out=NIL then halt;
Packet_w_out :=NIL;
Packet_w_out := PacketAllocatePacket();
if Packet_w_out=NIL then halt;
l:=NetworkSetup_in.memoriesize;
PacketInitPacket(Packet_R_out,@buffer_out,l);
asm
add esp,12
end;
/// end of the interface out
finalizo:=false;
lin_mac :=0;
lout_mac :=0;
vdemo:=demo.create;
vdemo.Priority:=tplowest;
vdemo_out:=demo_out.create;
vdemo_out.Priority:=tpTimeCritical;
vdemo_in:=demo_in.create;
vdemo_in.Priority:=tpTimeCritical;
// vdemo_in : process 0
// vdemo_out : process 1
//
// by the moment I dont use events
end;
/// Begin of the process demo_in
Procedure demo_in.execute;
{$A-}
type header=record
tv_sec :integer;
tv_microsec :integer;
bh_caplen :integer;
bh_datalen :integer;
cabecera :byte;
end;
{$A+}
var ps:pointer;
pheader :^header;
i,j :Integer;
s :string[255];
P,P1 :pointer;
ports_in,portd_in :word;
IP_D_in :Cardinal;
IP_S_in :Cardinal;
MAC_D:tmac;
MAC_S:tmac;
TAMANO_IP : WORD;
SeqNumber :Cardinal;
Acknolegment :Cardinal;
LL :Integer;
chk_IP :Cardinal;
chk_IP_Word :Word;
ii,jj:integer;
length_user :integer;
length_number:integer;
index_number :integer;
// new variables
existe_usuario :boolean;
existe_usuario_i :integer;
begin
repeat
if(PacketReceivePacket(Adapter_R_in,Packet_R_in,TRUE)=FALSE) then
begin
halt;
end; asm add esp,12; end;
offset_in:=0;
if packet_R_in^.ulBytesReceived<>0 then
repeat
pheader:=@buffer_in;
tv_seg :=pheader^.tv_sec;
tv_microseg :=pheader^.tv_microsec;
tlen1_in :=pheader^.bh_datalen; // the real size of the packet
tlen_in :=pheader^.bh_caplen;
offset_in:=offset_in+pheader^.cabecera;
real_time:=pheader^.tv_sec;
// Here my code that modifies the packet for a H323 application
//
// writing data to the interface out
Move((@buffer_in[offset_in])^,buffer_w_out,tlen1_in);
ll:=tlen1_in;
PacketInitPacket(Packet_W_out,@buffer_W_out,ll);asm add esp,12 end;
ll:=1;
PacketSetNumWrites(Adapter_W_out,ll);asm add esp,8;end;
PacketSendPacket(Adapter_W_out,Packet_W_out,TRUE);asm add esp,12 end;
offset_in:=Packet_WORDALING(offset_in+tlen1_in);
until(offset_in>=packet_R_in^.ulBytesReceived) or (finalizo);
// finalizo is a variable to finish the process
until(finalizo);
finalizo:=false;
end;
// the same procedure for demo_out process
// Note: the function integer is 4 bytes length
Function Packet_WORDALING(L:integer):integer;
begin
Result:=(L+3) and (not (integer(3)));
end;
----- Original Message -----
From: "Jesper Munkholm Jensen (JMJ)" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Tuesday, July 30, 2002 9:02 AM
Subject: RE: [WinPcap-users] Loosing Packets or truncated packets
> You could try publishing the relevant code parts, and see what the
response
> is. I'll be glad to browse through it and se if I can see something you've
> missed. I've been through most aspects of the library about know...
>
> - Jesper
>
> -----Original Message-----
> From: David Rodriguez [mailto:[EMAIL PROTECTED]]
> Sent: 8. august 2002 16:03
> To: [EMAIL PROTECTED]
> Subject: Re: [WinPcap-users] Loosing Packets or truncated packets
>
>
> I use packet.ddl lybrary, I dont use pcaplib
>
> The strange thing is that when I use more memory more problems.
> When I used 256k of buffer user and system I got rarely errors.
>
> I dont set any kind of filter the one is promiscous mode.
>
> David
>
>
>
>
> ----- Original Message -----
> From: "Jesper Munkholm Jensen (JMJ)" <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED]>
> Sent: Tuesday, July 30, 2002 8:11 AM
> Subject: RE: [WinPcap-users] Loosing Packets or truncated packets
>
>
> > Do you use the Packet.dll or the Winpcap?
> >
> > A thing to remember is that WinPcap library function pcap_next(),
returns
> a
> > pointer to the packet in its own buffer, so if you hang on to the packet
> to
> > long you may risk it being overwritten. In bursts maybe this could cause
> the
> > error, but the depends on your code. Can't see how using a greater
buffer
> > would enhance this error, so maybe i'm of track. Just a thought...
> >
> > - Jesper
> >
> > -----Original Message-----
> > From: David Rodriguez [mailto:[EMAIL PROTECTED]]
> > Sent: 8. august 2002 15:06
> > To: [EMAIL PROTECTED]
> > Subject: Re: [WinPcap-users] Loosing Packets or truncated packets
> >
> >
> > I dont use any filter
> >
> > I use the following:
> >
> > NdisSetPacketFlags(pPacket, NDIS_FLAGS_SKIP_LOOPBACK); //
> > for avoid reading packets writing in one interface were read it
again.
> >
> > I use also win 2000
> >
> > David
> >
> >
> > ----- Original Message -----
> > From: "Loris Degioanni" <[EMAIL PROTECTED]>
> > To: <[EMAIL PROTECTED]>
> > Sent: Tuesday, July 30, 2002 3:53 AM
> > Subject: Re: [WinPcap-users] Loosing Packets or truncated packets
> >
> >
> > > Do you set a filter? If yes, what is its snaplen?
> > >
> > > Loris
> > >
> > > > Hello
> > > >
> > > > I am doing an application using 2 nic cards, I read information from
> one
> > > interface
> > > >
> > > > and then send for the other interface.
> > > >
> > > > The problem is when I do ping from a router (the router send the
ping
> > > >
> > > > every 1 ms ) the packet is truncated to 64 bytes. The size of the
> ping
> > > >
> > > > is 74 bytes.
> > > >
> > > > The strange thing is tha if I use 256K of buffer for 2 interfaces I
> > rarely
> > > get the
> > > >
> > > > error. But when I increase the buffer to 2M I get a lot of error
> > specially
> > > when the
> > > >
> > > > traffic is burstly.
> > > >
> > > > What the increase of the buffer produce this error, does the driver
> copy
> > > all
> > > >
> > > > the content of the kernel memory to the user memory even the memory
> has
> > > >
> > > > little information ?
> > > >
> > > > Note: My timeout in PacketSetReadTimeout is Zero
> > > >
> > > >
> > > >
> > > > Thaks in advanced
> > > >
> > > >
> > > >
> > > > David
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > David Rodriguez
> > > > davidgrs
> > > >
> > > >
> > >
> >
>
> --------------------------------------------------------------------------
> > > ------
> > > > Join the world's largest e-mail service with MSN Hotmail. Click Here
> > > >
> > > >
> > >
> >
>