Hi,
the attached patch adds a small enhancement for the ETHERNET Powerlink
dissector (some well-known CANopen device profiles are decoded in human
readable plaintext in the IdentResponse frame).
Best Regards,
David
--
David Buechi Zurich University of Applied Sciences Winterthur
Dipl. Ing. FH Institute of Embedded Systems InES
Realtime Communication Technikumstrasse 9
Tel: +41 52 267 70 60 P.O.Box 805
Fax: +41 52 268 70 60 CH-8401 Winterthur
Index: epan/dissectors/packet-epl.c
===================================================================
--- epan/dissectors/packet-epl.c (revision 22053)
+++ epan/dissectors/packet-epl.c (working copy)
@@ -119,6 +119,7 @@
static gint hf_epl_asnd_identresponse_pos = -1;
static gint hf_epl_asnd_identresponse_rst = -1;
static gint hf_epl_asnd_identresponse_dt = -1;
+static gint hf_epl_asnd_identresponse_profile = -1;
static gint hf_epl_asnd_identresponse_vid = -1;
static gint hf_epl_asnd_identresponse_productcode = -1;
static gint hf_epl_asnd_identresponse_rno = -1;
@@ -784,6 +785,7 @@
dissect_epl_asnd_ires(proto_tree *epl_tree, tvbuff_t *tvb, packet_info *pinfo,
guint8 epl_src, gint offset)
{
guint8 eplversion;
+ guint16 profile,additional;
guint32 epl_asnd_identresponse_ipa, epl_asnd_identresponse_snm,
epl_asnd_identresponse_gtw;
guint32 epl_asnd_ires_feat, device_type;
proto_item *ti_feat;
@@ -848,7 +850,13 @@
proto_tree_add_item(epl_tree, hf_epl_asnd_identresponse_rst, tvb,
offset, 4, TRUE);
offset += 6;
- proto_tree_add_uint(epl_tree, hf_epl_asnd_identresponse_dt, tvb,
offset, 4, device_type);
+ profile = tvb_get_letohs(tvb, offset);
+ additional = tvb_get_letohs(tvb, offset+2);
+ proto_tree_add_string_format(epl_tree, hf_epl_asnd_identresponse_dt,
tvb, offset,
+ 4, "", "Device Type: Profil %d (%s), Additional Information:
0x%4.4X",
+ profile, val_to_str(profile, epl_device_profiles, "Unkown
Profile"), additional);
+
+ proto_tree_add_item(epl_tree, hf_epl_asnd_identresponse_profile, tvb,
offset, 2, TRUE);
offset += 4;
proto_tree_add_item(epl_tree, hf_epl_asnd_identresponse_vid, tvb,
offset, 4, TRUE);
@@ -899,7 +907,7 @@
if (check_col(pinfo->cinfo, COL_INFO))
{
- col_append_fstr(pinfo->cinfo, COL_INFO, "DevType = 0x%08X",
device_type);
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s", val_to_str(profile,
epl_device_profiles, "Device Profile %d"));
}
return offset;
@@ -1392,7 +1400,8 @@
{ &hf_epl_asnd_identresponse_pis, { "PollInSize",
"epl.asnd.ires.pollinsize", FT_UINT16, BASE_DEC, NULL,
0x00, "", HFILL }},
{ &hf_epl_asnd_identresponse_pos, { "PollOutSize",
"epl.asnd.ires.polloutsizes", FT_UINT16, BASE_DEC, NULL,
0x00, "", HFILL }},
{ &hf_epl_asnd_identresponse_rst, { "ResponseTime",
"epl.asnd.ires.resptime", FT_UINT32, BASE_DEC, NULL,
0x00, "", HFILL }},
-{ &hf_epl_asnd_identresponse_dt, { "DeviceType",
"epl.asnd.ires.devicetype", FT_UINT32, BASE_DEC_HEX, NULL,
0x00, "", HFILL }},
+{ &hf_epl_asnd_identresponse_dt, { "DeviceType",
"epl.asnd.ires.devicetype", FT_STRING, BASE_DEC, NULL,
0x00, "", HFILL }},
+{ &hf_epl_asnd_identresponse_profile, { "Profile",
"epl.asnd.ires.profile", FT_UINT16, BASE_DEC, NULL,
0x00, "", HFILL }},
{ &hf_epl_asnd_identresponse_vid, { "VendorId",
"epl.asnd.ires.vendorid", FT_UINT32, BASE_DEC_HEX, NULL,
0x00, "", HFILL }},
{ &hf_epl_asnd_identresponse_productcode,{ "ProductCode",
"epl.asnd.ires.productcode", FT_UINT32, BASE_DEC_HEX, NULL,
0x00, "", HFILL }},
{ &hf_epl_asnd_identresponse_rno, { "RevisionNumber",
"epl.asnd.ires.revisionno", FT_UINT32, BASE_DEC_HEX, NULL,
0x00, "", HFILL }},
@@ -1503,7 +1512,7 @@
prefs_register_bool_preference(epl_module, "show_soc_flags", "Show flags
of SoC frame in Info column",
"If you are capturing in networks with multiplexed or slow nodes, this
can be useful", &show_soc_flags);
-
+
/* tap-registration */
/* epl_tap = register_tap("epl");*/
}
Index: epan/dissectors/packet-epl.h
===================================================================
--- epan/dissectors/packet-epl.h (revision 22053)
+++ epan/dissectors/packet-epl.h (working copy)
@@ -304,6 +304,30 @@
{0,NULL}
};
+
+
+// EPL Device Profiles according to CANopen
+#define EPL_PROFILE_NO 0
+#define EPL_PROFILE_GENERIC_IO 401
+#define EPL_PROFILE_DRIVE 402
+#define EPL_PROFILE_HMI 403
+#define EPL_PROFILE_MEASURING 404
+#define EPL_PROFILE_PLC 405
+#define EPL_PROFILE_ENCODER 406
+
+
+static const value_string epl_device_profiles[] = {
+ {EPL_PROFILE_NO, "No Standard Device"},
+ {EPL_PROFILE_GENERIC_IO, "Generic I/O module"},
+ {EPL_PROFILE_DRIVE, "Drive and motion control"},
+ {EPL_PROFILE_HMI, "Human Machine Interface"},
+ {EPL_PROFILE_MEASURING, "Measuring device"},
+ {EPL_PROFILE_PLC, "IEC 61131-3 PLC"},
+ {EPL_PROFILE_ENCODER, "Encoder"},
+ {0,NULL}
+};
+
+
/* SDO SequenceLayer */
#define EPL_ASND_SDO_SEQ_RECEIVE_SEQUENCE_NUMBER_OFFSET 4
#define EPL_ASND_SDO_SEQ_RECEIVE_CON_OFFSET 4
_______________________________________________
Wireshark-dev mailing list
[email protected]
http://www.wireshark.org/mailman/listinfo/wireshark-dev