aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-devicenet.c
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2015-03-18 07:59:05 -0400
committerMichael Mann <mmann78@netscape.net>2015-03-19 12:49:10 +0000
commitf7b1678b1237425406d6a9a109b2bbc1782a9211 (patch)
tree3531424c797edd8042b867bac3ffdabf308b5ae2 /epan/dissectors/packet-devicenet.c
parentda3e4f92d521528369520bdb4593cc591732a27d (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.c16
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
*