summaryrefslogtreecommitdiff
path: root/epan/dissectors
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2015-06-21 15:06:47 -0400
committerAnders Broman <a.broman58@gmail.com>2015-06-22 05:42:42 +0000
commite8a238fce27baf85ee9ea795ce1a63b7609d5267 (patch)
tree03a8cda1ba9b4bce35849a1b69c813b1ab906a8b /epan/dissectors
parentd729d8055be976319e522a2a0d9da7d7b988009b (diff)
downloadwireshark-e8a238fce27baf85ee9ea795ce1a63b7609d5267.tar.gz
Eliminate proto_tree_add_text from some dissectors.
Change-Id: I979990e9385182870ce4809a7e6fa16e598cb2be Reviewed-on: https://code.wireshark.org/review/9016 Reviewed-by: Michael Mann <mmann78@netscape.net> Petri-Dish: Michael Mann <mmann78@netscape.net> Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/dissectors')
-rw-r--r--epan/dissectors/packet-assa_r3.c87
-rw-r--r--epan/dissectors/packet-dnp.c80
-rw-r--r--epan/dissectors/packet-l2tp.c54
-rw-r--r--epan/dissectors/packet-rsl.c78
-rw-r--r--epan/dissectors/packet-uma.c62
5 files changed, 262 insertions, 99 deletions
diff --git a/epan/dissectors/packet-assa_r3.c b/epan/dissectors/packet-assa_r3.c
index 3b8484a4a6..553b5485f8 100644
--- a/epan/dissectors/packet-assa_r3.c
+++ b/epan/dissectors/packet-assa_r3.c
@@ -1664,6 +1664,17 @@ static gint hf_r3_dumpm41t81_reg12_notused = -1;
static gint hf_r3_dumpm41t81_reg13_rs = -1;
static gint hf_r3_dumpm41t81_reg13_notused = -1;
+static gint hf_r3_sn_manufacturer = -1;
+static gint hf_r3_sn_year = -1;
+static gint hf_r3_sn_week = -1;
+static gint hf_r3_sn_model = -1;
+static gint hf_r3_sn_sequence = -1;
+static gint hf_r3_sn_group = -1;
+static gint hf_r3_sn_nid = -1;
+static gint hf_r3_sn_hid = -1;
+static gint hf_r3_sn_power_supply = -1;
+static gint hf_r3_sn_mortise = -1;
+
static gint hf_r3_debuglog_recordnumber = -1;
static gint hf_r3_debuglog_flags = -1;
static gint hf_r3_debuglog_tick = -1;
@@ -3561,25 +3572,23 @@ dissect_serialnumber (tvbuff_t *tvb, guint32 start_offset, guint32 length _U_, p
sn_tree = proto_item_add_subtree (sn_item, ett_r3serialnumber);
s = tvb_get_string_enc (wmem_packet_scope(), tvb, start_offset + 0, 2, ENC_ASCII|ENC_NA);
- proto_tree_add_text (sn_tree, tvb, start_offset + 0, 2, "Manufacturer .. : %s (%s)", s, str_to_str (s, r3_snmanufacturernames, "[Unknown]"));
+ proto_tree_add_string_format_value(sn_tree, hf_r3_sn_manufacturer, tvb, start_offset + 0, 2, s, "%s (%s)", s, str_to_str (s, r3_snmanufacturernames, "[Unknown]"));
s = tvb_get_string_enc (wmem_packet_scope(), tvb, start_offset + 2, 1, ENC_ASCII|ENC_NA);
- proto_tree_add_text (sn_tree, tvb, start_offset + 2, 1, "Year .......... : %s (%s)", s, str_to_str (s, r3_snyearnames, "[Unknown]"));
- s = tvb_get_string_enc (wmem_packet_scope(), tvb, start_offset + 3, 2, ENC_ASCII|ENC_NA);
- proto_tree_add_text (sn_tree, tvb, start_offset + 3, 2, "Week .......... : %s", s);
+ proto_tree_add_string_format_value(sn_tree, hf_r3_sn_year, tvb, start_offset + 2, 1, s, "%s (%s)", s, str_to_str (s, r3_snyearnames, "[Unknown]"));
+ proto_tree_add_item(sn_tree, hf_r3_sn_week, tvb, start_offset + 3, 2, ENC_ASCII|ENC_NA);
s = tvb_get_string_enc (wmem_packet_scope(), tvb, start_offset + 5, 1, ENC_ASCII|ENC_NA);
- proto_tree_add_text (sn_tree, tvb, start_offset + 5, 1, "Model ......... : %s (%s)", s, str_to_str (s, r3_snmodelnames, "[Unknown]"));
- s = tvb_get_string_enc (wmem_packet_scope(), tvb, start_offset + 6, 4, ENC_ASCII|ENC_NA);
- proto_tree_add_text (sn_tree, tvb, start_offset + 6, 4, "Sequence ...... : %s", s);
+ proto_tree_add_string_format_value(sn_tree, hf_r3_sn_model, tvb, start_offset + 5, 1, s, "%s (%s)", s, str_to_str (s, r3_snmodelnames, "[Unknown]"));
+ proto_tree_add_item(sn_tree, hf_r3_sn_sequence, tvb, start_offset + 6, 4, ENC_ASCII|ENC_NA);
s = tvb_get_string_enc (wmem_packet_scope(), tvb, start_offset + 10, 1, ENC_ASCII|ENC_NA);
- proto_tree_add_text (sn_tree, tvb, start_offset + 10, 1, "Group ......... : %s (%s)", s, str_to_str (s, r3_sngroupnames, "[Unknown]"));
+ proto_tree_add_string_format_value(sn_tree, hf_r3_sn_group, tvb, start_offset + 10, 1, s, "%s (%s)", s, str_to_str (s, r3_sngroupnames, "[Unknown]"));
s = tvb_get_string_enc (wmem_packet_scope(), tvb, start_offset + 11, 1, ENC_ASCII|ENC_NA);
- proto_tree_add_text (sn_tree, tvb, start_offset + 11, 1, "NID ........... : %s (%s)", s, str_to_str (s, r3_snnidnames, "[Unknown]"));
+ proto_tree_add_string_format_value(sn_tree, hf_r3_sn_nid, tvb, start_offset + 11, 1, s, "%s (%s)", s, str_to_str (s, r3_snnidnames, "[Unknown]"));
s = tvb_get_string_enc (wmem_packet_scope(), tvb, start_offset + 12, 2, ENC_ASCII|ENC_NA);
- proto_tree_add_text (sn_tree, tvb, start_offset + 12, 2, "HID ........... : %s (%s)", s, str_to_str (s, r3_snhidnames, "[Unknown]"));
+ proto_tree_add_string_format_value(sn_tree, hf_r3_sn_hid, tvb, start_offset + 12, 2, s, "%s (%s)", s, str_to_str (s, r3_snhidnames, "[Unknown]"));
s = tvb_get_string_enc (wmem_packet_scope(), tvb, start_offset + 14, 1, ENC_ASCII|ENC_NA);
- proto_tree_add_text (sn_tree, tvb, start_offset + 14, 1, "Power Supply .. : %s (%s)", s, str_to_str (s, r3_snpowersupplynames, "[Unknown]"));
+ proto_tree_add_string_format_value(sn_tree, hf_r3_sn_power_supply, tvb, start_offset + 14, 1, s, "%s (%s)", s, str_to_str (s, r3_snpowersupplynames, "[Unknown]"));
s = tvb_get_string_enc (wmem_packet_scope(), tvb, start_offset + 15, 1, ENC_ASCII|ENC_NA);
- proto_tree_add_text (sn_tree, tvb, start_offset + 15, 1, "Mortise ....... : %s (%s)", s, str_to_str (s, r3_snmortisenames, "[Unknown]"));
+ proto_tree_add_string_format_value(sn_tree, hf_r3_sn_mortise, tvb, start_offset + 15, 1, s, "%s (%s)", s, str_to_str (s, r3_snmortisenames, "[Unknown]"));
}
/*
@@ -5274,7 +5283,8 @@ dissect_r3_cmd_setconfig (tvbuff_t *tvb, guint32 start_offset, guint32 length _U
}
}
else {
- proto_tree_add_text (sc_tree, payload_tvb, offset + 2, item_length - 2, "[Unknown Field Type]");
+ proto_tree_add_none_format (sc_tree, hf_r3_upstreamfielderror, payload_tvb, offset + 2,
+ item_length - 2, "Unknown Field Type");
}
offset += item_length;
@@ -9830,7 +9840,56 @@ void proto_register_r3 (void)
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
-
+ { &hf_r3_sn_manufacturer,
+ { "Manufacturer", "r3.sn.manufacturer",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_r3_sn_year,
+ { "Year", "r3.sn.year",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_r3_sn_week,
+ { "Week", "r3.sn.week",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_r3_sn_model,
+ { "Model", "r3.sn.model",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_r3_sn_sequence,
+ { "Sequence", "r3.sn.sequence",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_r3_sn_group,
+ { "Group", "r3.sn.group",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_r3_sn_nid,
+ { "NID", "r3.sn.nid",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_r3_sn_hid,
+ { "HID", "r3.sn.hid",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_r3_sn_power_supply,
+ { "Power Supply", "r3.sn.power_supply",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_r3_sn_mortise,
+ { "Mortise", "r3.sn.mortise",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
{ &hf_r3_debuglog_recordnumber,
{ "Record Number", "r3.debuglog.recordnumber",
FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
diff --git a/epan/dissectors/packet-dnp.c b/epan/dissectors/packet-dnp.c
index 86bfc21e41..4754667fa4 100644
--- a/epan/dissectors/packet-dnp.c
+++ b/epan/dissectors/packet-dnp.c
@@ -729,6 +729,20 @@ static int hf_dnp3_al_da_length = -1;
static int hf_dnp3_al_da_int8 = -1;
static int hf_dnp3_al_da_int32 = -1;
+/* Generated from convert_proto_tree_add_text.pl */
+static int hf_dnp3_al_point_index = -1;
+static int hf_dnp3_al_da_value = -1;
+static int hf_dnp3_al_count = -1;
+static int hf_dnp3_al_on_time = -1;
+static int hf_dnp3_al_off_time = -1;
+static int hf_dnp3_al_time_delay = -1;
+static int hf_dnp3_al_file_string_offset = -1;
+static int hf_dnp3_al_file_string_length = -1;
+static int hf_dnp3_al_file_name = -1;
+static int hf_dnp3_al_octet_string = -1;
+static int hf_dnp3_unknown_data_chunk = -1;
+static int hf_dnp3_application_chunk = -1;
+
/***************************************************************************/
/* Value String Look-Ups */
/***************************************************************************/
@@ -1272,6 +1286,9 @@ static gint ett_dnp3_al_obj_point_perms = -1;
static expert_field ei_dnp_num_items_neg = EI_INIT;
static expert_field ei_dnp_invalid_length = EI_INIT;
static expert_field ei_dnp_iin_abnormal = EI_INIT;
+/* Generated from convert_proto_tree_add_text.pl */
+static expert_field ei_dnp3_crc_failed = EI_INIT;
+static expert_field ei_dnp3_buffering_user_data_until_final_frame_is_received = EI_INIT;
/* Tables for reassembly of fragments. */
static reassembly_table al_reassembly_table;
@@ -1470,7 +1487,7 @@ dnp3_al_obj_procindex(tvbuff_t *tvb, int offset, guint8 al_objq_index, guint32 *
{
case AL_OBJQL_IDX_NI: /* No Index */
indexbytes = 0;
- index_item = proto_tree_add_text(item_tree, tvb, offset, 0, "Point Index: %u", *al_ptaddr);
+ index_item = proto_tree_add_uint(item_tree, hf_dnp3_al_point_index, tvb, offset, 0, *al_ptaddr);
PROTO_ITEM_SET_GENERATED(index_item);
break;
case AL_OBJQL_IDX_1O:
@@ -1820,12 +1837,12 @@ dnp3_al_process_object(tvbuff_t *tvb, packet_info *pinfo, int offset,
data_pos += indexbytes;
if (!header_only || (AL_OBJQL_IDX_1OS <= al_objq_index && al_objq_index <= AL_OBJQL_IDX_4OS)) {
- guint8 al_2bit, al_ptflags, al_ctlobj_count, al_bi_val, al_tcc_code, da_len;
+ guint8 al_2bit, al_ptflags, al_bi_val, al_tcc_code, da_len;
gint16 al_val_int16;
guint16 al_val_uint16, al_ctlobj_stat;
guint16 al_relms, al_filename_offs, al_filename_len, al_file_ctrl_mode;
gint32 al_val_int32;
- guint32 al_val_uint32, al_ctlobj_on, al_ctlobj_off, file_data_size;
+ guint32 al_val_uint32, file_data_size;
nstime_t al_reltime, al_abstime;
gboolean al_bit;
gfloat al_valflt;
@@ -1919,7 +1936,7 @@ dnp3_al_process_object(tvbuff_t *tvb, packet_info *pinfo, int offset,
da_len = tvb_get_guint8(tvb, offset+1);
proto_tree_add_item(point_tree, hf_dnp3_al_da_length, tvb, offset+1, 1, ENC_LITTLE_ENDIAN);
- proto_tree_add_text(point_tree, tvb, offset+2, da_len, "Value: %s", tvb_get_string_enc(wmem_packet_scope(), tvb, offset+2, da_len, ENC_ASCII));
+ proto_tree_add_item(point_tree, hf_dnp3_al_da_value, tvb, offset+2, da_len, ENC_ASCII|ENC_NA);
proto_item_append_text(object_item, ", Value: %s", tvb_get_string_enc(wmem_packet_scope(), tvb, offset+2, da_len, ENC_ASCII));
offset += 2 + da_len;
@@ -2144,22 +2161,17 @@ dnp3_al_process_object(tvbuff_t *tvb, packet_info *pinfo, int offset,
data_pos += 1;
/* Get "Count" Field */
- al_ctlobj_count = tvb_get_guint8(tvb, data_pos);
+ proto_tree_add_item(point_tree, hf_dnp3_al_count, tvb, data_pos, 1, ENC_LITTLE_ENDIAN);
data_pos += 1;
/* Get "On Time" Field */
- al_ctlobj_on = tvb_get_letohl(tvb, data_pos);
+ proto_tree_add_item(point_tree, hf_dnp3_al_on_time, tvb, data_pos, 4, ENC_LITTLE_ENDIAN);
data_pos += 4;
/* Get "Off Time" Field */
- al_ctlobj_off = tvb_get_letohl(tvb, data_pos);
+ proto_tree_add_item(point_tree, hf_dnp3_al_off_time, tvb, data_pos, 4, ENC_LITTLE_ENDIAN);
data_pos += 4;
- /* Print "Count", "On Time" and "Off Time" to tree */
- proto_tree_add_text(point_tree, tvb, data_pos - 9, 9,
- "[Count: %u] [On-Time: %u] [Off-Time: %u]",
- al_ctlobj_count, al_ctlobj_on, al_ctlobj_off);
-
/* Get "Control Status" Field */
proto_tree_add_item(point_tree, hf_dnp3_al_ctrlstatus, tvb, data_pos, 1, ENC_LITTLE_ENDIAN);
data_pos += 1;
@@ -2641,7 +2653,7 @@ dnp3_al_process_object(tvbuff_t *tvb, packet_info *pinfo, int offset,
case AL_OBJ_TDELAYF: /* Time Delay - Fine (Obj:52, Var:02) */
al_val_uint16 = tvb_get_letohs(tvb, data_pos);
- proto_tree_add_text(object_tree, tvb, data_pos, 2, "Time Delay: %u ms", al_val_uint16);
+ proto_tree_add_uint_format_value(object_tree, hf_dnp3_al_time_delay, tvb, data_pos, 2, al_val_uint16, "%u ms", al_val_uint16);
data_pos += 2;
proto_item_set_len(point_item, data_pos - offset);
@@ -2660,10 +2672,10 @@ dnp3_al_process_object(tvbuff_t *tvb, packet_info *pinfo, int offset,
case AL_OBJ_FILE_CMD: /* File Control - File Command (Obj:70, Var:03) */
/* File name offset and length */
al_filename_offs = tvb_get_letohs(tvb, data_pos);
- proto_tree_add_text(point_tree, tvb, data_pos, 2, "File String Offset: %u", al_filename_offs);
+ proto_tree_add_item(point_tree, hf_dnp3_al_file_string_offset, tvb, data_pos, 2, ENC_LITTLE_ENDIAN);
data_pos += 2;
al_filename_len = tvb_get_letohs(tvb, data_pos);
- proto_tree_add_text(point_tree, tvb, data_pos, 2, "File String Length: %u", al_filename_len);
+ proto_tree_add_item(point_tree, hf_dnp3_al_file_string_length, tvb, data_pos, 2, ENC_LITTLE_ENDIAN);
data_pos += 2;
/* Grab the mode as it determines if some of the following fields are relevant */
@@ -2723,7 +2735,7 @@ dnp3_al_process_object(tvbuff_t *tvb, packet_info *pinfo, int offset,
const gchar *al_filename;
al_filename = tvb_get_string_enc(wmem_packet_scope(), tvb, data_pos, al_filename_len, ENC_ASCII);
- proto_tree_add_text(point_tree, tvb, data_pos, al_filename_len, "File Name: %s", al_filename);
+ proto_tree_add_item(point_tree, hf_dnp3_al_file_name, tvb, data_pos, al_filename_len, ENC_ASCII|ENC_NA);
}
data_pos += al_filename_len;
proto_item_set_len(point_item, data_pos - offset);
@@ -2820,7 +2832,7 @@ dnp3_al_process_object(tvbuff_t *tvb, packet_info *pinfo, int offset,
/* read the number of bytes defined by the variation */
if (al_oct_len > 0) {
- proto_tree_add_text(object_tree, tvb, data_pos, al_oct_len, "Octet String (%u bytes)", al_oct_len);
+ proto_tree_add_item(object_tree, hf_dnp3_al_octet_string, tvb, data_pos, al_oct_len, ENC_NA);
data_pos += al_oct_len;
proto_item_set_len(point_item, data_pos - offset);
}
@@ -2830,8 +2842,7 @@ dnp3_al_process_object(tvbuff_t *tvb, packet_info *pinfo, int offset,
default: /* In case of unknown object */
- proto_tree_add_text(object_tree, tvb, offset, -1,
- "Unknown Data Chunk, %u Bytes", tvb_reported_length_remaining(tvb, offset));
+ proto_tree_add_item(object_tree, hf_dnp3_unknown_data_chunk, tvb, offset, -1, ENC_NA);
offset = tvb_length(tvb); /* Finish decoding if unknown object is encountered... */
break;
}
@@ -2909,7 +2920,7 @@ dissect_dnp3_al(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
/* If this packet is NOT the final Application Layer Message, exit and continue
processing the remaining data in the fragment. */
if (!(al_ctl & DNP3_AL_FIN)) {
- t_robj = proto_tree_add_text(al_tree, tvb, offset, -1, "Buffering User Data Until Final Frame is Received..");
+ t_robj = proto_tree_add_expert(al_tree, pinfo, &ei_dnp3_buffering_user_data_until_final_frame_is_received, tvb, offset, -1);
return 1;
}
#endif
@@ -3299,15 +3310,15 @@ dissect_dnp3_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void*
crc_OK = calc_crc == act_crc;
if (crc_OK)
{
- proto_tree_add_text(al_tree, tvb, offset - (chk_size + 2), chk_size + 2,
- "Application Chunk %u Len: %u CRC 0x%04x",
+ proto_tree_add_bytes_format(al_tree, hf_dnp3_application_chunk, tvb, offset - (chk_size + 2), chk_size + 2,
+ NULL, "Application Chunk %u Len: %u CRC 0x%04x",
i, chk_size, act_crc);
data_len -= chk_size;
}
else
{
- proto_tree_add_text(al_tree, tvb, offset - (chk_size + 2), chk_size + 2,
- "Application Chunk %u Len: %u Bad CRC got 0x%04x expected 0x%04x",
+ proto_tree_add_bytes_format(al_tree, hf_dnp3_application_chunk, tvb, offset - (chk_size + 2), chk_size + 2,
+ NULL, "Application Chunk %u Len: %u Bad CRC got 0x%04x expected 0x%04x",
i, chk_size, act_crc, calc_crc);
break;
}
@@ -3407,7 +3418,7 @@ dissect_dnp3_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void*
{
/* CRC error - throw away the data. */
next_tvb = NULL;
- proto_tree_add_text(dnp3_tree, tvb, 11, -1, "CRC failed, %u chunks", i);
+ proto_tree_add_expert_format(dnp3_tree, pinfo, &ei_dnp3_crc_failed, tvb, 11, -1, "CRC failed, %u chunks", i);
}
/* Dissect any completed Application Layer message */
@@ -4468,7 +4479,21 @@ proto_register_dnp3(void)
{ "Reassembled DNP length", "dnp3.al.fragment.reassembled.length",
FT_UINT32, BASE_DEC, NULL, 0x0,
"The total length of the reassembled payload", HFILL }
- }
+ },
+ /* Generated from convert_proto_tree_add_text.pl */
+ { &hf_dnp3_al_point_index, { "Point Index", "dnp3.al.point_index", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_dnp3_al_da_value, { "Value", "dnp3.al.da.value", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_dnp3_al_count, { "Count", "dnp3.al.count", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_dnp3_al_on_time, { "On Time", "dnp3.al.on_time", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_dnp3_al_off_time, { "Off Time", "dnp3.al.off_time", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_dnp3_al_time_delay, { "Time Delay", "dnp3.al.time_delay", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_dnp3_al_file_string_offset, { "File String Offset", "dnp3.al.file_string_offset", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_dnp3_al_file_string_length, { "File String Length", "dnp3.al.file_string_length", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_dnp3_al_file_name, { "File Name", "dnp3.al.file_name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_dnp3_al_octet_string, { "Octet String", "dnp3.al.octet_string", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_dnp3_unknown_data_chunk, { "Unknown Data Chunk", "dnp3.al.unknown_data_chunk", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_dnp3_application_chunk, { "Application Chunk", "dnp.application_chunk", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+
};
/* Setup protocol subtree array */
@@ -4496,6 +4521,9 @@ proto_register_dnp3(void)
{ &ei_dnp_num_items_neg, { "dnp3.num_items_neg", PI_MALFORMED, PI_ERROR, "Negative number of items", EXPFILL }},
{ &ei_dnp_invalid_length, { "dnp3.invalid_length", PI_MALFORMED, PI_ERROR, "Invalid length", EXPFILL }},
{ &ei_dnp_iin_abnormal, { "dnp3.iin_abnormal", PI_PROTOCOL, PI_WARN, "IIN Abnormality", EXPFILL }},
+ /* Generated from convert_proto_tree_add_text.pl */
+ { &ei_dnp3_buffering_user_data_until_final_frame_is_received, { "dnp3.buffering_user_data_until_final_frame_is_received", PI_PROTOCOL, PI_WARN, "Buffering User Data Until Final Frame is Received..", EXPFILL }},
+ { &ei_dnp3_crc_failed, { "dnp.crc_failed", PI_PROTOCOL, PI_WARN, "CRC failed", EXPFILL }},
};
module_t *dnp3_module;
expert_module_t* expert_dnp3;
diff --git a/epan/dissectors/packet-l2tp.c b/epan/dissectors/packet-l2tp.c
index ad66e5c4b7..e506809315 100644
--- a/epan/dissectors/packet-l2tp.c
+++ b/epan/dissectors/packet-l2tp.c
@@ -201,6 +201,10 @@ static int hf_l2tp_avp_framing_errors = -1;
static int hf_l2tp_cisco_remote_end_id = -1;
static int hf_l2tp_avp_tx_connect_speed_v3 = -1;
static int hf_l2tp_avp_rx_connect_speed_v3 = -1;
+static int hf_l2tp_lapd_info = -1;
+static int hf_l2tp_session_id = -1;
+static int hf_l2tp_zero_length_bit_message = -1;
+static int hf_l2tp_offset_padding = -1;
static dissector_table_t l2tp_vendor_avp_dissector_table;
@@ -234,6 +238,9 @@ static gint ett_l2tp_lcp = -1;
static gint ett_l2tp_l2_spec = -1;
static expert_field ei_l2tp_incorrect_digest = EI_INIT;
+/* Generated from convert_proto_tree_add_text.pl */
+static expert_field ei_l2tp_vendor_specific_avp_data = EI_INIT;
+static expert_field ei_l2tp_avp_length = EI_INIT;
static const enum_val_t l2tpv3_cookies[] = {
{"detect", "Detect", -1},
@@ -1380,8 +1387,7 @@ static int dissect_l2tp_cisco_avps(tvbuff_t *tvb, packet_info *pinfo _U_, proto_
break;
default:
- proto_tree_add_text(l2tp_avp_tree, tvb, offset,
- avp_len-6, "Vendor-Specific AVP data");
+ proto_tree_add_expert(l2tp_avp_tree, pinfo, &ei_l2tp_vendor_specific_avp_data, tvb, offset, avp_len-6);
break;
}
offset += avp_len;
@@ -1464,8 +1470,7 @@ dissect_l2tp_vnd_cablelabs_avps(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tre
}
break;
default:
- proto_tree_add_text(l2tp_avp_tree, tvb, offset,
- avp_len, "Vendor-Specific AVP(not dissected yet)");
+ proto_tree_add_expert(l2tp_avp_tree, pinfo, &ei_l2tp_vendor_specific_avp_data, tvb, offset, avp_len);
break;
}
offset += avp_len;
@@ -1511,8 +1516,7 @@ static void process_control_avps(tvbuff_t *tvb,
avp_type = tvb_get_ntohs(tvb, idx + 4);
if (avp_len < 6) {
- proto_tree_add_text(l2tp_avp_tree ? l2tp_avp_tree : l2tp_tree, tvb, idx, 2,
- "AVP length must be >= 6, got %u", avp_len);
+ proto_tree_add_expert_format(l2tp_avp_tree ? l2tp_avp_tree : l2tp_tree, pinfo, &ei_l2tp_avp_length, tvb, idx, 2, "AVP length must be >= 6, got %u", avp_len);
return;
}
@@ -1546,9 +1550,9 @@ static void process_control_avps(tvbuff_t *tvb,
proto_tree_add_item(l2tp_avp_tree, hf_l2tp_avp_vendor_id, tvb, idx, 2, ENC_BIG_ENDIAN);
idx += 2;
- proto_tree_add_text(l2tp_avp_tree, tvb, idx, 2, "Type: %u", avp_type);
+ proto_tree_add_uint(l2tp_avp_tree, hf_l2tp_avp_type, tvb, idx, 2, avp_type);
idx += 2;
- proto_tree_add_text(l2tp_avp_tree, tvb, idx, avp_len-6, "Vendor-Specific AVP data");
+ proto_tree_add_expert(l2tp_avp_tree, pinfo, &ei_l2tp_vendor_specific_avp_data, tvb, idx, avp_len-6);
avp_len-=6;
}
idx += avp_len;
@@ -1998,8 +2002,7 @@ static void process_control_avps(tvbuff_t *tvb,
}
default:
if(avp_len>0)
- proto_tree_add_text(l2tp_avp_tree, tvb, idx, avp_len,
- "AVP data not dissected yet");
+ proto_tree_add_expert(l2tp_avp_tree, pinfo, &ei_l2tp_vendor_specific_avp_data, tvb, idx, avp_len);
break;
}
@@ -2150,7 +2153,7 @@ process_l2tpv3_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
break;
case L2TPv3_L2_SPECIFIC_LAPD:
if (tree)
- proto_tree_add_text(tree, tvb, idx + cookie_len + 4, 3,"LAPD info");
+ proto_tree_add_item(tree, hf_l2tp_lapd_info, tvb, idx + cookie_len + 4, 3, ENC_NA);
next_tvb = tvb_new_subset_remaining(tvb, idx + cookie_len+4+3);
break;
case L2TPv3_L2_SPECIFIC_NONE:
@@ -2255,23 +2258,19 @@ static void
process_l2tpv3_data_ip(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
l2tpv3_conversation_t *l2tp_conv)
{
- proto_tree *l2tp_tree = NULL;
- proto_item *l2tp_item = NULL;
+ proto_tree *l2tp_tree;
+ proto_item *l2tp_item;
int idx = 0;
int sid;
sid = tvb_get_ntohl(tvb, idx);
- if (tree) {
- l2tp_item = proto_tree_add_item(tree, proto_l2tp, tvb, 0, -1, ENC_NA);
- l2tp_tree = proto_item_add_subtree(l2tp_item, ett_l2tp);
- proto_item_append_text(l2tp_item, " version 3");
+ l2tp_item = proto_tree_add_item(tree, proto_l2tp, tvb, 0, -1, ENC_NA);
+ l2tp_tree = proto_item_add_subtree(l2tp_item, ett_l2tp);
+ proto_item_append_text(l2tp_item, " version 3");
- proto_tree_add_text(l2tp_tree, tvb, 0, 4,
- "Packet Type: %s Session Id=%u",
- data_msg, sid);
- }
+ proto_tree_add_uint_format(l2tp_tree, hf_l2tp_session_id, tvb, 0, 4, sid, "Packet Type: %s Session Id=%u", data_msg, sid);
/* Call process_l2tpv3_data from Session ID (offset in idx of 0) */
process_l2tpv3_data(tvb, pinfo, tree, l2tp_tree, l2tp_item, &idx, l2tp_conv->tunnel);
@@ -2397,7 +2396,7 @@ process_l2tpv3_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int
}
if (tree && (LENGTH_BIT(control))&&(length==12)) {
- proto_tree_add_text(l2tp_tree, tvb, 0, 0, "Zero Length Bit message");
+ proto_tree_add_item(l2tp_tree, hf_l2tp_zero_length_bit_message, tvb, 0, 0, ENC_NA);
} else {
avp_type = tvb_get_ntohs(tvb, idx + 4);
if (avp_type == CONTROL_MESSAGE) {
@@ -2639,14 +2638,14 @@ dissect_l2tp_udp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data
idx += 2;
if (offset_size != 0) {
if (tree) {
- proto_tree_add_text(l2tp_tree, tvb, idx, offset_size, "Offset Padding");
+ proto_tree_add_item(l2tp_tree, hf_l2tp_offset_padding, tvb, idx, offset_size, ENC_NA);
}
idx += offset_size;
}
}
if (tree && (LENGTH_BIT(control))&&(length==12)) {
- proto_tree_add_text(l2tp_tree, tvb, 0, 0, "Zero Length Bit message");
+ proto_tree_add_item(l2tp_tree, hf_l2tp_zero_length_bit_message, tvb, 0, 0, ENC_NA);
}
if (!CONTROL_BIT(control)) { /* Data Messages so we are done */
@@ -3015,6 +3014,10 @@ proto_register_l2tp(void)
{ &hf_l2tp_avp_nonce, { "Nonce", "l2tp.avp.nonce", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
{ &hf_l2tp_avp_tx_connect_speed_v3, { "Tx Connect Speed v3", "l2tp.avp.tx_connect_speed_v3", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }},
{ &hf_l2tp_avp_rx_connect_speed_v3, { "Rx Connect Speed v3", "l2tp.avp.rx_connect_speed_v3", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }},
+ { &hf_l2tp_lapd_info, { "LAPD info", "l2tp.lapd_info", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_l2tp_session_id, { "Packet Type", "l2tp.session_id", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
+ { &hf_l2tp_zero_length_bit_message, { "Zero Length Bit message", "l2tp.zero_length_bit_message", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_l2tp_offset_padding, { "Offset Padding", "l2tp.offset_padding", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
};
static gint *ett[] = {
@@ -3028,6 +3031,9 @@ proto_register_l2tp(void)
static ei_register_info ei[] = {
{ &ei_l2tp_incorrect_digest, { "l2tp.incorrect_digest", PI_CHECKSUM, PI_WARN, "Incorrect Digest", EXPFILL }},
+ /* Generated from convert_proto_tree_add_text.pl */
+ { &ei_l2tp_vendor_specific_avp_data, { "l2tp.vendor_specific_avp_data", PI_UNDECODED, PI_WARN, "Vendor-Specific AVP data", EXPFILL }},
+ { &ei_l2tp_avp_length, { "l2tp.avp_length.bad", PI_MALFORMED, PI_ERROR, "Bad AVP length", EXPFILL }},
};
module_t *l2tp_module;
diff --git a/epan/dissectors/packet-rsl.c b/epan/dissectors/packet-rsl.c
index 8ea6d7e1b9..228ff8ed0c 100644
--- a/epan/dissectors/packet-rsl.c
+++ b/epan/dissectors/packet-rsl.c
@@ -36,6 +36,7 @@
#include "packet-gsm_a_common.h"
#include "lapd_sapi.h"
#include <epan/prefs.h>
+#include <epan/expert.h>
#include "packet-rtp.h"
#include "packet-rtcp.h"
@@ -133,7 +134,20 @@ static int hf_rsl_cstat_rx_octs = -1;
static int hf_rsl_cstat_lost_pkts = -1;
static int hf_rsl_cstat_ia_jitter = -1;
static int hf_rsl_cstat_avg_tx_dly = -1;
-
+/* Generated from convert_proto_tree_add_text.pl */
+static int hf_rsl_channel_description_tag = -1;
+static int hf_rsl_mobile_allocation_tag = -1;
+static int hf_rsl_no_resources_required = -1;
+static int hf_rsl_llsdu_ccch = -1;
+static int hf_rsl_llsdu_sacch = -1;
+static int hf_rsl_llsdu = -1;
+static int hf_rsl_rach_supplementary_information = -1;
+static int hf_rsl_full_immediate_assign_info_field = -1;
+static int hf_rsl_layer_3_message = -1;
+static int hf_rsl_descriptive_group_or_broadcast_call_reference = -1;
+static int hf_rsl_group_channel_description = -1;
+static int hf_rsl_uic = -1;
+static int hf_rsl_codec_list = -1;
/* Initialize the subtree pointers */
static int ett_rsl = -1;
@@ -199,6 +213,10 @@ static int ett_ie_local_port = -1;
static int ett_ie_local_ip = -1;
static int ett_ie_rtp_payload = -1;
+/* Generated from convert_proto_tree_add_text.pl */
+static expert_field ei_rsl_speech_or_data_indicator = EI_INIT;
+static expert_field ei_rsl_facility_information_element_3gpp_ts_44071 = EI_INIT;
+static expert_field ei_rsl_embedded_message_tfo_configuration = EI_INIT;
static proto_tree *top_tree;
static dissector_handle_t gsm_cbch_handle;
@@ -933,14 +951,14 @@ dissect_rsl_ie_ch_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, in
* length should be included.
* XXX Hmm a type 3 IE (TV).
*/
- proto_tree_add_text(ie_tree, tvb, offset, 1, "Channel Description Tag");
+ proto_tree_add_item(ie_tree, hf_rsl_channel_description_tag, tvb, offset, 1, ENC_NA);
de_rr_ch_dsc(tvb, ie_tree, pinfo, offset+1, length, NULL, 0);
offset += 4;
/*
* The 3GPP TS 24.008 "Mobile Allocation" shall for compatibility reasons be
* included but empty, i.e. the length shall be zero.
*/
- proto_tree_add_text(ie_tree, tvb, offset, 2, "Mobile Allocation Tag+Length(0)");
+ proto_tree_add_item(ie_tree, hf_rsl_mobile_allocation_tag, tvb, offset, 2, ENC_NA);
return ie_offset + length;
}
/*
@@ -1083,11 +1101,11 @@ dissect_rsl_ie_ch_mode(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
* If octet 4 indicates signalling then octet 6 is coded as follows:
* 0000 0000 No resources required
*/
- proto_tree_add_text(ie_tree, tvb, offset, 1, "0 No resources required(All other values are reserved)");
+ proto_tree_add_item(ie_tree, hf_rsl_no_resources_required, tvb, offset, 1, ENC_NA);
break;
default:
/* Should not happen */
- proto_tree_add_text(ie_tree, tvb, offset, 1, "Speech or data indicator != 1,2 or 3");
+ proto_tree_add_expert(ie_tree, pinfo, &ei_rsl_speech_or_data_indicator, tvb, offset, 1);
break;
}
@@ -1285,14 +1303,14 @@ dissect_rsl_ie_L3_inf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int o
if (type == L3_INF_CCCH)
{
/* L3 PDUs carried on CCCH have L2 PSEUDO LENGTH octet or are RR Short PD format */
- proto_tree_add_text(ie_tree, tvb, offset, length, "Link Layer Service Data Unit (L3 Message)(CCCH)");
+ proto_tree_add_item(ie_tree, hf_rsl_llsdu_ccch, tvb, offset, length, ENC_NA);
next_tvb = tvb_new_subset_length(tvb, offset, length);
call_dissector(gsm_a_ccch_handle, next_tvb, pinfo, top_tree);
}
else if (type == L3_INF_SACCH)
{
/* L3 PDUs carried on SACCH are normal format or are RR Short PD format */
- proto_tree_add_text(ie_tree, tvb, offset, length, "Link Layer Service Data Unit (L3 Message)(SACCH)");
+ proto_tree_add_item(ie_tree, hf_rsl_llsdu_sacch, tvb, offset, length, ENC_NA);
next_tvb = tvb_new_subset_length(tvb, offset, length);
call_dissector(gsm_a_sacch_handle, next_tvb, pinfo, top_tree);
}
@@ -1301,7 +1319,7 @@ dissect_rsl_ie_L3_inf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int o
/* Link Layer Service Data Unit (i.e. a layer 3 message
* as defined in 3GPP TS 24.008 or 3GPP TS 44.018)
*/
- proto_tree_add_text(ie_tree, tvb, offset, length, "Link Layer Service Data Unit (L3 Message)");
+ proto_tree_add_item(ie_tree, hf_rsl_llsdu, tvb, offset, length, ENC_NA);
next_tvb = tvb_new_subset_length(tvb, offset, length);
call_dissector(gsm_a_dtap_handle, next_tvb, pinfo, top_tree);
}
@@ -1554,7 +1572,7 @@ dissect_rsl_ie_rach_load(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree
/* Supplementary Information */
if ( length > 0) {
- proto_tree_add_text(ie_tree, tvb, offset, length , "Supplementary Information");
+ proto_tree_add_item(ie_tree, hf_rsl_rach_supplementary_information, tvb, offset, length, ENC_NA);
}
offset = ie_offset + length;
@@ -2067,7 +2085,7 @@ dissect_rsl_ie_full_imm_ass_inf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *t
* IMMEDIATE ASSIGNMENT EXTENDED or IMMEDIATE ASSIGNMENT REJECT)
* as defined in 3GPP TS 44.018.
*/
- proto_tree_add_text(ie_tree, tvb, offset, length, "Full Immediate Assign Info field");
+ proto_tree_add_item(ie_tree, hf_rsl_full_immediate_assign_info_field, tvb, offset, length, ENC_NA);
next_tvb = tvb_new_subset_length(tvb, offset, length);
call_dissector(gsm_a_ccch_handle, next_tvb, pinfo, top_tree);
@@ -2223,7 +2241,7 @@ dissect_rsl_ie_full_bcch_inf(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *
* Octets 3-25 contain the complete L3 message as defined in 3GPP TS 44.018.
*/
- proto_tree_add_text(ie_tree, tvb, offset, length, "Layer 3 message");
+ proto_tree_add_item(ie_tree, hf_rsl_layer_3_message, tvb, offset, length, ENC_NA);
next_tvb = tvb_new_subset_length(tvb, offset, length);
call_dissector(gsm_a_ccch_handle, next_tvb, pinfo, top_tree);
@@ -2445,7 +2463,7 @@ dissect_rsl_ie_grp_call_ref(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
- proto_tree_add_text(ie_tree, tvb, offset, length, "Descriptive group or broadcast call reference");
+ proto_tree_add_item(ie_tree, hf_rsl_descriptive_group_or_broadcast_call_reference, tvb, offset, length, ENC_NA);
/* The octets 3 to 7 are coded in the same way as the octets 2 to 6
* in the Descriptive group or broadcast call reference
@@ -2484,7 +2502,7 @@ dissect_rsl_ie_ch_desc(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
- proto_tree_add_text(ie_tree, tvb, offset, length, "Group Channel Description");
+ proto_tree_add_item(ie_tree, hf_rsl_group_channel_description, tvb, offset, length, ENC_NA);
/* Octet j (j = 3, 4, ..., n) is the unchanged octet j-2 of a radio interface Group Channel description
* information element as defined in 3GPP TS 44.018, n-2 is equal to the length of the radio interface
@@ -2643,7 +2661,7 @@ dissect_rsl_ie_uic(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int
/* Octet 3 bits 1 to 6 contain the radio interface octet 2 bits 3 to 8 of the
* UIC information element as defined in 3GPP TS 44.018.
*/
- proto_tree_add_text(ie_tree, tvb, offset, 1, "UIC");
+ proto_tree_add_item(ie_tree, hf_rsl_uic, tvb, offset, 1, ENC_NA);
offset++;
return offset;
@@ -2777,7 +2795,7 @@ dissect_rsl_ie_sup_codec_types(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree
proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
- proto_tree_add_text(tree, tvb, offset, length, "Codec List");
+ proto_tree_add_item(tree, hf_rsl_codec_list, tvb, offset, length, ENC_NA);
/* The Codec List field (octet 4) lists the codec types that are supported
* by the BSS and Transcoder, and are therefore potential candidates for TFO
@@ -2965,8 +2983,7 @@ dissect_rsl_ie_llp_apdu(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
* octets defined in 3GPP TS 44.071.
*/
/* TODO: Given traces with LLP data this IE could be further dissected */
- proto_tree_add_text(tree, tvb, offset, length,
- "Facility Information Element as defined in 3GPP TS 44.071");
+ proto_tree_add_expert(tree, pinfo, &ei_rsl_facility_information_element_3gpp_ts_44071, tvb, offset, length);
return ie_offset + length;
}
/*
@@ -3009,8 +3026,7 @@ dissect_rsl_ie_tfo_transp_cont(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree
* 3GPP TS 44.071 excluding the Facility IEI and length of Facility IEI
* octets defined in 3GPP TS 44.071.
*/
- proto_tree_add_text(tree, tvb, offset, length,
- "Embedded message that contains the TFO configuration");
+ proto_tree_add_expert(tree, pinfo, &ei_rsl_embedded_message_tfo_configuration, tvb, offset, length);
return ie_offset + length;
}
@@ -4259,6 +4275,20 @@ void proto_register_rsl(void)
{ "Average Tx Delay", "gsm_abis_rsl.ipacc.cstat.avg_tx_delay",
FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }
},
+ /* Generated from convert_proto_tree_add_text.pl */
+ { &hf_rsl_channel_description_tag, { "Channel Description Tag", "gsm_abis_rsl.channel_description_tag", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_rsl_mobile_allocation_tag, { "Mobile Allocation Tag+Length(0)", "gsm_abis_rsl.mobile_allocation_tag", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_rsl_no_resources_required, { "0 No resources required(All other values are reserved)", "gsm_abis_rsl.no_resources_required", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_rsl_llsdu_ccch, { "Link Layer Service Data Unit (L3 Message)(CCCH)", "gsm_abis_rsl.llsdu.ccch", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_rsl_llsdu_sacch, { "Link Layer Service Data Unit (L3 Message)(SACCH)", "gsm_abis_rsl.llsdu.sacch)", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_rsl_llsdu, { "Link Layer Service Data Unit (L3 Message)", "gsm_abis_rsl.llsdu", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_rsl_rach_supplementary_information, { "Supplementary Information", "gsm_abis_rsl.supplementary_information", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_rsl_full_immediate_assign_info_field, { "Full Immediate Assign Info field", "gsm_abis_rsl.full_immediate_assign_info_field", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_rsl_layer_3_message, { "Layer 3 message", "gsm_abis_rsl.layer_3_message", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_rsl_descriptive_group_or_broadcast_call_reference, { "Descriptive group or broadcast call reference", "gsm_abis_rsl.descriptive_group_or_broadcast_call_reference", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_rsl_group_channel_description, { "Group Channel Description", "gsm_abis_rsl.group_channel_description", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_rsl_uic, { "UIC", "gsm_abis_rsl.uic", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_rsl_codec_list, { "Codec List", "gsm_abis_rsl.codec_list", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
};
static gint *ett[] = {
&ett_rsl,
@@ -4324,7 +4354,15 @@ void proto_register_rsl(void)
&ett_ie_local_ip,
&ett_ie_rtp_payload,
};
+ static ei_register_info ei[] = {
+ /* Generated from convert_proto_tree_add_text.pl */
+ { &ei_rsl_speech_or_data_indicator, { "gsm_abis_rsl.speech_or_data_indicator.bad", PI_PROTOCOL, PI_WARN, "Speech or data indicator != 1,2 or 3", EXPFILL }},
+ { &ei_rsl_facility_information_element_3gpp_ts_44071, { "gsm_abis_rsl.facility_information_element_3gpp_ts_44071", PI_PROTOCOL, PI_NOTE, "Facility Information Element as defined in 3GPP TS 44.071", EXPFILL }},
+ { &ei_rsl_embedded_message_tfo_configuration, { "gsm_abis_rsl.embedded_message_tfo_configuration", PI_PROTOCOL, PI_NOTE, "Embedded message that contains the TFO configuration", EXPFILL }},
+ };
+
module_t *rsl_module;
+ expert_module_t *expert_rsl;
#define RSL_ATT_TLVDEF(_attr, _type, _fixed_len) \
rsl_att_tlvdef.def[_attr].type = _type; \
@@ -4410,6 +4448,8 @@ void proto_register_rsl(void)
proto_register_field_array(proto_rsl, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
+ expert_rsl = expert_register_protocol(proto_rsl);
+ expert_register_field_array(expert_rsl, ei, array_length(ei));
new_register_dissector("gsm_abis_rsl", dissect_rsl, proto_rsl);
diff --git a/epan/dissectors/packet-uma.c b/epan/dissectors/packet-uma.c
index 992db319b6..f482ad7ebb 100644
--- a/epan/dissectors/packet-uma.c
+++ b/epan/dissectors/packet-uma.c
@@ -54,6 +54,7 @@
#include "config.h"
#include <epan/packet.h>
+#include <epan/expert.h>
#include <epan/prefs.h>
#include <epan/asn1.h>
#include "packet-bssap.h"
@@ -177,12 +178,23 @@ static int hf_uma_urr_UNC_tcp_port = -1;
static int hf_uma_urr_RTP_port = -1;
static int hf_uma_urr_RTCP_port = -1;
static int hf_uma_urr_RXLEV_NCELL = -1;
+/* Generated from convert_proto_tree_add_text.pl */
+static int hf_uma_access_control_class_n = -1;
+static int hf_uma_data = -1;
/* Initialize the subtree pointers */
static int ett_uma = -1;
static int ett_uma_toc = -1;
static int ett_urr_ie = -1;
+/* Generated from convert_proto_tree_add_text.pl */
+static expert_field ei_uma_fqdn_not_present = EI_INIT;
+static expert_field ei_uma_wrong_message_type = EI_INIT;
+static expert_field ei_uma_unknown_protocol = EI_INIT;
+static expert_field ei_uma_skip_this_message = EI_INIT;
+static expert_field ei_uma_cbs_frames = EI_INIT;
+static expert_field ei_uma_unknown_format = EI_INIT;
+
/* The dynamic payload type which will be dissected as uma */
static range_t *global_uma_tcp_port_range;
@@ -911,7 +923,7 @@ dissect_uma_IE(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
ie_offset++;
proto_tree_add_item(urr_ie_tree, hf_uma_urr_radio_id, tvb, ie_offset, ie_len-1, ENC_NA);
}else{
- proto_tree_add_text(urr_ie_tree, tvb, ie_offset, ie_len,"Unknown format");
+ proto_tree_add_expert(urr_ie_tree, pinfo, &ei_uma_unknown_format, tvb, ie_offset, ie_len);
}
break;
case 4:
@@ -969,10 +981,9 @@ dissect_uma_IE(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
break;
case 10: /* UNC SGW Fully Qualified Domain/Host Name */
if ( ie_len > 0){
- string = (gchar*)tvb_get_string_enc(wmem_packet_scope(), tvb, ie_offset, ie_len, ENC_ASCII);
- proto_tree_add_string(urr_ie_tree, hf_uma_urr_FQDN, tvb, ie_offset, ie_len, string);
+ proto_tree_add_item(urr_ie_tree, hf_uma_urr_FQDN, tvb, ie_offset, ie_len, ENC_ASCII|ENC_NA);
}else{
- proto_tree_add_text(urr_ie_tree,tvb,offset,1,"FQDN not present");
+ proto_tree_add_expert(urr_ie_tree, pinfo, &ei_uma_fqdn_not_present, tvb, offset, 1);
}
break;
case 11: /* Redirection Counter */
@@ -1013,7 +1024,7 @@ dissect_uma_IE(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
/* PS HO, PS Handover indicator (octet 6) Bit 6 */
ie_offset++;
- proto_tree_add_text(urr_ie_tree,tvb,ie_offset,2,"Access Control Class N");
+ proto_tree_add_item(urr_ie_tree, hf_uma_access_control_class_n, tvb, ie_offset, 2, ENC_NA);
/* These fields are specified and described in 3GPP TS 44.018 and 3GPP TS 22.011. */
break;
case 15:
@@ -1362,7 +1373,7 @@ dissect_uma_IE(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
/* 11.2.72 Broadcast Container */
proto_tree_add_item(urr_ie_tree, hf_uma_urr_num_of_cbs_frms , tvb, ie_offset, 1, ENC_BIG_ENDIAN);
/* The coding of the page of the CBS message is defined in sub-clause 9.4.1 in TS 23.041. */
- proto_tree_add_text(urr_ie_tree, tvb, ie_offset + 1, ie_len-1,"CBS Frames - Not decoded");
+ proto_tree_add_expert(urr_ie_tree, pinfo, &ei_uma_cbs_frames, tvb, ie_offset + 1, ie_len-1);
break;
case 73:
/* 11.2.73 3G Cell Identity */
@@ -1404,7 +1415,7 @@ dissect_uma_IE(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
/* 11.2.94 CTC Modification Ack List */
case 95:
/* 11.2.95 CTC Modification Ack Description */
- proto_tree_add_text(urr_ie_tree,tvb,ie_offset,ie_len,"DATA");
+ proto_tree_add_item(urr_ie_tree, hf_uma_data, tvb, ie_offset, ie_len, ENC_NA);
break;
case 96: /* MS Radio Identity */
proto_tree_add_item(urr_ie_tree, hf_uma_urr_radio_type_of_id, tvb, ie_offset, 1, ENC_BIG_ENDIAN);
@@ -1413,7 +1424,7 @@ dissect_uma_IE(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
ie_offset++;
proto_tree_add_item(urr_ie_tree, hf_uma_urr_ms_radio_id, tvb, ie_offset, ie_len-1, ENC_NA);
}else{
- proto_tree_add_text(urr_ie_tree, tvb, ie_offset, ie_len,"Unknown format");
+ proto_tree_add_expert(urr_ie_tree, pinfo, &ei_uma_unknown_format, tvb, ie_offset, ie_len);
}
break;
@@ -1438,7 +1449,7 @@ dissect_uma_IE(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
string = (gchar*)tvb_get_string_enc(wmem_packet_scope(), tvb, ie_offset, ie_len, ENC_ASCII);
proto_tree_add_string(urr_ie_tree, hf_uma_unc_FQDN, tvb, ie_offset, ie_len, string);
}else{
- proto_tree_add_text(urr_ie_tree,tvb,offset,1,"UNC FQDN not present");
+ proto_tree_add_expert(urr_ie_tree, pinfo, &ei_uma_fqdn_not_present, tvb, offset, 1);
}
break;
case 99:
@@ -1523,7 +1534,7 @@ dissect_uma_IE(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
proto_tree_add_item(urr_ie_tree, hf_uma_urr_RTP_port, tvb, ie_offset, 2, ENC_BIG_ENDIAN);
/* TODO find out exactly which element contains IP addr */
/* Debug
- proto_tree_add_text(urr_ie_tree,tvb,ie_offset,ie_len,"IP %u, Port %u,
+ proto_tree_add_debug_text(urr_ie_tree,tvb,ie_offset,ie_len,"IP %u, Port %u,
rtp_ipv4_address,RTP_UDP_port);
*/
if(unc_ipv4_address!=0){
@@ -1600,7 +1611,7 @@ dissect_uma_IE(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
case 126:
/* 11.2.107 CN Domains to Handover */
default:
- proto_tree_add_text(urr_ie_tree,tvb,ie_offset,ie_len,"DATA");
+ proto_tree_add_item(urr_ie_tree, hf_uma_data, tvb, ie_offset, ie_len, ENC_NA);
break;
}
offset = offset + ie_len;
@@ -1615,6 +1626,7 @@ dissect_uma(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
int offset = 0;
guint8 octet, pd;
guint16 msg_len;
+ proto_item* pd_item;
/* Set up structures needed to add the protocol subtree and manage it */
proto_item *ti;
@@ -1635,11 +1647,11 @@ dissect_uma(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
pd = octet & 0x0f;
proto_tree_add_item(uma_tree, hf_uma_skip_ind, tvb, offset, 1, ENC_BIG_ENDIAN);
if ((octet & 0xf0) != 0 ){
- proto_tree_add_text(uma_tree, tvb,offset,-1,"Skip this message");
+ proto_tree_add_expert(uma_tree, pinfo, &ei_uma_skip_this_message, tvb, offset, -1);
return tvb_reported_length(tvb);
}
- proto_tree_add_item(uma_tree, hf_uma_pd, tvb, offset, 1, ENC_BIG_ENDIAN);
+ pd_item = proto_tree_add_item(uma_tree, hf_uma_pd, tvb, offset, 1, ENC_BIG_ENDIAN);
switch ( pd ){
case 0: /* URR_C */
case 1: /* URR */
@@ -1667,7 +1679,7 @@ dissect_uma(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
}
break;
default:
- proto_tree_add_text(uma_tree, tvb,offset,-1,"Unknown protocol %u",pd);
+ expert_add_info(pinfo, pd_item, &ei_uma_unknown_protocol);
break;
}
@@ -1696,6 +1708,7 @@ dissect_uma_urlc_udp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *
int offset = 0;
guint8 octet;
guint16 msg_len;
+ proto_item* msg_item;
/* Set up structures needed to add the protocol subtree and manage it */
proto_item *ti;
@@ -1709,7 +1722,7 @@ dissect_uma_urlc_udp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *
uma_tree = proto_item_add_subtree(ti, ett_uma);
octet = tvb_get_guint8(tvb,offset);
- proto_tree_add_item(uma_tree, hf_uma_urlc_msg_type, tvb, offset, 1, ENC_BIG_ENDIAN);
+ msg_item = proto_tree_add_item(uma_tree, hf_uma_urlc_msg_type, tvb, offset, 1, ENC_BIG_ENDIAN);
col_add_fstr(pinfo->cinfo, COL_INFO, "%s ",val_to_str_ext(octet, &uma_urlc_msg_type_vals_ext, "Unknown URLC (%u)"));
col_set_fence(pinfo->cinfo,COL_INFO);
msg_len = tvb_reported_length_remaining(tvb,offset) - 1;
@@ -1730,7 +1743,7 @@ dissect_uma_urlc_udp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *
}
return offset;
default:
- proto_tree_add_text(uma_tree, tvb,offset,-1,"Wrong message type %u",octet);
+ expert_add_info(pinfo, msg_item, &ei_uma_wrong_message_type);
return tvb_reported_length(tvb);
}
@@ -2265,6 +2278,9 @@ proto_register_uma(void)
FT_UINT8,BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
+ /* Generated from convert_proto_tree_add_text.pl */
+ { &hf_uma_access_control_class_n, { "Access Control Class N", "uma.access_control_class_n", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_uma_data, { "DATA", "uma.data", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
};
/* Setup protocol subtree array */
@@ -2274,6 +2290,18 @@ proto_register_uma(void)
&ett_urr_ie,
};
+ static ei_register_info ei[] = {
+ /* Generated from convert_proto_tree_add_text.pl */
+ { &ei_uma_unknown_format, { "uma.unknown_format", PI_PROTOCOL, PI_WARN, "Unknown format", EXPFILL }},
+ { &ei_uma_fqdn_not_present, { "uma.fqdn_not_present", PI_PROTOCOL, PI_NOTE, "FQDN not present", EXPFILL }},
+ { &ei_uma_cbs_frames, { "uma.cbs_frames", PI_UNDECODED, PI_WARN, "CBS Frames - Not decoded", EXPFILL }},
+ { &ei_uma_skip_this_message, { "uma.skip_this_message", PI_PROTOCOL, PI_NOTE, "Skip this message", EXPFILL }},
+ { &ei_uma_unknown_protocol, { "uma.unknown_protocol", PI_PROTOCOL, PI_WARN, "Unknown protocol", EXPFILL }},
+ { &ei_uma_wrong_message_type, { "uma.wrong_message_type", PI_PROTOCOL, PI_WARN, "Wrong message type", EXPFILL }},
+ };
+
+ expert_module_t *expert_uma;
+
/* Register the protocol name and description */
proto_uma = proto_register_protocol("Unlicensed Mobile Access","UMA", "uma");
/* subdissector code */
@@ -2283,6 +2311,8 @@ proto_register_uma(void)
/* Required function calls to register the header fields and subtrees used */
proto_register_field_array(proto_uma, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
+ expert_uma = expert_register_protocol(proto_uma);
+ expert_register_field_array(expert_uma, ei, array_length(ei));
/* Register a configuration option for port */
uma_module = prefs_register_protocol(proto_uma, proto_reg_handoff_uma);