aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2014-06-26 20:33:02 -0400
committerMichael Mann <mmann78@netscape.net>2014-06-29 13:10:02 +0000
commitfe4b7ee625c046bc09a7d8ae55afb0e16cb17fc3 (patch)
treec4311cf830bd0ccc100f7a59808f39609ba02b24 /epan/dissectors
parente1a8c9599fadc787253115316c549e849f377fd2 (diff)
convert to proto_tree_add_subtree[_format]
Change-Id: If110de1e0555637264f86f1508858d569871a9c7 Reviewed-on: https://code.wireshark.org/review/2675 Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'epan/dissectors')
-rw-r--r--epan/dissectors/packet-gadu-gadu.c8
-rw-r--r--epan/dissectors/packet-gearman.c3
-rw-r--r--epan/dissectors/packet-ged125.c13
-rw-r--r--epan/dissectors/packet-giop.c45
-rw-r--r--epan/dissectors/packet-gluster_pmap.c9
-rw-r--r--epan/dissectors/packet-glusterfs.c20
-rw-r--r--epan/dissectors/packet-gmr1_rach.c21
-rw-r--r--epan/dissectors/packet-gmr1_rr.c9
-rw-r--r--epan/dissectors/packet-gpef.c10
-rw-r--r--epan/dissectors/packet-gprs-llc.c77
-rw-r--r--epan/dissectors/packet-gre.c3
-rw-r--r--epan/dissectors/packet-gsm_a_bssmap.c27
-rw-r--r--epan/dissectors/packet-gsm_a_common.c146
-rw-r--r--epan/dissectors/packet-gsm_a_dtap.c238
-rw-r--r--epan/dissectors/packet-gsm_a_gm.c45
-rw-r--r--epan/dissectors/packet-gsm_a_rr.c313
-rw-r--r--epan/dissectors/packet-gsm_bsslap.c3
-rw-r--r--epan/dissectors/packet-gsm_cbch.c8
-rw-r--r--epan/dissectors/packet-gsm_rlcmac.c8
-rw-r--r--epan/dissectors/packet-gsm_sms.c60
-rw-r--r--epan/dissectors/packet-gtp.c636
-rw-r--r--epan/dissectors/packet-gtpv2.c187
-rw-r--r--epan/dissectors/packet-gvcp.c53
23 files changed, 812 insertions, 1130 deletions
diff --git a/epan/dissectors/packet-gadu-gadu.c b/epan/dissectors/packet-gadu-gadu.c
index 4c9c4ae265..2e52e67e6c 100644
--- a/epan/dissectors/packet-gadu-gadu.c
+++ b/epan/dissectors/packet-gadu-gadu.c
@@ -1352,13 +1352,12 @@ static int
dissect_gadu_gadu_notify_common(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset)
{
proto_tree *contact_tree;
- proto_item *ti;
while (tvb_reported_length_remaining(tvb, offset) >= 4+1) {
guint32 uin = tvb_get_letohl(tvb, offset);
- ti = proto_tree_add_text(tree, tvb, offset, 5, "Contact: %u", uin);
- contact_tree = proto_item_add_subtree(ti, ett_gadu_gadu_contact);
+ contact_tree = proto_tree_add_subtree_format(tree, tvb, offset, 5,
+ ett_gadu_gadu_contact, NULL, "Contact: %u", uin);
proto_tree_add_item(contact_tree, &hfi_gadu_gadu_contact_uin, tvb, offset, 4, ENC_LITTLE_ENDIAN);
offset += 4;
@@ -1399,8 +1398,7 @@ dissect_gadu_gadu_notify105(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
char *uin;
- ti = proto_tree_add_text(tree, tvb, offset, 0, "Contact: ");
- contact_tree = proto_item_add_subtree(ti, ett_gadu_gadu_contact);
+ contact_tree = proto_tree_add_subtree(tree, tvb, offset, 0, ett_gadu_gadu_contact, &ti, "Contact: ");
offset = dissect_gadu_gadu_notify105_common(tvb, contact_tree, offset, &uin);
proto_item_append_text(ti, "%s", uin);
diff --git a/epan/dissectors/packet-gearman.c b/epan/dissectors/packet-gearman.c
index cb7004e470..93d1dfe5ac 100644
--- a/epan/dissectors/packet-gearman.c
+++ b/epan/dissectors/packet-gearman.c
@@ -206,9 +206,8 @@ dissect_binary_packet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void*
ti = proto_tree_add_item(tree, proto_gearman, tvb, 0, -1, ENC_NA);
gearman_tree = proto_item_add_subtree(ti, ett_gearman);
- ti = proto_tree_add_text(gearman_tree, tvb, 0, GEARMAN_COMMAND_HEADER_SIZE+size,
+ command_tree = proto_tree_add_subtree_format(gearman_tree, tvb, 0, GEARMAN_COMMAND_HEADER_SIZE+size, ett_gearman_command, NULL,
"[%s] %s(%d) LEN=%d", magic_code, val_to_str(type, gearman_command_names, "Unknown (0x%08x)"), type, size);
- command_tree = proto_item_add_subtree(ti, ett_gearman_command);
proto_tree_add_string(command_tree, hf_gearman_magic_code, tvb, 0, 4, magic_code);
proto_tree_add_item(command_tree, hf_gearman_pkt_type, tvb, 4, 4, ENC_BIG_ENDIAN);
diff --git a/epan/dissectors/packet-ged125.c b/epan/dissectors/packet-ged125.c
index aeb8de407a..e75936de90 100644
--- a/epan/dissectors/packet-ged125.c
+++ b/epan/dissectors/packet-ged125.c
@@ -633,8 +633,7 @@ floating_fields(tvbuff_t* tvb, packet_info *pinfo, proto_tree* tree, gint offset
if (size - offset > 0)
length = size - offset;
- ti = proto_tree_add_text(tree, tvb, offset, length, "Float Message");
- ged125_tree = proto_item_add_subtree(ti, ett_ged125_floating);
+ ged125_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_ged125_floating, NULL, "Float Message");
/*The Universal Floating-Fields Loop of Fun*/
while (offset < size-2)
@@ -730,8 +729,8 @@ service_control_dissect(tvbuff_t* tvb,proto_tree* msg_tree, proto_tree* ged125_t
proto_tree *service_tree, *data_tree;
guint32 mess_type, DialogueID, SendSeqNo;
- ti = proto_tree_add_text(msg_tree, tvb, *offset, 12, "Service-Control Header");
- service_tree = proto_item_add_subtree(ti, ett_ged125_service_control_header);
+ service_tree = proto_tree_add_subtree(msg_tree, tvb, *offset, 12,
+ ett_ged125_service_control_header, NULL, "Service-Control Header");
/* get message sub type, don't want to output that just yet */
mess_type = tvb_get_ntohl(tvb, *offset);
@@ -1006,14 +1005,12 @@ dissect_ged125_base_messages(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree
ged125_tree = proto_item_add_subtree( ti, ett_ged125);
/* Message header */
- ti = proto_tree_add_text(ged125_tree, tvb, 0, 8, "GED125 Header");
- ged125_header_tree = proto_item_add_subtree(ti, ett_ged125_header);
+ ged125_header_tree = proto_tree_add_subtree(ged125_tree, tvb, 0, 8, ett_ged125_header, NULL, "GED125 Header");
proto_tree_add_item(ged125_header_tree, hf_ged125_length, tvb, 0, 4, ENC_BIG_ENDIAN);
proto_tree_add_item(ged125_header_tree, hf_ged125_value, tvb, 4, 4, ENC_BIG_ENDIAN);
- message_item = proto_tree_add_text(ged125_tree, tvb, offset, -1, "GED125 Message");
- ged125_message_tree = proto_item_add_subtree(message_item, ett_ged125_message);
+ ged125_message_tree = proto_tree_add_subtree(ged125_tree, tvb, offset, -1, ett_ged125_message, &message_item, "GED125 Message");
switch (message_type)
{
diff --git a/epan/dissectors/packet-giop.c b/epan/dissectors/packet-giop.c
index cf24e08237..b6a723a5b8 100644
--- a/epan/dissectors/packet-giop.c
+++ b/epan/dissectors/packet-giop.c
@@ -3875,8 +3875,7 @@ static void decode_ServiceContextList(tvbuff_t *tvb, packet_info *pinfo _U_, pro
/* set length to -1 (to the end) now and correct with proto_item_set_len()
* later
*/
- tf = proto_tree_add_text (ptree, tvb, *offset, -1, "ServiceContextList");
- tree = proto_item_add_subtree (tf, ett_giop_scl);
+ tree = proto_tree_add_subtree(ptree, tvb, *offset, -1, ett_giop_scl, &tf, "ServiceContextList");
/* Get sequence length (number of elements) */
seqlen = get_CDR_ulong(tvb, offset, stream_is_be, boundary);
@@ -4150,11 +4149,9 @@ static void dissect_giop_reply (tvbuff_t * tvb, packet_info * pinfo, proto_tree
guint32 request_id;
guint32 reply_status;
proto_tree *reply_tree;
- proto_item *tf;
guint32 mfn; /* matching frame number */
- tf = proto_tree_add_text (tree, tvb, offset, -1, "General Inter-ORB Protocol Reply");
- reply_tree = proto_item_add_subtree (tf, ett_giop_reply);
+ reply_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_giop_reply, NULL, "General Inter-ORB Protocol Reply");
/*
* Decode IOP::ServiceContextList
@@ -4214,11 +4211,9 @@ static void dissect_giop_reply_1_2 (tvbuff_t * tvb, packet_info * pinfo,
guint32 request_id;
guint32 reply_status;
proto_tree *reply_tree;
- proto_item *tf;
guint32 mfn; /* matching frame number */
- tf = proto_tree_add_text (tree, tvb, offset, -1, "General Inter-ORB Protocol Reply");
- reply_tree = proto_item_add_subtree (tf, ett_giop_reply);
+ reply_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_giop_reply, NULL, "General Inter-ORB Protocol Reply");
request_id = get_CDR_ulong(tvb, &offset, stream_is_big_endian, GIOP_HEADER_SIZE);
col_append_fstr(pinfo->cinfo, COL_INFO, " id=%u", request_id);
@@ -4271,10 +4266,9 @@ static void dissect_giop_cancel_request (tvbuff_t * tvb, packet_info * pinfo,
guint offset = 0;
guint32 request_id;
proto_tree *cancel_request_tree;
- proto_item *tf;
- tf = proto_tree_add_text (tree, tvb, offset, -1, "General Inter-ORB Protocol CancelRequest");
- cancel_request_tree = proto_item_add_subtree (tf, ett_giop_cancel_request);
+ cancel_request_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
+ ett_giop_cancel_request, NULL, "General Inter-ORB Protocol CancelRequest");
request_id = get_CDR_ulong(tvb, &offset, stream_is_big_endian, GIOP_HEADER_SIZE);
col_append_fstr(pinfo->cinfo, COL_INFO, " id=%u", request_id);
@@ -4317,8 +4311,7 @@ dissect_giop_request_1_1 (tvbuff_t * tvb, packet_info * pinfo,
gchar *repoid; /* from object key lookup in objkey hash */
- tf = proto_tree_add_text (tree, tvb, offset, -1, "General Inter-ORB Protocol Request");
- request_tree = proto_item_add_subtree (tf, ett_giop_request);
+ request_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_giop_request, &tf, "General Inter-ORB Protocol Request");
/*
* Decode IOP::ServiceContextList
@@ -4477,15 +4470,13 @@ dissect_giop_request_1_2 (tvbuff_t * tvb, packet_info * pinfo,
const gchar *reserved;
const gchar *operation = NULL;
proto_tree *request_tree;
- proto_item *tf;
gboolean exres = FALSE; /* result of trying explicit dissectors */
guint32 objkey_len = 0; /* object key length */
const gchar *objkey = NULL; /* object key sequence */
gchar *repoid = NULL; /* from object key lookup in objkey hash */
- tf = proto_tree_add_text (tree, tvb, offset, -1, "General Inter-ORB Protocol Request");
- request_tree = proto_item_add_subtree (tf, ett_giop_request);
+ request_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_giop_request, NULL, "General Inter-ORB Protocol Request");
request_id = get_CDR_ulong(tvb, &offset, stream_is_big_endian, GIOP_HEADER_SIZE);
header->req_id = request_id;
@@ -4583,8 +4574,8 @@ dissect_giop_locate_request( tvbuff_t * tvb, packet_info * pinfo,
proto_tree *locate_request_tree;
proto_item *tf;
- tf = proto_tree_add_text (tree, tvb, offset, -1, "General Inter-ORB Locate Request");
- locate_request_tree = proto_item_add_subtree (tf, ett_giop_locate_request);
+ locate_request_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
+ ett_giop_locate_request, &tf, "General Inter-ORB Locate Request");
request_id = get_CDR_ulong(tvb, &offset, stream_is_big_endian, GIOP_HEADER_SIZE);
col_append_fstr(pinfo->cinfo, COL_INFO, " id=%u op=LocateRequest", request_id);
@@ -4622,10 +4613,8 @@ dissect_giop_locate_reply( tvbuff_t * tvb, packet_info * pinfo,
guint16 addr_disp;
proto_tree *locate_reply_tree;
- proto_item *tf;
- tf = proto_tree_add_text (tree, tvb, offset, -1, "General Inter-ORB Locate Reply");
- locate_reply_tree = proto_item_add_subtree (tf, ett_giop_locate_reply);
+ locate_reply_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_giop_locate_reply, NULL, "General Inter-ORB Locate Reply");
request_id = get_CDR_ulong(tvb, &offset, stream_is_big_endian, GIOP_HEADER_SIZE);
col_append_fstr(pinfo->cinfo, COL_INFO, " id=%u", request_id);
@@ -4671,10 +4660,8 @@ dissect_giop_fragment( tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree,
guint32 offset = 0;
guint32 request_id;
proto_tree *fragment_tree;
- proto_item *tf;
- tf = proto_tree_add_text (tree, tvb, offset, -1, "General Inter-ORB Fragment");
- fragment_tree = proto_item_add_subtree (tf, ett_giop_fragment);
+ fragment_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_giop_fragment, NULL, "General Inter-ORB Fragment");
request_id = get_CDR_ulong(tvb, &offset, stream_is_big_endian, GIOP_HEADER_SIZE);
col_append_fstr(pinfo->cinfo, COL_INFO, " id=%u", request_id);
@@ -4717,13 +4704,11 @@ static int dissect_giop_common (tvbuff_t * tvb, packet_info * pinfo, proto_tree
stream_is_big_endian = is_big_endian (&header);
/* Dissect GIOP header */
- ti = proto_tree_add_text (giop_tree, tvb, offset, GIOP_HEADER_SIZE, "GIOP Header");
- header_tree = proto_item_add_subtree (ti, ett_giop_header);
+ header_tree = proto_tree_add_subtree(giop_tree, tvb, offset, GIOP_HEADER_SIZE, ett_giop_header, NULL, "GIOP Header");
proto_tree_add_item(header_tree, hf_giop_message_magic, tvb, 0, 4, ENC_NA|ENC_ASCII);
- version_item = proto_tree_add_text (header_tree, tvb, 4, 2,
+ header_version_tree = proto_tree_add_subtree_format(header_tree, tvb, 4, 2, ett_giop_header_version, &version_item,
"Version: %u.%u", header.GIOP_version.major, header.GIOP_version.minor);
- header_version_tree = proto_item_add_subtree (version_item, ett_giop_header_version);
proto_tree_add_item(header_version_tree, hf_giop_message_major_version, tvb, 4, 1, ENC_NA);
proto_tree_add_item(header_version_tree, hf_giop_message_minor_version, tvb, 5, 1, ENC_NA);
@@ -5515,15 +5500,13 @@ static void decode_IOR(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ptree, int
guint32 u_octet4;
proto_tree *tree; /* IOR tree */
- proto_item *tf;
const gchar *repobuf; /* for repository ID */
guint32 i;
/* create a subtree */
- tf = proto_tree_add_text (ptree, tvb, *offset, -1, "IOR");
- tree = proto_item_add_subtree (tf, ett_giop_ior);
+ tree = proto_tree_add_subtree(ptree, tvb, *offset, -1, ett_giop_ior, NULL, "IOR");
/* Get type_id == Repository ID */
diff --git a/epan/dissectors/packet-gluster_pmap.c b/epan/dissectors/packet-gluster_pmap.c
index 1db553f360..648f276fdb 100644
--- a/epan/dissectors/packet-gluster_pmap.c
+++ b/epan/dissectors/packet-gluster_pmap.c
@@ -100,16 +100,13 @@ gluster_dump_reply_detail(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
proto_tree *detail_tree;
const gchar *progname = NULL;
- detail_item = proto_tree_add_text(tree, tvb, offset, -1,
- "Available Progam: ");
- detail_tree = proto_item_add_subtree(detail_item,
- ett_gluster_dump_detail);
+ detail_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
+ ett_gluster_dump_detail, &detail_item, "Available Progam: ");
/* progname */
offset = dissect_rpc_string(tvb, detail_tree, hf_gluster_progname,
offset, &progname);
- if (tree)
- proto_item_append_text(detail_item, "%s", progname);
+ proto_item_append_text(detail_item, "%s", progname);
/* prognumber (marked as uint64) */
offset = dissect_rpc_uint64(tvb, detail_tree, hf_gluster_prognum,
diff --git a/epan/dissectors/packet-glusterfs.c b/epan/dissectors/packet-glusterfs.c
index 23a2d45f97..580834db42 100644
--- a/epan/dissectors/packet-glusterfs.c
+++ b/epan/dissectors/packet-glusterfs.c
@@ -342,8 +342,7 @@ glusterfs_rpc_dissect_gf_2_flock(proto_tree *tree, tvbuff_t *tvb, int offset)
int len;
int start_offset = offset;
- flock_item = proto_tree_add_text(tree, tvb, offset, -1, "Flock");
- flock_tree = proto_item_add_subtree(flock_item, ett_glusterfs_flock);
+ flock_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_glusterfs_flock, &flock_item, "Flock");
offset = dissect_rpc_uint32(tvb, flock_tree, hf_glusterfs_flock_type,
offset);
@@ -500,9 +499,7 @@ gluster_rpc_dissect_dict(proto_tree *tree, tvbuff_t *tvb, int hfindex, int offse
name = "<NAMELESS DICT STRUCTURE>";
start_offset = offset;
- subtree_item = proto_tree_add_text(tree, tvb, offset, -1, "%s", name);
-
- subtree = proto_item_add_subtree(subtree_item, ett_gluster_dict);
+ subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_gluster_dict, &subtree_item, name);
len = tvb_get_ntohl(tvb, offset);
roundup = rpc_roundup(len) - len;
@@ -779,8 +776,7 @@ glusterfs_gfs3_op_inodelk_call(tvbuff_t *tvb, int offset,
offset = dissect_rpc_uint32(tvb, tree, hf_glusterfs_type, offset);
start_offset = offset;
- flock_item = proto_tree_add_text(tree, tvb, offset, -1, "Flock");
- flock_tree = proto_item_add_subtree(flock_item, ett_glusterfs_flock);
+ flock_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_glusterfs_flock, &flock_item, "Flock");
offset = glusterfs_rpc_dissect_gf_flock(flock_tree, tvb, offset);
proto_item_set_len (flock_item, offset - start_offset);
@@ -798,8 +794,7 @@ _glusterfs_gfs_op_readdir_entry(tvbuff_t *tvb, int offset, proto_tree *tree,
const gchar* path = NULL;
int start_offset = offset;
- entry_item = proto_tree_add_text(tree, tvb, offset, -1, "Entry");
- entry_tree = proto_item_add_subtree(entry_item, ett_glusterfs_entry);
+ entry_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_glusterfs_entry, &entry_item, "Entry");
offset = dissect_rpc_uint64(tvb, entry_tree, hf_glusterfs_entry_ino, offset);
offset = dissect_rpc_uint64(tvb, entry_tree, hf_glusterfs_entry_off, offset);
@@ -1100,8 +1095,8 @@ glusterfs_gfs3_3_op_rename_reply(tvbuff_t *tvb, int offset, packet_info *pinfo,
offset);
start_offset = offset;
- old_item = proto_tree_add_text(tree, tvb, offset, -1, "Old parent");
- old_tree = proto_item_add_subtree(old_item, ett_glusterfs_parent_iatt);
+ old_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
+ ett_glusterfs_parent_iatt, &old_item, "Old parent");
offset = glusterfs_rpc_dissect_gf_iatt(old_tree, tvb,
hf_glusterfs_preparent_iatt, offset);
offset = glusterfs_rpc_dissect_gf_iatt(old_tree, tvb,
@@ -1109,8 +1104,7 @@ glusterfs_gfs3_3_op_rename_reply(tvbuff_t *tvb, int offset, packet_info *pinfo,
proto_item_set_len (old_item, offset - start_offset);
start_offset = offset;
- new_item = proto_tree_add_text(tree, tvb, offset, -1, "New parent");
- new_tree = proto_item_add_subtree(new_item, ett_glusterfs_parent_iatt);
+ new_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_glusterfs_parent_iatt, &new_item, "New parent");
offset = glusterfs_rpc_dissect_gf_iatt(new_tree, tvb,
hf_glusterfs_preparent_iatt, offset);
offset = glusterfs_rpc_dissect_gf_iatt(new_tree, tvb,
diff --git a/epan/dissectors/packet-gmr1_rach.c b/epan/dissectors/packet-gmr1_rach.c
index 390d5013d0..c53a2db214 100644
--- a/epan/dissectors/packet-gmr1_rach.c
+++ b/epan/dissectors/packet-gmr1_rach.c
@@ -409,7 +409,7 @@ static void
dissect_gmr1_rach_kls2(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree,
int is_moc)
{
- proto_item *dialed_num_item = NULL, *gps_pos_item = NULL;
+ proto_item *dialed_num_item = NULL;
proto_tree *dialed_num_tree = NULL, *gps_pos_tree = NULL;
/* MES Power Class */
@@ -492,10 +492,9 @@ dissect_gmr1_rach_kls2(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree
tvb, offset + 9, 1, ENC_BIG_ENDIAN);
/* GPS Position */
- gps_pos_item = proto_tree_add_text(
+ gps_pos_tree = proto_tree_add_subtree(
tree, tvb, offset + 10, 5,
- "GPS Position");
- gps_pos_tree = proto_item_add_subtree(gps_pos_item, ett_rach_gps_pos);
+ ett_rach_gps_pos, NULL, "GPS Position");
dissect_gmr1_rach_gps_pos(tvb, offset + 10, pinfo, gps_pos_tree);
@@ -508,8 +507,8 @@ dissect_gmr1_rach_kls2(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree
static void
dissect_gmr1_rach(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
- proto_item *rach_item = NULL, *kls1_item = NULL, *kls2_item = NULL;
- proto_tree *rach_tree = NULL, *kls1_tree = NULL, *kls2_tree = NULL;
+ proto_item *rach_item;
+ proto_tree *rach_tree, *kls1_tree, *kls2_tree;
int len, is_moc;
len = tvb_length(tvb);
@@ -527,17 +526,15 @@ dissect_gmr1_rach(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
col_append_str(pinfo->cinfo, COL_INFO, "(RACH) ");
- kls1_item = proto_tree_add_text(
+ kls1_tree = proto_tree_add_subtree(
rach_tree, tvb, 0, 2,
- "Class-1 informations");
- kls1_tree = proto_item_add_subtree(kls1_item, ett_rach_kls1);
+ ett_rach_kls1, NULL, "Class-1 informations");
dissect_gmr1_rach_kls1(tvb, 0, pinfo, kls1_tree, &is_moc);
- kls2_item = proto_tree_add_text(
+ kls2_tree = proto_tree_add_subtree(
rach_tree, tvb, 2, 16,
- "Class-2 informations");
- kls2_tree = proto_item_add_subtree(kls2_item, ett_rach_kls2);
+ ett_rach_kls2, NULL, "Class-2 informations");
dissect_gmr1_rach_kls2(tvb, 2, pinfo, kls2_tree, is_moc);
}
diff --git a/epan/dissectors/packet-gmr1_rr.c b/epan/dissectors/packet-gmr1_rr.c
index 53376af02a..96c5eed9f3 100644
--- a/epan/dissectors/packet-gmr1_rr.c
+++ b/epan/dissectors/packet-gmr1_rr.c
@@ -1008,14 +1008,13 @@ static const crumb_spec_t rr_pkt_imm_ass_2_prm_ac_rlc_dblk_gnt_crumbs[] = {
GMR1_IE_FUNC(gmr1_ie_rr_pkt_imm_ass_2_prm)
{
proto_tree *subtree_ac, *subtree_d;
- proto_item *item_ac, *item_d;
/* Terminal AC */
/* ----------- */
- item_ac = proto_tree_add_text(tree, tvb, offset, 5, "GMPRS Terminal type A or C");
- subtree_ac = proto_item_add_subtree(item_ac, ett_gmr1_ie_rr[GMR1_IE_RR_PKT_IMM_ASS_2_PRM]);
+ subtree_ac = proto_tree_add_subtree(tree, tvb, offset, 5,
+ ett_gmr1_ie_rr[GMR1_IE_RR_PKT_IMM_ASS_2_PRM], NULL, "GMPRS Terminal type A or C");
/* Spare */
proto_tree_add_item(subtree_ac, hf_rr_pkt_imm_ass_2_prm_ac_spare1,
@@ -1067,8 +1066,8 @@ GMR1_IE_FUNC(gmr1_ie_rr_pkt_imm_ass_2_prm)
/* Terminal D */
/* ---------- */
- item_d = proto_tree_add_text(tree, tvb, offset, 5, "GMPRS Terminal type D");
- subtree_d = proto_item_add_subtree(item_d, ett_gmr1_ie_rr[GMR1_IE_RR_PKT_IMM_ASS_2_PRM]);
+ subtree_d = proto_tree_add_subtree(tree, tvb, offset, 5,
+ ett_gmr1_ie_rr[GMR1_IE_RR_PKT_IMM_ASS_2_PRM], NULL, "GMPRS Terminal type D");
/* Channel MCS command */
proto_tree_add_item(subtree_d, hf_rr_pkt_imm_ass_2_prm_d_chan_mcs_cmd,
diff --git a/epan/dissectors/packet-gpef.c b/epan/dissectors/packet-gpef.c
index a492de46b9..9fbfb34d24 100644
--- a/epan/dissectors/packet-gpef.c
+++ b/epan/dissectors/packet-gpef.c
@@ -114,14 +114,12 @@ static int
dissect_gpef_efsblob(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *parent_tree, void *data _U_)
{
int offset = 0;
- proto_tree *tree = NULL;
- proto_item *item = NULL;
+ proto_tree *tree;
+ proto_item *item;
guint32 count;
- if (parent_tree) {
- item = proto_tree_add_item(parent_tree, proto_gpef, tvb, 0, -1, ENC_NA);
- tree = proto_item_add_subtree(item, ett_gpef);
- }
+ item = proto_tree_add_item(parent_tree, proto_gpef, tvb, 0, -1, ENC_NA);
+ tree = proto_item_add_subtree(item, ett_gpef);
/* reserved, must be 0x01 0x00 0x01 0x00 */
offset += 4;
diff --git a/epan/dissectors/packet-gprs-llc.c b/epan/dissectors/packet-gprs-llc.c
index a6ce57bc31..ce855f2d96 100644
--- a/epan/dissectors/packet-gprs-llc.c
+++ b/epan/dissectors/packet-gprs-llc.c
@@ -326,7 +326,6 @@ static void llc_gprs_dissect_xid(tvbuff_t *tvb,
guint8 xid_param_len = 0, byte1 = 0, byte2 = 0, item_len = 0, tmp = 0;
guint16 location = 0;
guint16 loop_counter = 0;
- proto_item *u_ti = NULL;
proto_item *uinfo_field = NULL;
proto_tree *uinfo_tree = NULL;
proto_tree *xid_tree = NULL;
@@ -334,9 +333,8 @@ static void llc_gprs_dissect_xid(tvbuff_t *tvb,
info_len = tvb_reported_length(tvb);
- u_ti = proto_tree_add_text(llcgprs_tree, tvb, 0, info_len,
- "Information Field: Length = %u", info_len);
- xid_tree = proto_item_add_subtree(u_ti, ett_ui);
+ xid_tree = proto_tree_add_subtree_format(llcgprs_tree, tvb, 0, info_len,
+ ett_ui, NULL, "Information Field: Length = %u", info_len);
while (location < info_len)
{
@@ -379,9 +377,8 @@ static void llc_gprs_dissect_xid(tvbuff_t *tvb,
tvbuff_t *sndcp_xid_tvb;
guint8 sndcp_xid_offset;
- uinfo_field = proto_tree_add_text(xid_tree, tvb, location, item_len,
- "XID parameter Type: L3 parameters");
- uinfo_tree = proto_item_add_subtree(uinfo_field, ett_ui);
+ uinfo_tree = proto_tree_add_subtree(xid_tree, tvb, location, item_len,
+ ett_ui, NULL, "XID parameter Type: L3 parameters");
proto_tree_add_uint(uinfo_tree, hf_llcgprs_xid_xl, tvb, location, 1, byte1);
proto_tree_add_uint(uinfo_tree, hf_llcgprs_xid_type, tvb, location, 1, byte1);
proto_tree_add_uint(uinfo_tree, hf_llcgprs_xid_len1, tvb, location, 1, byte1);
@@ -468,7 +465,7 @@ dissect_llcgprs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
guint8 addr_fld=0, sapi=0, ctrl_fld_fb=0, frame_format, tmp=0;
guint16 offset=0 , epm = 0, nu=0, ctrl_fld_ui_s=0;
guint16 crc_length=0, llc_data_reported_length=0, llc_data_length = 0;
- proto_item *ti, *addres_field_item, *ctrl_field_item, *ui_ti;
+ proto_item *ti, *addres_field_item, *ui_ti;
proto_tree *llcgprs_tree=NULL , *ad_f_tree =NULL, *ctrl_f_tree=NULL, *ui_tree=NULL;
tvbuff_t *next_tvb;
guint length;
@@ -482,7 +479,6 @@ dissect_llcgprs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
guint8 k = 0;
guint8 m_bits = 0;
guint8 info_len = 0;
- proto_item *uinfo_field = NULL;
proto_tree *uinfo_tree = NULL;
/* END MLT CHANGES */
proto_item* fcs_item = NULL;
@@ -655,10 +651,9 @@ dissect_llcgprs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
guint32 tmpx;
- ctrl_field_item = proto_tree_add_text(llcgprs_tree, tvb, (offset-3),
- 3, "Information format: %s: N(S) = %u, N(R) = %u",
+ ctrl_f_tree = proto_tree_add_subtree_format(llcgprs_tree, tvb, (offset-3),
+ 3, ett_llcgprs_sframe, NULL, "Information format: %s: N(S) = %u, N(R) = %u",
val_to_str(epm, cr_formats_ipluss, "Unknown (%d)"), ns, nr);
- ctrl_f_tree = proto_item_add_subtree(ctrl_field_item, ett_llcgprs_sframe);
/* retrieve the second octet */
tmpx = tvb_get_ntohs(tvb, (offset-3)) << 16;
@@ -697,10 +692,9 @@ dissect_llcgprs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
guint8 r_byte = 0;
guint16 location = offset;
- ctrl_field_item = proto_tree_add_text(llcgprs_tree, tvb, (offset-1),
- (k+1), "SACK FRAME: k = %u", k);
+ ctrl_f_tree = proto_tree_add_subtree_format(llcgprs_tree, tvb, (offset-1),
+ (k+1), ett_llcgprs_sframe, NULL, "SACK FRAME: k = %u", k);
- ctrl_f_tree = proto_item_add_subtree(ctrl_field_item, ett_llcgprs_sframe);
proto_tree_add_uint(ctrl_f_tree, hf_llcgprs_kmask, tvb, offset-1, 1, kmask);
proto_tree_add_uint(ctrl_f_tree, hf_llcgprs_k, tvb, offset-1, 1, k);
@@ -731,12 +725,11 @@ dissect_llcgprs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
remaining_length = (tom_byte >> 4) & 0x0F;
tom_pd = tom_byte & 0x0F;
- ctrl_field_item = proto_tree_add_text(llcgprs_tree, tvb, offset,
- (llc_data_reported_length-offset), "TOM Envelope - Protocol: %s",
+ ctrl_f_tree = proto_tree_add_subtree_format(llcgprs_tree, tvb, offset,
+ (llc_data_reported_length-offset), ett_llcgprs_sframe, NULL,
+ "TOM Envelope - Protocol: %s",
val_to_str(tom_pd, tompd_formats, "Unknown (%d)"));
- ctrl_f_tree = proto_item_add_subtree(ctrl_field_item, ett_llcgprs_sframe);
-
proto_tree_add_uint(ctrl_f_tree, hf_llcgprs_tom_rl, tvb, offset, 1, tom_byte);
proto_tree_add_uint(ctrl_f_tree, hf_llcgprs_tom_pd, tvb, offset, 1, tom_byte);
@@ -799,11 +792,10 @@ dissect_llcgprs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if (tree)
{
- ctrl_field_item = proto_tree_add_text(llcgprs_tree, tvb, offset-2, 2,
- "Supervisory format: %s: N(R) = %u",
+ ctrl_f_tree = proto_tree_add_subtree_format(llcgprs_tree, tvb, offset-2, 2,
+ ett_llcgprs_sframe, NULL, "Supervisory format: %s: N(R) = %u",
val_to_str(epm, cr_formats_ipluss, "Unknown (%d)"), nu);
- ctrl_f_tree = proto_item_add_subtree(ctrl_field_item, ett_llcgprs_sframe);
proto_tree_add_uint(ctrl_f_tree, hf_llcgprs_S_fmt, tvb, offset-2,
2, ctrl_fld_ui_s);
proto_tree_add_boolean(ctrl_f_tree, hf_llcgprs_As, tvb, offset-2,
@@ -830,9 +822,8 @@ dissect_llcgprs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
guint loop_count;
guint8 r_byte;
guint16 location = offset;
- ctrl_field_item = proto_tree_add_text(llcgprs_tree, tvb, offset,
- sack_length, "SACK FRAME: length = %u", sack_length);
- ctrl_f_tree = proto_item_add_subtree(ctrl_field_item, ett_llcgprs_sframe);
+ ctrl_f_tree = proto_tree_add_subtree_format(llcgprs_tree, tvb, offset, sack_length,
+ ett_llcgprs_sframe, NULL, "SACK FRAME: length = %u", sack_length);
/* display the R Bitmap */
for (loop_count = 0; loop_count < sack_length; loop_count++)
{
@@ -862,11 +853,9 @@ dissect_llcgprs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
remaining_length = (tom_byte >> 4) & 0x0F;
tom_pd = tom_byte & 0x0F;
- ctrl_field_item = proto_tree_add_text(llcgprs_tree, tvb, offset,
- (llc_data_reported_length-offset), "TOM Envelope - Protocol: %s",
- val_to_str(tom_pd, tompd_formats, "Unknown (%d)"));
-
- ctrl_f_tree = proto_item_add_subtree(ctrl_field_item, ett_llcgprs_sframe);
+ ctrl_f_tree = proto_tree_add_subtree_format(llcgprs_tree, tvb, offset,
+ (llc_data_reported_length-offset), ett_llcgprs_sframe, NULL,
+ "TOM Envelope - Protocol: %s", val_to_str(tom_pd, tompd_formats, "Unknown (%d)"));
proto_tree_add_uint(ctrl_f_tree, hf_llcgprs_tom_rl, tvb, offset, 1, tom_byte);
proto_tree_add_uint(ctrl_f_tree, hf_llcgprs_tom_pd, tvb, offset, 1, tom_byte);
@@ -924,9 +913,9 @@ dissect_llcgprs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if (tree)
{
- ctrl_field_item = proto_tree_add_text(llcgprs_tree, tvb, offset-2,
- 2, "Unconfirmed Information format - UI, N(U) = %u", nu);
- ctrl_f_tree = proto_item_add_subtree(ctrl_field_item, ett_llcgprs_ctrlf);
+ ctrl_f_tree = proto_tree_add_subtree_format(llcgprs_tree, tvb, offset-2,
+ 2, ett_llcgprs_ctrlf, NULL,
+ "Unconfirmed Information format - UI, N(U) = %u", nu);
proto_tree_add_uint(ctrl_f_tree, hf_llcgprs_U_fmt, tvb, offset-2,
2, ctrl_fld_ui_s);
@@ -967,12 +956,11 @@ dissect_llcgprs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
remaining_length = (tom_byte >> 4) & 0x0F;
tom_pd = tom_byte & 0x0F;
- ctrl_field_item = proto_tree_add_text(llcgprs_tree, tvb, offset,
- (llc_data_reported_length-offset), "TOM Envelope - Protocol: %s",
+ ctrl_f_tree = proto_tree_add_subtree_format(llcgprs_tree, tvb, offset,
+ (llc_data_reported_length-offset), ett_llcgprs_sframe, NULL,
+ "TOM Envelope - Protocol: %s",
val_to_str(tom_pd, tompd_formats, "Unknown (%d)"));
- ctrl_f_tree = proto_item_add_subtree(ctrl_field_item, ett_llcgprs_sframe);
-
proto_tree_add_uint(ctrl_f_tree, hf_llcgprs_tom_rl, tvb, offset, 1, tom_byte);
proto_tree_add_uint(ctrl_f_tree, hf_llcgprs_tom_pd, tvb, offset, 1, tom_byte);
@@ -1097,13 +1085,11 @@ dissect_llcgprs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
int loop_counter = 0;
int location = 0;
- ui_ti = proto_tree_add_text(llcgprs_tree, tvb, offset, (llc_data_reported_length-2),
- "Information Field: Length = %u", info_len);
- ui_tree = proto_item_add_subtree(ui_ti, ett_ui);
+ ui_tree = proto_tree_add_subtree_format(llcgprs_tree, tvb, offset, (llc_data_reported_length-2),
+ ett_ui, NULL, "Information Field: Length = %u", info_len);
- uinfo_field = proto_tree_add_text(ui_tree, tvb, offset, 6,
- "Rejected Frame Control Field");
- uinfo_tree = proto_item_add_subtree(uinfo_field, ett_ui);
+ uinfo_tree = proto_tree_add_subtree(ui_tree, tvb, offset, 6,
+ ett_ui, NULL, "Rejected Frame Control Field");
location = offset;
for (loop_counter = 0; loop_counter < 3; loop_counter++)
@@ -1116,9 +1102,8 @@ dissect_llcgprs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
location += 2;
}
- uinfo_field = proto_tree_add_text(ui_tree, tvb, location, 4,
- "Information Field Data");
- uinfo_tree = proto_item_add_subtree(uinfo_field, ett_ui);
+ uinfo_tree = proto_tree_add_subtree(ui_tree, tvb, location, 4,
+ ett_ui, NULL, "Information Field Data");
fld_vars = tvb_get_ntohl(tvb, location);
proto_tree_add_uint(uinfo_tree, hf_llcgprs_frmr_spare, tvb, location,
diff --git a/epan/dissectors/packet-gre.c b/epan/dissectors/packet-gre.c
index 44fbcab4f0..2158926fec 100644
--- a/epan/dissectors/packet-gre.c
+++ b/epan/dissectors/packet-gre.c
@@ -235,9 +235,8 @@ dissect_gre_3gpp2_attribs(tvbuff_t *tvb, int offset, proto_tree *tree)
guint8 attrib_id = tvb_get_guint8(tvb, offset);
guint8 attrib_length = tvb_get_guint8(tvb, offset + 1);
- attr_item = proto_tree_add_text(atree, tvb, offset, attrib_length + 1 + 1, "%s",
+ attr_tree = proto_tree_add_subtree(atree, tvb, offset, attrib_length + 1 + 1, ett_3gpp2_attr, &attr_item,
val_to_str((attrib_id&0x7f), gre_3ggp2_attrib_id_vals, "%u (Unknown)"));
- attr_tree = proto_item_add_subtree(attr_item, ett_3gpp2_attr);
proto_tree_add_item(attr_tree, hf_gre_3ggp2_attrib_id, tvb, offset, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(attr_tree, hf_gre_3ggp2_attrib_length, tvb, offset+1, 1, ENC_BIG_ENDIAN);
diff --git a/epan/dissectors/packet-gsm_a_bssmap.c b/epan/dissectors/packet-gsm_a_bssmap.c
index 284d7a2e9d..bc015c1f34 100644
--- a/epan/dissectors/packet-gsm_a_bssmap.c
+++ b/epan/dissectors/packet-gsm_a_bssmap.c
@@ -2059,16 +2059,13 @@ be_dlci(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset,
{
guint8 oct;
guint32 curr_offset;
- proto_item *item = NULL;
- proto_tree *subtree = NULL;
+ proto_tree *subtree;
curr_offset = offset;
- item =
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "Data Link Connection Identifier");
-
- subtree = proto_item_add_subtree(item, ett_dlci);
+ subtree =
+ proto_tree_add_subtree(tree, tvb, curr_offset, 1,
+ ett_dlci, NULL, "Data Link Connection Identifier");
oct = tvb_get_guint8(tvb, curr_offset);
@@ -2141,14 +2138,12 @@ be_cell_id_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 off
num_cells = 0;
do
{
- item =
- proto_tree_add_text(tree,
+ subtree =
+ proto_tree_add_subtree_format(tree,
tvb, curr_offset, -1,
- "Cell %u",
+ ett_cell_list, &item, "Cell %u",
num_cells + 1);
- subtree = proto_item_add_subtree(item, ett_cell_list);
-
if (add_string)
add_string[0] = '\0';
@@ -3962,8 +3957,8 @@ be_speech_codec_lst(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gui
while (curr_offset-offset < len) {
number++;
consumed = 0;
- item = proto_tree_add_text(tree, tvb, curr_offset, 1, "Speech Codec Element %u",number);
- subtree = proto_item_add_subtree(item, ett_codec_lst);
+ subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, 1,
+ ett_codec_lst, &item, "Speech Codec Element %u",number);
codec = tvb_get_guint8(tvb,curr_offset)&0x0f;
switch (codec) {
case 0:
@@ -4116,8 +4111,8 @@ be_speech_codec(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32
while (curr_offset-offset < len) {
number++;
consumed = 0;
- item = proto_tree_add_text(tree, tvb, curr_offset, 1, "Speech Codec Element %u",number);
- subtree = proto_item_add_subtree(item, ett_codec_lst);
+ subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, 1, ett_codec_lst, &item,
+ "Speech Codec Element %u",number);
codec = tvb_get_guint8(tvb,curr_offset)&0x0f;
switch (codec) {
case 0:
diff --git a/epan/dissectors/packet-gsm_a_common.c b/epan/dissectors/packet-gsm_a_common.c
index b676e20b30..2a1c7da81b 100644
--- a/epan/dissectors/packet-gsm_a_common.c
+++ b/epan/dissectors/packet-gsm_a_common.c
@@ -733,6 +733,7 @@ static int hf_gsm_a_geo_loc_offset_angle = -1;
static int hf_gsm_a_geo_loc_included_angle = -1;
static expert_field ei_gsm_a_extraneous_data = EI_INIT;
+static expert_field ei_gsm_a_unknown_element = EI_INIT;
static char a_bigbuf[1024];
@@ -1249,17 +1250,16 @@ guint16 elem_tlv(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint8 iei
elem_name = try_val_to_str_ext(idx, &elem_names_ext);
- item =
- proto_tree_add_text(tree,
- tvb, curr_offset, parm_len + 1 + lengt_length,
- "%s%s", elem_name ? elem_name : "Unknown - aborting dissection",
- (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add);
-
/* idx is out of range */
- if (elem_name == NULL)
+ if (elem_name == NULL) {
+ proto_tree_add_expert_format(tree, pinfo, &ei_gsm_a_unknown_element,
+ tvb, curr_offset, parm_len + 1 + lengt_length,
+ "Unknown - aborting dissection%s", (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add);
return consumed;
+ }
- subtree = proto_item_add_subtree(item, elem_ett[idx]);
+ subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, parm_len + 1 + lengt_length, elem_ett[idx], &item,
+ "%s%s", elem_name, (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add);
proto_tree_add_uint(subtree,
get_hf_elem_id(pdu_type), tvb,
@@ -1342,17 +1342,16 @@ guint16 elem_telv(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint8 ie
elem_name = try_val_to_str_ext(idx, &elem_names_ext);
- item =
- proto_tree_add_text(tree,
- tvb, curr_offset, parm_len + 1 + lengt_length,
- "%s%s", elem_name ? elem_name : "Unknown - aborting dissection",
- (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add);
-
/* idx is out of range */
- if (elem_name == NULL)
+ if (elem_name == NULL) {
+ proto_tree_add_expert_format(tree, pinfo, &ei_gsm_a_unknown_element,
+ tvb, curr_offset, parm_len + 1 + lengt_length,
+ "Unknown - aborting dissection%s", (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add);
return consumed;
+ }
- subtree = proto_item_add_subtree(item, elem_ett[idx]);
+ subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, parm_len + 1 + lengt_length, elem_ett[idx], &item,
+ "%s%s", elem_name, (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add);
proto_tree_add_uint(subtree,
get_hf_elem_id(pdu_type), tvb,
@@ -1427,15 +1426,16 @@ guint16 elem_tlv_e(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint8 i
elem_name = try_val_to_str_ext(idx, &elem_names_ext);
- item = proto_tree_add_text(tree, tvb, curr_offset, parm_len + 1 + 2,
- "%s%s", elem_name ? elem_name : "Unknown - aborting dissection",
- (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add);
-
/* idx is out of range */
- if (elem_name == NULL)
+ if (elem_name == NULL) {
+ proto_tree_add_expert_format(tree, pinfo, &ei_gsm_a_unknown_element,
+ tvb, curr_offset, parm_len + 1 + 2,
+ "Unknown - aborting dissection%s", (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add);
return consumed;
+ }
- subtree = proto_item_add_subtree(item, elem_ett[idx]);
+ subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, parm_len + 1 + 2, elem_ett[idx], &item,
+ "%s%s", elem_name, (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add);
proto_tree_add_uint(subtree,
get_hf_elem_id(pdu_type), tvb,
@@ -1506,16 +1506,16 @@ guint16 elem_tv(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint8 iei,
{
elem_name = try_val_to_str_ext(idx, &elem_names_ext);
- item =
- proto_tree_add_text(tree, tvb, curr_offset, -1,
- "%s%s", elem_name ? elem_name : "Unknown - aborting dissection",
- (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add);
-
/* idx is out of range */
- if (elem_name == NULL)
+ if (elem_name == NULL) {
+ proto_tree_add_expert_format(tree, pinfo, &ei_gsm_a_unknown_element,
+ tvb, curr_offset, -1,
+ "Unknown - aborting dissection%s", (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add);
return consumed;
+ }
- subtree = proto_item_add_subtree(item, elem_ett[idx]);
+ subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, elem_ett[idx], &item,
+ "%s%s", elem_name, (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add);
proto_tree_add_uint(subtree,
get_hf_elem_id(pdu_type), tvb,
@@ -1584,17 +1584,16 @@ guint16 elem_tv_short(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint
{
elem_name = try_val_to_str_ext(idx, &elem_names_ext);
- item =
- proto_tree_add_text(tree,
- tvb, curr_offset, -1,
- "%s%s", elem_name ? elem_name : "Unknown - aborting dissection",
- (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add);
-
/* idx is out of range */
- if (elem_name == NULL)
+ if (elem_name == NULL) {
+ proto_tree_add_expert_format(tree, pinfo, &ei_gsm_a_unknown_element,
+ tvb, curr_offset, -1,
+ "Unknown - aborting dissection%s", (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add);
return consumed;
+ }
- subtree = proto_item_add_subtree(item, elem_ett[idx]);
+ subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, elem_ett[idx], &item,
+ "%s%s", elem_name, (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add);
other_decode_bitfield_value(buf, oct, 0xf0, 8);
proto_tree_add_text(subtree,
@@ -1694,17 +1693,16 @@ elem_lv(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gint pdu_type, int
elem_name = try_val_to_str_ext(idx, &elem_names_ext);
- item =
- proto_tree_add_text(tree,
- tvb, curr_offset, parm_len + 1,
- "%s%s", elem_name ? elem_name : "Unknown - aborting dissection",
- (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add);
-
/* idx is out of range */
- if (elem_name == NULL)
+ if (elem_name == NULL) {
+ proto_tree_add_expert_format(tree, pinfo, &ei_gsm_a_unknown_element,
+ tvb, curr_offset, parm_len + 1,
+ "Unknown - aborting dissection%s", (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add);
return consumed;
+ }
- subtree = proto_item_add_subtree(item, elem_ett[idx]);
+ subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, parm_len + 1, elem_ett[idx], &item,
+ "%s%s", elem_name, (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add);
proto_tree_add_uint(subtree, hf_gsm_a_length, tvb,
curr_offset, 1, parm_len);
@@ -1763,15 +1761,16 @@ guint16 elem_lv_e(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gint pdu_
elem_name = try_val_to_str_ext(idx, &elem_names_ext);
- item = proto_tree_add_text(tree, tvb, curr_offset, parm_len + 2,
- "%s%s", elem_name ? elem_name : "Unknown - aborting dissection",
- (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add);
-
/* idx is out of range */
- if (elem_name == NULL)
+ if (elem_name == NULL) {
+ proto_tree_add_expert_format(tree, pinfo, &ei_gsm_a_unknown_element,
+ tvb, curr_offset, parm_len + 2,
+ "Unknown - aborting dissection%s", (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add);
return consumed;
+ }
- subtree = proto_item_add_subtree(item, elem_ett[idx]);
+ subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, parm_len + 2, elem_ett[idx], &item,
+ "%s%s", elem_name, (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add);
proto_tree_add_uint(subtree, hf_gsm_a_length, tvb,
curr_offset, 2, parm_len);
@@ -1843,14 +1842,12 @@ guint16 elem_v(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gint pdu_typ
{
gchar *a_add_string;
- item =
- proto_tree_add_text(tree,
+ subtree =
+ proto_tree_add_subtree_format(tree,
tvb, curr_offset, 0,
- "%s%s", elem_name,
+ elem_ett[idx], &item, "%s%s", elem_name,
(name_add == NULL) || (name_add[0] == '\0') ? "" : name_add);
- subtree = proto_item_add_subtree(item, elem_ett[idx]);
-
a_add_string= (gchar*)wmem_alloc(wmem_packet_scope(), 1024);
a_add_string[0] = '\0';
consumed = (*elem_funcs[idx])(tvb, subtree, pinfo, curr_offset, -1, a_add_string, 1024);
@@ -1889,16 +1886,14 @@ guint16 elem_v_short(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gint p
elem_name = try_val_to_str_ext(idx, &elem_names_ext);
- item = proto_tree_add_text(tree,
- tvb, curr_offset, 0,
- "%s%s", elem_name ? elem_name : "Unknown - aborting dissection",
- "");
-
/* idx is out of range */
- if (elem_name == NULL)
+ if (elem_name == NULL) {
+ proto_tree_add_expert(tree, pinfo, &ei_gsm_a_unknown_element,
+ tvb, curr_offset, 0);
return consumed;
+ }
- subtree = proto_item_add_subtree(item, elem_ett[idx]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_offset, 0, elem_ett[idx], &item, elem_name);
a_add_string= (gchar*)wmem_alloc(wmem_packet_scope(), 1024);
a_add_string[0] = '\0';
@@ -2149,12 +2144,10 @@ de_lai(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guin
curr_offset = offset;
- item = proto_tree_add_text(tree,
- tvb, curr_offset, 5, "%s",
+ subtree = proto_tree_add_subtree(tree,
+ tvb, curr_offset, 5, ett_gsm_common_elem[DE_LAI], &item,
val_to_str_ext_const(DE_LAI, &gsm_common_elem_strings_ext, ""));
- subtree = proto_item_add_subtree(item, ett_gsm_common_elem[DE_LAI]);
-
octs[0] = tvb_get_guint8(tvb, curr_offset);
octs[1] = tvb_get_guint8(tvb, curr_offset + 1);
octs[2] = tvb_get_guint8(tvb, curr_offset + 2);
@@ -2379,17 +2372,14 @@ de_ms_cm_1(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offs
{
guint32 curr_offset;
proto_tree *subtree;
- proto_item *item;
curr_offset = offset;
- item =
- proto_tree_add_text(tree,
- tvb, curr_offset, 1, "%s",
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1, ett_gsm_common_elem[DE_MS_CM_1], NULL,
val_to_str_ext_const(DE_MS_CM_1, &gsm_common_elem_strings_ext, ""));
- subtree = proto_item_add_subtree(item, ett_gsm_common_elem[DE_MS_CM_1]);
-
proto_tree_add_item(subtree, hf_gsm_a_b8spare, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(subtree, hf_gsm_a_MSC_rev, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
@@ -3320,20 +3310,17 @@ de_pd_sapi(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offs
guint8 oct;
guint32 curr_offset;
proto_tree *subtree;
- proto_item *item;
const gchar *str;
curr_offset = offset;
oct = tvb_get_guint8(tvb, curr_offset);
- item =
- proto_tree_add_text(tree,
- tvb, curr_offset, 1, "%s",
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1, ett_gsm_dtap_elem[DE_PD_SAPI], NULL,
val_to_str_ext_const(DE_PD_SAPI, &gsm_dtap_elem_strings_ext, ""));
- subtree = proto_item_add_subtree(item, ett_gsm_dtap_elem[DE_PD_SAPI]);
-
proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, curr_offset<<3, 2, ENC_BIG_ENDIAN);
switch ((oct & 0x30) >> 4)
@@ -4475,6 +4462,7 @@ proto_register_gsm_a_common(void)
static ei_register_info ei[] = {
{ &ei_gsm_a_extraneous_data, { "gsm_a.extraneous_data", PI_PROTOCOL, PI_NOTE, "Extraneous Data, dissector bug or later version spec(report to wireshark.org)", EXPFILL }},
+ { &ei_gsm_a_unknown_element, { "gsm_a.unknown_element", PI_PROTOCOL, PI_ERROR, "Unknown - aborting dissection", EXPFILL }},
};
expert_module_t* expert_a_common;
diff --git a/epan/dissectors/packet-gsm_a_dtap.c b/epan/dissectors/packet-gsm_a_dtap.c
index ac9e91e4e5..541f2e8b05 100644
--- a/epan/dissectors/packet-gsm_a_dtap.c
+++ b/epan/dissectors/packet-gsm_a_dtap.c
@@ -1187,14 +1187,23 @@ de_mm_timer(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 off
switch (oct>>5)
{
- case 0: str = "sec"; val*=2; break;
- case 1: str = "min"; break;
- case 2: str = "min"; val*=6; break;
- case 7: str = "";
+ case 0:
+ str = "sec"; val*=2;
+ break;
+ case 1:
+ str = "min";
+ break;
+ case 2:
+ str = "min"; val*=6;
+ break;
+ case 7:
+ str = "";
item = proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_mm_timer, tvb, offset, 1,
oct, "timer is deactivated");
break;
- default: str = "min";
+ default:
+ str = "min";
+ break;
}
if (item == NULL) {
@@ -1521,11 +1530,10 @@ de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 o
* warning, bearer cap uses extended values that
* are reversed from other parameters!
*/
- item =
- proto_tree_add_text(tree,
+ subtree =
+ proto_tree_add_subtree(tree,
tvb, curr_offset, 1,
- "Octet 3");
- subtree = proto_item_add_subtree(item, ett_bc_oct_3);
+ ett_bc_oct_3, NULL, "Octet 3");
extended = (oct & 0x80) ? FALSE : TRUE;
itc = oct & 0x07;
@@ -1610,13 +1618,11 @@ de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 o
case DE_BC_ITC_SPEECH:
/* octets 3a */
- item =
- proto_tree_add_text(tree,
- tvb, curr_offset, -1,
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, -1, ett_bc_oct_3a, &item,
"Octets 3a - Speech Versions");
- subtree = proto_item_add_subtree(item, ett_bc_oct_3a);
-
saved_offset = curr_offset;
do
@@ -1640,12 +1646,10 @@ de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 o
default:
/* octet 4 */
- item =
- proto_tree_add_text(tree,
+ subtree =
+ proto_tree_add_subtree(tree,
tvb, curr_offset, 1,
- "Octet 4");
-
- subtree = proto_item_add_subtree(item, ett_bc_oct_4);
+ ett_bc_oct_4, NULL, "Octet 4");
proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(subtree, is_uplink ? hf_gsm_a_dtap_compression_up : hf_gsm_a_dtap_compression,
@@ -1662,12 +1666,10 @@ de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 o
/* octet 5 */
- item =
- proto_tree_add_text(tree,
+ subtree =
+ proto_tree_add_subtree(tree,
tvb, curr_offset, 1,
- "Octet 5");
-
- subtree = proto_item_add_subtree(item, ett_bc_oct_5);
+ ett_bc_oct_5, NULL, "Octet 5");
oct = tvb_get_guint8(tvb, curr_offset);
@@ -1685,12 +1687,10 @@ de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 o
/* octet 5a */
- item =
- proto_tree_add_text(tree,
+ subtree =
+ proto_tree_add_subtree(tree,
tvb, curr_offset, 1,
- "Octet 5a");
-
- subtree = proto_item_add_subtree(item, ett_bc_oct_5a);
+ ett_bc_oct_5a, NULL, "Octet 5a");
oct = tvb_get_guint8(tvb, curr_offset);
@@ -1708,12 +1708,10 @@ de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 o
/* octet 5b */
- item =
- proto_tree_add_text(tree,
+ subtree =
+ proto_tree_add_subtree(tree,
tvb, curr_offset, 1,
- "Octet 5b");
-
- subtree = proto_item_add_subtree(item, ett_bc_oct_5b);
+ ett_bc_oct_5b, NULL, "Octet 5b");
proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(subtree, hf_gsm_a_dtap_rate_adaption_header, tvb, curr_offset, 1, ENC_NA);
@@ -1732,12 +1730,10 @@ bc_octet_6:
/* octet 6 */
- item =
- proto_tree_add_text(tree,
+ subtree =
+ proto_tree_add_subtree(tree,
tvb, curr_offset, 1,
- "Octet 6");
-
- subtree = proto_item_add_subtree(item, ett_bc_oct_6);
+ ett_bc_oct_6, NULL, "Octet 6");
oct = tvb_get_guint8(tvb, curr_offset);
@@ -1761,12 +1757,10 @@ bc_octet_6:
/* octet 6a */
- item =
- proto_tree_add_text(tree,
+ subtree =
+ proto_tree_add_subtree(tree,
tvb, curr_offset, 1,
- "Octet 6a");
-
- subtree = proto_item_add_subtree(item, ett_bc_oct_6a);
+ ett_bc_oct_6a, NULL, "Octet 6a");
oct = tvb_get_guint8(tvb, curr_offset);
@@ -1788,12 +1782,10 @@ bc_octet_6:
/* octet 6b */
- item =
- proto_tree_add_text(tree,
+ subtree =
+ proto_tree_add_subtree(tree,
tvb, curr_offset, 1,
- "Octet 6b");
-
- subtree = proto_item_add_subtree(item, ett_bc_oct_6b);
+ ett_bc_oct_6b, NULL, "Octet 6b");
oct = tvb_get_guint8(tvb, curr_offset);
@@ -1812,12 +1804,10 @@ bc_octet_6:
/* octet 6c */
- item =
- proto_tree_add_text(tree,
+ subtree =
+ proto_tree_add_subtree(tree,
tvb, curr_offset, 1,
- "Octet 6c");
-
- subtree = proto_item_add_subtree(item, ett_bc_oct_6c);
+ ett_bc_oct_6c, NULL, "Octet 6c");
oct = tvb_get_guint8(tvb, curr_offset);
@@ -1836,12 +1826,10 @@ bc_octet_6:
/* octet 6d */
- item =
- proto_tree_add_text(tree,
+ subtree =
+ proto_tree_add_subtree(tree,
tvb, curr_offset, 1,
- "Octet 6d");
-
- subtree = proto_item_add_subtree(item, ett_bc_oct_6d);
+ ett_bc_oct_6d, NULL, "Octet 6d");
oct = tvb_get_guint8(tvb, curr_offset);
@@ -1859,12 +1847,10 @@ bc_octet_6:
/* octet 6e */
- item =
- proto_tree_add_text(tree,
+ subtree =
+ proto_tree_add_subtree(tree,
tvb, curr_offset, 1,
- "Octet 6e");
-
- subtree = proto_item_add_subtree(item, ett_bc_oct_6e);
+ ett_bc_oct_6e, NULL, "Octet 6e");
oct = tvb_get_guint8(tvb, curr_offset);
@@ -1898,12 +1884,10 @@ bc_octet_6:
/* octet 6f */
- item =
- proto_tree_add_text(tree,
+ subtree =
+ proto_tree_add_subtree(tree,
tvb, curr_offset, 1,
- "Octet 6f");
-
- subtree = proto_item_add_subtree(item, ett_bc_oct_6f);
+ ett_bc_oct_6f, NULL, "Octet 6f");
oct = tvb_get_guint8(tvb, curr_offset);
@@ -1930,12 +1914,10 @@ bc_octet_6:
/* octet 6g */
- item =
- proto_tree_add_text(tree,
+ subtree =
+ proto_tree_add_subtree(tree,
tvb, curr_offset, 1,
- "Octet 6g");
-
- subtree = proto_item_add_subtree(item, ett_bc_oct_6g);
+ ett_bc_oct_6g, NULL, "Octet 6g");
oct = tvb_get_guint8(tvb, curr_offset);
@@ -1962,13 +1944,10 @@ bc_octet_6:
bc_octet_7:
/* octet 7 */
- item =
- proto_tree_add_text(tree,
+ subtree =
+ proto_tree_add_subtree(tree,
tvb, curr_offset, 1,
- "Octet 7");
-
- subtree = proto_item_add_subtree(item, ett_bc_oct_7);
- oct = tvb_get_guint8(tvb, curr_offset);
+ ett_bc_oct_7, NULL, "Octet 7");
proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
@@ -2090,14 +2069,12 @@ de_call_state(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 o
{
guint8 oct, coding_standard, call_state;
proto_tree *subtree;
- proto_item *item;
- item =
- proto_tree_add_text(tree,
- tvb, offset, 1, "%s",
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, offset, 1, ett_gsm_dtap_elem[DE_CALL_STATE], NULL,
val_to_str_ext_const(DE_CALL_STATE, &gsm_dtap_elem_strings_ext, ""));
- subtree = proto_item_add_subtree(item, ett_gsm_dtap_elem[DE_CALL_STATE]);
proto_tree_add_item(subtree, hf_gsm_a_dtap_coding_standard, tvb, offset, 1, ENC_BIG_ENDIAN);
oct = tvb_get_guint8(tvb, offset);
@@ -2420,7 +2397,6 @@ de_cause(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset
guint32 curr_offset;
guint32 diag_length;
proto_tree *subtree;
- proto_item *item;
const gchar *str;
curr_offset = offset;
@@ -2524,8 +2500,8 @@ de_cause(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset
NO_MORE_DATA_CHECK(len);
- item = proto_tree_add_text(tree, tvb, curr_offset, len - (curr_offset - offset), "Diagnostics");
- subtree = proto_item_add_subtree(item, ett_gsm_dtap_elem[DE_CAUSE]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_offset, len - (curr_offset - offset),
+ ett_gsm_dtap_elem[DE_CAUSE], NULL, "Diagnostics");
/*
* Diagnostics for supplementary services may be included in the case of
@@ -3006,14 +2982,12 @@ de_u2u(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset,
{
guint32 curr_offset;
proto_tree *subtree;
- proto_item *item;
curr_offset = offset;
proto_tree_add_item(tree, hf_gsm_a_dtap_u2u_prot_discr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
- item = proto_tree_add_text(tree, tvb, curr_offset, len - 1, "User-user information");
- subtree = proto_item_add_subtree(item, ett_gsm_dtap_elem[DE_USER_USER]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_offset, len - 1, ett_gsm_dtap_elem[DE_USER_USER], NULL, "User-user information");
proto_tree_add_item(subtree, hf_gsm_a_dtap_data, tvb, curr_offset, len - 1, ENC_NA);
return(len);
@@ -3187,7 +3161,6 @@ de_sup_codec_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint
guint32 curr_offset;
guint8 length;
proto_tree *subtree;
- proto_item *item;
guint8 sysid_counter;
curr_offset = offset;
@@ -3208,8 +3181,8 @@ de_sup_codec_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint
curr_offset++;
if (length > 0)
{
- item = proto_tree_add_text(tree, tvb, curr_offset, length, "Codec Bitmap for SysID %u", sysid_counter);
- subtree = proto_item_add_subtree(item, ett_gsm_dtap_elem[DE_SUP_CODEC_LIST]);
+ subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, length, ett_gsm_dtap_elem[DE_SUP_CODEC_LIST], NULL,
+ "Codec Bitmap for SysID %u", sysid_counter);
/* 6.2 Codec Bitmap
* The Codec Types are coded in the first and second octet of the Codec List
* Bitmap as follows:
@@ -3744,7 +3717,6 @@ de_tp_epc_ue_tl_a_lb_setup(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _
guint32 curr_offset;
guint32 count, nb_lb;
guint8 drb;
- proto_item *item = NULL;
proto_tree *lb_setup_tree = NULL;
curr_offset = offset;
@@ -3754,8 +3726,9 @@ de_tp_epc_ue_tl_a_lb_setup(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _
proto_tree_add_text(tree, tvb, curr_offset, len, "Number of LB entities: %d", nb_lb);
while ((count < nb_lb) && (count < 8)){
- item = proto_tree_add_text(tree, tvb, curr_offset, 3, "LB entity %d", count);
- lb_setup_tree = proto_item_add_subtree(item, ett_epc_ue_tl_a_lb_setup);
+ lb_setup_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, 3,
+ ett_epc_ue_tl_a_lb_setup, NULL, "LB entity %d", count);
+
proto_tree_add_bits_item(lb_setup_tree, hf_gsm_a_dtap_epc_ue_tl_a_ul_sdu_size, tvb, curr_offset<<3, 16, ENC_BIG_ENDIAN);
curr_offset += 2;
drb = tvb_get_guint8(tvb, curr_offset) & 0x1f;
@@ -3994,7 +3967,6 @@ dtap_mm_auth_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint3
guint curr_len;
guint8 oct;
proto_tree *subtree;
- proto_item *item;
curr_offset = offset;
curr_len = len;
@@ -4008,13 +3980,11 @@ dtap_mm_auth_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint3
proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, curr_offset<<3, 4, ENC_BIG_ENDIAN);
- item =
- proto_tree_add_text(tree,
- tvb, curr_offset, 1, "%s",
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1, ett_gsm_common_elem[DE_CIPH_KEY_SEQ_NUM], NULL,
val_to_str_ext_const(DE_CIPH_KEY_SEQ_NUM, &gsm_common_elem_strings_ext, ""));
- subtree = proto_item_add_subtree(item, ett_gsm_common_elem[DE_CIPH_KEY_SEQ_NUM]);
-
proto_tree_add_bits_item(subtree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+4, 1, ENC_BIG_ENDIAN);
switch (oct & 0x07)
@@ -4096,7 +4066,6 @@ dtap_mm_cm_reestab_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
guint curr_len;
guint8 oct;
proto_tree *subtree;
- proto_item *item;
curr_offset = offset;
curr_len = len;
@@ -4110,13 +4079,11 @@ dtap_mm_cm_reestab_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, curr_offset<<3, 4, ENC_BIG_ENDIAN);
- item =
- proto_tree_add_text(tree,
- tvb, curr_offset, 1, "%s",
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1, ett_gsm_common_elem[DE_CIPH_KEY_SEQ_NUM], NULL,
val_to_str_ext_const(DE_CIPH_KEY_SEQ_NUM, &gsm_common_elem_strings_ext, ""));
- subtree = proto_item_add_subtree(item, ett_gsm_common_elem[DE_CIPH_KEY_SEQ_NUM]);
-
proto_tree_add_bits_item(subtree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+4, 1, ENC_BIG_ENDIAN);
switch (oct & 0x07)
@@ -4241,7 +4208,6 @@ dtap_mm_cm_srvc_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gui
guint curr_len;
guint8 oct;
proto_tree *subtree;
- proto_item *item;
curr_offset = offset;
curr_len = len;
@@ -4253,13 +4219,11 @@ dtap_mm_cm_srvc_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gui
*/
oct = tvb_get_guint8(tvb, curr_offset);
- item =
- proto_tree_add_text(tree,
- tvb, curr_offset, 1, "%s",
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1, ett_gsm_common_elem[DE_CIPH_KEY_SEQ_NUM], NULL,
val_to_str_ext_const(DE_CIPH_KEY_SEQ_NUM, &gsm_common_elem_strings_ext, ""));
- subtree = proto_item_add_subtree(item, ett_gsm_common_elem[DE_CIPH_KEY_SEQ_NUM]);
-
proto_tree_add_bits_item(subtree, hf_gsm_a_spare_bits, tvb, curr_offset<<3, 1, ENC_BIG_ENDIAN);
switch ((oct & 0x70) >> 4)
@@ -4274,13 +4238,11 @@ dtap_mm_cm_srvc_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gui
break;
}
- item =
- proto_tree_add_text(tree,
- tvb, curr_offset, 1, "%s",
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1, ett_gsm_dtap_elem[DE_CM_SRVC_TYPE], NULL,
val_to_str_ext_const(DE_CM_SRVC_TYPE, &gsm_dtap_elem_strings_ext, ""));
- subtree = proto_item_add_subtree(item, ett_gsm_dtap_elem[DE_CM_SRVC_TYPE]);
-
proto_tree_add_item(subtree, hf_gsm_a_dtap_service_type, tvb, curr_offset, 1, ENC_NA);
curr_offset++;
@@ -4322,7 +4284,6 @@ dtap_mm_id_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32
guint32 curr_offset;
guint curr_len;
proto_tree *subtree;
- proto_item *item;
curr_offset = offset;
curr_len = len;
@@ -4334,13 +4295,11 @@ dtap_mm_id_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32
*/
proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, curr_offset<<3, 4, ENC_BIG_ENDIAN);
- item =
- proto_tree_add_text(tree,
- tvb, curr_offset, 1, "%s",
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1, ett_gsm_dtap_elem[DE_ID_TYPE], NULL,
val_to_str_ext_const(DE_ID_TYPE, &gsm_dtap_elem_strings_ext, ""));
- subtree = proto_item_add_subtree(item, ett_gsm_dtap_elem[DE_ID_TYPE]);
-
proto_tree_add_bits_item(subtree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+4, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(subtree, hf_gsm_a_dtap_type_of_identity, tvb, curr_offset, 1, ENC_NA);
@@ -4479,7 +4438,7 @@ dtap_mm_loc_upd_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gui
guint curr_len;
guint8 oct;
proto_tree *subtree;
- proto_item *item;
+ proto_item *item;
curr_offset = offset;
curr_len = len;
@@ -4491,13 +4450,11 @@ dtap_mm_loc_upd_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gui
*/
oct = tvb_get_guint8(tvb, curr_offset);
- item =
- proto_tree_add_text(tree,
- tvb, curr_offset, 1, "%s",
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1, ett_gsm_common_elem[DE_CIPH_KEY_SEQ_NUM], NULL,
val_to_str_ext_const(DE_CIPH_KEY_SEQ_NUM, &gsm_common_elem_strings_ext, ""));
- subtree = proto_item_add_subtree(item, ett_gsm_common_elem[DE_CIPH_KEY_SEQ_NUM]);
-
proto_tree_add_bits_item(subtree, hf_gsm_a_spare_bits, tvb, curr_offset<<3, 1, ENC_BIG_ENDIAN);
switch ((oct & 0x70) >> 4)
@@ -4512,13 +4469,11 @@ dtap_mm_loc_upd_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gui
break;
}
- item =
- proto_tree_add_text(tree,
- tvb, curr_offset, 1, "%s",
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1, ett_gsm_dtap_elem[DE_LOC_UPD_TYPE], &item,
val_to_str_ext_const(DE_LOC_UPD_TYPE, &gsm_dtap_elem_strings_ext, ""));
- subtree = proto_item_add_subtree(item, ett_gsm_dtap_elem[DE_LOC_UPD_TYPE]);
-
proto_tree_add_item(subtree, hf_gsm_a_dtap_follow_on_request, tvb, curr_offset, 1, ENC_NA);
proto_tree_add_bits_item(subtree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+5, 1, ENC_BIG_ENDIAN);
@@ -4740,7 +4695,6 @@ dtap_cc_congestion_control(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _
guint curr_len;
guint8 oct;
proto_tree *subtree;
- proto_item *item;
curr_offset = offset;
curr_len = len;
@@ -4754,13 +4708,11 @@ dtap_cc_congestion_control(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _
proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, curr_offset<<3, 4, ENC_BIG_ENDIAN);
- item =
- proto_tree_add_text(tree,
- tvb, curr_offset, 1, "%s",
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1, ett_gsm_dtap_elem[DE_CONGESTION], NULL,
val_to_str_ext_const(DE_CONGESTION, &gsm_dtap_elem_strings_ext, ""));
- subtree = proto_item_add_subtree(item, ett_gsm_dtap_elem[DE_CONGESTION]);
-
proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_congestion_level, tvb, curr_offset, 1,
oct, "%s", val_to_str_const(oct & 0xF, gsm_a_dtap_congestion_level_vals, "Reserved"));
diff --git a/epan/dissectors/packet-gsm_a_gm.c b/epan/dissectors/packet-gsm_a_gm.c
index 4cc0c4ec56..18ee5b1e1c 100644
--- a/epan/dissectors/packet-gsm_a_gm.c
+++ b/epan/dissectors/packet-gsm_a_gm.c
@@ -1416,11 +1416,9 @@ de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gui
}
indx++;
- tf = proto_tree_add_text(tree,
+ tf_tree = proto_tree_add_subtree_format(tree,
tvb, curr_offset, 1,
- "MS RA capability %d", indx);
-
- tf_tree = proto_item_add_subtree(tf, ett_gmm_radio_cap);
+ ett_gmm_radio_cap, &tf, "MS RA capability %d", indx);
/*
* Access Technology
@@ -3050,7 +3048,6 @@ guint16
de_gmm_rai(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
proto_tree *subtree;
- proto_item *item;
guint32 mcc;
guint32 mnc;
guint32 lac;
@@ -3071,12 +3068,11 @@ de_gmm_rai(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset,
lac = tvb_get_ntohs(tvb, curr_offset+3);
rac = tvb_get_guint8(tvb, curr_offset+5);
- item = proto_tree_add_text(tree,
- tvb, curr_offset, 6,
+ subtree = proto_tree_add_subtree_format(tree,
+ tvb, curr_offset, 6, ett_gmm_rai, NULL,
"Routing area identification: %x-%x-%u-%u",
mcc, mnc, lac, rac);
- subtree = proto_item_add_subtree(item, ett_gmm_rai);
dissect_e212_mcc_mnc(tvb, pinfo, subtree, offset, TRUE);
proto_tree_add_item(subtree, hf_gsm_a_lac, tvb, curr_offset+3, 2, ENC_BIG_ENDIAN);
@@ -3572,18 +3568,25 @@ de_gc_timer(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 off
guint8 oct;
guint16 val;
const gchar *str;
- proto_tree *subtree;
proto_item *item = NULL;
+ proto_tree *subtree;
oct = tvb_get_guint8(tvb, offset);
val = oct&0x1f;
switch (oct>>5)
{
- case 0: str = "sec"; val*=2; break;
- case 1: str = "min"; break;
- case 2: str = "min"; val*=6; break;
- case 7: str = "";
+ case 0:
+ str = "sec"; val*=2;
+ break;
+ case 1:
+ str = "min";
+ break;
+ case 2:
+ str = "min"; val*=6;
+ break;
+ case 7:
+ str = "";
item = proto_tree_add_text(tree, tvb, offset, 1,
"GPRS Timer: timer is deactivated");
break;
@@ -3624,9 +3627,15 @@ de_gc_timer2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 of
switch (oct>>5)
{
- case 0: str = "sec"; val*=2; break;
- case 1: str = "min"; break;
- case 2: str = "min"; val*=6; break;
+ case 0:
+ str = "sec"; val*=2;
+ break;
+ case 1:
+ str = "min";
+ break;
+ case 2:
+ str = "min"; val*=6;
+ break;
case 7:
item = proto_tree_add_text(tree, tvb, curr_offset, 1,
"GPRS Timer: timer is deactivated");
@@ -5255,11 +5264,9 @@ de_sm_tflow_temp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 of
if ((e_bit == 1) && curr_len) {
count = 0;
while (curr_len) {
- proto_item *tf;
proto_tree *tf_tree;
pf_length = tvb_get_guint8(tvb, curr_offset+1);
- tf = proto_tree_add_text(tree, tvb, curr_offset, pf_length+2, "Parameter %d", count);
- tf_tree = proto_item_add_subtree(tf, ett_sm_tft);
+ tf_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, pf_length+2, ett_sm_tft, NULL, "Parameter %d", count);
param = tvb_get_guint8(tvb, curr_offset);
proto_tree_add_item(tf_tree, hf_gsm_a_sm_tft_param_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset += 2;
diff --git a/epan/dissectors/packet-gsm_a_rr.c b/epan/dissectors/packet-gsm_a_rr.c
index 16434a4d39..239809a247 100644
--- a/epan/dissectors/packet-gsm_a_rr.c
+++ b/epan/dissectors/packet-gsm_a_rr.c
@@ -1086,13 +1086,12 @@ static void dissect_channel_list_n_range(tvbuff_t *tvb, proto_tree *tree, packet
gint curr_offset = offset, bit_offset, f0, arfcn_orig, w[64], wsize, i;
gint octet, nwi = 1, jwi=0, imax, iused, arfcn;
guint8 list[1024];
- proto_item *item;
proto_tree *subtree;
memset((void*)list,0,sizeof(list));
- item = proto_tree_add_text(tree,tvb, curr_offset, len, "Range %d format", range);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_elem[DE_RR_NEIGH_CELL_DESC]);
+ subtree = proto_tree_add_subtree_format(tree,tvb, curr_offset, len,
+ ett_gsm_rr_elem[DE_RR_NEIGH_CELL_DESC], NULL, "Range %d format", range);
octet = tvb_get_guint8(tvb, curr_offset);
if (range == 1024) {
@@ -1383,7 +1382,7 @@ static guint16
de_rr_cell_select_indic(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
proto_tree *subtree, *subtree2;
- proto_item *item, *item2;
+ proto_item *item;
guint32 curr_offset;
gint bit_offset, bit_offset_sav, idx, xdd_cell_info, wsize, nwi, jwi, w[64], i, iused, xdd_indic0;
guint8 value;
@@ -1396,9 +1395,8 @@ de_rr_cell_select_indic(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
{
case 0: /* GSM Description */
bit_offset_sav = bit_offset;
- item = proto_tree_add_text(tree, tvb, bit_offset>>3, -1, "%s",
+ subtree = proto_tree_add_subtree(tree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_GSM_DESC], &item,
gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_GSM_DESC].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_GSM_DESC]);
while (gsm_rr_csn_flag(tvb, subtree, bit_offset++, "Repeating GSM Description struct", "Present", "Not Present"))
{
gsm_rr_csn_flag(tvb, subtree, bit_offset++, "Band Indicator", "1900", "1800");
@@ -1411,9 +1409,8 @@ de_rr_cell_select_indic(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
break;
case 1: /* UTRAN FDD Description */
bit_offset_sav = bit_offset;
- item = proto_tree_add_text(tree, tvb, bit_offset>>3, -1, "%s",
+ subtree = proto_tree_add_subtree(tree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_UTRAN_FDD_DESC], &item,
gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_FDD_DESC].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_UTRAN_FDD_DESC]);
while (gsm_rr_csn_flag(tvb, subtree, bit_offset++, "Repeating UTRAN FDD Description struct", "Present", "Not Present"))
{
if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, "Bandwidth FDD", "Present", "Not Present"))
@@ -1430,9 +1427,9 @@ de_rr_cell_select_indic(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
proto_tree_add_text(subtree,tvb, bit_offset>>3, 1, "Nr of FDD Cells : %d", idx);
bit_offset += 5;
idx = convert_n_to_p[idx];
- item2 = proto_tree_add_text(subtree,tvb, bit_offset>>3, (idx>>3)+1, "%s",
+ subtree2 = proto_tree_add_subtree(subtree,tvb, bit_offset>>3, (idx>>3)+1,
+ ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_FDD_CELL_INFORMATION_FIELD], NULL,
gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_FDD_DESC].strptr);
- subtree2 = proto_item_add_subtree(item2, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_FDD_CELL_INFORMATION_FIELD]);
proto_tree_add_text(subtree2,tvb, bit_offset>>3, (idx>>3)+1, "Field is %d bits long", idx);
if (xdd_indic0)
{
@@ -1485,8 +1482,9 @@ de_rr_cell_select_indic(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
break;
case 2: /* UTRAN TDD Description */
bit_offset_sav = bit_offset;
- item = proto_tree_add_text(tree, tvb, bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_TDD_DESC].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_UTRAN_TDD_DESC]);
+ subtree = proto_tree_add_subtree(tree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_UTRAN_TDD_DESC], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_TDD_DESC].strptr);
+
while (gsm_rr_csn_flag(tvb, subtree, bit_offset++, "Repeating UTRAN TDD Description struct", "Present", "Not Present"))
{
if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, "Bandwidth TDD", "Present", "Not Present"))
@@ -1502,9 +1500,9 @@ de_rr_cell_select_indic(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
proto_tree_add_text(subtree,tvb, bit_offset>>3, 1, "Nr of TDD Cells : %d", idx);
bit_offset += 5;
idx = convert_n_to_q[idx];
- item2 = proto_tree_add_text(subtree,tvb, bit_offset>>3, (idx>>3)+1, "%s",
+ subtree2 = proto_tree_add_subtree(subtree,tvb, bit_offset>>3, (idx>>3)+1,
+ ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_TDD_CELL_INFORMATION_FIELD], NULL,
gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_TDD_DESC].strptr);
- subtree2 = proto_item_add_subtree(item2, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_TDD_CELL_INFORMATION_FIELD]);
proto_tree_add_text(subtree2,tvb, bit_offset>>3, (idx>>3)+1, "Field is %d bits long", idx);
if (xdd_indic0)
{
@@ -2537,8 +2535,9 @@ de_rr_rest_oct_gprs_cell_options(tvbuff_t *tvb, proto_tree *tree, gint bit_offse
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_GPRS_CELL_OPTIONS].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_GPRS_CELL_OPTIONS]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1,
+ ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_GPRS_CELL_OPTIONS], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_GPRS_CELL_OPTIONS].strptr);
proto_tree_add_bits_item(subtree, hf_gsm_a_rr_nmo, tvb, curr_bit_offset, 2, ENC_BIG_ENDIAN);
curr_bit_offset += 2;
proto_tree_add_bits_item(subtree, hf_gsm_a_rr_t3168, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
@@ -2565,9 +2564,8 @@ de_rr_rest_oct_gprs_cell_options(tvbuff_t *tvb, proto_tree *tree, gint bit_offse
if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, "Optional Extensions", "Present", "Not Present"))
{ /* Optional extension information */
curr_bit_offset_sav = curr_bit_offset;
- item2 = proto_tree_add_text(subtree, tvb, curr_bit_offset>>3, -1, "%s",
+ subtree2 = proto_tree_add_subtree(subtree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_GPRS_CELL_OPTIONS_EXT_INFO], &item2,
gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_GPRS_CELL_OPTIONS_EXT_INFO].strptr);
- subtree2 = proto_item_add_subtree(item2, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_GPRS_CELL_OPTIONS_EXT_INFO]);
value = tvb_get_bits8(tvb,curr_bit_offset,6);
proto_tree_add_text(subtree2,tvb, curr_bit_offset>>3, 1, "Extension Length: %d", value);
curr_bit_offset += 6;
@@ -2638,8 +2636,8 @@ de_rr_rest_oct_gprs_power_control_parameters(tvbuff_t *tvb, proto_tree *tree, gi
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_GPRS_POWER_CONTROL_PARAMS].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_GPRS_POWER_CONTROL_PARAMS]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_GPRS_POWER_CONTROL_PARAMS], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_GPRS_POWER_CONTROL_PARAMS].strptr);
proto_tree_add_bits_item(subtree, hf_gsm_a_rr_alpha, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
curr_bit_offset += 4;
proto_tree_add_bits_item(subtree, hf_gsm_a_rr_t_avg_w, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
@@ -2886,8 +2884,8 @@ de_rr_ia_rest_oct_egprs_packet_uplink_assignment(tvbuff_t *tvb, proto_tree *tree
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EGPRS_PACKET_UPLINK_ASSIGNMENT].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EGPRS_PACKET_UPLINK_ASSIGNMENT]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EGPRS_PACKET_UPLINK_ASSIGNMENT], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EGPRS_PACKET_UPLINK_ASSIGNMENT].strptr);
proto_tree_add_bits_item(subtree, hf_gsm_a_rr_extended_ra, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
curr_bit_offset += 5;
while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, "Access Technologies Request", "Present", "Not Present"))
@@ -3017,8 +3015,8 @@ de_rr_ia_rest_oct_tmgi(tvbuff_t *tvb, proto_tree *tree, gint bit_offset)
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_TMGI].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_TMGI]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_TMGI], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_TMGI].strptr);
if (0 == gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, "MCC and MNC Parameters", "Present", "Not Present")) /* without MCC and MNC parameters */
{
@@ -3069,8 +3067,8 @@ de_rr_ia_rest_oct_packet_timing_advance(tvbuff_t *tvb, proto_tree *tree, gint bi
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_PACKET_TIMING_ADVANCE].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_PACKET_TIMING_ADVANCE]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_PACKET_TIMING_ADVANCE], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_PACKET_TIMING_ADVANCE].strptr);
if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, "Timing Advance Value", "Present", "Not Present"))
{
@@ -3102,8 +3100,8 @@ de_rr_ia_rest_oct_multiple_blocks_packet_downlink_assignment(tvbuff_t *tvb, prot
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_MULTIPLE_BLOCKS_PACKET_DOWNLINK_ASSIGNMENT].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_MULTIPLE_BLOCKS_PACKET_DOWNLINK_ASSIGNMENT]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_MULTIPLE_BLOCKS_PACKET_DOWNLINK_ASSIGNMENT], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_MULTIPLE_BLOCKS_PACKET_DOWNLINK_ASSIGNMENT].strptr);
curr_bit_offset += de_tbf_starting_time(tvb, subtree, curr_bit_offset);
proto_tree_add_bits_item(subtree, hf_gsm_a_rr_num_of_radio_block_allocated, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
@@ -3161,8 +3159,8 @@ de_rr_ia_rest_oct_packet_uplink_assignment(tvbuff_t *tvb, proto_tree *tree, gint
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_PACKET_UPLINK_ASSIGNMENT].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_PACKET_UPLINK_ASSIGNMENT]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_PACKET_UPLINK_ASSIGNMENT], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_PACKET_UPLINK_ASSIGNMENT].strptr);
if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, "Packet Uplink Assignment", "Normal", "Single Block"))
{
@@ -3286,8 +3284,8 @@ de_rr_ia_rest_oct_packet_downlink_assignment(tvbuff_t *tvb, proto_tree *tree, gu
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_PACKET_DOWNLINK_ASSIGNMENT].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_PACKET_DOWNLINK_ASSIGNMENT]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_PACKET_DOWNLINK_ASSIGNMENT], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_PACKET_DOWNLINK_ASSIGNMENT].strptr);
proto_tree_add_bits_item(subtree, hf_gsm_a_rr_tlli, tvb, curr_bit_offset, 32, ENC_BIG_ENDIAN);
curr_bit_offset += 32;
@@ -3371,8 +3369,8 @@ de_rr_ia_rest_oct_second_part_packet_assignment(tvbuff_t *tvb, proto_tree *tree,
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_SECOND_PART_PACKET_ASSIGNMENT].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_SECOND_PART_PACKET_ASSIGNMENT]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_SECOND_PART_PACKET_ASSIGNMENT], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_SECOND_PART_PACKET_ASSIGNMENT].strptr);
/* Null breakpoint */
if (curr_bit_offset < bit_len)
@@ -4729,8 +4727,8 @@ de_rr_si2ter_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_
if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, "UTRAN FDD Description", "Present", "Not Present"))
{ /* UTRAN FDD Description */
bit_offset_sav = bit_offset;
- item2 = proto_tree_add_text(subtree, tvb, bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_FDD_DESC].strptr);
- subtree2 = proto_item_add_subtree(item2, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_UTRAN_FDD_DESC]);
+ subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_UTRAN_FDD_DESC], &item2,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_FDD_DESC].strptr);
gsm_rr_csn_flag(tvb, subtree2, bit_offset++, "Bit reserved for earlier version of protocol", "Earlier version", "Current version");
gsm_rr_csn_flag(tvb, subtree2, bit_offset++, "Bit reserved for earlier version of protocol", "Current version", "Earlier version");
proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_fdd_uarfcn, tvb, bit_offset, 14, ENC_BIG_ENDIAN);
@@ -4745,8 +4743,8 @@ de_rr_si2ter_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_
if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, "UTRAN TDD Description", "Present", "Not Present"))
{ /* UTRAN TDD Description */
bit_offset_sav = bit_offset;
- item2 = proto_tree_add_text(subtree, tvb, bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_TDD_DESC].strptr);
- subtree2 = proto_item_add_subtree(item2, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_UTRAN_TDD_DESC]);
+ subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_UTRAN_TDD_DESC], &item2,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_TDD_DESC].strptr);
gsm_rr_csn_flag(tvb, subtree2, bit_offset++, "Bit reserved for earlier version of protocol", "Earlier version", "Current version");
gsm_rr_csn_flag(tvb, subtree2, bit_offset++, "Bit reserved for earlier version of protocol", "Current version", "Earlier version");
proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_tdd_uarfcn, tvb, bit_offset, 14, ENC_BIG_ENDIAN);
@@ -4761,8 +4759,8 @@ de_rr_si2ter_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_
if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, "3G Measurement Parameters Description", "Present", "Not Present"))
{ /* 3G Measurement Parameters Description */
bit_offset_sav = bit_offset;
- item2 = proto_tree_add_text(subtree, tvb, bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_MEAS_PARAM_DESC].strptr);
- subtree2 = proto_item_add_subtree(item2, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_MEAS_PARAM_DESC]);
+ subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_MEAS_PARAM_DESC], &item2,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_MEAS_PARAM_DESC].strptr);
proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_qsearch_i, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
bit_offset += 4;
if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, "FDD Parameters", "Present", "Not Present"))
@@ -4788,8 +4786,8 @@ de_rr_si2ter_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_
if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, "3G Additional Measurement Parameters Description", "Present", "Not Present"))
{ /* 3G Additional Measurement Parameters Description */
bit_offset_sav = bit_offset;
- item2 = proto_tree_add_text(subtree, tvb, bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_ADD_MEAS_PARAM_DESC].strptr);
- subtree2 = proto_item_add_subtree(item2, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_ADD_MEAS_PARAM_DESC]);
+ subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_ADD_MEAS_PARAM_DESC], &item2,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_ADD_MEAS_PARAM_DESC].strptr);
proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_fdd_qmin_offset, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
bit_offset += 3;
proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_fdd_rscpmin, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
@@ -4985,8 +4983,8 @@ de_rr_si2quater_meas_info_utran_fdd_desc(tvbuff_t *tvb, proto_tree *tree, gint b
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_FDD_DESC].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_UTRAN_FDD_DESC]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_UTRAN_FDD_DESC], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_FDD_DESC].strptr);
if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, "Bandwidth FDD", "Present", "Not Present"))
{
proto_tree_add_bits_item(subtree, hf_gsm_a_rr_bandwidth_fdd, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
@@ -5002,8 +5000,8 @@ de_rr_si2quater_meas_info_utran_fdd_desc(tvbuff_t *tvb, proto_tree *tree, gint b
proto_tree_add_text(subtree,tvb, curr_bit_offset>>3, 1, "Nr of FDD Cells : %d", idx);
curr_bit_offset += 5;
idx = convert_n_to_p[idx];
- item2 = proto_tree_add_text(subtree,tvb, curr_bit_offset>>3, (idx>>3)+1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_FDD_DESC].strptr);
- subtree2 = proto_item_add_subtree(item2, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_FDD_CELL_INFORMATION_FIELD]);
+ subtree2 = proto_tree_add_subtree(subtree,tvb, curr_bit_offset>>3, (idx>>3)+1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_FDD_CELL_INFORMATION_FIELD], &item2,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_FDD_DESC].strptr);
proto_tree_add_text(subtree2,tvb, curr_bit_offset>>3, (idx>>3)+1, "Field is %d bits long", idx);
if (xdd_indic0)
{
@@ -5058,14 +5056,14 @@ static gint
de_rr_si2quater_meas_info_utran_tdd_desc(tvbuff_t *tvb, proto_tree *tree, gint bit_offset)
{
proto_tree *subtree, *subtree2;
- proto_item *item, *item2;
+ proto_item *item;
gint curr_bit_offset, idx;
gint xdd_cell_info, wsize, nwi, jwi, w[64], i, iused, xdd_indic0;
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_TDD_DESC].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_UTRAN_TDD_DESC]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_UTRAN_TDD_DESC], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_TDD_DESC].strptr);
if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, "Bandwidth TDD", "Present", "Not Present"))
{
proto_tree_add_bits_item(subtree, hf_gsm_a_rr_bandwidth_tdd, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
@@ -5081,8 +5079,8 @@ de_rr_si2quater_meas_info_utran_tdd_desc(tvbuff_t *tvb, proto_tree *tree, gint b
proto_tree_add_text(subtree,tvb, curr_bit_offset>>3, 1, "Nr of TDD Cells : %d", idx);
curr_bit_offset += 5;
idx = convert_n_to_q[idx];
- item2 = proto_tree_add_text(subtree,tvb, curr_bit_offset>>3, (idx>>3)+1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_TDD_DESC].strptr);
- subtree2 = proto_item_add_subtree(item2, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_TDD_CELL_INFORMATION_FIELD]);
+ subtree2 = proto_tree_add_subtree(subtree,tvb, curr_bit_offset>>3, (idx>>3)+1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_TDD_CELL_INFORMATION_FIELD], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_TDD_DESC].strptr);
proto_tree_add_text(subtree2,tvb, curr_bit_offset>>3, (idx>>3)+1, "Field is %d bits long", idx);
if (xdd_indic0)
{
@@ -5145,8 +5143,8 @@ de_rr_rtd_desc(tvbuff_t *tvb, proto_tree *tree, gint bit_offset, rr_rest_octets_
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[id].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[id]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[id], &item,
+ gsm_rr_rest_octets_elem_strings[id].strptr);
if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, "RTD6", "Present", "Not Present"))
{
if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, "BA Index Start RTD", "Present", "Not Present"))
@@ -5223,8 +5221,7 @@ de_rr_bsic_desc(tvbuff_t *tvb, proto_tree *tree, gint bit_offset, rr_rest_octets
gint curr_bit_offset, idx;
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[id].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[id]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[id], &item, gsm_rr_rest_octets_elem_strings[id].strptr);
if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, "BA Index Start BSIC", "Present", "Not Present"))
{
proto_tree_add_text(subtree,tvb, curr_bit_offset>>3, 1, "BA Index Start BSIC: %d", tvb_get_bits8(tvb,curr_bit_offset,5));
@@ -5257,8 +5254,8 @@ de_rr_report_priority_desc(tvbuff_t *tvb, proto_tree *tree, gint bit_offset, rr_
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[id].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[id]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[id], &item,
+ gsm_rr_rest_octets_elem_strings[id].strptr);
idx = tvb_get_bits8(tvb,curr_bit_offset,7);
proto_tree_add_text(subtree,tvb, curr_bit_offset>>3, 1, "Number Cells: %d", idx);
curr_bit_offset += 7;
@@ -5281,8 +5278,7 @@ de_rr_meas_param_desc(tvbuff_t *tvb, proto_tree *tree, gint bit_offset, rr_rest_
gint curr_bit_offset;
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[id].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[id]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[id], &item, gsm_rr_rest_octets_elem_strings[id].strptr);
if (id == DE_RR_REST_OCTETS_GPRS_MEAS_PARAM_DESC)
{
proto_tree_add_bits_item(subtree, hf_gsm_a_rr_report_type, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
@@ -5352,8 +5348,8 @@ de_rr_3g_add_meas_param_desc2(tvbuff_t *tvb, proto_tree *tree, gint bit_offset)
gint curr_bit_offset;
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_ADD_MEAS_PARAM_DESC2].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_ADD_MEAS_PARAM_DESC2]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_ADD_MEAS_PARAM_DESC2], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_ADD_MEAS_PARAM_DESC2].strptr);
if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, "FDD Reporting Threshold2", "Present", "Not Present"))
{
proto_tree_add_bits_item(subtree, hf_gsm_a_rr_fdd_reporting_threshold_2, tvb, curr_bit_offset, 6, ENC_BIG_ENDIAN);
@@ -5618,8 +5614,8 @@ de_rr_3g_priority_param_desc(tvbuff_t *tvb, proto_tree *tree, gint bit_offset)
gint curr_bit_offset;
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_PRIORITY_PARAM_DESC].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_PRIORITY_PARAM_DESC]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_PRIORITY_PARAM_DESC], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_PRIORITY_PARAM_DESC].strptr);
proto_tree_add_bits_item(subtree, hf_gsm_a_rr_3g_priority_param_desc_utran_start, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
curr_bit_offset += 1;
@@ -5642,8 +5638,8 @@ de_rr_3g_priority_param_desc(tvbuff_t *tvb, proto_tree *tree, gint bit_offset)
proto_item *item_rep_utran_prio;
gint rep_utran_prio_bit_offset = curr_bit_offset;
- item_rep_utran_prio = proto_tree_add_text(subtree, tvb, curr_bit_offset>>3, 1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_PRIO_PARAM].strptr);
- subtree_rep_utran_prio = proto_item_add_subtree(item_rep_utran_prio, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_UTRAN_PRIO_PARAM]);
+ subtree_rep_utran_prio = proto_tree_add_subtree(subtree, tvb, curr_bit_offset>>3, 1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_UTRAN_PRIO_PARAM], &item_rep_utran_prio,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_PRIO_PARAM].strptr);
while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, "UTRAN Frequency Index", "Present", "Not Present"))
{
@@ -5685,8 +5681,8 @@ de_rr_eutran_neighbour_cells(tvbuff_t *tvb, proto_tree *tree, gint bit_offset)
gint curr_bit_offset;
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EUTRAN_NEIGHBOUR_CELLS].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EUTRAN_NEIGHBOUR_CELLS]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EUTRAN_NEIGHBOUR_CELLS], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EUTRAN_NEIGHBOUR_CELLS].strptr);
while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, "E-UTRAN Neighbour Cells Struct", "Present", "Not Present"))
{
@@ -5732,8 +5728,8 @@ de_rr_eutran_neighbour_cells_mi(tvbuff_t *tvb, proto_tree *tree, gint bit_offset
gint curr_bit_offset;
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EUTRAN_NEIGHBOUR_CELLS].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EUTRAN_NEIGHBOUR_CELLS]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EUTRAN_NEIGHBOUR_CELLS], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EUTRAN_NEIGHBOUR_CELLS].strptr);
proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_earfcn, tvb, curr_bit_offset, 16, ENC_BIG_ENDIAN);
curr_bit_offset += 16;
@@ -5826,8 +5822,8 @@ de_rr_eutran_not_allowed_cells(tvbuff_t *tvb, proto_tree *tree, gint bit_offset)
gint curr_bit_offset;
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EUTRAN_NOT_ALLOWED_CELLS].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EUTRAN_NOT_ALLOWED_CELLS]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EUTRAN_NOT_ALLOWED_CELLS], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EUTRAN_NOT_ALLOWED_CELLS].strptr);
/* dissect PCID group */
curr_bit_offset += de_rr_eutran_pcid(tvb, subtree, curr_bit_offset);
@@ -5850,8 +5846,8 @@ de_rr_eutran_pcid_to_ta_mapping(tvbuff_t *tvb, proto_tree *tree, gint bit_offset
gint curr_bit_offset;
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EUTRAN_PCID_TO_TA_MAPPING].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EUTRAN_PCID_TO_TA_MAPPING]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EUTRAN_PCID_TO_TA_MAPPING], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EUTRAN_PCID_TO_TA_MAPPING].strptr);
while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, "Repeating PCID group", "Present", "Not Present"))
{
@@ -6040,8 +6036,8 @@ de_rr_eutran_param_desc(tvbuff_t *tvb, proto_tree *tree, gint bit_offset)
guint8 rep_quant = 0;
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EUTRAN_PARAM_DESC].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EUTRAN_PARAM_DESC]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EUTRAN_PARAM_DESC], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EUTRAN_PARAM_DESC].strptr);
proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_ccn_active, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
curr_bit_offset += 1;
@@ -6161,8 +6157,8 @@ de_rr_eutran_param_desc_mi(tvbuff_t *tvb, proto_tree *tree, gint bit_offset)
gint curr_bit_offset;
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EUTRAN_PARAM_DESC].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EUTRAN_PARAM_DESC]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EUTRAN_PARAM_DESC], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EUTRAN_PARAM_DESC].strptr);
proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_start, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
curr_bit_offset += 1;
@@ -6219,9 +6215,8 @@ de_rr_priority_and_eutran_param_desc(tvbuff_t *tvb, proto_tree *tree, gint bit_o
gint curr_bit_offset;
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_PRIORITY_AND_EUTRAN_PARAM_DESC].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_PRIORITY_AND_EUTRAN_PARAM_DESC]);
-
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_PRIORITY_AND_EUTRAN_PARAM_DESC], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_PRIORITY_AND_EUTRAN_PARAM_DESC].strptr);
/* Serving Cell Priority Parameters Description */
if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, "Serving Cell Priority Parameters Description", "Present", "Not Present"))
@@ -6230,8 +6225,9 @@ de_rr_priority_and_eutran_param_desc(tvbuff_t *tvb, proto_tree *tree, gint bit_o
proto_item *item_serv;
gint serv_bit_offset = curr_bit_offset;
- item_serv = proto_tree_add_text(subtree, tvb, curr_bit_offset>>3, ((curr_bit_offset+15)>>3)-(curr_bit_offset>>3) + 1 , "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_SERVING_CELL_PRIORITY_PARAM_DESC].strptr);
- subtree_serv = proto_item_add_subtree(item_serv, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_SERVING_CELL_PRIORITY_PARAM_DESC]);
+ subtree_serv = proto_tree_add_subtree(subtree, tvb, curr_bit_offset>>3, ((curr_bit_offset+15)>>3)-(curr_bit_offset>>3) + 1,
+ ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_SERVING_CELL_PRIORITY_PARAM_DESC], &item_serv,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_SERVING_CELL_PRIORITY_PARAM_DESC].strptr);
proto_tree_add_bits_item(subtree_serv, hf_gsm_a_rr_serving_cell_priority_param_geran_priority, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
curr_bit_offset += 3;
@@ -6270,8 +6266,8 @@ de_rr_3g_csg_desc(tvbuff_t *tvb, proto_tree *tree, gint bit_offset)
gint curr_bit_offset;
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_CSG_DESC].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_CSG_DESC]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_CSG_DESC], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_CSG_DESC].strptr);
while (gsm_rr_csn_flag(tvb, subtree, bit_offset++, "Repeated CSG_PSC_SPLIT struct", "Present", "Not Present"))
{
@@ -6334,8 +6330,8 @@ de_rr_eutran_csg_desc(tvbuff_t *tvb, proto_tree *tree, gint bit_offset)
gint curr_bit_offset;
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EUTRAN_CSG_DESC].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EUTRAN_CSG_DESC]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EUTRAN_CSG_DESC], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EUTRAN_CSG_DESC].strptr);
while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, "Repeated PCID group", "Present", "Not Present"))
{
@@ -6361,8 +6357,8 @@ de_rr_eutran_csg_desc_mi(tvbuff_t *tvb, proto_tree *tree, gint bit_offset)
gint curr_bit_offset;
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EUTRAN_CSG_DESC].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EUTRAN_CSG_DESC]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EUTRAN_CSG_DESC], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EUTRAN_CSG_DESC].strptr);
while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, "Repeated CSG PCI Split", "Present", "Not Present"))
{
@@ -6382,8 +6378,8 @@ de_rr_utran_measurement_control_param_mi(tvbuff_t *tvb, proto_tree *tree, gint b
gint curr_bit_offset;
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_MEASUREMENT_CONTROL_PARAM_DESC].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_UTRAN_MEASUREMENT_CONTROL_PARAM_DESC]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_UTRAN_MEASUREMENT_CONTROL_PARAM_DESC], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_MEASUREMENT_CONTROL_PARAM_DESC].strptr);
while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, "Repeated UTRAN Frequency Index", "Present", "Not Present"))
{
@@ -6406,8 +6402,8 @@ de_rr_3g_supplementary_param_desc_mi(tvbuff_t *tvb, proto_tree *tree, gint bit_o
gint curr_bit_offset;
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_SUPPLEMENTARY_PARAM_DESC].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_SUPPLEMENTARY_PARAM_DESC]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_SUPPLEMENTARY_PARAM_DESC], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_SUPPLEMENTARY_PARAM_DESC].strptr);
proto_tree_add_bits_item(subtree, hf_gsm_a_rr_3g_priority_param_desc_utran_start, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
curr_bit_offset += 1;
@@ -6460,8 +6456,8 @@ de_rr_si2quater_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo
if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, "Measurement Parameters Description", "Present", "Not Present"))
{ /* Measurement Parameters Description */
bit_offset_sav = bit_offset;
- item2 = proto_tree_add_text(subtree, tvb, bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_MEAS_PARAM_DESC].strptr);
- subtree2 = proto_item_add_subtree(item2, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_MEAS_PARAM_DESC]);
+ subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_MEAS_PARAM_DESC], &item2,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_MEAS_PARAM_DESC].strptr);
proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_gsm_report_type, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
bit_offset += 1;
proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_serving_band_reporting, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
@@ -6487,8 +6483,8 @@ de_rr_si2quater_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo
if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, "NC Measurement Parameters", "Present", "Not Present"))
{ /* NC Measurement Parameters */
bit_offset_sav = bit_offset;
- item2 = proto_tree_add_text(subtree, tvb, bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_NC_MEAS_PARAM].strptr);
- subtree2 = proto_item_add_subtree(item2, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_NC_MEAS_PARAM]);
+ subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_NC_MEAS_PARAM], &item2,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_NC_MEAS_PARAM].strptr);
proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_network_control_order, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
bit_offset += 2;
if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, "NC Periods", "Present", "Not Present"))
@@ -6505,8 +6501,8 @@ de_rr_si2quater_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo
if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, "SI 2quater Extension Information", "Present", "Not Present"))
{ /* SI 2quater Extension Information */
bit_offset_sav = bit_offset;
- item2 = proto_tree_add_text(subtree, tvb, bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_SI2Q_EXT_INFO].strptr);
- subtree2 = proto_item_add_subtree(item2, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_SI2Q_EXT_INFO]);
+ subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_SI2Q_EXT_INFO], &item2,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_SI2Q_EXT_INFO].strptr);
idx = tvb_get_bits8(tvb,bit_offset,8);
proto_tree_add_text(subtree2,tvb, bit_offset>>3, 1, "Extension Length: %d", idx);
bit_offset += 8;
@@ -6514,8 +6510,8 @@ de_rr_si2quater_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo
if (gsm_rr_csn_flag(tvb, subtree2, bit_offset++, "CCN Support Description", "Present", "Not Present"))
{ /* CCN Support Description */
bit_offset_sav = bit_offset;
- item3 = proto_tree_add_text(subtree2, tvb, bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_CCN_SUPPORT_DESC].strptr);
- subtree3 = proto_item_add_subtree(item3, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_CCN_SUPPORT_DESC]);
+ subtree3 = proto_tree_add_subtree(subtree2, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_CCN_SUPPORT_DESC], &item3,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_CCN_SUPPORT_DESC].strptr);
value = tvb_get_bits8(tvb,bit_offset,7);
proto_tree_add_text(subtree3,tvb, bit_offset>>3, 1, "Number Cells: %d", value);
bit_offset += 7;
@@ -6535,8 +6531,8 @@ de_rr_si2quater_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo
if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, "3G Neighbour Cell Description", "Present", "Not Present"))
{ /* 3G Neighbour Cell Description */
bit_offset_sav = bit_offset;
- item2 = proto_tree_add_text(subtree, tvb, bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_NEIGH_CELL_DESC].strptr);
- subtree2 = proto_item_add_subtree(item2, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_NEIGH_CELL_DESC]);
+ subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_NEIGH_CELL_DESC], &item2,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_NEIGH_CELL_DESC].strptr);
if (gsm_rr_csn_flag(tvb, subtree2, bit_offset++, "Index Start 3G", "Present", "Not Present"))
{
proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_index_start_3g, tvb, bit_offset, 7, ENC_BIG_ENDIAN);
@@ -6560,8 +6556,8 @@ de_rr_si2quater_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo
if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, "3G Measurement Parameters Description", "Present", "Not Present"))
{ /* 3G Measurement Parameters Description */
bit_offset_sav = bit_offset;
- item2 = proto_tree_add_text(subtree, tvb, bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_MEAS_PARAM_DESC].strptr);
- subtree2 = proto_item_add_subtree(item2, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_MEAS_PARAM_DESC]);
+ subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_MEAS_PARAM_DESC], &item2,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_MEAS_PARAM_DESC].strptr);
proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_qsearch_i, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
bit_offset += 4;
proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_qsearch_c_initial, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
@@ -6590,8 +6586,8 @@ de_rr_si2quater_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo
{ /* GPRS 3G Measurement Parameters Description */
guint8 reporting_quant = 0;
bit_offset_sav = bit_offset;
- item2 = proto_tree_add_text(subtree, tvb, bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_GPRS_3G_MEAS_PARAM_DESC].strptr);
- subtree2 = proto_item_add_subtree(item2, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_GPRS_3G_MEAS_PARAM_DESC]);
+ subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_GPRS_3G_MEAS_PARAM_DESC], &item2,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_GPRS_3G_MEAS_PARAM_DESC].strptr);
proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_qsearch_p, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
bit_offset += 4;
proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_3g_search_prio, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
@@ -6647,8 +6643,8 @@ de_rr_si2quater_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo
if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, "3G Additional Measurement Parameters Description", "Present", "Not Present"))
{ /* 3G Additional Measurement Parameters Description */
bit_offset_sav = bit_offset;
- item2 = proto_tree_add_text(subtree, tvb, bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_ADD_MEAS_PARAM_DESC].strptr);
- subtree2 = proto_item_add_subtree(item2, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_ADD_MEAS_PARAM_DESC]);
+ subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_ADD_MEAS_PARAM_DESC], &item2,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_ADD_MEAS_PARAM_DESC].strptr);
proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_fdd_qmin_offset, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
bit_offset += 3;
proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_fdd_rscpmin, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
@@ -6849,8 +6845,8 @@ de_rr_rest_oct_opt_sel_param(tvbuff_t *tvb, proto_tree *tree, gint bit_offset)
if (gsm_rr_csn_HL_flag(tvb, tree, 0, curr_bit_offset++, "Selection Parameters", "Present", "Not present"))
{ /* Selection Parameters */
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_OPTIONAL_SEL_PARAM].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_OPTIONAL_SEL_PARAM]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_OPTIONAL_SEL_PARAM], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_OPTIONAL_SEL_PARAM].strptr);
proto_tree_add_bits_item(subtree, hf_gsm_a_rr_cbq, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
curr_bit_offset += 1;
proto_tree_add_bits_item(subtree, hf_gsm_a_rr_cell_reselect_offset, tvb, curr_bit_offset, 6, ENC_BIG_ENDIAN);
@@ -6875,13 +6871,12 @@ static gint
de_rr_rest_oct_gprs_indicator(tvbuff_t *tvb, proto_tree *tree, gint bit_offset)
{
proto_tree *subtree;
- proto_item *item;
gint curr_bit_offset;
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, 1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_GPRS_INDICATOR].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_GPRS_INDICATOR]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, 1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_GPRS_INDICATOR], NULL,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_GPRS_INDICATOR].strptr);
proto_tree_add_bits_item(subtree, hf_gsm_a_rr_gprs_ra_colour, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
curr_bit_offset += 3;
proto_tree_add_bits_item(subtree, hf_gsm_a_rr_si13_position, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
@@ -6995,9 +6990,8 @@ de_rr_si4_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, g
curr_offset = offset;
bit_offset = curr_offset << 3;
- item2 = proto_tree_add_text(subtree, tvb, bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_SI4_REST_OCTETS_O].strptr);
-
- subtree2 = proto_item_add_subtree(item2, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_SI4_REST_OCTETS_O]);
+ subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_SI4_REST_OCTETS_O], &item2,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_SI4_REST_OCTETS_O].strptr);
bit_offset += de_rr_rest_oct_opt_sel_param(tvb, subtree2, bit_offset);
@@ -7015,13 +7009,13 @@ de_rr_si4_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, g
if (gsm_rr_csn_HL_flag(tvb, subtree, bit_len, bit_offset++, "SI4 Rest Octets_S", "Present", "Not present"))
{ /* SI4 Rest Octets_S */
bit_offset_sav = bit_offset;
- item2 = proto_tree_add_text(subtree, tvb, bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_SI4_REST_OCTETS_S].strptr);
- subtree2 = proto_item_add_subtree(item2, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_SI4_REST_OCTETS_S]);
+ subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_SI4_REST_OCTETS_S], &item2,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_SI4_REST_OCTETS_S].strptr);
if (gsm_rr_csn_HL_flag(tvb, subtree2, bit_len, bit_offset++, "LSA Parameters", "Present", "Not present"))
{ /* LSA Parameters */
- item3 = proto_tree_add_text(subtree2, tvb, bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_LSA_PARAMETERS].strptr);
- subtree3 = proto_item_add_subtree(item3, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_LSA_PARAMETERS]);
+ subtree3 = proto_tree_add_subtree(subtree2, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_LSA_PARAMETERS], &item3,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_LSA_PARAMETERS].strptr);
proto_tree_add_bits_item(subtree3, hf_gsm_a_rr_prio_thr, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
bit_offset += 3;
proto_tree_add_bits_item(subtree3, hf_gsm_a_rr_lsa_offset, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
@@ -7044,8 +7038,8 @@ de_rr_si4_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, g
if (gsm_rr_csn_HL_flag(tvb, subtree2, bit_len, bit_offset++, "LSA ID information", "Present", "Not present"))
{ /* LSA ID information */
- item3 = proto_tree_add_text(subtree2, tvb, bit_offset>>3, len, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_LSA_ID_INFO].strptr);
- subtree3 = proto_item_add_subtree(item3, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_LSA_ID_INFO]);
+ subtree3 = proto_tree_add_subtree(subtree2, tvb, bit_offset>>3, len, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_LSA_ID_INFO], &item3,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_LSA_ID_INFO].strptr);
do
{
if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, "Type", "Short LSA ID", "LSA ID"))
@@ -7139,8 +7133,8 @@ de_rr_si6_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, g
if (gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, "PCH and NCH Info", "Present", "Not present"))
{ /* PCH and NCH Info */
bit_offset_sav = bit_offset;
- item2 = proto_tree_add_text(subtree, tvb, bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_PCH_AND_NCH_INFO].strptr);
- subtree2 = proto_item_add_subtree(item2, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_PCH_AND_NCH_INFO]);
+ subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_PCH_AND_NCH_INFO], &item2,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_PCH_AND_NCH_INFO].strptr);
proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_paging_channel_restructuring, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
bit_offset += 1;
proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_nln_sacch, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
@@ -7157,8 +7151,8 @@ de_rr_si6_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, g
if (gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, "VBS/VGCS options", "Present", "Not present"))
{ /* VBS/VGCS options */
bit_offset_sav = bit_offset;
- item2 = proto_tree_add_text(subtree, tvb,bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_VBS_VGCS_OPTIONS].strptr);
- subtree2 = proto_item_add_subtree(item2, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_VBS_VGCS_OPTIONS]);
+ subtree2 = proto_tree_add_subtree(subtree, tvb,bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_VBS_VGCS_OPTIONS], &item2,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_VBS_VGCS_OPTIONS].strptr);
proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_vbs_vgcs_inband_notifications, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
bit_offset += 1;
proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_vbs_vgcs_inband_pagings, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
@@ -7294,8 +7288,8 @@ de_rr_rest_oct_gprs_mobile_allocation(tvbuff_t *tvb, proto_tree *tree, gint bit_
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_GPRS_MOBILE_ALLOC].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_GPRS_MOBILE_ALLOC]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_GPRS_MOBILE_ALLOC], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_GPRS_MOBILE_ALLOC].strptr);
proto_tree_add_bits_item(subtree, hf_gsm_a_rr_hsn, tvb, curr_bit_offset, 6, ENC_BIG_ENDIAN);
curr_bit_offset += 6;
while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, "RFL number list", "Present", "Not Present"))
@@ -7627,8 +7621,8 @@ de_rr_si13_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_,
proto_tree_add_bits_item(subtree, hf_gsm_a_rr_psi1_repeat_period, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
bit_offset += 4;
bit_offset_sav = bit_offset;
- item2 = proto_tree_add_text(subtree, tvb, bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_PBCCH_DESC].strptr);
- subtree2 = proto_item_add_subtree(item2, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_PBCCH_DESC]);
+ subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_PBCCH_DESC], &item2,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_PBCCH_DESC].strptr);
proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_pbcch_pb, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
bit_offset += 4;
proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_pbcch_tsc, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
@@ -7839,16 +7833,13 @@ static guint16
de_rr_tmsi_ptmsi(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
proto_tree *subtree;
- proto_item *item;
guint32 curr_offset;
curr_offset = offset;
- item = proto_tree_add_text(tree, tvb, curr_offset, 3, "%s",
+ subtree = proto_tree_add_subtree(tree, tvb, curr_offset, 3, ett_gsm_rr_elem[DE_RR_TMSI_PTMSI], NULL,
val_to_str_ext_const(DE_RR_TMSI_PTMSI, &gsm_rr_elem_strings_ext, ""));
- subtree = proto_item_add_subtree(item, ett_gsm_rr_elem[DE_RR_TMSI_PTMSI]);
-
proto_tree_add_item(subtree, hf_gsm_a_rr_tmsi_ptmsi, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
curr_offset = curr_offset + 4;
@@ -8141,16 +8132,13 @@ static guint16
de_rr_carrier_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
proto_tree *subtree;
- proto_item *item;
guint32 curr_offset;
curr_offset = offset;
- item = proto_tree_add_text(tree, tvb, curr_offset, 3, "%s",
+ subtree = proto_tree_add_subtree(tree, tvb, curr_offset, 3, ett_gsm_rr_elem[DE_RR_CARRIER_IND], NULL,
val_to_str_ext_const(DE_RR_CARRIER_IND, &gsm_rr_elem_strings_ext, ""));
- subtree = proto_item_add_subtree(item, ett_gsm_rr_elem[DE_RR_CARRIER_IND]);
-
proto_tree_add_item(subtree, hf_gsm_a_rr_carrier_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset += 1;
@@ -9461,7 +9449,6 @@ dtap_rr_paging_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gui
guint curr_len;
guint8 oct;
proto_tree *subtree;
- proto_item *item;
curr_offset = offset;
curr_len = len;
@@ -9477,13 +9464,10 @@ dtap_rr_paging_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gui
"%s : Spare",
a_bigbuf);
- item =
- proto_tree_add_text(tree,
- tvb, curr_offset, 1, "%s",
+ subtree = proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1, ett_gsm_common_elem[DE_CIPH_KEY_SEQ_NUM], NULL,
val_to_str_ext_const(DE_CIPH_KEY_SEQ_NUM, &gsm_common_elem_strings_ext, ""));
- subtree = proto_item_add_subtree(item, ett_gsm_common_elem[DE_CIPH_KEY_SEQ_NUM]);
-
other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8);
proto_tree_add_text(subtree,
tvb, curr_offset, 1,
@@ -9940,8 +9924,8 @@ sacch_rr_meas_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guin
if (gsm_rr_csn_flag(tvb, tree, bit_offset++, "3G Neighbour Cell Description", "Present", "Not Present"))
{ /* 3G Neighbour Cell Description */
bit_offset_sav = bit_offset;
- item = proto_tree_add_text(tree, tvb, bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_NEIGH_CELL_DESC].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_NEIGH_CELL_DESC]);
+ subtree = proto_tree_add_subtree(tree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_NEIGH_CELL_DESC], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_NEIGH_CELL_DESC].strptr);
if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, "3G Wait", "Present", "Not Present"))
{
proto_tree_add_bits_item(subtree, hf_gsm_a_rr_3g_wait, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
@@ -9968,8 +9952,8 @@ sacch_rr_meas_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guin
if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, "CDMA2000 Description", "Present", "Not Present"))
{ /* CDMA2000 Description */
bit_offset_sav2 = bit_offset;
- item2 = proto_tree_add_text(subtree, tvb, bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_CDMA2000_DESC].strptr);
- subtree2 = proto_item_add_subtree(item2, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_CDMA2000_DESC]);
+ subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_CDMA2000_DESC], &item2,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_CDMA2000_DESC].strptr);
bit_offset += 16; /* cdma2000 frequency band + cdma2000 frequency */
idx = tvb_get_bits8(tvb,bit_offset,5); /* number_cdma2000_cells */
bit_offset += 5;
@@ -10030,8 +10014,8 @@ sacch_rr_meas_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guin
{ /* 3G Measurement Parameters Description */
guint8 reporting_quant = 0;
bit_offset_sav = bit_offset;
- item = proto_tree_add_text(tree, tvb, bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_MEAS_PARAM_DESC].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_MEAS_PARAM_DESC]);
+ subtree = proto_tree_add_subtree(tree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_MEAS_PARAM_DESC], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_MEAS_PARAM_DESC].strptr);
proto_tree_add_bits_item(subtree, hf_gsm_a_rr_qsearch_c, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
bit_offset += 4;
proto_tree_add_bits_item(subtree, hf_gsm_a_rr_3g_search_prio, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
@@ -10147,14 +10131,13 @@ static guint32
sacch_rr_eutran_meas_report(tvbuff_t *tvb, proto_tree *tree, guint32 bit_offset, guint len_in_bit _U_)
{
proto_tree *subtree;
- proto_item *item;
gint curr_bit_offset;
gint8 n_eutran;
curr_bit_offset = bit_offset;
- item = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EUTRAN_MEASUREMENT_REPORT].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EUTRAN_MEASUREMENT_REPORT]);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EUTRAN_MEASUREMENT_REPORT], NULL,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EUTRAN_MEASUREMENT_REPORT].strptr);
n_eutran = tvb_get_bits8(tvb,curr_bit_offset,2);
n_eutran += 1;
@@ -10261,8 +10244,8 @@ sacch_rr_enh_meas_report(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_
if (gsm_rr_csn_flag(tvb, tree, bit_offset++, "Serving cell data", "Present", "Not Present"))
{ /* Serving cell data */
bit_offset_sav = bit_offset;
- item = proto_tree_add_text(tree, tvb, bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_SERVING_CELL_DATA].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_SERVING_CELL_DATA]);
+ subtree = proto_tree_add_subtree(tree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_SERVING_CELL_DATA], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_SERVING_CELL_DATA].strptr);
proto_tree_add_bits_item(subtree, hf_gsm_a_rr_dtx_used, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
bit_offset += 1;
proto_tree_add_bits_item(subtree, hf_gsm_a_rr_rxlev_full_serv_cell, tvb, bit_offset, 6, ENC_BIG_ENDIAN);
@@ -10280,8 +10263,8 @@ sacch_rr_enh_meas_report(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_
while (gsm_rr_csn_flag(tvb, tree, bit_offset++, "Repeated Invalid BSIC Information", "Present", "Not Present"))
{ /* Repeated Invalid BSIC Information */
bit_offset_sav = bit_offset;
- item = proto_tree_add_text(tree, tvb, bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_REPEAT_INV_BSIC_INFO].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_REPEAT_INV_BSIC_INFO]);
+ subtree = proto_tree_add_subtree(tree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_REPEAT_INV_BSIC_INFO], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_REPEAT_INV_BSIC_INFO].strptr);
proto_tree_add_bits_item(subtree, hf_gsm_a_rr_bcch_freq_ncell, tvb, bit_offset, 5, ENC_BIG_ENDIAN);
bit_offset += 5;
proto_tree_add_bits_item(subtree, hf_gsm_a_rr_bsic_ncell, tvb, bit_offset, 6, ENC_BIG_ENDIAN);
@@ -10292,8 +10275,8 @@ sacch_rr_enh_meas_report(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_
}
if (gsm_rr_csn_flag(tvb, tree, bit_offset++, "Bitmap Type Reporting", "Present", "Not Present"))
{ /* Bitmap Type Reporting */
- item = proto_tree_add_text(tree, tvb, bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_BITMAP_TYPE_REPORTING].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_BITMAP_TYPE_REPORTING]);
+ subtree = proto_tree_add_subtree(tree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_BITMAP_TYPE_REPORTING], NULL,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_BITMAP_TYPE_REPORTING].strptr);
idx = 0;
while (((guint)(bit_offset>>3) <= (offset + len)) && (idx < 96))
{
@@ -10313,8 +10296,8 @@ sacch_rr_enh_meas_report(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_
{
gint8 bitmap_length;
bit_offset_sav = bit_offset;
- item = proto_tree_add_text(tree, tvb, bit_offset>>3, -1, "%s", gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_REPORTING_QUANTITY].strptr);
- subtree = proto_item_add_subtree(item, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_REPORTING_QUANTITY]);
+ subtree = proto_tree_add_subtree(tree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_REPORTING_QUANTITY], &item,
+ gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_REPORTING_QUANTITY].strptr);
bitmap_length = tvb_get_bits8(tvb,bit_offset,7);
bitmap_length += 1;
@@ -10576,13 +10559,9 @@ dissect_ccch(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
/* note: dissected out of sequence! */
elem_v(tvb, ccch_tree, pinfo, GSM_A_PDU_TYPE_RR, DE_RR_L2_PSEUDO_LEN, 0, NULL);
- oct_1_item =
- proto_tree_add_text(ccch_tree,
- tvb, 1, 1,
- "Protocol Discriminator: %s",
- val_to_str(pd, protocol_discriminator_vals, "Unknown (%u)"));
-
+ oct_1_item = proto_tree_add_item(ccch_tree, hf_gsm_a_L3_protocol_discriminator, tvb, 1, 1, ENC_BIG_ENDIAN);
pd_tree = proto_item_add_subtree(oct_1_item, ett_ccch_oct_1);
+
proto_tree_add_item(pd_tree, hf_gsm_a_L3_protocol_discriminator, tvb, 1, 1, ENC_BIG_ENDIAN);
if (ti == -1){
diff --git a/epan/dissectors/packet-gsm_bsslap.c b/epan/dissectors/packet-gsm_bsslap.c
index 4f4a0ec60c..b062ac1030 100644
--- a/epan/dissectors/packet-gsm_bsslap.c
+++ b/epan/dissectors/packet-gsm_bsslap.c
@@ -291,8 +291,7 @@ de_cell_id_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 off
while(len>0){
num_cells++;
consumed = 0;
- item = proto_tree_add_text(tree, tvb, curr_offset, -1, "Cell %u", num_cells);
- subtree = proto_item_add_subtree(item, ett_bsslap_cell_list);
+ subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_bsslap_cell_list, &item, "Cell %u", num_cells);
if (add_string)
add_string[0] = '\0';
diff --git a/epan/dissectors/packet-gsm_cbch.c b/epan/dissectors/packet-gsm_cbch.c
index f610ac7a0f..4a0dac11d2 100644
--- a/epan/dissectors/packet-gsm_cbch.c
+++ b/epan/dissectors/packet-gsm_cbch.c
@@ -193,8 +193,8 @@ dissect_schedule_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *top_tree
}
}
/* print the array of new messages */
- item = proto_tree_add_text(sched_tree, tvb, offset-6, 6, "This schedule contains %d slots with new messages", k);
- sched_subtree = proto_item_add_subtree(item, ett_schedule_new_msg);
+ sched_subtree = proto_tree_add_subtree_format(sched_tree, tvb, offset-6, 6, ett_schedule_new_msg, &item,
+ "This schedule contains %d slots with new messages", k);
for (i=0; i<k; i++)
{
DISSECTOR_ASSERT(new_slots[i] <= 48);
@@ -261,8 +261,8 @@ dissect_schedule_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *top_tree
proto_item_set_end(item, tvb, offset);
/* print schedule of other messages */
- item = proto_tree_add_text(sched_tree, tvb, offset, 0, "Other message slots in this schedule");
- sched_subtree = proto_item_add_subtree(item, ett_schedule_new_msg);
+ sched_subtree = proto_tree_add_subtree(sched_tree, tvb, offset, 0,
+ ett_schedule_new_msg, &item, "Other message slots in this schedule");
for (k=0; offset < len; j++)
{
/* XXX I don't know if a message can validly contain more than
diff --git a/epan/dissectors/packet-gsm_rlcmac.c b/epan/dissectors/packet-gsm_rlcmac.c
index 33be85e148..bc9579669c 100644
--- a/epan/dissectors/packet-gsm_rlcmac.c
+++ b/epan/dissectors/packet-gsm_rlcmac.c
@@ -3851,7 +3851,6 @@ static CSN_CallBackStatus_t callback_UTRAN_FDD_map_NrOfFrequencies(proto_tree *t
static CSN_CallBackStatus_t callback_UTRAN_FDD_compute_FDD_CELL_INFORMATION(proto_tree *tree, tvbuff_t *tvb, void* param1, void* param2 _U_, int bit_offset, int ett_csn1)
{
- proto_item *ti;
proto_tree *subtree;
UTRAN_FDD_NeighbourCells_t * pUtranFddNcell = (UTRAN_FDD_NeighbourCells_t*)param1;
gint xdd_cell_info, wsize, nwi, jwi, w[64], i, iused;
@@ -3862,8 +3861,7 @@ static CSN_CallBackStatus_t callback_UTRAN_FDD_compute_FDD_CELL_INFORMATION(prot
if ( idx > 0 )
{
- ti = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, 1, "FDD_CELL_INFORMATION: ");
- subtree = proto_item_add_subtree(ti, ett_csn1);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, 1, ett_csn1, NULL, "FDD_CELL_INFORMATION: ");
if (pUtranFddNcell->Indic0)
{
@@ -3953,7 +3951,6 @@ static CSN_CallBackStatus_t callback_UTRAN_TDD_map_NrOfFrequencies(proto_tree *t
static CSN_CallBackStatus_t callback_UTRAN_TDD_compute_TDD_CELL_INFORMATION(proto_tree *tree, tvbuff_t *tvb, void* param1, void* param2 _U_, int bit_offset, int ett_csn1)
{
- proto_item *ti;
proto_tree *subtree;
UTRAN_TDD_NeighbourCells_t *pUtranTddNcell = (UTRAN_TDD_NeighbourCells_t *)param1;
gint xdd_cell_info, wsize, nwi, jwi, w[64], i, iused;
@@ -3964,8 +3961,7 @@ static CSN_CallBackStatus_t callback_UTRAN_TDD_compute_TDD_CELL_INFORMATION(prot
if ( idx > 0 )
{
- ti = proto_tree_add_text(tree, tvb, curr_bit_offset>>3, 1, "TDD_CELL_INFORMATION: ");
- subtree = proto_item_add_subtree(ti, ett_csn1);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, 1, ett_csn1, NULL, "TDD_CELL_INFORMATION: ");
if (pUtranTddNcell->Indic0)
{
diff --git a/epan/dissectors/packet-gsm_sms.c b/epan/dissectors/packet-gsm_sms.c
index 82da3f05f7..dff221fdad 100644
--- a/epan/dissectors/packet-gsm_sms.c
+++ b/epan/dissectors/packet-gsm_sms.c
@@ -356,11 +356,8 @@ dis_field_addr(tvbuff_t *tvb, proto_tree *tree, guint32 *offset_p, const gchar *
return;
}
- item = proto_tree_add_text(tree, tvb,
- offset, numdigocts + 2, "%s",
- title);
-
- subtree = proto_item_add_subtree(item, ett_addr);
+ subtree = proto_tree_add_subtree(tree, tvb,
+ offset, numdigocts + 2, ett_addr, &item, title);
proto_tree_add_text(subtree,
tvb, offset, 1,
@@ -1241,12 +1238,9 @@ dis_field_st(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint8 oct)
const gchar *str2 = NULL;
- item =
- proto_tree_add_text(tree, tvb,
+ subtree = proto_tree_add_subtree(tree, tvb,
offset, 1,
- "TP-Status");
-
- subtree = proto_item_add_subtree(item, ett_st);
+ ett_st, &item, "TP-Status");
other_decode_bitfield_value(bigbuf, oct, 0x80, 8);
proto_tree_add_text(subtree, tvb,
@@ -1913,8 +1907,6 @@ dis_iei_tf(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint8 length, gsm_s
{
const gchar *str = NULL;
guint8 oct;
- proto_item *item;
- proto_item *item_colour;
proto_tree *subtree;
proto_tree *subtree_colour;
@@ -1934,9 +1926,8 @@ dis_iei_tf(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint8 length, gsm_s
oct = tvb_get_guint8(tvb, offset);
- item = proto_tree_add_text(tree, tvb, offset, 1, "formatting mode");
+ subtree = proto_tree_add_subtree(tree, tvb, offset, 1, ett_udh_tfm, NULL, "formatting mode");
- subtree = proto_item_add_subtree(item, ett_udh_tfm);
switch(oct & 0x03)
{
case 0x00:
@@ -2008,10 +1999,7 @@ dis_iei_tf(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint8 length, gsm_s
if (length > 3)
{
oct = tvb_get_guint8(tvb, offset);
- item_colour = proto_tree_add_text(tree, tvb, offset, 1, "Text Colour");
-
- subtree_colour = proto_item_add_subtree(item_colour, ett_udh_tfc);
-
+ subtree_colour = proto_tree_add_subtree(tree, tvb, offset, 1, ett_udh_tfc, NULL, "Text Colour");
str = val_to_str_ext_const(oct & 0x0f, &text_color_values_ext, "Unknown");
proto_tree_add_text(subtree_colour, tvb, offset, 1,
@@ -2287,7 +2275,6 @@ dis_field_ud_iei(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint8 length,
{
void (*iei_fcn)(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint8 length, gsm_sms_udh_fields_t *p_udh_fields);
guint8 oct;
- proto_item *item;
proto_tree *subtree;
const gchar *str = NULL;
guint8 iei_len;
@@ -2370,14 +2357,12 @@ dis_field_ud_iei(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint8 length,
iei_len = tvb_get_guint8(tvb, offset + 1);
- item =
- proto_tree_add_text(tree,
+ subtree =
+ proto_tree_add_subtree_format(tree,
tvb, offset, iei_len + 2,
- "IE: %s",
+ ett_udh_ieis[oct], NULL, "IE: %s",
str);
- subtree = proto_item_add_subtree(item, ett_udh_ieis[oct]);
-
proto_tree_add_text(subtree,
tvb, offset, 1,
"Information Element Identifier: 0x%02X",
@@ -2416,7 +2401,6 @@ dis_field_udh(tvbuff_t *tvb, proto_tree *tree, guint32 *offset, guint32 *length,
guint8 *udl, enum character_set cset, guint8 *fill_bits, gsm_sms_udh_fields_t *p_udh_fields)
{
guint8 oct;
- proto_item *udh_item;
proto_tree *udh_subtree;
static const guint8 fill_bits_mask_gsm[7] = { 0x0, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f };
static const guint8 fill_bits_mask_ascii[7] = { 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc };
@@ -2425,12 +2409,10 @@ dis_field_udh(tvbuff_t *tvb, proto_tree *tree, guint32 *offset, guint32 *length,
oct = tvb_get_guint8(tvb, *offset);
- udh_item =
- proto_tree_add_text(tree, tvb,
+ udh_subtree =
+ proto_tree_add_subtree(tree, tvb,
*offset, oct + 1,
- "User-Data Header");
-
- udh_subtree = proto_item_add_subtree(udh_item, ett_udh);
+ ett_udh, NULL, "User-Data Header");
proto_tree_add_text(udh_subtree,
tvb, *offset, 1,
@@ -2483,7 +2465,6 @@ dis_field_ud(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offset
guint32 length, gboolean udhi, guint8 udl, gboolean seven_bit,
gboolean eight_bit, gboolean ucs2, gboolean compressed, gsm_sms_data_t *data)
{
- proto_item *item;
proto_tree *subtree;
tvbuff_t *sm_tvb = NULL;
fragment_head *fd_sm = NULL;
@@ -2504,11 +2485,10 @@ dis_field_ud(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offset
memset(&udh_fields, 0, sizeof(udh_fields));
fill_bits = 0;
- item =
- proto_tree_add_text(tree, tvb,
+ subtree =
+ proto_tree_add_subtree(tree, tvb,
offset, length,
- "TP-User-Data");
- subtree = proto_item_add_subtree(item, ett_ud);
+ ett_ud, NULL, "TP-User-Data");
if (udhi)
{
@@ -2713,17 +2693,13 @@ dis_field_ud(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offset
static void
dis_field_pi(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint8 oct)
{
- proto_item *item;
proto_tree *subtree;
-
- item =
- proto_tree_add_text(tree, tvb,
- offset, 1,
+ subtree =
+ proto_tree_add_subtree(tree, tvb,
+ offset, 1, ett_pi, NULL,
"TP-Parameter-Indicator");
- subtree = proto_item_add_subtree(item, ett_pi);
-
other_decode_bitfield_value(bigbuf, oct, 0x80, 8);
proto_tree_add_text(subtree, tvb,
offset, 1,
diff --git a/epan/dissectors/packet-gtp.c b/epan/dissectors/packet-gtp.c
index 23e953e379..3bb90d28fd 100644
--- a/epan/dissectors/packet-gtp.c
+++ b/epan/dissectors/packet-gtp.c
@@ -331,6 +331,7 @@ static gint ett_gtp_uli_rai = -1;
static expert_field ei_gtp_ext_hdr_pdcpsn = EI_INIT;
static expert_field ei_gtp_ext_length_mal = EI_INIT;
static expert_field ei_gtp_ext_length_warn = EI_INIT;
+static expert_field ei_gtp_undecoded = EI_INIT;
static gboolean g_gtp_etsi_order = FALSE;
@@ -3225,10 +3226,9 @@ decode_gtp_rai(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree *
{
proto_tree *ext_tree_rai;
- proto_item *te;
- te = proto_tree_add_text(tree, tvb, offset, 1, "%s", val_to_str_ext_const(GTP_EXT_RAI, &gtp_val_ext, "Unknown message"));
- ext_tree_rai = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_RAI]);
+ ext_tree_rai = proto_tree_add_subtree(tree, tvb, offset, 1, ett_gtp_ies[GTP_EXT_RAI], NULL,
+ val_to_str_ext_const(GTP_EXT_RAI, &gtp_val_ext, "Unknown message"));
dissect_e212_mcc_mnc(tvb, pinfo, ext_tree_rai, offset+1, TRUE);
proto_tree_add_item(ext_tree_rai, hf_gtp_rai_lac, tvb, offset + 4, 2, ENC_BIG_ENDIAN);
@@ -3276,7 +3276,6 @@ decode_qos_gprs(tvbuff_t * tvb, int offset, proto_tree * tree, const gchar * qos
guint8 spare1, delay, reliability, peak, spare2, precedence, spare3, mean;
proto_tree *ext_tree_qos;
- proto_item *te;
spare1 = tvb_get_guint8(tvb, offset) & GTP_EXT_QOS_SPARE1_MASK;
delay = tvb_get_guint8(tvb, offset) & GTP_EXT_QOS_DELAY_MASK;
@@ -3287,9 +3286,9 @@ decode_qos_gprs(tvbuff_t * tvb, int offset, proto_tree * tree, const gchar * qos
spare3 = tvb_get_guint8(tvb, offset + 2) & GTP_EXT_QOS_SPARE3_MASK;
mean = tvb_get_guint8(tvb, offset + 2) & GTP_EXT_QOS_MEAN_MASK;
- te = proto_tree_add_text(tree, tvb, offset - adjust, 3 + adjust, "%s: delay: %u, reliability: %u, peak: %u, precedence: %u, mean: %u",
+ ext_tree_qos = proto_tree_add_subtree_format(tree, tvb, offset - adjust, 3 + adjust, ett_gtp_qos, NULL,
+ "%s: delay: %u, reliability: %u, peak: %u, precedence: %u, mean: %u",
qos_str, (delay >> 3) & 0x07, reliability, (peak >> 4) & 0x0F, precedence, mean);
- ext_tree_qos = proto_item_add_subtree(te, ett_gtp_qos);
if (adjust != 0) {
proto_tree_add_uint(ext_tree_qos, hf_gtp_qos_spare1, tvb, offset, 1, spare1);
@@ -3344,10 +3343,9 @@ decode_gtp_auth_tri(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_t
{
proto_tree *ext_tree_auth_tri;
- proto_item *te;
- te = proto_tree_add_text(tree, tvb, offset, 29, "%s", val_to_str_ext_const(GTP_EXT_AUTH_TRI, &gtp_val_ext, "Unknown message"));
- ext_tree_auth_tri = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_AUTH_TRI]);
+ ext_tree_auth_tri = proto_tree_add_subtree(tree, tvb, offset, 29, ett_gtp_ies[GTP_EXT_AUTH_TRI], NULL,
+ val_to_str_ext_const(GTP_EXT_AUTH_TRI, &gtp_val_ext, "Unknown message"));
proto_tree_add_text(ext_tree_auth_tri, tvb, offset + 1, 16, "RAND: %s", tvb_bytes_to_ep_str(tvb, offset + 1, 16));
proto_tree_add_text(ext_tree_auth_tri, tvb, offset + 17, 4, "SRES: %s", tvb_bytes_to_ep_str(tvb, offset + 17, 4));
@@ -3506,12 +3504,11 @@ decode_gtp_18(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree *
guint16 flow_ii;
guint32 teid_ii;
proto_tree *ext_tree_flow_ii;
- proto_item *te;
switch (gtp_version) {
case 0:
- te = proto_tree_add_text(tree, tvb, offset, 4, "%s", val_to_str_ext_const(GTP_EXT_FLOW_II, &gtp_val_ext, "Unknown message"));
- ext_tree_flow_ii = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_FLOW_II]);
+ ext_tree_flow_ii = proto_tree_add_subtree(tree, tvb, offset, 4, ett_gtp_ies[GTP_EXT_FLOW_II], NULL,
+ val_to_str_ext_const(GTP_EXT_FLOW_II, &gtp_val_ext, "Unknown message"));
proto_tree_add_item(ext_tree_flow_ii, hf_gtp_nsapi, tvb, offset + 1, 1, ENC_BIG_ENDIAN);
@@ -3520,8 +3517,8 @@ decode_gtp_18(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree *
return 4;
case 1:
- te = proto_tree_add_text(tree, tvb, offset, 6, "%s", val_to_str_ext_const(GTP_EXT_TEID_II, &gtpv1_val_ext, "Unknown message"));
- ext_tree_flow_ii = proto_item_add_subtree(te, ett_gtp_flow_ii);
+ ext_tree_flow_ii = proto_tree_add_subtree(tree, tvb, offset, 6, ett_gtp_flow_ii, NULL,
+ val_to_str_ext_const(GTP_EXT_TEID_II, &gtpv1_val_ext, "Unknown message"));
proto_tree_add_item(ext_tree_flow_ii, hf_gtp_nsapi, tvb, offset + 1, 1, ENC_BIG_ENDIAN);
@@ -3573,8 +3570,8 @@ decode_gtp_nsapi(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree
proto_tree *ext_tree;
proto_item *te;
- te = proto_tree_add_text(tree, tvb, offset, 10, "%s", val_to_str_ext_const(GTP_EXT_NSAPI, &gtp_val_ext, "Unknown message"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_NSAPI]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 10, ett_gtp_ies[GTP_EXT_NSAPI], &te,
+ val_to_str_ext_const(GTP_EXT_NSAPI, &gtp_val_ext, "Unknown message"));
nsapi = tvb_get_guint8(tvb, offset + 1) & 0x0F;
proto_tree_add_item(ext_tree, hf_gtp_nsapi, tvb, offset + 1, 1, ENC_BIG_ENDIAN);
@@ -3640,10 +3637,9 @@ static int
decode_gtp_rab_cntxt(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree * tree)
{
proto_tree *ext_tree_rab_cntxt;
- proto_item *te;
- te = proto_tree_add_text(tree, tvb, offset, 10, "%s", val_to_str_ext_const(GTP_EXT_RAB_CNTXT, &gtp_val_ext, "Unknown message"));
- ext_tree_rab_cntxt = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_RAB_CNTXT]);
+ ext_tree_rab_cntxt = proto_tree_add_subtree(tree, tvb, offset, 10, ett_gtp_ies[GTP_EXT_RAB_CNTXT], NULL,
+ val_to_str_ext_const(GTP_EXT_RAB_CNTXT, &gtp_val_ext, "Unknown message"));
proto_tree_add_item(ext_tree_rab_cntxt, hf_gtp_nsapi, tvb, offset + 1, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(ext_tree_rab_cntxt, hf_gtp_rab_gtpu_dn, tvb, offset + 2, 2, ENC_BIG_ENDIAN);
@@ -3806,11 +3802,10 @@ decode_gtp_ra_prio_lcs(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, prot
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s : ", val_to_str_ext_const(GTP_EXT_RA_PRIO_LCS, &gtp_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_RA_PRIO_LCS]);
+ ext_tree = proto_tree_add_subtree_format(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_RA_PRIO_LCS], NULL,
+ "%s : ", val_to_str_ext_const(GTP_EXT_RA_PRIO_LCS, &gtp_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
@@ -3872,11 +3867,11 @@ decode_gtp_user_addr(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_
pdp_org = tvb_get_guint8(tvb, offset + 3) & 0x0F;
pdp_typ = tvb_get_guint8(tvb, offset + 4);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s (%s/%s)",
+ ext_tree_user = proto_tree_add_subtree_format(tree, tvb, offset, 3 + length,
+ ett_gtp_ies[GTP_EXT_USER_ADDR], &te, "%s (%s/%s)",
val_to_str_ext_const(GTP_EXT_USER_ADDR, &gtp_val_ext, "Unknown message"),
val_to_str_const(pdp_org, pdp_org_type, "Unknown PDP Organization"),
val_to_str_const(pdp_typ, pdp_type, "Unknown PDP Type"));
- ext_tree_user = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_USER_ADDR]);
proto_tree_add_text(ext_tree_user, tvb, offset + 1, 2, "Length : %u", length);
proto_tree_add_uint(ext_tree_user, hf_gtp_user_addr_pdp_org, tvb, offset + 3, 1, pdp_org);
@@ -3919,12 +3914,10 @@ decode_triplet(tvbuff_t * tvb, int offset, proto_tree * tree, guint16 count)
{
proto_tree *ext_tree_trip;
- proto_item *te_trip;
guint16 i;
for (i = 0; i < count; i++) {
- te_trip = proto_tree_add_text(tree, tvb, offset + i * 28, 28, "Triplet no%x", i);
- ext_tree_trip = proto_item_add_subtree(te_trip, ett_gtp_trip);
+ ext_tree_trip = proto_tree_add_subtree_format(tree, tvb, offset + i * 28, 28, ett_gtp_trip, NULL, "Triplet no%x", i);
proto_tree_add_text(ext_tree_trip, tvb, offset + i * 28, 16, "RAND: %s", tvb_bytes_to_ep_str(tvb, offset + i * 28, 16));
proto_tree_add_text(ext_tree_trip, tvb, offset + i * 28 + 16, 4, "SRES: %s", tvb_bytes_to_ep_str(tvb, offset + i * 28 + 16, 4));
@@ -3949,9 +3942,8 @@ decode_quintuplet(tvbuff_t * tvb, int offset, proto_tree * tree, guint16 count)
for (i = 0; i < count; i++) {
- te_quint = proto_tree_add_text(tree, tvb, offset, -1, "Quintuplet #%x", i + 1);
- ext_tree_quint = proto_item_add_subtree(te_quint, ett_gtp_quint);
-
+ ext_tree_quint = proto_tree_add_subtree_format(tree, tvb, offset, -1,
+ ett_gtp_quint, &te_quint, "Quintuplet #%x", i + 1);
proto_tree_add_text(ext_tree_quint, tvb, offset + q_offset, 16, "RAND: %s", tvb_bytes_to_ep_str(tvb, offset + q_offset, 16));
q_offset = q_offset + 16;
@@ -3989,12 +3981,10 @@ decode_gtp_mm_cntxt(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tree
guint16 length, quint_len, con_len;
guint8 count, sec_mode, len, iei;
proto_tree *ext_tree_mm;
- proto_item *te;
- proto_item *tf = NULL;
proto_tree *tf_tree = NULL;
- te = proto_tree_add_text(tree, tvb, offset, 1, "%s", val_to_str_ext_const(GTP_EXT_MM_CNTXT, &gtp_val_ext, "Unknown message"));
- ext_tree_mm = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_MM_CNTXT]);
+ ext_tree_mm = proto_tree_add_subtree(tree, tvb, offset, 1, ett_gtp_ies[GTP_EXT_MM_CNTXT], NULL,
+ val_to_str_ext_const(GTP_EXT_MM_CNTXT, &gtp_val_ext, "Unknown message"));
/* Octet 2 - 3 */
length = tvb_get_ntohs(tvb, offset + 1);
@@ -4071,15 +4061,12 @@ decode_gtp_mm_cntxt(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tree
/*
* 3GPP TS 24.008 10.5.5.6 ( see packet-gsm_a.c )
*/
- tf = proto_tree_add_text(ext_tree_mm, tvb, offset, 2, "DRX Parameter");
- tf_tree = proto_item_add_subtree(tf, ett_gtp_drx);
+ tf_tree = proto_tree_add_subtree(ext_tree_mm, tvb, offset, 2, ett_gtp_drx, NULL, "DRX Parameter");
de_gmm_drx_param(tvb, tf_tree, pinfo, offset, 2, NULL, 0);
offset = offset + 2;
len = tvb_get_guint8(tvb, offset);
- tf = proto_tree_add_text(ext_tree_mm, tvb, offset, len + 1, "MS Network Capability");
-
- tf_tree = proto_item_add_subtree(tf, ett_gtp_net_cap);
+ tf_tree = proto_tree_add_subtree(ext_tree_mm, tvb, offset, len + 1, ett_gtp_net_cap, NULL, "MS Network Capability");
proto_tree_add_text(tf_tree, tvb, offset, 1, "Length of MS network capability contents: %u", len);
@@ -4182,7 +4169,6 @@ decode_qos_umts(tvbuff_t * tvb, int offset, proto_tree * tree, const gchar * qos
guint8 guar_ul, guar_dl, guar_ul_ext, guar_dl_ext;
guint8 src_stat_desc, sig_ind;
proto_tree *ext_tree_qos, *ext_tree_qos_arp;
- proto_item *te;
int mss, mu, md, gu, gd;
guint8 arp, qci;
guint32 apn_ambr;
@@ -4214,16 +4200,14 @@ decode_qos_umts(tvbuff_t * tvb, int offset, proto_tree * tree, const gchar * qos
switch (type) {
case 1:
length = tvb_get_guint8(tvb, offset);
- te = proto_tree_add_text(tree, tvb, offset, length + 1, "%s", qos_str);
- ext_tree_qos = proto_item_add_subtree(te, ett_gtp_qos);
+ ext_tree_qos = proto_tree_add_subtree(tree, tvb, offset, length + 1, ett_gtp_qos, NULL, qos_str);
proto_tree_add_text(ext_tree_qos, tvb, offset, 1, "Length: %u", length);
offset++;
retval = length + 1;
break;
case 2:
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, length + 3, "%s", qos_str);
- ext_tree_qos = proto_item_add_subtree(te, ett_gtp_qos);
+ ext_tree_qos = proto_tree_add_subtree(tree, tvb, offset, length + 3, ett_gtp_qos, NULL, qos_str);
proto_tree_add_text(ext_tree_qos, tvb, offset + 1, 2, "Length: %u", length);
offset += 3; /* +1 because of first 0x86 byte for UMTS QoS */
retval = length + 3;
@@ -4234,9 +4218,7 @@ decode_qos_umts(tvbuff_t * tvb, int offset, proto_tree * tree, const gchar * qos
/* The field in the RADIUS message is the length of the tvb we were given */
length = tvb_reported_length(tvb);
- te = proto_tree_add_text(tree, tvb, offset, length, "%s", qos_str);
-
- ext_tree_qos = proto_item_add_subtree(te, ett_gtp_qos);
+ ext_tree_qos = proto_tree_add_subtree(tree, tvb, offset, length, ett_gtp_qos, NULL, qos_str);
rel_ind = wrapped_tvb_get_guint8(tvb, offset, 2);
proto_tree_add_uint(ext_tree_qos, hf_gtp_qos_version, tvb, offset, 2, rel_ind);
@@ -4270,8 +4252,7 @@ decode_qos_umts(tvbuff_t * tvb, int offset, proto_tree * tree, const gchar * qos
/* Release 8 or higher P-GW QoS profile */
offset++;
arp = wrapped_tvb_get_guint8(tvb, offset, 2);
- te = proto_tree_add_text(ext_tree_qos, tvb, offset, 2, "Allocation/Retention Priority");
- ext_tree_qos_arp = proto_item_add_subtree(te, ett_gtp_qos_arp);
+ ext_tree_qos_arp = proto_tree_add_subtree(ext_tree_qos, tvb, offset, 2, ett_gtp_qos_arp, NULL, "Allocation/Retention Priority");
proto_tree_add_boolean(ext_tree_qos_arp, hf_gtp_qos_arp_pci, tvb, offset, 2, arp);
proto_tree_add_uint(ext_tree_qos_arp, hf_gtp_qos_arp_pl, tvb, offset, 2, arp);
proto_tree_add_boolean(ext_tree_qos_arp, hf_gtp_qos_arp_pvi, tvb, offset, 2, arp);
@@ -4672,12 +4653,11 @@ decode_gtp_pdp_cntxt(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_
guint32 addr_ipv4;
struct e_in6_addr addr_ipv6;
proto_tree *ext_tree_pdp;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, length + 3, "%s", val_to_str_ext_const(GTP_EXT_PDP_CNTXT, &gtp_val_ext, "Unknown message"));
- ext_tree_pdp = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_PDP_CNTXT]);
+ ext_tree_pdp = proto_tree_add_subtree(tree, tvb, offset, length + 3, ett_gtp_ies[GTP_EXT_PDP_CNTXT], NULL,
+ val_to_str_ext_const(GTP_EXT_PDP_CNTXT, &gtp_val_ext, "Unknown message"));
vaa = (tvb_get_guint8(tvb, offset + 3) >> 6) & 0x01;
asi = (tvb_get_guint8(tvb, offset + 3) >> 5) & 0x01;
@@ -4831,8 +4811,8 @@ decode_gtp_apn(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree *
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, length + 3, "%s", val_to_str_ext_const(GTP_EXT_APN, &gtp_val_ext, "Unknown field"));
- ext_tree_apn = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_APN]);
+ ext_tree_apn = proto_tree_add_subtree(tree, tvb, offset, length + 3, ett_gtp_ies[GTP_EXT_APN], &te,
+ val_to_str_ext_const(GTP_EXT_APN, &gtp_val_ext, "Unknown field"));
proto_tree_add_text(ext_tree_apn, tvb, offset + 1, 2, "APN length : %u", length);
decode_apn(tvb, offset + 3, length, ext_tree_apn, te);
@@ -4852,12 +4832,11 @@ decode_gtp_proto_conf(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tre
guint16 length;
tvbuff_t *next_tvb;
proto_tree *ext_tree_proto;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, length + 3, "%s", val_to_str_ext_const(GTP_EXT_PROTO_CONF, &gtp_val_ext, "Unknown message"));
- ext_tree_proto = proto_item_add_subtree(te, ett_gtp_proto);
+ ext_tree_proto = proto_tree_add_subtree(tree, tvb, offset, length + 3,
+ ett_gtp_proto, NULL, val_to_str_ext_const(GTP_EXT_PROTO_CONF, &gtp_val_ext, "Unknown message"));
proto_tree_add_text(ext_tree_proto, tvb, offset + 1, 2, "Length: %u", length);
@@ -4890,8 +4869,7 @@ decode_gtp_gsn_addr(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_t
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "GSN address : ");
- ext_tree_gsn_addr = proto_item_add_subtree(te, ett_gtp_gsn_addr);
+ ext_tree_gsn_addr = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_gsn_addr, &te, "GSN address : ");
switch (length) {
case 4:
@@ -4943,12 +4921,11 @@ decode_gtp_msisdn(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tree *
guint16 length;
tvbuff_t *next_tvb;
proto_tree *ext_tree_proto;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, length + 3, "%s", val_to_str_ext_const(GTP_EXT_MSISDN, &gtp_val_ext, "Unknown message"));
- ext_tree_proto = proto_item_add_subtree(te, ett_gtp_proto);
+ ext_tree_proto = proto_tree_add_subtree(tree, tvb, offset, length + 3, ett_gtp_proto, NULL,
+ val_to_str_ext_const(GTP_EXT_MSISDN, &gtp_val_ext, "Unknown message"));
proto_tree_add_text(ext_tree_proto, tvb, offset + 1, 2, "Length: %u", length);
@@ -4982,15 +4959,13 @@ decode_gtp_auth_qui(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_t
{
proto_tree *ext_tree;
- proto_item *te_quint;
guint16 length;
guint8 xres_len, auth_len;
length = tvb_get_ntohs(tvb, offset + 1);
- te_quint = proto_tree_add_text(tree, tvb, offset, length + 1, "Quintuplet");
- ext_tree = proto_item_add_subtree(te_quint, ett_gtp_quint);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, length + 1, ett_gtp_quint, NULL, "Quintuplet");
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
@@ -5030,12 +5005,11 @@ decode_gtp_tft(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree *
guint32 mask_ipv4, addr_ipv4, ipsec_id, label;
struct e_in6_addr addr_ipv6, mask_ipv6;
proto_tree *ext_tree_tft, *ext_tree_tft_pf, *ext_tree_tft_flags;
- proto_item *te, *tee, *tef;
+ proto_item *tee;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "Traffic flow template");
- ext_tree_tft = proto_item_add_subtree(te, ett_gtp_tft);
+ ext_tree_tft = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_tft, NULL, "Traffic flow template");
tft_flags = tvb_get_guint8(tvb, offset + 3);
tft_code = (tft_flags >> 5) & 0x07;
@@ -5043,8 +5017,7 @@ decode_gtp_tft(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree *
proto_tree_add_text(ext_tree_tft, tvb, offset + 1, 2, "TFT length: %u", length);
- tef = proto_tree_add_text(ext_tree_tft, tvb, offset + 3, 1, "TFT flags");
- ext_tree_tft_flags = proto_item_add_subtree(tef, ett_gtp_tft_flags);
+ ext_tree_tft_flags = proto_tree_add_subtree(ext_tree_tft, tvb, offset + 3, 1, ett_gtp_tft_flags, NULL, "TFT flags");
proto_tree_add_uint(ext_tree_tft_flags, hf_gtp_tft_code, tvb, offset + 3, 1, tft_flags);
proto_tree_add_uint(ext_tree_tft_flags, hf_gtp_tft_spare, tvb, offset + 3, 1, tft_flags);
proto_tree_add_uint(ext_tree_tft_flags, hf_gtp_tft_number, tvb, offset + 3, 1, tft_flags);
@@ -5168,13 +5141,11 @@ decode_gtp_target_id(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tree
{
guint16 length;
- proto_item *te;
proto_tree *ext_tree;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "Target Identification");
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_TARGET_ID]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_TARGET_ID], NULL, "Target Identification");
offset = offset + 1;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset = offset + 2;
@@ -5216,13 +5187,12 @@ decode_gtp_utran_cont(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto
{
guint16 length;
- proto_item *te;
proto_tree *ext_tree;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "UTRAN transparent Container");
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_UTRAN_CONT]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_UTRAN_CONT], NULL, "UTRAN transparent Container");
+
offset = offset + 1;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset = offset + 2;
@@ -5240,16 +5210,13 @@ static int
decode_gtp_rab_setup(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree * tree)
{
- guint32 teid, addr_ipv4;
+ guint32 teid;
guint16 length;
- struct e_in6_addr addr_ipv6;
proto_tree *ext_tree_rab_setup;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "Radio Access Bearer Setup Information");
- ext_tree_rab_setup = proto_item_add_subtree(te, ett_gtp_rab_setup);
+ ext_tree_rab_setup = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_rab_setup, NULL, "Radio Access Bearer Setup Information");
proto_tree_add_text(ext_tree_rab_setup, tvb, offset + 1, 2, "RAB setup length : %u", length);
proto_tree_add_item(ext_tree_rab_setup, hf_gtp_nsapi, tvb, offset + 3, 1, ENC_BIG_ENDIAN);
@@ -5262,12 +5229,10 @@ decode_gtp_rab_setup(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_
switch (length) {
case 12:
- addr_ipv4 = tvb_get_ipv4(tvb, offset + 8);
- proto_tree_add_ipv4(ext_tree_rab_setup, hf_gtp_rnc_ipv4, tvb, offset + 8, 4, addr_ipv4);
+ proto_tree_add_item(ext_tree_rab_setup, hf_gtp_rnc_ipv4, tvb, offset + 8, 4, ENC_BIG_ENDIAN);
break;
case 24:
- tvb_get_ipv6(tvb, offset + 8, &addr_ipv6);
- proto_tree_add_ipv6(ext_tree_rab_setup, hf_gtp_rnc_ipv6, tvb, offset + 8, 16, (guint8 *) & addr_ipv6);
+ proto_tree_add_item(ext_tree_rab_setup, hf_gtp_rnc_ipv6, tvb, offset + 8, 16, ENC_NA);
break;
default:
break;
@@ -5288,12 +5253,11 @@ decode_gtp_hdr_list(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_t
int i;
guint8 length, hdr;
proto_tree *ext_tree_hdr_list;
- proto_item *te;
length = tvb_get_guint8(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 2 + length, "%s", val_to_str_ext_const(GTP_EXT_HDR_LIST, &gtp_val_ext, "Unknown"));
- ext_tree_hdr_list = proto_item_add_subtree(te, ett_gtp_hdr_list);
+ ext_tree_hdr_list = proto_tree_add_subtree(tree, tvb, offset, 2 + length, ett_gtp_hdr_list, NULL,
+ val_to_str_ext_const(GTP_EXT_HDR_LIST, &gtp_val_ext, "Unknown"));
proto_tree_add_text(ext_tree_hdr_list, tvb, offset + 1, 1, "Number of Extension Header Types in list (i.e., length) : %u", length);
@@ -5358,8 +5322,8 @@ decode_gtp_chrg_addr(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s : ", val_to_str_ext_const(GTP_EXT_CHRG_ADDR, &gtp_val_ext, "Unknown"));
- ext_tree_chrg_addr = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_CHRG_ADDR]);
+ ext_tree_chrg_addr = proto_tree_add_subtree_format(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_CHRG_ADDR], &te,
+ "%s : ", val_to_str_ext_const(GTP_EXT_CHRG_ADDR, &gtp_val_ext, "Unknown"));
proto_tree_add_text(ext_tree_chrg_addr, tvb, offset + 1, 2, "%s length : %u", val_to_str_ext_const(GTP_EXT_CHRG_ADDR, &gtp_val_ext, "Unknown"), length);
@@ -5394,12 +5358,11 @@ decode_gtp_ran_tr_cont(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tr
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
tvbuff_t *next_tvb;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s : ", val_to_str_ext_const(GTP_EXT_RAN_TR_CONT, &gtp_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_RAN_TR_CONT]);
+ ext_tree = proto_tree_add_subtree_format(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_RAN_TR_CONT], NULL,
+ "%s : ", val_to_str_ext_const(GTP_EXT_RAN_TR_CONT, &gtp_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
@@ -5421,22 +5384,21 @@ decode_gtp_ran_tr_cont(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tr
* UMTS: 29.060 v6.11.0, chapter 7.7.45 PDP Context Prioritization
*/
static int
-decode_gtp_pdp_cont_prio(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree * tree)
+decode_gtp_pdp_cont_prio(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tree * tree)
{
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s : ", val_to_str_ext_const(GTP_EXT_PDP_CONT_PRIO, &gtp_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_PDP_CONT_PRIO]);
+ ext_tree = proto_tree_add_subtree_format(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_PDP_CONT_PRIO], NULL,
+ "%s : ", val_to_str_ext_const(GTP_EXT_PDP_CONT_PRIO, &gtp_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset = offset + 2;
/* TODO add decoding of data */
- proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
@@ -5451,17 +5413,16 @@ decode_gtp_add_rab_setup_inf(tvbuff_t * tvb, int offset, packet_info * pinfo _U_
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s : ", val_to_str_ext_const(GTP_EXT_ADD_RAB_SETUP_INF, &gtp_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_ADD_RAB_SETUP_INF]);
+ ext_tree = proto_tree_add_subtree_format(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_ADD_RAB_SETUP_INF], NULL,
+ "%s : ", val_to_str_ext_const(GTP_EXT_ADD_RAB_SETUP_INF, &gtp_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset = offset + 2;
/* TODO add decoding of data */
- proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
@@ -5477,17 +5438,16 @@ decode_gtp_ssgn_no(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tr
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s : ", val_to_str_ext_const(GTP_EXT_SSGN_NO, &gtp_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_SSGN_NO]);
+ ext_tree = proto_tree_add_subtree_format(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_SSGN_NO], NULL,
+ "%s : ", val_to_str_ext_const(GTP_EXT_SSGN_NO, &gtp_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset = offset + 2;
/* TODO add decoding of data */
- proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
@@ -5502,11 +5462,10 @@ decode_gtp_common_flgs(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, prot
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s : ", val_to_str_ext_const(GTP_EXT_COMMON_FLGS, &gtp_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_COMMON_FLGS]);
+ ext_tree = proto_tree_add_subtree_format(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_COMMON_FLGS], NULL,
+ "%s : ", val_to_str_ext_const(GTP_EXT_COMMON_FLGS, &gtp_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
@@ -5541,11 +5500,10 @@ decode_gtp_apn_res(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tree *
guint16 length;
proto_tree *ext_tree_apn_res;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s : ", val_to_str_ext_const(GTP_EXT_APN_RES, &gtp_val_ext, "Unknown"));
- ext_tree_apn_res = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_APN_RES]);
+ ext_tree_apn_res = proto_tree_add_subtree_format(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_APN_RES], NULL,
+ "%s : ", val_to_str_ext_const(GTP_EXT_APN_RES, &gtp_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree_apn_res, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
@@ -5576,8 +5534,8 @@ decode_gtp_rat_type(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tree
proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_RAT_TYPE, &gtp_val_ext, "Unknown"));
- ext_tree_rat_type = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_RAT_TYPE]);
+ ext_tree_rat_type = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_RAT_TYPE], &te,
+ val_to_str_ext_const(GTP_EXT_RAT_TYPE, &gtp_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree_rat_type, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
@@ -5696,12 +5654,11 @@ decode_gtp_usr_loc_inf(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tr
guint16 length;
proto_tree *ext_tree, *rai_tree;
- proto_item *te, *fi;
guint8 geo_loc_type;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_USR_LOC_INF, &gtp_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_USR_LOC_INF]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_USR_LOC_INF], NULL,
+ val_to_str_ext_const(GTP_EXT_USR_LOC_INF, &gtp_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
@@ -5737,8 +5694,7 @@ decode_gtp_usr_loc_inf(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tr
* registered. RAI is defined in sub-clause 4.2 of 3GPP TS 23.003
* [2].
*/
- fi = proto_tree_add_text(ext_tree, tvb, offset + 1, 7, "Routeing Area Identity (RAI)");
- rai_tree = proto_item_add_subtree(fi, ett_gtp_uli_rai);
+ rai_tree = proto_tree_add_subtree(ext_tree, tvb, offset + 1, 7, ett_gtp_uli_rai, NULL, "Routeing Area Identity (RAI)");
dissect_e212_mcc_mnc(tvb, pinfo, rai_tree, offset, TRUE);
offset+=3;
@@ -5783,8 +5739,8 @@ decode_gtp_ms_time_zone(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, pro
char sign;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s: ", val_to_str_ext_const(GTP_EXT_MS_TIME_ZONE, &gtp_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_MS_TIME_ZONE]);
+ ext_tree = proto_tree_add_subtree_format(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_MS_TIME_ZONE], &te,
+ "%s: ", val_to_str_ext_const(GTP_EXT_MS_TIME_ZONE, &gtp_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
@@ -5830,8 +5786,8 @@ decode_gtp_imeisv(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tre
const char *digit_str;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_IMEISV, &gtp_val_ext, "Unknown"));
- ext_imeisv = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_IMEISV]);
+ ext_imeisv = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_IMEISV], &te,
+ val_to_str_ext_const(GTP_EXT_IMEISV, &gtp_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_imeisv, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
@@ -5862,17 +5818,16 @@ decode_gtp_camel_chg_inf_con(tvbuff_t * tvb, int offset, packet_info * pinfo _U_
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_CAMEL_CHG_INF_CON, &gtp_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_CAMEL_CHG_INF_CON]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_CAMEL_CHG_INF_CON], NULL,
+ val_to_str_ext_const(GTP_EXT_CAMEL_CHG_INF_CON, &gtp_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset = offset + 2;
/* TODO add decoding of data */
- proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
@@ -5888,17 +5843,16 @@ decode_gtp_mbms_ue_ctx(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, prot
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_MBMS_UE_CTX, &gtp_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_MBMS_UE_CTX]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_MBMS_UE_CTX], NULL,
+ val_to_str_ext_const(GTP_EXT_MBMS_UE_CTX, &gtp_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset = offset + 2;
/* TODO add decoding of data */
- proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
@@ -5918,12 +5872,12 @@ decode_gtp_tmgi(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tree * tr
guint16 length;
proto_tree *ext_tree, *tmgi_tree;
- proto_item *te, *ti;
+ proto_item *ti;
tvbuff_t *next_tvb;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_TMGI, &gtp_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_TMGI]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_TMGI], NULL,
+ val_to_str_ext_const(GTP_EXT_TMGI, &gtp_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
@@ -5948,11 +5902,10 @@ decode_gtp_rim_ra(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tre
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_RIM_RA, &gtp_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_RIM_RA]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_RIM_RA], NULL,
+ val_to_str_ext_const(GTP_EXT_RIM_RA, &gtp_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
@@ -5977,17 +5930,16 @@ decode_gtp_mbms_prot_conf_opt(tvbuff_t * tvb, int offset, packet_info * pinfo _U
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_MBMS_PROT_CONF_OPT, &gtp_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_MBMS_PROT_CONF_OPT]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_MBMS_PROT_CONF_OPT], NULL,
+ val_to_str_ext_const(GTP_EXT_MBMS_PROT_CONF_OPT, &gtp_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset = offset + 2;
/* TODO add decoding of data */
- proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
@@ -6017,11 +5969,10 @@ decode_gtp_mbms_ses_dur(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, pro
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_MBMS_SES_DUR, &gtp_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_MBMS_SES_DUR]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_MBMS_SES_DUR], NULL,
+ val_to_str_ext_const(GTP_EXT_MBMS_SES_DUR, &gtp_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
@@ -6092,11 +6043,10 @@ decode_gtp_mbms_sa(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tree *
tvbuff_t *next_tvb;
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_MBMS_SA, &gtp_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_MBMS_SA]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_MBMS_SA], NULL,
+ val_to_str_ext_const(GTP_EXT_MBMS_SA, &gtp_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
@@ -6118,17 +6068,16 @@ decode_gtp_src_rnc_pdp_ctx_inf(tvbuff_t * tvb, int offset, packet_info * pinfo _
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_SRC_RNC_PDP_CTX_INF, &gtp_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_SRC_RNC_PDP_CTX_INF]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_SRC_RNC_PDP_CTX_INF], NULL,
+ val_to_str_ext_const(GTP_EXT_SRC_RNC_PDP_CTX_INF, &gtp_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset = offset + 2;
/* TODO add decoding of data */
- proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
@@ -6144,17 +6093,16 @@ decode_gtp_add_trs_inf(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, prot
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_ADD_TRS_INF, &gtp_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_ADD_TRS_INF]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_ADD_TRS_INF], NULL,
+ val_to_str_ext_const(GTP_EXT_ADD_TRS_INF, &gtp_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset = offset + 2;
/* TODO add decoding of data */
- proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
@@ -6170,17 +6118,16 @@ decode_gtp_hop_count(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_HOP_COUNT, &gtp_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_HOP_COUNT]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_HOP_COUNT], NULL,
+ val_to_str_ext_const(GTP_EXT_HOP_COUNT, &gtp_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset = offset + 2;
/* TODO add decoding of data */
- proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
@@ -6196,11 +6143,10 @@ decode_gtp_sel_plmn_id(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tr
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_SEL_PLMN_ID, &gtp_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_MBMS_SES_ID]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_MBMS_SES_ID], NULL,
+ val_to_str_ext_const(GTP_EXT_SEL_PLMN_ID, &gtp_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
@@ -6221,17 +6167,15 @@ decode_gtp_mbms_ses_id(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, prot
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_MBMS_SES_ID, &gtp_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_MBMS_SES_ID]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_MBMS_SES_ID], NULL, val_to_str_ext_const(GTP_EXT_MBMS_SES_ID, &gtp_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset = offset + 2;
/* TODO add decoding of data */
- proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
@@ -6254,11 +6198,10 @@ decode_gtp_mbms_2g_3g_ind(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, p
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_MBMS_2G_3G_IND, &gtp_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_MBMS_2G_3G_IND]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_MBMS_2G_3G_IND], NULL,
+ val_to_str_ext_const(GTP_EXT_MBMS_2G_3G_IND, &gtp_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
@@ -6280,17 +6223,15 @@ decode_gtp_enh_nsapi(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_ENH_NSAPI, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_ENH_NSAPI]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_ENH_NSAPI], NULL, val_to_str_ext_const(GTP_EXT_ENH_NSAPI, &gtpv1_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset = offset + 2;
/* TODO add decoding of data */
- proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
@@ -6306,17 +6247,16 @@ decode_gtp_add_mbms_trs_inf(tvbuff_t * tvb, int offset, packet_info * pinfo _U_,
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_ADD_MBMS_TRS_INF, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_ADD_MBMS_TRS_INF]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_ADD_MBMS_TRS_INF], NULL,
+ val_to_str_ext_const(GTP_EXT_ADD_MBMS_TRS_INF, &gtpv1_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset = offset + 2;
/* TODO add decoding of data */
- proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
@@ -6332,17 +6272,16 @@ decode_gtp_mbms_ses_id_rep_no(tvbuff_t * tvb, int offset, packet_info * pinfo _U
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_MBMS_SES_ID_REP_NO, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_MBMS_SES_ID_REP_NO]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_MBMS_SES_ID_REP_NO], NULL,
+ val_to_str_ext_const(GTP_EXT_MBMS_SES_ID_REP_NO, &gtpv1_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset = offset + 2;
/* TODO add decoding of data */
- proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
@@ -6373,12 +6312,11 @@ decode_gtp_mbms_time_to_data_tr(tvbuff_t * tvb, int offset, packet_info * pinfo
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
guint8 time_2_dta_tr;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_MBMS_TIME_TO_DATA_TR, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_MBMS_TIME_TO_DATA_TR]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_MBMS_TIME_TO_DATA_TR], NULL,
+ val_to_str_ext_const(GTP_EXT_MBMS_TIME_TO_DATA_TR, &gtpv1_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
@@ -6418,17 +6356,16 @@ decode_gtp_ps_ho_req_ctx(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, pr
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_PS_HO_REQ_CTX, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_PS_HO_REQ_CTX]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_PS_HO_REQ_CTX], NULL,
+ val_to_str_ext_const(GTP_EXT_PS_HO_REQ_CTX, &gtpv1_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset = offset + 2;
/* TODO add decoding of data */
- proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
@@ -6444,17 +6381,16 @@ decode_gtp_bss_cont(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_t
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_BSS_CONT, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_BSS_CONT]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_BSS_CONT], NULL,
+ val_to_str_ext_const(GTP_EXT_BSS_CONT, &gtpv1_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset = offset + 2;
/* TODO add decoding of data */
- proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
/*
* The content of this container is defined in 3GPP TS 48.018
*/
@@ -6473,17 +6409,16 @@ decode_gtp_cell_id(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tr
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_CELL_ID, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_CELL_ID]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_CELL_ID], NULL,
+ val_to_str_ext_const(GTP_EXT_CELL_ID, &gtpv1_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset = offset + 2;
/* TODO add decoding of data */
- proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
/*
* for PS handover from A/Gb mode, the identification of a target cell (Cell ID 1) and the identification of the
* source cell (Cell ID 2) as defined in 3GPP TS 48.018 [20].
@@ -6506,17 +6441,16 @@ decode_gtp_pdu_no(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tre
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_PDU_NO, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_PDU_NO]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_PDU_NO], NULL,
+ val_to_str_ext_const(GTP_EXT_PDU_NO, &gtpv1_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset = offset + 2;
/* TODO add decoding of data */
- proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
@@ -6532,11 +6466,10 @@ decode_gtp_bssgp_cause(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, prot
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_BSSGP_CAUSE, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_BSSGP_CAUSE]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_BSSGP_CAUSE], NULL,
+ val_to_str_ext_const(GTP_EXT_BSSGP_CAUSE, &gtpv1_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
@@ -6559,11 +6492,10 @@ decode_gtp_mbms_bearer_cap(tvbuff_t * tvb, int offset, packet_info * pinfo _U_,
{
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_REQ_MBMS_BEARER_CAP, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_REQ_MBMS_BEARER_CAP]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_REQ_MBMS_BEARER_CAP], NULL,
+ val_to_str_ext_const(GTP_EXT_REQ_MBMS_BEARER_CAP, &gtpv1_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
@@ -6595,11 +6527,10 @@ decode_gtp_rim_ra_disc(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, prot
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_RIM_ROUTING_ADDR_DISC, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_RIM_ROUTING_ADDR_DISC]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_RIM_ROUTING_ADDR_DISC], NULL,
+ val_to_str_ext_const(GTP_EXT_RIM_ROUTING_ADDR_DISC, &gtpv1_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
@@ -6622,17 +6553,16 @@ decode_gtp_lst_set_up_pfc(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, p
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_LIST_OF_SETUP_PFCS, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_LIST_OF_SETUP_PFCS]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_LIST_OF_SETUP_PFCS], NULL,
+ val_to_str_ext_const(GTP_EXT_LIST_OF_SETUP_PFCS, &gtpv1_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset = offset + 2;
/* TODO add decoding of data */
- proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
@@ -6646,14 +6576,13 @@ decode_gtp_ps_handover_xid(tvbuff_t * tvb, int offset, packet_info * pinfo, prot
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
tvbuff_t *next_tvb;
guint8 sapi;
guint8 xid_par_len;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_PS_HANDOVER_XIP_PAR, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_PS_HANDOVER_XIP_PAR]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_PS_HANDOVER_XIP_PAR], NULL,
+ val_to_str_ext_const(GTP_EXT_PS_HANDOVER_XIP_PAR, &gtpv1_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
@@ -6686,17 +6615,16 @@ decode_gtp_ms_inf_chg_rep_act(tvbuff_t * tvb, int offset, packet_info * pinfo _U
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_MS_INF_CHG_REP_ACT, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_MS_INF_CHG_REP_ACT]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_MS_INF_CHG_REP_ACT], NULL,
+ val_to_str_ext_const(GTP_EXT_MS_INF_CHG_REP_ACT, &gtpv1_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset = offset + 2;
/* TODO add decoding of data */
- proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
@@ -6710,23 +6638,23 @@ decode_gtp_direct_tnl_flg(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, p
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_DIRECT_TUNNEL_FLGS, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_DIRECT_TUNNEL_FLGS]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_DIRECT_TUNNEL_FLGS], NULL,
+ val_to_str_ext_const(GTP_EXT_DIRECT_TUNNEL_FLGS, &gtpv1_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
- offset = offset + 2;
+ offset += 2;
+
/* TODO add decoding of data */
- proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet");
proto_tree_add_item(ext_tree, hf_gtp_ext_ei, tvb, offset, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(ext_tree, hf_gtp_ext_gcsi, tvb, offset, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(ext_tree, hf_gtp_ext_dti, tvb, offset, 1, ENC_BIG_ENDIAN);
-#if 0 /* Fix Dead Store Warning */
offset++;
-#endif
+
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
+
return 3 + length;
}
@@ -6739,17 +6667,16 @@ decode_gtp_corrl_id(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_t
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_CORRELATION_ID, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_CORRELATION_ID]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_CORRELATION_ID], NULL,
+ val_to_str_ext_const(GTP_EXT_CORRELATION_ID, &gtpv1_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset = offset + 2;
/* TODO add decoding of data */
- proto_tree_add_text(ext_tree, tvb, offset, length, "Data not decoded yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
@@ -6770,11 +6697,11 @@ decode_gtp_bearer_cntrl_mod(tvbuff_t * tvb, int offset, packet_info * pinfo _U_,
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_BEARER_CONTROL_MODE, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_BEARER_CONTROL_MODE]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_BEARER_CONTROL_MODE], NULL,
+ val_to_str_ext_const(GTP_EXT_BEARER_CONTROL_MODE, &gtpv1_val_ext, "Unknown"));
+
proto_tree_add_item(ext_tree, hf_gtp_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
@@ -6795,11 +6722,10 @@ decode_gtp_mbms_flow_id(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, pro
{
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_MBMS_FLOW_ID, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_MBMS_FLOW_ID]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_MBMS_FLOW_ID], NULL,
+ val_to_str_ext_const(GTP_EXT_MBMS_FLOW_ID, &gtpv1_val_ext, "Unknown"));
proto_tree_add_item(ext_tree, hf_gtp_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
@@ -6822,18 +6748,17 @@ decode_gtp_mbms_ip_mcast_dist(tvbuff_t * tvb, int offset, packet_info * pinfo _U
{
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_MBMS_IP_MCAST_DIST, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_MBMS_IP_MCAST_DIST]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_MBMS_IP_MCAST_DIST], NULL,
+ val_to_str_ext_const(GTP_EXT_MBMS_IP_MCAST_DIST, &gtpv1_val_ext, "Unknown"));
proto_tree_add_item(ext_tree, hf_gtp_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset = offset + 2;
- proto_tree_add_text(ext_tree, tvb, offset, length, "The rest of the data is not dissected yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
}
@@ -6854,11 +6779,10 @@ decode_gtp_mbms_dist_ack(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, pr
{
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_MBMS_DIST_ACK, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_MBMS_DIST_ACK]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_MBMS_DIST_ACK], NULL,
+ val_to_str_ext_const(GTP_EXT_MBMS_DIST_ACK, &gtpv1_val_ext, "Unknown"));
proto_tree_add_item(ext_tree, hf_gtp_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
@@ -6879,18 +6803,17 @@ decode_gtp_reliable_irat_ho_inf(tvbuff_t * tvb, int offset, packet_info * pinfo
{
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_RELIABLE_IRAT_HO_INF, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_RELIABLE_IRAT_HO_INF]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_RELIABLE_IRAT_HO_INF], NULL,
+ val_to_str_ext_const(GTP_EXT_RELIABLE_IRAT_HO_INF, &gtpv1_val_ext, "Unknown"));
proto_tree_add_item(ext_tree, hf_gtp_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset = offset + 2;
- proto_tree_add_text(ext_tree, tvb, offset, length, "The rest of the data is not dissected yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
}
@@ -6903,11 +6826,10 @@ decode_gtp_rfsp_index(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto
{
guint16 length, rfsp;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_RFSP_INDEX, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_RFSP_INDEX]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_RFSP_INDEX], NULL,
+ val_to_str_ext_const(GTP_EXT_RFSP_INDEX, &gtpv1_val_ext, "Unknown"));
proto_tree_add_item(ext_tree, hf_gtp_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
@@ -6931,12 +6853,11 @@ decode_gtp_fqdn(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, length + 3, "%s", val_to_str_ext_const(GTP_EXT_FQDN, &gtp_val_ext, "Unknown field"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_FQDN]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, length + 3, ett_gtp_ies[GTP_EXT_FQDN], NULL,
+ val_to_str_ext_const(GTP_EXT_FQDN, &gtp_val_ext, "Unknown field"));
proto_tree_add_item(ext_tree, hf_gtp_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
proto_tree_add_text(ext_tree, tvb, offset + 1, 2, "FQDN length : %u", length);
@@ -6954,16 +6875,15 @@ decode_gtp_evolved_allc_rtn_p1(tvbuff_t * tvb, int offset, packet_info * pinfo _
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_EVO_ALLO_RETE_P1, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_EVO_ALLO_RETE_P1]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_EVO_ALLO_RETE_P1], NULL,
+ val_to_str_ext_const(GTP_EXT_EVO_ALLO_RETE_P1, &gtpv1_val_ext, "Unknown"));
proto_tree_add_item(ext_tree, hf_gtp_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
- offset = offset + 2;
+ offset += 2;
proto_tree_add_item(ext_tree, hf_gtp_earp_pvi, tvb, offset, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(ext_tree, hf_gtp_earp_pl, tvb, offset, 1, ENC_BIG_ENDIAN);
@@ -6983,11 +6903,10 @@ decode_gtp_evolved_allc_rtn_p2(tvbuff_t * tvb, int offset, packet_info * pinfo _
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_EVO_ALLO_RETE_P2, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_EVO_ALLO_RETE_P2]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_EVO_ALLO_RETE_P2], NULL,
+ val_to_str_ext_const(GTP_EXT_EVO_ALLO_RETE_P2, &gtpv1_val_ext, "Unknown"));
proto_tree_add_item(ext_tree, hf_gtp_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
@@ -7014,18 +6933,17 @@ decode_gtp_extended_common_flgs(tvbuff_t * tvb, int offset, packet_info * pinfo
{
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_EXTENDED_COMMON_FLGS, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_EXTENDED_COMMON_FLGS]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_EXTENDED_COMMON_FLGS], NULL,
+ val_to_str_ext_const(GTP_EXT_EXTENDED_COMMON_FLGS, &gtpv1_val_ext, "Unknown"));
proto_tree_add_item(ext_tree, hf_gtp_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset = offset + 2;
- proto_tree_add_text(ext_tree, tvb, offset, length, "The rest of the data is not dissected yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
}
@@ -7038,18 +6956,17 @@ decode_gtp_uci(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree *
{
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_UCI, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_UCI]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_UCI], NULL,
+ val_to_str_ext_const(GTP_EXT_UCI, &gtpv1_val_ext, "Unknown"));
proto_tree_add_item(ext_tree, hf_gtp_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset = offset + 2;
- proto_tree_add_text(ext_tree, tvb, offset, length, "The rest of the data is not dissected yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
}
@@ -7063,18 +6980,17 @@ decode_gtp_csg_inf_rep_act(tvbuff_t * tvb, int offset, packet_info * pinfo _U_,
{
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_CSG_INF_REP_ACT, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_CSG_INF_REP_ACT]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_CSG_INF_REP_ACT], NULL,
+ val_to_str_ext_const(GTP_EXT_CSG_INF_REP_ACT, &gtpv1_val_ext, "Unknown"));
proto_tree_add_item(ext_tree, hf_gtp_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset = offset + 2;
- proto_tree_add_text(ext_tree, tvb, offset, length, "The rest of the data is not dissected yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
}
@@ -7087,18 +7003,17 @@ decode_gtp_csg_id(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tre
{
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_CSG_ID, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_CSG_ID]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_CSG_ID], NULL,
+ val_to_str_ext_const(GTP_EXT_CSG_ID, &gtpv1_val_ext, "Unknown"));
proto_tree_add_item(ext_tree, hf_gtp_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset = offset + 2;
- proto_tree_add_text(ext_tree, tvb, offset, length, "The rest of the data is not dissected yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
}
@@ -7110,18 +7025,17 @@ decode_gtp_cmi(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree *
{
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_CMI, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_CMI]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_CMI], NULL,
+ val_to_str_ext_const(GTP_EXT_CMI, &gtpv1_val_ext, "Unknown"));
proto_tree_add_item(ext_tree, hf_gtp_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset = offset + 2;
- proto_tree_add_text(ext_tree, tvb, offset, length, "The rest of the data is not dissected yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
}
@@ -7136,8 +7050,8 @@ decode_gtp_apn_ambr(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_t
proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_AMBR, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_RELIABLE_IRAT_HO_INF]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_RELIABLE_IRAT_HO_INF], NULL,
+ val_to_str_ext_const(GTP_EXT_AMBR, &gtpv1_val_ext, "Unknown"));
proto_tree_add_item(ext_tree, hf_gtp_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
@@ -7155,7 +7069,6 @@ decode_gtp_apn_ambr(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_t
te = proto_tree_add_item(ext_tree, hf_gtp_ext_apn_ambr_dl, tvb, offset, 4, ENC_BIG_ENDIAN);
proto_item_append_text(te, " kbps");
-
return 3 + length;
}
/*
@@ -7166,11 +7079,10 @@ decode_gtp_ue_network_cap(tvbuff_t * tvb, int offset, packet_info * pinfo, proto
{
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_UE_NETWORK_CAP, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_UE_NETWORK_CAP]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_UE_NETWORK_CAP], NULL,
+ val_to_str_ext_const(GTP_EXT_UE_NETWORK_CAP, &gtpv1_val_ext, "Unknown"));
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
@@ -7192,8 +7104,8 @@ decode_gtp_ue_ambr(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tr
proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_APN_AMBR_WITH_NSAPI, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_APN_AMBR_WITH_NSAPI]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_APN_AMBR_WITH_NSAPI], NULL,
+ val_to_str_ext_const(GTP_EXT_APN_AMBR_WITH_NSAPI, &gtpv1_val_ext, "Unknown"));
proto_tree_add_item(ext_tree, hf_gtp_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
@@ -7224,7 +7136,7 @@ decode_gtp_ue_ambr(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tr
te = proto_tree_add_item(ext_tree, hf_gtp_ext_auth_ue_ambr_dl, tvb, offset, 4, ENC_BIG_ENDIAN);
proto_item_append_text(te, " kbps");
- proto_tree_add_text(ext_tree, tvb, offset, length, "The rest of the data is not dissected yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
}
@@ -7240,8 +7152,8 @@ decode_gtp_apn_ambr_with_nsapi(tvbuff_t * tvb, int offset, packet_info * pinfo _
proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_UE_AMBR, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_UE_AMBR]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_UE_AMBR], NULL,
+ val_to_str_ext_const(GTP_EXT_UE_AMBR, &gtpv1_val_ext, "Unknown"));
proto_tree_add_item(ext_tree, hf_gtp_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
@@ -7280,16 +7192,15 @@ decode_gtp_ggsn_back_off_time(tvbuff_t * tvb, int offset, packet_info * pinfo _U
{
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_GGSN_BACK_OFF_TIME, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_GGSN_BACK_OFF_TIME]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_GGSN_BACK_OFF_TIME], NULL,
+ val_to_str_ext_const(GTP_EXT_GGSN_BACK_OFF_TIME, &gtpv1_val_ext, "Unknown"));
proto_tree_add_item(ext_tree, hf_gtp_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
- offset = offset + 2;
+ offset += 2;
/* 4 Timer unit Timer value */
proto_tree_add_item(ext_tree, hf_gtp_ext_ggsn_back_off_time_units, tvb, offset, 2, ENC_BIG_ENDIAN);
@@ -7307,18 +7218,17 @@ decode_gtp_sig_pri_ind(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, prot
{
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_SIG_PRI_IND, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_SIG_PRI_IND]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_SIG_PRI_IND], NULL,
+ val_to_str_ext_const(GTP_EXT_SIG_PRI_IND, &gtpv1_val_ext, "Unknown"));
proto_tree_add_item(ext_tree, hf_gtp_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
- offset = offset + 2;
+ offset += 2;
- proto_tree_add_text(ext_tree, tvb, offset, length, "The rest of the data is not dissected yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
}
@@ -7331,18 +7241,17 @@ decode_gtp_sig_pri_ind_w_nsapi(tvbuff_t * tvb, int offset, packet_info * pinfo _
{
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_SIG_PRI_IND_W_NSAPI, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_SIG_PRI_IND_W_NSAPI]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_SIG_PRI_IND_W_NSAPI], NULL,
+ val_to_str_ext_const(GTP_EXT_SIG_PRI_IND_W_NSAPI, &gtpv1_val_ext, "Unknown"));
proto_tree_add_item(ext_tree, hf_gtp_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
- offset = offset + 2;
+ offset += 2;
- proto_tree_add_text(ext_tree, tvb, offset, length, "The rest of the data is not dissected yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
}
@@ -7360,16 +7269,15 @@ decode_gtp_higher_br_16mb_flg(tvbuff_t * tvb, int offset, packet_info * pinfo _U
{
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_HIGHER_BR_16MB_FLG, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_HIGHER_BR_16MB_FLG]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_HIGHER_BR_16MB_FLG], NULL,
+ val_to_str_ext_const(GTP_EXT_HIGHER_BR_16MB_FLG, &gtpv1_val_ext, "Unknown"));
proto_tree_add_item(ext_tree, hf_gtp_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
- offset = offset + 2;
+ offset += 2;
/* Higher bitrates than 16 Mbps flag */
proto_tree_add_item(ext_tree, hf_gtp_higher_br_16mb_flg, tvb, offset, 1, ENC_BIG_ENDIAN);
@@ -7385,13 +7293,12 @@ decode_gtp_max_mbr_apn_ambr(tvbuff_t * tvb, int offset, packet_info * pinfo _U_,
{
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
guint32 max_ul;
guint32 max_dl;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_MAX_MBR_APN_AMBR, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_MAX_MBR_APN_AMBR]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_MAX_MBR_APN_AMBR], NULL,
+ val_to_str_ext_const(GTP_EXT_MAX_MBR_APN_AMBR, &gtpv1_val_ext, "Unknown"));
proto_tree_add_item(ext_tree, hf_gtp_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
@@ -7400,19 +7307,19 @@ decode_gtp_max_mbr_apn_ambr(tvbuff_t * tvb, int offset, packet_info * pinfo _U_,
/* Max MBR/APN-AMBR for uplink */
max_ul = tvb_get_ntohl(tvb, offset);
- proto_tree_add_uint_format(ext_tree, hf_gtp_max_mbr_apn_ambr_ul, tvb, offset, 4, max_ul, "Max MBR/APN-AMBR for uplink : %u %s",
+ proto_tree_add_uint_format_value(ext_tree, hf_gtp_max_mbr_apn_ambr_ul, tvb, offset, 4, max_ul, "%u %s",
(max_ul) > 1000 ? max_ul/1000 : max_ul,
(max_ul) > 1000 ? "Mbps" : "kbps");
- offset += 4;
+ offset += 4;
- /* Max MBR/APN-AMBR for downlink */
- max_dl = tvb_get_ntohl(tvb, offset);
- proto_tree_add_uint_format(ext_tree, hf_gtp_max_mbr_apn_ambr_dl, tvb, offset, 4, max_dl, "Max MBR/APN-AMBR for downlink : %u %s",
- (max_dl) > 1000 ? max_dl/1000 : max_dl,
- (max_dl) > 1000 ? "Mbps" : "kbps");
+ /* Max MBR/APN-AMBR for downlink */
+ max_dl = tvb_get_ntohl(tvb, offset);
+ proto_tree_add_uint_format_value(ext_tree, hf_gtp_max_mbr_apn_ambr_dl, tvb, offset, 4, max_dl, "%u %s",
+ (max_dl) > 1000 ? max_dl/1000 : max_dl,
+ (max_dl) > 1000 ? "Mbps" : "kbps");
- return 3 + length;
+ return 3 + length;
}
/*
* 7.7.107 Additional MM context for SRVCC
@@ -7423,18 +7330,17 @@ decode_gtp_add_mm_ctx_srvcc(tvbuff_t * tvb, int offset, packet_info * pinfo _U_,
{
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_ADD_MM_CTX_SRVCC, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_ADD_MM_CTX_SRVCC]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_ADD_MM_CTX_SRVCC], NULL,
+ val_to_str_ext_const(GTP_EXT_ADD_MM_CTX_SRVCC, &gtpv1_val_ext, "Unknown"));
proto_tree_add_item(ext_tree, hf_gtp_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
- offset = offset + 2;
+ offset += 2;
- proto_tree_add_text(ext_tree, tvb, offset, length, "The rest of the data is not dissected yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
}
@@ -7448,18 +7354,17 @@ decode_gtp_add_flgs_srvcc(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, p
{
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_ADD_FLGS_SRVCC, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_ADD_FLGS_SRVCC]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_ADD_FLGS_SRVCC], NULL,
+ val_to_str_ext_const(GTP_EXT_ADD_FLGS_SRVCC, &gtpv1_val_ext, "Unknown"));
proto_tree_add_item(ext_tree, hf_gtp_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
- offset = offset + 2;
+ offset += 2;
- proto_tree_add_text(ext_tree, tvb, offset, length, "The rest of the data is not dissected yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
}
@@ -7471,18 +7376,17 @@ decode_gtp_stn_sr(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tre
{
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_STN_SR, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_STN_SR]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_STN_SR], NULL,
+ val_to_str_ext_const(GTP_EXT_STN_SR, &gtpv1_val_ext, "Unknown"));
proto_tree_add_item(ext_tree, hf_gtp_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
- offset = offset + 2;
+ offset += 2;
- proto_tree_add_text(ext_tree, tvb, offset, length, "The rest of the data is not dissected yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
}
@@ -7496,18 +7400,17 @@ decode_gtp_c_msisdn(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_t
{
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_C_MSISDN, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_C_MSISDN]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_C_MSISDN], NULL,
+ val_to_str_ext_const(GTP_EXT_C_MSISDN, &gtpv1_val_ext, "Unknown"));
proto_tree_add_item(ext_tree, hf_gtp_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
- offset = offset + 2;
+ offset += 2;
- proto_tree_add_text(ext_tree, tvb, offset, length, "The rest of the data is not dissected yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
}
@@ -7519,18 +7422,17 @@ decode_gtp_ext_ranap_cause(tvbuff_t * tvb, int offset, packet_info * pinfo _U_,
{
guint16 length;
proto_tree *ext_tree;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "%s", val_to_str_ext_const(GTP_EXT_EXT_RANAP_CAUSE, &gtpv1_val_ext, "Unknown"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ies[GTP_EXT_EXT_RANAP_CAUSE]);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_ies[GTP_EXT_EXT_RANAP_CAUSE], NULL,
+ val_to_str_ext_const(GTP_EXT_EXT_RANAP_CAUSE, &gtpv1_val_ext, "Unknown"));
proto_tree_add_item(ext_tree, hf_gtp_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
proto_tree_add_item(ext_tree, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
- offset = offset + 2;
+ offset += 2;
- proto_tree_add_text(ext_tree, tvb, offset, length, "The rest of the data is not dissected yet");
+ proto_tree_add_expert(ext_tree, pinfo, &ei_gtp_undecoded, tvb, offset, length);
return 3 + length;
}
@@ -7544,12 +7446,11 @@ decode_gtp_rel_pack(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_t
guint16 length, n, number;
proto_tree *ext_tree_rel_pack;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "Sequence numbers of released packets IE");
- ext_tree_rel_pack = proto_item_add_subtree(te, ett_gtp_rel_pack);
+ ext_tree_rel_pack = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_rel_pack, NULL,
+ "Sequence numbers of released packets IE");
n = 0;
@@ -7573,12 +7474,11 @@ decode_gtp_can_pack(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_t
guint16 length, n, number;
proto_tree *ext_tree_can_pack;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "Sequence numbers of cancelled packets IE");
- ext_tree_can_pack = proto_item_add_subtree(te, ett_gtp_can_pack);
+ ext_tree_can_pack = proto_tree_add_subtree(tree, tvb, offset, 3 + length, ett_gtp_can_pack, NULL,
+ "Sequence numbers of cancelled packets IE");
n = 0;
@@ -7586,7 +7486,7 @@ decode_gtp_can_pack(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_t
number = tvb_get_ntohs(tvb, offset + 3 + n);
proto_tree_add_text(ext_tree_can_pack, tvb, offset + 3 + n, 2, "%u", number);
- n = n + 2;
+ n += 2;
}
return 3 + length;
@@ -7610,11 +7510,11 @@ decode_gtp_data_req(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tree
guint16 length, cdr_length;
guint8 no, format, app_id, rel_id, ver_id, i;
proto_tree *ext_tree, *ver_tree, *cdr_dr_tree;
- proto_item *te, *fmt_item, *ver_item;
+ proto_item *fmt_item;
tvbuff_t *next_tvb;
- te = proto_tree_add_text(tree, tvb, offset, 1, "%s", val_to_str_ext_const(GTP_EXT_DATA_REQ, &gtp_val_ext, "Unknown message"));
- ext_tree = proto_item_add_subtree(te, ett_gtp_ext);
+ ext_tree = proto_tree_add_subtree(tree, tvb, offset, 1, ett_gtp_ext, NULL,
+ val_to_str_ext_const(GTP_EXT_DATA_REQ, &gtp_val_ext, "Unknown message"));
offset++;
length = tvb_get_ntohs(tvb, offset);
@@ -7656,8 +7556,8 @@ decode_gtp_data_req(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tree
ver_id = ver_id -1;
/* XXX We don't handle ASCCI version */
- ver_item = proto_tree_add_text(ext_tree, tvb, offset, 2, "Data record format version: AppId %u Rel %u.%u.0", app_id,rel_id,ver_id);
- ver_tree = proto_item_add_subtree(ver_item, ett_gtp_cdr_ver);
+ ver_tree = proto_tree_add_subtree_format(ext_tree, tvb, offset, 2, ett_gtp_cdr_ver, NULL,
+ "Data record format version: AppId %u Rel %u.%u.0", app_id,rel_id,ver_id);
proto_tree_add_item(ver_tree, hf_gtp_cdr_app, tvb, offset, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(ver_tree, hf_gtp_cdr_rel, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
@@ -7665,8 +7565,8 @@ decode_gtp_data_req(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tree
offset++;
for(i = 0; i < no; ++i) {
cdr_length = tvb_get_ntohs(tvb, offset);
- te = proto_tree_add_text(ext_tree, tvb, offset, cdr_length+2, "Data record %d", i + 1);
- cdr_dr_tree = proto_item_add_subtree(te, ett_gtp_cdr_dr);
+ cdr_dr_tree = proto_tree_add_subtree_format(ext_tree, tvb, offset, cdr_length+2,
+ ett_gtp_cdr_dr, NULL, "Data record %d", i + 1);
proto_tree_add_text(cdr_dr_tree, tvb, offset, 2, "Length: %u", cdr_length);
offset+=2;
proto_tree_add_text(cdr_dr_tree, tvb, offset, cdr_length, "Content");
@@ -7709,12 +7609,11 @@ decode_gtp_data_resp(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_
guint16 length, n, number;
proto_tree *ext_tree_data_resp;
- proto_item *te;
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "Requests responded");
- ext_tree_data_resp = proto_item_add_subtree(te, ett_gtp_data_resp);
+ ext_tree_data_resp = proto_tree_add_subtree(tree, tvb, offset, 3 + length,
+ ett_gtp_data_resp, NULL, "Requests responded");
n = 0;
@@ -7745,8 +7644,8 @@ decode_gtp_node_addr(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_
length = tvb_get_ntohs(tvb, offset + 1);
- te = proto_tree_add_text(tree, tvb, offset, 3 + length, "Node address: ");
- ext_tree_node_addr = proto_item_add_subtree(te, ett_gtp_node_addr);
+ ext_tree_node_addr = proto_tree_add_subtree(tree, tvb, offset, 3 + length,
+ ett_gtp_node_addr, &te, "Node address: ");
proto_tree_add_text(ext_tree_node_addr, tvb, offset + 1, 2, "Node address length: %u", length);
@@ -7784,13 +7683,13 @@ decode_gtp_priv_ext(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tree
proto_item *te;
tvbuff_t *next_tvb;
- te = proto_tree_add_text(tree, tvb, offset, 1, "%s : ", val_to_str_ext_const(GTP_EXT_PRIV_EXT, &gtp_val_ext, "Unknown message"));
- ext_tree_priv_ext = proto_item_add_subtree(te, ett_gtp_ext);
+ ext_tree_priv_ext = proto_tree_add_subtree_format(tree, tvb, offset, 1, ett_gtp_ext, &te,
+ "%s : ", val_to_str_ext_const(GTP_EXT_PRIV_EXT, &gtp_val_ext, "Unknown message"));
offset++;
length = tvb_get_ntohs(tvb, offset);
proto_tree_add_item(ext_tree_priv_ext, hf_gtp_ext_length, tvb, offset, 2, ENC_BIG_ENDIAN);
- offset = offset + 2;
+ offset += 2;
if (length >= 2) {
ext_id = tvb_get_ntohs(tvb, offset);
proto_tree_add_uint(ext_tree_priv_ext, hf_gtp_ext_id, tvb, offset, 2, ext_id);
@@ -9275,6 +9174,7 @@ proto_register_gtp(void)
{ &ei_gtp_ext_length_mal, { "gtp.ext_length.invalid", PI_MALFORMED, PI_ERROR, "Malformed length", EXPFILL }},
{ &ei_gtp_ext_hdr_pdcpsn, { "gtp.ext_hdr.pdcp_sn.non_zero", PI_PROTOCOL, PI_NOTE, "3GPP TS 29.281 v9.0.0: When used between two eNBs at the X2 interface in E-UTRAN, bits 5-8 of octet 2 are spare. The meaning of the spare bits shall be set to zero.", EXPFILL }},
{ &ei_gtp_ext_length_warn, { "gtp.ext_length.invalid", PI_PROTOCOL, PI_WARN, "Length warning", EXPFILL }},
+ { &ei_gtp_undecoded, { "gtp.undecoded", PI_UNDECODED, PI_WARN, "Data not decoded yet", EXPFILL }},
};
/* Setup protocol subtree array */
diff --git a/epan/dissectors/packet-gtpv2.c b/epan/dissectors/packet-gtpv2.c
index 1c03b4943f..40abcd8945 100644
--- a/epan/dissectors/packet-gtpv2.c
+++ b/epan/dissectors/packet-gtpv2.c
@@ -1175,7 +1175,7 @@ dissect_gtpv2_mm_con_eutran_srvcc(tvbuff_t *tvb, packet_info *pinfo _U_, proto_t
elm_len = tvb_get_guint8(tvb, offset);
proto_tree_add_item(tree, hf_gtpv2_len_ms_classmark2, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
- fi = proto_tree_add_text(tree, tvb, offset, elm_len, "Mobile Station Classmark2 %s", tvb_bytes_to_ep_str(tvb, offset, elm_len));
+ fi = proto_tree_add_text(tree, tvb, offset, elm_len, "Mobile Station Classmark2: %s", tvb_bytes_to_ep_str(tvb, offset, elm_len));
ms_tree = proto_item_add_subtree(fi, ett_gtpv2_ms_mark);
de_ms_cm_2(tvb, ms_tree, pinfo, offset, elm_len, NULL, 0);
offset += elm_len;
@@ -1184,7 +1184,7 @@ dissect_gtpv2_mm_con_eutran_srvcc(tvbuff_t *tvb, packet_info *pinfo _U_, proto_t
elm_len = tvb_get_guint8(tvb, offset);
proto_tree_add_item(tree, hf_gtpv2_len_ms_classmark3, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
- fi = proto_tree_add_text(tree, tvb, offset, elm_len, "Mobile Station Classmark3 %s", tvb_bytes_to_ep_str(tvb, offset, elm_len));
+ fi = proto_tree_add_text(tree, tvb, offset, elm_len, "Mobile Station Classmark3: %s", tvb_bytes_to_ep_str(tvb, offset, elm_len));
ms_tree = proto_item_add_subtree(fi, ett_gtpv2_ms_mark);
de_ms_cm_3(tvb, ms_tree, pinfo, offset, elm_len, NULL, 0);
offset += elm_len;
@@ -1193,7 +1193,7 @@ dissect_gtpv2_mm_con_eutran_srvcc(tvbuff_t *tvb, packet_info *pinfo _U_, proto_t
elm_len = tvb_get_guint8(tvb, offset);
proto_tree_add_item(tree, hf_gtpv2_len_supp_codec_list, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
- fi = proto_tree_add_text(tree, tvb, offset, elm_len, "Supported Codec List %s", tvb_bytes_to_ep_str(tvb, offset, elm_len));
+ fi = proto_tree_add_text(tree, tvb, offset, elm_len, "Supported Codec List: %s", tvb_bytes_to_ep_str(tvb, offset, elm_len));
ms_tree = proto_item_add_subtree(fi, ett_gtpv2_supp_codec_list);
de_sup_codec_list(tvb, ms_tree, pinfo, offset, elm_len, NULL, 0);
@@ -1223,7 +1223,7 @@ dissect_gtpv2_mm_con_utran_srvcc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
elm_len = tvb_get_guint8(tvb, offset);
proto_tree_add_item(tree, hf_gtpv2_len_ms_classmark2, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
- fi = proto_tree_add_text(tree, tvb, offset, elm_len, "Mobile Station Classmark2 %s", tvb_bytes_to_ep_str(tvb, offset, elm_len));
+ fi = proto_tree_add_text(tree, tvb, offset, elm_len, "Mobile Station Classmark2: %s", tvb_bytes_to_ep_str(tvb, offset, elm_len));
ms_tree = proto_item_add_subtree(fi, ett_gtpv2_ms_mark);
de_ms_cm_2(tvb, ms_tree, pinfo, offset, elm_len, NULL, 0);
offset += elm_len;
@@ -1232,7 +1232,7 @@ dissect_gtpv2_mm_con_utran_srvcc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
elm_len = tvb_get_guint8(tvb, offset);
proto_tree_add_item(tree, hf_gtpv2_len_ms_classmark3, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
- fi = proto_tree_add_text(tree, tvb, offset, elm_len, "Mobile Station Classmark3 %s", tvb_bytes_to_ep_str(tvb, offset, elm_len));
+ fi = proto_tree_add_text(tree, tvb, offset, elm_len, "Mobile Station Classmark3: %s", tvb_bytes_to_ep_str(tvb, offset, elm_len));
ms_tree = proto_item_add_subtree(fi, ett_gtpv2_ms_mark);
de_ms_cm_3(tvb, ms_tree, pinfo, offset, elm_len, NULL, 0);
offset += elm_len;
@@ -1241,7 +1241,7 @@ dissect_gtpv2_mm_con_utran_srvcc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
elm_len = tvb_get_guint8(tvb, offset);
proto_tree_add_item(tree, hf_gtpv2_len_supp_codec_list, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
- fi = proto_tree_add_text(tree, tvb, offset, elm_len, "Supported Codec List %s", tvb_bytes_to_ep_str(tvb, offset, elm_len));
+ fi = proto_tree_add_text(tree, tvb, offset, elm_len, "Supported Codec List: %s", tvb_bytes_to_ep_str(tvb, offset, elm_len));
ms_tree = proto_item_add_subtree(fi, ett_gtpv2_supp_codec_list);
de_sup_codec_list(tvb, ms_tree, pinfo, offset, elm_len, NULL, 0);
@@ -1287,7 +1287,6 @@ dissect_gtpv2_tgt_rnc_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, pr
int offset = 0;
guint16 rnc_id;
proto_tree *subtree;
- proto_item *rai_item;
guint32 mcc;
guint32 mnc;
guint32 lac;
@@ -1308,12 +1307,11 @@ dissect_gtpv2_tgt_rnc_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, pr
lac = tvb_get_ntohs(tvb, curr_offset + 3);
rnc_id = tvb_get_ntohs(tvb, curr_offset + 5);
- rai_item = proto_tree_add_text(tree,
- tvb, curr_offset, 6,
+ subtree = proto_tree_add_subtree_format(tree,
+ tvb, curr_offset, 6, ett_gtpv2_rai, NULL,
"Routing area identification: %x-%x-%u-%u",
mcc, mnc, lac, rnc_id);
- subtree = proto_item_add_subtree(rai_item, ett_gtpv2_rai);
dissect_e212_mcc_mnc(tvb, pinfo, subtree, offset, TRUE);
curr_offset+=3;
@@ -1350,7 +1348,6 @@ dissect_gtpv2_tgt_global_cell_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
int offset = 0;
guint8 tgt_cell_id;
proto_tree *subtree;
- proto_item *rai_item;
guint32 mcc;
guint32 mnc;
guint32 lac;
@@ -1370,12 +1367,11 @@ dissect_gtpv2_tgt_global_cell_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
lac = tvb_get_ntohs(tvb, curr_offset + 3);
tgt_cell_id = tvb_get_guint8(tvb, curr_offset + 5);
- rai_item = proto_tree_add_text(tree,
- tvb, curr_offset, 6,
+ subtree = proto_tree_add_subtree_format(tree,
+ tvb, curr_offset, 6, ett_gtpv2_rai, NULL,
"Routing area identification: %x-%x-%u-%u",
mcc, mnc, lac, tgt_cell_id);
- subtree = proto_item_add_subtree(rai_item, ett_gtpv2_rai);
dissect_e212_mcc_mnc(tvb, pinfo, subtree, offset, TRUE);
proto_tree_add_item(subtree, hf_gtpv2_lac, tvb, curr_offset + 3, 2, ENC_BIG_ENDIAN);
@@ -1854,7 +1850,6 @@ static gchar*
decode_gtpv2_uli(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length, guint8 instance _U_, guint flags)
{
int offset = 1; /* flags are already dissected */
- proto_item *fi;
proto_tree *part_tree;
gchar *mcc_mnc_str;
gchar *str = NULL;
@@ -1865,8 +1860,8 @@ decode_gtpv2_uli(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item
guint16 lac, ci;
proto_item_append_text(item, "CGI ");
- fi = proto_tree_add_text(tree, tvb, offset, 7, "Cell Global Identity (CGI)");
- part_tree = proto_item_add_subtree(fi, ett_gtpv2_uli_field);
+ part_tree = proto_tree_add_subtree(tree, tvb, offset, 7,
+ ett_gtpv2_uli_field, NULL, "Cell Global Identity (CGI)");
mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, part_tree, offset, TRUE);
offset += 3;
lac = tvb_get_ntohs(tvb, offset);
@@ -1889,8 +1884,8 @@ decode_gtpv2_uli(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item
guint16 lac, sac;
proto_item_append_text(item, "SAI ");
- fi = proto_tree_add_text(tree, tvb, offset, 7, "Service Area Identity (SAI)");
- part_tree = proto_item_add_subtree(fi, ett_gtpv2_uli_field);
+ part_tree = proto_tree_add_subtree(tree, tvb, offset, 7,
+ ett_gtpv2_uli_field, NULL, "Service Area Identity (SAI)");
mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, part_tree, offset, TRUE);
offset += 3;
lac = tvb_get_ntohs(tvb, offset);
@@ -1911,8 +1906,8 @@ decode_gtpv2_uli(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item
{
guint16 lac, rac;
proto_item_append_text(item, "RAI ");
- fi = proto_tree_add_text(tree, tvb, offset, 7, "Routeing Area Identity (RAI)");
- part_tree = proto_item_add_subtree(fi, ett_gtpv2_uli_field);
+ part_tree = proto_tree_add_subtree(tree, tvb, offset, 7,
+ ett_gtpv2_uli_field, NULL, "Routeing Area Identity (RAI)");
mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, part_tree, offset, TRUE);
offset += 3;
lac = tvb_get_ntohs(tvb, offset);
@@ -1934,8 +1929,8 @@ decode_gtpv2_uli(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item
{
guint16 tac;
proto_item_append_text(item, "TAI ");
- fi = proto_tree_add_text(tree, tvb, offset, 5, "Tracking Area Identity (TAI)");
- part_tree = proto_item_add_subtree(fi, ett_gtpv2_uli_field);
+ part_tree = proto_tree_add_subtree(tree, tvb, offset, 5,
+ ett_gtpv2_uli_field, NULL, "Tracking Area Identity (TAI)");
mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, part_tree, offset, TRUE);
offset += 3;
tac = tvb_get_ntohs(tvb, offset);
@@ -1956,8 +1951,8 @@ decode_gtpv2_uli(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item
guint32 ECGI;
proto_item_append_text(item, "ECGI ");
- fi = proto_tree_add_text(tree, tvb, offset, 7, "E-UTRAN Cell Global Identifier (ECGI)");
- part_tree = proto_item_add_subtree(fi, ett_gtpv2_uli_field);
+ part_tree = proto_tree_add_subtree(tree, tvb, offset, 7,
+ ett_gtpv2_uli_field, NULL, "E-UTRAN Cell Global Identifier (ECGI)");
mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, part_tree, offset, TRUE);
offset += 3;
/* The bits 8 through 5, of octet e+3 (Fig 8.21.5-1 in TS 29.274 V8.2.0) are spare
@@ -1989,8 +1984,8 @@ decode_gtpv2_uli(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item
{
guint16 lac;
proto_item_append_text(item, "LAI ");
- fi = proto_tree_add_text(tree, tvb, offset, 5, "LAI (Location Area Identifier)");
- part_tree = proto_item_add_subtree(fi, ett_gtpv2_uli_field);
+ part_tree = proto_tree_add_subtree(tree, tvb, offset, 5,
+ ett_gtpv2_uli_field, NULL, "LAI (Location Area Identifier)");
mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, part_tree, offset, TRUE);
offset += 3;
@@ -2013,13 +2008,11 @@ decode_gtpv2_uli(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item
static void
dissect_gtpv2_uli(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type _U_, guint8 instance _U_)
{
- proto_item *flags_item;
proto_tree *flag_tree;
int offset = 0;
guint flags;
- flags_item = proto_tree_add_text(tree, tvb, offset, 1, "Flags");
- flag_tree = proto_item_add_subtree(flags_item, ett_gtpv2_uli_flags);
+ flag_tree = proto_tree_add_subtree(tree, tvb, offset, 1, ett_gtpv2_uli_flags, NULL, "Flags");
flags = tvb_get_guint8(tvb, offset) & 0x3f;
proto_tree_add_bits_item(flag_tree, hf_gtpv2_spare_bits, tvb, offset >> 3, 2, ENC_BIG_ENDIAN);
@@ -2444,10 +2437,8 @@ dissect_gtpv2_pdn_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, prot
static void
dissect_gtpv2_tra_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type _U_, guint8 instance _U_)
{
- proto_item *trigg, *msc_server, *mgw, *sgsn, *ggsn, *bm_sc, *sgw_mme, *ne_types;
proto_tree *trigg_tree, *msc_server_tree, *mgw_tree, *sgsn_tree, *ggsn_tree;
proto_tree *bm_sc_tree, *sgw_mme_tree, *ne_types_tree;
- proto_item *interfaces, *imsc_server, *lmgw, *lsgsn, *lggsn, *lrnc, *lbm_sc, *lmme, *lsgw, *lpdn_gw, *lenb;
proto_tree *interfaces_tree, *imsc_server_tree, *lmgw_tree, *lsgsn_tree, *lggsn_tree, *lrnc_tree;
proto_tree *lbm_sc_tree, *lmme_tree, *lsgw_tree, *lpdn_gw_tree, *lenb_tree;
@@ -2475,27 +2466,20 @@ dissect_gtpv2_tra_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, prot
offset += 3;
/* Triggering Events, put all into a new tree called trigging_tree */
- trigg = proto_tree_add_text(tree, tvb, offset, 8, "Trigging Events");
- trigg_tree = proto_item_add_subtree(trigg, ett_gtpv2_tra_info_trigg);
+ trigg_tree = proto_tree_add_subtree(tree, tvb, offset, 8, ett_gtpv2_tra_info_trigg, NULL, "Trigging Events");
/* Create all subtrees */
- msc_server = proto_tree_add_text(trigg_tree, tvb, offset, 2, "MSC Server");
- msc_server_tree = proto_item_add_subtree(msc_server, ett_gtpv2_tra_info_trigg_msc_server);
+ msc_server_tree = proto_tree_add_subtree(trigg_tree, tvb, offset, 2, ett_gtpv2_tra_info_trigg_msc_server, NULL, "MSC Server");
- mgw = proto_tree_add_text(trigg_tree, tvb, offset + 2, 1, "MGW");
- mgw_tree = proto_item_add_subtree(mgw, ett_gtpv2_tra_info_trigg_mgw);
+ mgw_tree = proto_tree_add_subtree(trigg_tree, tvb, offset + 2, 1, ett_gtpv2_tra_info_trigg_mgw, NULL, "MGW");
- sgsn = proto_tree_add_text(trigg_tree, tvb, offset + 3, 2, "SGSN");
- sgsn_tree = proto_item_add_subtree(sgsn, ett_gtpv2_tra_info_trigg_sgsn);
+ sgsn_tree = proto_tree_add_subtree(trigg_tree, tvb, offset + 3, 2, ett_gtpv2_tra_info_trigg_sgsn, NULL, "SGSN");
- ggsn = proto_tree_add_text(trigg_tree, tvb, offset + 5, 1, "GGSN");
- ggsn_tree = proto_item_add_subtree(ggsn, ett_gtpv2_tra_info_trigg_ggsn);
+ ggsn_tree = proto_tree_add_subtree(trigg_tree, tvb, offset + 5, 1, ett_gtpv2_tra_info_trigg_ggsn, NULL, "GGSN");
- bm_sc = proto_tree_add_text(trigg_tree, tvb, offset + 6, 1, "BM-SC");
- bm_sc_tree = proto_item_add_subtree(bm_sc, ett_gtpv2_tra_info_trigg_bm_sc);
+ bm_sc_tree = proto_tree_add_subtree(trigg_tree, tvb, offset + 6, 1, ett_gtpv2_tra_info_trigg_bm_sc, NULL, "BM-SC");
- sgw_mme = proto_tree_add_text(trigg_tree, tvb, offset + 7, 1, "SGW MME");
- sgw_mme_tree = proto_item_add_subtree(sgw_mme, ett_gtpv2_tra_info_trigg_sgw_mme);
+ sgw_mme_tree = proto_tree_add_subtree(trigg_tree, tvb, offset + 7, 1, ett_gtpv2_tra_info_trigg_sgw_mme, NULL, "SGW MME");
/* MSC Server - 2 octets */
proto_tree_add_item(msc_server_tree, hf_gtpv2_tra_info_msc_momt_calls, tvb, offset, 1, ENC_BIG_ENDIAN);
@@ -2547,8 +2531,7 @@ dissect_gtpv2_tra_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, prot
offset += 1;
/* Create NE Types subtree */
- ne_types = proto_tree_add_text(tree, tvb, offset, 2, "List of NE Types");
- ne_types_tree = proto_item_add_subtree(ne_types, ett_gtpv2_tra_info_ne_types);
+ ne_types_tree = proto_tree_add_subtree(tree, tvb, offset, 2, ett_gtpv2_tra_info_ne_types, NULL, "List of NE Types");
/* List of NE Types */
@@ -2580,39 +2563,28 @@ dissect_gtpv2_tra_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, prot
offset += tdl;
/* Set up subtree interfaces and put all interfaces under it */
- interfaces = proto_tree_add_text(tree, tvb, offset, 12, "List of Interfaces");
- interfaces_tree = proto_item_add_subtree(interfaces, ett_gtpv2_tra_info_interfaces);
+ interfaces_tree = proto_tree_add_subtree(tree, tvb, offset, 12, ett_gtpv2_tra_info_interfaces, NULL, "List of Interfaces");
/* Create all subtrees */
- imsc_server = proto_tree_add_text(interfaces_tree, tvb, offset, 2, "MSC Server");
- imsc_server_tree = proto_item_add_subtree(imsc_server, ett_gtpv2_tra_info_interfaces_imsc_server);
+ imsc_server_tree = proto_tree_add_subtree(interfaces_tree, tvb, offset, 2, ett_gtpv2_tra_info_interfaces_imsc_server, NULL, "MSC Server");
- lmgw = proto_tree_add_text(interfaces_tree, tvb, offset + 2, 1, "MGW");
- lmgw_tree = proto_item_add_subtree(lmgw, ett_gtpv2_tra_info_interfaces_lmgw);
+ lmgw_tree = proto_tree_add_subtree(interfaces_tree, tvb, offset + 2, 1, ett_gtpv2_tra_info_interfaces_lmgw, NULL, "MGW");
- lsgsn = proto_tree_add_text(interfaces_tree, tvb, offset + 3, 2, "SGSN");
- lsgsn_tree = proto_item_add_subtree(lsgsn, ett_gtpv2_tra_info_interfaces_lsgsn);
+ lsgsn_tree = proto_tree_add_subtree(interfaces_tree, tvb, offset + 3, 2, ett_gtpv2_tra_info_interfaces_lsgsn, NULL, "SGSN");
- lggsn = proto_tree_add_text(interfaces_tree, tvb, offset + 5, 1, "GGSN");
- lggsn_tree = proto_item_add_subtree(lggsn, ett_gtpv2_tra_info_interfaces_lggsn);
+ lggsn_tree = proto_tree_add_subtree(interfaces_tree, tvb, offset + 5, 1, ett_gtpv2_tra_info_interfaces_lggsn, NULL, "GGSN");
- lrnc = proto_tree_add_text(interfaces_tree, tvb, offset + 6, 1, "RNC");
- lrnc_tree = proto_item_add_subtree(lrnc, ett_gtpv2_tra_info_interfaces_lrnc);
+ lrnc_tree = proto_tree_add_subtree(interfaces_tree, tvb, offset + 6, 1, ett_gtpv2_tra_info_interfaces_lrnc, NULL, "RNC");
- lbm_sc = proto_tree_add_text(interfaces_tree, tvb, offset + 7, 1, "BM-SC");
- lbm_sc_tree = proto_item_add_subtree(lbm_sc, ett_gtpv2_tra_info_interfaces_lbm_sc);
+ lbm_sc_tree = proto_tree_add_subtree(interfaces_tree, tvb, offset + 7, 1, ett_gtpv2_tra_info_interfaces_lbm_sc, NULL, "BM-SC");
- lmme = proto_tree_add_text(interfaces_tree, tvb, offset + 8, 1, "MME");
- lmme_tree = proto_item_add_subtree(lmme, ett_gtpv2_tra_info_interfaces_lmme);
+ lmme_tree = proto_tree_add_subtree(interfaces_tree, tvb, offset + 8, 1, ett_gtpv2_tra_info_interfaces_lmme, NULL, "MME");
- lsgw = proto_tree_add_text(interfaces_tree, tvb, offset + 9, 1, "SGW");
- lsgw_tree = proto_item_add_subtree(lsgw, ett_gtpv2_tra_info_interfaces_lsgw);
+ lsgw_tree = proto_tree_add_subtree(interfaces_tree, tvb, offset + 9, 1,ett_gtpv2_tra_info_interfaces_lsgw, NULL, "SGW");
- lpdn_gw = proto_tree_add_text(interfaces_tree, tvb, offset + 10, 1, "PDN GW");
- lpdn_gw_tree = proto_item_add_subtree(lpdn_gw, ett_gtpv2_tra_info_interfaces_lpdn_gw);
+ lpdn_gw_tree = proto_tree_add_subtree(interfaces_tree, tvb, offset + 10, 1, ett_gtpv2_tra_info_interfaces_lpdn_gw, NULL, "PDN GW");
- lenb = proto_tree_add_text(interfaces_tree, tvb, offset + 11, 1, "eNB");
- lenb_tree = proto_item_add_subtree(lenb, ett_gtpv2_tra_info_interfaces_lpdn_lenb);
+ lenb_tree = proto_tree_add_subtree(interfaces_tree, tvb, offset + 11, 1, ett_gtpv2_tra_info_interfaces_lpdn_lenb, NULL, "eNB");
/* MSC Server - 2 octests */
proto_tree_add_item(imsc_server_tree, hf_gtpv2_tra_info_lmsc_a, tvb, offset, 1, ENC_BIG_ENDIAN);
@@ -2814,13 +2786,12 @@ static const value_string gtpv2_mm_context_unipa_vals[] = {
static int
dissect_gtpv2_authentication_triplets(tvbuff_t *tvb, proto_tree *tree, int offset, guint8 num_triplet)
{
- proto_item *auth_tri_item;
proto_tree *auth_tri_tree;
int i;
for (i = 0; i < num_triplet; i++) {
- auth_tri_item = proto_tree_add_text(tree, tvb, offset, 0, "Authentication Triplet %u", i);
- auth_tri_tree = proto_item_add_subtree(auth_tri_item, ett_gtpv2_mm_context_auth_tri);
+ auth_tri_tree = proto_tree_add_subtree_format(tree, tvb, offset, 0,
+ ett_gtpv2_mm_context_auth_tri, NULL, "Authentication Triplet %u", i);
/*
* Figure 8.38-8: Authentication Quintuplet
* 1 to 16 RAND
@@ -2842,14 +2813,13 @@ dissect_gtpv2_authentication_triplets(tvbuff_t *tvb, proto_tree *tree, int offse
static int
dissect_gtpv2_authentication_quintuplets(tvbuff_t *tvb, proto_tree *tree, int offset, guint8 nr_qui)
{
- proto_item *auth_qui_item;
proto_tree *auth_qui_tree;
int i;
guint8 xres_len, autn_len;
for (i = 0; i < nr_qui; i++) {
- auth_qui_item = proto_tree_add_text(tree, tvb, offset, 0, "Authentication Quintuplet %u", i);
- auth_qui_tree = proto_item_add_subtree(auth_qui_item, ett_gtpv2_mm_context_auth_qui);
+ auth_qui_tree = proto_tree_add_subtree_format(tree, tvb, offset, 0,
+ ett_gtpv2_mm_context_auth_qui, NULL, "Authentication Quintuplet %u", i);
/*
* Figure 8.38-8: Authentication Quintuplet
* 1 to 16 RAND
@@ -2885,14 +2855,13 @@ dissect_gtpv2_authentication_quintuplets(tvbuff_t *tvb, proto_tree *tree, int of
static int
dissect_gtpv2_authentication_quadruplets(tvbuff_t *tvb, proto_tree *tree, int offset, guint8 nr_qui)
{
- proto_item *auth_qua_item;
proto_tree *auth_qua_tree;
guint8 tmp;
int i;
for (i = 0; i < nr_qui; i++) {
- auth_qua_item = proto_tree_add_text(tree, tvb, offset, 0, "Authentication Quadruplet");
- auth_qua_tree = proto_item_add_subtree(auth_qua_item, ett_gtpv2_mm_context_auth_qua);
+ auth_qua_tree = proto_tree_add_subtree(tree, tvb, offset, 0,
+ ett_gtpv2_mm_context_auth_qua, NULL, "Authentication Quadruplet");
proto_tree_add_text(auth_qua_tree, tvb, offset, 16, "RAND: %s",
tvb_bytes_to_ep_str(tvb, offset, 16));
@@ -2926,7 +2895,6 @@ static const value_string gtpv2_mm_context_higher_br_16mb_flg_vals[] = {
static int
dissect_gtpv2_mm_context_common_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, guint8 samb_ri, guint8 uamb_ri)
{
- proto_item *net_cap_item, *msnt_cap_item;
proto_tree *net_cap_tree, *msnt_cap_tree;
guint8 ue_net_cap_len, ms_net_cap_len, mei_len;
@@ -2972,8 +2940,8 @@ dissect_gtpv2_mm_context_common_data(tvbuff_t *tvb, packet_info *pinfo, proto_tr
* If Length of UE Network Capability is zero, then the UE Network Capability parameter
* shall not be present.
*/
- net_cap_item = proto_tree_add_text(tree, tvb, offset, ue_net_cap_len, "UE Network Capability");
- net_cap_tree = proto_item_add_subtree(net_cap_item, ett_gtpv2_mm_context_net_cap);
+ net_cap_tree = proto_tree_add_subtree(tree, tvb, offset, ue_net_cap_len,
+ ett_gtpv2_mm_context_net_cap, NULL, "UE Network Capability");
offset += de_emm_ue_net_cap(tvb, net_cap_tree, pinfo, offset, ue_net_cap_len, NULL, 0);
}
/* k+1 Length of MS Network Capability */
@@ -2985,8 +2953,8 @@ dissect_gtpv2_mm_context_common_data(tvbuff_t *tvb, packet_info *pinfo, proto_tr
* If Length of MS Network Capability is zero, then the MS Network Capability parameter shall not be present.
*/
if (ms_net_cap_len) {
- msnt_cap_item = proto_tree_add_text(tree, tvb, offset, ms_net_cap_len, "MS network capability");
- msnt_cap_tree = proto_item_add_subtree(msnt_cap_item, ett_gtpv2_ms_network_capability);
+ msnt_cap_tree = proto_tree_add_subtree(tree, tvb, offset, ms_net_cap_len,
+ ett_gtpv2_ms_network_capability, NULL, "MS network capability");
offset += de_gmm_ms_net_cap(tvb, msnt_cap_tree, pinfo, offset, ms_net_cap_len, NULL, 0);
}
/* m+1 Length of Mobile Equipment Identity (MEI) */
@@ -3007,11 +2975,9 @@ dissect_gtpv2_mm_context_common_data(tvbuff_t *tvb, packet_info *pinfo, proto_tr
static int
dissect_gtpv2_access_restriction_data(tvbuff_t *tvb, proto_tree *tree, int offset)
{
- proto_item *accrstdata_item;
proto_tree *accrstdata_tree;
- accrstdata_item = proto_tree_add_text(tree, tvb, offset, 1, "Access restriction data");
- accrstdata_tree = proto_item_add_subtree(accrstdata_item, ett_gtpv2_access_rest_data);
+ accrstdata_tree = proto_tree_add_subtree(tree, tvb, offset, 1, ett_gtpv2_access_rest_data, NULL, "Access restriction data");
/* Spare HNNA ENA INA GANA GENA UNA */
proto_tree_add_bits_item(accrstdata_tree, hf_gtpv2_spare_bits, tvb, (offset << 3), 2, ENC_BIG_ENDIAN);
proto_tree_add_item(accrstdata_tree, hf_gtpv2_hnna, tvb, offset, 1, ENC_BIG_ENDIAN);
@@ -3031,14 +2997,12 @@ dissect_gtpv2_access_restriction_data(tvbuff_t *tvb, proto_tree *tree, int offse
static void
dissect_gtpv2_mm_context_gsm_t(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
{
- proto_item *flag;
proto_tree *flag_tree;
int offset;
guint8 oct, drxi, num_triplet, uamb_ri, samb_ri;
offset = 0;
- flag = proto_tree_add_text(tree, tvb, offset, 3, "MM Context flags");
- flag_tree = proto_item_add_subtree(flag, ett_gtpv2_mm_context_flag);
+ flag_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_gtpv2_mm_context_flag, NULL, "MM Context flags");
/* Octet 5 */
/* Security Mode | Spare | DRXI | CKSN */
@@ -3095,14 +3059,12 @@ dissect_gtpv2_mm_context_gsm_t(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr
static void
dissect_gtpv2_mm_context_utms_cq(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
{
- proto_item *flag;
proto_tree *flag_tree;
int offset;
guint8 oct, drxi, nr_qui, uamb_ri, samb_ri, vdp_len, hbr_len;
offset = 0;
- flag = proto_tree_add_text(tree, tvb, offset, 3, "MM Context flags");
- flag_tree = proto_item_add_subtree(flag, ett_gtpv2_mm_context_flag);
+ flag_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_gtpv2_mm_context_flag, NULL, "MM Context flags");
/* Octet 5 */
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_sm, tvb, offset, 1, ENC_BIG_ENDIAN);
@@ -3200,14 +3162,12 @@ dissect_gtpv2_mm_context_utms_cq(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tr
static void
dissect_gtpv2_mm_context_gsm_cq(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
{
- proto_item *flag;
proto_tree *flag_tree;
int offset;
guint8 oct, drxi, nr_qui, uamb_ri, samb_ri, vdp_len, hbr_len;
offset = 0;
- flag = proto_tree_add_text(tree, tvb, offset, 3, "MM Context flags");
- flag_tree = proto_item_add_subtree(flag, ett_gtpv2_mm_context_flag);
+ flag_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_gtpv2_mm_context_flag, NULL, "MM Context flags");
/* Octet 5 */
proto_tree_add_item(flag_tree, hf_gtpv2_mm_context_sm, tvb, offset, 1, ENC_BIG_ENDIAN);
@@ -3301,14 +3261,12 @@ dissect_gtpv2_mm_context_gsm_cq(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tre
static void
dissect_gtpv2_mm_context_utms_q(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
{
- proto_item *flag;
proto_tree *flag_tree;
int offset;
guint8 oct, drxi, nr_qui, uamb_ri, samb_ri, vdp_len, hbr_len;
offset = 0;
- flag = proto_tree_add_text(tree, tvb, offset, 3, "MM Context flags");
- flag_tree = proto_item_add_subtree(flag, ett_gtpv2_mm_context_flag);
+ flag_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_gtpv2_mm_context_flag, NULL, "MM Context flags");
/* Octet 5 */
/* Security Mode Spare DRXI KSI */
@@ -3409,15 +3367,14 @@ dissect_gtpv2_mm_context_utms_q(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tre
static void
dissect_gtpv2_mm_context_eps_qq(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, guint8 instance _U_)
{
- proto_item *flag_item, *qua_item, *qui_item;
+ proto_item *qua_item, *qui_item;
proto_tree *flag_tree, *qua_tree, *qui_tree;
gint offset;
guint8 tmp, nhi, drxi, nr_qua, nr_qui, uamb_ri, samb_ri, vdp_len;
offset = 0;
- flag_item = proto_tree_add_text(tree, tvb, offset, 3, "MM Context flags");
- flag_tree = proto_item_add_subtree(flag_item, ett_gtpv2_mm_context_flag);
+ flag_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_gtpv2_mm_context_flag, NULL, "MM Context flags");
/* Octet 5
* Bits
@@ -3479,7 +3436,7 @@ dissect_gtpv2_mm_context_eps_qq(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tre
proto_tree_add_item(tree, hf_gtpv2_mm_context_kasme, tvb, offset, 32, ENC_NA);
offset += 32;
- qua_item = proto_tree_add_text(tree, tvb, offset, 0, "Authentication Quadruplets %u", nr_qua);
+ qua_item = proto_tree_add_text(tree, tvb, offset, 0, "Authentication Quadruplets: %u", nr_qua);
if ( nr_qua ){
qua_tree = proto_item_add_subtree(qua_item, ett_gtpv2_qua);
offset = dissect_gtpv2_authentication_quadruplets(tvb, qua_tree, offset, nr_qua);
@@ -3487,7 +3444,7 @@ dissect_gtpv2_mm_context_eps_qq(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tre
PROTO_ITEM_SET_GENERATED(qua_item);
}
- qui_item = proto_tree_add_text(tree, tvb, offset, 0, "Authentication Quintuplets %u", nr_qui);
+ qui_item = proto_tree_add_text(tree, tvb, offset, 0, "Authentication Quintuplets: %u", nr_qui);
if (nr_qui) {
qui_tree = proto_item_add_subtree(qui_item, ett_gtpv2_qui);
offset = dissect_gtpv2_authentication_quintuplets(tvb, qui_tree, offset, nr_qui);
@@ -3547,14 +3504,12 @@ dissect_gtpv2_mm_context_eps_qq(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tre
static void
dissect_gtpv2_mm_context_utms_qq(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length _U_, guint8 message_type _U_, guint8 instance _U_)
{
- proto_item *flag;
proto_tree *flag_tree;
guint32 offset;
guint8 tmp, drxi, nr_qua, nr_qui, uamb_ri, samb_ri, vdp_length;
offset = 0;
- flag = proto_tree_add_text(tree, tvb, offset, 3, "MM Context flags");
- flag_tree = proto_item_add_subtree(flag, ett_gtpv2_mm_context_flag);
+ flag_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_gtpv2_mm_context_flag, NULL, "MM Context flags");
/* Octet 5
* Security Mode Spare DRXI KSIASME
@@ -3842,7 +3797,6 @@ static void
dissect_gtpv2_F_container(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type, guint8 instance _U_)
{
tvbuff_t *new_tvb;
- proto_item *bss_item;
proto_tree *sub_tree;
int offset = 0;
guint8 container_type;
@@ -3860,8 +3814,7 @@ dissect_gtpv2_F_container(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, p
switch (container_type) {
case 2:
/* BSS container */
- bss_item = proto_tree_add_text(tree, tvb, offset, length, "BSS container");
- sub_tree = proto_item_add_subtree(bss_item, ett_gtpv2_bss_con);
+ sub_tree = proto_tree_add_subtree(tree, tvb, offset, length, ett_gtpv2_bss_con, NULL, "BSS container");
/* The flags PFI, RP, SAPI and PHX in octet 6 indicate the corresponding type of paratemer */
proto_tree_add_item(sub_tree, hf_gtpv2_bss_container_phx, tvb, offset, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(sub_tree, hf_gtpv2_bss_con_sapi_flg, tvb, offset, 1, ENC_BIG_ENDIAN);
@@ -4898,7 +4851,7 @@ dissect_gtpv2_add_mm_cont_for_srvcc(tvbuff_t *tvb, packet_info *pinfo _U_, proto
elm_len = tvb_get_guint8(tvb, offset);
proto_tree_add_item(tree, hf_gtpv2_len_ms_classmark2, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
- ms_cm_item = proto_tree_add_text(tree, tvb, offset, elm_len, "Mobile Station Classmark 2 %s", tvb_bytes_to_ep_str(tvb, offset, elm_len));
+ ms_cm_item = proto_tree_add_text(tree, tvb, offset, elm_len, "Mobile Station Classmark2: %s", tvb_bytes_to_ep_str(tvb, offset, elm_len));
ms_cm_tree = proto_item_add_subtree(ms_cm_item, ett_gtpv2_ms_mark);
/* Mobile Station Classmark 2 */
de_ms_cm_2(tvb, ms_cm_tree, pinfo, offset, elm_len, NULL, 0);
@@ -4908,7 +4861,7 @@ dissect_gtpv2_add_mm_cont_for_srvcc(tvbuff_t *tvb, packet_info *pinfo _U_, proto
elm_len = tvb_get_guint8(tvb, offset);
proto_tree_add_item(tree, hf_gtpv2_len_ms_classmark3, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
- ms_cm_item = proto_tree_add_text(tree, tvb, offset, elm_len, "Mobile Station Classmark3 %s", tvb_bytes_to_ep_str(tvb, offset, elm_len));
+ ms_cm_item = proto_tree_add_text(tree, tvb, offset, elm_len, "Mobile Station Classmark3: %s", tvb_bytes_to_ep_str(tvb, offset, elm_len));
ms_cm_tree = proto_item_add_subtree(ms_cm_item, ett_gtpv2_ms_mark);
/* Mobile Station Classmark 3 */
de_ms_cm_3(tvb, ms_cm_tree, pinfo, offset, elm_len, NULL, 0);
@@ -4918,7 +4871,7 @@ dissect_gtpv2_add_mm_cont_for_srvcc(tvbuff_t *tvb, packet_info *pinfo _U_, proto
elm_len = tvb_get_guint8(tvb, offset);
proto_tree_add_item(tree, hf_gtpv2_len_supp_codec_list, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
- ms_cm_item = proto_tree_add_text(tree, tvb, offset, elm_len, "Supported Codec List %s", tvb_bytes_to_ep_str(tvb, offset, elm_len));
+ ms_cm_item = proto_tree_add_text(tree, tvb, offset, elm_len, "Supported Codec List: %s", tvb_bytes_to_ep_str(tvb, offset, elm_len));
ms_cm_tree = proto_item_add_subtree(ms_cm_item, ett_gtpv2_supp_codec_list);
/* Supported Codec List */
de_sup_codec_list(tvb, ms_cm_tree, pinfo, offset, elm_len, NULL, 0);
@@ -5227,9 +5180,8 @@ dissect_gtpv2_ie_common(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree,
type = tvb_get_guint8(tvb, offset);
length = tvb_get_ntohs(tvb, offset + 1);
- ti = proto_tree_add_text(tree, tvb, offset, 4 + length, "%s : ",
+ ie_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4 + length, ett_gtpv2_ie, &ti, "%s : ",
val_to_str_ext_const(type, &gtpv2_element_type_vals_ext, "Unknown"));
- ie_tree = proto_item_add_subtree(ti, ett_gtpv2_ie);
/* Octet 1 */
proto_tree_add_item(ie_tree, hf_gtpv2_ie, tvb, offset, 1, ENC_BIG_ENDIAN);
@@ -5270,7 +5222,7 @@ static void
dissect_gtpv2(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
{
proto_tree *gtpv2_tree, *flags_tree;
- proto_item *ti, *tf;
+ proto_item *tf;
guint8 message_type, t_flag, p_flag;
int offset = 0;
guint16 msg_length;
@@ -5291,9 +5243,8 @@ dissect_gtpv2(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
proto_tree_add_item(tree, proto_gtpv2, tvb, offset, msg_length + 4, ENC_NA);
if (tree) {
- ti = proto_tree_add_text(tree, tvb, offset, msg_length + 4, "%s",
+ gtpv2_tree = proto_tree_add_subtree(tree, tvb, offset, msg_length + 4, ett_gtpv2, NULL,
val_to_str_ext_const(message_type, &gtpv2_message_type_vals_ext, "Unknown"));
- gtpv2_tree = proto_item_add_subtree(ti, ett_gtpv2);
/* Control Plane GTP uses a variable length header. Control Plane GTP header
* length shall be a multiple of 4 octets.
diff --git a/epan/dissectors/packet-gvcp.c b/epan/dissectors/packet-gvcp.c
index e98afd594a..dc35b7d78f 100644
--- a/epan/dissectors/packet-gvcp.c
+++ b/epan/dissectors/packet-gvcp.c
@@ -1298,12 +1298,10 @@ static void dissect_forceip_cmd(proto_tree *gvcp_telegram_tree, tvbuff_t *tvb, p
const gint mask_offset = startoffset + 36;
const gint gateway_offset = startoffset + 52;
- proto_item *item = NULL;
-
if (gvcp_telegram_tree != NULL)
{
- item = proto_tree_add_text(gvcp_telegram_tree, tvb, startoffset, length, "FORCEIP_CMD Options");
- gvcp_telegram_tree = proto_item_add_subtree(item, ett_gvcp_payload_cmd);
+ gvcp_telegram_tree = proto_tree_add_subtree(gvcp_telegram_tree, tvb, startoffset, length,
+ ett_gvcp_payload_cmd, NULL, "FORCEIP_CMD Options");
proto_tree_add_item(gvcp_telegram_tree, hf_gvcp_forceip_mac_address, tvb, mac_offset, 6, ENC_NA);
proto_tree_add_item(gvcp_telegram_tree, hf_gvcp_forceip_static_IP, tvb, ip_offset, 4, ENC_BIG_ENDIAN);
@@ -1323,7 +1321,6 @@ static void dissect_packetresend_cmd(proto_tree *gvcp_telegram_tree, tvbuff_t *t
guint64 block_id = 0;
guint32 first_packet = 0;
guint32 last_packet = 0;
- proto_item *item = NULL;
gint offset;
offset = startoffset;
@@ -1360,8 +1357,8 @@ static void dissect_packetresend_cmd(proto_tree *gvcp_telegram_tree, tvbuff_t *t
if (gvcp_telegram_tree != NULL)
{
/* Command header/tree */
- item = proto_tree_add_text(gvcp_telegram_tree, tvb, startoffset, length, "PACKETRESEND_CMD Values");
- gvcp_telegram_tree = proto_item_add_subtree(item, ett_gvcp_payload_cmd);
+ gvcp_telegram_tree = proto_tree_add_subtree(gvcp_telegram_tree, tvb, startoffset, length,
+ ett_gvcp_payload_cmd, NULL, "PACKETRESEND_CMD Values");
/* Stream channel */
proto_tree_add_item(gvcp_telegram_tree, hf_gvcp_resendcmd_stream_channel_index, tvb, offset, 2, ENC_BIG_ENDIAN);
@@ -1425,8 +1422,8 @@ static void dissect_readreg_cmd(proto_tree *gvcp_telegram_tree, tvbuff_t *tvb, p
{
if (num_registers > 1)
{
- item = proto_tree_add_text(gvcp_telegram_tree, tvb, startoffset, length, "READREG_CMD Address List");
- gvcp_telegram_tree = proto_item_add_subtree(item, ett_gvcp_payload_cmd);
+ gvcp_telegram_tree = proto_tree_add_subtree(gvcp_telegram_tree, tvb, startoffset, length,
+ ett_gvcp_payload_cmd, &item, "READREG_CMD Address List");
}
}
@@ -1530,8 +1527,8 @@ static void dissect_writereg_cmd(proto_tree *gvcp_telegram_tree, tvbuff_t *tvb,
{
if (num_registers > 1)
{
- item = proto_tree_add_text(gvcp_telegram_tree, tvb, startoffset, length, "WRITEREG_CMD Address List");
- gvcp_telegram_tree = proto_item_add_subtree(item, ett_gvcp_payload_cmd);
+ gvcp_telegram_tree = proto_tree_add_subtree(gvcp_telegram_tree, tvb, startoffset, length,
+ ett_gvcp_payload_cmd, &item, "WRITEREG_CMD Address List");
}
for (i = 0; i < num_registers; i++)
@@ -1671,7 +1668,6 @@ static void dissect_event_cmd(proto_tree *gvcp_telegram_tree, tvbuff_t *tvb, pac
{
gint i;
gint event_count = 0;
- proto_item *item = NULL;
/* Compute event count based on data length */
if (extendedblockids == 0)
@@ -1687,8 +1683,8 @@ static void dissect_event_cmd(proto_tree *gvcp_telegram_tree, tvbuff_t *tvb, pac
if (event_count > 1)
{
- item = proto_tree_add_text(gvcp_telegram_tree, tvb, offset, length, "EVENT_CMD Event List");
- gvcp_telegram_tree = proto_item_add_subtree(item, ett_gvcp_payload_cmd);
+ gvcp_telegram_tree = proto_tree_add_subtree(gvcp_telegram_tree, tvb, offset, length,
+ ett_gvcp_payload_cmd, NULL, "EVENT_CMD Event List");
}
@@ -1859,8 +1855,8 @@ static void dissect_discovery_ack(proto_tree *gvcp_telegram_tree, tvbuff_t *tvb,
if (gvcp_telegram_tree != NULL)
{
- item = proto_tree_add_text(gvcp_telegram_tree, tvb, offset, length, "DISCOVERY_ACK Payload");
- gvcp_telegram_tree = proto_item_add_subtree(item, ett_gvcp_payload_cmd);
+ gvcp_telegram_tree = proto_tree_add_subtree(gvcp_telegram_tree, tvb, offset, length,
+ ett_gvcp_payload_cmd, NULL, "DISCOVERY_ACK Payload");
/* Version */
item = proto_tree_add_item(gvcp_telegram_tree, hf_gvcp_spec_version, tvb, offset, 4, ENC_BIG_ENDIAN);
@@ -1922,7 +1918,6 @@ static void dissect_discovery_ack(proto_tree *gvcp_telegram_tree, tvbuff_t *tvb,
static void dissect_readreg_ack(proto_tree *gvcp_telegram_tree, tvbuff_t *tvb, packet_info *pinfo, gint startoffset, gint length, gvcp_transaction_t *gvcp_trans)
{
guint i;
- proto_item *item = NULL;
gboolean is_custom_register = FALSE;
const gchar* address_string = NULL;
guint num_registers;
@@ -1961,8 +1956,8 @@ static void dissect_readreg_ack(proto_tree *gvcp_telegram_tree, tvbuff_t *tvb, p
/* Subtree initialization for Payload Data: READREG_ACK */
if (num_registers > 1)
{
- item = proto_tree_add_text(gvcp_telegram_tree, tvb, offset, length, "Register Value List");
- gvcp_telegram_tree = proto_item_add_subtree(item, ett_gvcp_payload_ack);
+ gvcp_telegram_tree = proto_tree_add_subtree(gvcp_telegram_tree, tvb, offset, length,
+ ett_gvcp_payload_ack, NULL, "Register Value List");
}
for (i = 0; i < num_registers; i++)
@@ -2096,7 +2091,7 @@ static void dissect_writemem_ack(proto_tree *gvcp_telegram_tree, tvbuff_t *tvb,
if (gvcp_telegram_tree != NULL)
{
- proto_item *item = NULL;
+ proto_item *item;
if (gvcp_trans && gvcp_trans->req_frame)
{
@@ -2104,8 +2099,8 @@ static void dissect_writemem_ack(proto_tree *gvcp_telegram_tree, tvbuff_t *tvb,
PROTO_ITEM_SET_GENERATED(item);
}
- item = proto_tree_add_text(gvcp_telegram_tree, tvb, startoffset, length, "Payload Data: WRITEMEM_ACK");
- gvcp_telegram_tree = proto_item_add_subtree(item, ett_gvcp_payload_cmd);
+ gvcp_telegram_tree = proto_tree_add_subtree(gvcp_telegram_tree, tvb, startoffset, length,
+ ett_gvcp_payload_cmd, NULL, "Payload Data: WRITEMEM_ACK");
proto_tree_add_item(gvcp_telegram_tree, hf_gvcp_writememcmd_data_index, tvb, (startoffset +2), 2, ENC_BIG_ENDIAN);
}
}
@@ -2119,10 +2114,8 @@ static void dissect_pending_ack(proto_tree *gvcp_telegram_tree, tvbuff_t *tvb, p
{
if (gvcp_telegram_tree != NULL)
{
- proto_item *item = NULL;
-
- item = proto_tree_add_text(gvcp_telegram_tree, tvb, startoffset, length, "Payload Data: PENDING_ACK");
- gvcp_telegram_tree = proto_item_add_subtree(item, ett_gvcp_payload_cmd);
+ gvcp_telegram_tree = proto_tree_add_subtree(gvcp_telegram_tree, tvb, startoffset, length,
+ ett_gvcp_payload_cmd, NULL, "Payload Data: PENDING_ACK");
proto_tree_add_item(gvcp_telegram_tree, hf_gvcp_time_to_completion, tvb, (startoffset + 2), 2, ENC_BIG_ENDIAN);
}
}
@@ -2190,8 +2183,8 @@ static int dissect_gvcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, voi
/* Add the Command name string to the Info column */
col_append_fstr(pinfo->cinfo, COL_INFO, "> %s ", command_string);
- item = proto_tree_add_text(gvcp_tree, tvb, offset, 8, "Command Header: %s", command_string);
- gvcp_tree = proto_item_add_subtree(item, ett_gvcp_cmd);
+ gvcp_tree = proto_tree_add_subtree_format(gvcp_tree, tvb, offset, 8,
+ ett_gvcp_cmd, NULL, "Command Header: %s", command_string);
/* Add the message key code: */
proto_tree_add_item(gvcp_tree, hf_gvcp_message_key_code, tvb, offset, 1, ENC_BIG_ENDIAN);
@@ -2232,8 +2225,8 @@ static int dissect_gvcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, voi
col_append_fstr(pinfo->cinfo, COL_INFO, "< %s %s",
ack_string, val_to_str(status, statusnames_short, "Unknown status (0x%04X)"));
- item = proto_tree_add_text(gvcp_tree, tvb, offset+2, tvb_captured_length(tvb)-2, "Acknowledge Header: %s", ack_string);
- gvcp_tree = proto_item_add_subtree(item, ett_gvcp_ack);
+ gvcp_tree = proto_tree_add_subtree_format(gvcp_tree, tvb, offset+2, tvb_captured_length(tvb)-2,
+ ett_gvcp_ack, NULL, "Acknowledge Header: %s", ack_string);
/* Add the status: */
proto_tree_add_item(gvcp_tree, hf_gvcp_status, tvb, offset, 2, ENC_BIG_ENDIAN);