diff options
Diffstat (limited to 'epan/dissectors/packet-p_mul.c')
-rw-r--r-- | epan/dissectors/packet-p_mul.c | 223 |
1 files changed, 115 insertions, 108 deletions
diff --git a/epan/dissectors/packet-p_mul.c b/epan/dissectors/packet-p_mul.c index 5ef6ad960c..51b6389a89 100644 --- a/epan/dissectors/packet-p_mul.c +++ b/epan/dissectors/packet-p_mul.c @@ -67,102 +67,105 @@ void proto_reg_handoff_p_mul(void); #define DECODE_BER 1 #define DECODE_CDT 2 -static int proto_p_mul = -1; - -static int hf_length = -1; -static int hf_priority = -1; -static int hf_map_first = -1; -static int hf_map_last = -1; -static int hf_map_unused = -1; -static int hf_pdu_type = -1; -static int hf_pdu_type_value = -1; -static int hf_no_pdus = -1; -static int hf_seq_no = -1; -static int hf_unused8 = -1; -static int hf_unused16 = -1; -static int hf_checksum = -1; -static int hf_checksum_good = -1; -static int hf_checksum_bad = -1; -static int hf_source_id_ack = -1; -static int hf_source_id = -1; -static int hf_message_id = -1; -static int hf_expiry_time = -1; -static int hf_mc_group = -1; -static int hf_ann_mc_group = -1; -static int hf_fec_len = -1; -static int hf_fec_id = -1; -static int hf_fec_parameters = -1; -static int hf_count_of_dest = -1; -static int hf_length_of_res = -1; -static int hf_ack_count = -1; -static int hf_ack_entry = -1; -static int hf_ack_length = -1; -static int hf_miss_seq_no = -1; -static int hf_miss_seq_range = -1; -static int hf_tot_miss_seq_no = -1; -static int hf_timestamp_option = -1; -static int hf_dest_entry = -1; -static int hf_dest_id = -1; -static int hf_msg_seq_no = -1; -static int hf_sym_key = -1; -static int hf_data_fragment = -1; - -static int hf_msg_fragments = -1; -static int hf_msg_fragment = -1; -static int hf_msg_fragment_overlap = -1; -static int hf_msg_fragment_overlap_conflicts = -1; -static int hf_msg_fragment_multiple_tails = -1; -static int hf_msg_fragment_too_long_fragment = -1; -static int hf_msg_fragment_error = -1; -static int hf_msg_fragment_count = -1; -static int hf_msg_reassembled_in = -1; -static int hf_msg_reassembled_length = -1; - -static int hf_analysis_ack_time = -1; -static int hf_analysis_trans_time = -1; -static int hf_analysis_retrans_time = -1; -static int hf_analysis_total_retrans_time = -1; -static int hf_analysis_last_pdu_num = -1; -static int hf_analysis_addr_pdu_num = -1; -static int hf_analysis_acks_addr_pdu_num = -1; -static int hf_analysis_acks_acked_addr_pdu_num = -1; -static int hf_analysis_addr_pdu_time = -1; -static int hf_analysis_prev_pdu_num = -1; -static int hf_analysis_prev_pdu_time = -1; -static int hf_analysis_retrans_no = -1; -static int hf_analysis_ack_num = -1; -static int hf_analysis_ack_missing = -1; -static int hf_analysis_ack_dup_no = -1; -static int hf_analysis_msg_resend_from = -1; -static int hf_analysis_ack_resend_from = -1; -static int hf_analysis_total_time = -1; - -static gint ett_p_mul = -1; -static gint ett_pdu_type = -1; -static gint ett_dest_entry = -1; -static gint ett_ack_entry = -1; -static gint ett_range_entry = -1; -static gint ett_checksum = -1; -static gint ett_seq_analysis = -1; -static gint ett_ack_analysis = -1; -static gint ett_seq_ack_analysis = -1; -static gint ett_msg_fragment = -1; -static gint ett_msg_fragments = -1; - -static expert_field ei_more_data = EI_INIT; -static expert_field ei_checksum_bad = EI_INIT; -static expert_field ei_illegal_seq_no = EI_INIT; -static expert_field ei_tot_miss_seq_no = EI_INIT; -static expert_field ei_miss_seq_no = EI_INIT; -static expert_field ei_analysis_ack_missing = EI_INIT; -static expert_field ei_miss_seq_range = EI_INIT; -static expert_field ei_address_pdu_missing = EI_INIT; -static expert_field ei_analysis_ack_dup_no = EI_INIT; -static expert_field ei_length = EI_INIT; -static expert_field ei_analysis_prev_pdu_missing = EI_INIT; -static expert_field ei_message_discarded = EI_INIT; -static expert_field ei_ack_length = EI_INIT; -static expert_field ei_analysis_retrans_no = EI_INIT; +static int proto_p_mul; + +static int hf_length; +static int hf_priority; +static int hf_map_first; +static int hf_map_last; +static int hf_map_unused; +static int hf_pdu_type; +static int hf_pdu_type_value; +static int hf_no_pdus; +static int hf_seq_no; +static int hf_unused8; +static int hf_unused16; +static int hf_checksum; +static int hf_checksum_good; +static int hf_checksum_bad; +static int hf_source_id_ack; +static int hf_source_id; +static int hf_message_id; +static int hf_expiry_time; +static int hf_mc_group; +static int hf_ann_mc_group; +static int hf_fec_len; +static int hf_fec_id; +static int hf_fec_parameters; +static int hf_count_of_dest; +static int hf_length_of_res; +static int hf_ack_count; +static int hf_ack_entry; +static int hf_ack_length; +static int hf_miss_seq_no; +static int hf_miss_seq_range; +static int hf_miss_seq_range_from; +static int hf_miss_seq_range_delimiter; +static int hf_miss_seq_range_to; +static int hf_tot_miss_seq_no; +static int hf_timestamp_option; +static int hf_dest_entry; +static int hf_dest_id; +static int hf_msg_seq_no; +static int hf_sym_key; +static int hf_data_fragment; + +static int hf_msg_fragments; +static int hf_msg_fragment; +static int hf_msg_fragment_overlap; +static int hf_msg_fragment_overlap_conflicts; +static int hf_msg_fragment_multiple_tails; +static int hf_msg_fragment_too_long_fragment; +static int hf_msg_fragment_error; +static int hf_msg_fragment_count; +static int hf_msg_reassembled_in; +static int hf_msg_reassembled_length; + +static int hf_analysis_ack_time; +static int hf_analysis_trans_time; +static int hf_analysis_retrans_time; +static int hf_analysis_total_retrans_time; +static int hf_analysis_last_pdu_num; +static int hf_analysis_addr_pdu_num; +static int hf_analysis_acks_addr_pdu_num; +static int hf_analysis_acks_acked_addr_pdu_num; +static int hf_analysis_addr_pdu_time; +static int hf_analysis_prev_pdu_num; +static int hf_analysis_prev_pdu_time; +static int hf_analysis_retrans_no; +static int hf_analysis_ack_num; +static int hf_analysis_ack_missing; +static int hf_analysis_ack_dup_no; +static int hf_analysis_msg_resend_from; +static int hf_analysis_ack_resend_from; +static int hf_analysis_total_time; + +static gint ett_p_mul; +static gint ett_pdu_type; +static gint ett_dest_entry; +static gint ett_ack_entry; +static gint ett_range_entry; +static gint ett_checksum; +static gint ett_seq_analysis; +static gint ett_ack_analysis; +static gint ett_seq_ack_analysis; +static gint ett_msg_fragment; +static gint ett_msg_fragments; + +static expert_field ei_more_data; +static expert_field ei_checksum_bad; +static expert_field ei_illegal_seq_no; +static expert_field ei_tot_miss_seq_no; +static expert_field ei_miss_seq_no; +static expert_field ei_analysis_ack_missing; +static expert_field ei_miss_seq_range; +static expert_field ei_address_pdu_missing; +static expert_field ei_analysis_ack_dup_no; +static expert_field ei_length; +static expert_field ei_analysis_prev_pdu_missing; +static expert_field ei_message_discarded; +static expert_field ei_ack_length; +static expert_field ei_analysis_retrans_no; static dissector_handle_t p_mul_handle = NULL; @@ -1054,7 +1057,7 @@ static int dissect_p_mul (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, v break; case Ack_PDU: - message_id_list = wmem_strbuf_new_label(pinfo->pool); + message_id_list = wmem_strbuf_create(pinfo->pool); for (i = 0; i < count; i++) { /* Ack Info Entry */ @@ -1118,17 +1121,12 @@ static int dissect_p_mul (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, v proto_item_append_text (en, " (invalid)"); expert_add_info(pinfo, en, &ei_miss_seq_range); } else { - proto_tree *missing_tree; - guint16 sno; + proto_tree *missing_tree = proto_item_add_subtree (en, ett_range_entry); - missing_tree = proto_item_add_subtree (en, ett_range_entry); + proto_tree_add_item (missing_tree, hf_miss_seq_range_from, tvb, offset, 2, ENC_BIG_ENDIAN); + proto_tree_add_item (missing_tree, hf_miss_seq_range_delimiter, tvb, offset + 2, 2, ENC_BIG_ENDIAN); + proto_tree_add_item (missing_tree, hf_miss_seq_range_to, tvb, offset + 4, 2, ENC_BIG_ENDIAN); - for (sno = ack_seq_no; sno <= end_seq_no; sno++) { - en = proto_tree_add_uint_format_value(missing_tree, hf_miss_seq_no, - tvb, offset, 6, sno, - "%d", sno); - proto_item_set_generated (en); - } tot_no_missing += (end_seq_no - ack_seq_no + 1); } @@ -1167,7 +1165,7 @@ static int dissect_p_mul (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, v timestamp = tvb_get_ntoh64 (tvb, offset); proto_tree_add_uint64_format_value(p_mul_tree, hf_timestamp_option, tvb, offset, 8, timestamp, - "%" G_GINT64_MODIFIER "d.%d second%s (%" G_GINT64_MODIFIER "u)", + "%" PRId64 ".%d second%s (%" PRIu64 ")", timestamp / 10, (int) timestamp % 10, (timestamp == 10) ? "" : "s", timestamp); offset += 8; @@ -1395,6 +1393,15 @@ void proto_register_p_mul (void) { &hf_miss_seq_range, { "Missing Data PDU Seq Range", "p_mul.missing_seq_range", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, + { &hf_miss_seq_range_from, + { "Missing Data PDU Seq Range from", "p_mul.missing_seq_range.from", FT_UINT16, + BASE_DEC, NULL, 0x0, NULL, HFILL } }, + { &hf_miss_seq_range_delimiter, + { "Range Delimiter (always zero)", "p_mul.missing_seq_range.delimiter", FT_UINT16, + BASE_DEC, NULL, 0x0, NULL, HFILL } }, + { &hf_miss_seq_range_to, + { "Missing Data PDU Seq Range to", "p_mul.missing_seq_range.to", FT_UINT16, + BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_tot_miss_seq_no, { "Total Number of Missing Data PDU Sequence Numbers", "p_mul.no_missing_seq_no", FT_UINT16, BASE_DEC, NULL, 0x0, @@ -1409,7 +1416,7 @@ void proto_register_p_mul (void) { "Destination ID", "p_mul.dest_id", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_msg_seq_no, - { "Message Sequence Number", "p_mul.msg_seq_no", FT_UINT16, BASE_DEC, + { "Message Sequence Number", "p_mul.msg_seq_no", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_sym_key, { "Symmetric Key", "p_mul.sym_key", FT_NONE, BASE_NONE, |