Date: Wed, 6 Nov 2002 10:03:06 +0200 From: "Petri Helenius" <pete@he.iki.fi> To: "Barney Wolff" <barney@tp.databus.com> Cc: <freebsd-net@FreeBSD.ORG> Subject: Re: bpf Message-ID: <05af01c2856a$f103c960$862a40c1@PHE> References: <03fe01c28386$186fed80$862a40c1@PHE> <20021103225402.GA28812@tp.databus.com>
next in thread | previous in thread | raw e-mail | index | archive | help
> I believe you're misunderstanding the meaning of the timeout in select(2). > Timeout applies only when no FDs are ready. The specific problem with bpf is that one might have a half-full buffer of captured data when the select timeout hits. In that case the select returns with no FDs ready while I think it really should return with the bpf fd. (and if you look at the code on sys/net/bpf.c, there is timeout handling towards that goal) but I´ve yet to figure out where it goes wrong. IMO, at timeout the code should check if bd_slen > 0 and if yes, do ROTATE_BUFFERS and bpf_wakeup() Unfortunately I´m not a kernel wizard enough to have fixed this, at least not yet. The functionality I´m looking for is to get all the packets accumulated, say in 1 second in single read regardless of if I got a buffer´s full of data. > > Also, you might be better off setting immediate mode on your bpf fd, > if you want a return before the buffer is full. > Immediate mode practically causes the reader to be waken up for every packet, ending up with huge number of small reads which is highly ineffective. Pete > On Mon, Nov 04, 2002 at 12:12:26AM +0200, Petri Helenius wrote: > > > > I believe the select operation on bpf is not functioning as supposed to. > > I?m calling select with 100ms timeout. The bpf interface is listening to > > an interface with constant packet rate, so it?s certain that multiple packets > > have been received during the select call. However the fd for the bpf > > device is not set until the bpf buffer is full. (which might be several seconds > > away since I?m using fairly large bpf buffers) > > > > Looking at the code I get the impression that if there are packets on the bpf > > buffer when the select timeouts, it should return the fd for the bpf ? > > > > Pete > > > > > > > > To Unsubscribe: send mail to majordomo@FreeBSD.org > > with "unsubscribe freebsd-net" in the body of the message > > -- > Barney Wolff http://www.databus.com/bwresume.pdf > I'm available by contract or FT, in the NYC metro area or via the 'Net. > To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?05af01c2856a$f103c960$862a40c1>