On Thu, Dec 12, 2002 at 10:50:14AM -0500, Andrew Brown wrote:
> since netbsd's -D and -L seem instrinsically related, yet the official
> tcpdump -D doesn't seem that far off, and since the netbsd change is
> rather recent, how about merging/switching the two functionalities?
> this would mean that -D would give me (for example):
> 
>       % tcpdump -D
>       1.lo0   NULL
>       8.ep0   EN10MB
>       9.wi0   EN10MB IEEE802_11

Yes, that might be a good idea, although that doesn't offer an option to
display just the link-layer types for one particular interface - I guess
we could allow "-i" and "-D" to be used together, and have that display
the link-layer types for the interface specified with "-i" (and maybe
leave out the interface number if that's done).

> i usually end up writing a small program to do just that.  i've
> encountered enough systems that don't have ifconfig -a to get upset
> enough to write such a program.

So far, the only ones I've dealt with are HP-UX (it's time SRCM finally
got around to fixing that, given that their *other* UNIX *does* support
"ifconfig -a":

        hostname$ uname -sr 
        OSF1 V4.0
        hostname$ ifconfig -a
        alt0: flags=c63<UP,BROADCAST,NOTRAILERS,RUNNING,MULTICAST,SIMPLEX>
             inet XXX.XXX.XXX.XXX netmask XXXXXXXX broadcast XXX.XXX.XXX.XXX ipmtu 1500

        alt1: flags=c63<UP,BROADCAST,NOTRAILERS,RUNNING,MULTICAST,SIMPLEX>
             inet XXX.XXX.XXX.XXX netmask XXXXXXXX broadcast XXX.XXX.XXX.XXX ipmtu 
1500 

                ...

) and Windows (which doesn't have "ifconfig", much less "ifconfig -a" -
NT 4.0, as I remember, shows the interface name, but NT
5.0^H^H^H^H^H^HWindows 2000 doesn't, but the names in NT 5.x are ugly
strings containing GUIDs so maybe that was considered uninteresting).

> that's a shame.  especially since i'd like to burn...three of those.
> somehow.  here's my "plan".  you tell me if you hate it.
> 
> (1) use -W to indicate "open the underlying network tap device in
> read/write mode".

Why would tcpdump do that?  It doesn't transmit packets.

> jason thorpe has done a bit of this to the netbsd
> copy of the libpcap code, but only insofar as the bpf unconditionally
> gets opened read/write.  his reasoning:
> 
>       Open the BPF file descriptor as read-write.  Some pcap-using
>       programs (notably, simulators) expect to be able to send
>       packets on the descriptor, as well as receive.
> 
> but that sucks for me, since i like to give special purpose accounts
> read-only access to the bpf so that they can monitor, but not write to
> the network.

You are correct - I would not advocate having libpcap open BPF devices
read-write by default, for that very reason.  I guess it could try
opening each device read-write and, if that fails with EACCES, try
opening it read-only.

> being able to tell pcap_open_live() to use read-only or
> read/write would be a big win (i get what i want and jason gets what
> he wants), and i think i can see how to do it.  pcap_open_live() has a
> promisc argument that could be "altered" to be flags.  promisc could
> then become 0x01 and read/write could be 0x02.  etc.

Unfortunately, as the man page only speaks of "promisc" specifying if
the interface is to be put in promiscuous mode, I don't think we can
assume that applications using promiscuous mode will necessarily pass 1
as the value meaning "promiscuous" - most of them probably do, but I
wouldn't count on all of them doing so.

My inclination would be to do the "try read-write and, if that fails
with EACCESS, try read-only" - that might not do the right thing if some
BPF devices are read-write by the user trying to open them and some are
read-only, but all the BPF devices should, if accessible by a user at
all, be accessible with the same permissions (I guess somebody might
want to make some of them accessible only be root to reserve them for
use by root).

> (2) use -U to tell tcpdump to write the dump to the output file in an
> unbuffered manner.  packets that dribble in take a long time to fill
> the stdio buffer and get flushed to the file.  this can be incredibly
> annoying, especially if you're impatient.

Are you talking about a file being written to with "-w"?  If tcpdump is
just printing text, "-l" makes the output line-buffered.

For a file being written to with "-w", you probably don't want
unbuffered output, you probably just want the output written out before
tcpdump blocks again - that'd do fewer "write()"/"WriteFile()" calls,
and be more efficient.

That could be done by adding a "pcap_dump_flush()" call, to force the
stdio buffer to be flushed, and have tcpdump's main loop be a loop using
"pcap_dispatch()" rather than just being "pcap_loop()", and have it do
the "pcap_dump_flush()" call after "pcap_dispatch()" returns.

> (3) use another letter (there aren't any really good mnemonics left
> off the top of my head, so i'm open to suggestions) to tell tcpdump to
> dump the link layer data as well when using -x or -X.  when printing
> ip datagrams using -X (or -x), the link layer stuff is skipped.  call
> me crazy, but i'd like to be able to see that somewhere.  i initially
> used -L for this (to indicate link layer), but that got used by
> someone else because i was lazy.  -E was already gone at that point.

Yes, that'd be useful.
-
This is the TCPDUMP workers list. It is archived at
http://www.tcpdump.org/lists/workers/index.html
To unsubscribe use mailto:[EMAIL PROTECTED]?body=unsubscribe

Reply via email to