diff options
author | Pascal Quantin <pascal.quantin@gmail.com> | 2013-09-15 19:44:19 +0000 |
---|---|---|
committer | Pascal Quantin <pascal.quantin@gmail.com> | 2013-09-15 19:44:19 +0000 |
commit | 1359f55d9ff26dca72f8fe255d818b695c1251b3 (patch) | |
tree | 709398209b2f12015eb25b6400f3138b81a6f838 /epan/dissectors/packet-opensafety.c | |
parent | 6653b82a980db28150c343655a592b8a4f75f4ee (diff) |
From Roland Knall via https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9145 :
openSAFETY: SSDO Abort codes are handled incorrectly
svn path=/trunk/; revision=52080
Diffstat (limited to 'epan/dissectors/packet-opensafety.c')
-rw-r--r-- | epan/dissectors/packet-opensafety.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/epan/dissectors/packet-opensafety.c b/epan/dissectors/packet-opensafety.c index 4cee573cc7..b1c21e2418 100644 --- a/epan/dissectors/packet-opensafety.c +++ b/epan/dissectors/packet-opensafety.c @@ -1252,8 +1252,8 @@ dissect_opensafety_ssdo_message(tvbuff_t *message_tvb , packet_info *pinfo, prot proto_tree_add_uint(ssdo_tree, hf_oss_ssdo_sano, message_tvb, frameStart1 + 3, 1, ct ); /* When the following clause is met, DB1,2 contain the SOD index, and DB3 the SOD subindex */ - if ( ( ( sacmd & OPENSAFETY_SSDO_SACMD_INI ) == OPENSAFETY_SSDO_SACMD_INI ) || - ( sacmd == OPENSAFETY_MSG_SSDO_ABORT ) + if ( ( ( sacmd & OPENSAFETY_SSDO_SACMD_INI ) == OPENSAFETY_SSDO_SACMD_INI ) && + ( sacmd != OPENSAFETY_MSG_SSDO_ABORT ) ) { ssdoIndex = tvb_get_letohs(message_tvb, db0Offset + 1); @@ -1262,7 +1262,7 @@ dissect_opensafety_ssdo_message(tvbuff_t *message_tvb , packet_info *pinfo, prot proto_tree_add_uint_format_value(ssdo_tree, hf_oss_ssdo_sod_index, message_tvb, db0Offset + 1, 2, ssdoIndex, "0x%04X (%s)", ssdoIndex, val_to_str_const(((guint32) (ssdoIndex << 16)), sod_idx_names, "Unknown") ); - col_append_fstr(pinfo->cinfo, COL_INFO, " [%s", val_to_str_const(((guint32) (ssdoIndex << 16)), sod_idx_names, "0x%04X")); + col_append_fstr(pinfo->cinfo, COL_INFO, " [%s", val_to_str_const(((guint32) (ssdoIndex << 16)), sod_idx_names, "Unknown")); /* Some SOD downloads (0x101A for instance) don't have sub-indeces */ if ( ssdoSubIndex != 0x0 ) @@ -1271,7 +1271,7 @@ dissect_opensafety_ssdo_message(tvbuff_t *message_tvb , packet_info *pinfo, prot ssdoSubIndex, "0x%02X (%s)", ssdoSubIndex, val_to_str_const(((guint32) (ssdoIndex << 16) + ssdoSubIndex), sod_idx_names, "Unknown") ); col_append_fstr(pinfo->cinfo, COL_INFO, " - %s", - val_to_str_const(((guint32) (ssdoIndex << 16) + ssdoSubIndex), sod_idx_names, "0x%02X")); + val_to_str_const(((guint32) (ssdoIndex << 16) + ssdoSubIndex), sod_idx_names, "Unknown")); } col_append_fstr(pinfo->cinfo, COL_INFO, "%s", "]" ); payloadOffset += 3; @@ -1279,11 +1279,12 @@ dissect_opensafety_ssdo_message(tvbuff_t *message_tvb , packet_info *pinfo, prot if ( sacmd == OPENSAFETY_MSG_SSDO_ABORT ) { - abortcode = tvb_get_ntohl(message_tvb, frameStart1 + OSS_FRAME_POS_DATA + 4); + abortcode = tvb_get_letohl(message_tvb, frameStart1 + OSS_FRAME_POS_DATA + 4); - proto_tree_add_uint_format_value(ssdo_tree, hf_oss_ssdo_abort_code, message_tvb, payloadOffset, 4, abortcode, + proto_tree_add_uint_format_value(ssdo_tree, hf_oss_ssdo_abort_code, message_tvb, frameStart1 + OSS_FRAME_POS_DATA + 4, 4, abortcode, "0x%04X %04X - %s", (guint16)(abortcode >> 16), (guint16)(abortcode), val_to_str_const(abortcode, abort_codes, "Unknown")); + col_append_fstr(pinfo->cinfo, COL_INFO, " - %s", val_to_str_const(abortcode, abort_codes, "Unknown")); } else { @@ -1488,12 +1489,17 @@ dissect_opensafety_snmt_message(tvbuff_t *message_tvb, packet_info *pinfo , prot if ( (db0 ^ OPENSAFETY_MSG_SNMT_EXT_SN_FAIL) == 0 ) { byte = tvb_get_guint8(message_tvb, OSS_FRAME_POS_DATA + frameStart1 + 1); - proto_tree_add_uint_format(snmt_tree, hf_oss_snmt_error_group, message_tvb, OSS_FRAME_POS_DATA + frameStart1 + 1, 1, + proto_tree_add_uint_format_value(snmt_tree, hf_oss_snmt_error_group, message_tvb, OSS_FRAME_POS_DATA + frameStart1 + 1, 1, byte, "%s", ( byte == 0 ? "Device" : val_to_str(byte, sn_fail_error_group, "Reserved [%d]" ) ) ); byte = tvb_get_guint8(message_tvb, OSS_FRAME_POS_DATA + frameStart1 + 2); - proto_tree_add_uint_format(snmt_tree, hf_oss_snmt_error_code, message_tvb, OSS_FRAME_POS_DATA + frameStart1 + 2, 1, + proto_tree_add_uint_format_value(snmt_tree, hf_oss_snmt_error_code, message_tvb, OSS_FRAME_POS_DATA + frameStart1 + 2, 1, byte, "%s [%d]", ( byte == 0 ? "Default" : "Vendor Specific" ), byte ); + + col_append_fstr(pinfo->cinfo, COL_INFO, " - Group: %s; Code: %s", + ( byte == 0 ? "Device" : val_to_str(byte, sn_fail_error_group, "Reserved [%d]" ) ), + ( byte == 0 ? "Default" : "Vendor Specific" ) + ); } else if ( (db0 ^ OPENSAFETY_MSG_SNMT_EXT_SN_ASSIGNED_UDID_SCM) == 0 ) { |