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>
This commit is contained in:
Michael Mann 2014-06-26 20:33:02 -04:00
parent e1a8c9599f
commit fe4b7ee625
23 changed files with 812 additions and 1130 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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)
{

View File

@ -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 */

View File

@ -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,

View File

@ -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,

View File

@ -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);
}

View File

@ -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,

View File

@ -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;

View File

@ -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,

View File

@ -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);

View File

@ -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:

View File

@ -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;

View File

@ -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"));

View File

@ -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;

View File

@ -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){

View File

@ -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';

View File

@ -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

View File

@ -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)
{

View File

@ -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,

File diff suppressed because it is too large Load Diff

View File

@ -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.

View File

@ -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);