[packet-selfm.c] - Fix handling of Response Code in Fast Message ACK Messages

Change-Id: Ideee81186e65c929b2104b63033ee2ac9c76b161
Reviewed-on: https://code.wireshark.org/review/28944
Petri-Dish: Anders Broman <a.broman58@gmail.com>
Tested-by: Petri Dish Buildbot
Reviewed-by: Anders Broman <a.broman58@gmail.com>
This commit is contained in:
Chris Bontje 2018-08-03 11:49:54 -06:00 committed by Anders Broman
parent aa8ebb94e5
commit 20c08df23d
1 changed files with 34 additions and 8 deletions

View File

@ -1,7 +1,7 @@
/* packet-selfm.c
* Routines for Schweitzer Engineering Laboratories (SEL) Protocols Dissection
* By Chris Bontje (cbontje[AT]gmail.com
* Copyright 2012-2016,
* Copyright 2012-2018,
*
************************************************************************************************
* Wireshark - Network traffic analyzer
@ -141,6 +141,7 @@ static int hf_selfm_fastmsg_len = -1;
static int hf_selfm_fastmsg_routing_addr = -1;
static int hf_selfm_fastmsg_status = -1;
static int hf_selfm_fastmsg_funccode = -1;
static int hf_selfm_fastmsg_response_code = -1;
static int hf_selfm_fastmsg_seq = -1;
static int hf_selfm_fastmsg_seq_fir = -1;
static int hf_selfm_fastmsg_seq_fin = -1;
@ -748,6 +749,20 @@ static const value_string selfm_fastmsg_tagtype_vals[] = {
{ 0, NULL }
};
/* Fast Message ACK Response Codes */
static const value_string selfm_fastmsg_ack_responsecode_vals[] = {
{ 0x0, "Success" },
{ 0x1, "Function code not recognized" },
{ 0x2, "Function code supported but disabled" },
{ 0x3, "Invalid Data Address" },
{ 0x4, "Bad Data" },
{ 0x5, "Insufficient Memory" },
{ 0x6, "Busy" },
{ 0, NULL }
};
static value_string_ext selfm_fastmsg_ack_responsecode_vals_ext =
VALUE_STRING_EXT_INIT(selfm_fastmsg_ack_responsecode_vals);
/* Fast Message Unsolicited Write COM Port Codes */
static const value_string selfm_fastmsg_unswrite_com_vals[] = {
@ -1899,8 +1914,8 @@ dissect_fastmsg_frame(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, int o
proto_tree *fastmsg_tree, *fastmsg_def_fc_tree=NULL, *fastmsg_elementlist_tree=NULL;
proto_tree *fastmsg_element_tree=NULL, *fastmsg_datareg_tree=NULL, *fastmsg_tag_tree=NULL, *fastmsg_soeblk_tree=NULL;
gint cnt, cnt1, num_elements, elmt_status32_ofs=0, elmt_status, null_offset;
guint8 len, funccode, seq, rx_num_fc, tx_num_fc;
guint8 seq_cnt, elmt_idx, fc_enable, soe_num_reg;
guint8 len, funccode, seq=0, rx_num_fc, tx_num_fc;
guint8 seq_cnt=0, elmt_idx, fc_enable, soe_num_reg;
guint8 *tag_name_ptr;
guint16 base_addr, num_addr, num_reg, addr1, addr2, crc16, crc16_calc, soe_num_blks;
guint32 tod_ms, elmt_status32, elmt_ts_offset;
@ -1935,12 +1950,21 @@ dissect_fastmsg_frame(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, int o
offset += 1;
/* Get Sequence Byte, add to Tree */
seq = tvb_get_guint8(tvb, offset);
seq_cnt = seq & FAST_MSG_SEQ_CNT;
/* If this is an ACK message, process this byte as a Response Code. */
if ((funccode == FAST_MSG_EN_UNS_DATA_ACK) ||
(funccode == FAST_MSG_DIS_UNS_DATA_ACK) ||
(funccode == FAST_MSG_UNS_RESP_ACK)) {
proto_tree_add_item(fastmsg_tree, hf_selfm_fastmsg_response_code, tvb, offset, 1, ENC_BIG_ENDIAN);
}
else {
/* Otherwise, it is the sequence byte, add to Tree */
seq = tvb_get_guint8(tvb, offset);
seq_cnt = seq & FAST_MSG_SEQ_CNT;
proto_tree_add_bitmask_with_flags(fastmsg_tree, tvb, offset, hf_selfm_fastmsg_seq, ett_selfm_fastmsg_seq,
seq_fields, ENC_NA, BMT_NO_APPEND);
}
proto_tree_add_bitmask_with_flags(fastmsg_tree, tvb, offset, hf_selfm_fastmsg_seq, ett_selfm_fastmsg_seq,
seq_fields, ENC_NA, BMT_NO_APPEND);
offset += 1;
/* Add Response Number to tree */
@ -2853,6 +2877,8 @@ proto_register_selfm(void)
{ "Status Byte", "selfm.fastmsg.status", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
{ &hf_selfm_fastmsg_funccode,
{ "Function Code", "selfm.fastmsg.funccode", FT_UINT8, BASE_HEX | BASE_EXT_STRING, &selfm_fastmsg_func_code_vals_ext, 0x0, NULL, HFILL }},
{ &hf_selfm_fastmsg_response_code,
{ "Response Code", "selfm.fastmsg.responsecode", FT_UINT8, BASE_HEX | BASE_EXT_STRING, &selfm_fastmsg_ack_responsecode_vals_ext, 0x0, NULL, HFILL }},
{ &hf_selfm_fastmsg_seq,
{ "Sequence Byte", "selfm.fastmsg.seq", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
{ &hf_selfm_fastmsg_seq_fir,