aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-p_mul.c
diff options
context:
space:
mode:
Diffstat (limited to 'epan/dissectors/packet-p_mul.c')
-rw-r--r--epan/dissectors/packet-p_mul.c223
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,