New Repo! Wireshark_plugins now available for Cyphal

Thanks to @erik.rainey, we are happy to announce a set of WireShark Plugins are now available for Cyphal/UDP and Cyphal/CAN. These allow you to debug and decode network-layer Cyphal communications using the popular, cross-platform WireShark protocol analyzer.

4 Likes

Is the Wireshark UAVCAN/CAN build-in dissector broken (good reminder is should rename it as well)?

Haven’t use it in while, are there known bugs for it?

1 Like

This seems like something that belongs to DroneCAN now. I doubt it’d work with Cyphal but I have no idea. Cyphal is multi-transport so the new repo supports Cyphal/UDP as well as CAN.

The dissector Peter mentioned was created specifically for Cyphal/CAN (UAVCAN v1), by Peter himself. I brought this up with @erik.rainey when he started working on the Lua plugin for CAN and IIRC his rationale was that it is desirable to keep all plugins in one place.

whoops! Sorry @PetervdPerk . Is this purely duplicated work or can we pull your work into this repository? Also, it does need to be renamed :wink:

So my dissector was written in C and is included in upstream Wireshark.

My approach is also a bit different, uavcan_can implements only the Cyphal/CAN spec and reassembles all incoming frames and verifies toggle and crc.

When reassembled it passes the payload to uavcan_dsdl (Wireshark · Display Filter Reference: UAVCAN DSDL) which implements a subset of the public_regulated_data_types i.e. Get Register, NodeIdAllocation, Heartbeat, File and more.

Technically the Lua cyphal_udp can also pass a reassembled frame to uavcan_dsdl to have it decoded if the port id matches.

The Lua approach would still be interesting generate a decoder for the full dsdl spec combined with Nunavut.

Cyphal/CAN works as a CAN-FD post-dissector, just like UAVCAN/CAN does. However, a bit less well as I haven’t figured out how to make the table above reflect the dissection in Lua.

@PetervdPerk is correct about the long term roadmap. I’d like to parse the DSDL in Lua and allow arbitrary .dsdl decode in the Lua code. There’s some promising ENBF parsers in Lua, so we may be able to do it somewhat easily or with some minor code generation (due to Lua being interpreted).

Since the Lua execution model I think is per-message, I think it can’t parse the whole DSDL tree of all types, it will need a table corelating a Port ID to .dsdl file or some preprocessing from nunavut.