diff options
author | Michael Mann <mmann78@netscape.net> | 2015-03-18 07:59:05 -0400 |
---|---|---|
committer | Michael Mann <mmann78@netscape.net> | 2015-03-19 12:49:10 +0000 |
commit | f7b1678b1237425406d6a9a109b2bbc1782a9211 (patch) | |
tree | 3531424c797edd8042b867bac3ffdabf308b5ae2 /epan/dissectors/packet-devicenet.c | |
parent | da3e4f92d521528369520bdb4593cc591732a27d (diff) |
Replace enumerated preference for choosing subdissector with a subdissector table and Decode As functionality.
This makes it much easier for other subdissectors (and plugins) to associate themselves with CAN.
Change-Id: I49dd832af51651d0c91f9850c100e544d178b8c4
Reviewed-on: https://code.wireshark.org/review/7734
Petri-Dish: Michael Mann <mmann78@netscape.net>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'epan/dissectors/packet-devicenet.c')
-rw-r--r-- | epan/dissectors/packet-devicenet.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/epan/dissectors/packet-devicenet.c b/epan/dissectors/packet-devicenet.c index 091ea78cab..9631e7afbe 100644 --- a/epan/dissectors/packet-devicenet.c +++ b/epan/dissectors/packet-devicenet.c @@ -35,6 +35,7 @@ #include "packet-cip.h" void proto_register_devicenet(void); +void proto_reg_handoff_devicenet(void); #define DEVICENET_CANID_MASK 0x7FF #define MESSAGE_GROUP_1_ID 0x3FF @@ -428,6 +429,10 @@ static int dissect_devicenet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree DISSECTOR_ASSERT(data); can_id = *((struct can_identifier*)data); + /* XXX - Not sure this is correct. But the capture provided in + * bug 8564 provides CAN ID in little endian format, so this makes it work */ + can_id.id = GUINT32_SWAP_LE_BE(can_id.id); + if (can_id.id & (~DEVICENET_CANID_MASK)) { /* Not for us */ @@ -1029,8 +1034,6 @@ void proto_register_devicenet(void) expert_devicenet = expert_register_protocol(proto_devicenet); expert_register_field_array(expert_devicenet, ei, array_length(ei)); - new_register_dissector("devicenet", dissect_devicenet, proto_devicenet); - devicenet_address_type = address_type_dissector_register("AT_DEVICENET", "DeviceNet Address", devicenet_addr_to_str, devicenet_addr_str_len, NULL, devicenet_addr_len, NULL, NULL); devicenet_module = prefs_register_protocol(proto_devicenet, NULL); @@ -1056,6 +1059,15 @@ void proto_register_devicenet(void) devicenet_uat); } +void +proto_reg_handoff_devicenet(void) +{ + dissector_handle_t devicenet_handle; + + devicenet_handle = new_create_dissector_handle( dissect_devicenet, proto_devicenet ); + dissector_add_for_decode_as("can.subdissector", devicenet_handle ); +} + /* * Editor modelines - http://www.wireshark.org/tools/modelines.html * |