Huge thanks to our Platinum Members Endace and LiveAction,
and our Silver Member Veeam, for supporting the Wireshark Foundation and project.

Wireshark-dev: [Wireshark-dev] calling a dissector from another dissector

From: Horia Coman <horia314@xxxxxxxxxxx>
Date: Mon, 25 May 2009 11:05:49 +0000 (GMT)
Hello,

I'm making a dissector for an in-house protocol we use at work. The protocol basically encapsulates a number of other protocol packets (currently PPI and TZSP (Tazmen Sniffing Protocol)) into one bigger message and adds a header to the whole group.

When I do a dissect I display the header and then in a separate tree each different encapsulated packet.

To invoke the specific dissectors, I create a sub tvbuffer for the specific region of the whole tvbuffer and then call find_dissector("ppi" | "tzsp") and  call_dissector with appropriate parameters.

My problems is : TZSP doesn't register itself with "register_dissector", so find_dissector can't find it and it returns NULL. Is there any other way to call a specific dissector?

My current solution is to add the registering code into packet-tzsp.c, but that won't work in the long run because I have to send a plugin shared libary to my coworkers, and I can't ask them to modify their sources (most of them don't even have them to begin with) for this little thing.

Also, TZSP is carried by a UDP segment. The way it is now, the UDP (+ IP + Ethernet) info is lost, and just the raw TZSP packet is left. I therefore can't call an inferior protocol and let wireshark do the searching for me. Nor can I return from the function and let it dissect the rest of the packet as it would normally would, because there is more than one encapsulated packet.

So I'm in kind of a rut. I've searched the sources and READMEs, and the only thing that resembled what I was looking for was a function called dissector_next, but that was mentioned only in README.developer (grepping through the source-tree yielded nothing else).

Thank you in advance,
Horia