diff options
author | Jeremy McCormick <jeremy.mccormick@craftdesigns.net> | 2022-06-08 20:16:02 -0500 |
---|---|---|
committer | A Wireshark GitLab Utility <gerald+gitlab-utility@wireshark.org> | 2022-06-16 02:29:37 +0000 |
commit | 9b08b02d8e2a37a4a4593e828b3869af6cc26649 (patch) | |
tree | 78f5f1fedb9996b6a1620d4a19858b5d23fa9923 /epan/dissectors/packet-arinc615a.c | |
parent | d008708552716719b363d0b31010890709fc5048 (diff) |
a615a: don't parse exception timer if A1
Trying to parse LUS and LNS files if the protocol version
was "A1" led to them being marked as a malformed packets.
THis is because protocol version A1 LUS and LNS files do
not have the exception timer field. So to fix it, we check if
the protocol version is not A1, and only if it isn't do we try to
parse the exception timer field.
Diffstat (limited to 'epan/dissectors/packet-arinc615a.c')
-rw-r--r-- | epan/dissectors/packet-arinc615a.c | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/epan/dissectors/packet-arinc615a.c b/epan/dissectors/packet-arinc615a.c index 04bed7ed48..1baa797e0c 100644 --- a/epan/dissectors/packet-arinc615a.c +++ b/epan/dissectors/packet-arinc615a.c @@ -108,6 +108,7 @@ static void dissect_a615a_LCL(ptvcursor_t *ptvc, packet_info *pinfo _U_) guint32 th_count, pn_count; proto_item *pi; + ptvcursor_add(ptvc, hf_a615a_protocol_version, 2, ENC_ASCII | ENC_NA); ptvcursor_add_ret_uint(ptvc, hf_a615a_number_target_hardware, 2, ENC_BIG_ENDIAN, &th_count); for (unsigned i = 0; i < th_count; ++i) { @@ -131,14 +132,22 @@ static void dissect_a615a_LUS(ptvcursor_t *ptvc, packet_info *pinfo) { guint32 status, file_count; const guint8 *ratio; + const guint8 *protocol_version = NULL; proto_item *pi; + ptvcursor_add_ret_string(ptvc, hf_a615a_protocol_version, 2, ENC_ASCII | ENC_NA, + pinfo->pool, &protocol_version); ptvcursor_add_ret_uint(ptvc, hf_a615a_operation_status, 2, ENC_BIG_ENDIAN, &status); col_append_fstr(pinfo->cinfo, COL_INFO, ", Status: %s", val_to_str(status, a615a_operation_status_codes, "Unknown (0x%04x)")); ptvcursor_add(ptvc, hf_a615a_status_description, 1, ENC_ASCII | ENC_BIG_ENDIAN); ptvcursor_add(ptvc, hf_a615a_counter, 2, ENC_BIG_ENDIAN); - ptvcursor_add(ptvc, hf_a615a_exception_timer, 2, ENC_BIG_ENDIAN); + + if(protocol_version && strcmp((const char*)protocol_version, "A1")) + { + ptvcursor_add(ptvc, hf_a615a_exception_timer, 2, ENC_BIG_ENDIAN); + } + ptvcursor_add(ptvc, hf_a615a_estimated_time, 2, ENC_BIG_ENDIAN); ptvcursor_add_ret_string(ptvc, hf_a615a_load_ratio, 3, ENC_ASCII | ENC_NA, pinfo->pool, &ratio); @@ -162,6 +171,7 @@ static void dissect_a615a_LCS(ptvcursor_t *ptvc, packet_info *pinfo) { guint32 status; + ptvcursor_add(ptvc, hf_a615a_protocol_version, 2, ENC_ASCII | ENC_NA); ptvcursor_add(ptvc, hf_a615a_counter, 2, ENC_BIG_ENDIAN); ptvcursor_add_ret_uint(ptvc, hf_a615a_operation_status, 2, ENC_BIG_ENDIAN, &status); col_append_fstr(pinfo->cinfo, COL_INFO, ", Status: %s", @@ -175,6 +185,7 @@ static void dissect_a615a_LUI_LCI_LND_LNO(ptvcursor_t *ptvc, packet_info *pinfo) { guint32 status; + ptvcursor_add(ptvc, hf_a615a_protocol_version, 2, ENC_ASCII | ENC_NA); ptvcursor_add_ret_uint(ptvc, hf_a615a_operation_status, 2, ENC_BIG_ENDIAN, &status); col_append_fstr(pinfo->cinfo, COL_INFO, ", Status: %s", val_to_str(status, a615a_operation_status_codes, "Unknown (0x%04x)")); @@ -186,6 +197,7 @@ static void dissect_a615a_LUR(ptvcursor_t *ptvc, packet_info *pinfo _U_) guint32 file_count; proto_item *pi; + ptvcursor_add(ptvc, hf_a615a_protocol_version, 2, ENC_ASCII | ENC_NA); ptvcursor_add_ret_uint(ptvc, hf_a615a_file_count, 2, ENC_BIG_ENDIAN, &file_count); for (unsigned i = 0; i < file_count; ++i) { pi = ptvcursor_add(ptvc, hf_a615a_file_name, 1, ENC_ASCII | ENC_BIG_ENDIAN); @@ -200,6 +212,7 @@ static void dissect_a615a_LNL(ptvcursor_t *ptvc, packet_info *pinfo _U_) guint32 file_count; proto_item *pi; + ptvcursor_add(ptvc, hf_a615a_protocol_version, 2, ENC_ASCII | ENC_NA); ptvcursor_add_ret_uint(ptvc, hf_a615a_file_count, 2, ENC_BIG_ENDIAN, &file_count); for (unsigned i = 0; i < file_count; ++i) { pi = ptvcursor_add(ptvc, hf_a615a_file_name, 1, ENC_ASCII | ENC_BIG_ENDIAN); @@ -213,6 +226,7 @@ static void dissect_a615a_LNR(ptvcursor_t *ptvc, packet_info *pinfo _U_) { guint32 file_count; + ptvcursor_add(ptvc, hf_a615a_protocol_version, 2, ENC_ASCII | ENC_NA); ptvcursor_add_ret_uint(ptvc, hf_a615a_file_count, 2, ENC_BIG_ENDIAN, &file_count); for (unsigned i = 0; i < file_count; ++i) { ptvcursor_add(ptvc, hf_a615a_file_name, 1, ENC_ASCII | ENC_BIG_ENDIAN); @@ -224,13 +238,21 @@ static void dissect_a615a_LNS(ptvcursor_t *ptvc, packet_info *pinfo) { guint32 status, file_count; proto_item *pi; + const guint8 *protocol_version = NULL; + ptvcursor_add_ret_string(ptvc, hf_a615a_protocol_version, 2, ENC_ASCII | ENC_NA, + pinfo->pool, &protocol_version); ptvcursor_add_ret_uint(ptvc, hf_a615a_operation_status, 2, ENC_BIG_ENDIAN, &status); col_append_fstr(pinfo->cinfo, COL_INFO, ", Status: %s", val_to_str(status, a615a_operation_status_codes, "Unknown (0x%04x)")); ptvcursor_add(ptvc, hf_a615a_status_description, 1, ENC_ASCII | ENC_BIG_ENDIAN); ptvcursor_add(ptvc, hf_a615a_counter, 2, ENC_BIG_ENDIAN); - ptvcursor_add(ptvc, hf_a615a_exception_timer, 2, ENC_BIG_ENDIAN); + + if (protocol_version && strcmp((const char*)protocol_version, "A1")) + { + ptvcursor_add(ptvc, hf_a615a_exception_timer, 2, ENC_BIG_ENDIAN); + } + ptvcursor_add(ptvc, hf_a615a_estimated_time, 2, ENC_BIG_ENDIAN); ptvcursor_add(ptvc, hf_a615a_load_ratio, 3, ENC_ASCII | ENC_NA); ptvcursor_add_ret_uint(ptvc, hf_a615a_file_count, 2, ENC_BIG_ENDIAN, &file_count); @@ -248,6 +270,7 @@ static void dissect_a615a_LNA(ptvcursor_t *ptvc, packet_info *pinfo _U_) { guint32 file_count; + ptvcursor_add(ptvc, hf_a615a_protocol_version, 2, ENC_ASCII | ENC_NA); ptvcursor_add_ret_uint(ptvc, hf_a615a_file_count, 2, ENC_BIG_ENDIAN, &file_count); for (unsigned i = 0; i < file_count; ++i) { ptvcursor_add(ptvc, hf_a615a_file_name, 1, ENC_ASCII | ENC_BIG_ENDIAN); @@ -265,7 +288,6 @@ static void dissect_a615a_protocol_file(tvbuff_t *tvb, packet_info *pinfo, proto ptvcursor_t *ptvc = ptvcursor_new(pinfo->pool, a615a_tree, tvb, 0); ptvcursor_add(ptvc, hf_a615a_file_length, 4, ENC_BIG_ENDIAN); - ptvcursor_add(ptvc, hf_a615a_protocol_version, 2, ENC_ASCII | ENC_NA); switch (suffix) { case LUI: |