--- Begin Message ---
On Mar 24, 2021, at 12:32 AM, Jan Adam <ja...@hilscher.com> wrote:
>> So, with incl_len equal to {PayloadSize,VarSize} + 54, orig_len would be
>> equal to {original PayloadSize} + 54, so the original payload size would be
>> orig_len - 54.
>>
>> That would allow the original size and the sliced size of the payload to be
>> calculated, so that should work.
>
> Yes it should work.
>
> I have the feeling this is more about the design then the implementation.
It's about either 1) saying "slicing is forbidden" or 2) saying "here's how you
do slicing". In either case, there would be implementation changes to tcpdump
and Wireshark's editcap tool, as both of them can do packet slicing when
reading a file and writing another file from the contents (although I just
discovered that tcpdump doesn't appear to correctly set the snapshot length in
the header of the output capture file, which I need to fix).
> I will try to explain our design decision of the footer. We have observed
> that customers using Wireshark don't think about the header when counting the
> bytes in the hex dump and expect the frame to start at the first byte and as
> a result read out wrong values.
Perhaps that's an indication that Wireshark needs to do a better job of
distinguishing between metadata headers and packet data, then. (I already
think so, as 1) counting metadata headers as data means, for example, that you
get bogus bytes/second values and 2) separating them may make it more
straightforward to implement transformation from, for example,
> Therefore our idea was to put the additional info at the end in form of a
> footer.
>
> Maybe you can help me understand more of the general concept, how is this
> slicing handled for a DLT with a header or footer in general?
> If you take for example another DLT:
> https://www.tcpdump.org/linktypes/LINKTYPE_LINUX_SLL.html it has 16 byte
> header size, how does editcap or tcpdump take that into account? Is it
> possible to slice without taking the header size into account?
For headers, it currently will do what would be done when doing a live capture
and slicing it - the snaplen is the maximum size of the data in the packet
record, *including* metadata headers.
Changing that might be considered an incompatible change, but the ability to
say "write packets out with no more than N bytes of *on-the-network packet
data*" (rather than "no more than N bytes of *total* packet data, including
metadata headers"), as a separate option, might be useful.
That would be fairly say to do for *ex post facto* slicing of an existing
capture file. It would involve code that knows the size of the metadata header
for all link-layer types, so that would be a bit of an architectural change to
the code, but not a painful one.
It's trickier for live captures, but, if the slicing is done by a BPF program,
where the return value of the BPF filter indicates the number of bytes of total
packet data to write, that could be done even if the metadata header is
variable-length. That's the case for *BSD/macOS, Linux, Solaris, AIX, and, as
far as I know, Windows with Npcap.
I'm not sure there *are* any currently cases where a given LINKTYPE_ value
specifies a metadata trailer. There are some network devices that append
metadata trailers to Ethernet packets and route them to a host for capturing,
with Wireshark having heuristics for trying to guess whether there's a metadata
trailer on the frame or not and which type of metadata trailer it is; slicing,
whether done at capture time or *ex post facto*, will just slice the metadata
trailer in two or slice it off completely.
--- End Message ---
_______________________________________________
tcpdump-workers mailing list
tcpdump-workers@lists.tcpdump.org
https://lists.sandelman.ca/mailman/listinfo/tcpdump-workers