Wireshark mailing list archives

Re: Reassemble serial protocols payloads


From: Guy Harris <gharris () sonic net>
Date: Sun, 12 Jul 2020 02:14:23 -0700

On Jul 5, 2020, at 8:05 AM, Tomasz Moń <desowin () gmail com> wrote:

I am trying to implement reassembly for FTDI MPSSE protocol. The
desegment API sounds like an excellent choice, because there can be
more serial protocols implemented in the future that share similar
characteristics to MPSSE (i.e. are designed around asynchronous
character transmission).

Each time FTDI FT passes the payload to MPSSE dissector, MPSSE can:
 * dissect the data just fine if it received (one or more) complete
function code with parameters,
 * dissect as much as it can (complete function code with parameters)
and request X additional bytes

The value X in some cases is known from the beginning, but in some
cases it is only an estimate. It is only an estimate if the missing
data includes the variable data length parameter (i.e. MPSSE dissector
knows that it is a data shifting command, but does not know how many
bytes the command will send out, because the length is in the next
frame).

So, for fragmentation/segmentation and reassembly, one distinction between types is between these two types:

        fragmentation/segmentation and reassembly where the lower-layer protocol offers a "send a PDU" service to the 
higher-layer protocol, and takes full responsibility for fragmentation/segmentation and reassembly, so that the 
higher-layer protocol can arrange to be completely unaware of whether it's taking place;

        fragmentation/segmentation and reassembly where the lower-layer protocol offers a service in which the SDU 
provided to the protocol turns into a PDU for that lower-layer protocol, requiring the upper-layer protocol to do 
fragmentation/segmentation and reassembly itself.

For the former type, the dissector for the lower-layer protocol can do reassembly entirely by itself.

For the latter type, the lower-layer protocol can offer some services to the higher-layer protocol to *help* it do the 
reassembly, but the higher-layer protocol has to do some of the work.

IP fragmentation/reassembly is an example of the first type.

Reassembly over TCP and TLS is an example of the second type.

What you're talking about *also* sounds like an example of the second type.

So you might want to look at the way TCP does it, and the helper routines it provides, such as tcp_dissect_pdus(), and 
that other parts of the code provide, such as req_resp_hdrs_do_reassembly().
___________________________________________________________________________
Sent via:    Wireshark-dev mailing list <wireshark-dev () wireshark org>
Archives:    https://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://www.wireshark.org/mailman/options/wireshark-dev
             mailto:wireshark-dev-request () wireshark org?subject=unsubscribe

Current thread: