tcpdump mailing list archives
Re: capturing on both interfaces simultaneously
From: Guy Harris <guy () alum mit edu>
Date: Mon, 12 Dec 2011 13:41:18 -0800
On Dec 12, 2011, at 3:59 AM, David Laight wrote:
The linux libpcap has a poll() in the 'memory mapped' kernel interface (in order to check for errors). If the application is using poll() this is an unnecessary system call.
The only way libpcap can infer that the application is using poll() is if it has put the pcap_t in non-blocking mode.
libpcap used to avoid the poll() in that case, but that was causing applications to loop infinitely chewing up CPU; see
the thread that starts at
http://thread.gmane.org/gmane.network.tcpdump.devel/3937
That poll() is unnecessary in non-blocking mode only if the application isn't expecting libpcap to return errors, and
is itself checking for those errors after the poll() call. That would be the case only if the application knew it had
to do that special Linux-specific stuff.
I also think that interface could defer freeing the last rx buffer until the request to read another packet. That would avoid the necessity of a buffer copy for applications that don't want to use callbacks.
That strategy was attempted by
commit 54ef309e921c11a4e80cd7a26d9e25d30c833e14
Author: Guy Harris <gharris@steve.local>
Date: Mon Mar 23 23:18:25 2009 -0700
In memory-mapped mode, don't release the packet as soon as the callback
finishes processing the packet; in some cases, such as pcap_next() and
pcap_next_ex(), the packet data is expected to be available after the
callback returns, and only discarded when the next packet is read.
in response to
http://thread.gmane.org/gmane.network.tcpdump.devel/3571
and backed out by
commit 703acf10e7b3a128c426937712cd12ae65e3b1e9
Author: Guy Harris <gharris@steve.local>
Date: Fri Jul 3 14:37:06 2009 -0700
Not releasing a packet in Linux memory-mapped mode until we try to read
the next packet breaks select(). Back those changes out; we'll have to
fix the behavior of pcap_next* by making a copy of the packet.
in response to
http://thread.gmane.org/gmane.network.tcpdump.devel/3937
and replaced by the current behavior in
commit 34e950492a8b40673297d0888fafc4f94689cd29
Author: Guy Harris <gharris@steve.local>
Date: Thu Jul 16 15:08:12 2009 -0700
When doing Linux mmapped capture:
Allocate a buffer into which to copy a packet, and have the
callback for pcap_next() and pcap_next_ex() copy to that buffer
and return a pointer to that buffer; we can't return the packet
data pointer passed to the callback, as, once the callback
returns, that buffer can be overwritten, even before you read
the next packet.
Don't tweak filter programs passed into the kernel to return
65535 on success - we don't have to, as we're not reading
packets with recvfrom(), and we don't want to, as, if we return
the actual snapshot length, the kernel will copy less data to
the ring buffer.
Truncate the packet snapshot length to the specified length, as
we might not have a filter to do that.
If you have a change that will eliminate the need for the copy *without* breaking Mike Kershaw's code, please
contribute it.-
This is the tcpdump-workers list.
Visit https://cod.sandelman.ca/ to unsubscribe.
Current thread:
- Re: capturing on both interfaces simultaneously, (continued)
- Re: capturing on both interfaces simultaneously Guy Harris (Dec 12)
- Re: capturing on both interfaces simultaneously abhinav narain (Dec 12)
- Re: capturing on both interfaces simultaneously Guy Harris (Dec 12)
- Re: capturing on both interfaces simultaneously dragorn (Dec 12)
- Re: capturing on both interfaces simultaneously Guy Harris (Dec 12)
- Re: capturing on both interfaces simultaneously abhinav narain (Dec 15)
- Re: capturing on both interfaces simultaneously Guy Harris (Dec 11)
- Re: capturing on both interfaces simultaneously abhinav narain (Dec 12)
- Re: capturing on both interfaces simultaneously Guy Harris (Dec 12)
- Re: capturing on both interfaces simultaneously David Laight (Dec 12)
- Re: capturing on both interfaces simultaneously Guy Harris (Dec 12)
- Re: capturing on both interfaces simultaneously Guy Harris (Dec 12)
- Re: capturing on both interfaces simultaneously David Laight (Dec 13)
- Re: capturing on both interfaces simultaneously David Laight (Dec 13)
- Re: capturing on both interfaces simultaneously David Laight (Dec 13)
- Re: capturing on both interfaces simultaneously Guy Harris (Dec 10)
- Re: capturing on both interfaces simultaneously abhinav narain (Dec 10)
- Re: capturing on both interfaces simultaneously Guy Harris (Dec 10)
