Subject: tcpdump/libpcap and variable length link level headers
To: None <tech-net@netbsd.org>
From: Ignatios Souvatzis <is@jocelyn.rhein.de>
List: tech-net
Date: 10/06/1999 22:15:01
Hi,
I'm thinking about how to do libpcap matching for ARCnet.
The problem is this:
- very few protocols (unformatted diagnostics, deprecated ip and arp,
some factory-network control protocols) use off_nl == 3
- real computer protocols (ip, arp, rarp, ipv6, appletalk, ipx, banyan vines)
use a link level fragmentation header, where
ll[3] == 0xff && (ll[7] == odd || ll[7] == 0)
first fragment (with payload header), off_nl == 10
(actually, on sending, ll[4]==0xff, ll[5] == 0xff, ll[6] is a copy
of the protocol type in ll[2], but this is not checked when receiving)
(ll[3] == odd < 0xff || ll[3] == 0)
first fragment (with payload header), off_nl == 6
ll[3] == 0xff && ll[7] == even || ll[3] == even
nonfirst fragment, no payload matching possible
Did anybody ever have an idea how to handle this? I understand the more
sophisticated Ethernet/FDDI/Tokenring encoding might have variable encodings,
too, but tcpdump/libpcap just assume the most common version?
My unready thoughts
basically two expressions (one for off_nl == 10, one for off_nl == 6) for the
payload match need to be created, B_ANDed with the right part of the above,
and B_ORed together. Unfortunately, off_nl is more or less considered to be
static in libpcap.
Regards,
Ignatios