Wireshark-dev: [Wireshark-dev] Design Question: more than one protocol per dissector
Hi all.
I face the situation where two protocols (RDMA on top of DDP) are not
always truly two protocols with respect to the protocol headers. RDMA
generally uses some parts to of DDP's header fields to represent RDMA
messages. But for two of the RDMA messages, RDMA also adds its own
header to the DDP header (see also figure).
case 1: RDMA uses the DDP header:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| TCP | MPA | DDP | payload | MPA _PADDING | MAP_CRC |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
case 2: RDMA adds its own header:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| TCP | MPA | DDP | RDMA | payload | MPA _PADDING | MAP_CRC |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
I see two possibilities to implement this in wireshark:
option 1: Use one dissector for both, DDP and RDMA
Well, I just put both protocols in one dissector and dissect RDMA
header on a per need basis by adding a RDMA subtree to the DDP
protocol tree.
option 2: Use one dissector for each of the two protocols
Since RDMA relies in some cases on the information of the DDP header
I would create a 'conversation' for the DDP traffic and attach to it
the DDP header information as a data struct. In the RDMA dissector I
would get the DDP conversation and retrieve the DDP information that
I attached to it previously. Based on this data I would identify what
kind of RDMA message it is and dissect the RDMA header if there is any.
I would like to ask, if there are any implications or potential
issues regarding these two options? Would you accept both options for
your wireshark repository?
Thanx
- Yves