Date: Fri, 9 Nov 2001 22:55:32 +1100 From: Edwin Groothuis <edwin@mavetju.org> To: freebsd-hackers@freebsd.org Subject: pcap/bpf in a multi-threaded environment Message-ID: <20011109225532.A3919@k7.mavetju.org>
next in thread | raw e-mail | index | archive | help
Greetings,
The past couple of days I've been plagued by a strange behaviour
of something between libpcap and the bpf-device. As you can read
in PR bin/31649, the behaviour of libpcap is very different if you
compile it on gcc with or without -pthread:
Without -pthread, it calls the callback function everytime it has
received a packet.
With -pthread, it calls the callback function only when the
input-buffer (about 32Kb) is nearly full.
I've done some investigation (with my limited knowledge of what
happens between a call to read() and when it ends up in bpfread())
and saw the difference between a call with and without the -pthreads
option:
in /usr/src/contrib/libpcap/pcap-bpf.c, line 81, the function pcap_read():
cc = read(p->fd, (char *)p->buffer, p->bufsize);
at a certain moment, in the read()-code, bpfread() is called:
/sys/net/bpf.c, line 491
In a non-threaded environment, this if-statement is false
if (ioflag & IO_NDELAY) {
splx(s);
return (EWOULDBLOCK);
}
In a threaded environment, the if-statement is true, splx(s) is
called and EWOULDBLOCK is returned. Then it's silent for a while,
while the packets are being collected (somewhere) and at a certain
moment the buffer is nearly full and the read() in pcap_read() is
finished.
So yeah, I'm stuck. All I want is in threaded mode to have the same
behaviour as I have in non-threaded mode. Anybody any ideas on how
to fix this?
Thanks in advance,
Edwin
--
Edwin Groothuis | Personal website: http://www.MavEtJu.org
edwin@mavetju.org | Interested in MUDs? Visit Fatal Dimensions:
------------------+ http://www.FatalDimensions.org/
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20011109225532.A3919>
