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:
- Reassemble serial protocols payloads Tomasz Moń (Jul 05)
- Re: Reassemble serial protocols payloads Tomasz Moń (Jul 11)
- Re: Reassemble serial protocols payloads Guy Harris (Jul 12)