summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2009-04-03 16:19:12 +0000
committerAnders Broman <anders.broman@ericsson.com>2009-04-03 16:19:12 +0000
commit13282b7a7cf47ae972d54adab3ec60f8735e7625 (patch)
treec267d087c8545b1a193d02483347273675fd2395
parent00043fb64e6421389a722161294ecf16728c219f (diff)
downloadwireshark-13282b7a7cf47ae972d54adab3ec60f8735e7625.tar.gz
Add value strings and code clenup.
svn path=/trunk/; revision=27944
-rw-r--r--epan/dissectors/packet-gsm_a_bssmap.c241
-rw-r--r--epan/dissectors/packet-gsm_a_common.c168
-rw-r--r--epan/dissectors/packet-gsm_a_dtap.c361
3 files changed, 279 insertions, 491 deletions
diff --git a/epan/dissectors/packet-gsm_a_bssmap.c b/epan/dissectors/packet-gsm_a_bssmap.c
index 98478c8d05..97485fd034 100644
--- a/epan/dissectors/packet-gsm_a_bssmap.c
+++ b/epan/dissectors/packet-gsm_a_bssmap.c
@@ -348,7 +348,6 @@ static const value_string bssmap_location_information_vals[] = {
{ 0, NULL}
};
-
/* Initialize the protocol and registered fields */
static int proto_a_bssmap = -1;
@@ -639,12 +638,7 @@ be_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_
oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Extension: %s",
- a_bigbuf,
- (oct & 0x80) ? "extended" : "not extended");
+ proto_tree_add_item(tree, hf_gsm_a_extension, tvb, curr_offset, 1, FALSE);
if (oct & 0x80)
{
@@ -874,11 +868,7 @@ be_l3_header_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc
oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE);
proto_tree_add_item(tree, hf_gsm_a_L3_protocol_discriminator, tvb, curr_offset, 1, FALSE);
@@ -888,11 +878,7 @@ be_l3_header_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc
oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE);
other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8);
proto_tree_add_text(tree,
@@ -987,11 +973,7 @@ be_chan_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *
oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE);
sdi = oct & 0x0f;
switch (sdi)
@@ -1053,12 +1035,7 @@ be_chan_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *
{
oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Extension: %s",
- a_bigbuf,
- (oct & 0x80) ? "extended" : "not extended");
+ proto_tree_add_item(tree, hf_gsm_a_extension, tvb, curr_offset, 1, FALSE);
switch (oct & 0x7f)
{
@@ -1148,12 +1125,7 @@ be_chan_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *
oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Extension: %s",
- a_bigbuf,
- (oct & 0x80) ? "extended" : "not extended");
+ proto_tree_add_item(tree, hf_gsm_a_extension, tvb, curr_offset, 1, FALSE);
other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8);
proto_tree_add_text(tree,
@@ -1252,18 +1224,9 @@ be_chan_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *
oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Extension: %s",
- a_bigbuf,
- (oct & 0x80) ? "extended" : "not extended");
+ proto_tree_add_item(tree, hf_gsm_a_extension, tvb, curr_offset, 1, FALSE);
- other_decode_bitfield_value(a_bigbuf, oct, 0x70, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, (curr_offset<<3)+1, 3, FALSE);
if (num_chan == 0)
{
@@ -1274,11 +1237,7 @@ be_chan_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *
a_bigbuf,
(oct & 0x08) ? "" : "not ");
- other_decode_bitfield_value(a_bigbuf, oct, 0x04, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, (curr_offset<<3)+6, 1, FALSE);
other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8);
proto_tree_add_text(tree,
@@ -1303,11 +1262,7 @@ be_chan_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *
a_bigbuf,
(oct & 0x08) ? "" : "not ");
- other_decode_bitfield_value(a_bigbuf, oct, 0x04, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, (curr_offset<<3)+6, 1, FALSE);
other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8);
proto_tree_add_text(tree,
@@ -1600,12 +1555,7 @@ be_cell_id(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar
oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
-
+ proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE);
proto_tree_add_item(tree, hf_gsm_a_bssmap_be_cell_id_disc, tvb, curr_offset, 1, FALSE);
disc = oct&0x0f;
curr_offset++;
@@ -1826,12 +1776,7 @@ be_down_dtx_flag(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_,
oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0xfe, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
-
+ proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 7, FALSE);
other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
proto_tree_add_text(tree,
tvb, curr_offset, 1,
@@ -1864,11 +1809,7 @@ be_cell_id_list(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gcha
oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE);
disc = oct & 0x0f;
proto_tree_add_item(tree, hf_gsm_a_bssmap_be_cell_id_disc, tvb, curr_offset, 1, FALSE);
@@ -2177,11 +2118,7 @@ be_ciph_resp_mode(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_
oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0xfe, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 7, FALSE);
other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
proto_tree_add_text(tree,
@@ -2272,11 +2209,7 @@ be_for_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar
oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE);
switch (oct & 0x0f)
{
@@ -2430,11 +2363,7 @@ be_que_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar
oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0xfc, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 6, FALSE);
other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8);
proto_tree_add_text(tree,
@@ -2443,11 +2372,7 @@ be_que_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar
a_bigbuf,
(oct & 0x02) ? "" : "not ");
- other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, (curr_offset<<3)+7, 1, FALSE);
curr_offset++;
@@ -2473,6 +2398,10 @@ be_speech_ver(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gc
proto_tree_add_item(tree, hf_gsm_a_b8spare, tvb, curr_offset, 1, FALSE);
+ /* The bits 7-1 of octet 2 are coded in the same way as the permitted speech version identifier
+ * in the Channel type information element.
+ */
+
switch (oct & 0x7f)
{
case 0x01: str = "GSM speech full rate version 1"; short_str = "FR1"; break;
@@ -2483,6 +2412,12 @@ be_speech_ver(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gc
case 0x15: str = "GSM speech half rate version 2"; short_str = "HR2"; break;
case 0x25: str = "GSM speech half rate version 3 (AMR)"; short_str = "HR3 (AMR)"; break;
+ case 0x41: str = "GSM speech full rate version 4";short_str = "OFR AMR-WB"; break;
+ case 0x42: str = "GSM speech full rate version 5";short_str = "FR AMR-WB"; break;
+ case 0x46: str = "GSM speech half rate version 4";short_str = "OHR AMR-WB"; break;
+ case 0x45: str = "GSM speech half rate version 6";short_str = "OHR AMR"; break;
+
+
default:
str = "Reserved";
short_str = str;
@@ -5770,107 +5705,107 @@ proto_register_gsm_a_bssmap(void)
{ &hf_gsm_a_bssmap_msg_type,
{ "BSSMAP Message Type", "gsm_a.bssmap_msgtype",
FT_UINT8, BASE_HEX, VALS(gsm_a_bssmap_msg_strings), 0x0,
- "", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_elem_id,
{ "Element ID", "gsm_a_bssmap.elem_id",
FT_UINT8, BASE_DEC, NULL, 0,
- "", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_length,
{ "Length", "gsm_a.len",
FT_UINT16, BASE_DEC, NULL, 0,
- "", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_cell_ci,
{ "Cell CI", "gsm_a.cell_ci",
FT_UINT16, BASE_HEX_DEC, 0, 0x0,
- "", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_cell_lac,
{ "Cell LAC", "gsm_a.cell_lac",
FT_UINT16, BASE_HEX_DEC, 0, 0x0,
- "", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_dlci_cc,
{ "Control Channel", "bssap.dlci.cc",
FT_UINT8, BASE_HEX, VALS(bssap_cc_values), 0xc0,
- "", HFILL}
+ NULL, HFILL}
},
{ &hf_gsm_a_bssmap_dlci_spare,
{ "Spare", "bssap.dlci.spare",
FT_UINT8, BASE_HEX, NULL, 0x38,
- "", HFILL}
+ NULL, HFILL}
},
{ &hf_gsm_a_bssmap_dlci_sapi,
{ "SAPI", "bssap.dlci.sapi",
FT_UINT8, BASE_HEX, VALS(bssap_sapi_values), 0x07,
- "", HFILL}
+ NULL, HFILL}
},
{ &hf_gsm_a_bssmap_cause,
{ "BSSMAP Cause", "gsm_a_bssmap.cause",
FT_UINT8, BASE_HEX, 0, 0x0,
- "", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_be_cell_id_disc,
{ "Cell identification discriminator","gsm_a.be.cell_id_disc",
FT_UINT8,BASE_DEC, VALS(gsm_a_be_cell_id_disc_vals), 0x0f,
- "Cell identification discriminator", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_lsa_only,
{ "LSA only","ggsm_a_bssmap.lsa_only",
FT_BOOLEAN,8, TFS(&bssmap_lsa_only_value), 0x01,
- "LSA only", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_act,
{ "Active mode support","gsm_a_bssmap.act",
FT_BOOLEAN,8, NULL, 0x20,
- "Active mode support", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_pref,
{ "Preferential access","gsm_a_bssmap.pref",
FT_BOOLEAN,8, NULL, 0x10,
- "Preferential access", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_lsa_inf_prio,
{ "Priority","gsm_a_bssmap.lsa_inf_prio",
FT_UINT8,BASE_DEC, NULL, 0x0f,
- "Priority", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_seq_len,
{ "Sequence Length","gsm_a_bssmap.seq_len",
FT_UINT8,BASE_DEC, NULL, 0xf0,
- "Sequence Length", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_seq_no,
{ "Sequence Number","gsm_a_bssmap.seq_no",
FT_UINT8,BASE_DEC, NULL, 0xf,
- "Sequence Number", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssap_cell_id_list_seg_cell_id_disc,
{ "Cell identification discriminator","gsm_a_bssmap.cell_id_list_seg_cell_id_disc",
FT_UINT8,BASE_DEC, VALS(gsm_a_bssap_cell_id_list_seg_cell_id_disc_vals), 0xf,
- "Cell identification discriminator", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssap_res_ind_method,
{ "Resource indication method","gsm_a_bssmap.res_ind_method",
FT_UINT8,BASE_DEC, VALS(gsm_a_bssap_resource_indication_vals), 0xf,
- "Resource indication method", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_ch_mode,
{ "Channel mode","gsm_a_bssmap.cch_mode",
FT_UINT8,BASE_DEC, VALS(gsm_a_bssmap_ch_mode_vals), 0xf0,
- "Channel mode", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_channel,
{ "Channel","gsm_a_bssmap.channel",
FT_UINT8,BASE_DEC, VALS(gsm_a_bssmap_channel_vals), 0x0f,
- "Channel", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_be_rnc_id,
{ "RNC-ID","gsm_a.be.rnc_id",
FT_UINT16,BASE_DEC, NULL, 0x0,
- "RNC-ID", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_apdu_protocol_id,
{ "Protocol ID", "gsm_a.apdu_protocol_id",
@@ -5880,62 +5815,62 @@ proto_register_gsm_a_bssmap(void)
{ &hf_gsm_a_bssmap_periodicity,
{ "Periodicity", "gsm_a_bssmap.periodicity",
FT_UINT8, BASE_DEC, NULL, 0x0,
- "Periodicity", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_sm,
{ "Subsequent Mode","gsm_a_bssmap.sm",
FT_BOOLEAN,8, NULL, 0x02,
- "Subsequent Mode", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_tarr,
{ "Total Accessible Resource Requested","gsm_a_bssmap.tarr",
FT_BOOLEAN,8, NULL, 0x01,
- "Total Accessible Resource Requested", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_tot_no_of_fullr_ch,
{ "Total number of accessible full rate channels", "gsm_a_bssmap.tot_no_of_fullr_ch",
FT_UINT16, BASE_DEC, NULL, 0x0,
- "Total number of accessible full rate channels", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_tot_no_of_hr_ch,
{ "Total number of accessible half rate channels", "gsm_a_bssmap.tot_no_of_hr_ch",
FT_UINT16, BASE_DEC, NULL, 0x0,
- "Total number of accessible half rate channels", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_lsa_id,
{ "Identification of Localised Service Area", "gsm_a_bssmap.lsa_id",
FT_UINT24, BASE_HEX, NULL, 0x0,
- "Identification of Localised Service Area", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_ep,
{ "EP", "gsm_a_bssmap.ep",
FT_UINT8, BASE_DEC, NULL, 0x01,
- "EP", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_smi,
{ "Subsequent Modification Indication(SMI)", "gsm_a_bssmap.smi",
FT_UINT8, BASE_DEC, VALS(gsm_a_bssmap_smi_vals), 0x0f,
- "Subsequent Modification Indication", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_lcs_pri,
{ "Periodicity", "gsm_a_bssmap.lcs_pri",
FT_UINT8, BASE_DEC, VALS(lcs_priority_vals), 0x0,
- "Periodicity", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_num_ms,
{ "Number of handover candidates", "gsm_a_bssmap.num_ms",
FT_UINT8, BASE_DEC,NULL, 0x0,
- "Number of handover candidates", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_talker_pri,
{ "Priority", "gsm_a_bssmap.talker_pri",
FT_UINT8, BASE_DEC,VALS(gsm_a_bssmap_talker_pri_vals), 0x03,
- "Priority ", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_paging_cause,
{ "Paging Cause", "gsm_a_bssmap.paging_cause",
FT_UINT8, BASE_DEC,VALS(gsm_a_bssmap_paging_cause_vals), 0x06,
- "Paging Cause ", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_paging_inf_flg,
{ "VGCS/VBS flag","ggsm_a_bssmap.paging_inf_flg",
@@ -5945,138 +5880,138 @@ proto_register_gsm_a_bssmap(void)
{ &hf_gsm_a_bssmap_serv_ho_inf,
{ "Service Handover information", "gsm_a_bssmap.serv_ho_inf",
FT_UINT8, BASE_HEX, NULL, 0x07,
- "Service Handover information", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_spare_bits,
{ "Spare bit(s)", "gsm_a_bssmap.spare_bits",
FT_UINT8, BASE_HEX, NULL, 0x0,
- "Spare bit(s)", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_tpind,
{ "Talker priority indicator (TP Ind)","gsm_a_bssmap.tpind",
FT_BOOLEAN,8, TFS(&gsm_bssmap_tpind_vals), 0x01,
- "Talker priority indicator (TP Ind)", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_asind_b2,
{ "A-interface resource sharing indicator (AS Ind) bit 2","gsm_a_bssmap.asind_b2",
FT_BOOLEAN,8, TFS(&gsm_bssmap_asind_b2_vals), 0x02,
- "A-interface resource sharing indicator (AS Ind) bit 2", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_asind_b3,
{ "A-interface resource sharing indicator (AS Ind) bit 3","gsm_a_bssmap.asind_b3",
FT_BOOLEAN,8, TFS(&gsm_bssmap_asind_b3_vals), 0x04,
- "A-interface resource sharing indicator (AS Ind) bit 3", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_bss_res,
{ "Group or broadcast call re-establishment by the BSS indicator","gsm_a_bssmap.bss_res",
FT_BOOLEAN,8, TFS(&gsm_bssmap_bss_res_vals), 0x08,
- "Group or broadcast call re-establishment by the BSS indicator", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_tcp,
- { "Talker Channel Parameter (TCP).","gsm_a_bssmap.tcp",
+ { "Talker Channel Parameter (TCP)","gsm_a_bssmap.tcp",
FT_BOOLEAN,8, TFS(&gsm_bssmap_bss_tcp_vals), 0x10,
- "Talker Channel Parameter (TCP).", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_filler_bits,
{ "Filler Bits","gsm_a_bssmap.filler_bits",
FT_UINT8, BASE_DEC,NULL, 0x07,
- "Filler Bits", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_aoip_trans_ipv4,
{ "Transport Layer Address (IPv4)","gsm_a_bssmap.aoip_trans_ipv4",
FT_IPv4,BASE_NONE, NULL, 0x0,
- "Transport Layer Address (IPv4)", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_aoip_trans_ipv6,
{ "Transport Layer Address (IPv6)","gsm_a_bssmap.aoip_trans_ipv6",
FT_IPv6,BASE_NONE, NULL, 0x0,
- "Transport Layer Address (IPv6)", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_aoip_trans_port,
{ "UDP Port","gsm_a_bssmap.aoip_trans_port",
FT_UINT16, BASE_DEC,NULL, 0x0,
- "UDP Port", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_fi,
{ "FI(Full IP)","gsm_a_bssmap.fi",
FT_BOOLEAN,8, TFS(&bssmap_fi_vals), 0x80,
- "FI(Full IP)", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_pi,
{ "PI","gsm_a_bssmap.pi",
FT_BOOLEAN,8, TFS(&bssmap_pi_vals), 0x40,
- "PI", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_pt,
{ "PT","gsm_a_bssmap.pt",
FT_BOOLEAN,8, TFS(&bssmap_pt_vals), 0x20,
- "PT", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_tf,
{ "TF","gsm_a_bssmap.tf",
FT_BOOLEAN,8, TFS(&bssmap_tf_vals), 0x10,
- "TF", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssap_speech_codec,
{ "Codec Type","gsm_a_bssmap.speech_codec",
FT_UINT8, BASE_DEC,VALS(bssap_speech_codec_values), 0x0f,
- "Codec Type ", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_fi2,
{ "FI(Full IP)","gsm_a_bssmap.fi2",
FT_BOOLEAN,8, TFS(&bssmap_fi2_vals), 0x80,
- "FI(Full IP)", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_pi2,
{ "PI","gsm_a_bssmap.pi2",
FT_BOOLEAN,8, TFS(&bssmap_pi2_vals), 0x40,
- "PI", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_pt2,
{ "PT","gsm_a_bssmap.pt2",
FT_BOOLEAN,8, TFS(&bssmap_pt2_vals), 0x20,
- "PT", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_tf2,
{ "TF","gsm_a_bssmap.tf2",
FT_BOOLEAN,8, TFS(&bssmap_tf2_vals), 0x10,
- "TF", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_call_id,
{ "Call Identifier","gsm_a_bssmap.callid",
FT_UINT32, BASE_DEC,NULL, 0x0,
- "Call Identifier", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_spare,
{ "Spare", "gsm_a_bssmap.spare",
FT_UINT8, BASE_HEX, NULL, 0x0,
- "Spare", HFILL}
+ NULL, HFILL}
},
{ &hf_gsm_a_bssmap_positioning_data_discriminator,
{ "Positioning Data Discriminator", "gsm_a_bssmap.posData.discriminator",
FT_UINT8, BASE_HEX, NULL, 0x0,
- "Positioning Data Discriminator", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_positioning_method,
{ "Positioning method", "gsm_a_bssmap.posData.method",
FT_UINT8, BASE_HEX, VALS(bssmap_positioning_methods), 0x0,
- "Positioning method", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_positioning_method_usage,
{ "Usage", "gsm_a_bssmap.posData.usage",
FT_UINT8, BASE_HEX, VALS(bssmap_positioning_methods_usage), 0x0,
- "Usage", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_bssmap_location_type_location_information,
{ "Location Information", "gsm_a_bssmap.locationType.locationInformation",
FT_UINT8, BASE_HEX, VALS(bssmap_location_information_vals), 0x0,
- "Location Information", HFILL}
+ NULL, HFILL}
},
{ &hf_gsm_a_bssmap_location_type_positioning_method,
{ "Positioning Method", "gsm_a_bssmap.locationType.positioningMethod",
FT_UINT8, BASE_HEX, VALS(bssmap_positioning_method_vals), 0x0,
- "Positioning Method", HFILL}
+ NULL, HFILL}
},
};
diff --git a/epan/dissectors/packet-gsm_a_common.c b/epan/dissectors/packet-gsm_a_common.c
index f603ab3a57..daa15aa154 100644
--- a/epan/dissectors/packet-gsm_a_common.c
+++ b/epan/dissectors/packet-gsm_a_common.c
@@ -1990,11 +1990,7 @@ de_d_gb_call_ref(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_,
"%s : Ciphering Information",
a_bigbuf);
- other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
-
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+4, 4, FALSE);
curr_offset++;
/* no length check possible */
@@ -2025,10 +2021,7 @@ de_pd_sapi(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar
subtree = proto_item_add_subtree(item, ett_gsm_dtap_elem[DE_PD_SAPI]);
- other_decode_bitfield_value(a_bigbuf, oct, 0xc0, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, curr_offset<<3, 2, FALSE);
switch ((oct & 0x30) >> 4)
{
@@ -2161,334 +2154,347 @@ proto_register_gsm_a_common(void)
{ &hf_gsm_a_common_elem_id,
{ "Element ID", "gsm_a_common.elem_id",
FT_UINT8, BASE_DEC, NULL, 0,
- "", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_imsi,
{ "IMSI", "gsm_a.imsi",
FT_STRING, BASE_DEC, 0, 0,
- "", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_tmsi,
{ "TMSI/P-TMSI", "gsm_a.tmsi",
FT_UINT32, BASE_HEX, 0, 0x0,
- "", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_imei,
{ "IMEI", "gsm_a.imei",
FT_STRING, BASE_DEC, 0, 0,
- "", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_imeisv,
{ "IMEISV", "gsm_a.imeisv",
FT_STRING, BASE_DEC, 0, 0,
- "", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_MSC_rev,
{ "Revision Level","gsm_a.MSC2_rev",
FT_UINT8,BASE_DEC, VALS(gsm_a_msc_rev_vals), 0x60,
- "Revision level", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_ES_IND,
{ "ES IND","gsm_a.MSC2_rev",
FT_UINT8,BASE_DEC, VALS(ES_IND_vals), 0x10,
- "ES IND", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_A5_1_algorithm_sup,
{ "A5/1 algorithm supported","gsm_a.MSC2_rev",
FT_UINT8,BASE_DEC, VALS(A5_1_algorithm_sup_vals), 0x08,
- "A5/1 algorithm supported ", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_RF_power_capability,
{ "RF Power Capability","gsm_a.MSC2_rev",
FT_UINT8,BASE_DEC, VALS(RF_power_capability_vals), 0x07,
- "RF Power Capability", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_ps_sup_cap,
{ "PS capability (pseudo-synchronization capability)","gsm_a.ps_sup_cap",
FT_UINT8,BASE_DEC, VALS(ps_sup_cap_vals), 0x40,
- "PS capability (pseudo-synchronization capability)", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_SS_screening_indicator,
{ "SS Screening Indicator","gsm_a.SS_screening_indicator",
FT_UINT8,BASE_DEC, VALS(SS_screening_indicator_vals), 0x30,
- "SS Screening Indicator", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_SM_capability,
{ "SM capability (MT SMS pt to pt capability)","gsm_a.SM_cap",
FT_UINT8,BASE_DEC, VALS(SM_capability_vals), 0x08,
- "SM capability (MT SMS pt to pt capability)", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_VBS_notification_rec,
{ "VBS notification reception ","gsm_a.VBS_notification_rec",
FT_UINT8,BASE_DEC, VALS(VBS_notification_rec_vals), 0x04,
- "VBS notification reception ", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_VGCS_notification_rec,
{ "VGCS notification reception ","gsm_a.VGCS_notification_rec",
FT_UINT8,BASE_DEC, VALS(VGCS_notification_rec_vals), 0x02,
- "VGCS notification reception", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_FC_frequency_cap,
{ "FC Frequency Capability","gsm_a.FC_frequency_cap",
FT_UINT8,BASE_DEC, VALS(FC_frequency_cap_vals), 0x01,
- "FC Frequency Capability", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_CM3,
{ "CM3","gsm_a.CM3",
FT_UINT8,BASE_DEC, VALS(CM3_vals), 0x80,
- "CM3", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_LCS_VA_cap,
- { "LCS VA capability (LCS value added location request notification capability) ","gsm_a.LCS_VA_cap",
+ { "LCS VA capability (LCS value added location request notification capability)","gsm_a.LCS_VA_cap",
FT_UINT8,BASE_DEC, VALS(LCS_VA_cap_vals), 0x20,
- "LCS VA capability (LCS value added location request notification capability) ", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_UCS2_treatment,
- { "UCS2 treatment ","gsm_a.UCS2_treatment",
+ { "UCS2 treatment","gsm_a.UCS2_treatment",
FT_UINT8,BASE_DEC, VALS(UCS2_treatment_vals), 0x10,
- "UCS2 treatment ", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_SoLSA,
{ "SoLSA","gsm_a.SoLSA",
FT_UINT8,BASE_DEC, VALS(SoLSA_vals), 0x08,
- "SoLSA", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_CMSP,
{ "CMSP: CM Service Prompt","gsm_a.CMSP",
FT_UINT8,BASE_DEC, VALS(CMSP_vals), 0x04,
- "CMSP: CM Service Prompt", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_A5_7_algorithm_sup,
{ "A5/7 algorithm supported","gsm_a.A5_7_algorithm_sup",
FT_UINT8,BASE_DEC, VALS(A5_7_algorithm_sup_vals), 0x0,
- "A5/7 algorithm supported", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_A5_6_algorithm_sup,
{ "A5/6 algorithm supported","gsm_a.A5_6_algorithm_sup",
FT_UINT8,BASE_DEC, VALS(A5_6_algorithm_sup_vals), 0x0,
- "A5/6 algorithm supported", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_A5_5_algorithm_sup,
{ "A5/5 algorithm supported","gsm_a.A5_5_algorithm_sup",
FT_UINT8,BASE_DEC, VALS(A5_5_algorithm_sup_vals), 0x0,
- "A5/5 algorithm supported", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_A5_4_algorithm_sup,
{ "A5/4 algorithm supported","gsm_a.A5_4_algorithm_sup",
FT_UINT8,BASE_DEC, VALS(A5_4_algorithm_sup_vals), 0x0,
- "A5/4 algorithm supported", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_A5_3_algorithm_sup,
{ "A5/3 algorithm supported","gsm_a.A5_3_algorithm_sup",
FT_UINT8,BASE_DEC, VALS(A5_3_algorithm_sup_vals), 0x02,
- "A5/3 algorithm supported", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_A5_2_algorithm_sup,
{ "A5/2 algorithm supported","gsm_a.A5_2_algorithm_sup",
FT_UINT8,BASE_DEC, VALS(A5_2_algorithm_sup_vals), 0x01,
- "A5/2 algorithm supported", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_mobile_identity_type,
{ "Mobile Identity Type","gsm_a.ie.mobileid.type",
FT_UINT8, BASE_DEC, VALS(mobile_identity_type_vals), 0x07,
- "Mobile Identity Type", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_odd_even_ind,
{ "Odd/even indication","gsm_a.oddevenind",
FT_UINT8, BASE_DEC, oddevenind_vals, 0x08,
- "Mobile Identity", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_tmgi_mcc_mnc_ind,
{ "MCC/MNC indication", "gsm_a.tmgi_mcc_mnc_ind",
FT_BOOLEAN, 8, TFS(&gsm_a_present_vals), 0x10,
- "MCC/MNC indication", HFILL}
+ NULL, HFILL}
},
{ &hf_gsm_a_mbs_ses_id_ind,
{ "MBMS Session Identity indication", "gsm_a.tmgi_mcc_mnc_ind",
FT_BOOLEAN, 8, TFS(&gsm_a_present_vals), 0x20,
- "MBMS Session Identity indication", HFILL}
+ NULL, HFILL}
},
{ &hf_gsm_a_mbs_service_id,
{ "MBMS Service ID", "gsm_a.mbs_service_id",
FT_BYTES, BASE_HEX, NULL, 0x0,
- "MBMS Service ID", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_L3_protocol_discriminator,
{ "Protocol discriminator","gsm_a.L3_protocol_discriminator",
FT_UINT8,BASE_DEC, VALS(protocol_discriminator_vals), 0x0f,
- "Protocol discriminator", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_call_prio,
{ "Call priority", "gsm_a.call_prio",
FT_UINT8, BASE_DEC, VALS(gsm_a_call_prio_vals), 0x00,
- "Call priority", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_skip_ind,
{ "Skip Indicator", "gsm_a.skip.ind",
FT_UINT8, BASE_DEC, NULL, 0xf0,
- "Skip Indicator", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_b7spare,
{ "Spare","gsm_a.spareb7",
FT_UINT8,BASE_DEC, NULL, 0x40,
- "Spare", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_b8spare,
{ "Spare","gsm_a.spareb8",
FT_UINT8,BASE_DEC, NULL, 0x80,
- "Spare", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_spare_bits,
{ "Spare bit(s)","gsm_a.spare_bits",
FT_UINT8,BASE_DEC, NULL, 0x0,
- "Spare bit(s)", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_multi_bnd_sup_fields,
{ "Multiband supported field","gsm_a.multi_bnd_sup_fields",
FT_UINT8,BASE_DEC, NULL, 0x0,
- "Multiband supported field", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_pgsm_supported,
{ "P-GSM Supported", "gsm_a.classmark3.pgsmSupported",
- FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0,"P-GSM Supported", HFILL}
+ FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0,
+ NULL, HFILL}
},
{ &hf_gsm_a_egsm_supported,
{ "E-GSM or R-GSM Supported", "gsm_a.classmark3.egsmSupported",
- FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0,"E-GSM or R-GSM Supported", HFILL}
+ FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0,
+ NULL, HFILL}
},
{ &hf_gsm_a_gsm1800_supported,
{ "GSM 1800 Supported", "gsm_a.classmark3.gsm1800Supported",
- FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0,"GSM 1800 Supported", HFILL}
+ FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0,
+ NULL, HFILL}
},
{ &hf_gsm_a_ass_radio_cap1,
{ "Associated Radio Capability 1", "gsm_a.classmark3.ass_radio_cap1",
- FT_UINT8, BASE_DEC, NULL, 0x0,"Associated Radio Capability 1", HFILL}
+ FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL}
},
{ &hf_gsm_a_ass_radio_cap2,
{ "Associated Radio Capability 2", "gsm_a.classmark3.ass_radio_cap2",
- FT_UINT8, BASE_DEC, NULL, 0x0,"Associated Radio Capability 1", HFILL}
+ FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL}
},
{ &hf_gsm_a_rsupport,
{ "R Support", "gsm_a.classmark3.rsupport",
- FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0,"R Support", HFILL}
+ FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0,
+ NULL, HFILL}
},
{ &hf_gsm_a_r_capabilities,
{ "R-GSM band Associated Radio Capability", "gsm_a.classmark3.r_capabilities",
- FT_UINT8, BASE_DEC, NULL, 0x0,"R-GSM band Associated Radio Capability", HFILL}
+ FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL}
},
{ &hf_gsm_a_multislot_capabilities,
{ "HSCSD Multi Slot Capability", "gsm_a.classmark3.multislot_capabilities",
- FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0,"HSCSD Multi Slot Capability", HFILL}
+ FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0,
+ NULL, HFILL}
},
{ &hf_gsm_a_multislot_class,
{ "HSCSD Multi Slot Class", "gsm_a.classmark3.multislot_cap",
- FT_UINT8, BASE_DEC, NULL, 0x0,"HSCSD Multi Slot Class", HFILL}
+ FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL}
},
{ &hf_gsm_a_ucs2_treatment,
- { "UCS2 treatment ","gsm_a.UCS2_treatment",
+ { "UCS2 treatment","gsm_a.UCS2_treatment",
FT_UINT8,BASE_DEC, VALS(UCS2_treatment_vals), 0x0,
- "UCS2 treatment ", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_extended_measurement_cap,
{ "Extended Measurement Capability", "gsm_a.classmark3.ext_meas_cap",
- FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0,"Extended Measurement Capability", HFILL}
+ FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0,
+ NULL, HFILL}
},
{ &hf_gsm_a_ms_measurement_capability,
{ "MS measurement capability", "gsm_a.classmark3.ms_measurement_capability",
- FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0,"MS measurement capability", HFILL}
+ FT_UINT8, BASE_DEC, VALS(true_false_vals), 0x0,
+ NULL, HFILL}
},
{ &hf_gsm_a_sms_value,
{ "SMS_VALUE (Switch-Measure-Switch)", "gsm_a.classmark3.sms_value",
- FT_UINT8, BASE_DEC, VALS(gsm_a_sms_vals), 0x0,"SMS_VALUE (Switch-Measure-Switch)", HFILL}
+ FT_UINT8, BASE_DEC, VALS(gsm_a_sms_vals), 0x0,
+ NULL, HFILL}
},
{ &hf_gsm_a_sm_value,
{ "SM_VALUE (Switch-Measure)", "gsm_a.classmark3.sm_value",
- FT_UINT8, BASE_DEC, VALS(gsm_a_sms_vals), 0x0,"SM_VALUE (Switch-Measure)", HFILL}
+ FT_UINT8, BASE_DEC, VALS(gsm_a_sms_vals), 0x0,
+ NULL, HFILL}
},
{ &hf_gsm_a_geo_loc_type_of_shape,
{ "Location estimate","gsm_a.gad.location_estimate",
FT_UINT8,BASE_DEC, VALS(type_of_shape_vals), 0xf0,
- "Location estimate", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_geo_loc_sign_of_lat,
{ "Sign of latitude","gsm_a.gad.sign_of_latitude",
FT_UINT8,BASE_DEC, VALS(sign_of_latitude_vals), 0x80,
- "Sign of latitude", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_geo_loc_deg_of_lat,
{ "Degrees of latitude","gsm_a.gad.sign_of_latitude",
FT_UINT24,BASE_DEC, NULL, 0x7fffff,
- "Degrees of latitude", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_geo_loc_deg_of_long,
{ "Degrees of longitude","gsm_a.gad.sign_of_longitude",
FT_UINT24,BASE_DEC, NULL, 0xffffff,
- "Degrees of longitude", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_geo_loc_uncertainty_code,
{ "Uncertainty code","gsm_a.gad.uncertainty_code",
FT_UINT8,BASE_DEC, NULL, 0x7f,
- "Uncertainty code", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_geo_loc_uncertainty_semi_major,
{ "Uncertainty semi-major","gsm_a.gad.uncertainty_semi_major",
FT_UINT8,BASE_DEC, NULL, 0x7f,
- "Uncertainty semi-major", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_geo_loc_uncertainty_semi_minor,
{ "Uncertainty semi-minor","gsm_a.gad.uncertainty_semi_minor",
FT_UINT8,BASE_DEC, NULL, 0x7f,
- "Uncertainty semi-minor", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_geo_loc_orientation_of_major_axis,
{ "Orientation of major axis","gsm_a.gad.orientation_of_major_axis",
FT_UINT8,BASE_DEC, NULL, 0x0,
- "Orientation of major axis", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_geo_loc_uncertainty_altitude,
{ "Uncertainty Altitude","gsm_a.gad.uncertainty_altitude",
FT_UINT8,BASE_DEC, NULL, 0x7f,
- "Uncertainty Altitude", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_geo_loc_confidence,
{ "Confidence(%)","gsm_a.gad.confidence",
FT_UINT8,BASE_DEC, NULL, 0x7f,
- "Confidence(%)", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_geo_loc_no_of_points,
{ "Number of points","gsm_a.gad.no_of_points",
FT_UINT8,BASE_DEC, NULL, 0x0f,
- "Number of points", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_geo_loc_D,
{ "D: Direction of Altitude","gsm_a.gad.D",
FT_UINT16,BASE_DEC, VALS(dir_of_alt_vals), 0x8000,
- "D: Direction of Altitude", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_geo_loc_altitude,
{ "Altitude in meters","gsm_a.gad.altitude",
FT_UINT16,BASE_DEC, NULL, 0x7fff,
- "Altitude", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_geo_loc_inner_radius,
{ "Inner radius","gsm_a.gad.altitude",
FT_UINT16,BASE_DEC, NULL, 0x0,
- "Inner radius", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_geo_loc_uncertainty_radius,
{ "Uncertainty radius","gsm_a.gad.no_of_points",
FT_UINT8,BASE_DEC, NULL, 0x7f,
- "Uncertainty radius", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_geo_loc_offset_angle,
{ "Offset angle","gsm_a.gad.offset_angle",
FT_UINT8,BASE_DEC, NULL, 0x0,
- "Offset angle", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_geo_loc_included_angle,
{ "Included angle","gsm_a.gad.included_angle",
FT_UINT8,BASE_DEC, NULL, 0x0,
- "Included angle", HFILL }
+ NULL, HFILL }
},
};
diff --git a/epan/dissectors/packet-gsm_a_dtap.c b/epan/dissectors/packet-gsm_a_dtap.c
index a9e56548be..441c516eca 100644
--- a/epan/dissectors/packet-gsm_a_dtap.c
+++ b/epan/dissectors/packet-gsm_a_dtap.c
@@ -15,7 +15,7 @@
*
* Added Dissection of Radio Resource Management Information Elements
* and othere enhancements and fixes.
- * Copyright 2005 - 2006, Anders Broman [AT] ericsson.com
+ * Copyright 2005 - 2009, Anders Broman [AT] ericsson.com
* Small bugfixes, mainly in Qos and TFT by Nils Ljungberg and Stefan Boman [AT] ericsson.com
*
* Title 3GPP Other
@@ -386,6 +386,8 @@ static int hf_gsm_a_type_of_number = -1;
static int hf_gsm_a_numbering_plan_id = -1;
static int hf_gsm_a_lsa_id = -1;
+static int hf_gsm_a_speech_vers_ind = -1;
+static int hf_gsm_a_dtap_spare_bits = -1;
/* Initialize the subtree pointers */
static gint ett_dtap_msg = -1;
@@ -861,11 +863,7 @@ de_day_saving_time(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, g
oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0xfc, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_spare_bits, tvb, curr_offset<<3, 6, FALSE);
switch (oct & 0x03)
{
@@ -922,11 +920,7 @@ de_aux_states(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar
proto_tree_add_item(tree, hf_gsm_a_extension, tvb, curr_offset, 1, FALSE);
- other_decode_bitfield_value(a_bigbuf, oct, 0x70, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_spare_bits, tvb, (curr_offset<<3)+1, 3, FALSE);
switch ((oct & 0x0c) >> 2)
{
@@ -972,8 +966,33 @@ de_aux_states(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar
* 10.5.4.4a Backup bearer capability
*/
/*
- * [3] 10.5.4.5 Bearer capability
+ * [3] 10.5.4.5 Bearer capability (3GPP TS 24.008 version 8.4.0 Release 8)
+ */
+/* Speech version indication (octet(s) 3a etc.) Bits 4 3 2 1 */
+
+const value_string gsm_a_speech_vers_ind_values[] = {
+ { 0x00, "GSM full rate speech version 1(GSM FR)" },
+ { 0x1, "GSM half rate speech version 1(GSM HR)" },
+ { 0x2, "GSM full rate speech version 2(GSM EFR)" },
+ { 0x3, "Speech version tbd" },
+ { 0x4, "GSM full rate speech version 3(FR AMR)" },
+ { 0x5, "GSM half rate speech version 3(HR AMR)" },
+ { 0x6, "GSM full rate speech version 4(OFR AMR-WB)" },
+ { 0x7, "GSM half rate speech version 4(OHR AMR-WB)" },
+ { 0x8, "GSM full rate speech version 5(FR AMR-WB)" },
+ { 0x9, "Speech version tbd" },
+ { 0xa, "Speech version tbd" },
+ { 0xb, "GSM half rate speech version 6(OHR AMR)" },
+ { 0xc, "Speech version tbd" },
+ { 0xd, "Speech version tbd" },
+ { 0xe, "Speech version tbd" },
+ { 0xf, "No speech version supported for GERAN" },
+ { 0, NULL }
+};
+/* All other values have the meaning "speech version tbd" and shall be ignored
+ * when received.
*/
+
guint16
de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
{
@@ -1012,12 +1031,7 @@ de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar
extended = (oct & 0x80) ? FALSE : TRUE;
itc = oct & 0x07;
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Extension: %s",
- a_bigbuf,
- extended ? "extended" : "not extended");
+ proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, FALSE);
switch (is_uplink)
{
@@ -1100,15 +1114,15 @@ de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar
switch (itc)
{
- case DE_BC_ITC_SPEECH: str = "Speech"; break;
- case DE_BC_ITC_UDI: str = "Unrestricted digital information"; break;
- case DE_BC_ITC_EX_PLMN: str = "3.1 kHz audio, ex PLMN"; break;
- case DE_BC_ITC_FASC_G3: str = "Facsimile group 3"; break;
- case DE_BC_ITC_OTHER_ITC: str = "Other ITC (See Octet 5a)"; break;
- case DE_BC_ITC_RSVD_NET: str = "Reserved, to be used in the network"; break;
- default:
- str = "Reserved";
- break;
+ case DE_BC_ITC_SPEECH: str = "Speech"; break;
+ case DE_BC_ITC_UDI: str = "Unrestricted digital information"; break;
+ case DE_BC_ITC_EX_PLMN: str = "3.1 kHz audio, ex PLMN"; break;
+ case DE_BC_ITC_FASC_G3: str = "Facsimile group 3"; break;
+ case DE_BC_ITC_OTHER_ITC: str = "Other ITC (See Octet 5a)"; break;
+ case DE_BC_ITC_RSVD_NET: str = "Reserved, to be used in the network"; break;
+ default:
+ str = "Reserved";
+ break;
}
other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
@@ -1145,12 +1159,7 @@ de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar
extended = (oct & 0x80) ? FALSE : TRUE;
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Extension: %s",
- a_bigbuf,
- extended ? "extended" : "not extended");
+ proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, FALSE);
other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8);
proto_tree_add_text(subtree,
@@ -1160,31 +1169,9 @@ de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar
(oct & 0x40) ? "other extension of octet 3" :
"extension of information transfer capability");
- other_decode_bitfield_value(a_bigbuf, oct, 0x30, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
-
- switch (oct & 0x0f)
- {
- case 0: str = "GSM full rate speech version 1"; break;
- case 2: str = "GSM full rate speech version 2"; break;
- case 4: str = "GSM full rate speech version 3"; break;
- case 1: str = "GSM half rate speech version 1"; break;
- case 5: str = "GSM half rate speech version 3"; break;
- default:
- str = "Speech version TBD";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Speech version indication: %s",
- a_bigbuf,
- str);
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_spare_bits, tvb, (curr_offset<<3)+2, 2, FALSE);
+ proto_tree_add_item(subtree, hf_gsm_a_speech_vers_ind, tvb, curr_offset, 1, FALSE);
curr_offset++;
}
while (extended &&
@@ -1207,12 +1194,7 @@ de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar
extended = (oct & 0x80) ? FALSE : TRUE;
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Extension: %s",
- a_bigbuf,
- extended ? "extended" : "not extended");
+ proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, FALSE);
other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8);
proto_tree_add_text(subtree,
@@ -1285,12 +1267,7 @@ de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar
extended = (oct & 0x80) ? FALSE : TRUE;
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Extension: %s",
- a_bigbuf,
- extended ? "extended" : "not extended");
+ proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, FALSE);
other_decode_bitfield_value(a_bigbuf, oct, 0x60, 8);
proto_tree_add_text(subtree,
@@ -1355,12 +1332,7 @@ de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar
extended = (oct & 0x80) ? FALSE : TRUE;
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Extension: %s",
- a_bigbuf,
- extended ? "extended" : "not extended");
+ proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, FALSE);
other_decode_bitfield_value(a_bigbuf, oct, 0x60, 8);
proto_tree_add_text(subtree,
@@ -1386,11 +1358,7 @@ de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar
a_bigbuf,
str);
- other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_spare_bits, tvb, (curr_offset<<3)+5, 3, FALSE);
curr_offset++;
@@ -1411,12 +1379,7 @@ de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar
extended = (oct & 0x80) ? FALSE : TRUE;
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Extension: %s",
- a_bigbuf,
- extended ? "extended" : "not extended");
+ proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, FALSE);
other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8);
proto_tree_add_text(subtree,
@@ -1462,11 +1425,7 @@ de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar
"with USER INFORMATION messages on a temporary signalling connection" :
"in-band using logical link zero");
- other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_spare_bits, tvb, (curr_offset<<3)+7, 1, FALSE);
curr_offset++;
@@ -1487,12 +1446,7 @@ bc_octet_6:
extended = (oct & 0x80) ? FALSE : TRUE;
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Extension: %s",
- a_bigbuf,
- extended ? "extended" : "not extended");
+ proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, FALSE);
other_decode_bitfield_value(a_bigbuf, oct, 0x60, 8);
proto_tree_add_text(subtree,
@@ -1534,12 +1488,7 @@ bc_octet_6:
extended = (oct & 0x80) ? FALSE : TRUE;
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Extension: %s",
- a_bigbuf,
- extended ? "extended" : "not extended");
+ proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, FALSE);
other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8);
proto_tree_add_text(subtree,
@@ -1602,12 +1551,7 @@ bc_octet_6:
extended = (oct & 0x80) ? FALSE : TRUE;
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Extension: %s",
- a_bigbuf,
- extended ? "extended" : "not extended");
+ proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, FALSE);
switch ((oct & 0x60) >> 5)
{
@@ -1677,12 +1621,7 @@ bc_octet_6:
extended = (oct & 0x80) ? FALSE : TRUE;
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Extension: %s",
- a_bigbuf,
- extended ? "extended" : "not extended");
+ proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, FALSE);
switch ((oct & 0x60) >> 5)
{
@@ -1743,12 +1682,7 @@ bc_octet_6:
extended = (oct & 0x80) ? FALSE : TRUE;
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Extension: %s",
- a_bigbuf,
- extended ? "extended" : "not extended");
+ proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, FALSE);
switch ((oct & 0x60) >> 5)
{
@@ -1811,12 +1745,7 @@ bc_octet_6:
extended = (oct & 0x80) ? FALSE : TRUE;
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Extension: %s",
- a_bigbuf,
- extended ? "extended" : "not extended");
+ proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, FALSE);
if (is_uplink == IS_UPLINK_TRUE)
{
@@ -1888,12 +1817,7 @@ bc_octet_6:
extended = (oct & 0x80) ? FALSE : TRUE;
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Extension: %s",
- a_bigbuf,
- extended ? "extended" : "not extended");
+ proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, FALSE);
switch ((oct & 0x70) >> 4)
{
@@ -1970,12 +1894,7 @@ bc_octet_6:
extended = (oct & 0x80) ? FALSE : TRUE;
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Extension: %s",
- a_bigbuf,
- extended ? "extended" : "not extended");
+ proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, FALSE);
if (is_uplink == IS_UPLINK_TRUE)
{
@@ -2033,11 +1952,7 @@ bc_octet_6:
a_bigbuf);
}
- other_decode_bitfield_value(a_bigbuf, oct, 0x03, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_spare_bits, tvb, (curr_offset<<3)+6, 2, FALSE);
curr_offset++;
@@ -2054,12 +1969,8 @@ bc_octet_7:
subtree = proto_item_add_subtree(item, ett_bc_oct_7);
extended = (oct & 0x80) ? FALSE : TRUE;
oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Extension: %s",
- a_bigbuf,
- extended ? "extended" : "not extended");
+
+ proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, FALSE);
other_decode_bitfield_value(a_bigbuf, oct, 0x60, 8);
proto_tree_add_text(subtree,
@@ -2138,11 +2049,7 @@ de_cc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add
break;
}
- other_decode_bitfield_value(a_bigbuf, oct, 0x0c, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_spare_bits, tvb, (curr_offset<<3)+4, 2, FALSE);
other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8);
proto_tree_add_text(tree,
@@ -2166,11 +2073,7 @@ de_cc_cap(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add
oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_spare_bits, tvb, curr_offset<<3, 4, FALSE);
other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8);
proto_tree_add_text(tree,
@@ -2270,7 +2173,7 @@ de_call_state(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gc
static const true_false_string gsm_a_extension_value = {
"No Extension",
- "Extension"
+ "Extended"
};
const value_string gsm_a_type_of_number_values[] = {
@@ -2382,11 +2285,7 @@ de_cld_party_sub_addr(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len
(oct & 0x08) ?
"odd number of address signals" : "even number of address signals");
- other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_spare_bits, tvb, (curr_offset<<3)+5, 3, FALSE);
curr_offset++;
@@ -2443,11 +2342,7 @@ de_clg_party_bcd_num(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len,
a_bigbuf,
str);
- other_decode_bitfield_value(a_bigbuf, oct, 0x1c, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_spare_bits, tvb, (curr_offset<<3)+3, 3, FALSE);
switch (oct & 0x03)
{
@@ -2531,12 +2426,7 @@ de_clg_party_sub_addr(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len
(oct & 0x08) ?
"odd number of address signals" : "even number of address signals");
- other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
-
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_spare_bits, tvb, (curr_offset<<3)+5, 3, FALSE);
curr_offset++;
NO_MORE_DATA_CHECK(len);
@@ -2591,11 +2481,7 @@ de_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_
a_bigbuf,
str);
- other_decode_bitfield_value(a_bigbuf, oct, 0x10, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_spare_bits, tvb, (curr_offset<<3)+3, 1, FALSE);
switch (oct & 0x0f)
{
@@ -2811,11 +2697,7 @@ de_keypad_facility(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U
oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_spare_bits, tvb, curr_offset<<3, 1, FALSE);
other_decode_bitfield_value(a_bigbuf, oct, 0x7f, 8);
proto_tree_add_text(tree,
@@ -2897,11 +2779,7 @@ de_prog_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gcha
a_bigbuf,
str);
- other_decode_bitfield_value(a_bigbuf, oct, 0x10, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_spare_bits, tvb, (curr_offset<<3)+3, 1, FALSE);
switch (oct & 0x0f)
{
@@ -3720,11 +3598,7 @@ dtap_mm_auth_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
*/
oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_spare_bits, tvb, curr_offset<<3, 4, FALSE);
item =
proto_tree_add_text(tree,
@@ -3733,11 +3607,7 @@ dtap_mm_auth_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
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,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_spare_bits, tvb, (curr_offset<<3)+4, 1, FALSE);
other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
@@ -3838,11 +3708,7 @@ dtap_mm_cm_reestab_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint le
*/
oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_spare_bits, tvb, curr_offset<<3, 4, FALSE);
item =
proto_tree_add_text(tree,
@@ -3851,11 +3717,7 @@ dtap_mm_cm_reestab_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint le
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,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_spare_bits, tvb, (curr_offset<<3)+4, 1, FALSE);
other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
@@ -3982,12 +3844,7 @@ dtap_mm_cm_srvc_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
subtree = proto_item_add_subtree(item, ett_gsm_common_elem[DE_CIPH_KEY_SEQ_NUM]);
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
-
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_spare_bits, tvb, curr_offset<<3, 1, FALSE);
other_decode_bitfield_value(a_bigbuf, oct, 0x70, 8);
switch ((oct & 0x70) >> 4)
@@ -4074,11 +3931,7 @@ dtap_mm_id_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
*/
oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_spare_bits, tvb, curr_offset<<3, 4, FALSE);
item =
proto_tree_add_text(tree,
@@ -4087,11 +3940,7 @@ dtap_mm_id_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
subtree = proto_item_add_subtree(item, ett_gsm_dtap_elem[DE_ID_TYPE]);
- other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_spare_bits, tvb, (curr_offset<<3)+4, 1, FALSE);
switch (oct & 0x07)
{
@@ -4243,11 +4092,7 @@ dtap_mm_loc_upd_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
subtree = proto_item_add_subtree(item, ett_gsm_common_elem[DE_CIPH_KEY_SEQ_NUM]);
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_spare_bits, tvb, curr_offset<<3, 1, FALSE);
other_decode_bitfield_value(a_bigbuf, oct, 0x70, 8);
@@ -4283,11 +4128,7 @@ dtap_mm_loc_upd_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
a_bigbuf,
(oct & 0x08) ? "Follow-on request pending" : "No follow-on request pending");
- other_decode_bitfield_value(a_bigbuf, oct, 0x04, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_spare_bits, tvb, (curr_offset<<3)+5, 1, FALSE);
switch (oct & 0x03)
{
@@ -4522,11 +4363,7 @@ dtap_cc_congestion_control(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guin
*/
oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Spare",
- a_bigbuf);
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_spare_bits, tvb, curr_offset<<3, 4, FALSE);
item =
proto_tree_add_text(tree,
@@ -5861,72 +5698,82 @@ proto_register_gsm_a_dtap(void)
{ &hf_gsm_a_seq_no,
{ "Sequence number", "gsm_a.dtap_seq_no",
FT_UINT8, BASE_DEC, NULL, 0xc0,
- "", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_dtap_msg_mm_type,
{ "DTAP Mobility Management Message Type", "gsm_a.dtap_msg_mm_type",
FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_mm_strings), 0x3f,
- "", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_dtap_msg_cc_type,
{ "DTAP Call Control Message Type", "gsm_a.dtap_msg_cc_type",
FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_cc_strings), 0x3f,
- "", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_dtap_msg_sms_type,
{ "DTAP Short Message Service Message Type", "gsm_a.dtap_msg_sms_type",
FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_sms_strings), 0x0,
- "", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_dtap_msg_ss_type,
{ "DTAP Non call Supplementary Service Message Type", "gsm_a.dtap_msg_ss_type",
FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_ss_strings), 0x0,
- "", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_dtap_msg_tp_type,
{ "DTAP Tests Procedures Message Type", "gsm_a.dtap_msg_tp_type",
FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_tp_strings), 0x0,
- "", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_dtap_elem_id,
{ "Element ID", "gsm_a_dtap.elem_id",
FT_UINT8, BASE_DEC, NULL, 0,
- "", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_cld_party_bcd_num,
{ "Called Party BCD Number", "gsm_a.cld_party_bcd_num",
FT_STRING, BASE_DEC, 0, 0,
- "", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_clg_party_bcd_num,
{ "Calling Party BCD Number", "gsm_a.clg_party_bcd_num",
FT_STRING, BASE_DEC, 0, 0,
- "", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_dtap_cause,
{ "DTAP Cause", "gsm_a_dtap.cause",
FT_UINT8, BASE_HEX, 0, 0x0,
- "", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_extension,
{ "Extension", "gsm_a.extension",
FT_BOOLEAN, 8, TFS(&gsm_a_extension_value), 0x80,
- "Extension", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_type_of_number,
{ "Type of number", "gsm_a.type_of_number",
FT_UINT8, BASE_HEX, VALS(gsm_a_type_of_number_values), 0x70,
- "Type of number", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_numbering_plan_id,
{ "Numbering plan identification", "gsm_a.numbering_plan_id",
FT_UINT8, BASE_HEX, VALS(gsm_a_numbering_plan_id_values), 0x0f,
- "Numbering plan identification", HFILL }
+ NULL, HFILL }
},
{ &hf_gsm_a_lsa_id,
{ "LSA Identifier", "gsm_a.lsa_id",
FT_UINT24, BASE_HEX, NULL, 0x0,
- "LSA Identifier", HFILL }
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_speech_vers_ind,
+ { "Speech version indication", "gsm_a.speech_vers_ind",
+ FT_UINT8, BASE_HEX, VALS(gsm_a_speech_vers_ind_values), 0x0f,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_spare_bits,
+ { "Spare bit(s)","gsm_a.spare_bits",
+ FT_UINT8,BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
},
};