2 * Routines for GSM A Interface GPRS Mobility Management and GPRS Session Management
4 * Copyright 2003, Michael Lum <mlum [AT] telostech.com>
5 * In association with Telos Technology Inc.
7 * Added the GPRS Mobility Management Protocol and
8 * the GPRS Session Management Protocol
9 * Copyright 2004, Rene Pilz <rene.pilz [AT] ftw.com>
10 * In association with Telecommunications Research Center
11 * Vienna (ftw.)Betriebs-GmbH within the Project Metawin.
13 * Various updates, enhancements and fixes
14 * Copyright 2009, Gerasimos Dimitriadis <dimeg [AT] intracom.gr>
15 * In association with Intracom Telecom SA
20 * Mobile radio interface Layer 3 specification;
21 * Core network protocols;
23 * (3GPP TS 24.008 version 5.9.0 Release 5)
26 * Mobile radio interface Layer 3 specification;
27 * Core network protocols;
29 * (3GPP TS 24.008 version 6.7.0 Release 6)
30 * (3GPP TS 24.008 version 6.8.0 Release 6)
33 * Mobile radio interface Layer 3 specification;
34 * Core network protocols;
36 * (3GPP TS 24.008 version 9.6.0 Release 9)
39 * Mobile radio interface Layer 3 specification;
40 * Core network protocols;
42 * (3GPP TS 24.008 version 10.6.1 Release 10)
45 * Mobile radio interface Layer 3 specification;
46 * Core network protocols;
48 * (3GPP TS 24.008 version 11.7.0 Release 11)
51 * Mobile radio interface Layer 3 specification;
52 * Core network protocols;
54 * (3GPP TS 24.008 version 12.10.0 Release 12)
57 * Mobile radio interface Layer 3 specification;
58 * Core network protocols;
60 * (3GPP TS 24.008 version 13.8.0 Release 13)
63 * Mobile radio interface Layer 3 specification;
64 * Core network protocols;
66 * (3GPP TS 24.008 version 14.6.0 Release 14)
69 * Mobile radio interface Layer 3 specification;
70 * Core network protocols;
72 * (3GPP TS 24.008 version 15.2.0 Release 15)
74 * Wireshark - Network traffic analyzer
75 * By Gerald Combs <gerald@wireshark.org>
76 * Copyright 1998 Gerald Combs
78 * SPDX-License-Identifier: GPL-2.0-or-later
84 #include <epan/packet.h>
85 #include <epan/expert.h>
86 #include <epan/ipproto.h>
87 #include "packet-ber.h"
88 #include "packet-gsm_a_common.h"
89 #include "packet-e212.h"
90 #include "packet-ppp.h"
91 #include "packet-e164.h"
93 void proto_register_gsm_a_gm(void);
94 void proto_reg_handoff_gsm_a_gm(void);
96 /* PROTOTYPES/FORWARDS */
98 const value_string gsm_a_dtap_msg_gmm_strings[] = {
99 { 0x01, "Attach Request" },
100 { 0x02, "Attach Accept" },
101 { 0x03, "Attach Complete" },
102 { 0x04, "Attach Reject" },
103 { 0x05, "Detach Request" },
104 { 0x06, "Detach Accept" },
105 { 0x08, "Routing Area Update Request" },
106 { 0x09, "Routing Area Update Accept" },
107 { 0x0a, "Routing Area Update Complete" },
108 { 0x0b, "Routing Area Update Reject" },
109 { 0x0c, "Service Request" },
110 { 0x0d, "Service Accept" },
111 { 0x0e, "Service Reject" },
112 { 0x10, "P-TMSI Reallocation Command" },
113 { 0x11, "P-TMSI Reallocation Complete" },
114 { 0x12, "Authentication and Ciphering Req" },
115 { 0x13, "Authentication and Ciphering Resp" },
116 { 0x14, "Authentication and Ciphering Rej" },
117 { 0x15, "Identity Request" },
118 { 0x16, "Identity Response" },
119 { 0x1c, "Authentication and Ciphering Failure" },
120 { 0x20, "GMM Status" },
121 { 0x21, "GMM Information" },
124 static value_string_ext gsm_a_dtap_msg_gmm_strings_ext = VALUE_STRING_EXT_INIT(gsm_a_dtap_msg_gmm_strings);
127 const value_string gsm_a_dtap_msg_sm_strings[] = {
128 { 0x41, "Activate PDP Context Request" },
129 { 0x42, "Activate PDP Context Accept" },
130 { 0x43, "Activate PDP Context Reject" },
131 { 0x44, "Request PDP Context Activation" },
132 { 0x45, "Request PDP Context Activation rej." },
133 { 0x46, "Deactivate PDP Context Request" },
134 { 0x47, "Deactivate PDP Context Accept" },
135 { 0x48, "Modify PDP Context Request(Network to MS direction)" },
136 { 0x49, "Modify PDP Context Accept (MS to network direction)" },
137 { 0x4a, "Modify PDP Context Request(MS to network direction)" },
138 { 0x4b, "Modify PDP Context Accept (Network to MS direction)" },
139 { 0x4c, "Modify PDP Context Reject" },
140 { 0x4d, "Activate Secondary PDP Context Request" },
141 { 0x4e, "Activate Secondary PDP Context Accept" },
142 { 0x4f, "Activate Secondary PDP Context Reject" },
143 { 0x50, "Reserved: was allocated in earlier phases of the protocol" },
144 { 0x51, "Reserved: was allocated in earlier phases of the protocol" },
145 { 0x52, "Reserved: was allocated in earlier phases of the protocol" },
146 { 0x53, "Reserved: was allocated in earlier phases of the protocol" },
147 { 0x54, "Reserved: was allocated in earlier phases of the protocol" },
148 { 0x55, "SM Status" },
149 { 0x56, "Activate MBMS Context Request" },
150 { 0x57, "Activate MBMS Context Accept" },
151 { 0x58, "Activate MBMS Context Reject" },
152 { 0x59, "Request MBMS Context Activation" },
153 { 0x5a, "Request MBMS Context Activation Reject" },
154 { 0x5b, "Request Secondary PDP Context Activation" },
155 { 0x5c, "Request Secondary PDP Context Activation Reject" },
156 { 0x5d, "Notification" },
159 static value_string_ext gsm_a_dtap_msg_sm_strings_ext = VALUE_STRING_EXT_INIT(gsm_a_dtap_msg_sm_strings);
162 static const value_string gsm_gm_elem_strings[] = {
163 /* GPRS Mobility Management Information Elements 10.5.5 */
164 { DE_ADD_UPD_TYPE, "Additional Update Type" },
165 { DE_ATTACH_RES, "Attach Result" },
166 { DE_ATTACH_TYPE, "Attach Type" },
167 { DE_CIPH_ALG, "Ciphering Algorithm" },
168 { DE_INTEG_ALG, "Integrity Algorithm" },
169 { DE_TMSI_STAT, "TMSI Status" },
170 { DE_DETACH_TYPE, "Detach Type" },
171 { DE_DRX_PARAM, "DRX Parameter" },
172 { DE_FORCE_TO_STAND, "Force to Standby" },
173 { DE_FORCE_TO_STAND_H, "Force to Standby" },
174 { DE_P_TMSI_SIG, "P-TMSI Signature" },
175 { DE_P_TMSI_SIG_2, "P-TMSI Signature 2" },
176 { DE_ID_TYPE_2, "Identity Type 2" },
177 { DE_IMEISV_REQ, "IMEISV Request" },
178 { DE_REC_N_PDU_NUM_LIST, "Receive N-PDU Numbers List" },
179 { DE_MS_NET_CAP, "MS Network Capability" },
180 { DE_MS_RAD_ACC_CAP, "MS Radio Access Capability" },
181 { DE_GMM_CAUSE, "GMM Cause" },
182 { DE_RAI, "Routing Area Identification" },
183 { DE_RAI_2, "Routing Area Identification 2" },
184 { DE_UPD_RES, "Update Result" },
185 { DE_UPD_TYPE, "Update Type" },
186 { DE_AC_REF_NUM, "A&C Reference Number" },
187 { DE_AC_REF_NUM_H, "A&C Reference Number" },
188 { DE_SRVC_TYPE, "Service Type" },
189 { DE_CELL_NOT, "Cell Notification" },
190 { DE_PS_LCS_CAP, "PS LCS Capability" },
191 { DE_NET_FEAT_SUP, "Network Feature Support" },
192 { DE_ADD_NET_FEAT_SUP, "Additional Network Feature Support" },
193 { DE_RAT_INFO_CONTAINER, "Inter RAT Information Container" },
194 { DE_REQ_MS_INFO, "Requested MS Information" },
195 { DE_UE_NETWORK_CAP, "UE Network Capability" },
196 { DE_EUTRAN_IRAT_INFO_CONTAINER, "E-UTRAN Inter RAT Information Container" },
197 { DE_VOICE_DOMAIN_PREF, "Voice Domain Preference and UE's Usage Setting" },
198 { DE_PTMSI_TYPE, "P-TMSI Type" },
199 { DE_LAI_2, "Location Area Identification 2" },
200 { DE_NET_RES_ID_CONT, "Network Resource Identifier Container" },
201 { DE_EXT_DRX_PARAMS, "Extended DRX Parameters" },
202 { DE_MAC, "Message Authentication Code" },
203 { DE_UP_INTEG_IND, "User Plane Integrity Indicator" },
204 { DE_DCN_ID, "DCN-ID"},
205 { DE_PLMN_ID_CN_OPERATOR, "PLMN identity of the CN operator"},
206 { DE_NON_3GPP_NW_PROV_POL, "Non-3GPP NW provided policies"},
207 /* Session Management Information Elements 10.5.6 */
208 { DE_ACC_POINT_NAME, "Access Point Name" },
209 { DE_NET_SAPI, "Network Service Access Point Identifier" },
210 { DE_PRO_CONF_OPT, "Protocol Configuration Options" },
211 { DE_EXT_PRO_CONF_OPT, "Extended Protocol Configuration Options" },
212 { DE_PD_PRO_ADDR, "Packet Data Protocol Address" },
213 { DE_QOS, "Quality Of Service" },
214 { DE_RE_ATTEMPT_IND, "Re-attempt Indicator" },
215 { DE_EXT_QOS, "Extended Quality Of Service" },
216 { DE_SM_CAUSE, "SM Cause" },
217 { DE_SM_CAUSE_2, "SM Cause 2" },
218 { DE_LINKED_TI, "Linked TI" },
219 { DE_LLC_SAPI, "LLC Service Access Point Identifier" },
220 { DE_TEAR_DOWN_IND, "Tear Down Indicator" },
221 { DE_PACKET_FLOW_ID, "Packet Flow Identifier" },
222 { DE_TRAFFIC_FLOW_TEMPLATE, "Traffic Flow Template" },
223 { DE_TMGI, "Temporary Mobile Group Identity (TMGI)" },
224 { DE_MBMS_BEARER_CAP, "MBMS bearer capabilities" },
225 { DE_MBMS_PROT_CONF_OPT, "MBMS protocol configuration options" },
226 { DE_ENH_NSAPI, "Enhanced network service access point identifier" },
227 { DE_REQ_TYPE, "Request type" },
228 { DE_SM_NOTIF_IND, "Notification indicator" },
229 { DE_SM_CONNECTIVITY_TYPE, "Connectivity type" },
230 { DE_SM_WLAN_OFFLOAD_ACCEPT, "WLAN offload acceptability" },
231 { DE_NBIFOM_CONT, "NBIFOM container" },
232 /* GPRS Common Information Elements 10.5.7 */
233 { DE_PDP_CONTEXT_STAT, "PDP Context Status" },
234 { DE_RAD_PRIO, "Radio Priority" },
235 { DE_GPRS_TIMER, "GPRS Timer" },
236 { DE_GPRS_TIMER_2, "GPRS Timer 2" },
237 { DE_GPRS_TIMER_3, "GPRS Timer 3" },
238 { DE_RAD_PRIO_2, "Radio Priority 2"},
239 { DE_MBMS_CTX_STATUS, "MBMS context status"},
240 { DE_UPLINK_DATA_STATUS, "Uplink data status"},
241 { DE_DEVICE_PROPERTIES, "Device properties"},
244 value_string_ext gsm_gm_elem_strings_ext = VALUE_STRING_EXT_INIT(gsm_gm_elem_strings);
246 #define DTAP_GMM_IEI_MASK 0xff
247 #define DTAP_SM_IEI_MASK 0xff
249 /* Initialize the protocol and registered fields */
250 static int proto_a_gm = -1;
252 static int hf_gsm_a_dtap_msg_gmm_type = -1;
253 static int hf_gsm_a_dtap_msg_sm_type = -1;
254 int hf_gsm_a_gm_elem_id = -1;
255 static int hf_gsm_a_sm_qos_delay_cls = -1;
256 static int hf_gsm_a_sm_qos_reliability_cls = -1;
257 static int hf_gsm_a_sm_qos_traffic_cls = -1;
258 static int hf_gsm_a_sm_qos_del_order = -1;
259 static int hf_gsm_a_sm_qos_del_of_err_sdu = -1;
260 static int hf_gsm_a_sm_qos_ber = -1;
261 static int hf_gsm_a_sm_qos_sdu_err_rat = -1;
262 static int hf_gsm_a_sm_qos_traff_hdl_pri = -1;
264 static int hf_gsm_a_gmm_split_pg_cycle_code = -1;
265 static int hf_gsm_a_gmm_split_on_ccch = -1;
266 static int hf_gsm_a_gmm_non_drx_timer = -1;
267 static int hf_gsm_a_gmm_cn_spec_drx_cycle_len_coef = -1;
269 static int hf_gsm_a_gmm_ptmsi_sig =-1;
270 static int hf_gsm_a_gmm_ptmsi_sig2 =-1;
272 static int hf_gsm_a_sm_tft_op_code = -1;
273 static int hf_gsm_a_sm_tft_e_bit = -1;
274 static int hf_gsm_a_sm_tft_pkt_flt = -1;
275 static int hf_gsm_a_sm_tft_pkt_flt_id = -1;
276 static int hf_gsm_a_sm_tft_pkt_flt_dir = -1;
277 static int hf_gsm_a_sm_ip4_address = -1;
278 static int hf_gsm_a_sm_ip4_mask = -1;
279 static int hf_gsm_a_sm_ip6_address = -1;
280 static int hf_gsm_a_sm_ip6_mask = -1;
281 static int hf_gsm_a_sm_ip6_prefix_length = -1;
282 static int hf_gsm_a_sm_tft_protocol_header = -1;
283 static int hf_gsm_a_sm_tft_port = -1;
284 static int hf_gsm_a_sm_tft_port_low = -1;
285 static int hf_gsm_a_sm_tft_port_high = -1;
286 static int hf_gsm_a_sm_tft_security = -1;
287 static int hf_gsm_a_sm_tft_traffic_class = -1;
288 static int hf_gsm_a_sm_tft_traffic_mask = -1;
289 static int hf_gsm_a_sm_tft_flow_label_type = -1;
290 static int hf_gsm_a_sm_tft_param_id = -1;
291 static int hf_gsm_a_sm_tft_packet_filter = -1;
292 static int hf_gsm_a_sm_tft_packet_evaluation_precedence = -1;
293 static int hf_gsm_a_sm_tft_packet_filter_length = -1;
294 static int hf_gsm_a_sm_tft_authorization_token_value = -1;
295 static int hf_gsm_a_sm_tft_media_component_number_value = -1;
296 static int hf_gsm_a_sm_tft_ip_flow_number = -1;
297 static int hf_gsm_a_sm_tft_packet_filter_identifier = -1;
298 static int hf_gsm_a_sm_tft_parameter_content = -1;
299 static int hf_gsm_a_sm_tft_packet_filter_component_type_id = -1;
300 static int hf_gsm_a_gm_acc_tech_type = -1;
301 static int hf_gsm_a_gm_acc_cap_struct_len = -1;
302 static int hf_gsm_a_gm_sms_value = -1;
303 static int hf_gsm_a_gm_sm_value = -1;
304 static int hf_gsm_a_gm_link_dir = -1;
305 static int hf_gsm_a_gm_cause = -1;
307 static int hf_gsm_a_gm_add_upd_type = -1;
308 static int hf_gsm_a_gm_fop = -1;
309 static int hf_gsm_a_gm_res_of_attach = -1;
310 static int hf_gsm_a_gm_type_of_ciph_alg = -1;
311 static int hf_gsm_a_gm_type_of_integ_alg = -1;
312 static int hf_gsm_a_gm_imeisv_req = -1;
313 static int hf_gsm_a_gm_nsapi = -1;
314 static int hf_gsm_a_gm_ac_ref_nr = -1;
315 static int hf_gsm_a_gm_force_to_standby = -1;
316 static int hf_gsm_a_gm_serv_type = -1;
317 static int hf_gsm_a_gm_for = -1;
318 static int hf_gsm_a_gm_type_of_attach = -1;
319 static int hf_gsm_a_gm_tmsi_flag = -1;
320 static int hf_gsm_a_gm_power_off = -1;
321 static int hf_gsm_a_gm_type_of_detach_mo = -1;
322 static int hf_gsm_a_gm_type_of_detach_mt = -1;
323 static int hf_gsm_a_gm_update_type = -1;
324 static int hf_gsm_a_gm_gprs_timer = -1;
325 static int hf_gsm_a_gm_gprs_timer_unit = -1;
326 static int hf_gsm_a_gm_gprs_timer_value = -1;
327 static int hf_gsm_a_gm_gprs_timer2 = -1;
328 static int hf_gsm_a_gm_gprs_timer2_unit = -1;
329 static int hf_gsm_a_gm_gprs_timer2_value = -1;
330 static int hf_gsm_a_gm_gprs_timer3 = -1;
331 static int hf_gsm_a_gm_gprs_timer3_unit = -1;
332 static int hf_gsm_a_gm_gprs_timer3_value = -1;
333 static int hf_gsm_a_gm_nsapi_5_ul_stat = -1;
334 static int hf_gsm_a_gm_nsapi_6_ul_stat = -1;
335 static int hf_gsm_a_gm_nsapi_7_ul_stat = -1;
336 static int hf_gsm_a_gm_nsapi_8_ul_stat = -1;
337 static int hf_gsm_a_gm_nsapi_9_ul_stat = -1;
338 static int hf_gsm_a_gm_nsapi_10_ul_stat = -1;
339 static int hf_gsm_a_gm_nsapi_11_ul_stat = -1;
340 static int hf_gsm_a_gm_nsapi_12_ul_stat = -1;
341 static int hf_gsm_a_gm_nsapi_13_ul_stat = -1;
342 static int hf_gsm_a_gm_nsapi_14_ul_stat = -1;
343 static int hf_gsm_a_gm_nsapi_15_ul_stat = -1;
344 static int hf_gsm_a_gm_device_prop_low_prio = -1;
345 static int hf_gsm_a_gm_apn = -1;
346 static int hf_gsm_a_gm_pco_pid = -1;
347 static int hf_gsm_a_gm_pco_app_spec_info = -1;
348 static int hf_gsm_a_gm_type_of_identity = -1;
349 int hf_gsm_a_gm_rac = -1;
350 static int hf_gsm_a_gm_mta_e = -1;
351 static int hf_gsm_a_gm_mta_r = -1;
352 static int hf_gsm_a_gm_apc = -1;
353 static int hf_gsm_a_gm_otd_a = -1;
354 static int hf_gsm_a_gm_otd_b = -1;
355 static int hf_gsm_a_gm_gps_a = -1;
356 static int hf_gsm_a_gm_gps_b = -1;
357 static int hf_gsm_a_gm_gps_c = -1;
358 static int hf_gsm_a_gm_motd = -1;
359 static int hf_gsm_a_gm_mta_a = -1;
360 static int hf_gsm_a_gm_lcs_molr = -1;
361 static int hf_gsm_a_gm_mbms = -1;
362 static int hf_gsm_a_gm_ims_vops = -1;
363 static int hf_gsm_a_gm_emc_bs = -1;
364 static int hf_gsm_a_gm_epco = -1;
365 static int hf_gsm_a_gm_restrict_ec = -1;
366 static int hf_gsm_a_gm_gprs_sms = -1;
367 static int hf_gsm_a_gm_req_ms_info_irat = -1;
368 static int hf_gsm_a_gm_req_ms_info_irat2 = -1;
369 static int hf_gsm_a_gm_ue_usage_setting = -1;
370 static int hf_gsm_a_gm_voice_domain_pref_for_eutran = -1;
371 static int hf_gsm_a_gm_ptmsi_type = -1;
372 static int hf_gsm_a_gm_nri_cont = -1;
373 static int hf_gsm_a_gm_paging_time_window = -1;
374 static int hf_gsm_a_gm_edrx_value = -1;
375 static int hf_gsm_a_gm_mac = -1;
376 static int hf_gsm_a_gm_up_integ_ind = -1;
377 static int hf_gsm_a_gm_dcn_id = -1;
378 static int hf_gsm_a_gm_n3en_ind = -1;
379 static int hf_gsm_a_sm_pdp_type_org = -1;
380 static int hf_gsm_a_sm_qos_mean_thr = -1;
381 static int hf_gsm_a_sm_qos_peak_thr = -1;
382 static int hf_gsm_a_sm_qos_prec_class = -1;
383 static int hf_gsm_a_sm_qos_trans_delay = -1;
384 static int hf_gsm_a_sm_qos_signalling_ind = -1;
385 static int hf_gsm_a_sm_qos_source_stat_desc = -1;
386 static int hf_gsm_a_sm_qos_max_bitrate_upl = -1;
387 static int hf_gsm_a_sm_qos_max_bitrate_downl = -1;
388 static int hf_gsm_a_sm_qos_guar_bitrate_upl = -1;
389 static int hf_gsm_a_sm_qos_guar_bitrate_downl = -1;
390 static int hf_gsm_a_sm_qos_max_bitrate_upl_ext = -1;
391 static int hf_gsm_a_sm_qos_max_bitrate_downl_ext = -1;
392 static int hf_gsm_a_sm_qos_guar_bitrate_upl_ext = -1;
393 static int hf_gsm_a_sm_qos_guar_bitrate_downl_ext = -1;
394 static int hf_gsm_a_sm_qos_max_bitrate_upl_ext2 = -1;
395 static int hf_gsm_a_sm_qos_max_bitrate_downl_ext2 = -1;
396 static int hf_gsm_a_sm_qos_guar_bitrate_upl_ext2 = -1;
397 static int hf_gsm_a_sm_qos_guar_bitrate_downl_ext2 = -1;
398 static int hf_gsm_a_sm_qos_maximum_sdu_size = -1;
399 static int hf_gsm_a_sm_eplmnc = -1;
400 static int hf_gsm_a_sm_ratc = -1;
401 static int hf_gsm_a_sm_cause = -1;
402 static int hf_gsm_a_sm_cause_2 = -1;
403 static int hf_gsm_a_sm_llc_sapi = -1;
404 static int hf_gsm_a_sm_tdi = -1;
405 static int hf_gsm_a_sm_packet_flow_id = -1;
406 static int hf_gsm_a_sm_tmgi = -1;
407 static int hf_gsm_a_sm_enh_nsapi = -1;
408 static int hf_gsm_a_sm_req_type = -1;
409 static int hf_gsm_a_sm_notif_ind = -1;
410 static int hf_gsm_a_sm_connectivity_type = -1;
411 static int hf_gsm_a_sm_wlan_utran_offload_accept = -1;
412 static int hf_gsm_a_sm_wlan_eutran_offload_accept = -1;
413 static int hf_gsm_a_sm_nbifom_cont = -1;
414 static int hf_gsm_a_gm_rac_ctrled_early_cm_sending = -1;
415 static int hf_gsm_a_gm_rac_pseudo_sync = -1;
416 static int hf_gsm_a_gm_rac_vgcs = -1;
417 static int hf_gsm_a_gm_rac_vbs = -1;
418 static int hf_gsm_a_gm_rac_multislot_capability = -1;
419 static int hf_gsm_a_gm_rac_hscsd_multi_slot_class = -1;
420 static int hf_gsm_a_gm_rac_gprs_multi_slot_class = -1;
421 static int hf_gsm_a_gm_rac_gprs_ext_dyn_alloc_cap = -1;
422 static int hf_gsm_a_gm_rac_ecsd_multi_slot_class = -1;
423 static int hf_gsm_a_gm_rac_egprs_multi_slot_class = -1;
424 static int hf_gsm_a_gm_rac_egprs_ext_dyn_alloc_cap = -1;
425 static int hf_gsm_a_gm_rac_dtm_gprs_multi_slot_class = -1;
426 static int hf_gsm_a_gm_rac_single_slt_dtm = -1;
427 static int hf_gsm_a_gm_rac_dtm_egprs_multi_slot_cls_pres = -1;
428 static int hf_gsm_a_gm_rac_dtm_egprs_multi_slot_class = -1;
429 static int hf_gsm_a_gm_rac_8psk_pow_cap_pres = -1;
430 static int hf_gsm_a_gm_rac_comp_int_meas_cap = -1;
431 static int hf_gsm_a_gm_rel_lev_ind = -1;
432 static int hf_gsm_a_gm_rac_geran_feat_pkg = -1;
433 static int hf_gsm_a_gm_rac_umts_fdd_cap = -1;
434 static int hf_gsm_a_gm_rac_umts_384_tdd_ra_cap = -1;
435 static int hf_gsm_a_gm_rac_cdma2000_cap = -1;
436 static int hf_gsm_a_gm_rac_umts_128_tdd_ra_cap = -1;
437 static int hf_gsm_a_gm_rac_mod_based_multi_slot_class_support = -1;
438 static int hf_gsm_a_gm_rac_geran_iu_mode_cap = -1;
439 static int hf_gsm_a_gm_rac_flo_iu_cap = -1;
440 static int hf_gsm_a_gm_rac_mult_tbf_cap = -1;
441 static int hf_gsm_a_gm_rac_down_adv_rec_perf = -1;
442 static int hf_gsm_a_gm_rac_ext_rlc_mac_ctrl_msg_seg_cap = -1;
443 static int hf_gsm_a_gm_rac_dtm_enh_cap = -1;
444 static int hf_gsm_a_gm_rac_dtm_gprs_high_multi_slot_class = -1;
445 static int hf_gsm_a_gm_rac_dtm_egprs_high_multi_slot_class = -1;
446 static int hf_gsm_a_gm_rac_ps_ho_cap = -1;
447 static int hf_gsm_a_gm_rac_dtm_ho_cap = -1;
448 static int hf_gsm_a_gm_rac_multi_slot_cap_red_down_dual_carrier = -1;
449 static int hf_gsm_a_gm_rac_down_dual_carrier_dtm_cap = -1;
450 static int hf_gsm_a_gm_rac_flex_ts_assign = -1;
451 static int hf_gsm_a_gm_rac_gan_ps_ho_cap = -1;
452 static int hf_gsm_a_gm_rac_rlc_non_pers_mode = -1;
453 static int hf_gsm_a_gm_rac_reduced_lat_cap = -1;
454 static int hf_gsm_a_gm_rac_ul_egprs2 = -1;
455 static int hf_gsm_a_gm_rac_dl_egprs2 = -1;
456 static int hf_gsm_a_gm_rac_eutra_fdd_support = -1;
457 static int hf_gsm_a_gm_rac_eutra_tdd_support = -1;
458 static int hf_gsm_a_gm_rac_geran_to_eutra_support_in_geran_ptm = -1;
459 static int hf_gsm_a_gm_rac_prio_based_resel_support = -1;
460 static int hf_gsm_a_gm_rac_alt_efta_multi_slot_class = -1;
461 static int hf_gsm_a_gm_rac_efta_multi_slot_cap_red_down_dual_carrier = -1;
462 static int hf_gsm_a_gm_rac_ind_up_layer_pdu_start_cap_for_rlc_um = -1;
463 static int hf_gsm_a_gm_rac_emst_cap = -1;
464 static int hf_gsm_a_gm_rac_mtti_cap = -1;
465 static int hf_gsm_a_gm_rac_utra_csg_cell_report = -1;
466 static int hf_gsm_a_gm_rac_eutra_csg_cell_report = -1;
467 static int hf_gsm_a_gm_rac_dtr_cap = -1;
468 static int hf_gsm_a_gm_rac_emsr_cap = -1;
469 static int hf_gsm_a_gm_rac_fast_down_freq_switch_cap = -1;
470 static int hf_gsm_a_gm_rac_tighter_cap = -1;
471 static int hf_gsm_a_gm_rac_fanr_cap = -1;
472 static int hf_gsm_a_gm_rac_ipa_cap = -1;
473 static int hf_gsm_a_gm_rac_geran_nw_sharing_support = -1;
474 static int hf_gsm_a_gm_rac_eutra_wb_rsrq_support = -1;
475 static int hf_gsm_a_gm_rac_utra_mfbi_support = -1;
476 static int hf_gsm_a_gm_rac_eutra_mfbi_support = -1;
477 static int hf_gsm_a_gm_rac_dlmc_non_contig_intra_band_recep = -1;
478 static int hf_gsm_a_gm_rac_dlmc_inter_band_recep = -1;
479 static int hf_gsm_a_gm_rac_dlmc_max_bandwidth = -1;
480 static int hf_gsm_a_gm_rac_dlmc_max_nb_dl_ts = -1;
481 static int hf_gsm_a_gm_rac_dlmc_max_nb_dl_carriers = -1;
482 static int hf_gsm_a_gm_rac_ext_tsc_set_cap_support = -1;
483 static int hf_gsm_a_gm_rac_ext_earfcn_value_range = -1;
484 static int hf_gsm_a_gm_rac_ec_pch_mon_support = -1;
485 static int hf_gsm_a_gm_rac_ms_sync_accuracy = -1;
486 static int hf_gsm_a_gm_rac_ext_ec_ul_cov_enh_support = -1;
487 static int hf_gsm_a_sm_ti_flag = -1;
488 static int hf_gsm_a_sm_ext = -1;
490 static int hf_gsm_a_gmm_net_cap_gea1 = -1;
491 static int hf_gsm_a_gmm_net_cap_smdch = -1;
492 static int hf_gsm_a_gmm_net_cap_smgprs = -1;
493 static int hf_gsm_a_gmm_net_cap_ucs2 = -1;
494 static int hf_gsm_a_gmm_net_cap_ss_scr_ind = -1;
495 static int hf_gsm_a_gmm_net_cap_solsa = -1;
496 static int hf_gsm_a_gmm_net_cap_rev = -1;
497 static int hf_gsm_a_gmm_net_cap_pfc = -1;
498 static int hf_gsm_a_gmm_net_cap_ext_gea_bits = -1;
499 static int hf_gsm_a_gmm_net_cap_gea2 = -1;
500 static int hf_gsm_a_gmm_net_cap_gea3 = -1;
501 static int hf_gsm_a_gmm_net_cap_gea4 = -1;
502 static int hf_gsm_a_gmm_net_cap_gea5 = -1;
503 static int hf_gsm_a_gmm_net_cap_gea6 = -1;
504 static int hf_gsm_a_gmm_net_cap_gea7 = -1;
505 static int hf_gsm_a_gmm_net_cap_lcs = -1;
506 static int hf_gsm_a_gmm_net_cap_ps_irat_iu = -1;
507 static int hf_gsm_a_gmm_net_cap_ps_irat_s1 = -1;
508 static int hf_gsm_a_gmm_net_cap_comb_proc = -1;
509 static int hf_gsm_a_gmm_net_cap_isr = -1;
510 static int hf_gsm_a_gmm_net_cap_srvcc_to_geran = -1;
511 static int hf_gsm_a_gmm_net_cap_epc = -1;
512 static int hf_gsm_a_gmm_net_cap_nf = -1;
513 static int hf_gsm_a_gmm_net_geran_net_sharing = -1;
514 static int hf_gsm_a_gmm_net_cap_up_int_prot = -1;
515 static int hf_gsm_a_gmm_net_cap_up_gia4 = -1;
516 static int hf_gsm_a_gmm_net_cap_up_gia5 = -1;
517 static int hf_gsm_a_gmm_net_cap_up_gia6 = -1;
518 static int hf_gsm_a_gmm_net_cap_up_gia7 = -1;
519 static int hf_gsm_a_gmm_net_cap_epco_ie_ind = -1;
520 static int hf_gsm_a_gmm_net_cap_restrict_use_enh_cov = -1;
521 static int hf_gsm_a_gmm_net_cap_dc_eutra_nr_cap = -1;
523 /* Generated from convert_proto_tree_add_text.pl */
524 static int hf_gsm_a_gm_presence = -1;
525 static int hf_gsm_a_gm_8psk_power_class = -1;
526 static int hf_gsm_a_gm_rf_power_capability = -1;
527 static int hf_gsm_a_gm_a5_bits = -1;
528 static int hf_gsm_a_gm_8psk_power_capability = -1;
529 static int hf_gsm_a_gm_extended_dtm_gprs_multi_slot_class = -1;
530 static int hf_gsm_a_gm_extended_dtm_egprs_multi_slot_class = -1;
531 static int hf_gsm_a_gm_high_multislot_capability = -1;
532 static int hf_gsm_a_gm_gmsk_multislot_power_profile = -1;
533 static int hf_gsm_a_gm_8psk_multislot_power_profile = -1;
534 static int hf_gsm_a_gm_update_result = -1;
535 static int hf_gsm_a_gm_radio_priority_pdp = -1;
536 static int hf_gsm_a_gm_radio_priority_tom8 = -1;
537 static int hf_gsm_a_gm_configuration_protocol = -1;
538 static int hf_gsm_a_gm_sm_pco_length = -1;
539 static int hf_gsm_a_gm_sm_pco_pcscf_ipv6 = -1;
540 static int hf_gsm_a_gm_sm_pco_dns_ipv6 = -1;
541 static int hf_gsm_a_gm_sm_pco_dsmipv6_home_agent_ipv6 = -1;
542 static int hf_gsm_a_gm_sm_pco_dsmipv6_home_network_ipv6 = -1;
543 static int hf_gsm_a_gm_sm_pco_reject_code = -1;
544 static int hf_gsm_a_gm_sm_pco_dsmipv6_home_network_prefix_length = -1;
545 static int hf_gsm_a_gm_sm_pco_dsmipv6_home_agent_ipv4 = -1;
546 static int hf_gsm_a_gm_sm_pco_pcscf_ipv4 = -1;
547 static int hf_gsm_a_gm_sm_pco_dns_ipv4 = -1;
548 static int hf_gsm_a_gm_sm_pco_ipv4_link_mtu_size = -1;
549 static int hf_gsm_a_gm_sm_pco_nbifom_mode = -1;
550 static int hf_gsm_a_gm_sm_pco_non_ip_link_mtu_size = -1;
551 static int hf_gsm_a_gm_sm_pco_apn_rate_ctrl_params_aer = -1;
552 static int hf_gsm_a_gm_sm_pco_apn_rate_ctrl_params_ul_time_unit = -1;
553 static int hf_gsm_a_gm_sm_pco_apn_rate_ctrl_params_max_ul_rate = -1;
554 static int hf_gsm_a_gm_sm_pco_3gpp_data_off_ue_status = -1;
555 static int hf_gsm_a_gm_sm_pco_sel_bearer_ctrl_mode = -1;
556 static int hf_gsm_a_gm_sm_pco_add_apn_rate_ctrl_params_ul_time_unit = -1;
557 static int hf_gsm_a_gm_sm_pco_add_apn_rate_ctrl_params_max_ul_rate = -1;
558 static int hf_gsm_a_gm_sm_pco_pdu_session_id = -1;
559 static int hf_gsm_a_gm_sm_pco_pdu_session_address_lifetime = -1;
560 static int hf_gsm_a_sm_pdp_type_number = -1;
561 static int hf_gsm_a_sm_pdp_address = -1;
562 static int hf_gsm_a_gm_ti_value = -1;
564 /* Initialize the subtree pointers */
565 static gint ett_gmm_radio_cap = -1;
566 static gint ett_gmm_network_cap = -1;
567 static gint ett_gsm_a_gm_msrac_multislot_capability = -1;
568 static gint ett_gmm_rai = -1;
569 static gint ett_gmm_gprs_timer = -1;
571 static gint ett_sm_tft = -1;
572 static gint ett_sm_pco = -1;
574 static expert_field ei_gsm_a_gm_extraneous_data = EI_INIT;
575 static expert_field ei_gsm_a_gm_not_enough_data = EI_INIT;
576 static expert_field ei_gsm_a_gm_undecoded = EI_INIT;
577 static expert_field ei_gsm_a_gm_apn_too_long = EI_INIT;
578 static expert_field ei_gsm_a_gm_missing_mandatory_element = EI_INIT;
580 static dissector_handle_t rrc_irat_ho_info_handle;
581 static dissector_handle_t lte_rrc_ue_eutra_cap_handle;
582 static dissector_handle_t nbifom_handle;
584 static dissector_table_t gprs_sm_pco_subdissector_table; /* GPRS SM PCO PPP Protocols */
586 static const unit_name_string units_message_messages = { " message", " messages" };
588 #define NUM_GSM_GM_ELEM (sizeof(gsm_gm_elem_strings)/sizeof(value_string))
589 gint ett_gsm_gm_elem[NUM_GSM_GM_ELEM];
591 static const gchar *pdp_str[2]={ "PDP-INACTIVE", "PDP-ACTIVE" };
594 * [9] 10.5.5.0 Additional Update Type
596 static const true_false_string gsm_a_gm_add_upd_type_value = {
598 "No additional information (shall be interpreted as request for combined attach or combined tracking area updating)"
601 de_gmm_add_upd_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
603 guint32 curr_offset, bit_offset;
605 curr_offset = offset;
606 bit_offset = (curr_offset<<3)+4;
608 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
610 proto_tree_add_bits_item(tree, hf_gsm_a_gm_add_upd_type, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
613 return (curr_offset - offset);
617 * [9] 10.5.5.1 Attach result
619 static const value_string gsm_a_gm_res_of_attach_vals[] = {
620 { 0x01, "GPRS only attached" },
621 { 0x03, "Combined GPRS/IMSI attached" },
626 de_gmm_attach_res(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
628 proto_tree_add_item(tree, hf_gsm_a_gm_fop, tvb, offset, 1, ENC_BIG_ENDIAN);
629 proto_tree_add_item(tree, hf_gsm_a_gm_res_of_attach, tvb, offset, 1, ENC_BIG_ENDIAN);
631 /* no length check possible */
636 * [9] 10.5.5.2 Attach type
638 static const value_string gsm_a_gm_type_of_attach_vals[] = {
639 { 0x01, "GPRS attach" },
640 { 0x02, "Not used (In earlier versions: GPRS attach while IMSI attached)" },
641 { 0x03, "Combined GPRS/IMSI attached" },
646 de_gmm_attach_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
648 proto_tree_add_item(tree, hf_gsm_a_gm_for, tvb, offset, 1, ENC_BIG_ENDIAN);
649 proto_tree_add_item(tree, hf_gsm_a_gm_type_of_attach, tvb, offset, 1, ENC_BIG_ENDIAN);
651 /* no length check possible */
656 * [9] 10.5.5.3 Ciphering algorithm
658 const value_string gsm_a_gm_type_of_ciph_alg_vals[] = {
659 { 0x00, "ciphering not used" },
660 { 0x01, "GPRS Encryption Algorithm GEA/1" },
661 { 0x02, "GPRS Encryption Algorithm GEA/2" },
662 { 0x03, "GPRS Encryption Algorithm GEA/3" },
663 { 0x04, "GPRS Encryption Algorithm GEA/4" },
664 { 0x05, "GPRS Encryption Algorithm GEA/5" },
665 { 0x06, "GPRS Encryption Algorithm GEA/6" },
666 { 0x07, "GPRS Encryption Algorithm GEA/7" },
671 de_gmm_ciph_alg(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
673 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (offset << 3) + 4, 1, ENC_BIG_ENDIAN);
674 proto_tree_add_item(tree, hf_gsm_a_gm_type_of_ciph_alg, tvb, offset, 1, ENC_BIG_ENDIAN);
676 /* no length check possible */
681 * [13] 10.5.5.3a Integrity protection algorithm
683 const value_string gsm_a_gm_type_of_integ_alg_vals[] = {
684 { 0x00, "GPRS Integrity Algorithm GIA/4" },
685 { 0x01, "GPRS Integrity Algorithm GIA/5" },
686 { 0x02, "GPRS Integrity Algorithm GIA/6" },
687 { 0x03, "GPRS Integrity Algorithm GIA/7" },
692 de_gmm_integ_alg(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
694 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (offset << 3) + 4, 1, ENC_BIG_ENDIAN);
695 proto_tree_add_item(tree, hf_gsm_a_gm_type_of_integ_alg, tvb, offset, 1, ENC_BIG_ENDIAN);
697 /* no length check possible */
702 * [9] 10.5.5.4 TMSI status
704 const true_false_string gsm_a_gm_tmsi_flag_value = {
705 "valid TMSI available",
706 "no valid TMSI available"
710 de_gmm_tmsi_stat(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
712 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (offset << 3) + 4, 3, ENC_BIG_ENDIAN);
713 proto_tree_add_item(tree, hf_gsm_a_gm_tmsi_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
715 /* no length check possible */
722 const true_false_string gsm_a_gm_power_off_value = {
723 "power switched off",
727 const value_string gsm_a_gm_type_of_detach_mo_vals[] = {
728 { 0x01, "GPRS detach" },
729 { 0x02, "IMSI detach" },
730 { 0x03, "Combined GPRS/IMSI detach" },
734 const value_string gsm_a_gm_type_of_detach_mt_vals[] = {
735 { 0x01, "re-attach required" },
736 { 0x02, "re-attach not required" },
737 { 0x03, "IMSI detach (after VLR failure)" },
742 de_gmm_detach_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
746 curr_offset = offset;
748 if (pinfo->p2p_dir == P2P_DIR_RECV) {
749 proto_tree_add_item(tree, hf_gsm_a_gm_power_off, tvb, offset, 1, ENC_BIG_ENDIAN);
750 proto_tree_add_item(tree, hf_gsm_a_gm_type_of_detach_mo, tvb, offset, 1, ENC_BIG_ENDIAN);
752 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (offset << 3) + 4, 1, ENC_BIG_ENDIAN);
753 proto_tree_add_item(tree, hf_gsm_a_gm_type_of_detach_mt, tvb, offset, 1, ENC_BIG_ENDIAN);
758 /* no length check possible */
760 return (curr_offset - offset);
767 /* SPLIT PG CYCLE CODE, octet 2 */
768 static const value_string gsm_a_gmm_split_pg_cycle_code_strings[] = {
769 { 0, "704 (equivalent to no DRX)" },
870 static value_string_ext gsm_a_gmm_split_pg_cycle_code_strings_ext = VALUE_STRING_EXT_INIT(gsm_a_gmm_split_pg_cycle_code_strings);
872 /* SPLIT on CCCH, octet 3 (bit 4)
873 * 0 Split pg cycle on CCCH is not supported by the mobile station
874 * 1 Split pg cycle on CCCH is supported by the mobile station
876 static const true_false_string gsm_a_gmm_split_on_ccch_value = {
877 "Split pg cycle on CCCH is supported by the mobile station",
878 "Split pg cycle on CCCH is not supported by the mobile station"
881 /* non-DRX timer, octet 3
885 static const value_string gsm_a_gmm_non_drx_timer_strings[] = {
886 { 0x00, "no non-DRX mode after transfer state" },
887 { 0x01, "max. 1 sec non-DRX mode after transfer state" },
888 { 0x02, "max. 2 sec non-DRX mode after transfer state" },
889 { 0x03, "max. 4 sec non-DRX mode after transfer state" },
890 { 0x04, "max. 8 sec non-DRX mode after transfer state" },
891 { 0x05, "max. 16 sec non-DRX mode after transfer state" },
892 { 0x06, "max. 32 sec non-DRX mode after transfer state" },
893 { 0x07, "max. 64 sec non-DRX mode after transfer state" },
897 * CN Specific DRX cycle length coefficient, octet 3
899 * 8 7 6 5 Iu and S1 mode specific
900 * 0 0 0 0 For Iu mode, CN Specific DRX cycle length coefficient not specified by the MS, ie. the
901 * system information value 'CN domain specific DRX cycle length' is used.
902 * For S1 mode, DRX value not specified by the MS.
903 * (Ref 3GPP TS 25.331 and 36.304)
904 * 0 1 1 0 CN Specific DRX cycle length coefficient 6 and T = 32
905 * 0 1 1 1 CN Specific DRX cycle length coefficient 7 and T = 64
906 * 1 0 0 0 CN Specific DRX cycle length coefficient 8 and T = 128
907 * 1 0 0 1 CN Specific DRX cycle length coefficient 9 and T = 256
908 * All other values shall be interpreted as "CN Specific DRX cycle length coefficient not
909 * specified by the MS" and "DRX value not specified by the MS" by this version of the protocol.
910 * NOTE: For Iu mode and S1 mode, this field (octet 3 bits 8 to 5) is used, but was spare in earlier
911 * versions of this protocol.
913 static const range_string gsm_a_gmm_cn_spec_drx_cycle_len_coef_strings[] = {
914 { 0x00, 0x05, "CN Specific DRX cycle length coefficient / value not specified by the MS" },
915 { 0x06, 0x06, "CN Specific DRX cycle length coefficient 6 and T = 32" },
916 { 0x07, 0x07, "CN Specific DRX cycle length coefficient 7 and T = 64" },
917 { 0x08, 0x08, "CN Specific DRX cycle length coefficient 8 and T = 128" },
918 { 0x09, 0x09, "CN Specific DRX cycle length coefficient 9 and T = 256" },
919 { 0x0a, 0x0f, "CN Specific DRX cycle length coefficient / value not specified by the MS" },
923 de_gmm_drx_param(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
927 curr_offset = offset;
929 proto_tree_add_item(tree, hf_gsm_a_gmm_split_pg_cycle_code, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
931 proto_tree_add_item(tree, hf_gsm_a_gmm_cn_spec_drx_cycle_len_coef, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
932 proto_tree_add_item(tree, hf_gsm_a_gmm_split_on_ccch, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
933 proto_tree_add_item(tree, hf_gsm_a_gmm_non_drx_timer, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
937 /* no length check possible */
939 return (curr_offset - offset);
943 * [9] 10.5.5.7 Force to standby (lower nibble)
945 static const range_string gsm_a_gm_force_to_standby_vals[] = {
946 { 0x00, 0x00, "Force to standby not indicated" },
947 { 0x01, 0x01, "Force to standby indicated" },
948 { 0x02, 0x07, "Unknown, interpreted as Force to standby not indicated" },
953 de_gmm_ftostby(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
957 /* IMPORTANT - IT'S ASSUMED THAT THE INFORMATION IS IN THE LOWER NIBBLE */
958 bit_offset = (offset << 3) + 4;
959 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
960 proto_tree_add_bits_item(tree, hf_gsm_a_gm_force_to_standby, tvb, bit_offset + 1, 3, ENC_BIG_ENDIAN);
962 /* no length check possible */
967 * [9] 10.5.5.7 Force to standby (higher nibble)
970 de_gmm_ftostby_h(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
974 /* IMPORTANT - IT'S ASSUMED THAT THE INFORMATION IS IN THE HIGHER NIBBLE */
975 bit_offset = offset << 3;
976 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
977 proto_tree_add_bits_item(tree, hf_gsm_a_gm_force_to_standby, tvb, bit_offset + 1, 3, ENC_BIG_ENDIAN);
979 /* no length check possible */
987 de_gmm_ptmsi_sig(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
990 proto_item *curr_item;
992 curr_offset = offset;
994 curr_item= proto_tree_add_item(tree, hf_gsm_a_gmm_ptmsi_sig, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
995 proto_item_append_text(curr_item, "%s", add_string ? add_string : "");
999 /* no length check possible */
1001 return (curr_offset - offset);
1008 de_gmm_ptmsi_sig2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len _U_)
1010 guint32 curr_offset;
1011 proto_item *curr_item;
1013 curr_offset = offset;
1015 curr_item= proto_tree_add_item(tree, hf_gsm_a_gmm_ptmsi_sig2, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
1016 proto_item_append_text(curr_item, "%s", add_string ? add_string : "");
1019 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data);
1021 return (curr_offset - offset);
1025 * [9] 10.5.5.9 Identity type 2
1027 static const value_string gsm_a_gm_type_of_identity_vals[] = {
1036 de_gmm_ident_type2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
1038 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (offset << 3) + 4, 1, ENC_BIG_ENDIAN);
1039 proto_tree_add_item(tree, hf_gsm_a_gm_type_of_identity, tvb, offset, 1, ENC_BIG_ENDIAN);
1041 /* no length check possible */
1046 * [9] 10.5.5.10 IMEISV request
1048 static const range_string gsm_a_gm_imeisv_req_vals[] = {
1049 { 0x00, 0x00, "IMEISV not requested" },
1050 { 0x01, 0x01, "IMEISV requested" },
1051 { 0x02, 0x07, "Unknown, interpreted as IMEISV not requested" },
1056 de_gmm_imeisv_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
1060 /* IMPORTANT - IT'S ASSUMED THAT THE INFORMATION IS IN THE HIGHER NIBBLE */
1061 bit_offset = offset << 3;
1062 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
1063 proto_tree_add_bits_item(tree, hf_gsm_a_gm_imeisv_req, tvb, bit_offset + 1, 3, ENC_BIG_ENDIAN);
1065 /* no length check possible */
1073 de_gmm_rec_npdu_lst(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
1075 guint32 curr_offset;
1079 curr_offset = offset;
1081 if (len == 0) return 0;
1086 oct = tvb_get_guint8(tvb, curr_offset);
1088 oct |= tvb_get_guint8(tvb, curr_offset+1);
1092 proto_tree_add_uint_format(tree, hf_gsm_a_gm_nsapi, tvb, curr_offset, 2, (oct>>12)&0xff, "NSAPI %d: 0x%02x (%u)", oct>>20, (oct>>12)&0xff, (oct>>12)&0xff);
1097 oct |= tvb_get_guint8(tvb, curr_offset+2);
1101 proto_tree_add_uint_format(tree, hf_gsm_a_gm_nsapi, tvb, curr_offset-1, 2, (oct>>12)&0xff, "NSAPI %d: 0x%02x (%u)", oct>>20, (oct>>12)&0xff, (oct>>12)&0xff);
1105 } while (curr_len > 1);
1107 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data);
1109 return (curr_offset - offset);
1113 * [9] 10.5.5.12 MS network capability
1115 static const true_false_string gsm_a_gmm_net_cap_gea_vals = {
1116 "Encryption algorithm available",
1117 "Encryption algorithm not available"
1120 static const true_false_string gsm_a_gmm_net_cap_smdch_vals = {
1121 "Mobile station supports mobile terminated point to point SMS via dedicated signalling channels",
1122 "Mobile station does not support mobile terminated point to point SMS via dedicated signalling channels"
1125 static const true_false_string gsm_a_gmm_net_cap_smgprs_vals = {
1126 "Mobile station supports mobile terminated point to point SMS via GPRS packet data channels",
1127 "Mobile station does not support mobile terminated point to point SMS via GPRS packet data channels"
1130 static const true_false_string gsm_a_gmm_net_cap_ucs2_vals = {
1131 "The ME has no preference between the use of the default alphabet and the use of UCS2",
1132 "The ME has a preference for the default alphabet (defined in 3GPP TS 23.038 [8b]) over UCS2"
1135 static const value_string gsm_a_gmm_net_cap_ss_scr_ind_vals[]={
1136 { 0x00, "Default value of phase 1" },
1137 { 0x01, "capability of handling of ellipsis notation and phase 2 error handling" },
1138 { 0x02, "For future use, interpreted as Capability of handling of ellipsis notation and phase 2 error handling" },
1139 { 0x03, "For future use, interpreted as Capability of handling of ellipsis notation and phase 2 error handling" },
1143 static const true_false_string gsm_a_gmm_net_cap_solsa_vals = {
1144 "The ME supports SoLSA",
1145 "The ME does not support SoLSA"
1148 static const true_false_string gsm_a_gmm_net_cap_rev_vals = {
1149 "Used by a mobile station supporting R99 or later versions of the protocol",
1150 "Used by a mobile station not supporting R99 or later versions of the protocol"
1153 static const true_false_string gsm_a_gmm_net_cap_pfc_vals = {
1154 "Mobile station does support BSS packet flow procedures",
1155 "Mobile station does not support BSS packet flow procedures"
1158 static const true_false_string gsm_a_gmm_net_cap_lcs_vals = {
1159 "LCS value added location request notification capability supported",
1160 "LCS value added location request notification capability not supported"
1163 static const true_false_string gsm_a_gmm_net_cap_ps_irat_iu_vals = {
1164 "PS inter-RAT HO to UTRAN Iu mode supported",
1165 "PS inter-RAT HO to UTRAN Iu mode not supported"
1168 static const true_false_string gsm_a_gmm_net_cap_ps_irat_s1_vals = {
1169 "PS inter-RAT HO to E-UTRAN S1 mode supported",
1170 "PS inter-RAT HO to E-UTRAN S1 mode not supported"
1173 static const true_false_string gsm_a_gmm_net_cap_comb_proc_vals = {
1174 "Mobile station supports EMM combined procedures",
1175 "Mobile station does not support EMM combined procedures"
1178 static const true_false_string gsm_a_gmm_net_cap_isr_vals = {
1179 "The mobile station supports ISR",
1180 "The mobile station does not support ISR"
1183 static const true_false_string gsm_a_gmm_net_cap_srvcc_to_geran_vals = {
1184 "SRVCC from UTRAN HSPA or E-UTRAN to GERAN/UTRAN supported",
1185 "SRVCC from UTRAN HSPA or E-UTRAN to GERAN/UTRAN not supported"
1188 static const true_false_string gsm_a_gmm_net_cap_epc_vals = {
1193 static const true_false_string gsm_a_gmm_net_cap_nf_vals = {
1194 "Mobile station supports the notification procedure",
1195 "Mobile station does not support the notification procedure"
1198 static const true_false_string gsm_a_gmm_net_geran_net_vals = {
1199 "Mobile station supports GERAN network sharing",
1200 "Mobile station does not support GERAN network sharing"
1203 static const true_false_string gsm_a_gmm_net_cap_gia_vals = {
1204 "Integrity algorithm available",
1205 "Integrity algorithm not available"
1208 static const true_false_string gsm_a_gmm_net_cap_epco_ie_ind_vals = {
1209 "Used by a mobile station supporting extended protocol configuration options IE",
1210 "Used by a mobile station not supporting extended protocol configuration options IE"
1213 static const true_false_string gsm_a_gmm_net_cap_restrict_use_enh_cov_vals = {
1214 "Mobile station supports restriction on use of enhanced coverage",
1215 "Mobile station does not support restriction on use of enhanced coverage"
1218 static const true_false_string gsm_a_gmm_net_cap_dc_eutra_nr_cap_vals = {
1219 "Mobile station supports dual connectivity of E-UTRA with NR",
1220 "Mobile station does not support dual connectivity of E-UTRA with NR"
1224 de_gmm_ms_net_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
1226 guint32 curr_offset;
1227 proto_tree *subtree;
1230 curr_offset = offset;
1233 proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_gea1, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1235 /* bit 7: SM capabilities via dedicated channels */
1236 proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_smdch, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1238 /* bit 6: SM capabilities via GPRS channels */
1239 proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_smgprs, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1241 /* bit 5: UCS2 support */
1242 proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_ucs2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1244 /* bits 4 3: SS Screening Indicator */
1245 proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_ss_scr_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1247 /* bit 2: SoLSA Capability */
1248 proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_solsa, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1251 proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_rev, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1254 NO_MORE_DATA_CHECK(len);
1256 /* bit 8: PFC feature mode */
1257 proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_pfc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1259 /* bits 7 6 5 4 3 2: Extended GEA bits */
1260 item = proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_ext_gea_bits, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1261 subtree = proto_item_add_subtree(item, ett_gmm_network_cap);
1262 proto_tree_add_item(subtree, hf_gsm_a_gmm_net_cap_gea2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1263 proto_tree_add_item(subtree, hf_gsm_a_gmm_net_cap_gea3, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1264 proto_tree_add_item(subtree, hf_gsm_a_gmm_net_cap_gea4, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1265 proto_tree_add_item(subtree, hf_gsm_a_gmm_net_cap_gea5, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1266 proto_tree_add_item(subtree, hf_gsm_a_gmm_net_cap_gea6, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1267 proto_tree_add_item(subtree, hf_gsm_a_gmm_net_cap_gea7, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1269 /* bit 1: LCS VA capability */
1270 proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_lcs, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1273 NO_MORE_DATA_CHECK(len);
1275 /* bit 8: PS inter-RAT HO from GERAN to UTRAN Iu mode capability */
1276 proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_ps_irat_iu, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1278 /* bit 7: PS inter-RAT HO from GERAN to E-UTRAN S1 mode capability */
1279 proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_ps_irat_s1, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1281 /* bit 6: EMM Combined procedures capability */
1282 proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_comb_proc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1284 /* bit 5: ISR support */
1285 proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_isr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1287 /* bit 4: SRVCC to GERAN/UTRAN capability */
1288 proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_srvcc_to_geran, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1290 /* bit 3: EPC capability */
1291 proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_epc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1293 /* bit 2: NF capability */
1294 proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_nf, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1296 /* bits 1: GERAN network sharing capability */
1297 proto_tree_add_item(tree, hf_gsm_a_gmm_net_geran_net_sharing, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1300 NO_MORE_DATA_CHECK(len);
1302 /* bit 8: User plane integrity protection support */
1303 proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_up_int_prot, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1306 proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_up_gia4, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1309 proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_up_gia5, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1312 proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_up_gia6, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1315 proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_up_gia7, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1317 /* bit 3: ePCO IE indicator */
1318 proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_epco_ie_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1320 /* bit 2: Restriction on use of enhanced coverage capability */
1321 proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_restrict_use_enh_cov, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1323 /* bit 1: Dual connectivity of E-UTRA with NR capability */
1324 proto_tree_add_item(tree, hf_gsm_a_gmm_net_cap_dc_eutra_nr_cap, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1327 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data);
1329 return (curr_offset - offset);
1335 #define GET_DATA /* check if we have enough bits left */ \
1336 if (curr_bits_length < bits_needed) \
1338 /* check if oct has enough bits */ \
1339 if (bits_in_oct < bits_needed) \
1342 if (curr_len == 0) \
1344 proto_tree_add_expert(tf_tree, pinfo, &ei_gsm_a_gm_not_enough_data, tvb, curr_offset, 1); \
1346 tmp_oct = tvb_get_guint8(tvb, curr_offset); \
1347 oct |= tmp_oct<<(32-8-bits_in_oct); \
1350 if (bits_in_oct != 0) \
1359 /* Access Technology Type */
1361 static const value_string gsm_a_gm_acc_tech_type_vals[] = {
1363 { 0x01, "GSM E --note that GSM E covers GSM P" },
1364 { 0x02, "GSM R --note that GSM R covers GSM E and GSM P" },
1365 { 0x03, "GSM 1800" },
1366 { 0x04, "GSM 1900" },
1367 { 0x05, "GSM 450" },
1368 { 0x06, "GSM 480" },
1369 { 0x07, "GSM 850" },
1370 { 0x08, "GSM 750" },
1371 { 0x09, "GSM T 380" },
1372 { 0x0a, "GSM T 410" },
1373 { 0x0b, "GSM T 900" },
1374 { 0x0c, "GSM 710" },
1375 { 0x0d, "GSM T 810" },
1376 { 0x0f, "Indicates the presence of a list of Additional access technologies" },
1380 static const true_false_string gsm_a_gm_vgcs = {
1381 "VGCS capability and notifications wanted",
1382 "no VGCS capability or no notifications wanted"
1385 static const true_false_string gsm_a_gm_vbs = {
1386 "VBS capability and notifications wanted",
1387 "no VBS capability or no notifications wanted"
1390 static const value_string gsm_a_gm_multi_slot_vals[] = {
1391 { 0x00, "Not specified" },
1392 { 0x01, "Max Rx-Slot/TDMA:1 Max Tx-Slot/TDMA:1 Max-Sum-Slot/TDMA:2 Tta:3 Ttb:2 Tra:4 Trb:2 Type:1" },
1393 { 0x02, "Max Rx-Slot/TDMA:2 Max Tx-Slot/TDMA:1 Max-Sum-Slot/TDMA:3 Tta:3 Ttb:2 Tra:3 Trb:1 Type:1" },
1394 { 0x03, "Max Rx-Slot/TDMA:2 Max Tx-Slot/TDMA:2 Max-Sum-Slot/TDMA:3 Tta:3 Ttb:2 Tra:3 Trb:1 Type:1" },
1395 { 0x04, "Max Rx-Slot/TDMA:3 Max Tx-Slot/TDMA:1 Max-Sum-Slot/TDMA:4 Tta:3 Ttb:1 Tra:3 Trb:1 Type:1" },
1396 { 0x05, "Max Rx-Slot/TDMA:2 Max Tx-Slot/TDMA:2 Max-Sum-Slot/TDMA:4 Tta:3 Ttb:1 Tra:3 Trb:1 Type:1" },
1397 { 0x06, "Max Rx-Slot/TDMA:3 Max Tx-Slot/TDMA:2 Max-Sum-Slot/TDMA:4 Tta:3 Ttb:1 Tra:3 Trb:1 Type:1" },
1398 { 0x07, "Max Rx-Slot/TDMA:3 Max Tx-Slot/TDMA:3 Max-Sum-Slot/TDMA:4 Tta:3 Ttb:1 Tra:3 Trb:1 Type:1" },
1399 { 0x08, "Max Rx-Slot/TDMA:4 Max Tx-Slot/TDMA:1 Max-Sum-Slot/TDMA:5 Tta:3 Ttb:1 Tra:2 Trb:1 Type:1" },
1400 { 0x09, "Max Rx-Slot/TDMA:3 Max Tx-Slot/TDMA:2 Max-Sum-Slot/TDMA:5 Tta:3 Ttb:1 Tra:2 Trb:1 Type:1" },
1401 { 0x0a, "Max Rx-Slot/TDMA:4 Max Tx-Slot/TDMA:2 Max-Sum-Slot/TDMA:5 Tta:3 Ttb:1 Tra:2 Trb:1 Type:1" },
1402 { 0x0b, "Max Rx-Slot/TDMA:4 Max Tx-Slot/TDMA:3 Max-Sum-Slot/TDMA:5 Tta:3 Ttb:1 Tra:2 Trb:1 Type:1" },
1403 { 0x0c, "Max Rx-Slot/TDMA:4 Max Tx-Slot/TDMA:4 Max-Sum-Slot/TDMA:5 Tta:2 Ttb:1 Tra:2 Trb:1 Type:1" },
1404 { 0x0d, "Max Rx-Slot/TDMA:3 Max Tx-Slot/TDMA:3 Max-Sum-Slot/TDMA:NA Tta:NA Ttb:a) Tra:3 Trb:a) Type:2 (a: 1 with frequency hopping, 0 otherwise)" },
1405 { 0x0e, "Max Rx-Slot/TDMA:4 Max Tx-Slot/TDMA:4 Max-Sum-Slot/TDMA:NA Tta:NA Ttb:a) Tra:3 Trb:a) Type:2 (a: 1 with frequency hopping, 0 otherwise)" },
1406 { 0x0f, "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:5 Max-Sum-Slot/TDMA:NA Tta:NA Ttb:a) Tra:3 Trb:a) Type:2 (a: 1 with frequency hopping, 0 otherwise)" },
1407 { 0x10, "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:6 Max-Sum-Slot/TDMA:NA Tta:NA Ttb:a) Tra:2 Trb:a) Type:2 (a: 1 with frequency hopping, 0 otherwise)" },
1408 { 0x11, "Max Rx-Slot/TDMA:7 Max Tx-Slot/TDMA:7 Max-Sum-Slot/TDMA:NA Tta:NA Ttb:a) Tra:1 Trb:0 Type:2 (a: 1 with frequency hopping, 0 otherwise)" },
1409 { 0x12, "Max Rx-Slot/TDMA:8 Max Tx-Slot/TDMA:8 Max-Sum-Slot/TDMA:NA Tta:NA Ttb:0 Tra:0 Trb:0 Type:2" },
1410 { 0x13, "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:2 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise" },
1411 { 0x14, "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:3 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise" },
1412 { 0x15, "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:4 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise" },
1413 { 0x16, "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:4 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise" },
1414 { 0x17, "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:6 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise" },
1415 { 0x18, "Max Rx-Slot/TDMA:8 Max Tx-Slot/TDMA:2 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise" },
1416 { 0x19, "Max Rx-Slot/TDMA:8 Max Tx-Slot/TDMA:3 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise" },
1417 { 0x1a, "Max Rx-Slot/TDMA:8 Max Tx-Slot/TDMA:4 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise" },
1418 { 0x1b, "Max Rx-Slot/TDMA:8 Max Tx-Slot/TDMA:4 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise" },
1419 { 0x1c, "Max Rx-Slot/TDMA:8 Max Tx-Slot/TDMA:6 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise" },
1420 { 0x1d, "Max Rx-Slot/TDMA:8 Max Tx-Slot/TDMA:8 Max-Sum-Slot/TDMA:NA Tta:3 Ttb:b) Tra:2 Trb:c) Type:1 (b: 1 with frequency hopping or change from Rx to Tx, 0 otherwise; c: 1 with frequency hopping or change from Tx to Rx, 0 otherwise" },
1421 { 0x1e, "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:1 Max-Sum-Slot/TDMA:6 Tta:2 Ttb:1 Tra:1 Trb:1 Type:1" },
1422 { 0x1f, "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:2 Max-Sum-Slot/TDMA:6 Tta:2 Ttb:1 Tra:1 Trb:1 Type:1" },
1423 { 0x20, "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:3 Max-Sum-Slot/TDMA:6 Tta:2 Ttb:1 Tra:1 Trb:1 Type:1" },
1424 { 0x21, "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:4 Max-Sum-Slot/TDMA:6 Tta:2 Ttb:1 Tra:1 Trb:1 Type:1" },
1425 { 0x22, "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:5 Max-Sum-Slot/TDMA:6 Tta:2 Ttb:1 Tra:1 Trb:1 Type:1" },
1426 { 0x23, "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:1 Max-Sum-Slot/TDMA:6 Tta:2 Ttb:1 Tra:1+to Trb:1 Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))" },
1427 { 0x24, "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:2 Max-Sum-Slot/TDMA:6 Tta:2 Ttb:1 Tra:1+to Trb:1 Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))" },
1428 { 0x25, "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:3 Max-Sum-Slot/TDMA:6 Tta:2 Ttb:1 Tra:1+to Trb:1 Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))" },
1429 { 0x26, "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:4 Max-Sum-Slot/TDMA:6 Tta:2 Ttb:1 Tra:1+to Trb:1 Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))" },
1430 { 0x27, "Max Rx-Slot/TDMA:5 Max Tx-Slot/TDMA:5 Max-Sum-Slot/TDMA:6 Tta:2 Ttb:1 Tra:1+to Trb:1 Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))" },
1431 { 0x28, "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:1 Max-Sum-Slot/TDMA:7 Tta:1 Ttb:1 Tra:1 Trb:to Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))" },
1432 { 0x29, "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:2 Max-Sum-Slot/TDMA:7 Tta:1 Ttb:1 Tra:1 Trb:to Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))" },
1433 { 0x2a, "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:3 Max-Sum-Slot/TDMA:7 Tta:1 Ttb:1 Tra:1 Trb:to Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))" },
1434 { 0x2b, "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:4 Max-Sum-Slot/TDMA:7 Tta:1 Ttb:1 Tra:1 Trb:to Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))" },
1435 { 0x2c, "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:5 Max-Sum-Slot/TDMA:7 Tta:1 Ttb:1 Tra:1 Trb:to Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))" },
1436 { 0x2d, "Max Rx-Slot/TDMA:6 Max Tx-Slot/TDMA:6 Max-Sum-Slot/TDMA:7 Tta:1 Ttb:1 Tra:1 Trb:to Type:1 (to: to = 31 symbol periods (this can be provided by a TA offset, i.e. a minimum TA value))" },
1440 static const value_string gsm_a_gm_dtm_gprs_multi_slot_class_vals[] = {
1441 { 0x00, "Unused. If received, the network shall interpret this as Multislot class 5" },
1442 { 0x01, "Multislot class 5 supported" },
1443 { 0x02, "Multislot class 9 supported" },
1444 { 0x03, "Multislot class 11 supported" },
1448 static const true_false_string gsm_a_gm_revision_level_indicator = {
1449 "The ME is Release '99 onwards",
1450 "The ME is Release '98 or older"
1453 static const value_string gsm_a_gm_down_adv_rec_perf_vals[] = {
1454 { 0x00, "Downlink Advanced Receiver Performance not supported" },
1455 { 0x01, "Downlink Advanced Receiver Performance - phase I supported" },
1456 { 0x02, "Downlink Advanced Receiver Performance - phase II supported" },
1460 static const true_false_string gsm_a_gm_dtm_enh_cap = {
1461 "The mobile station supports enhanced DTM CS establishment and enhanced DTM CS release procedures",
1462 "The mobile station does not support enhanced DTM CS establishment and enhanced DTM CS release procedures"
1465 static const value_string gsm_a_gm_dtm_gprs_high_multi_slot_class_vals[] = {
1466 { 0x00, "Unused. If received, the network shall interpret this as 'Multislot class 31 or 36 supported'" },
1467 { 0x01, "Multislot class 31 or 36 supported" },
1468 { 0x02, "Multislot class 32 or 37 supported" },
1469 { 0x03, "Multislot class 33 or 38 supported" },
1470 { 0x04, "Multislot class 41 supported" },
1471 { 0x05, "Multislot class 42 supported" },
1472 { 0x06, "Multislot class 43 supported" },
1473 { 0x07, "Multislot class 44 supported" },
1477 static const value_string gsm_a_gm_multi_slot_cap_red_down_dual_carrier_vals[] = {
1478 { 0x00, "No reduction" },
1479 { 0x01, "The MS supports 1 timeslot fewer than the maximum number of receive timeslots" },
1480 { 0x02, "The MS supports 2 timeslots fewer than the maximum number of receive timeslots" },
1481 { 0x03, "The MS supports 3 timeslots fewer than the maximum number of receive timeslots" },
1482 { 0x04, "The MS supports 4 timeslots fewer than the maximum number of receive timeslots" },
1483 { 0x05, "The MS supports 5 timeslots fewer than the maximum number of receive timeslots" },
1484 { 0x06, "The MS supports 6 timeslots fewer than the maximum number of receive timeslots" },
1485 { 0x07, "Reserved for future use" },
1489 static const value_string gsm_a_gm_ul_egprs2_vals[] = {
1490 { 0x00, "The mobile station does not support either EGPRS2-A or EGPRS2-B in the uplink" },
1491 { 0x01, "The mobile station supports EGPRS2-A in the uplink" },
1492 { 0x02, "The mobile station supports both EGPRS2-A and EGPRS2-B in the uplink" },
1493 { 0x03, "The mobile station supports both EGPRS2-A and EGPRS2-B in the uplink" },
1497 static const value_string gsm_a_gm_dl_egprs2_vals[] = {
1498 { 0x00, "The mobile station does not support either EGPRS2-A or EGPRS2-B in the downlink" },
1499 { 0x01, "The mobile station supports EGPRS2-A in the downlink" },
1500 { 0x02, "The mobile station supports both EGPRS2-A and EGPRS2-B in the downlink" },
1501 { 0x03, "The mobile station supports both EGPRS2-A and EGPRS2-B in the downlink" },
1505 static const value_string gsm_a_gm_geran_to_eutra_support_in_geran_ptm_vals[] = {
1507 { 0x01, "E-UTRAN neighbour cell measurements and MS autonomous cell reselection to E-UTRAN supported" },
1508 { 0x02, "E-UTRAN neighbour cell meas and report, MS autonomous cell resel, CCN and network controlled cell reselection to E-UTRAN" },
1509 { 0x03, "E-UTRAN neighbour cell meas and report, MS autonomous cell resel, CCN, network controlled cell reselection and PS Handover to E-UTRAN" },
1513 static const value_string gsm_a_gm_alt_efta_multi_slot_class_vals[] = {
1514 { 0x00, "No Alternative EFTA multislot class is indicated. Use (DTM) EGPRS (high) multislot class only" },
1515 { 0x01, "Alternative EFTA multislot class 1" },
1516 { 0x02, "Alternative EFTA multislot class 2" },
1517 { 0x03, "Alternative EFTA multislot class 3" },
1533 static const value_string gsm_a_gm_dlmc_non_contig_intra_band_recep_vals[] = {
1534 { 0x00, "Not supported" },
1535 { 0x01, "Supported in band E-GSM or GSM850" },
1536 { 0x02, "Supported in band DCS1800 or PCS1900" },
1537 { 0x03, "Supported in band E-GSM, or GSM850, or DCS1800 or PCS1900" },
1541 static const true_false_string gsm_a_gm_dlmc_inter_band_recep_val = {
1542 "Supported in band combination (E-GSM, DCS1800), or band combination (GSM850, PCS1900)",
1546 static const value_string gsm_a_gm_dlmc_max_bandwidth_vals[] = {
1555 gsm_a_gm_dlmc_max_nb_dl_ts_fmt(gchar *s, guint32 v)
1558 g_snprintf(s, ITEM_LABEL_LENGTH, "%u TS supported (%u)",
1561 g_snprintf(s, ITEM_LABEL_LENGTH, "Reserved (%u)", v);
1564 static const value_string gsm_a_gm_dlmc_max_nb_dl_carriers_vals[] = {
1565 { 0x00, "2 carriers supported" },
1566 { 0x01, "4 carriers supported" },
1567 { 0x02, "6 carriers supported" },
1568 { 0x03, "8 carriers supported" },
1569 { 0x04, "10 carriers supported" },
1570 { 0x05, "12 carriers supported" },
1571 { 0x06, "14 carriers supported" },
1572 { 0x07, "16 carriers supported" },
1576 static const value_string gsm_a_gm_8psk_power_class_vals[] = {
1577 {0x00, "8PSK modulation not supported for uplink" },
1578 {0x01, "Power class E1"},
1579 {0x02, "Power class E2"},
1580 {0x03, "Power class E3"},
1585 static const value_string gsm_a_gm_8psk_power_cap_vals[] = {
1586 {0x00, "Reserved" },
1587 {0x01, "Power class E1"},
1588 {0x02, "Power class E2"},
1589 {0x03, "Power class E3"},
1593 static const value_string gsm_a_gm_extended_dtm_gprs_multi_slot_class_vals[] = {
1594 {0x00, "Unused. If received, it shall be interpreted as Multislot class 5 supported" },
1595 {0x01, "Unused. If received, it shall be interpreted as Multislot class 5 supported"},
1596 {0x02, "Unused. If received, it shall be interpreted as Multislot class 5 supported"},
1597 {0x03, "Unused. If received, it shall be interpreted as Multislot class 5 supported"},
1598 {0x10, "Multislot class 5 supported"},
1599 {0x11, "Multislot class 6 supported"},
1600 {0x12, "Unused. If received, it shall be interpreted as Multislot class 5 supported"},
1601 {0x13, "Unused. If received, it shall be interpreted as Multislot class 5 supported"},
1602 {0x20, "Multislot class 9 supported"},
1603 {0x21, "Multislot class 10 supported"},
1604 {0x22, "Unused. If received, it shall be interpreted as Multislot class 9 supported"},
1605 {0x23, "Unused. If received, it shall be interpreted as Multislot class 9 supported"},
1606 {0x30, "Multislot class 11 supported"},
1607 {0x31, "Unused. If received, it shall be interpreted as Multislot class 11 supported"},
1608 {0x32, "Unused. If received, it shall be interpreted as Multislot class 11 supported"},
1609 {0x33, "Unused. If received, it shall be interpreted as Multislot class 11 supported"},
1613 static const value_string gsm_a_gm_gmsk_multislot_power_profile_vals[] = {
1614 {0x00, "GMSK_MULTISLOT_POWER_PROFILE 0" },
1615 {0x01, "GMSK_MULTISLOT_POWER_PROFILE 1"},
1616 {0x02, "GMSK_MULTISLOT_POWER_PROFILE 2"},
1617 {0x03, "GMSK_MULTISLOT_POWER_PROFILE 3"},
1621 static const value_string gsm_a_gm_8psk_multislot_power_profile_vals[] = {
1622 {0x00, "8-PSK_MULTISLOT_POWER_PROFILE 0" },
1623 {0x01, "8-PSK_MULTISLOT_POWER_PROFILE 1"},
1624 {0x02, "8-PSK_MULTISLOT_POWER_PROFILE 2"},
1625 {0x03, "8-PSK_MULTISLOT_POWER_PROFILE 3"},
1629 static const value_string gsm_a_gm_ec_pch_mon_support_vals[] = {
1630 {0x00, "PCH supported"},
1631 {0x01, "EC-PCH supported"},
1632 {0x02, "PCH and EC-PCH supported"},
1638 de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
1640 guint32 curr_offset;
1643 proto_item *tf = NULL, *mc_item = NULL, *ti;
1644 proto_tree *tf_tree = NULL, *mc_tree = NULL;
1649 guint add_octets; /* octets which are covered by one element -1 */
1650 guint curr_bits_length;
1656 guchar dtm_gprs_mslot = 0;
1657 guchar dtm_egprs_mslot = 4;
1658 gboolean finished = TRUE;
1661 curr_offset = offset;
1662 bit_offset = offset<<3;
1670 /* check for a new round */
1671 if ((curr_len*8 + bits_in_oct) < 11)
1674 /* now read the first 11 bits */
1675 curr_bits_length = 11;
1679 if (curr_len != len)
1684 if ((oct>>(32-bits_needed)) != 1)
1688 oct <<= bits_needed;
1689 bits_in_oct -= bits_needed;
1692 if ((curr_len*8 + bits_in_oct) < 11)
1694 curr_bits_length = 11;
1698 tf_tree = proto_tree_add_subtree_format(tree,
1699 tvb, curr_offset, 1,
1700 ett_gmm_radio_cap, &tf, "MS RA capability %d", indx);
1708 acc_type = oct>>(32-bits_needed);
1710 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_acc_tech_type, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
1713 curr_bits_length -= bits_needed;
1714 oct <<= bits_needed;
1715 bits_in_oct -= bits_needed;
1717 /* < Access capabilities struct > ::= */
1724 bits_length = curr_bits_length = oct>>(32-bits_needed);
1726 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_acc_cap_struct_len, tvb, bit_offset, 7, ENC_BIG_ENDIAN);
1727 proto_item_set_len(tf, (bits_length>>3)+1);
1728 /* This is already done - length doesn't contain this field
1729 curr_bits_length -= bits_needed;
1732 oct <<= bits_needed;
1733 bits_in_oct -= bits_needed;
1735 if (acc_type == 0x0f)
1740 * Additional access technologies:
1742 finished = TRUE; /* Break out of the loop unless proven unfinished */
1751 switch (oct>>(32-bits_needed))
1753 case 0x00: str = "Not Present"; finished = TRUE; break;
1754 case 0x01: str = "Present"; finished = FALSE; break;
1755 default: str = "This should not happen";
1758 proto_tree_add_uint_format_value(tf_tree, hf_gsm_a_gm_presence, tvb, curr_offset-1-add_octets, 1+add_octets, oct>>(32-bits_needed), "%s (%u)", str, oct>>(32-bits_needed));
1760 curr_bits_length -= bits_needed;
1761 oct <<= bits_needed;
1762 bits_in_oct -= bits_needed;
1767 * No more valid data, get spare bits if any
1769 while (curr_bits_length > 0)
1771 if (curr_bits_length > 8)
1774 bits_needed = curr_bits_length;
1776 curr_bits_length -= bits_needed;
1777 oct <<= bits_needed;
1778 bits_in_oct -= bits_needed;
1779 bit_offset += bits_needed;
1790 acc_type = oct>>(32-bits_needed);
1792 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_acc_tech_type, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
1795 curr_bits_length -= bits_needed;
1796 oct <<= bits_needed;
1797 bits_in_oct -= bits_needed;
1805 value = tvb_get_bits8(tvb, bit_offset, 3);
1807 if (acc_type == 0x04) /* GSM 1900 */
1811 case 0x01: str = "1 W (30 dBm)"; break;
1812 case 0x02: str = "0,25 W (24 dBm)"; break;
1813 case 0x03: str = "2 W (33 dBm)"; break;
1814 default: str = "Not specified";
1817 else if (acc_type == 0x03)
1824 case 0x01: str = "1 W (30 dBm)"; break;
1825 case 0x02: str = "0,25 W (24 dBm)"; break;
1826 case 0x03: str = "4 W (36 dBm)"; break;
1827 default: str = "Not specified";
1830 else if (acc_type <= 0x08)
1842 case 0x02: str = "8 W (39 dBm)"; break;
1843 case 0x03: str = "5 W (37 dBm)"; break;
1844 case 0x04: str = "2 W (33 dBm)"; break;
1845 case 0x05: str = "0,8 W (29 dBm)"; break;
1846 default: str = "Not specified";
1850 str = "Not specified??";
1852 /* decode_bits_in_field(gint bit_offset, gint no_of_bits, guint64 value)*/
1853 proto_tree_add_uint_format(tf_tree, hf_gsm_a_gm_rf_power_capability, tvb, curr_offset-1-add_octets, 1+add_octets, value,
1854 "%s RF Power Capability, GMSK Power Class: %s (%u)", decode_bits_in_field(bit_offset, 3, value), str, value);
1856 curr_bits_length -= bits_needed;
1857 oct <<= bits_needed;
1858 bits_in_oct -= bits_needed;
1866 value = tvb_get_bits8(tvb, bit_offset, 2);
1868 proto_tree_add_uint(tf_tree, hf_gsm_a_gm_8psk_power_class, tvb, curr_offset-1-add_octets, 1+add_octets, value);
1870 curr_bits_length -= bits_needed;
1871 oct <<= bits_needed;
1872 bits_in_oct -= bits_needed;
1874 } while (!finished);
1885 value = tvb_get_bits8(tvb, bit_offset, 3);
1887 if (acc_type == 0x04) /* GSM 1900 */
1891 case 0x01: str = "1 W (30 dBm)"; break;
1892 case 0x02: str = "0,25 W (24 dBm)"; break;
1893 case 0x03: str = "2 W (33 dBm)"; break;
1894 default: str = "Not specified";
1897 else if (acc_type == 0x03)
1901 case 0x01: str = "1 W (30 dBm)"; break;
1902 case 0x02: str = "0,25 W (24 dBm)"; break;
1903 case 0x03: str = "4 W (36 dBm)"; break;
1904 default: str = "Not specified";
1907 else if (acc_type <= 0x08)
1911 case 0x02: str = "8 W (39 dBm)"; break;
1912 case 0x03: str = "5 W (37 dBm)"; break;
1913 case 0x04: str = "2 W (33 dBm)"; break;
1914 case 0x05: str = "0,8 W (29 dBm)"; break;
1915 default: str = "Not specified";
1919 str = "Not specified??";
1921 proto_tree_add_uint_format(tf_tree, hf_gsm_a_gm_rf_power_capability, tvb, curr_offset-1-add_octets, 1+add_octets, value,
1922 "%s RF Power Capability, GMSK Power Class: %s (%u)", decode_bits_in_field(bit_offset, 3, value), str, value);
1925 curr_bits_length -= bits_needed;
1926 oct <<= bits_needed;
1927 bits_in_oct -= bits_needed;
1936 if ((oct>>(32-bits_needed)) == 0)
1938 proto_tree_add_uint_format_value(tf_tree, hf_gsm_a_gm_a5_bits, tvb, curr_offset-1-add_octets, 1+add_octets, oct>>(32-bits_needed),
1939 "Same values apply for parameters as in the immediately preceding Access capabilities field within this IE (%u)",
1940 oct>>(32-bits_needed));
1942 curr_bits_length -= bits_needed;
1943 oct <<= bits_needed;
1944 bits_in_oct -= bits_needed;
1950 proto_tree_add_uint_format_value(tf_tree, hf_gsm_a_gm_a5_bits, tvb, curr_offset-1-add_octets, 1+add_octets, oct>>(32-bits_needed), "A5 bits follow (%u)", oct>>(32-bits_needed));
1953 curr_bits_length -= bits_needed;
1954 oct <<= bits_needed;
1955 bits_in_oct -= bits_needed;
1957 for (i=1; i<=7 ; i++)
1966 switch (oct>>(32-bits_needed))
1968 case 0x00: str = "encryption algorithm not available"; break;
1969 case 0x01: str = "encryption algorithm available"; break;
1970 default: str = "This should not happen";
1973 proto_tree_add_uint_format(tf_tree, hf_gsm_a_gm_a5_bits, tvb, curr_offset-1-add_octets, 1+add_octets, oct>>(32-bits_needed), "A5/%d: %s (%u)", i, str, oct>>(32-bits_needed));
1975 curr_bits_length -= bits_needed;
1976 oct <<= bits_needed;
1977 bits_in_oct -= bits_needed;
1987 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_ctrled_early_cm_sending, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
1989 curr_bits_length -= bits_needed;
1990 oct <<= bits_needed;
1991 bits_in_oct -= bits_needed;
1999 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_pseudo_sync, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2001 curr_bits_length -= bits_needed;
2002 oct <<= bits_needed;
2003 bits_in_oct -= bits_needed;
2011 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_vgcs, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2013 curr_bits_length -= bits_needed;
2014 oct <<= bits_needed;
2015 bits_in_oct -= bits_needed;
2023 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_vbs, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2025 curr_bits_length -= bits_needed;
2026 oct <<= bits_needed;
2027 bits_in_oct -= bits_needed;
2030 * Multislot capability?
2035 value = oct>>(32-bits_needed);
2037 mc_item = proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_multislot_capability, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2040 curr_bits_length -= bits_needed;
2041 oct <<= bits_needed;
2042 bits_in_oct -= bits_needed;
2047 mc_tree = proto_item_add_subtree(mc_item, ett_gsm_a_gm_msrac_multislot_capability);
2049 * HSCSD multislot class?
2055 if ((oct>>(32-bits_needed)) == 0)
2057 proto_tree_add_uint_format_value(mc_tree, hf_gsm_a_gm_rac_hscsd_multi_slot_class, tvb, curr_offset-1-add_octets, 1+add_octets, 0xFF,
2058 "Bits are not available (%u)", oct>>(32-bits_needed));
2060 curr_bits_length -= bits_needed;
2061 oct <<= bits_needed;
2062 bits_in_oct -= bits_needed;
2066 curr_bits_length -= bits_needed;
2067 oct <<= bits_needed;
2068 bits_in_oct -= bits_needed;
2072 * HSCSD multislot class
2077 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_hscsd_multi_slot_class, tvb, bit_offset, 5, ENC_BIG_ENDIAN);
2079 curr_bits_length -= bits_needed;
2080 oct <<= bits_needed;
2081 bits_in_oct -= bits_needed;
2085 * GPRS multislot class?
2091 if ((oct>>(32-bits_needed)) == 0)
2093 proto_tree_add_uint_format_value(mc_tree, hf_gsm_a_gm_rac_gprs_multi_slot_class, tvb, curr_offset-1-add_octets, 1+add_octets, 0xFF,
2094 "Bits are not available (%u)", oct>>(32-bits_needed));
2096 curr_bits_length -= bits_needed;
2097 oct <<= bits_needed;
2098 bits_in_oct -= bits_needed;
2102 curr_bits_length -= bits_needed;
2103 oct <<= bits_needed;
2104 bits_in_oct -= bits_needed;
2108 * GPRS multislot class
2113 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_gprs_multi_slot_class, tvb, bit_offset, 5, ENC_BIG_ENDIAN);
2115 curr_bits_length -= bits_needed;
2116 oct <<= bits_needed;
2117 bits_in_oct -= bits_needed;
2120 * GPRS Extended Dynamic Allocation Capability
2125 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_gprs_ext_dyn_alloc_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2127 curr_bits_length -= bits_needed;
2128 oct <<= bits_needed;
2129 bits_in_oct -= bits_needed;
2139 if ((oct>>(32-bits_needed)) == 0)
2141 proto_tree_add_uint_format_value(mc_tree, hf_gsm_a_gm_sms_value, tvb, curr_offset-1-add_octets, 1+add_octets, 0xFF,
2142 "Bits are not available (%u)", oct>>(32-bits_needed));
2144 curr_bits_length -= bits_needed;
2145 oct <<= bits_needed;
2146 bits_in_oct -= bits_needed;
2150 curr_bits_length -= bits_needed;
2151 oct <<= bits_needed;
2152 bits_in_oct -= bits_needed;
2156 * Switch-Measure-Switch value
2162 proto_tree_add_bits_item(mc_tree, hf_gsm_a_gm_sms_value, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
2164 curr_bits_length -= bits_needed;
2165 oct <<= bits_needed;
2166 bits_in_oct -= bits_needed;
2169 * Switch-Measure value
2175 proto_tree_add_bits_item(mc_tree, hf_gsm_a_gm_sm_value, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
2177 curr_bits_length -= bits_needed;
2178 oct <<= bits_needed;
2179 bits_in_oct -= bits_needed;
2183 * ECSD multislot class?
2189 if ((oct>>(32-bits_needed)) == 0)
2191 proto_tree_add_uint_format_value(mc_tree, hf_gsm_a_gm_rac_ecsd_multi_slot_class, tvb, curr_offset-1-add_octets, 1+add_octets, 0xFF,
2192 "Bits are not available (%u)", oct>>(32-bits_needed));
2194 curr_bits_length -= bits_needed;
2195 oct <<= bits_needed;
2196 bits_in_oct -= bits_needed;
2200 curr_bits_length -= bits_needed;
2201 oct <<= bits_needed;
2202 bits_in_oct -= bits_needed;
2206 * ECSD multislot class
2211 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_ecsd_multi_slot_class, tvb, bit_offset, 5, ENC_BIG_ENDIAN);
2213 curr_bits_length -= bits_needed;
2214 oct <<= bits_needed;
2215 bits_in_oct -= bits_needed;
2219 * EGPRS multislot class?
2225 if ((oct>>(32-bits_needed)) == 0)
2227 proto_tree_add_uint_format_value(mc_tree, hf_gsm_a_gm_rac_egprs_multi_slot_class, tvb, curr_offset-1-add_octets, 1+add_octets, 0xFF,
2228 "Bits are not available (%u)", oct>>(32-bits_needed));
2229 curr_bits_length -= bits_needed;
2230 oct <<= bits_needed;
2231 bits_in_oct -= bits_needed;
2236 curr_bits_length -= bits_needed;
2237 oct <<= bits_needed;
2238 bits_in_oct -= bits_needed;
2242 * EGPRS multislot class
2247 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_egprs_multi_slot_class, tvb, bit_offset, 5, ENC_BIG_ENDIAN);
2249 curr_bits_length -= bits_needed;
2250 oct <<= bits_needed;
2251 bits_in_oct -= bits_needed;
2254 * EGPRS Extended Dynamic Allocation Capability
2259 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_egprs_ext_dyn_alloc_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2261 curr_bits_length -= bits_needed;
2262 oct <<= bits_needed;
2263 bits_in_oct -= bits_needed;
2267 * DTM GPRS Multi Slot Class ?
2273 if ((oct>>(32-bits_needed)) == 0)
2275 proto_tree_add_uint_format_value(mc_tree, hf_gsm_a_gm_rac_dtm_gprs_multi_slot_class, tvb, curr_offset-1-add_octets, 1+add_octets, 0xFF,
2276 "Bits are not available (%u)", oct>>(32-bits_needed));
2278 curr_bits_length -= bits_needed;
2279 oct <<= bits_needed;
2280 bits_in_oct -= bits_needed;
2284 curr_bits_length -= bits_needed;
2285 oct <<= bits_needed;
2286 bits_in_oct -= bits_needed;
2290 * DTM GPRS Multi Slot Class
2296 dtm_gprs_mslot = oct>>(32-bits_needed);
2298 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_dtm_gprs_multi_slot_class, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
2300 curr_bits_length -= bits_needed;
2301 oct <<= bits_needed;
2302 bits_in_oct -= bits_needed;
2310 proto_tree_add_bits_item(mc_tree, hf_gsm_a_gm_rac_single_slt_dtm, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2312 curr_bits_length -= bits_needed;
2313 oct <<= bits_needed;
2314 bits_in_oct -= bits_needed;
2317 * DTM EGPRS Multi Slot Class ?
2323 dtm_egprs_mslot = oct>>(32-bits_needed);
2324 proto_tree_add_bits_item(mc_tree, hf_gsm_a_gm_rac_dtm_egprs_multi_slot_cls_pres, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2326 curr_bits_length -= bits_needed;
2327 oct <<= bits_needed;
2328 bits_in_oct -= bits_needed;
2330 if ((oct>>(32-bits_needed)) == 1)
2333 * DTM EGPRS Multi Slot Class
2338 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_dtm_egprs_multi_slot_class, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
2340 curr_bits_length -= bits_needed;
2341 oct <<= bits_needed;
2342 bits_in_oct -= bits_needed;
2348 * 8PSK Power Capability?
2352 value = oct>>(32-bits_needed);
2354 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_8psk_pow_cap_pres, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2356 curr_bits_length -= bits_needed;
2357 oct <<= bits_needed;
2358 bits_in_oct -= bits_needed;
2364 * 8PSK Power Capability
2370 proto_tree_add_uint(tf_tree, hf_gsm_a_gm_8psk_power_capability, tvb, curr_offset-1-add_octets, 1+add_octets, oct>>(32-bits_needed));
2372 curr_bits_length -= bits_needed;
2373 oct <<= bits_needed;
2374 bits_in_oct -= bits_needed;
2378 * COMPACT Interference Measurement Capability
2383 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_comp_int_meas_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2385 curr_bits_length -= bits_needed;
2386 oct <<= bits_needed;
2387 bits_in_oct -= bits_needed;
2390 * Revision Level Indicator
2395 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rel_lev_ind, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2397 curr_bits_length -= bits_needed;
2398 oct <<= bits_needed;
2399 bits_in_oct -= bits_needed;
2402 * UMTS FDD Radio Access Technology Capability
2407 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_umts_fdd_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2409 curr_bits_length -= bits_needed;
2410 oct <<= bits_needed;
2411 bits_in_oct -= bits_needed;
2414 * UMTS 3.84 Mcps TDD Radio Access Technology Capability
2419 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_umts_384_tdd_ra_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2421 curr_bits_length -= bits_needed;
2422 oct <<= bits_needed;
2423 bits_in_oct -= bits_needed;
2426 * CDMA 2000 Radio Access Technology Capability
2431 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_cdma2000_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2433 curr_bits_length -= bits_needed;
2434 oct <<= bits_needed;
2435 bits_in_oct -= bits_needed;
2438 * UMTS 1.28 Mcps TDD Radio Access Technology Capability
2443 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_umts_128_tdd_ra_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2445 curr_bits_length -= bits_needed;
2446 oct <<= bits_needed;
2447 bits_in_oct -= bits_needed;
2450 * GERAN Feature Package 1
2455 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_geran_feat_pkg, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2457 curr_bits_length -= bits_needed;
2458 oct <<= bits_needed;
2459 bits_in_oct -= bits_needed;
2462 * Extended DTM (E)GPRS Multi Slot Class
2469 if ((oct>>(32-bits_needed)) == 0)
2471 proto_tree_add_uint_format_value(tf_tree, hf_gsm_a_gm_extended_dtm_egprs_multi_slot_class, tvb, curr_offset-1-add_octets, 1+add_octets, 0xFF, "Bits are not available (%u)", oct>>(32-bits_needed));
2472 curr_bits_length -= bits_needed;
2473 oct <<= bits_needed;
2474 bits_in_oct -= bits_needed;
2479 curr_bits_length -= bits_needed;
2480 oct <<= bits_needed;
2481 bits_in_oct -= bits_needed;
2485 * Extended DTM GPRS Multi Slot Class
2491 proto_tree_add_uint(tf_tree, hf_gsm_a_gm_extended_dtm_gprs_multi_slot_class, tvb, curr_offset-1-add_octets, 1+add_octets, (oct>>(32-bits_needed))|(dtm_gprs_mslot<<4));
2493 curr_bits_length -= bits_needed;
2494 oct <<= bits_needed;
2495 bits_in_oct -= bits_needed;
2497 if (dtm_egprs_mslot <= 3)
2500 * Extended DTM EGPRS Multi Slot Class
2506 proto_tree_add_uint(tf_tree, hf_gsm_a_gm_extended_dtm_egprs_multi_slot_class, tvb, curr_offset-1-add_octets, 1+add_octets, (oct>>(32-bits_needed))|(dtm_egprs_mslot<<4));
2508 curr_bits_length -= bits_needed;
2509 oct <<= bits_needed;
2510 bits_in_oct -= bits_needed;
2515 * Modulation based multislot class support
2520 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_mod_based_multi_slot_class_support, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2522 curr_bits_length -= bits_needed;
2523 oct <<= bits_needed;
2524 bits_in_oct -= bits_needed;
2527 * High Multislot Capability
2533 if ((oct>>(32-bits_needed)) == 0)
2535 proto_tree_add_uint_format_value(tf_tree, hf_gsm_a_gm_high_multislot_capability, tvb, curr_offset-1-add_octets, 1+add_octets, 0xFF, "Bits are not available (%u)", oct>>(32-bits_needed));
2537 curr_bits_length -= bits_needed;
2538 oct <<= bits_needed;
2539 bits_in_oct -= bits_needed;
2543 curr_bits_length -= bits_needed;
2544 oct <<= bits_needed;
2545 bits_in_oct -= bits_needed;
2549 * High Multislot Capability
2555 ti = proto_tree_add_uint(tf_tree, hf_gsm_a_gm_high_multislot_capability, tvb, curr_offset-1-add_octets, 1+add_octets, oct>>(32-bits_needed));
2556 proto_item_append_text(ti, " - This field effect all other multislot fields."
2557 " To understand the value please read TS 24.008 5.6.0"
2558 " Release 5 Chap 10.5.5.12 Page 406");
2560 curr_bits_length -= bits_needed;
2561 oct <<= bits_needed;
2562 bits_in_oct -= bits_needed;
2566 * GERAN Iu Mode Capability
2571 value = tvb_get_bits8(tvb, bit_offset, 1);
2572 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_geran_iu_mode_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2573 bit_offset += bits_needed;
2574 curr_bits_length -= bits_needed;
2575 oct <<= bits_needed;
2576 bits_in_oct -= bits_needed;
2579 /* GERAN Iu Mode Capabilities struct present */
2582 value = tvb_get_bits8(tvb, bit_offset, 4);
2583 bit_offset += bits_needed;
2584 curr_bits_length -= bits_needed;
2585 oct <<= bits_needed;
2586 bits_in_oct -= bits_needed;
2594 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_flo_iu_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2595 bit_offset += bits_needed;
2596 curr_bits_length -= bits_needed;
2597 oct <<= bits_needed;
2598 bits_in_oct -= bits_needed;
2601 /* skip spare bits */
2602 bit_offset += value;
2603 curr_bits_length -= value;
2605 bits_in_oct -= value;
2610 * GMSK Multislot Power Profile
2616 proto_tree_add_uint(tf_tree, hf_gsm_a_gm_gmsk_multislot_power_profile, tvb, curr_offset-1-add_octets, 1+add_octets, oct>>(32-bits_needed));
2618 curr_bits_length -= bits_needed;
2619 oct <<= bits_needed;
2620 bits_in_oct -= bits_needed;
2623 * 8-PSK Multislot Power Profile
2629 proto_tree_add_uint(tf_tree, hf_gsm_a_gm_8psk_multislot_power_profile, tvb, curr_offset-1-add_octets, 1+add_octets, oct>>(32-bits_needed));
2631 curr_bits_length -= bits_needed;
2632 oct <<= bits_needed;
2633 bits_in_oct -= bits_needed;
2640 * Multiple TBF Capability
2644 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_mult_tbf_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2645 bit_offset += bits_needed;
2646 curr_bits_length -= bits_needed;
2647 oct <<= bits_needed;
2648 bits_in_oct -= bits_needed;
2651 * Downlink Advanced Receiver Performance
2655 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_down_adv_rec_perf, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
2656 bit_offset += bits_needed;
2657 curr_bits_length -= bits_needed;
2658 oct <<= bits_needed;
2659 bits_in_oct -= bits_needed;
2662 * Extended RLC/MAC Control Message Segmentation Capability
2666 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_ext_rlc_mac_ctrl_msg_seg_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2667 bit_offset += bits_needed;
2668 curr_bits_length -= bits_needed;
2669 oct <<= bits_needed;
2670 bits_in_oct -= bits_needed;
2673 * DTM Enhancements Capability
2677 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_dtm_enh_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2678 bit_offset += bits_needed;
2679 curr_bits_length -= bits_needed;
2680 oct <<= bits_needed;
2681 bits_in_oct -= bits_needed;
2684 * DTM GPRS High Multi Slot Class & DTM EGPRS High Multi Slot Class
2688 if ((oct>>(32-bits_needed)) == 0)
2690 bit_offset += bits_needed;
2691 curr_bits_length -= bits_needed;
2692 oct <<= bits_needed;
2693 bits_in_oct -= bits_needed;
2697 bit_offset += bits_needed;
2698 curr_bits_length -= bits_needed;
2699 oct <<= bits_needed;
2700 bits_in_oct -= bits_needed;
2703 * DTM GPRS High Multi Slot Class
2707 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_dtm_gprs_high_multi_slot_class, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
2708 bit_offset += bits_needed;
2709 curr_bits_length -= bits_needed;
2710 oct <<= bits_needed;
2711 bits_in_oct -= bits_needed;
2715 if ((oct>>(32-bits_needed)) == 0)
2717 bit_offset += bits_needed;
2718 curr_bits_length -= bits_needed;
2719 oct <<= bits_needed;
2720 bits_in_oct -= bits_needed;
2724 bit_offset += bits_needed;
2725 curr_bits_length -= bits_needed;
2726 oct <<= bits_needed;
2727 bits_in_oct -= bits_needed;
2730 * DTM EGPRS High Multi Slot Class
2734 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_dtm_egprs_high_multi_slot_class, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
2735 bit_offset += bits_needed;
2736 curr_bits_length -= bits_needed;
2737 oct <<= bits_needed;
2738 bits_in_oct -= bits_needed;
2743 * PS Handover Capability
2747 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_ps_ho_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2748 bit_offset += bits_needed;
2749 curr_bits_length -= bits_needed;
2750 oct <<= bits_needed;
2751 bits_in_oct -= bits_needed;
2758 * DTM Handover Capability
2762 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_dtm_ho_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2763 bit_offset += bits_needed;
2764 curr_bits_length -= bits_needed;
2765 oct <<= bits_needed;
2766 bits_in_oct -= bits_needed;
2769 * Multislot Capability Reduction for Downlink Dual Carrier & Downlink Dual Carrier for DTM Capability
2774 if ((oct>>(32-bits_needed)) == 0)
2776 bit_offset += bits_needed;
2777 curr_bits_length -= bits_needed;
2778 oct <<= bits_needed;
2779 bits_in_oct -= bits_needed;
2783 bit_offset += bits_needed;
2784 curr_bits_length -= bits_needed;
2785 oct <<= bits_needed;
2786 bits_in_oct -= bits_needed;
2789 * Multislot Capability Reduction for Downlink Dual Carrier
2793 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_multi_slot_cap_red_down_dual_carrier, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
2794 bit_offset += bits_needed;
2795 curr_bits_length -= bits_needed;
2796 oct <<= bits_needed;
2797 bits_in_oct -= bits_needed;
2800 * Downlink Dual Carrier for DTM Capability
2804 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_down_dual_carrier_dtm_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2805 bit_offset += bits_needed;
2806 curr_bits_length -= bits_needed;
2807 oct <<= bits_needed;
2808 bits_in_oct -= bits_needed;
2812 * Flexible Timeslot Assignment
2816 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_flex_ts_assign, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2817 bit_offset += bits_needed;
2818 curr_bits_length -= bits_needed;
2819 oct <<= bits_needed;
2820 bits_in_oct -= bits_needed;
2823 * GAN PS Handover Capability
2827 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_gan_ps_ho_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2828 bit_offset += bits_needed;
2829 curr_bits_length -= bits_needed;
2830 oct <<= bits_needed;
2831 bits_in_oct -= bits_needed;
2834 * RLC Non-persistent Mode
2838 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_rlc_non_pers_mode, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2839 bit_offset += bits_needed;
2840 curr_bits_length -= bits_needed;
2841 oct <<= bits_needed;
2842 bits_in_oct -= bits_needed;
2845 * Reduced Latency Capability
2849 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_reduced_lat_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2850 bit_offset += bits_needed;
2851 curr_bits_length -= bits_needed;
2852 oct <<= bits_needed;
2853 bits_in_oct -= bits_needed;
2860 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_ul_egprs2, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
2861 bit_offset += bits_needed;
2862 curr_bits_length -= bits_needed;
2863 oct <<= bits_needed;
2864 bits_in_oct -= bits_needed;
2871 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_dl_egprs2, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
2872 bit_offset += bits_needed;
2873 curr_bits_length -= bits_needed;
2874 oct <<= bits_needed;
2875 bits_in_oct -= bits_needed;
2882 * E-UTRA FDD support
2886 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_eutra_fdd_support, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2887 bit_offset += bits_needed;
2888 curr_bits_length -= bits_needed;
2889 oct <<= bits_needed;
2890 bits_in_oct -= bits_needed;
2893 * E-UTRA TDD support
2897 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_eutra_tdd_support, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2898 bit_offset += bits_needed;
2899 curr_bits_length -= bits_needed;
2900 oct <<= bits_needed;
2901 bits_in_oct -= bits_needed;
2904 * GERAN to E-UTRA support in GERAN packet transfer mode
2908 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_geran_to_eutra_support_in_geran_ptm, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
2909 bit_offset += bits_needed;
2910 curr_bits_length -= bits_needed;
2911 oct <<= bits_needed;
2912 bits_in_oct -= bits_needed;
2915 * Priority-based reselection support
2919 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_prio_based_resel_support, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2920 bit_offset += bits_needed;
2921 curr_bits_length -= bits_needed;
2922 oct <<= bits_needed;
2923 bits_in_oct -= bits_needed;
2930 * Enhanced Flexible Timeslot Assignment
2934 if ((oct>>(32-bits_needed)) == 0)
2936 bit_offset += bits_needed;
2937 curr_bits_length -= bits_needed;
2938 oct <<= bits_needed;
2939 bits_in_oct -= bits_needed;
2943 bit_offset += bits_needed;
2944 curr_bits_length -= bits_needed;
2945 oct <<= bits_needed;
2946 bits_in_oct -= bits_needed;
2949 * Alternative EFTA Multislot Class
2953 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_alt_efta_multi_slot_class, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
2954 bit_offset += bits_needed;
2955 curr_bits_length -= bits_needed;
2956 oct <<= bits_needed;
2957 bits_in_oct -= bits_needed;
2960 * EFTA Multislot Capability Reduction for Downlink Dual Carrier
2964 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_efta_multi_slot_cap_red_down_dual_carrier, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
2965 bit_offset += bits_needed;
2966 curr_bits_length -= bits_needed;
2967 oct <<= bits_needed;
2968 bits_in_oct -= bits_needed;
2972 * Indication of Upper Layer PDU Start Capability for RLC UM
2976 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_ind_up_layer_pdu_start_cap_for_rlc_um, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2977 bit_offset += bits_needed;
2978 curr_bits_length -= bits_needed;
2979 oct <<= bits_needed;
2980 bits_in_oct -= bits_needed;
2987 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_emst_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2988 bit_offset += bits_needed;
2989 curr_bits_length -= bits_needed;
2990 oct <<= bits_needed;
2991 bits_in_oct -= bits_needed;
2998 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_mtti_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2999 bit_offset += bits_needed;
3000 curr_bits_length -= bits_needed;
3001 oct <<= bits_needed;
3002 bits_in_oct -= bits_needed;
3005 * UTRA CSG Cells Reporting
3009 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_utra_csg_cell_report, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
3010 bit_offset += bits_needed;
3011 curr_bits_length -= bits_needed;
3012 oct <<= bits_needed;
3013 bits_in_oct -= bits_needed;
3016 * E-UTRA CSG Cells Reporting
3020 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_eutra_csg_cell_report, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
3021 bit_offset += bits_needed;
3022 curr_bits_length -= bits_needed;
3023 oct <<= bits_needed;
3024 bits_in_oct -= bits_needed;
3035 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_dtr_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
3036 bit_offset += bits_needed;
3037 curr_bits_length -= bits_needed;
3038 oct <<= bits_needed;
3039 bits_in_oct -= bits_needed;
3046 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_emsr_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
3047 bit_offset += bits_needed;
3048 curr_bits_length -= bits_needed;
3049 oct <<= bits_needed;
3050 bits_in_oct -= bits_needed;
3053 * Fast Downlink Frequency Switching Capability
3057 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_fast_down_freq_switch_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
3058 bit_offset += bits_needed;
3059 curr_bits_length -= bits_needed;
3060 oct <<= bits_needed;
3061 bits_in_oct -= bits_needed;
3064 * TIGHTER Capability
3068 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_tighter_cap, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
3069 bit_offset += bits_needed;
3070 curr_bits_length -= bits_needed;
3071 oct <<= bits_needed;
3072 bits_in_oct -= bits_needed;
3083 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_fanr_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
3084 bit_offset += bits_needed;
3085 curr_bits_length -= bits_needed;
3086 oct <<= bits_needed;
3087 bits_in_oct -= bits_needed;
3094 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_ipa_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
3095 bit_offset += bits_needed;
3096 curr_bits_length -= bits_needed;
3097 oct <<= bits_needed;
3098 bits_in_oct -= bits_needed;
3101 * GERAN Network Sharing support
3105 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_geran_nw_sharing_support, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
3106 bit_offset += bits_needed;
3107 curr_bits_length -= bits_needed;
3108 oct <<= bits_needed;
3109 bits_in_oct -= bits_needed;
3112 * E-UTRA Wideband RSRQ measurements support
3116 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_eutra_wb_rsrq_support, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
3117 bit_offset += bits_needed;
3118 curr_bits_length -= bits_needed;
3119 oct <<= bits_needed;
3120 bits_in_oct -= bits_needed;
3127 * UTRA Multiple Frequency Band Indicators support
3131 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_utra_mfbi_support, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
3132 bit_offset += bits_needed;
3133 curr_bits_length -= bits_needed;
3134 oct <<= bits_needed;
3135 bits_in_oct -= bits_needed;
3138 * E-UTRA Multiple Frequency Band Indicators support
3142 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_eutra_mfbi_support, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
3143 bit_offset += bits_needed;
3144 curr_bits_length -= bits_needed;
3145 oct <<= bits_needed;
3146 bits_in_oct -= bits_needed;
3153 if ((oct>>(32-bits_needed)) == 0)
3155 bit_offset += bits_needed;
3156 curr_bits_length -= bits_needed;
3157 oct <<= bits_needed;
3158 bits_in_oct -= bits_needed;
3162 bit_offset += bits_needed;
3163 curr_bits_length -= bits_needed;
3164 oct <<= bits_needed;
3165 bits_in_oct -= bits_needed;
3169 if ((oct>>(32-bits_needed)) == 0)
3171 bit_offset += bits_needed;
3172 curr_bits_length -= bits_needed;
3173 oct <<= bits_needed;
3174 bits_in_oct -= bits_needed;
3178 bit_offset += bits_needed;
3179 curr_bits_length -= bits_needed;
3180 oct <<= bits_needed;
3181 bits_in_oct -= bits_needed;
3184 * DLMC - Non-contiguous intra-band reception
3188 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_dlmc_non_contig_intra_band_recep, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
3189 bit_offset += bits_needed;
3190 curr_bits_length -= bits_needed;
3191 oct <<= bits_needed;
3192 bits_in_oct -= bits_needed;
3195 * DLMC - Inter-band reception
3199 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_dlmc_inter_band_recep, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
3200 bit_offset += bits_needed;
3201 curr_bits_length -= bits_needed;
3202 oct <<= bits_needed;
3203 bits_in_oct -= bits_needed;
3207 * DLMC - Maximum Bandwidth
3211 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_dlmc_max_bandwidth, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
3212 bit_offset += bits_needed;
3213 curr_bits_length -= bits_needed;
3214 oct <<= bits_needed;
3215 bits_in_oct -= bits_needed;
3218 * DLMC - Maximum Number of Downlink Timeslots
3222 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_dlmc_max_nb_dl_ts, tvb, bit_offset, 6, ENC_BIG_ENDIAN);
3223 bit_offset += bits_needed;
3224 curr_bits_length -= bits_needed;
3225 oct <<= bits_needed;
3226 bits_in_oct -= bits_needed;
3229 * DLMC - Maximum Number of Downlink Carriers
3233 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_dlmc_max_nb_dl_carriers, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
3234 bit_offset += bits_needed;
3235 curr_bits_length -= bits_needed;
3236 oct <<= bits_needed;
3237 bits_in_oct -= bits_needed;
3241 * Extended TSC Set Capability support
3245 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_ext_tsc_set_cap_support, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
3246 bit_offset += bits_needed;
3247 curr_bits_length -= bits_needed;
3248 oct <<= bits_needed;
3249 bits_in_oct -= bits_needed;
3252 * Extended EARFCN value range
3256 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_ext_earfcn_value_range, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
3257 bit_offset += bits_needed;
3258 curr_bits_length -= bits_needed;
3259 oct <<= bits_needed;
3260 bits_in_oct -= bits_needed;
3267 * (EC-)PCH monitoring support
3271 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_ec_pch_mon_support, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
3272 bit_offset += bits_needed;
3273 curr_bits_length -= bits_needed;
3274 oct <<= bits_needed;
3275 bits_in_oct -= bits_needed;
3286 if ((oct>>(32-bits_needed)) == 0)
3288 bit_offset += bits_needed;
3289 curr_bits_length -= bits_needed;
3290 oct <<= bits_needed;
3291 bits_in_oct -= bits_needed;
3297 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_ms_sync_accuracy, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
3298 bit_offset += bits_needed;
3299 curr_bits_length -= bits_needed;
3300 oct <<= bits_needed;
3301 bits_in_oct -= bits_needed;
3305 * EC uplink coverage enhancement support
3309 proto_tree_add_bits_item(tf_tree, hf_gsm_a_gm_rac_ext_ec_ul_cov_enh_support, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
3310 bit_offset += bits_needed;
3311 curr_bits_length -= bits_needed;
3312 oct <<= bits_needed;
3313 bits_in_oct -= bits_needed;
3316 * we are too long ... so jump over it
3318 while (curr_bits_length > 0)
3320 if (curr_bits_length > 8)
3323 bits_needed = curr_bits_length;
3325 curr_bits_length -= bits_needed;
3326 oct <<= bits_needed;
3327 bits_in_oct -= bits_needed;
3333 curr_offset += curr_len;
3335 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data);
3337 return (curr_offset - offset);
3343 static const range_string gmm_cause_vals[] = {
3344 { 0x00, 0x01, "Protocol error, unspecified"},
3345 { 0x02, 0x02, "IMSI unknown in HLR"},
3346 { 0x03, 0x03, "Illegal MS"},
3347 { 0x04, 0x04, "IMSI unknown in VLR"}, /* Annex G.1 */
3348 { 0x05, 0x05, "IMEI not accepted"}, /* Annex G.1 */
3349 { 0x06, 0x06, "Illegal ME"},
3350 { 0x07, 0x07, "GPRS services not allowed"},
3351 { 0x08, 0x08, "GPRS services and non-GPRS services not allowed"},
3352 { 0x09, 0x09, "MS identity cannot be derived by the network"},
3353 { 0x0a, 0x0a, "Implicitly detached"},
3354 { 0x0b, 0x0b, "PLMN not allowed"},
3355 { 0x0c, 0x0c, "Location Area not allowed"},
3356 { 0x0d, 0x0d, "Roaming not allowed in this location area"},
3357 { 0x0e, 0x0e, "GPRS services not allowed in this PLMN"},
3358 { 0x0f, 0x0f, "No Suitable Cells In Location Area"},
3359 { 0x10, 0x10, "MSC temporarily not reachable"},
3360 { 0x11, 0x11, "Network failure"},
3361 { 0x12, 0x13, "Protocol error, unspecified"},
3362 { 0x14, 0x14, "MAC failure"},
3363 { 0x15, 0x15, "Synch failure"},
3364 { 0x16, 0x16, "Congestion"},
3365 { 0x17, 0x17, "GSM authentication unacceptable"},
3366 { 0x18, 0x18, "Protocol error, unspecified"},
3367 { 0x19, 0x19, "Not authorized for this CSG"},
3368 { 0x1c, 0x1c, "SMS provided via GPRS in this routing area"},
3369 { 0x20, 0x20, "Service option not supported"}, /* Annex G.4 */
3370 { 0x21, 0x21, "Requested service option not subscribed"}, /* Annex G.4 */
3371 { 0x22, 0x22, "Service option temporarily out of order"}, /* Annex G.4 */
3372 { 0x23, 0x25, "Protocol error, unspecified"},
3373 { 0x26, 0x26, "Call cannot be identified(non-GPRS services only)"}, /* Annex G.4 */
3374 { 0x27, 0x27, "Protocol error, unspecified"},
3375 { 0x28, 0x28, "No PDP context activated"},
3376 { 0x29, 0x2f, "Protocol error, unspecified"},
3377 { 0x30, 0x3f, "Retry upon entry into a new cell"},
3378 { 0x40, 0x5e, "Protocol error, unspecified"},
3379 { 0x5f, 0x5f, "Semantically incorrect message"},
3380 { 0x60, 0x60, "Invalid mandatory information"},
3381 { 0x61, 0x61, "Message type non-existent or not implemented"},
3382 { 0x62, 0x62, "Message type not compatible with the protocol state"},
3383 { 0x63, 0x63, "Information element non-existent or not implemented"},
3384 { 0x64, 0x64, "Conditional IE error"},
3385 { 0x65, 0x65, "Message not compatible with the protocol state"},
3386 { 0x66, 0x6e, "Protocol error, unspecified"},
3387 { 0x6f, 0x6f, "Protocol error, unspecified"},
3388 { 0x70, 0xff, "Protocol error, unspecified"},
3391 /* NOTE 1 TS 124 008 V8.6.0 (2009-07)
3392 "Any other value received by the mobile station shall be treated as 0110 1111, "Protocol
3393 error, unspecified". Any other value received by the network shall be treated as
3394 0110 1111, "Protocol error, unspecified".
3397 /* NOTE: The listed reject cause values are defined in annex G. */
3400 de_gmm_cause(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3402 guint32 curr_offset;
3404 curr_offset = offset;
3406 proto_tree_add_item(tree, hf_gsm_a_gm_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3410 /* no length check possible */
3412 return (curr_offset - offset);
3416 * [7] 10.5.5.15 Routing area identification
3419 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_)
3421 proto_tree *subtree;
3426 guint32 curr_offset;
3428 curr_offset = offset;
3430 mcc = (tvb_get_guint8(tvb, curr_offset) & 0x0f) <<8;
3431 mcc |= (tvb_get_guint8(tvb, curr_offset) & 0xf0);
3432 mcc |= (tvb_get_guint8(tvb, curr_offset+1) & 0x0f);
3433 mnc = (tvb_get_guint8(tvb, curr_offset+2) & 0x0f) <<8;
3434 mnc |= (tvb_get_guint8(tvb, curr_offset+2) & 0xf0);
3435 mnc |= (tvb_get_guint8(tvb, curr_offset+1) & 0xf0) >>4;
3436 if ((mnc&0x000f) == 0x000f)
3439 lac = tvb_get_ntohs(tvb, curr_offset+3);
3440 rac = tvb_get_guint8(tvb, curr_offset+5);
3442 subtree = proto_tree_add_subtree_format(tree,
3443 tvb, curr_offset, 6, ett_gmm_rai, NULL,
3444 "Routing area identification: %x-%x-%u-%u",
3445 mcc, mnc, lac, rac);
3447 dissect_e212_mcc_mnc(tvb, pinfo, subtree, offset, E212_RAI, TRUE);
3449 proto_tree_add_item(subtree, hf_gsm_a_lac, tvb, curr_offset+3, 2, ENC_BIG_ENDIAN);
3450 proto_tree_add_item(subtree, hf_gsm_a_gm_rac, tvb, curr_offset+5, 1, ENC_BIG_ENDIAN);
3455 if (add_string[0] == '\0')
3457 g_snprintf(add_string, string_len, " - RAI: %x-%x-%u-%u", mcc, mnc, lac, rac);
3462 /* no length check possible */
3464 return (curr_offset - offset);
3468 * [7] 10.5.5.15a Routing area identification 2
3471 de_gmm_rai2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3473 /* The routing area identification 2 value is coded as octet 2 to 7 of the Routing area identification information element. */
3474 return de_gmm_rai(tvb, tree, pinfo, offset, len, add_string, string_len);
3480 static const value_string gsm_a_gm_update_res_vals[] = {
3482 {1, "Combined RA/LA updated"},
3494 de_gmm_update_res(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3496 guint32 curr_offset = offset;
3498 /* IMPORTANT - IT'S ASSUMED THAT THE INFORMATION IS IN THE HIGHER NIBBLE */
3499 proto_tree_add_item(tree, hf_gsm_a_gm_update_result, tvb, curr_offset, 1, ENC_NA);
3503 /* no length check possible */
3505 return (curr_offset - offset);
3509 * [9] 10.5.5.18 Update Type
3511 static const value_string gsm_a_gm_update_type_vals[] = {
3512 { 0x00, "RA updating" },
3513 { 0x01, "combined RA/LA updating" },
3514 { 0x02, "combined RA/LA updating with IMSI attach" },
3515 { 0x03, "Periodic updating" },
3520 de_gmm_update_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3522 proto_tree_add_item(tree, hf_gsm_a_gm_for, tvb, offset, 1, ENC_BIG_ENDIAN);
3523 proto_tree_add_item(tree, hf_gsm_a_gm_update_type, tvb, offset, 1, ENC_BIG_ENDIAN);
3525 /* no length check possible */
3530 * [9] 10.5.5.19 A&C reference number (lower nibble)
3533 de_gmm_ac_ref_nr(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3535 /* IMPORTANT - IT'S ASSUMED THAT THE INFORMATION IS IN THE LOWER NIBBLE */
3536 proto_tree_add_bits_item(tree, hf_gsm_a_gm_ac_ref_nr, tvb, (offset << 3) + 4, 4, ENC_BIG_ENDIAN);
3538 /* no length check possible */
3543 * [9] 10.5.5.19 A&C reference number (higher nibble)
3546 de_gmm_ac_ref_nr_h(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3548 /* IMPORTANT - IT'S ASSUMED THAT THE INFORMATION IS IN THE HIGHER NIBBLE */
3549 proto_tree_add_bits_item(tree, hf_gsm_a_gm_ac_ref_nr, tvb, offset << 3, 4, ENC_BIG_ENDIAN);
3551 /* no length check possible */
3556 * [9] 10.5.5.20 Service type
3558 static const value_string gsm_a_gm_serv_type_vals[] = {
3559 { 0x00, "Signalling" },
3561 { 0x02, "Paging response" },
3562 { 0x03, "MBMS Multicast Service Reception" },
3563 { 0x04, "MBMS Broadcast Service Reception" },
3568 de_gmm_service_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3572 bit_offset = offset << 3;
3573 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
3575 proto_tree_add_bits_item(tree, hf_gsm_a_gm_serv_type, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
3576 /*bit_offset += 3;*/
3578 /* no length check possible */
3583 * [9] 10.5.5.21 Cell Notification
3588 * [9] 10.5.5.22 PS LCS Capability
3590 static const true_false_string gsm_a_gm_mta_e_vals = {
3591 "Multilateration Timing Advance using Extended Access Burst method supported",
3592 "Multilateration Timing Advance using Extended Access Burst method not supported"
3595 static const true_false_string gsm_a_gm_mta_r_vals = {
3596 "Multilateration Timing Advance using RLC data block method supported",
3597 "Multilateration Timing Advance using RLC data block method not supported"
3600 static const true_false_string gsm_a_gm_apc_vals = {
3601 "Additional Positioning Capabilities which can be retrieved by RRLP are supported",
3602 "Additional Positioning Capabilities which can be retrieved by RRLP are not supported"
3605 static const true_false_string gsm_a_gm_otd_a_vals = {
3606 "MS assisted E-OTD supported",
3607 "MS assisted E-OTD not supported"
3610 static const true_false_string gsm_a_gm_otd_b_vals = {
3611 "MS based E-OTD supported",
3612 "MS based E-OTD not supported"
3615 static const true_false_string gsm_a_gm_gps_a_vals = {
3616 "MS assisted GPS supported",
3617 "MS assisted GPS not supported"
3620 static const true_false_string gsm_a_gm_gps_b_vals = {
3621 "MS based GPS supported",
3622 "MS based GPS not supported"
3625 static const true_false_string gsm_a_gm_gps_c_vals = {
3626 "Conventional GPS supported",
3627 "Conventional GPS not supported"
3630 static const true_false_string gsm_a_gm_motd_vals = {
3631 "Multilateration Observed Time Difference supported",
3632 "Multilateration Observed Time Difference not supported"
3635 static const true_false_string gsm_a_gm_mta_a_vals = {
3636 "Multilateration Timing Advance using Access Burst method supported",
3637 "Multilateration Timing Advance using Access Burst method not supported"
3641 de_gmm_ps_lcs_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3643 guint32 curr_offset;
3645 curr_offset = offset;
3646 proto_tree_add_item(tree, hf_gsm_a_gm_mta_e, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3647 proto_tree_add_item(tree, hf_gsm_a_gm_mta_r, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3648 proto_tree_add_item(tree, hf_gsm_a_gm_apc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3649 proto_tree_add_item(tree, hf_gsm_a_gm_otd_a, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3650 proto_tree_add_item(tree, hf_gsm_a_gm_otd_b, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3651 proto_tree_add_item(tree, hf_gsm_a_gm_gps_a, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3652 proto_tree_add_item(tree, hf_gsm_a_gm_gps_b, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3653 proto_tree_add_item(tree, hf_gsm_a_gm_gps_c, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3658 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, curr_offset << 3, 6, ENC_BIG_ENDIAN);
3659 proto_tree_add_item(tree, hf_gsm_a_gm_motd, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3660 proto_tree_add_item(tree, hf_gsm_a_gm_mta_a, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3663 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data);
3665 return (curr_offset - offset);
3671 static const true_false_string gsm_a_gm_lcs_molr_value = {
3672 "LCS-MOLR via PS domain supported",
3673 "LCS-MOLR via PS domain not supported"
3675 static const true_false_string gsm_a_gm_ims_vops_value = {
3676 "IMS voice over PS session supported in Iu mode, but not supported in A/Gb mode",
3677 "IMS voice over PS session in Iu mode and A/Gb mode not supported"
3679 static const true_false_string gsm_a_gm_emc_bs_value = {
3680 "Emergency bearer services supported in Iu mode, but not supported in A/Gb mode",
3681 "Emergency bearer services in Iu mode and A/Gb mode not supported"
3684 de_gmm_net_feat_supp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3686 guint32 curr_offset;
3688 curr_offset = offset;
3690 proto_tree_add_item(tree, hf_gsm_a_gm_lcs_molr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3691 proto_tree_add_item(tree, hf_gsm_a_gm_mbms, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3692 proto_tree_add_item(tree, hf_gsm_a_gm_ims_vops, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3693 proto_tree_add_item(tree, hf_gsm_a_gm_emc_bs, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3696 return (curr_offset - offset);
3700 * [7] 10.5.5.23a Additional network feature support
3702 static const true_false_string gsm_a_gm_epco_value = {
3703 "Extended protocol configuration options IE supported",
3704 "Extended protocol configuration options IE not supported"
3706 static const true_false_string gsm_a_gm_restrict_ec_value = {
3707 "Enhanced coverage restricted",
3708 "Enhanced coverage not restricted"
3710 static const true_false_string gsm_a_gm_gprs_sms_value = {
3711 "SMS via GPRS not supported",
3712 "SMS via GPRS supported"
3715 de_gmm_add_net_feat_supp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3717 guint32 curr_offset;
3719 curr_offset = offset;
3721 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, curr_offset << 3, 5, ENC_BIG_ENDIAN);
3722 proto_tree_add_item(tree, hf_gsm_a_gm_epco, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3723 proto_tree_add_item(tree, hf_gsm_a_gm_restrict_ec, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3724 proto_tree_add_item(tree, hf_gsm_a_gm_gprs_sms, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3727 return (curr_offset - offset);
3730 /* [7] 10.5.5.24 Inter RAT information container */
3732 de_gmm_rat_info_container(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
3734 guint32 curr_offset;
3735 tvbuff_t *rrc_irat_ho_info_tvb;
3737 curr_offset = offset;
3739 /* The value part of the Inter RAT information container information element is the INTER RAT HANDOVER INFO as
3740 defined in 3GPP TS 25.331 [23c]. If this field includes padding bits, they are defined in 3GPP TS 25.331 [23c].*/
3741 rrc_irat_ho_info_tvb = tvb_new_subset_length(tvb, curr_offset, len);
3742 if (rrc_irat_ho_info_handle)
3743 call_dissector(rrc_irat_ho_info_handle, rrc_irat_ho_info_tvb, pinfo, tree);
3745 proto_tree_add_expert_format(tree, pinfo, &ei_gsm_a_gm_undecoded, tvb, curr_offset, len, "INTER RAT HANDOVER INFO - Not decoded");
3751 /* [7] 10.5.5.25 Requested MS information */
3752 static const true_false_string gsm_a_gm_req_ms_info_irat_vals = {
3753 "Inter RAT information container IE requested",
3754 "Inter RAT information container IE not requested"
3756 static const true_false_string gsm_a_gm_req_ms_info_irat2_vals = {
3757 "E-UTRAN inter RAT information container IE requested",
3758 "E-UTRAN inter RAT information container IE not requested"
3762 de_gmm_req_ms_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
3764 guint32 curr_offset;
3767 curr_offset = offset;
3768 bit_offset = (curr_offset<<3)+4;
3770 proto_tree_add_bits_item(tree, hf_gsm_a_gm_req_ms_info_irat, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
3772 proto_tree_add_bits_item(tree, hf_gsm_a_gm_req_ms_info_irat2, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
3774 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
3781 /* [7] 10.5.5.26 UE network capability
3782 * See subclause 9.9.3.x in 3GPP TS 24.301 [120].
3785 /* [7] 10.5.5.27 E-UTRAN inter RAT information container */
3787 de_gmm_eutran_irat_info_container(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
3789 guint32 curr_offset;
3790 tvbuff_t *lte_rrc_ue_eutra_cap_tvb;
3792 curr_offset = offset;
3794 /* The value part of the E-UTRAN inter RAT information container information element
3795 is formatted and coded according to the UE-EUTRA-Capability IE defined in 3GPP TS 36.331 [129]*/
3796 lte_rrc_ue_eutra_cap_tvb = tvb_new_subset_length(tvb, curr_offset, len);
3797 if (lte_rrc_ue_eutra_cap_handle)
3798 call_dissector(lte_rrc_ue_eutra_cap_handle, lte_rrc_ue_eutra_cap_tvb, pinfo, tree);
3800 proto_tree_add_expert_format(tree, pinfo, &ei_gsm_a_gm_undecoded, tvb, curr_offset, len, "E-UTRAN Inter RAT information container - Not decoded");
3805 /* [7] 10.5.5.28 Voice domain preference and UE's usage setting */
3806 static const true_false_string gsm_a_gm_ue_usage_setting_vals = {
3810 static const value_string gsm_a_gm_voice_domain_pref_for_eutran_vals[] = {
3811 {0x0, "CS Voice only"},
3812 {0x1, "IMS PS Voice only"},
3813 {0x2, "CS voice preferred, IMS PS Voice as secondary"},
3814 {0x3, "IMS PS voice preferred, CS Voice as secondary"},
3819 de_gmm_voice_domain_pref(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
3821 guint32 curr_offset;
3824 curr_offset = offset;
3825 bit_offset = curr_offset<<3;
3827 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, bit_offset, 5, ENC_BIG_ENDIAN);
3829 proto_tree_add_bits_item(tree, hf_gsm_a_gm_ue_usage_setting, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
3831 proto_tree_add_bits_item(tree, hf_gsm_a_gm_voice_domain_pref_for_eutran, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
3838 /* [10] 10.5.5.29 P-TMSI type */
3839 static const true_false_string gsm_a_gm_ptmsi_type_value = {
3845 de_gmm_ptmsi_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3847 guint32 curr_offset, bit_offset;
3849 curr_offset = offset;
3850 bit_offset = (curr_offset<<3)+4;
3852 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
3854 proto_tree_add_bits_item(tree, hf_gsm_a_gm_ptmsi_type, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
3857 return (curr_offset - offset);
3860 /* [10] 10.5.5.30 Location Area Identification 2 */
3862 de_gmm_lai_2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len)
3864 /* The Location Area Identification 2 value is coded as octet 2 to 6 of the */
3865 /* Location Area Identification information element */
3866 return de_lai(tvb, tree, pinfo, offset, len, add_string, string_len);
3869 /* [11] 10.5.5.31 Network resource identifier container */
3871 de_gmm_net_res_id_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
3873 guint32 curr_offset;
3876 curr_offset = offset;
3877 bit_offset = curr_offset<<3;
3879 proto_tree_add_item(tree, hf_gsm_a_gm_nri_cont, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
3881 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, bit_offset, 6, ENC_BIG_ENDIAN);
3886 /* [13] 10.5.5.32 Extended DRX parameters */
3887 static const value_string gsm_a_gm_paging_time_window_vals[] = {
3888 {0x0, "Iu: 0 s / WB-S1: 1.28 s / NB-S1: 2.56 s"},
3889 {0x1, "Iu: 1 s / WB-S1: 2.56 s / NB-S1: 5.12 s"},
3890 {0x2, "Iu: 2 s / WB-S1: 3.84 s / NB-S1: 7.68 s"},
3891 {0x3, "Iu: 3 s / WB-S1: 5.12 s / NB-S1: 10.24 s"},
3892 {0x4, "Iu: 4 s / WB-S1: 6.4 s / NB-S1: 12.8 s"},
3893 {0x5, "Iu: 5 s / WB-S1: 7.68 s / NB-S1: 15.36 s"},
3894 {0x6, "Iu: 6 s / WB-S1: 8.96 s / NB-S1: 17.92 s"},
3895 {0x7, "Iu: 7 s / WB-S1: 10.24 s / NB-S1: 20.48 s"},
3896 {0x8, "Iu: 8 s / WB-S1: 11.52 s / NB-S1: 23.04 s"},
3897 {0x9, "Iu: 9 s / WB-S1: 12.8 s / NB-S1: 25.6 s"},
3898 {0xa, "Iu: 10 s / WB-S1: 14.08 s / NB-S1: 28.16 s"},
3899 {0xb, "Iu: 12 s / WB-S1: 15.36 s / NB-S1: 30.72 s"},
3900 {0xc, "Iu: 14 s / WB-S1: 16.64 s / NB-S1: 33.28 s"},
3901 {0xd, "Iu: 16 s / WB-S1: 17.92 s / NB-S1: 35.84 s"},
3902 {0xe, "Iu: 18 s / WB-S1: 19.2 s / NB-S1: 38.4 s"},
3903 {0xf, "Iu: 20 s / WB-S1: 20.48 s / NB-S1: 40.96 s"},
3907 static const value_string gsm_a_gm_edrx_vals[] = {
3908 {0x0, "GERAN: 1.88 s / UTRAN: 10.24 s / E-UTRAN: 5.12 s"},
3909 {0x1, "GERAN: 3.76 s / UTRAN: 20.48 s / E-UTRAN: 10.24 s"},
3910 {0x2, "GERAN: 7.53 s / UTRAN: 40.96 s / E-UTRAN: 20.48 s"},
3911 {0x3, "GERAN: 12.24 s / UTRAN: 81.92 s / E-UTRAN: 40.96 s"},
3912 {0x4, "GERAN: 24.48 s / UTRAN: 163.84 s / E-UTRAN: 61.44 s"},
3913 {0x5, "GERAN: 48.96 s / UTRAN: 327.68 s / E-UTRAN: 81.92 s"},
3914 {0x6, "GERAN: 97.92 s / UTRAN: 655.36 s / E-UTRAN: 102.4 s"},
3915 {0x7, "GERAN: 195.84 s / UTRAN: 1310.72 s / E-UTRAN: 122.88 s"},
3916 {0x8, "GERAN: 391.68 s / UTRAN: 1966.08 s / E-UTRAN: 143.36 s"},
3917 {0x9, "GERAN: 783.36 s / UTRAN: 2621.44 s / E-UTRAN: 163.84 s"},
3918 {0xa, "GERAN: 1566.72 s / UTRAN: 10.24 s / E-UTRAN: 327.68 s"},
3919 {0xb, "GERAN: 3133.44 s / UTRAN: 10.24 s / E-UTRAN: 655.36 s"},
3920 {0xc, "GERAN: 1.88 s / UTRAN: 10.24 s / E-UTRAN: 1310.72 s"},
3921 {0xd, "GERAN: 1.88 s / UTRAN: 10.24 s / E-UTRAN: 2621.44 s"},
3922 {0xe, "GERAN: 1.88 s / UTRAN: 10.24 s / E-UTRAN: 5242.88 s"},
3923 {0xf, "GERAN: 1.88 s / UTRAN: 10.24 s / E-UTRAN: 10485.76 s"},
3928 de_gmm_ext_drx_params(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
3930 guint32 curr_offset;
3932 curr_offset = offset;
3934 proto_tree_add_item(tree, hf_gsm_a_gm_paging_time_window, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3935 proto_tree_add_item(tree, hf_gsm_a_gm_edrx_value, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3940 /* [13] 10.5.5.33 Message authentication code */
3942 de_gmm_mac(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
3944 proto_tree_add_item(tree, hf_gsm_a_gm_mac, tvb, offset, 4, ENC_BIG_ENDIAN);
3949 /* [13] 10.5.5.34 User Plane integrity indicator */
3950 const true_false_string gsm_a_gm_up_integ_ind_value = {
3951 "MS shall enable integrity protection of user plane data in LLC layer",
3952 "MS shall disable integrity protection of user plane data in LLC layer"
3956 de_gmm_up_integ_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3958 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (offset << 3) + 4, 3, ENC_BIG_ENDIAN);
3959 proto_tree_add_item(tree, hf_gsm_a_gm_up_integ_ind, tvb, offset, 1, ENC_BIG_ENDIAN);
3961 /* no length check possible */
3965 /* [14] 10.5.5.35 DCN-ID */
3967 de_gmm_dcn_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3969 proto_tree_add_item(tree, hf_gsm_a_gm_dcn_id, tvb, offset, 2, ENC_BIG_ENDIAN);
3974 /* [14] 10.5.5.36 PLMN identity of the CN operator */
3976 de_gmm_plmn_id_cn_operator(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3978 dissect_e212_mcc_mnc(tvb, pinfo, tree, offset, E212_NONE, TRUE);
3983 /* [14] 10.5.5.37 Non-3GPP NW provided policies */
3984 const true_false_string gsm_a_gm_n3en_ind_value = {
3985 "Use of non-3GPP emergency numbers permitted",
3986 "Use of non-3GPP emergency numbers not permitted"
3990 de_gmm_non_3gpp_nw_prov_pol(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3992 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (offset << 3) + 4, 3, ENC_BIG_ENDIAN);
3993 proto_tree_add_item(tree, hf_gsm_a_gm_n3en_ind, tvb, offset, 1, ENC_BIG_ENDIAN);
3995 /* no length check possible */
4003 de_gc_context_stat(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
4007 guint32 curr_offset;
4009 curr_offset = offset;
4011 oct = tvb_get_guint8(tvb, curr_offset);
4013 for (pdp_nr=0; pdp_nr<16; pdp_nr++)
4018 oct = tvb_get_guint8(tvb, curr_offset);
4020 proto_tree_add_uint_format(tree, hf_gsm_a_gm_nsapi, tvb, curr_offset, 1, oct&1, "NSAPI %d: %s (%u)", pdp_nr, pdp_str[oct&1], oct&1);
4026 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data);
4028 return (curr_offset - offset);
4034 static const value_string gsm_a_gm_radio_prio_vals[] = {
4035 {0, "priority level 4 (lowest)" },
4036 {1, "priority level 1 (highest)"},
4037 {2, "priority level 2"},
4038 {3, "priority level 3"},
4039 {4, "priority level 4 (lowest)"},
4040 {5, "priority level 4 (lowest)"},
4041 {6, "priority level 4 (lowest)"},
4042 {7, "priority level 4 (lowest)"},
4047 de_gc_radio_prio(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
4049 guint32 curr_offset = offset;
4051 proto_tree_add_item(tree, hf_gsm_a_gm_radio_priority_pdp, tvb, curr_offset, 1, ENC_NA);
4055 return (curr_offset - offset);
4059 * [9] 10.5.7.3 GPRS Timer
4061 static const value_string gsm_a_gm_gprs_timer_unit_vals[] = {
4062 { 0x00, "value is incremented in multiples of 2 seconds" },
4063 { 0x01, "value is incremented in multiples of 1 minute" },
4064 { 0x02, "value is incremented in multiples of decihours" },
4065 { 0x07, "value indicates that the timer is deactivated" },
4070 de_gc_timer(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
4075 proto_item *item = NULL;
4076 proto_tree *subtree;
4078 oct = tvb_get_guint8(tvb, offset);
4084 str = "sec"; val*=2;
4090 str = "min"; val*=6;
4094 item = proto_tree_add_uint_format_value(tree, hf_gsm_a_gm_gprs_timer, tvb, offset, 1, val, "timer is deactivated");
4096 default: str = "min";
4100 item = proto_tree_add_uint_format_value(tree, hf_gsm_a_gm_gprs_timer, tvb, offset, 1, val, "%u %s", val, str);
4103 subtree = proto_item_add_subtree(item, ett_gmm_gprs_timer);
4104 proto_tree_add_item(subtree, hf_gsm_a_gm_gprs_timer_unit, tvb, offset, 1, ENC_BIG_ENDIAN);
4105 proto_tree_add_item(subtree, hf_gsm_a_gm_gprs_timer_value, tvb, offset, 1, ENC_BIG_ENDIAN);
4107 /* no length check possible */
4115 de_gc_timer2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string, int string_len _U_)
4119 guint32 curr_offset;
4120 const gchar *str = NULL;
4121 proto_tree *subtree;
4122 proto_item *item = NULL;
4124 curr_offset = offset;
4126 oct = tvb_get_guint8(tvb, curr_offset);
4133 str = "sec"; val*=2;
4139 str = "min"; val*=6;
4142 item = proto_tree_add_uint_format_value(tree, hf_gsm_a_gm_gprs_timer2, tvb, curr_offset, 1, val, "timer is deactivated");
4144 default: str = "min";
4148 item = proto_tree_add_uint_format_value(tree, hf_gsm_a_gm_gprs_timer2, tvb, curr_offset, 1, val, "%u %s %s", val, str, add_string ? add_string : "");
4151 subtree = proto_item_add_subtree(item, ett_gmm_gprs_timer);
4152 proto_tree_add_item(subtree, hf_gsm_a_gm_gprs_timer2_unit, tvb, offset, 1, ENC_BIG_ENDIAN);
4153 proto_tree_add_item(subtree, hf_gsm_a_gm_gprs_timer2_value, tvb, offset, 1, ENC_BIG_ENDIAN);
4156 return (curr_offset - offset);
4162 static const value_string gsm_a_gm_gprs_timer3_unit_vals[] = {
4163 { 0x00, "value is incremented in multiples of 10 minutes" },
4164 { 0x01, "value is incremented in multiples of 1 hour" },
4165 { 0x02, "value is incremented in multiples of 10 hours" },
4166 { 0x03, "value is incremented in multiples of 2 seconds" },
4167 { 0x04, "value is incremented in multiples of 30 seconds" },
4168 { 0x05, "value is incremented in multiples of 1 minute" },
4169 { 0x06, "value is incremented in multiples of 320 hours (for T3312/T3412 extended), 1 hour otherwise" },
4170 { 0x07, "value indicates that the timer is deactivated" },
4175 de_gc_timer3(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
4179 guint32 curr_offset;
4180 const gchar *str = NULL;
4181 proto_tree *subtree;
4182 proto_item *item = NULL;
4184 curr_offset = offset;
4186 oct = tvb_get_guint8(tvb, curr_offset);
4192 case 0: str = "min"; val*=10; break;
4193 case 1: str = "hr"; break;
4194 case 2: str = "hr"; val*=10; break;
4195 case 3: str = "sec"; val*=2; break;
4196 case 4: str = "sec"; val*=30; break;
4197 case 5: str = "min"; break;
4199 item = proto_tree_add_uint_format_value(tree, hf_gsm_a_gm_gprs_timer3, tvb, curr_offset, 1, val, "timer is deactivated");
4201 default: str = "hr";
4205 item = proto_tree_add_uint_format_value(tree, hf_gsm_a_gm_gprs_timer3, tvb, curr_offset, 1, val, "%u %s", val, str);
4208 subtree = proto_item_add_subtree(item, ett_gmm_gprs_timer);
4209 proto_tree_add_item(subtree, hf_gsm_a_gm_gprs_timer3_unit, tvb, offset, 1, ENC_BIG_ENDIAN);
4210 proto_tree_add_item(subtree, hf_gsm_a_gm_gprs_timer3_value, tvb, offset, 1, ENC_BIG_ENDIAN);
4213 return (curr_offset - offset);
4220 de_gc_radio_prio2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
4222 guint32 curr_offset = offset;
4224 /* IMPORTANT - IT'S ASSUMED THAT THE INFORMATION IS IN THE HIGHER NIBBLE */
4225 proto_tree_add_item(tree, hf_gsm_a_gm_radio_priority_tom8, tvb, curr_offset, 1, ENC_NA);
4229 return (curr_offset - offset);
4233 * [8] 10.5.7.6 MBMS context status
4236 de_gc_mbms_context_stat(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
4238 guint32 curr_offset;
4242 curr_offset = offset;
4244 for (i=0; i<len; i++)
4246 oct = tvb_get_guint8(tvb, curr_offset);
4250 proto_tree_add_uint_format(tree, hf_gsm_a_gm_nsapi, tvb, curr_offset, 1, oct&1, "NSAPI %d: %s (%u)", 128+i*8+j, pdp_str[oct&1], oct&1);
4260 * [8] 10.5.7.7 Uplink data status
4262 static const true_false_string gsm_a_gm_nsapi_ul_stat_vals = {
4263 "uplink data are pending for the preserved PDP context",
4264 "no uplink data are pending for the preserved PDP context or the PDP context is PDP-INACTIVE or is PDP-ACTIVE with a RAB already established"
4268 de_gc_uplink_data_stat(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
4270 guint32 curr_offset;
4273 curr_offset = offset;
4274 bit_offset = curr_offset<<3;
4276 proto_tree_add_bits_item(tree, hf_gsm_a_gm_nsapi_7_ul_stat, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
4278 proto_tree_add_bits_item(tree, hf_gsm_a_gm_nsapi_6_ul_stat, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
4280 proto_tree_add_bits_item(tree, hf_gsm_a_gm_nsapi_5_ul_stat, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
4282 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, bit_offset, 5, ENC_BIG_ENDIAN);
4285 proto_tree_add_bits_item(tree, hf_gsm_a_gm_nsapi_15_ul_stat, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
4287 proto_tree_add_bits_item(tree, hf_gsm_a_gm_nsapi_14_ul_stat, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
4289 proto_tree_add_bits_item(tree, hf_gsm_a_gm_nsapi_13_ul_stat, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
4291 proto_tree_add_bits_item(tree, hf_gsm_a_gm_nsapi_12_ul_stat, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
4293 proto_tree_add_bits_item(tree, hf_gsm_a_gm_nsapi_11_ul_stat, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
4295 proto_tree_add_bits_item(tree, hf_gsm_a_gm_nsapi_10_ul_stat, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
4297 proto_tree_add_bits_item(tree, hf_gsm_a_gm_nsapi_9_ul_stat, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
4299 proto_tree_add_bits_item(tree, hf_gsm_a_gm_nsapi_8_ul_stat, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
4308 * [8] 10.5.7.8 Device properties
4310 static const true_false_string gsm_a_gm_device_prop_low_prio_value = {
4311 "MS is configured for NAS signalling low priority",
4312 "MS is not configured for NAS signalling low priority"
4316 de_gc_device_properties(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
4318 guint32 curr_offset;
4321 curr_offset = offset;
4322 bit_offset = (curr_offset<<3)+4;
4324 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
4326 proto_tree_add_bits_item(tree, hf_gsm_a_gm_device_prop_low_prio, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
4329 return (curr_offset - offset);
4336 de_sm_apn(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
4338 guint32 curr_offset;
4343 curr_offset = offset;
4345 str = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, len, ENC_ASCII|ENC_NA);
4348 while (curr_len < len)
4350 guint step = str[curr_len];
4351 str[curr_len] = '.';
4355 /* Highlight bytes including the first length byte */
4357 pi = proto_tree_add_string(tree, hf_gsm_a_gm_apn, tvb, curr_offset, len, str+1);
4359 expert_add_info(pinfo, pi, &ei_gsm_a_gm_apn_too_long);
4364 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data);
4366 return (curr_offset - offset);
4373 de_sm_nsapi(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string, int string_len _U_)
4376 guint32 curr_offset;
4378 curr_offset = offset;
4380 oct = tvb_get_guint8(tvb, curr_offset);
4382 proto_tree_add_uint_format_value(tree, hf_gsm_a_gm_nsapi, tvb, curr_offset, 1, oct&0x0f, "0x%02x (%u) %s", oct&0x0f, oct&0x0f, add_string ? add_string : "");
4386 return (curr_offset - offset);
4390 * [7] 10.5.6.3 Protocol configuration options
4392 static const range_string gsm_a_sm_pco_ms2net_prot_vals[] = {
4393 { 0x0001, 0x0001, "P-CSCF IPv6 Address Request" },
4394 { 0x0002, 0x0002, "IM CN Subsystem Signaling Flag" },
4395 { 0x0003, 0x0003, "DNS Server IPv6 Address Request" },
4396 { 0x0004, 0x0004, "Not Supported" },
4397 { 0x0005, 0x0005, "MS Support of Network Requested Bearer Control indicator" },
4398 { 0x0006, 0x0006, "Reserved" },
4399 { 0x0007, 0x0007, "DSMIPv6 Home Agent Address Request" },
4400 { 0x0008, 0x0008, "DSMIPv6 Home Network Prefix Request" },
4401 { 0x0009, 0x0009, "DSMIPv6 IPv4 Home Agent Address Request" },
4402 { 0x000a, 0x000a, "IP address allocation via NAS signalling" },
4403 { 0x000b, 0x000b, "IPv4 address allocation via DHCPv4" },
4404 { 0x000c, 0x000c, "P-CSCF IPv4 Address Request" },
4405 { 0x000d, 0x000d, "DNS Server IPv4 Address Request" },
4406 { 0x000e, 0x000e, "MSISDN Request" },
4407 { 0x000f, 0x000f, "IFOM-Support-Request" },
4408 { 0x0010, 0x0010, "IPv4 Link MTU Request" },
4409 { 0x0011, 0x0011, "MS support of Local address in TFT indicator" },
4410 { 0x0012, 0x0012, "P-CSCF Re-selection support" },
4411 { 0x0013, 0x0013, "NBIFOM request indicator" },
4412 { 0x0014, 0x0014, "NBIFOM mode" },
4413 { 0x0015, 0x0015, "Non-IP Link MTU Request" },
4414 { 0x0016, 0x0016, "APN rate control support indicator" },
4415 { 0x0017, 0x0017, "3GPP PS data off UE status" },
4416 { 0x0018, 0x0018, "Reliable Data Service request indicator" },
4417 { 0x0019, 0x0019, "Additional APN rate control for exception data support indicator" },
4418 { 0x001a, 0x001a, "PDU session ID" },
4419 { 0xff00, 0xffff, "Operator Specific Use" },
4422 static const range_string gsm_a_sm_pco_net2ms_prot_vals[] = {
4423 { 0x0001, 0x0001, "P-CSCF IPv6 Address" },
4424 { 0x0002, 0x0002, "IM CN Subsystem Signaling Flag" },
4425 { 0x0003, 0x0003, "DNS Server IPv6 Address" },
4426 { 0x0004, 0x0004, "Policy Control rejection code" },
4427 { 0x0005, 0x0005, "Selected Bearer Control Mode" },
4428 { 0x0006, 0x0006, "Reserved" },
4429 { 0x0007, 0x0007, "DSMIPv6 Home Agent Address" },
4430 { 0x0008, 0x0008, "DSMIPv6 Home Network Prefix" },
4431 { 0x0009, 0x0009, "DSMIPv6 IPv4 Home Agent Address" },
4432 { 0x000a, 0x000a, "Reserved" },
4433 { 0x000b, 0x000b, "Reserved" },
4434 { 0x000c, 0x000c, "P-CSCF IPv4 Address" },
4435 { 0x000d, 0x000d, "DNS Server IPv4 Address" },
4436 { 0x000e, 0x000e, "MSISDN" },
4437 { 0x000f, 0x000f, "IFOM-Support" },
4438 { 0x0010, 0x0010, "IPv4 Link MTU" },
4439 { 0x0011, 0x0011, "Network support of Local address in TFT indicator" },
4440 { 0x0012, 0x0012, "Reserved" },
4441 { 0x0013, 0x0013, "NBIFOM accepted indicator" },
4442 { 0x0014, 0x0014, "NBIFOM mode" },
4443 { 0x0015, 0x0015, "Non-IP Link MTU" },
4444 { 0x0016, 0x0016, "APN rate control parameters" },
4445 { 0x0017, 0x0017, "3GPP PS data off support indication" },
4446 { 0x0018, 0x0018, "Reliable Data Service accepted indicator" },
4447 { 0x0019, 0x0019, "Additional APN rate control for exception data parameters" },
4448 { 0x001a, 0x001a, "Reserved" },
4449 { 0x001b, 0x001b, "S-NSSAI" },
4450 { 0x001c, 0x001c, "QoS rules" },
4451 { 0x001d, 0x001d, "Session-AMBR" },
4452 { 0x001e, 0x001e, "PDU session address lifetime" },
4453 { 0xff00, 0xffff, "Operator Specific Use" },
4457 static const value_string gsm_a_gm_link_dir_vals[] = {
4459 { 0x0, "MS to network" },
4460 { 0x1, "Network to MS" },
4464 static const value_string gsm_a_gm_sel_bearer_ctrl_mode_vals[] = {
4470 static const value_string gsm_a_gm_nbifom_mode_vals[] = {
4471 { 0, "UE-initiated" },
4472 { 1, "Network-initiated" },
4476 const true_false_string gsm_a_gm_apn_rate_ctrl_params_aer_value = {
4477 "Additional exception reports at maximum rate reached are allowed",
4478 "Additional exception reports at maximum rate reached are not allowed"
4481 static const value_string gsm_a_gm_apn_rate_ctrl_ul_time_unit_vals[] = {
4482 { 0, "Unrestricted" },
4490 static const value_string gsm_a_gm_sm_pco_3gpp_data_off_ue_status_vals[] = {
4491 { 1, "Deactivated"},
4497 de_sm_pco(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
4499 proto_item *generated_item;
4500 guint32 curr_offset;
4504 proto_item *pco_item;
4505 proto_tree *pco_tree;
4507 curr_len = (gint)len; /* length field is only 1 or 2 bytes long */
4508 curr_offset = offset;
4510 oct = tvb_get_guint8(tvb, curr_offset);
4512 link_dir = pinfo->link_dir;
4513 generated_item = proto_tree_add_int(tree, hf_gsm_a_gm_link_dir, tvb, curr_offset, 0, link_dir);
4514 PROTO_ITEM_SET_GENERATED(generated_item);
4517 /* 1 ext 0 0 0 0 Spare Configuration protocol */
4518 proto_tree_add_item(tree, hf_gsm_a_sm_ext, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4519 /* Configuration protocol (octet 3)
4522 * 0 0 0 PPP for use with IP PDP type or IP PDN type (see 3GPP TS 24.301 [120])
4524 * All other values are interpreted as PPP in this version of the protocol.
4525 * (3GPP TS 24.008 version 9.4.0 Release 9)
4527 proto_tree_add_uint_format_value(tree, hf_gsm_a_gm_configuration_protocol, tvb, curr_offset, 1, oct&0x07, "PPP for use with IP PDP type or IP PDN type (%u)", oct&0x07);
4531 while (curr_len >= 3) /* 2 bytes protocol/container ID + 1 byte length */
4537 /* Protocol ID 1 octet 4
4539 * Length of protocol ID 1 contents octet 6
4540 * Protocol ID 1 contents octet 7
4543 prot = tvb_get_ntohs(tvb, curr_offset);
4544 pco_item = proto_tree_add_uint_format_value(tree, hf_gsm_a_gm_pco_pid, tvb, curr_offset, 2, (guint32)prot,
4547 rval_to_str_const((guint32)prot, gsm_a_sm_pco_net2ms_prot_vals, val_to_str_ext_const(prot, &ppp_vals_ext, "Unknown")) :
4548 rval_to_str_const((guint32)prot, gsm_a_sm_pco_ms2net_prot_vals, val_to_str_ext_const(prot, &ppp_vals_ext, "Unknown")),
4550 pco_tree = proto_item_add_subtree(pco_item, ett_sm_pco);
4554 e_len = tvb_get_guint8(tvb, curr_offset);
4555 proto_tree_add_item(pco_tree, hf_gsm_a_gm_sm_pco_length, tvb, curr_offset, 1, ENC_NA);
4562 if ((link_dir == P2P_DIR_DL) && (e_len > 0)) {
4563 proto_tree_add_item(pco_tree, hf_gsm_a_gm_sm_pco_pcscf_ipv6, tvb, curr_offset, 16, ENC_NA);
4567 if ((link_dir == P2P_DIR_DL) && (e_len > 0)) {
4568 proto_tree_add_item(pco_tree, hf_gsm_a_gm_sm_pco_dns_ipv6, tvb, curr_offset, 16, ENC_NA);
4572 if ((link_dir == P2P_DIR_DL) && (e_len > 0)) {
4573 proto_tree_add_item(pco_tree, hf_gsm_a_gm_sm_pco_dsmipv6_home_agent_ipv6, tvb, curr_offset, 16, ENC_NA);
4587 if ((link_dir == P2P_DIR_DL) && (e_len == 1)) {
4588 proto_tree_add_item(pco_tree, hf_gsm_a_gm_sm_pco_reject_code, tvb, curr_offset, 1, ENC_NA);
4592 if ((link_dir == P2P_DIR_DL) && (e_len == 1)) {
4593 proto_tree_add_item(pco_tree, hf_gsm_a_gm_sm_pco_sel_bearer_ctrl_mode, tvb, curr_offset, 1, ENC_NA);
4597 if ((link_dir == P2P_DIR_DL) && (e_len > 0)) {
4598 proto_tree_add_item(pco_tree, hf_gsm_a_gm_sm_pco_dsmipv6_home_network_ipv6, tvb, curr_offset, 16, ENC_NA);
4599 proto_tree_add_item(pco_tree, hf_gsm_a_gm_sm_pco_dsmipv6_home_network_prefix_length, tvb, curr_offset+16, 1, ENC_NA);
4603 if ((link_dir == P2P_DIR_DL) && (e_len > 0)) {
4604 proto_tree_add_item(pco_tree, hf_gsm_a_gm_sm_pco_dsmipv6_home_agent_ipv4, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
4608 if ((link_dir == P2P_DIR_DL) && (e_len > 0)) {
4609 proto_tree_add_item(pco_tree, hf_gsm_a_gm_sm_pco_pcscf_ipv4, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
4613 if ((link_dir == P2P_DIR_DL) && (e_len > 0)) {
4614 proto_tree_add_item(pco_tree, hf_gsm_a_gm_sm_pco_dns_ipv4, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
4618 if ((link_dir == P2P_DIR_DL) && (e_len > 0)) {
4619 dissect_e164_msisdn(tvb, pco_tree, curr_offset, e_len, E164_ENC_BCD);
4623 if ((link_dir == P2P_DIR_DL) && (e_len == 2)) {
4624 proto_tree_add_item(pco_tree, hf_gsm_a_gm_sm_pco_ipv4_link_mtu_size, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
4629 proto_tree_add_item(pco_tree, hf_gsm_a_gm_sm_pco_nbifom_mode, tvb, curr_offset, 1, ENC_NA);
4633 if ((link_dir == P2P_DIR_DL) && (e_len == 2)) {
4634 proto_tree_add_item(pco_tree, hf_gsm_a_gm_sm_pco_non_ip_link_mtu_size, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
4638 if (link_dir == P2P_DIR_DL) {
4639 proto_tree_add_bits_item(pco_tree, hf_gsm_a_spare_bits, tvb, (curr_offset << 3), 4, ENC_BIG_ENDIAN);
4640 proto_tree_add_item(pco_tree, hf_gsm_a_gm_sm_pco_apn_rate_ctrl_params_aer, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4641 proto_tree_add_item(pco_tree, hf_gsm_a_gm_sm_pco_apn_rate_ctrl_params_ul_time_unit, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4643 proto_tree_add_item(pco_tree, hf_gsm_a_gm_sm_pco_apn_rate_ctrl_params_max_ul_rate, tvb, curr_offset+1, 3, ENC_BIG_ENDIAN);
4648 if (link_dir == P2P_DIR_UL && e_len >= 1) {
4649 proto_tree_add_item(pco_tree, hf_gsm_a_gm_sm_pco_3gpp_data_off_ue_status, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4653 if (link_dir == P2P_DIR_DL) {
4654 proto_tree_add_bits_item(pco_tree, hf_gsm_a_spare_bits, tvb, (curr_offset << 3), 5, ENC_BIG_ENDIAN);
4655 proto_tree_add_item(pco_tree, hf_gsm_a_gm_sm_pco_add_apn_rate_ctrl_params_ul_time_unit, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4657 proto_tree_add_item(pco_tree, hf_gsm_a_gm_sm_pco_add_apn_rate_ctrl_params_max_ul_rate, tvb, curr_offset+1, 2, ENC_BIG_ENDIAN);
4662 if (link_dir == P2P_DIR_UL) {
4663 proto_tree_add_item(pco_tree, hf_gsm_a_gm_sm_pco_pdu_session_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4667 if (link_dir == P2P_DIR_DL && e_len >= 4) {
4668 de_nas_5gs_cmn_s_nssai(tvb, pco_tree, pinfo, curr_offset, e_len - 3, NULL, 0);
4669 dissect_e212_mcc_mnc(tvb, pinfo, pco_tree, curr_offset + e_len - 3, E212_NONE, TRUE);
4673 if (link_dir == P2P_DIR_DL) {
4674 de_nas_5gs_sm_qos_rules(tvb, pco_tree, pinfo, curr_offset, e_len, NULL, 0);
4678 if (link_dir == P2P_DIR_DL) {
4679 /* Network to MS direction */
4680 de_nas_5gs_sm_session_ambr(tvb, pco_tree, pinfo, curr_offset, e_len, NULL, 0);
4684 if (link_dir == P2P_DIR_DL && e_len == 2) {
4685 /* When the container identifier indicates PDU session address lifetime,
4686 * the length of container identifier contents indicates a length equal to two.
4687 * The container identifier contents field contains the binary coded representation
4688 * of how long the network is willing to maintain the PDU session in units of seconds.
4689 * ...If the length of container identifier contents is different from two octets,
4690 * then it shall be ignored by the receiver
4692 proto_tree_add_item(pco_tree, hf_gsm_a_gm_sm_pco_pdu_session_address_lifetime, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
4696 if (link_dir == P2P_DIR_DL && e_len == 2) {
4697 proto_tree_add_item(pco_tree, hf_gsm_a_gm_sm_pco_pdu_session_address_lifetime, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
4703 if (prot >= 0xff00) {
4704 dissect_e212_mcc_mnc(tvb, pinfo, pco_tree, curr_offset, E212_NONE, TRUE);
4705 if ((e_len - 3) > 0) {
4706 proto_tree_add_item(pco_tree, hf_gsm_a_gm_pco_app_spec_info, tvb, curr_offset+3, e_len-3, ENC_NA);
4709 dissector_handle_t handle;
4710 handle = dissector_get_uint_handle (gprs_sm_pco_subdissector_table, prot);
4711 l3_tvb = tvb_new_subset_length(tvb, curr_offset, e_len);
4715 * dissect the embedded message
4717 /* In this case we do not want the columns updated */
4718 col_set_writable(pinfo->cinfo, -1, FALSE);
4719 call_dissector(handle, l3_tvb, pinfo, pco_tree);
4720 col_set_writable(pinfo->cinfo, -1, TRUE);
4725 * dissect the embedded DATA message
4727 call_data_dissector(l3_tvb, pinfo, pco_tree);
4734 curr_offset += e_len;
4738 proto_tree_add_expert(tree, pinfo, &ei_gsm_a_gm_not_enough_data, tvb, offset, len);
4740 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data);
4747 * [9] 10.5.6.4 Packet data protocol address
4749 static const value_string gsm_a_sm_pdp_type_org_vals[] = {
4750 { 0x00, "ETSI allocated address" },
4751 { 0x01, "IETF allocated address" },
4752 { 0x0f, "Empty PDP type" },
4757 de_sm_pdp_addr(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
4759 guint32 curr_offset;
4761 guchar pdp_type_org, pdp_type_num;
4763 curr_offset = offset;
4765 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset << 3), 4, ENC_BIG_ENDIAN);
4766 proto_tree_add_item(tree, hf_gsm_a_sm_pdp_type_org, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4768 pdp_type_org = tvb_get_guint8(tvb, curr_offset) & 0x0f;
4770 pdp_type_num = tvb_get_guint8(tvb, curr_offset);
4772 if (pdp_type_org == 0)
4774 /* ETSI allocated address */
4775 switch (pdp_type_num)
4777 case 0x00: str = "Reserved, used in earlier version of this protocol"; break;
4778 case 0x01: str = "PDP-type PPP"; break;
4779 case 0x02: str = "non IP"; break;
4780 default: str = "reserved";
4783 else if (pdp_type_org == 1)
4785 /* IETF allocated address */
4786 switch (pdp_type_num)
4788 case 0x21: str = "IPv4 address"; break;
4789 case 0x57: str = "IPv6 address"; break;
4790 case 0x8d: str = "IPv4v6 address"; break;
4791 default: str = "Unknown, interpreted as IPv4 address";
4794 else if ((pdp_type_num == 0) && (pdp_type_org == 0x0f))
4797 str = "Not specified";
4799 proto_tree_add_uint_format_value(tree, hf_gsm_a_sm_pdp_type_number, tvb, curr_offset, 1, pdp_type_num, "%s (%u)", str, pdp_type_num);
4801 if ((len == 2) && ((pdp_type_num == 0x21) || (pdp_type_num == 0x57) || (pdp_type_num == 0x8d)))
4803 proto_tree_add_uint_format(tree, hf_gsm_a_sm_pdp_address, tvb, curr_offset, 1, pdp_type_num, "Dynamic addressing");
4805 return (curr_offset - offset);
4809 proto_tree_add_uint_format(tree, hf_gsm_a_sm_pdp_address, tvb, curr_offset, 1, 0, "No PDP address is included");
4811 return (curr_offset - offset);
4815 if (pdp_type_org == 1)
4816 switch (pdp_type_num)
4819 proto_tree_add_item(tree, hf_gsm_a_sm_ip6_address, tvb, curr_offset, 16, ENC_NA);
4824 proto_tree_add_item(tree, hf_gsm_a_sm_ip4_address, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
4826 proto_tree_add_item(tree, hf_gsm_a_sm_ip6_address, tvb, curr_offset, 16, ENC_NA);
4831 proto_tree_add_item(tree, hf_gsm_a_sm_ip4_address, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
4835 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data);
4837 return (curr_offset - offset);
4841 * [9] 10.5.6.5 Quality of service
4843 static const value_string gsm_a_sm_qos_delay_cls_vals[] = {
4844 { 0x00, "Subscribed delay class (in MS to network direction)" },
4845 { 0x01, "Delay class 1" },
4846 { 0x02, "Delay class 2" },
4847 { 0x03, "Delay class 3" },
4848 { 0x04, "Delay class 4 (best effort)" },
4849 { 0x07, "Reserved" },
4853 static const value_string gsm_a_sm_qos_reliability_vals[] = {
4854 { 0x00, "Subscribed reliability class (in MS to network direction)" },
4855 { 0x01, "Acknowledged GTP, LLC, and RLC; Protected data" },
4856 { 0x02, "Unacknowledged GTP, Ack LLC/RLC, Protected data" },
4857 { 0x03, "Unacknowledged GTP/LLC, Ack RLC, Protected data" },
4858 { 0x04, "Unacknowledged GTP/LLC/RLC, Protected data" },
4859 { 0x05, "Unacknowledged GTP/LLC/RLC, Unprotected data" },
4860 { 0x07, "Reserved" },
4863 /* Delivery of erroneous SDUs, octet 6 (see 3GPP TS 23.107) Bits 3 2 1 */
4864 const value_string gsm_a_sm_qos_del_of_err_sdu_vals[] = {
4865 { 0, "Subscribed delivery of erroneous SDUs/Reserved" },
4866 { 1, "No detect('-')" },
4867 { 2, "Erroneous SDUs are delivered('yes')" },
4868 { 3, "Erroneous SDUs are not delivered('No')" },
4873 /* Delivery order, octet 6 (see 3GPP TS 23.107) Bits 5 4 */
4874 const value_string gsm_a_sm_qos_del_order_vals[] = {
4875 { 0, "Subscribed delivery order/Reserved" },
4876 { 1, "With delivery order ('yes')" },
4877 { 2, "Without delivery order ('no')" },
4881 /* Traffic class, octet 6 (see 3GPP TS 23.107) Bits 8 7 6 */
4882 const value_string gsm_a_sm_qos_traffic_cls_vals[] = {
4883 { 0, "Subscribed traffic class/Reserved" },
4884 { 1, "Conversational class" },
4885 { 2, "Streaming class" },
4886 { 3, "Interactive class" },
4887 { 4, "Background class" },
4892 /* Residual Bit Error Rate (BER), octet 10 (see 3GPP TS 23.107) Bits 8 7 6 5 */
4893 const value_string gsm_a_sm_qos_ber_vals[] = {
4894 { 0, "Subscribed residual BER/Reserved" },
4908 /* SDU error ratio, octet 10 (see 3GPP TS 23.107) Bits 4 3 2 1 */
4909 const value_string gsm_a_sm_qos_sdu_err_rat_vals[] = {
4910 { 0, "Subscribed SDU error ratio/Reserved" },
4922 /* Traffic handling priority, octet 11 (see 3GPP TS 23.107) Bits 2 1 */
4923 const value_string gsm_a_sm_qos_traff_hdl_pri_vals[] = {
4924 { 0, "Subscribed traffic handling priority/Reserved" },
4925 { 1, "Priority level 1" },
4926 { 2, "Priority level 2" },
4927 { 3, "Priority level 3" },
4931 const range_string gsm_a_sm_qos_peak_thr_vals[] = {
4932 { 0x00, 0x00, "Subscribed peak throughput/reserved" },
4933 { 0x01, 0x01, "Up to 1 000 octet/s" },
4934 { 0x02, 0x02, "Up to 2 000 octet/s" },
4935 { 0x03, 0x03, "Up to 4 000 octet/s" },
4936 { 0x04, 0x04, "Up to 8 000 octet/s" },
4937 { 0x05, 0x05, "Up to 16 000 octet/s" },
4938 { 0x06, 0x06, "Up to 32 000 octet/s" },
4939 { 0x07, 0x07, "Up to 64 000 octet/s" },
4940 { 0x08, 0x08, "Up to 128 000 octet/s" },
4941 { 0x09, 0x09, "Up to 256 000 octet/s" },
4942 { 0x0a, 0x0e, "Interpreted as Up to 1 000 octet/s" },
4943 { 0x0f, 0x0f, "Reserved" },
4947 const range_string gsm_a_sm_qos_mean_thr_vals[] = {
4948 { 0x00, 0x00, "Subscribed peak throughput/reserved" },
4949 { 0x01, 0x01, "100 octet/h" },
4950 { 0x02, 0x02, "200 octet/h" },
4951 { 0x03, 0x03, "500 octet/h" },
4952 { 0x04, 0x04, "1 000 octet/h" },
4953 { 0x05, 0x05, "2 000 octet/h" },
4954 { 0x06, 0x06, "5 000 octet/h" },
4955 { 0x07, 0x07, "10 000 octet/h" },
4956 { 0x08, 0x08, "20 000 octet/h" },
4957 { 0x09, 0x09, "50 000 octet/h" },
4958 { 0x0a, 0x0a, "100 000 octet/h" },
4959 { 0x0b, 0x0b, "200 000 octet/h" },
4960 { 0x0c, 0x0c, "500 000 octet/h" },
4961 { 0x0d, 0x0d, "1 000 000 octet/h" },
4962 { 0x0e, 0x0e, "2 000 000 octet/h" },
4963 { 0x0f, 0x0f, "5 000 000 octet/h" },
4964 { 0x10, 0x10, "10 000 000 octet/h" },
4965 { 0x11, 0x11, "20 000 000 octet/h" },
4966 { 0x12, 0x12, "50 000 000 octet/h" },
4967 { 0x13, 0x1d, "Interpreted as Best effort" },
4968 { 0x1e, 0x1e, "Reserved" },
4969 { 0x1f, 0x1f, "Best effort" },
4973 const range_string gsm_a_sm_qos_prec_class_vals[] = {
4974 { 0x00, 0x00, "Subscribed precedence/reserved" },
4975 { 0x01, 0x01, "High priority" },
4976 { 0x02, 0x02, "Normal priority" },
4977 { 0x03, 0x03, "Low priority" },
4978 { 0x04, 0x06, "Interpreted as Normal priority" },
4979 { 0x07, 0x07, "Reserved" },
4983 const true_false_string gsm_a_sm_qos_signalling_ind_value = {
4984 "Optimised for signalling traffic",
4985 "Not optimised for signalling traffic"
4988 /* Helper function returning the main bitrates in kbps */
4990 qos_calc_bitrate(guint8 oct)
4995 return 64 + (oct-0x40) * 8;
4997 return 576 + (oct-0x80) * 64;
5000 /* Helper function returning the extended bitrates in kbps */
5002 qos_calc_ext_bitrate(guint8 oct)
5005 return 8600 + oct * 100;
5007 return 16000 + (oct-0x4a) * 1000;
5009 return 128000 + (oct - 0xba) * 2000;
5013 qos_calc_ext2_bitrate(guint8 oct)
5016 return (256 + oct * 4);
5018 return (500 + (oct-0x3d) * 10);
5020 return (1500 + (oct-0xa1) * 100);
5026 * 10.5.6.5 Quality of service
5029 de_sm_qos(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
5031 guint32 curr_offset;
5032 guchar oct, tmp_oct;
5036 curr_offset = offset;
5039 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset << 3), 2, ENC_BIG_ENDIAN);
5040 proto_tree_add_item(tree, hf_gsm_a_sm_qos_delay_cls, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5041 proto_tree_add_item(tree, hf_gsm_a_sm_qos_reliability_cls, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5045 proto_tree_add_item(tree, hf_gsm_a_sm_qos_peak_thr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5046 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset << 3) + 4, 1, ENC_BIG_ENDIAN);
5047 proto_tree_add_item(tree, hf_gsm_a_sm_qos_prec_class, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5051 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset << 3), 3, ENC_BIG_ENDIAN);
5052 proto_tree_add_item(tree, hf_gsm_a_sm_qos_mean_thr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5055 NO_MORE_DATA_CHECK(len);
5058 proto_tree_add_item(tree, hf_gsm_a_sm_qos_traffic_cls, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5059 proto_tree_add_item(tree, hf_gsm_a_sm_qos_del_order, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5060 proto_tree_add_item(tree, hf_gsm_a_sm_qos_del_of_err_sdu, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5063 NO_MORE_DATA_CHECK(len);
5066 oct = tvb_get_guint8(tvb, curr_offset);
5070 case 0x00: str = "Subscribed maximum SDU size/reserved"; break;
5071 case 0x97: str = "1502 octets"; break;
5072 case 0x98: str = "1510 octets"; break;
5073 case 0x99: str = "1520 octets"; break;
5074 case 0xff: str = "Reserved"; break;
5075 default: str = "Unspecified";
5078 if ((oct >= 1) && (oct <= 0x96))
5079 proto_tree_add_uint_format_value(tree, hf_gsm_a_sm_qos_maximum_sdu_size, tvb, curr_offset, 1, oct, "%u octets (%u)", oct*10, oct);
5081 proto_tree_add_uint_format_value(tree, hf_gsm_a_sm_qos_maximum_sdu_size, tvb, curr_offset, 1, oct, "%s (%u)", str, oct);
5085 NO_MORE_DATA_CHECK(len);
5088 oct = tvb_get_guint8(tvb, curr_offset);
5092 case 0x00: str = "Subscribed maximum bit rate for uplink/reserved"; break;
5093 case 0xff: str = "0 kbps"; break;
5094 default: str = wmem_strdup_printf(wmem_packet_scope(), "%u kbps", qos_calc_bitrate(oct));
5097 proto_tree_add_uint_format_value(tree, hf_gsm_a_sm_qos_max_bitrate_upl, tvb,
5098 curr_offset, 1, oct, "%s (%u)", str, oct);
5101 NO_MORE_DATA_CHECK(len);
5104 oct = tvb_get_guint8(tvb, curr_offset);
5108 case 0x00: str = "Subscribed maximum bit rate for downlink/reserved"; break;
5109 case 0xff: str = "0 kbps"; break;
5110 default: str = wmem_strdup_printf(wmem_packet_scope(), "%u kbps", qos_calc_bitrate(oct));
5113 proto_tree_add_uint_format_value(tree, hf_gsm_a_sm_qos_max_bitrate_downl, tvb,
5114 curr_offset, 1, oct, "%s (%u)", str, oct);
5117 NO_MORE_DATA_CHECK(len);
5120 proto_tree_add_item(tree, hf_gsm_a_sm_qos_ber, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5121 proto_tree_add_item(tree, hf_gsm_a_sm_qos_sdu_err_rat, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5124 NO_MORE_DATA_CHECK(len);
5127 oct = tvb_get_guint8(tvb, curr_offset);
5132 case 0x00: str = "Subscribed transfer delay/reserved"; break;
5133 case 0x3f: str = "Reserved"; break;
5135 if (tmp_oct <= 0x0f)
5136 temp32 = tmp_oct * 10;
5137 else if (tmp_oct <= 0x1f)
5138 temp32 = (tmp_oct - 0x10) * 50 + 200;
5140 temp32 = (tmp_oct - 0x20) * 100 + 1000;
5141 str = wmem_strdup_printf(wmem_packet_scope(), "%u ms", temp32);
5144 proto_tree_add_uint_format_value(tree, hf_gsm_a_sm_qos_trans_delay, tvb,
5145 curr_offset, 1, oct, "%s (%u)", str, tmp_oct);
5147 proto_tree_add_item(tree, hf_gsm_a_sm_qos_traff_hdl_pri, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5150 NO_MORE_DATA_CHECK(len);
5153 oct = tvb_get_guint8(tvb, curr_offset);
5157 case 0x00: str = "Subscribed guaranteed bit rate for uplink/reserved"; break;
5158 case 0xff: str = "0 kbps"; break;
5159 default: str = wmem_strdup_printf(wmem_packet_scope(), "%u kbps", qos_calc_bitrate(oct));
5162 proto_tree_add_uint_format_value(tree, hf_gsm_a_sm_qos_guar_bitrate_upl, tvb,
5163 curr_offset, 1, oct, "%s (%u)", str, oct);
5166 NO_MORE_DATA_CHECK(len);
5169 oct = tvb_get_guint8(tvb, curr_offset);
5173 case 0x00: str = "Subscribed guaranteed bit rate for downlink/reserved"; break;
5174 case 0xff: str = "0 kbps"; break;
5175 default: str = wmem_strdup_printf(wmem_packet_scope(), "%u kbps", qos_calc_bitrate(oct));
5178 proto_tree_add_uint_format_value(tree, hf_gsm_a_sm_qos_guar_bitrate_downl, tvb,
5179 curr_offset, 1, oct, "%s (%u)", str, oct);
5182 NO_MORE_DATA_CHECK(len);
5185 oct = tvb_get_guint8(tvb, curr_offset);
5186 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset << 3), 3, ENC_BIG_ENDIAN);
5187 proto_tree_add_item(tree, hf_gsm_a_sm_qos_signalling_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5190 if (tmp_oct == 0x01)
5195 proto_tree_add_uint_format_value(tree, hf_gsm_a_sm_qos_source_stat_desc, tvb,
5196 curr_offset, 1, oct, "%s (%u)", str, tmp_oct);
5199 NO_MORE_DATA_CHECK(len);
5202 oct = tvb_get_guint8(tvb, curr_offset);
5205 str = "Use the value indicated by the Maximum bit rate for downlink";
5208 temp32 = qos_calc_ext_bitrate(oct);
5209 if (temp32 % 1000 == 0)
5210 str = wmem_strdup_printf(wmem_packet_scope(), "%u Mbps", temp32 / 1000);
5212 str = wmem_strdup_printf(wmem_packet_scope(), "%u kbps", temp32);
5214 proto_tree_add_uint_format_value(tree, hf_gsm_a_sm_qos_max_bitrate_downl_ext, tvb,
5215 curr_offset, 1, oct, "%s (%u)", str, oct);
5218 NO_MORE_DATA_CHECK(len);
5221 oct = tvb_get_guint8(tvb, curr_offset);
5224 str = "Use the value indicated by the Guaranteed bit rate for downlink";
5227 temp32 = qos_calc_ext_bitrate(oct);
5228 if (temp32 % 1000 == 0)
5229 str = wmem_strdup_printf(wmem_packet_scope(), "%u Mbps", temp32 / 1000);
5231 str = wmem_strdup_printf(wmem_packet_scope(), "%u kbps", temp32);
5233 proto_tree_add_uint_format_value(tree, hf_gsm_a_sm_qos_guar_bitrate_downl_ext, tvb,
5234 curr_offset, 1, oct, "%s (%u)", str, oct);
5237 NO_MORE_DATA_CHECK(len);
5239 /* Maximum bit rate for uplink (extended) Octet 17 */
5240 oct = tvb_get_guint8(tvb, curr_offset);
5243 str = "Use the value indicated by the Maximum bit rate for uplink";
5246 temp32 = qos_calc_ext_bitrate(oct);
5247 if (temp32 % 1000 == 0)
5248 str = wmem_strdup_printf(wmem_packet_scope(), "%u Mbps", temp32 / 1000);
5250 str = wmem_strdup_printf(wmem_packet_scope(), "%u kbps", temp32);
5252 proto_tree_add_uint_format_value(tree, hf_gsm_a_sm_qos_max_bitrate_upl_ext, tvb,
5253 curr_offset, 1, oct, "%s (%u)", str, oct);
5256 NO_MORE_DATA_CHECK(len);
5258 /* Guaranteed bit rate for uplink (extended) Octet 18 */
5259 oct = tvb_get_guint8(tvb, curr_offset);
5262 str = "Use the value indicated by the Guaranteed bit rate for uplink";
5265 temp32 = qos_calc_ext_bitrate(oct);
5266 if (temp32 % 1000 == 0)
5267 str = wmem_strdup_printf(wmem_packet_scope(), "%u Mbps", temp32 / 1000);
5269 str = wmem_strdup_printf(wmem_packet_scope(), "%u kbps", temp32);
5271 proto_tree_add_uint_format_value(tree, hf_gsm_a_sm_qos_guar_bitrate_upl_ext, tvb,
5272 curr_offset, 1, oct, "%s (%u)", str, oct);
5275 NO_MORE_DATA_CHECK(len);
5277 /* Maximum bit rate for downlink (extended-2) Octet 19 */
5278 oct = tvb_get_guint8(tvb, curr_offset);
5281 str = "Use the value indicated by the Maximum bit rate for downlink";
5284 temp32 = qos_calc_ext2_bitrate(oct);
5285 str = wmem_strdup_printf(wmem_packet_scope(), "%u Mbps", temp32);
5287 proto_tree_add_uint_format_value(tree, hf_gsm_a_sm_qos_max_bitrate_downl_ext2, tvb,
5288 curr_offset, 1, oct, "%s (%u)", str, oct);
5291 NO_MORE_DATA_CHECK(len);
5293 /* Guaranteed bit rate for downlink (extended-2) Octet 20 */
5294 oct = tvb_get_guint8(tvb, curr_offset);
5297 str = "Use the value indicated by the Guaranteed bit rate for downlink";
5300 temp32 = qos_calc_ext2_bitrate(oct);
5301 str = wmem_strdup_printf(wmem_packet_scope(), "%u Mbps", temp32);
5303 proto_tree_add_uint_format_value(tree, hf_gsm_a_sm_qos_guar_bitrate_downl_ext2, tvb,
5304 curr_offset, 1, oct, "%s (%u)", str, oct);
5307 NO_MORE_DATA_CHECK(len);
5309 /* Maximum bit rate for uplink (extended-2) Octet 21 */
5310 oct = tvb_get_guint8(tvb, curr_offset);
5313 str = "Use the value indicated by the Maximum bit rate for uplink";
5316 temp32 = qos_calc_ext2_bitrate(oct);
5317 str = wmem_strdup_printf(wmem_packet_scope(), "%u Mbps", temp32);
5319 proto_tree_add_uint_format_value(tree, hf_gsm_a_sm_qos_max_bitrate_upl_ext2, tvb,
5320 curr_offset, 1, oct, "%s (%u)", str, oct);
5323 NO_MORE_DATA_CHECK(len);
5325 /* Guaranteed bit rate for uplink (extended-2) Octet 22 */
5326 oct = tvb_get_guint8(tvb, curr_offset);
5329 str = "Use the value indicated by the Guaranteed bit rate for uplink";
5332 temp32 = qos_calc_ext2_bitrate(oct);
5333 str = wmem_strdup_printf(wmem_packet_scope(), "%u Mbps", temp32);
5335 proto_tree_add_uint_format_value(tree, hf_gsm_a_sm_qos_guar_bitrate_upl_ext2, tvb,
5336 curr_offset, 1, oct, "%s (%u)", str, oct);
5340 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data);
5342 return (curr_offset - offset);
5346 * [12] 10.5.6.5a Re-attempt indicator
5348 const true_false_string gsm_a_gm_eplmnc_value = {
5349 "MS is not allowed to re-attempt the procedure in an equivalent PLMN",
5350 "MS is allowed to re-attempt the procedure in an equivalent PLMN"
5353 const true_false_string gsm_a_gm_ratc_value = {
5354 "MS is not allowed to re-attempt the procedure in S1 mode",
5355 "MS is allowed to re-attempt the procedure in S1 mode"
5359 de_sm_re_attempt_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
5361 guint32 curr_offset;
5363 curr_offset = offset;
5365 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, offset << 3, 6, ENC_BIG_ENDIAN);
5366 proto_tree_add_item(tree, hf_gsm_a_sm_eplmnc, tvb, offset, 1, ENC_BIG_ENDIAN);
5367 proto_tree_add_item(tree, hf_gsm_a_sm_ratc, tvb, offset, 1, ENC_BIG_ENDIAN);
5370 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data);
5376 * [15] 10.5.6.5b Extended quality of service
5379 de_sm_ext_qos(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
5381 guint32 curr_offset;
5383 curr_offset = offset;
5385 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data);
5391 * [9] 10.5.6.6 SM cause
5393 static const value_string gsm_a_sm_cause_vals[] = {
5394 { 0x08, "Operator Determined Barring" },
5395 { 0x18, "MBMS bearer capabilities insufficient for the service" },
5396 { 0x19, "LLC or SNDCP failure(A/Gb only)" },
5397 { 0x1a, "Insufficient resources" },
5398 { 0x1b, "Missing or unknown APN" },
5399 { 0x1c, "Unknown PDP address or PDP type" },
5400 { 0x1d, "User authentication failed" },
5401 { 0x1e, "Activation rejected by GGSN, Serving GW or PDN GW" },
5402 { 0x1f, "Activation rejected, unspecified" },
5403 { 0x20, "Service option not supported" },
5404 { 0x21, "Requested service option not subscribed" },
5405 { 0x22, "Service option temporarily out of order" },
5406 { 0x23, "NSAPI already used (not sent)" },
5407 { 0x24, "Regular deactivation" },
5408 { 0x25, "QoS not accepted" },
5409 { 0x26, "Network failure" },
5410 { 0x27, "Reactivation requested" },
5411 { 0x28, "Feature not supported" },
5412 { 0x29, "Semantic error in the TFT operation" },
5413 { 0x2a, "Syntactical error in the TFT operation" },
5414 { 0x2b, "Unknown PDP context" },
5415 { 0x2c, "Semantic errors in packet filter(s)" },
5416 { 0x2d, "Syntactical errors in packet filter(s)" },
5417 { 0x2e, "PDP context without TFT already activated" },
5418 { 0x2f, "Multicast group membership time-out" },
5419 { 0x30, "Request rejected, BCM violation" },
5420 { 0x32, "PDP type IPv4 only allowed" },
5421 { 0x33, "PDP type IPv6 only allowed" },
5422 { 0x34, "Single address bearers only allowed" },
5423 { 0x38, "Collision with network initiated request" },
5424 { 0x39, "PDP type IPv4v6 only allowed" },
5425 { 0x3a, "PDP type non IP only allowed" },
5426 { 0x3c, "Bearer handling not supported" },
5427 { 0x41, "Maximum number of PDP contexts reached" },
5428 { 0x42, "Requested APN not supported in current RAT and PLMN combination" },
5429 { 0x51, "Invalid transaction identifier value" },
5430 { 0x5f, "Semantically incorrect message" },
5431 { 0x60, "Invalid mandatory information" },
5432 { 0x61, "Message type non-existent or not implemented" },
5433 { 0x62, "Message type not compatible with the protocol state" },
5434 { 0x63, "Information element non-existent or not implemented" },
5435 { 0x64, "Conditional IE error" },
5436 { 0x65, "Message not compatible with the protocol state" },
5437 { 0x6f, "Protocol error, unspecified" },
5438 { 0x70, "APN restriction value incompatible with active PDP context" },
5439 { 0x71, "Multiple accesses to a PDN connection not allowed" },
5442 static value_string_ext gsm_a_sm_cause_vals_ext = VALUE_STRING_EXT_INIT(gsm_a_sm_cause_vals);
5445 de_sm_cause(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
5450 oct = tvb_get_guint8(tvb, offset);
5452 /* SM Cause can be sent in both directions */
5453 str = val_to_str_ext_const(oct, &gsm_a_sm_cause_vals_ext,
5454 "Protocol error, unspecified / Service option temporarily out of order");
5456 proto_tree_add_uint_format_value(tree, hf_gsm_a_sm_cause, tvb,
5457 offset, 1, oct, "%s (%u)", str, oct);
5459 /* no length check possible */
5464 * [9] 10.5.6.6a SM cause 2
5467 de_sm_cause_2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
5472 oct = tvb_get_guint8(tvb, offset);
5474 /* SM Cause 2 is sent only in the Network-to-MS direction */
5475 str = val_to_str_ext_const(oct, &gsm_a_sm_cause_vals_ext,
5476 "Service option temporarily out of order");
5478 proto_tree_add_uint_format_value(tree, hf_gsm_a_sm_cause_2, tvb,
5479 offset, 1, oct, "%s (%u)", str, oct);
5481 /* no length check possible */
5488 static const true_false_string gsm_a_sm_ti_flag_vals = {
5489 "The message is sent to the side that originates the TI",
5490 "The message is sent from the side that originates the TI"
5494 de_sm_linked_ti(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
5496 guint32 curr_offset;
5501 curr_offset = offset;
5503 oct = tvb_get_guint8(tvb, curr_offset);
5505 proto_tree_add_item(tree, hf_gsm_a_sm_ti_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
5507 /* The TI value and the TI flag occupy bits 5 - 7 and bit 8 of the first octet respectively.
5508 * The extended TI shall not be used unless TI values of 7 or greater are needed.
5509 * Where the extended TI is used, the TI IE includes a second octet. The TI value in the first octet is ignored, and the TI
5510 * value is encoded in bits 7-1 of the second octet.
5516 oct = tvb_get_guint8(tvb, curr_offset);
5518 proto_tree_add_uint(tree, hf_gsm_a_gm_ti_value, tvb, curr_offset, 1, oct&0x7f);
5520 proto_tree_add_item(tree, hf_gsm_a_sm_ext, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5526 proto_tree_add_uint(tree, hf_gsm_a_gm_ti_value, tvb, curr_offset, 1, (oct>>4)&7);
5531 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data);
5533 return (curr_offset - offset);
5537 * [9] 10.5.6.9 LLC service access point identifier
5539 static const value_string gsm_a_sm_llc_sapi_vals[] = {
5540 { 0, "LLC SAPI not assigned" },
5549 de_sm_sapi(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
5551 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, offset << 3, 4, ENC_BIG_ENDIAN);
5552 proto_tree_add_item(tree, hf_gsm_a_sm_llc_sapi, tvb, offset, 1, ENC_BIG_ENDIAN);
5554 /* no length check possible */
5559 * [9] 10.5.6.10 Tear down indicator
5561 const true_false_string gsm_a_sm_tdi_value = {
5562 "Tear down requested",
5563 "Tear down not requested"
5567 de_sm_tear_down(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
5569 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (offset << 3) + 4, 3, ENC_BIG_ENDIAN);
5570 proto_tree_add_item(tree, hf_gsm_a_sm_tdi, tvb, offset, 1, ENC_BIG_ENDIAN);
5572 /* no length check possible */
5577 * [9] 10.5.6.11 Packet Flow Identifier
5579 static const range_string gsm_a_sm_packet_flow_id_vals[] = {
5580 { 0x00, 0x00, "Best Effort"},
5581 { 0x01, 0x01, "Signalling"},
5582 { 0x02, 0x02, "SMS"},
5583 { 0x03, 0x03, "TOM8"},
5584 { 0x04, 0x07, "Reserved"},
5585 { 0x08, 0x7f, "Dynamically assigned"},
5586 { 0x00, 0x00, NULL }
5590 de_sm_pflow_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
5592 guint32 curr_offset;
5595 curr_offset = offset;
5596 value = tvb_get_guint8(tvb, curr_offset);
5597 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, curr_offset << 3, 1, ENC_BIG_ENDIAN);
5598 proto_tree_add_item(tree, hf_gsm_a_sm_packet_flow_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5602 g_snprintf(add_string, string_len, " - %s", rval_to_str(value, gsm_a_sm_packet_flow_id_vals, "Unknown"));
5604 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data);
5606 return (curr_offset - offset);
5610 * [7] 10.5.6.12 TFT - Traffic Flow Template
5612 /* TFT operation code (octet 3) */
5613 static const value_string gsm_a_sm_tft_op_code_vals[] = {
5614 { 0, "Ignore this IE"},
5615 { 1, "Create new TFT"},
5616 { 2, "Delete existing TFT"},
5617 { 3, "Add packet filters to existing TFT"},
5618 { 4, "Replace packet filters in existing TFT"},
5619 { 5, "Delete packet filters from existing TFT"},
5620 { 6, "No TFT operation"},
5625 static const true_false_string gsm_a_sm_tft_e_bit = {
5626 "Parameters list is included",
5627 "Parameters list is not included"
5630 static const value_string gsm_a_sm_tft_pkt_flt_dir_vals[] = {
5631 { 0, "Pre Rel-7 TFT filter"},
5632 { 1, "Downlink only"},
5633 { 2, "Uplink only"},
5634 { 3, "Bidirectional"},
5638 static const value_string gsm_a_sm_tft_param_id_vals[] = {
5639 { 1, "Authorization Token"},
5640 { 2, "Flow Identifier"},
5641 { 3, "Packet Filter Identifier"},
5645 static const value_string packet_filter_component_type_vals[] = {
5646 {0x10, "IPv4 remote address type" },
5647 {0x11, "IPv4 local address type"},
5648 {0x20, "IPv6 remote address type"},
5649 {0x21, "IPv6 remote address/prefix length type"},
5650 {0x23, "IPv6 local address/prefix length type"},
5651 {0x30, "Protocol identifier/Next header type"},
5652 {0x40, "Single local port type"},
5653 {0x41, "Local port range type"},
5654 {0x50, "Single remote port type"},
5655 {0x51, "Remote port range type"},
5656 {0x60, "Security parameter index type"},
5657 {0x70, "Type of service/Traffic class type"},
5658 {0x80, "Flow label type"},
5663 de_sm_tflow_temp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
5665 guint32 curr_offset, prev_offset;
5668 guint8 pkt_fil_count;
5674 gint pack_component_type;
5678 curr_offset = offset;
5681 * parse first octet. It contain TFT operation code, E bit and Number of packet filters
5683 oct = tvb_get_guint8(tvb, curr_offset);
5686 pkt_fil_count = oct&0x0f;
5689 proto_tree_add_item(tree, hf_gsm_a_sm_tft_op_code, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5690 proto_tree_add_item(tree, hf_gsm_a_sm_tft_e_bit, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5691 proto_tree_add_item(tree, hf_gsm_a_sm_tft_pkt_flt, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5696 /* Packet filter list dissect */
5699 if (op_code == 2) /* delete TFT contains no packet filters. so we will jump over it */
5700 count = pkt_fil_count;
5701 while (count < pkt_fil_count)
5704 proto_tree *tf_tree;
5705 prev_offset = curr_offset;
5706 tf_pf = proto_tree_add_uint(tree, hf_gsm_a_sm_tft_packet_filter, tvb, curr_offset, 1, count); /* 0-> 7 */
5708 tf_tree = proto_item_add_subtree(tf_pf, ett_sm_tft);
5710 if ((curr_offset-offset)<1) {
5711 proto_tree_add_expert(tf_tree, pinfo, &ei_gsm_a_gm_not_enough_data, tvb, curr_offset, 1);
5715 if (op_code == 5) /* Delete packet filters from existing TFT - just a list of identifiers */
5717 proto_tree_add_bits_item(tf_tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3), 4, ENC_BIG_ENDIAN);
5718 oct = tvb_get_guint8(tvb, curr_offset) & 0x0f;
5719 proto_tree_add_uint_format_value(tf_tree, hf_gsm_a_sm_tft_pkt_flt_id, tvb, curr_offset, 1, oct, "%d (%d)", oct+1, oct);
5724 else /* create new, Add packet filters or Replace packet filters */
5726 proto_tree_add_bits_item(tf_tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3), 2, ENC_BIG_ENDIAN);
5727 proto_tree_add_item(tf_tree, hf_gsm_a_sm_tft_pkt_flt_dir, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5728 oct = tvb_get_guint8(tvb, curr_offset) & 0x0f;
5729 proto_tree_add_uint_format_value(tf_tree, hf_gsm_a_sm_tft_pkt_flt_id, tvb, curr_offset, 1, oct, "%d (%d)", oct+1, oct);
5733 if ((curr_offset-offset) < 1) {
5734 proto_tree_add_expert(tf_tree, pinfo, &ei_gsm_a_gm_not_enough_data, tvb, curr_offset, 1);
5737 proto_tree_add_item(tf_tree, hf_gsm_a_sm_tft_packet_evaluation_precedence, tvb, curr_offset, 1, ENC_NA);
5741 if ((curr_offset-offset)<1) {
5742 proto_tree_add_expert(tf_tree, pinfo, &ei_gsm_a_gm_not_enough_data, tvb, curr_offset, 1);
5745 pf_length = tvb_get_guint8(tvb, curr_offset);
5746 proto_tree_add_item(tf_tree, hf_gsm_a_sm_tft_packet_filter_length, tvb, curr_offset, 1, ENC_NA);
5750 /* New tree for component */
5752 /* Dissect Packet filter Component */
5753 /* while (filter_len > 1) */
5754 /* packet filter component type identifier: */
5756 while (pf_length > 0) {
5758 proto_tree *comp_tree;
5759 if ((curr_offset-offset) < 1) {
5760 proto_tree_add_expert(tf_tree, pinfo, &ei_gsm_a_gm_not_enough_data, tvb, curr_offset, 1);
5763 pack_component_type = tvb_get_guint8(tvb, curr_offset);
5764 tf = proto_tree_add_item(tf_tree, hf_gsm_a_sm_tft_packet_filter_component_type_id, tvb, curr_offset, 1, ENC_NA);
5765 comp_tree = proto_item_add_subtree(tf, ett_sm_tft);
5771 switch (pack_component_type) {
5774 proto_tree_add_item(comp_tree, hf_gsm_a_sm_ip4_address, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
5777 proto_tree_add_item(comp_tree, hf_gsm_a_sm_ip4_mask, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
5784 proto_tree_add_item(comp_tree, hf_gsm_a_sm_ip4_address, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
5787 proto_tree_add_item(comp_tree, hf_gsm_a_sm_ip4_mask, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
5794 proto_tree_add_item(comp_tree, hf_gsm_a_sm_ip6_address, tvb, curr_offset, 16, ENC_NA);
5797 proto_tree_add_item(comp_tree, hf_gsm_a_sm_ip6_mask, tvb, curr_offset, 16, ENC_NA);
5804 proto_tree_add_item(comp_tree, hf_gsm_a_sm_ip6_address, tvb, curr_offset, 16, ENC_NA);
5807 proto_tree_add_item(comp_tree, hf_gsm_a_sm_ip6_prefix_length, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5814 proto_tree_add_item(comp_tree, hf_gsm_a_sm_ip6_address, tvb, curr_offset, 16, ENC_NA);
5817 proto_tree_add_item(comp_tree, hf_gsm_a_sm_ip6_prefix_length, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5824 proto_tree_add_item(comp_tree, hf_gsm_a_sm_tft_protocol_header, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5831 proto_tree_add_item(comp_tree, hf_gsm_a_sm_tft_port, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
5838 proto_tree_add_item(comp_tree, hf_gsm_a_sm_tft_port_low, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
5840 proto_tree_add_item(comp_tree, hf_gsm_a_sm_tft_port_high, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
5847 proto_tree_add_item(comp_tree, hf_gsm_a_sm_tft_port, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
5854 proto_tree_add_item(comp_tree, hf_gsm_a_sm_tft_port_low, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
5856 proto_tree_add_item(comp_tree, hf_gsm_a_sm_tft_port_high, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
5863 proto_tree_add_item(comp_tree, hf_gsm_a_sm_tft_security, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
5871 proto_tree_add_item(comp_tree, hf_gsm_a_sm_tft_traffic_class, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5873 proto_tree_add_item(comp_tree, hf_gsm_a_sm_tft_traffic_mask, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5880 proto_tree_add_bits_item(comp_tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3), 4, ENC_BIG_ENDIAN);
5881 proto_tree_add_item(comp_tree, hf_gsm_a_sm_tft_flow_label_type, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
5888 curr_offset += pf_length;
5889 curr_len -= pf_length;
5895 proto_item_set_len(tf_pf, curr_offset - prev_offset);
5898 /* The parameters list contains a variable number of parameters that might need to be
5899 * transferred in addition to the packet filters. If the parameters list is included, the E
5900 * bit is set to 1; otherwise, the E bit is set to 0.
5902 if ((e_bit == 1) && curr_len) {
5905 proto_tree *tf_tree;
5906 pf_length = tvb_get_guint8(tvb, curr_offset+1);
5907 tf_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, pf_length+2, ett_sm_tft, NULL, "Parameter %d", count);
5908 param = tvb_get_guint8(tvb, curr_offset);
5909 proto_tree_add_item(tf_tree, hf_gsm_a_sm_tft_param_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5914 proto_tree_add_item(tf_tree, hf_gsm_a_sm_tft_authorization_token_value, tvb, curr_offset, pf_length, ENC_NA);
5918 proto_tree_add_item(tf_tree, hf_gsm_a_sm_tft_media_component_number_value, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
5919 proto_tree_add_item(tf_tree, hf_gsm_a_sm_tft_ip_flow_number, tvb, curr_offset+2, 2, ENC_BIG_ENDIAN);
5923 for (i=0; i<pf_length; i++) {
5924 oct = tvb_get_guint8(tvb, curr_offset+i) & 0x0f;
5925 proto_tree_add_uint_format(tf_tree, hf_gsm_a_sm_tft_packet_filter_identifier, tvb, curr_offset+i, 1, oct+1, "Packet filter identifier %d: %d (%d)", i, oct+1, oct);
5930 proto_tree_add_item(tf_tree, hf_gsm_a_sm_tft_parameter_content, tvb, curr_offset, pf_length, ENC_NA);
5933 curr_offset += pf_length;
5934 curr_len -= pf_length;
5939 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data);
5945 * [9] 10.5.6.13 Temporary Mobile Group Identity (TMGI)
5948 de_sm_tmgi(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
5950 guint32 curr_offset;
5952 curr_offset = offset;
5954 proto_tree_add_item(tree, hf_gsm_a_sm_tmgi, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
5957 NO_MORE_DATA_CHECK(len);
5958 curr_offset = dissect_e212_mcc_mnc(tvb, pinfo, tree, curr_offset, E212_NONE, TRUE);
5960 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data);
5962 return (curr_offset - offset);
5966 * [9] 10.5.6.14 MBMS bearer capabilities
5969 de_sm_mbms_bearer_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
5971 guint32 curr_offset, temp32;
5975 curr_offset = offset;
5977 oct = tvb_get_guint8(tvb, curr_offset);
5981 case 0x00: str = "Subscribed maximum bit rate for downlink/reserved"; break;
5982 case 0xff: str = "0 kbps"; break;
5983 default: str = wmem_strdup_printf(wmem_packet_scope(), "%u kbps", qos_calc_bitrate(oct));
5986 proto_tree_add_uint_format_value(tree, hf_gsm_a_sm_qos_max_bitrate_downl, tvb,
5987 curr_offset, 1, oct, "%s (%u)", str, oct);
5990 NO_MORE_DATA_CHECK(len);
5992 oct = tvb_get_guint8(tvb, curr_offset);
5995 str = "Use the value indicated by the Maximum bit rate for downlink";
5998 temp32 = qos_calc_ext_bitrate(oct);
5999 if (temp32 % 1000 == 0)
6000 str = wmem_strdup_printf(wmem_packet_scope(), "%u Mbps", temp32 / 1000);
6002 str = wmem_strdup_printf(wmem_packet_scope(), "%u kbps", temp32);
6004 proto_tree_add_uint_format_value(tree, hf_gsm_a_sm_qos_max_bitrate_downl_ext, tvb,
6005 curr_offset, 1, oct, "%s (%u)", str, oct);
6009 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data);
6011 return (curr_offset - offset);
6015 * [9] 10.5.6.15 MBMS protocol configuration options
6018 de_sm_mbms_prot_conf_opt(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
6020 guint32 curr_offset;
6022 curr_offset = offset;
6023 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3), 8, ENC_BIG_ENDIAN);
6026 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data);
6028 return (curr_offset - offset);
6032 * [9] 10.5.6.16 Enhanced network service access point identifier
6035 de_sm_enh_nsapi(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
6040 oct = tvb_get_guint8(tvb, offset);
6044 else if (oct < 0xff)
6045 str = wmem_strdup_printf(wmem_packet_scope(), "NSAPI %u for Multimedia Broadcast/Multicast Service (MBMS) Multicast mode", oct);
6047 str = "Reserved for use by lower layers in the p2p radio bearer allocation message for MBMS Broadcast mode";
6050 proto_tree_add_uint_format_value(tree, hf_gsm_a_sm_enh_nsapi, tvb,
6051 offset, 1, oct, "%s (%u)", str, oct);
6053 /* no length check possible */
6058 * [9] 10.5.6.17 Request type
6060 static const value_string gsm_a_sm_req_type_vals[] = {
6061 { 0x01, "Initial request" },
6062 { 0x02, "Handover" },
6063 { 0x03, "Unused. If received, the network shall interpret this as \"Initial request\"." },
6064 { 0x04, "Emergency" },
6065 { 0x06, "Handover of emergency bearer services" },
6070 de_sm_req_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
6072 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (offset<<3) + 4, 1, ENC_BIG_ENDIAN);
6073 proto_tree_add_item(tree, hf_gsm_a_sm_req_type, tvb, offset, 1, ENC_BIG_ENDIAN);
6075 /* no length check possible */
6080 * [9] 10.5.6.18 Notification indicator
6082 static const value_string gsm_a_sm_notif_ind_vals[] = {
6084 { 0x1, "SRVCC handover cancelled, IMS session re-establishment required"},
6089 de_sm_notif_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
6091 guint32 curr_offset;
6093 curr_offset = offset;
6095 proto_tree_add_item(tree, hf_gsm_a_sm_notif_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6101 * [10] 10.5.6.19 Connectivity type
6103 static const range_string gsm_a_sm_connectivity_type_vals[] = {
6104 { 0x0, 0x0, "The PDN connection type is not indicated"},
6105 { 0x1, 0x1, "The PDN connection is considered a LIPA PDN connection"},
6106 { 0x2, 0xF, "The PDN connection type is not indicated"},
6111 de_sm_connectivity_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
6113 proto_tree_add_item(tree, hf_gsm_a_sm_connectivity_type, tvb, offset, 1, ENC_BIG_ENDIAN);
6119 * [12] 10.5.6.20 WLAN offload acceptability
6121 static const true_false_string gsm_a_sm_wlan_utran_offload_accept_value = {
6122 "Offloading the traffic of the PDN connection via a WLAN when in Iu mode is acceptable",
6123 "Offloading the traffic of the PDN connection via a WLAN when in Iu mode is not acceptable"
6126 static const true_false_string gsm_a_sm_wlan_eutran_offload_accept_value = {
6127 "Offloading the traffic of the PDN connection via a WLAN when in S1 mode is acceptable",
6128 "Offloading the traffic of the PDN connection via a WLAN when in S1 mode is not acceptable"
6132 de_sm_wlan_offload_accept(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
6134 proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (offset<<3)+4, 2, ENC_BIG_ENDIAN);
6135 proto_tree_add_bits_item(tree, hf_gsm_a_sm_wlan_utran_offload_accept, tvb, (offset<<3)+6, 1, ENC_BIG_ENDIAN);
6136 proto_tree_add_bits_item(tree, hf_gsm_a_sm_wlan_eutran_offload_accept, tvb, (offset<<3)+7, 1, ENC_BIG_ENDIAN);
6142 * [13] 10.5.6.21 NBIFOM container
6145 de_sm_nbifom_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
6147 if (nbifom_handle) {
6148 tvbuff_t *nbifom_tvb = tvb_new_subset_length(tvb, offset, len);
6150 call_dissector(nbifom_handle, nbifom_tvb, pinfo, tree);
6152 proto_tree_add_item(tree, hf_gsm_a_sm_nbifom_cont, tvb, offset, len, ENC_NA);
6158 guint16 (*gm_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string, int string_len) = {
6159 /* GPRS Mobility Management Information Elements 10.5.5 */
6160 de_gmm_add_upd_type, /* Additional Update Type */
6161 de_gmm_attach_res, /* Attach Result */
6162 de_gmm_attach_type, /* Attach Type */
6163 de_gmm_ciph_alg, /* Ciphering Algorithm */
6164 de_gmm_integ_alg, /* Integrity Algorithm */
6165 de_gmm_tmsi_stat, /* TMSI Status */
6166 de_gmm_detach_type, /* Detach Type */
6167 de_gmm_drx_param, /* DRX Parameter */
6168 de_gmm_ftostby, /* Force to Standby */
6169 de_gmm_ftostby_h, /* Force to Standby - Info is in the high nibble */
6170 de_gmm_ptmsi_sig, /* P-TMSI Signature */
6171 de_gmm_ptmsi_sig2, /* P-TMSI Signature 2 */
6172 de_gmm_ident_type2, /* Identity Type 2 */
6173 de_gmm_imeisv_req, /* IMEISV Request */
6174 de_gmm_rec_npdu_lst, /* Receive N-PDU Numbers List */
6175 de_gmm_ms_net_cap, /* MS Network Capability */
6176 de_gmm_ms_radio_acc_cap, /* MS Radio Access Capability */
6177 de_gmm_cause, /* GMM Cause */
6178 de_gmm_rai, /* Routing Area Identification */
6179 de_gmm_rai2, /* Routing Area Identification 2 */
6180 de_gmm_update_res, /* Update Result */
6181 de_gmm_update_type, /* Update Type */
6182 de_gmm_ac_ref_nr, /* A&C Reference Number */
6183 de_gmm_ac_ref_nr_h, /* A&C Reference Number - Info is in the high nibble */
6184 de_gmm_service_type, /* Service Type */
6185 NULL /* no associated data */, /* Cell Notification */
6186 de_gmm_ps_lcs_cap, /* PS LCS Capability */
6187 de_gmm_net_feat_supp, /* Network Feature Support */
6188 de_gmm_add_net_feat_supp, /* Network Feature Support */
6189 de_gmm_rat_info_container, /* Inter RAT information container */
6190 de_gmm_req_ms_info, /* Requested MS information */
6191 NULL, /* UE network capability */
6192 de_gmm_eutran_irat_info_container, /* E-UTRAN inter RAT information container */
6193 de_gmm_voice_domain_pref, /* Voice domain preference and UE's usage setting */
6194 de_gmm_ptmsi_type, /* P-TMSI type */
6195 de_gmm_lai_2, /* Location Area Identification 2 */
6196 de_gmm_net_res_id_cont, /* Network resource identifier container */
6197 de_gmm_ext_drx_params, /* Extended DRX parameters */
6198 de_gmm_mac, /* Message authentication code */
6199 de_gmm_up_integ_ind, /* User Plane integrity indicator */
6200 de_gmm_dcn_id, /* DCN-ID */
6201 de_gmm_plmn_id_cn_operator, /* PLMN identity of the CN operator */
6202 de_gmm_non_3gpp_nw_prov_pol, /* Non-3GPP NW provided policies */
6203 /* Session Management Information Elements 10.5.6 */
6204 de_sm_apn, /* Access Point Name */
6205 de_sm_nsapi, /* Network Service Access Point Identifier */
6206 de_sm_pco, /* Protocol Configuration Options */
6207 de_sm_pco, /* Extended Protocol Configuration Options */
6208 de_sm_pdp_addr, /* Packet Data Protocol Address */
6209 de_sm_qos, /* Quality Of Service */
6210 de_sm_re_attempt_ind, /* Re-attempt indicator */
6211 de_sm_ext_qos, /* Extended quality of service */
6212 de_sm_cause, /* SM Cause */
6213 de_sm_cause_2, /* SM Cause 2 */
6214 de_sm_linked_ti, /* Linked TI */
6215 de_sm_sapi, /* LLC Service Access Point Identifier */
6216 de_sm_tear_down, /* Tear Down Indicator */
6217 de_sm_pflow_id, /* Packet Flow Identifier */
6218 de_sm_tflow_temp, /* Traffic Flow Template */
6219 de_sm_tmgi, /* Temporary Mobile Group Identity (TMGI) */
6220 de_sm_mbms_bearer_cap, /* MBMS bearer capabilities */
6221 de_sm_mbms_prot_conf_opt, /* MBMS protocol configuration options */
6222 de_sm_enh_nsapi, /* Enhanced network service access point identifier */
6223 de_sm_req_type, /* Request type */
6224 de_sm_notif_ind, /* Notification indicator */
6225 de_sm_connectivity_type, /* Connectivity type */
6226 de_sm_wlan_offload_accept, /* WLAN offload acceptability */
6227 de_sm_nbifom_cont, /* NBIFOM container */
6228 /* GPRS Common Information Elements 10.5.7 */
6229 de_gc_context_stat, /* PDP Context Status */
6230 de_gc_radio_prio, /* Radio Priority */
6231 de_gc_timer, /* GPRS Timer */
6232 de_gc_timer2, /* GPRS Timer 2 */
6233 de_gc_timer3, /* GPRS Timer 3 */
6234 de_gc_radio_prio2, /* Radio Priority 2 */
6235 de_gc_mbms_context_stat, /* 10.5.7.6 MBMS context status */
6236 de_gc_uplink_data_stat, /* 10.5.7.7 Uplink data status */
6237 de_gc_device_properties, /* 10.5.7.8 Device properties */
6241 /* MESSAGE FUNCTIONS */
6247 dtap_gmm_attach_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
6249 guint32 curr_offset;
6253 curr_offset = offset;
6256 pinfo->p2p_dir = P2P_DIR_RECV;
6258 ELEM_MAND_LV( GSM_A_PDU_TYPE_GM, DE_MS_NET_CAP, NULL, ei_gsm_a_gm_missing_mandatory_element);
6260 ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_GM, DE_ATTACH_TYPE, GSM_A_PDU_TYPE_COMMON, DE_CIPH_KEY_SEQ_NUM, ei_gsm_a_gm_missing_mandatory_element);
6262 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_DRX_PARAM, NULL, ei_gsm_a_gm_missing_mandatory_element);
6264 ELEM_MAND_LV( GSM_A_PDU_TYPE_COMMON, DE_MID, NULL, ei_gsm_a_gm_missing_mandatory_element);
6266 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_RAI, " - Old routing area identification", ei_gsm_a_gm_missing_mandatory_element);
6268 ELEM_MAND_LV( GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP, NULL, ei_gsm_a_gm_missing_mandatory_element);
6270 ELEM_OPT_TV( 0x19, GSM_A_PDU_TYPE_GM, DE_P_TMSI_SIG, " - Old P-TMSI Signature");
6272 ELEM_OPT_TV( 0x17, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER, " - Ready Timer");
6274 ELEM_OPT_TV_SHORT( 0x90, GSM_A_PDU_TYPE_GM, DE_TMSI_STAT, NULL);
6276 ELEM_OPT_TLV( 0x33, GSM_A_PDU_TYPE_GM, DE_PS_LCS_CAP, NULL);
6278 ELEM_OPT_TLV( 0x11, GSM_A_PDU_TYPE_COMMON, DE_MS_CM_2, NULL);
6280 ELEM_OPT_TLV( 0x20, GSM_A_PDU_TYPE_COMMON, DE_MS_CM_3, NULL);
6282 ELEM_OPT_TLV( 0x40, GSM_A_PDU_TYPE_DTAP, DE_SUP_CODEC_LIST, NULL);
6284 ELEM_OPT_TLV( 0x58, NAS_PDU_TYPE_EMM, DE_EMM_UE_NET_CAP, NULL);
6286 ELEM_OPT_TLV( 0x1A, GSM_A_PDU_TYPE_COMMON, DE_MID, " - Additional mobile identity");
6288 ELEM_OPT_TLV( 0x1B, GSM_A_PDU_TYPE_GM, DE_RAI_2, " - Additional old routing area identification");
6290 ELEM_OPT_TLV( 0x5D, GSM_A_PDU_TYPE_GM, DE_VOICE_DOMAIN_PREF, NULL);
6292 ELEM_OPT_TV_SHORT(0xD0, GSM_A_PDU_TYPE_GM, DE_DEVICE_PROPERTIES, NULL);
6294 ELEM_OPT_TV_SHORT(0xE0, GSM_A_PDU_TYPE_GM, DE_PTMSI_TYPE, NULL);
6296 ELEM_OPT_TV_SHORT(0xC0, GSM_A_PDU_TYPE_COMMON, DE_MS_NET_FEAT_SUP, NULL);
6298 ELEM_OPT_TLV(0x14, GSM_A_PDU_TYPE_GM, DE_LAI_2, " - Old location area identification");
6300 ELEM_OPT_TV_SHORT(0xF0, GSM_A_PDU_TYPE_GM, DE_ADD_UPD_TYPE, NULL);
6302 ELEM_OPT_TLV(0x10, GSM_A_PDU_TYPE_GM, DE_NET_RES_ID_CONT, " - TMSI based NRI container");
6304 ELEM_OPT_TLV(0x6A, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3324 value");
6306 ELEM_OPT_TLV(0x39, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - T3312 extended value");
6308 ELEM_OPT_TLV(0x6E, GSM_A_PDU_TYPE_GM, DE_EXT_DRX_PARAMS, NULL);
6310 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
6317 dtap_gmm_attach_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
6319 guint32 curr_offset;
6323 curr_offset = offset;
6326 pinfo->p2p_dir = P2P_DIR_SENT;
6328 ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_GM, DE_ATTACH_RES, GSM_A_PDU_TYPE_GM, DE_FORCE_TO_STAND_H, ei_gsm_a_gm_missing_mandatory_element);
6330 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER, NULL, ei_gsm_a_gm_missing_mandatory_element);
6332 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_RAD_PRIO_2, " - Radio priority for TOM8", ei_gsm_a_gm_missing_mandatory_element);
6336 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_RAD_PRIO, " - Radio priority for SMS", ei_gsm_a_gm_missing_mandatory_element);
6338 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_RAI, NULL, ei_gsm_a_gm_missing_mandatory_element);
6340 ELEM_OPT_TV( 0x19, GSM_A_PDU_TYPE_GM, DE_P_TMSI_SIG, NULL);
6342 ELEM_OPT_TV( 0x17, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER, " - Negotiated Ready Timer");
6344 ELEM_OPT_TLV( 0x18, GSM_A_PDU_TYPE_COMMON, DE_MID, " - Allocated P-TMSI");
6346 ELEM_OPT_TLV( 0x23, GSM_A_PDU_TYPE_COMMON, DE_MID, NULL);
6348 ELEM_OPT_TV( 0x25, GSM_A_PDU_TYPE_GM, DE_GMM_CAUSE, NULL);
6350 ELEM_OPT_TLV( 0x2A, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3302 value");
6352 ELEM_OPT_T( 0x8C, GSM_A_PDU_TYPE_GM, DE_CELL_NOT, NULL);
6354 ELEM_OPT_TLV( 0x4A, GSM_A_PDU_TYPE_COMMON, DE_PLMN_LIST, NULL);
6356 ELEM_OPT_TV_SHORT( 0xB0, GSM_A_PDU_TYPE_GM, DE_NET_FEAT_SUP, NULL);
6358 ELEM_OPT_TLV( 0x34, GSM_A_PDU_TYPE_DTAP, DE_EMERGENCY_NUM_LIST, NULL);
6360 ELEM_OPT_TV_SHORT( 0xA0, GSM_A_PDU_TYPE_GM, DE_REQ_MS_INFO, NULL);
6362 ELEM_OPT_TLV( 0x37, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3319 value");
6364 ELEM_OPT_TLV( 0x38, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3323 value" );
6366 ELEM_OPT_TLV(0x39, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - T3312 extended value");
6368 ELEM_OPT_TLV(0x66, GSM_A_PDU_TYPE_GM, DE_ADD_NET_FEAT_SUP, NULL);
6370 ELEM_OPT_TLV(0x6A, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3324 value");
6372 ELEM_OPT_TLV(0x6E, GSM_A_PDU_TYPE_GM, DE_EXT_DRX_PARAMS, NULL);
6374 ELEM_OPT_TV_SHORT(0xC0, GSM_A_PDU_TYPE_GM, DE_UP_INTEG_IND, NULL);
6376 ELEM_OPT_TLV(0x31, GSM_A_PDU_TYPE_GM, DE_MS_NET_CAP, " - Replayed MS network capability");
6378 ELEM_OPT_TLV(0x33, GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP, " - Replayed MS Radio Access capability");
6380 ELEM_OPT_TLV(0x65, GSM_A_PDU_TYPE_GM, DE_DCN_ID, NULL);
6382 ELEM_OPT_TLV(0x63, GSM_A_PDU_TYPE_GM, DE_PLMN_ID_CN_OPERATOR, NULL);
6384 ELEM_OPT_TV_SHORT(0xD0, GSM_A_PDU_TYPE_GM, DE_NON_3GPP_NW_PROV_POL, NULL);
6386 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
6393 dtap_gmm_attach_com(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
6396 guint32 curr_offset;
6400 curr_offset = offset;
6403 pinfo->p2p_dir = P2P_DIR_RECV;
6405 ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_RAT_INFO_CONTAINER, " - Inter RAT handover information");
6407 ELEM_OPT_TLV( 0x2B, GSM_A_PDU_TYPE_GM, DE_EUTRAN_IRAT_INFO_CONTAINER, " - E-UTRAN inter RAT handover information");
6409 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
6416 dtap_gmm_attach_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
6418 guint32 curr_offset;
6422 curr_offset = offset;
6425 pinfo->p2p_dir = P2P_DIR_SENT;
6427 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_GMM_CAUSE, NULL, ei_gsm_a_gm_missing_mandatory_element);
6429 ELEM_OPT_TLV( 0x2A, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3302 value" );
6431 ELEM_OPT_TLV(0x3A, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3346 value");
6433 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
6440 dtap_gmm_detach_req_MT(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
6442 guint32 curr_offset;
6446 curr_offset = offset;
6449 pinfo->p2p_dir = P2P_DIR_SENT;
6451 ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_GM, DE_DETACH_TYPE, GSM_A_PDU_TYPE_GM, DE_FORCE_TO_STAND_H, ei_gsm_a_gm_missing_mandatory_element);
6453 ELEM_OPT_TV( 0x25, GSM_A_PDU_TYPE_GM, DE_GMM_CAUSE, NULL);
6455 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
6459 dtap_gmm_detach_req_MO(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
6461 guint32 curr_offset;
6465 curr_offset = offset;
6468 pinfo->p2p_dir = P2P_DIR_RECV;
6470 ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_GM, DE_DETACH_TYPE, GSM_A_PDU_TYPE_COMMON, DE_SPARE_NIBBLE, ei_gsm_a_gm_missing_mandatory_element);
6472 ELEM_OPT_TLV( 0x18, GSM_A_PDU_TYPE_COMMON, DE_MID, NULL);
6474 ELEM_OPT_TLV( 0x19, GSM_A_PDU_TYPE_GM, DE_P_TMSI_SIG_2, NULL);
6476 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
6480 dtap_gmm_detach_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
6482 if (pinfo->link_dir == P2P_DIR_UL) {
6483 dtap_gmm_detach_req_MO(tvb, tree, pinfo, offset, len);
6485 }else if (pinfo->link_dir == P2P_DIR_DL) {
6486 dtap_gmm_detach_req_MT(tvb, tree, pinfo, offset, len);
6489 /* Unknown direction. Try heuristics based on message length. */
6491 dtap_gmm_detach_req_MO(tvb, tree, pinfo, offset, len);
6493 dtap_gmm_detach_req_MT(tvb, tree, pinfo, offset, len);
6502 dtap_gmm_detach_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
6504 guint32 curr_offset;
6507 curr_offset = offset;
6510 pinfo->p2p_dir = P2P_DIR_RECV;
6512 if (curr_len == 0) {
6516 ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_GM, DE_FORCE_TO_STAND, GSM_A_PDU_TYPE_COMMON, DE_SPARE_NIBBLE, ei_gsm_a_gm_missing_mandatory_element);
6518 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
6525 dtap_gmm_ptmsi_realloc_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
6527 guint32 curr_offset;
6531 curr_offset = offset;
6534 pinfo->p2p_dir = P2P_DIR_SENT;
6536 ELEM_MAND_LV( GSM_A_PDU_TYPE_COMMON, DE_MID, " - Allocated P-TMSI", ei_gsm_a_gm_missing_mandatory_element);
6538 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_RAI, NULL, ei_gsm_a_gm_missing_mandatory_element);
6540 ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_GM, DE_FORCE_TO_STAND, GSM_A_PDU_TYPE_COMMON, DE_SPARE_NIBBLE, ei_gsm_a_gm_missing_mandatory_element);
6542 ELEM_OPT_TV( 0x19, GSM_A_PDU_TYPE_GM, DE_P_TMSI_SIG, " - P-TMSI Signature" );
6544 ELEM_OPT_TLV(0x65, GSM_A_PDU_TYPE_GM, DE_DCN_ID, NULL);
6546 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
6553 dtap_gmm_ptmsi_realloc_com(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
6555 guint32 curr_offset;
6556 /* guint32 consumed; */
6559 curr_offset = offset;
6562 pinfo->p2p_dir = P2P_DIR_RECV;
6564 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
6571 dtap_gmm_auth_ciph_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
6573 guint32 curr_offset;
6577 curr_offset = offset;
6580 pinfo->p2p_dir = P2P_DIR_SENT;
6582 ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_GM, DE_CIPH_ALG, GSM_A_PDU_TYPE_GM, DE_IMEISV_REQ, ei_gsm_a_gm_missing_mandatory_element);
6584 ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_GM, DE_FORCE_TO_STAND, GSM_A_PDU_TYPE_GM, DE_AC_REF_NUM_H, ei_gsm_a_gm_missing_mandatory_element);
6586 ELEM_OPT_TV(0x21, GSM_A_PDU_TYPE_DTAP, DE_AUTH_PARAM_RAND, NULL);
6588 ELEM_OPT_TV_SHORT(0x80, GSM_A_PDU_TYPE_COMMON, DE_CIPH_KEY_SEQ_NUM, NULL);
6590 ELEM_OPT_TLV(0x28, GSM_A_PDU_TYPE_DTAP, DE_AUTH_PARAM_AUTN, NULL);
6592 ELEM_OPT_TLV(0x31, GSM_A_PDU_TYPE_GM, DE_MS_NET_CAP, " - Replayed MS network capability");
6594 ELEM_OPT_TLV(0x42, GSM_A_PDU_TYPE_GM, DE_INTEG_ALG, NULL);
6596 ELEM_OPT_TLV(0x43, GSM_A_PDU_TYPE_GM, DE_MAC, NULL);
6598 ELEM_OPT_TLV(0x33, GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP, " - Replayed MS Radio Access capability");
6600 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
6607 dtap_gmm_auth_ciph_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
6609 guint32 curr_offset;
6613 curr_offset = offset;
6616 pinfo->p2p_dir = P2P_DIR_RECV;
6618 ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_GM, DE_AC_REF_NUM, GSM_A_PDU_TYPE_COMMON, DE_SPARE_NIBBLE, ei_gsm_a_gm_missing_mandatory_element);
6620 ELEM_OPT_TV(0x22, GSM_A_PDU_TYPE_DTAP, DE_AUTH_RESP_PARAM, NULL);
6622 ELEM_OPT_TLV(0x23, GSM_A_PDU_TYPE_COMMON, DE_MID, " - IMEISV" );
6624 ELEM_OPT_TLV(0x29, GSM_A_PDU_TYPE_DTAP, DE_AUTH_RESP_PARAM_EXT, NULL);
6626 ELEM_OPT_TLV(0x43, GSM_A_PDU_TYPE_GM, DE_MAC, NULL);
6628 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
6635 dtap_gmm_auth_ciph_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
6637 guint32 curr_offset;
6640 curr_offset = offset;
6643 pinfo->p2p_dir = P2P_DIR_SENT;
6645 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
6652 dtap_gmm_auth_ciph_fail(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
6654 guint32 curr_offset;
6658 curr_offset = offset;
6661 pinfo->p2p_dir = P2P_DIR_RECV;
6663 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_GMM_CAUSE, NULL, ei_gsm_a_gm_missing_mandatory_element);
6665 ELEM_OPT_TLV( 0x30, GSM_A_PDU_TYPE_DTAP, DE_AUTH_FAIL_PARAM, NULL);
6667 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
6674 dtap_gmm_ident_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
6676 guint32 curr_offset;
6679 curr_offset = offset;
6682 pinfo->p2p_dir = P2P_DIR_SENT;
6684 ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_GM, DE_ID_TYPE_2, GSM_A_PDU_TYPE_GM, DE_FORCE_TO_STAND_H, ei_gsm_a_gm_missing_mandatory_element);
6686 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
6693 dtap_gmm_ident_res(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
6695 guint32 curr_offset;
6699 curr_offset = offset;
6702 pinfo->p2p_dir = P2P_DIR_RECV;
6704 ELEM_MAND_LV( GSM_A_PDU_TYPE_COMMON, DE_MID, NULL, ei_gsm_a_gm_missing_mandatory_element);
6706 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
6713 dtap_gmm_rau_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
6715 guint32 curr_offset;
6719 curr_offset = offset;
6722 pinfo->p2p_dir = P2P_DIR_RECV;
6724 ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_GM, DE_UPD_TYPE, GSM_A_PDU_TYPE_COMMON, DE_CIPH_KEY_SEQ_NUM, ei_gsm_a_gm_missing_mandatory_element);
6726 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_RAI, " - Old routing area identification", ei_gsm_a_gm_missing_mandatory_element);
6728 ELEM_MAND_LV( GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP, NULL, ei_gsm_a_gm_missing_mandatory_element);
6730 ELEM_OPT_TV( 0x19, GSM_A_PDU_TYPE_GM, DE_P_TMSI_SIG, " - Old P-TMSI Signature" );
6732 ELEM_OPT_TV( 0x17, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER, " - Requested Ready Timer" );
6734 ELEM_OPT_TV( 0x27, GSM_A_PDU_TYPE_GM, DE_DRX_PARAM, NULL);
6736 ELEM_OPT_TV_SHORT( 0x90, GSM_A_PDU_TYPE_GM, DE_TMSI_STAT, NULL);
6738 ELEM_OPT_TLV( 0x18, GSM_A_PDU_TYPE_COMMON, DE_MID, " - P-TMSI" );
6740 ELEM_OPT_TLV( 0x31, GSM_A_PDU_TYPE_GM, DE_MS_NET_CAP, NULL);
6742 ELEM_OPT_TLV( 0x32, GSM_A_PDU_TYPE_GM, DE_PDP_CONTEXT_STAT, NULL);
6744 ELEM_OPT_TLV( 0x33, GSM_A_PDU_TYPE_GM, DE_PS_LCS_CAP, NULL);
6746 ELEM_OPT_TLV( 0x35, GSM_A_PDU_TYPE_GM, DE_MBMS_CTX_STATUS, NULL);
6748 ELEM_OPT_TLV( 0x58, NAS_PDU_TYPE_EMM, DE_EMM_UE_NET_CAP, NULL);
6750 ELEM_OPT_TLV( 0x1A, GSM_A_PDU_TYPE_COMMON, DE_MID, " - Additional mobile identity");
6752 ELEM_OPT_TLV( 0x1B, GSM_A_PDU_TYPE_GM, DE_RAI_2, " - Additional old routing area identification");
6754 ELEM_OPT_TLV( 0x11, GSM_A_PDU_TYPE_COMMON, DE_MS_CM_2, NULL);
6756 ELEM_OPT_TLV( 0x20, GSM_A_PDU_TYPE_COMMON, DE_MS_CM_3, NULL);
6758 ELEM_OPT_TLV( 0x40, GSM_A_PDU_TYPE_DTAP, DE_SUP_CODEC_LIST, NULL);
6760 ELEM_OPT_TLV( 0x5D, GSM_A_PDU_TYPE_GM, DE_VOICE_DOMAIN_PREF, NULL);
6762 ELEM_OPT_TV_SHORT(0xE0, GSM_A_PDU_TYPE_GM, DE_PTMSI_TYPE, NULL);
6764 ELEM_OPT_TV_SHORT(0xD0, GSM_A_PDU_TYPE_GM, DE_DEVICE_PROPERTIES, NULL);
6766 ELEM_OPT_TV_SHORT(0xC0, GSM_A_PDU_TYPE_COMMON, DE_MS_NET_FEAT_SUP, NULL);
6768 ELEM_OPT_TLV(0x14, GSM_A_PDU_TYPE_GM, DE_LAI_2, " - Old location area identification");
6770 ELEM_OPT_TV_SHORT(0xF0, GSM_A_PDU_TYPE_GM, DE_ADD_UPD_TYPE, NULL);
6772 ELEM_OPT_TLV(0x10, GSM_A_PDU_TYPE_GM, DE_NET_RES_ID_CONT, " - TMSI based NRI container");
6774 ELEM_OPT_TLV(0x6A, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3324 value");
6776 ELEM_OPT_TLV(0x39, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - T3312 extended value");
6778 ELEM_OPT_TLV(0x6E, GSM_A_PDU_TYPE_GM, DE_EXT_DRX_PARAMS, NULL);
6780 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
6787 dtap_gmm_rau_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
6789 guint32 curr_offset;
6793 curr_offset = offset;
6796 pinfo->p2p_dir = P2P_DIR_SENT;
6798 ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_GM, DE_FORCE_TO_STAND, GSM_A_PDU_TYPE_GM, DE_UPD_RES, ei_gsm_a_gm_missing_mandatory_element);
6800 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER, " - Periodic RA update timer", ei_gsm_a_gm_missing_mandatory_element);
6802 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_RAI, NULL, ei_gsm_a_gm_missing_mandatory_element);
6804 ELEM_OPT_TV( 0x19, GSM_A_PDU_TYPE_GM, DE_P_TMSI_SIG, NULL);
6806 ELEM_OPT_TLV( 0x18, GSM_A_PDU_TYPE_COMMON, DE_MID, " - Allocated P-TMSI");
6808 ELEM_OPT_TLV( 0x23, GSM_A_PDU_TYPE_COMMON, DE_MID, " - MS identity");
6810 ELEM_OPT_TLV( 0x26, GSM_A_PDU_TYPE_GM, DE_REC_N_PDU_NUM_LIST, NULL);
6812 ELEM_OPT_TV( 0x17, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER, " - Negotiated Ready Timer" );
6814 ELEM_OPT_TV( 0x25, GSM_A_PDU_TYPE_GM, DE_GMM_CAUSE, NULL);
6816 ELEM_OPT_TLV( 0x2A, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3302 value" );
6818 ELEM_OPT_T( 0x8C, GSM_A_PDU_TYPE_GM, DE_CELL_NOT, NULL);
6820 ELEM_OPT_TLV( 0x4A, GSM_A_PDU_TYPE_COMMON, DE_PLMN_LIST, NULL);
6822 ELEM_OPT_TLV( 0x32, GSM_A_PDU_TYPE_GM, DE_PDP_CONTEXT_STAT, NULL);
6824 ELEM_OPT_TV_SHORT( 0xB0, GSM_A_PDU_TYPE_GM, DE_NET_FEAT_SUP, NULL);
6826 ELEM_OPT_TLV( 0x34, GSM_A_PDU_TYPE_DTAP, DE_EMERGENCY_NUM_LIST, NULL);
6828 ELEM_OPT_TLV( 0x35, GSM_A_PDU_TYPE_GM, DE_MBMS_CTX_STATUS, NULL);
6830 ELEM_OPT_TV_SHORT( 0xA0, GSM_A_PDU_TYPE_GM, DE_REQ_MS_INFO, NULL);
6832 ELEM_OPT_TLV( 0x37, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3319 value");
6834 ELEM_OPT_TLV( 0x38, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3323 value");
6836 ELEM_OPT_TLV(0x39, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - T3312 extended value");
6838 ELEM_OPT_TLV(0x66, GSM_A_PDU_TYPE_GM, DE_ADD_NET_FEAT_SUP, NULL);
6840 ELEM_OPT_TLV(0x6A, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3324 value");
6842 ELEM_OPT_TLV(0x6E, GSM_A_PDU_TYPE_GM, DE_EXT_DRX_PARAMS, NULL);
6844 ELEM_OPT_TV_SHORT(0xC0, GSM_A_PDU_TYPE_GM, DE_UP_INTEG_IND, NULL);
6846 ELEM_OPT_TLV(0x31, GSM_A_PDU_TYPE_GM, DE_MS_NET_CAP, " - Replayed MS network capability");
6848 ELEM_OPT_TLV(0x33, GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP, " - Replayed MS Radio Access capability");
6850 ELEM_OPT_TLV(0x65, GSM_A_PDU_TYPE_GM, DE_DCN_ID, NULL);
6852 ELEM_OPT_TLV(0x63, GSM_A_PDU_TYPE_GM, DE_PLMN_ID_CN_OPERATOR, NULL);
6854 ELEM_OPT_TV_SHORT(0xD0, GSM_A_PDU_TYPE_GM, DE_NON_3GPP_NW_PROV_POL, NULL);
6856 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
6863 dtap_gmm_rau_com(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
6865 guint32 curr_offset;
6869 curr_offset = offset;
6872 pinfo->p2p_dir = P2P_DIR_RECV;
6874 ELEM_OPT_TLV( 0x26, GSM_A_PDU_TYPE_GM, DE_REC_N_PDU_NUM_LIST, NULL);
6875 /* Inter RAT information container 10.5.5.24 TS 24.008 version 6.8.0 Release 6 */
6876 ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_RAT_INFO_CONTAINER, " - Inter RAT handover information");
6878 ELEM_OPT_TLV( 0x2B, GSM_A_PDU_TYPE_GM, DE_EUTRAN_IRAT_INFO_CONTAINER, " - E-UTRAN inter RAT handover information");
6880 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
6887 dtap_gmm_rau_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
6889 guint32 curr_offset;
6893 curr_offset = offset;
6896 pinfo->p2p_dir = P2P_DIR_SENT;
6898 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_GMM_CAUSE, NULL, ei_gsm_a_gm_missing_mandatory_element);
6900 ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_GM, DE_FORCE_TO_STAND, GSM_A_PDU_TYPE_COMMON, DE_SPARE_NIBBLE, ei_gsm_a_gm_missing_mandatory_element);
6902 ELEM_OPT_TLV(0x2A, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3302 value");
6904 ELEM_OPT_TLV(0x3A, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3346 value");
6906 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
6913 dtap_gmm_status(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
6915 guint32 curr_offset;
6919 curr_offset = offset;
6922 pinfo->p2p_dir = P2P_DIR_UNKNOWN;
6924 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_GMM_CAUSE, NULL, ei_gsm_a_gm_missing_mandatory_element);
6926 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
6930 * [8] 9.4.19 GMM Information
6933 dtap_gmm_information(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
6935 guint32 curr_offset;
6939 curr_offset = offset;
6942 pinfo->p2p_dir = P2P_DIR_SENT;
6944 ELEM_OPT_TLV( 0x43, GSM_A_PDU_TYPE_DTAP, DE_NETWORK_NAME, " - Full Name" );
6946 ELEM_OPT_TLV( 0x45, GSM_A_PDU_TYPE_DTAP, DE_NETWORK_NAME, " - Short Name" );
6948 ELEM_OPT_TV( 0x46, GSM_A_PDU_TYPE_DTAP, DE_TIME_ZONE, NULL);
6950 ELEM_OPT_TV( 0x47, GSM_A_PDU_TYPE_DTAP, DE_TIME_ZONE_TIME, NULL);
6952 ELEM_OPT_TLV( 0x48, GSM_A_PDU_TYPE_DTAP, DE_LSA_ID, NULL);
6954 ELEM_OPT_TLV( 0x49, GSM_A_PDU_TYPE_DTAP, DE_DAY_SAVING_TIME, NULL);
6956 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
6963 dtap_gmm_service_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
6965 guint32 curr_offset;
6969 curr_offset = offset;
6972 pinfo->p2p_dir = P2P_DIR_RECV;
6974 ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_COMMON, DE_CIPH_KEY_SEQ_NUM, GSM_A_PDU_TYPE_GM, DE_SRVC_TYPE, ei_gsm_a_gm_missing_mandatory_element);
6976 /* P-TMSI Mobile station identity 10.5.1.4 M LV 6 */
6977 ELEM_MAND_LV( GSM_A_PDU_TYPE_COMMON, DE_MID, NULL, ei_gsm_a_gm_missing_mandatory_element);
6979 ELEM_OPT_TLV( 0x32, GSM_A_PDU_TYPE_GM, DE_PDP_CONTEXT_STAT, NULL);
6981 /* MBMS context status 10.5.7.6 TLV 2 - 18 */
6982 ELEM_OPT_TLV( 0x35, GSM_A_PDU_TYPE_GM, DE_MBMS_CTX_STATUS, NULL);
6984 ELEM_OPT_TLV( 0x36, GSM_A_PDU_TYPE_GM, DE_UPLINK_DATA_STATUS, NULL);
6986 ELEM_OPT_TV_SHORT(0xD0, GSM_A_PDU_TYPE_GM, DE_DEVICE_PROPERTIES, NULL);
6988 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
6995 dtap_gmm_service_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
6997 guint32 curr_offset;
7001 curr_offset = offset;
7004 pinfo->p2p_dir = P2P_DIR_SENT;
7006 ELEM_OPT_TLV( 0x32, GSM_A_PDU_TYPE_GM, DE_PDP_CONTEXT_STAT, NULL);
7008 /* MBMS context status 10.5.7.6 TLV 2 - 18 */
7009 ELEM_OPT_TLV( 0x35, GSM_A_PDU_TYPE_GM, DE_MBMS_CTX_STATUS, NULL);
7011 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
7018 dtap_gmm_service_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
7020 guint32 curr_offset;
7024 curr_offset = offset;
7027 pinfo->p2p_dir = P2P_DIR_SENT;
7029 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_GMM_CAUSE, NULL, ei_gsm_a_gm_missing_mandatory_element);
7031 ELEM_OPT_TLV(0x3A, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3346 value");
7033 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
7037 * [8] 9.5.1 Activate PDP context request
7038 * Direction: MS to network
7041 dtap_sm_act_pdp_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
7043 guint32 curr_offset;
7047 curr_offset = offset;
7050 pinfo->p2p_dir = P2P_DIR_UNKNOWN;
7052 pinfo->link_dir = P2P_DIR_UL;
7054 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_NET_SAPI, " - Requested NSAPI", ei_gsm_a_gm_missing_mandatory_element);
7056 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_LLC_SAPI, " - Requested LLC SAPI", ei_gsm_a_gm_missing_mandatory_element);
7058 ELEM_MAND_LV( GSM_A_PDU_TYPE_GM, DE_QOS, " - Requested QoS", ei_gsm_a_gm_missing_mandatory_element);
7060 ELEM_MAND_LV( GSM_A_PDU_TYPE_GM, DE_PD_PRO_ADDR, " - Requested PDP address", ei_gsm_a_gm_missing_mandatory_element);
7062 ELEM_OPT_TLV( 0x28, GSM_A_PDU_TYPE_GM, DE_ACC_POINT_NAME, NULL);
7064 ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL);
7066 ELEM_OPT_TV_SHORT( 0xA0, GSM_A_PDU_TYPE_GM, DE_REQ_TYPE, NULL);
7068 ELEM_OPT_TV_SHORT(0xC0, GSM_A_PDU_TYPE_GM, DE_DEVICE_PROPERTIES, NULL);
7070 ELEM_OPT_TLV(0x33, GSM_A_PDU_TYPE_GM, DE_NBIFOM_CONT, NULL);
7072 ELEM_OPT_TLV_E(0x7B, GSM_A_PDU_TYPE_GM, DE_EXT_PRO_CONF_OPT, NULL);
7074 ELEM_OPT_TLV(0x5C, GSM_A_PDU_TYPE_GM, DE_EXT_QOS, NULL);
7076 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
7080 * [9] 9.5.2 Activate PDP context accept
7081 * Direction: network to MS
7084 dtap_sm_act_pdp_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
7086 guint32 curr_offset;
7090 curr_offset = offset;
7093 pinfo->p2p_dir = P2P_DIR_UNKNOWN;
7095 pinfo->link_dir = P2P_DIR_DL;
7097 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_LLC_SAPI, " - Negotiated LLC SAPI", ei_gsm_a_gm_missing_mandatory_element);
7099 ELEM_MAND_LV( GSM_A_PDU_TYPE_GM, DE_QOS, " - Negotiated QoS", ei_gsm_a_gm_missing_mandatory_element);
7102 /* This is done automatically */
7103 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_SPARE, NULL, ei_gsm_a_gm_missing_mandatory_element);
7108 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_RAD_PRIO, NULL, ei_gsm_a_gm_missing_mandatory_element);
7110 ELEM_OPT_TLV( 0x2B, GSM_A_PDU_TYPE_GM, DE_PD_PRO_ADDR, " - PDP address");
7112 ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL);
7114 ELEM_OPT_TLV( 0x34, GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID, NULL);
7116 ELEM_OPT_TLV( 0x39, GSM_A_PDU_TYPE_GM, DE_SM_CAUSE_2, " - SM cause");
7118 ELEM_OPT_TV_SHORT(0xB0 , GSM_A_PDU_TYPE_GM, DE_SM_CONNECTIVITY_TYPE, NULL);
7120 ELEM_OPT_TV_SHORT(0xC0 , GSM_A_PDU_TYPE_GM, DE_SM_WLAN_OFFLOAD_ACCEPT, " - WLAN offload indication");
7122 ELEM_OPT_TLV(0x33, GSM_A_PDU_TYPE_GM, DE_NBIFOM_CONT, NULL);
7124 ELEM_OPT_TLV_E(0x7B, GSM_A_PDU_TYPE_GM, DE_EXT_PRO_CONF_OPT, NULL);
7126 ELEM_OPT_TLV(0x5C, GSM_A_PDU_TYPE_GM, DE_EXT_QOS, NULL);
7128 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
7132 * [8] 9.5.3 Activate PDP context reject
7133 * Direction: network to MS
7136 dtap_sm_act_pdp_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
7138 guint32 curr_offset;
7142 curr_offset = offset;
7145 pinfo->p2p_dir = P2P_DIR_UNKNOWN;
7147 pinfo->link_dir = P2P_DIR_DL;
7149 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_SM_CAUSE, NULL, ei_gsm_a_gm_missing_mandatory_element);
7151 ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL);
7153 ELEM_OPT_TLV(0x37, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - Back-off timer value");
7155 ELEM_OPT_TLV(0x6B, GSM_A_PDU_TYPE_GM, DE_RE_ATTEMPT_IND, NULL);
7157 ELEM_OPT_TLV(0x33, GSM_A_PDU_TYPE_GM, DE_NBIFOM_CONT, NULL);
7159 ELEM_OPT_TLV_E(0x7B, GSM_A_PDU_TYPE_GM, DE_EXT_PRO_CONF_OPT, NULL);
7161 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
7165 * [8] 9.5.4 Activate Secondary PDP Context Request
7166 * Direction: MS to network
7169 dtap_sm_act_sec_pdp_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
7171 guint32 curr_offset;
7175 curr_offset = offset;
7178 pinfo->p2p_dir = P2P_DIR_UNKNOWN;
7180 pinfo->link_dir = P2P_DIR_UL;
7182 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_NET_SAPI, " - Requested NSAPI", ei_gsm_a_gm_missing_mandatory_element);
7184 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_LLC_SAPI, " - Requested LLC SAPI", ei_gsm_a_gm_missing_mandatory_element);
7186 ELEM_MAND_LV( GSM_A_PDU_TYPE_GM, DE_QOS, " - Requested QoS", ei_gsm_a_gm_missing_mandatory_element);
7188 ELEM_MAND_LV( GSM_A_PDU_TYPE_GM, DE_LINKED_TI, NULL, ei_gsm_a_gm_missing_mandatory_element);
7190 /* 3GPP TS 24.008 version 6.8.0 Release 6, 36 TFT Traffic Flow Template 10.5.6.12 O TLV 3-257 */
7191 ELEM_OPT_TLV( 0x36, GSM_A_PDU_TYPE_GM, DE_TRAFFIC_FLOW_TEMPLATE, NULL);
7193 ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL);
7195 ELEM_OPT_TV_SHORT(0xC0, GSM_A_PDU_TYPE_GM, DE_DEVICE_PROPERTIES, NULL);
7197 ELEM_OPT_TLV(0x33, GSM_A_PDU_TYPE_GM, DE_NBIFOM_CONT, NULL);
7199 ELEM_OPT_TLV_E(0x7B, GSM_A_PDU_TYPE_GM, DE_EXT_PRO_CONF_OPT, NULL);
7201 ELEM_OPT_TLV(0x5C, GSM_A_PDU_TYPE_GM, DE_EXT_QOS, NULL);
7203 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
7207 * [7] 9.5.5 Activate Secondary PDP Context Accept
7208 * Direction: network to MS
7211 dtap_sm_act_sec_pdp_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
7213 guint32 curr_offset;
7217 curr_offset = offset;
7220 pinfo->p2p_dir = P2P_DIR_UNKNOWN;
7222 pinfo->link_dir = P2P_DIR_DL;
7224 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_LLC_SAPI, " - Negotiated LLC SAPI", ei_gsm_a_gm_missing_mandatory_element);
7226 ELEM_MAND_LV( GSM_A_PDU_TYPE_GM, DE_QOS, " - Negotiated QoS", ei_gsm_a_gm_missing_mandatory_element);
7228 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_RAD_PRIO, NULL, ei_gsm_a_gm_missing_mandatory_element);
7231 /* This is done automatically */
7232 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_SPARE, NULL, ei_gsm_a_gm_missing_mandatory_element);
7237 ELEM_OPT_TLV( 0x34, GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID, NULL);
7239 ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL);
7241 ELEM_OPT_TV_SHORT(0xC0 , GSM_A_PDU_TYPE_GM, DE_SM_WLAN_OFFLOAD_ACCEPT, " - WLAN offload indication");
7243 ELEM_OPT_TLV(0x33, GSM_A_PDU_TYPE_GM, DE_NBIFOM_CONT, NULL);
7245 ELEM_OPT_TLV_E(0x7B, GSM_A_PDU_TYPE_GM, DE_EXT_PRO_CONF_OPT, NULL);
7247 ELEM_OPT_TLV(0x5C, GSM_A_PDU_TYPE_GM, DE_EXT_QOS, NULL);
7249 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
7253 * [8] 9.5.6 Activate Secondary PDP Context Reject
7254 * Direction: network to MS
7257 dtap_sm_act_sec_pdp_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
7259 guint32 curr_offset;
7263 curr_offset = offset;
7266 pinfo->p2p_dir = P2P_DIR_UNKNOWN;
7268 pinfo->link_dir = P2P_DIR_DL;
7270 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_SM_CAUSE, NULL, ei_gsm_a_gm_missing_mandatory_element);
7272 ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL);
7274 ELEM_OPT_TLV(0x37, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - Back-off timer value");
7276 ELEM_OPT_TLV(0x6B, GSM_A_PDU_TYPE_GM, DE_RE_ATTEMPT_IND, NULL);
7278 ELEM_OPT_TLV(0x33, GSM_A_PDU_TYPE_GM, DE_NBIFOM_CONT, NULL);
7280 ELEM_OPT_TLV_E(0x7B, GSM_A_PDU_TYPE_GM, DE_EXT_PRO_CONF_OPT, NULL);
7282 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
7286 * [8] 9.5.7 Request PDP context activation
7287 * Direction: network to MS
7290 dtap_sm_req_pdp_act(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
7292 guint32 curr_offset;
7296 curr_offset = offset;
7299 pinfo->p2p_dir = P2P_DIR_UNKNOWN;
7301 pinfo->link_dir = P2P_DIR_DL;
7303 ELEM_MAND_LV( GSM_A_PDU_TYPE_GM, DE_PD_PRO_ADDR, " - Offered PDP address", ei_gsm_a_gm_missing_mandatory_element);
7305 ELEM_OPT_TLV( 0x28, GSM_A_PDU_TYPE_GM, DE_ACC_POINT_NAME, NULL);
7307 ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL);
7309 ELEM_OPT_TLV(0x33, GSM_A_PDU_TYPE_GM, DE_NBIFOM_CONT, NULL);
7311 ELEM_OPT_TLV_E(0x7B, GSM_A_PDU_TYPE_GM, DE_EXT_PRO_CONF_OPT, NULL);
7313 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
7317 * [8] 9.5.8 Request PDP context activation reject
7318 * Direction: MS to network
7321 dtap_sm_req_pdp_act_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
7323 guint32 curr_offset;
7327 curr_offset = offset;
7330 pinfo->p2p_dir = P2P_DIR_UNKNOWN;
7332 pinfo->link_dir = P2P_DIR_UL;
7334 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_SM_CAUSE, NULL, ei_gsm_a_gm_missing_mandatory_element);
7336 ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL);
7338 ELEM_OPT_TLV(0x33, GSM_A_PDU_TYPE_GM, DE_NBIFOM_CONT, NULL);
7340 ELEM_OPT_TLV_E(0x7B, GSM_A_PDU_TYPE_GM, DE_EXT_PRO_CONF_OPT, NULL);
7342 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
7346 * [8] 9.5.9 Modify PDP context request (Network to MS direction)
7347 * Direction: network to MS
7350 dtap_sm_mod_pdp_req_net(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
7352 guint32 curr_offset;
7356 curr_offset = offset;
7359 pinfo->p2p_dir = P2P_DIR_UNKNOWN;
7361 pinfo->link_dir = P2P_DIR_DL;
7363 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_RAD_PRIO, NULL, ei_gsm_a_gm_missing_mandatory_element);
7365 /* This is done automatically */
7366 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_SPARE, NULL, ei_gsm_a_gm_missing_mandatory_element);
7371 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_LLC_SAPI, " - Requested LLC SAPI", ei_gsm_a_gm_missing_mandatory_element);
7373 ELEM_MAND_LV( GSM_A_PDU_TYPE_GM, DE_QOS, " - New QoS", ei_gsm_a_gm_missing_mandatory_element);
7375 ELEM_OPT_TLV( 0x2B, GSM_A_PDU_TYPE_GM, DE_PD_PRO_ADDR, " - PDP address");
7377 ELEM_OPT_TLV( 0x34, GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID, NULL);
7379 ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL);
7381 ELEM_OPT_TLV( 0x36, GSM_A_PDU_TYPE_GM, DE_TRAFFIC_FLOW_TEMPLATE, NULL);
7383 ELEM_OPT_TV_SHORT(0xC0 , GSM_A_PDU_TYPE_GM, DE_SM_WLAN_OFFLOAD_ACCEPT, " - WLAN offload indication");
7385 ELEM_OPT_TLV(0x33, GSM_A_PDU_TYPE_GM, DE_NBIFOM_CONT, NULL);
7387 ELEM_OPT_TLV_E(0x7B, GSM_A_PDU_TYPE_GM, DE_EXT_PRO_CONF_OPT, NULL);
7389 ELEM_OPT_TLV(0x5C, GSM_A_PDU_TYPE_GM, DE_EXT_QOS, NULL);
7391 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
7395 * [8] 9.5.10 Modify PDP context request (MS to network direction)
7396 * Direction: MS to network
7399 dtap_sm_mod_pdp_req_ms(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
7401 guint32 curr_offset;
7405 curr_offset = offset;
7408 pinfo->p2p_dir = P2P_DIR_UNKNOWN;
7410 pinfo->link_dir = P2P_DIR_UL;
7412 ELEM_OPT_TV( 0x32, GSM_A_PDU_TYPE_GM, DE_LLC_SAPI, " - Requested LLC SAPI" );
7414 ELEM_OPT_TLV( 0x30, GSM_A_PDU_TYPE_GM, DE_QOS, " - Requested new QoS" );
7416 ELEM_OPT_TLV( 0x31, GSM_A_PDU_TYPE_GM, DE_TRAFFIC_FLOW_TEMPLATE, " - New TFT" );
7418 ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL);
7420 ELEM_OPT_TV_SHORT(0xC0, GSM_A_PDU_TYPE_GM, DE_DEVICE_PROPERTIES, NULL);
7422 ELEM_OPT_TLV(0x33, GSM_A_PDU_TYPE_GM, DE_NBIFOM_CONT, NULL);
7424 ELEM_OPT_TLV_E(0x7B, GSM_A_PDU_TYPE_GM, DE_EXT_PRO_CONF_OPT, NULL);
7426 ELEM_OPT_TLV(0x5C, GSM_A_PDU_TYPE_GM, DE_EXT_QOS, NULL);
7428 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
7432 * [8] 9.5.11 Modify PDP context accept (MS to network direction)
7433 * Direction: MS to network
7436 dtap_sm_mod_pdp_acc_ms(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
7438 guint32 curr_offset;
7442 curr_offset = offset;
7445 pinfo->p2p_dir = P2P_DIR_UNKNOWN;
7447 pinfo->link_dir = P2P_DIR_UL;
7449 ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL);
7451 ELEM_OPT_TLV(0x33, GSM_A_PDU_TYPE_GM, DE_NBIFOM_CONT, NULL);
7453 ELEM_OPT_TLV_E(0x7B, GSM_A_PDU_TYPE_GM, DE_EXT_PRO_CONF_OPT, NULL);
7455 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
7459 * [8] 9.5.12 Modify PDP context accept (Network to MS direction)
7460 * Direction: Network to MS
7463 dtap_sm_mod_pdp_acc_net(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
7465 guint32 curr_offset;
7469 curr_offset = offset;
7472 pinfo->p2p_dir = P2P_DIR_UNKNOWN;
7474 pinfo->link_dir = P2P_DIR_DL;
7476 ELEM_OPT_TLV( 0x30, GSM_A_PDU_TYPE_GM, DE_QOS, " - Negotiated QoS" );
7478 ELEM_OPT_TV( 0x32, GSM_A_PDU_TYPE_GM, DE_LLC_SAPI, " - Negotiated LLC SAPI" );
7480 ELEM_OPT_TV_SHORT ( 0x80, GSM_A_PDU_TYPE_GM, DE_RAD_PRIO, " - New radio priority" );
7482 ELEM_OPT_TLV( 0x34, GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID, NULL);
7484 ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL);
7486 ELEM_OPT_TV_SHORT(0xC0 , GSM_A_PDU_TYPE_GM, DE_SM_WLAN_OFFLOAD_ACCEPT, " - WLAN offload indication");
7488 ELEM_OPT_TLV(0x33, GSM_A_PDU_TYPE_GM, DE_NBIFOM_CONT, NULL);
7490 ELEM_OPT_TLV_E(0x7B, GSM_A_PDU_TYPE_GM, DE_EXT_PRO_CONF_OPT, NULL);
7492 ELEM_OPT_TLV(0x5C, GSM_A_PDU_TYPE_GM, DE_EXT_QOS, NULL);
7494 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
7498 * [8] 9.5.13 Modify PDP Context Reject
7502 dtap_sm_mod_pdp_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
7504 guint32 curr_offset;
7508 curr_offset = offset;
7511 pinfo->p2p_dir = P2P_DIR_UNKNOWN;
7512 /* Network or the MS; do not reset link_dir in case it was set by lower layers */
7513 /* pinfo->link_dir = LINK_DIR_UNKNOWN; */
7516 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_SM_CAUSE, NULL, ei_gsm_a_gm_missing_mandatory_element);
7518 ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL);
7520 ELEM_OPT_TLV(0x37, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - Back-off timer value");
7522 ELEM_OPT_TLV(0x6B, GSM_A_PDU_TYPE_GM, DE_RE_ATTEMPT_IND, NULL);
7524 ELEM_OPT_TLV(0x33, GSM_A_PDU_TYPE_GM, DE_NBIFOM_CONT, NULL);
7526 ELEM_OPT_TLV_E(0x7B, GSM_A_PDU_TYPE_GM, DE_EXT_PRO_CONF_OPT, NULL);
7528 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
7532 * [8] 9.5.14 Deactivate PDP context request
7536 dtap_sm_deact_pdp_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
7538 guint32 curr_offset;
7542 curr_offset = offset;
7545 pinfo->p2p_dir = P2P_DIR_UNKNOWN;
7546 pinfo->link_dir = LINK_DIR_UNKNOWN;
7548 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_SM_CAUSE, NULL, ei_gsm_a_gm_missing_mandatory_element);
7550 ELEM_OPT_TV_SHORT( 0x90, GSM_A_PDU_TYPE_GM, DE_TEAR_DOWN_IND, NULL);
7552 ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL);
7554 ELEM_OPT_TLV( 0x35, GSM_A_PDU_TYPE_GM, DE_MBMS_PROT_CONF_OPT, NULL);
7556 ELEM_OPT_TLV(0x37, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - T3396 value");
7558 ELEM_OPT_TV_SHORT(0xC0 , GSM_A_PDU_TYPE_GM, DE_SM_WLAN_OFFLOAD_ACCEPT, " - WLAN offload indication");
7560 ELEM_OPT_TLV_E(0x7B, GSM_A_PDU_TYPE_GM, DE_EXT_PRO_CONF_OPT, NULL);
7562 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
7566 * [8] 9.5.15 Deactivate PDP context accept
7570 dtap_sm_deact_pdp_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
7572 guint32 curr_offset;
7576 curr_offset = offset;
7579 pinfo->p2p_dir = P2P_DIR_UNKNOWN;
7580 pinfo->link_dir = LINK_DIR_UNKNOWN;
7582 ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL);
7584 ELEM_OPT_TLV( 0x35, GSM_A_PDU_TYPE_GM, DE_MBMS_PROT_CONF_OPT, NULL);
7586 ELEM_OPT_TLV_E(0x7B, GSM_A_PDU_TYPE_GM, DE_EXT_PRO_CONF_OPT, NULL);
7588 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
7592 * [8] 9.5.15a Request Secondary PDP Context Activation
7593 * Direction: network to MS
7596 dtap_sm_req_sec_pdp_act(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
7598 guint32 curr_offset;
7602 curr_offset = offset;
7605 pinfo->p2p_dir = P2P_DIR_UNKNOWN;
7606 pinfo->link_dir = P2P_DIR_DL;
7608 /* Required QoS Quality of service 10.5.6.5 M LV 13-17 */
7609 ELEM_MAND_LV( GSM_A_PDU_TYPE_GM, DE_QOS, " - Required QoS", ei_gsm_a_gm_missing_mandatory_element);
7611 /* Linked TI Linked TI 10.5.6.7 M LV 2-3 */
7612 ELEM_MAND_LV( GSM_A_PDU_TYPE_GM, DE_LINKED_TI, NULL, ei_gsm_a_gm_missing_mandatory_element);
7614 /* 36 TFT Traffic Flow Template 10.5.6.12 O TLV 3-257 */
7615 ELEM_OPT_TLV( 0x36, GSM_A_PDU_TYPE_GM, DE_TRAFFIC_FLOW_TEMPLATE, NULL);
7617 /* 27 Protocol configuration options Protocol configuration options 10.5.6.3 O TLV 3 - 253 */
7618 ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL);
7620 /* C- WLAN offload acceptability 10.5.6.20 O TV 1 */
7621 ELEM_OPT_TV_SHORT(0xC0 , GSM_A_PDU_TYPE_GM, DE_SM_WLAN_OFFLOAD_ACCEPT, " - WLAN offload indication");
7623 ELEM_OPT_TLV(0x33, GSM_A_PDU_TYPE_GM, DE_NBIFOM_CONT, NULL);
7625 ELEM_OPT_TLV_E(0x7B, GSM_A_PDU_TYPE_GM, DE_EXT_PRO_CONF_OPT, NULL);
7627 ELEM_OPT_TLV(0x5C, GSM_A_PDU_TYPE_GM, DE_EXT_QOS, NULL);
7629 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
7633 * [8] 9.5.15b Request Secondary PDP Context Activation Reject
7634 * Direction: MS to network
7637 dtap_sm_req_sec_pdp_act_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
7639 guint32 curr_offset;
7643 curr_offset = offset;
7646 pinfo->p2p_dir = P2P_DIR_UNKNOWN;
7647 pinfo->link_dir = P2P_DIR_UL;
7649 /* SM cause SM cause 10.5.6.6 M V 1 */
7650 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_SM_CAUSE, NULL, ei_gsm_a_gm_missing_mandatory_element);
7652 /* 27 Protocol configuration options Protocol configuration options 10.5.6.3 O TLV 3 - 253 */
7653 ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL);
7655 ELEM_OPT_TLV(0x33, GSM_A_PDU_TYPE_GM, DE_NBIFOM_CONT, NULL);
7657 ELEM_OPT_TLV_E(0x7B, GSM_A_PDU_TYPE_GM, DE_EXT_PRO_CONF_OPT, NULL);
7659 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
7663 * [8] 9.5.16a Notification
7664 * Direction: network to MS
7667 dtap_sm_notif(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
7669 guint32 curr_offset;
7673 curr_offset = offset;
7676 pinfo->p2p_dir = P2P_DIR_UNKNOWN;
7677 pinfo->link_dir = P2P_DIR_DL;
7679 ELEM_MAND_LV( GSM_A_PDU_TYPE_GM, DE_SM_NOTIF_IND, NULL, ei_gsm_a_gm_missing_mandatory_element);
7681 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
7685 * [8] 9.5.21 SM Status
7689 dtap_sm_status(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
7691 guint32 curr_offset;
7695 curr_offset = offset;
7698 pinfo->p2p_dir = P2P_DIR_UNKNOWN;
7699 pinfo->link_dir = LINK_DIR_UNKNOWN;
7701 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_SM_CAUSE, NULL, ei_gsm_a_gm_missing_mandatory_element);
7703 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
7707 * [9] 9.5.22 Activate MBMS Context Request
7708 * Direction: MS to network
7711 dtap_sm_act_mbms_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
7713 guint32 curr_offset;
7717 curr_offset = offset;
7720 pinfo->p2p_dir = P2P_DIR_RECV;
7722 /* Requested MBMS NSAPI Enhanced Network service access point identifier 10.5.6.16 M V */
7723 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_ENH_NSAPI, " - Requested MBMS NSAPI", ei_gsm_a_gm_missing_mandatory_element);
7725 /* Requested LLC SAPI LLC service access point identifier 10.5.6.9 M V 1 */
7726 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_LLC_SAPI, " - Requested LLC SAPI", ei_gsm_a_gm_missing_mandatory_element);
7728 /* Supported MBMS bearer capabilities MBMS bearer capabilities 10.5.6.14 M LV 2 - 3 */
7729 ELEM_MAND_LV( GSM_A_PDU_TYPE_GM, DE_MBMS_BEARER_CAP, NULL, ei_gsm_a_gm_missing_mandatory_element);
7731 /* Requested multicast address Packet data protocol address 10.5.6.4 M LV 3 - 19 */
7732 ELEM_MAND_LV( GSM_A_PDU_TYPE_GM, DE_PD_PRO_ADDR, " - Requested multicast address", ei_gsm_a_gm_missing_mandatory_element);
7734 /* Access point name Access point name 10.5.6.1 M LV 2 - 101 */
7735 ELEM_MAND_LV( GSM_A_PDU_TYPE_GM, DE_ACC_POINT_NAME, NULL, ei_gsm_a_gm_missing_mandatory_element);
7737 /* 35 MBMS protocol configuration options MBMS protocol configuration options 10.5.6.15 O TLV 3 - 253 */
7738 ELEM_OPT_TLV( 0x35, GSM_A_PDU_TYPE_GM, DE_MBMS_PROT_CONF_OPT, NULL);
7740 ELEM_OPT_TV_SHORT(0xC0, GSM_A_PDU_TYPE_GM, DE_DEVICE_PROPERTIES, NULL);
7742 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
7746 * [9] 9.5.23 Activate MBMS Context Accept
7747 * Direction: network to MS
7750 dtap_sm_act_mbms_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
7752 guint32 curr_offset;
7756 curr_offset = offset;
7759 pinfo->p2p_dir = P2P_DIR_SENT;
7761 ELEM_MAND_LV( GSM_A_PDU_TYPE_GM, DE_TMGI, NULL, ei_gsm_a_gm_missing_mandatory_element);
7763 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_LLC_SAPI, " - Negotiated LLC SAPI", ei_gsm_a_gm_missing_mandatory_element);
7765 ELEM_OPT_TLV( 0x35, GSM_A_PDU_TYPE_GM, DE_MBMS_PROT_CONF_OPT, NULL);
7767 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
7771 * [9] 9.5.24 Activate MBMS Context Reject
7772 * Direction: network to MS
7775 dtap_sm_act_mbms_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
7777 guint32 curr_offset;
7781 curr_offset = offset;
7784 pinfo->p2p_dir = P2P_DIR_SENT;
7786 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_SM_CAUSE, NULL, ei_gsm_a_gm_missing_mandatory_element);
7788 ELEM_OPT_TLV( 0x35, GSM_A_PDU_TYPE_GM, DE_MBMS_PROT_CONF_OPT, NULL);
7790 ELEM_OPT_TLV(0x37, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - T3396 value");
7792 ELEM_OPT_TLV(0x6B, GSM_A_PDU_TYPE_GM, DE_RE_ATTEMPT_IND, NULL);
7794 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
7798 * [9] 9.5.25 Request MBMS Context Activation
7799 * Direction: network to MS
7802 dtap_sm_req_mbms_act(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
7804 guint32 curr_offset;
7808 curr_offset = offset;
7811 pinfo->p2p_dir = P2P_DIR_SENT;
7813 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_NET_SAPI, " - Linked NSAPI", ei_gsm_a_gm_missing_mandatory_element);
7815 ELEM_MAND_LV( GSM_A_PDU_TYPE_GM, DE_PD_PRO_ADDR, " - Offered multicast address", ei_gsm_a_gm_missing_mandatory_element);
7817 ELEM_MAND_LV( GSM_A_PDU_TYPE_GM, DE_ACC_POINT_NAME, NULL, ei_gsm_a_gm_missing_mandatory_element);
7819 ELEM_OPT_TLV( 0x35, GSM_A_PDU_TYPE_GM, DE_MBMS_PROT_CONF_OPT, NULL);
7821 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
7825 * [8] 9.5.26 Request MBMS Context Activation Reject
7826 * Direction: MS to network
7829 dtap_sm_req_mbms_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len)
7831 guint32 curr_offset;
7835 curr_offset = offset;
7838 pinfo->p2p_dir = P2P_DIR_RECV;
7840 ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_SM_CAUSE, NULL, ei_gsm_a_gm_missing_mandatory_element);
7842 ELEM_OPT_TLV( 0x35, GSM_A_PDU_TYPE_GM, DE_MBMS_PROT_CONF_OPT, NULL);
7844 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data);
7847 #define NUM_GSM_DTAP_MSG_GMM (sizeof(gsm_a_dtap_msg_gmm_strings)/sizeof(value_string))
7848 static gint ett_gsm_dtap_msg_gmm[NUM_GSM_DTAP_MSG_GMM];
7849 static void (*dtap_msg_gmm_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) = {
7850 dtap_gmm_attach_req, /* Attach Request */
7851 dtap_gmm_attach_acc, /* Attach Accept */
7852 dtap_gmm_attach_com, /* Attach Complete */
7853 dtap_gmm_attach_rej, /* Attach Reject */
7854 dtap_gmm_detach_req, /* Detach Request */
7855 dtap_gmm_detach_acc, /* Detach Accept */
7856 dtap_gmm_rau_req, /* Routing Area Update Request */
7857 dtap_gmm_rau_acc, /* Routing Area Update Accept */
7858 dtap_gmm_rau_com, /* Routing Area Update Complete */
7859 dtap_gmm_rau_rej, /* Routing Area Update Reject */
7860 dtap_gmm_service_req, /* Service Request */
7861 dtap_gmm_service_acc, /* Service Accept */
7862 dtap_gmm_service_rej, /* Service Reject */
7863 dtap_gmm_ptmsi_realloc_cmd, /* P-TMSI Reallocation Command */
7864 dtap_gmm_ptmsi_realloc_com, /* P-TMSI Reallocation Complete */
7865 dtap_gmm_auth_ciph_req, /* Authentication and Ciphering Req */
7866 dtap_gmm_auth_ciph_resp, /* Authentication and Ciphering Resp */
7867 dtap_gmm_auth_ciph_rej, /* Authentication and Ciphering Rej */
7868 dtap_gmm_ident_req, /* Identity Request */
7869 dtap_gmm_ident_res, /* Identity Response */
7870 dtap_gmm_auth_ciph_fail, /* Authentication and Ciphering Failure */
7871 dtap_gmm_status, /* GMM Status */
7872 dtap_gmm_information, /* GMM Information */
7876 #define NUM_GSM_DTAP_MSG_SM (sizeof(gsm_a_dtap_msg_sm_strings)/sizeof(value_string))
7877 static gint ett_gsm_dtap_msg_sm[NUM_GSM_DTAP_MSG_SM];
7878 static void (*dtap_msg_sm_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) = {
7879 dtap_sm_act_pdp_req, /* Activate PDP Context Request */
7880 dtap_sm_act_pdp_acc, /* Activate PDP Context Accept */
7881 dtap_sm_act_pdp_rej, /* Activate PDP Context Reject */
7882 dtap_sm_req_pdp_act, /* Request PDP Context Activation */
7883 dtap_sm_req_pdp_act_rej, /* Request PDP Context Activation rej. */
7884 dtap_sm_deact_pdp_req, /* Deactivate PDP Context Request */
7885 dtap_sm_deact_pdp_acc, /* Deactivate PDP Context Accept */
7886 dtap_sm_mod_pdp_req_net, /* Modify PDP Context Request(Network to MS direction) */
7887 dtap_sm_mod_pdp_acc_ms, /* Modify PDP Context Accept (MS to network direction) */
7888 dtap_sm_mod_pdp_req_ms, /* Modify PDP Context Request(MS to network direction) */
7889 dtap_sm_mod_pdp_acc_net, /* Modify PDP Context Accept (Network to MS direction) */
7890 dtap_sm_mod_pdp_rej, /* Modify PDP Context Reject */
7891 dtap_sm_act_sec_pdp_req, /* Activate Secondary PDP Context Request */
7892 dtap_sm_act_sec_pdp_acc, /* Activate Secondary PDP Context Accept */
7893 dtap_sm_act_sec_pdp_rej, /* Activate Secondary PDP Context Reject */
7894 NULL, /* Reserved: was allocated in earlier phases of the protocol */
7895 NULL, /* Reserved: was allocated in earlier phases of the protocol */
7896 NULL, /* Reserved: was allocated in earlier phases of the protocol */
7897 NULL, /* Reserved: was allocated in earlier phases of the protocol */
7898 NULL, /* Reserved: was allocated in earlier phases of the protocol */
7899 dtap_sm_status, /* SM Status */
7900 dtap_sm_act_mbms_req, /* Activate MBMS Context Request */
7901 dtap_sm_act_mbms_acc, /* Activate MBMS Context Accept */
7902 dtap_sm_act_mbms_rej, /* Activate MBMS Context Reject */
7903 dtap_sm_req_mbms_act, /* Request MBMS Context Activation */
7904 dtap_sm_req_mbms_rej, /* Request MBMS Context Activation Reject */
7905 dtap_sm_req_sec_pdp_act, /* Request Secondary PDP Context Activation */
7906 dtap_sm_req_sec_pdp_act_rej, /* Request Secondary PDP Context Activation Reject */
7907 dtap_sm_notif, /* Notification */
7912 get_gmm_msg_params(guint8 oct, const gchar **msg_str, int *ett_tree, int *hf_idx, msg_fcn *dtap_msg_fcn)
7916 *msg_str = try_val_to_str_idx_ext((guint32) (oct & DTAP_GMM_IEI_MASK), &gsm_a_dtap_msg_gmm_strings_ext, &idx);
7917 *hf_idx = hf_gsm_a_dtap_msg_gmm_type;
7918 if (*msg_str != NULL) {
7919 *ett_tree = ett_gsm_dtap_msg_gmm[idx];
7920 *dtap_msg_fcn = dtap_msg_gmm_fcn[idx];
7927 get_sm_msg_params(guint8 oct, const gchar **msg_str, int *ett_tree, int *hf_idx, msg_fcn *dtap_msg_fcn)
7931 *msg_str = try_val_to_str_idx_ext((guint32) (oct & DTAP_SM_IEI_MASK), &gsm_a_dtap_msg_sm_strings_ext, &idx);
7932 *hf_idx = hf_gsm_a_dtap_msg_sm_type;
7933 if (*msg_str != NULL) {
7934 *ett_tree = ett_gsm_dtap_msg_sm[idx];
7935 *dtap_msg_fcn = dtap_msg_sm_fcn[idx];
7941 /* Register the protocol with Wireshark */
7943 proto_register_gsm_a_gm(void)
7948 /* Setup list of header fields */
7950 static hf_register_info hf[] = {
7951 { &hf_gsm_a_dtap_msg_gmm_type,
7952 { "DTAP GPRS Mobility Management Message Type", "gsm_a.dtap.msg_gmm_type",
7953 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &gsm_a_dtap_msg_gmm_strings_ext, 0x0,
7956 { &hf_gsm_a_dtap_msg_sm_type,
7957 { "DTAP GPRS Session Management Message Type", "gsm_a.dtap.msg_sm_type",
7958 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &gsm_a_dtap_msg_sm_strings_ext, 0x0,
7961 { &hf_gsm_a_gm_elem_id,
7962 { "Element ID", "gsm_a.gm.elem_id",
7963 FT_UINT8, BASE_HEX, NULL, 0,
7966 { &hf_gsm_a_sm_qos_delay_cls,
7967 { "Quality of Service Delay class", "gsm_a.gm.sm.qos.delay_cls",
7968 FT_UINT8, BASE_DEC, VALS(gsm_a_sm_qos_delay_cls_vals), 0x38,
7971 { &hf_gsm_a_sm_qos_reliability_cls,
7972 { "Reliability class", "gsm_a.gm.sm.qos.reliability_cls",
7973 FT_UINT8, BASE_DEC, VALS(gsm_a_sm_qos_reliability_vals), 0x07,
7976 { &hf_gsm_a_sm_qos_traffic_cls,
7977 { "Traffic class", "gsm_a.gm.sm.qos.traffic_cls",
7978 FT_UINT8, BASE_DEC, VALS(gsm_a_sm_qos_traffic_cls_vals), 0xe0,
7981 { &hf_gsm_a_sm_qos_del_order,
7982 { "Delivery order", "gsm_a.gm.sm.qos.del_order",
7983 FT_UINT8, BASE_DEC, VALS(gsm_a_sm_qos_del_order_vals), 0x18,
7986 { &hf_gsm_a_sm_qos_del_of_err_sdu,
7987 { "Delivery of erroneous SDUs", "gsm_a.gm.sm.qos.del_of_err_sdu",
7988 FT_UINT8, BASE_DEC, VALS(gsm_a_sm_qos_del_of_err_sdu_vals), 0x07,
7991 { &hf_gsm_a_sm_qos_ber,
7992 { "Residual Bit Error Rate (BER)", "gsm_a.gm.sm.qos.ber",
7993 FT_UINT8, BASE_DEC, VALS(gsm_a_sm_qos_ber_vals), 0xf0,
7996 { &hf_gsm_a_sm_qos_sdu_err_rat,
7997 { "SDU error ratio", "gsm_a.gm.sm.qos.sdu_err_rat",
7998 FT_UINT8, BASE_DEC, VALS(gsm_a_sm_qos_sdu_err_rat_vals), 0x0f,
8001 { &hf_gsm_a_sm_qos_traff_hdl_pri,
8002 { "Traffic handling priority", "gsm_a.gm.sm.qos.traff_hdl_pri",
8003 FT_UINT8, BASE_DEC, VALS(gsm_a_sm_qos_traff_hdl_pri_vals), 0x03,
8006 { &hf_gsm_a_gmm_split_pg_cycle_code,
8007 { "SPLIT PG CYCLE CODE", "gsm_a.gm.gmm.split_pg_cycle_code",
8008 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &gsm_a_gmm_split_pg_cycle_code_strings_ext, 0x00,
8011 { &hf_gsm_a_gmm_split_on_ccch,
8012 { "SPLIT on CCCH", "gsm_a.gm.gmm.split_on_ccch",
8013 FT_BOOLEAN, 8, TFS(&gsm_a_gmm_split_on_ccch_value), 0x08,
8016 { &hf_gsm_a_gmm_non_drx_timer,
8017 { "Non-DRX timer", "gsm_a.gm.gmm.non_drx_timer",
8018 FT_UINT8, BASE_DEC, VALS(gsm_a_gmm_non_drx_timer_strings), 0x07,
8021 { &hf_gsm_a_gmm_cn_spec_drx_cycle_len_coef,
8022 { "CN Specific DRX cycle length coefficient", "gsm_a.gm.gmm.cn_spec_drx_cycle_len_coef",
8023 FT_UINT8, BASE_DEC|BASE_RANGE_STRING, RVALS(gsm_a_gmm_cn_spec_drx_cycle_len_coef_strings), 0xf0,
8026 { &hf_gsm_a_sm_tft_op_code,
8027 { "TFT operation code", "gsm_a.gm.sm.tft.op_code",
8028 FT_UINT8, BASE_DEC, VALS(gsm_a_sm_tft_op_code_vals), 0xe0,
8031 { &hf_gsm_a_sm_tft_e_bit,
8032 { "E bit", "gsm_a.gm.sm.tft.e_bit",
8033 FT_BOOLEAN, 8, TFS(&gsm_a_sm_tft_e_bit), 0x10,
8036 { &hf_gsm_a_sm_tft_pkt_flt,
8037 { "Number of packet filters", "gsm_a.gm.sm.tft.pkt_flt",
8038 FT_UINT8, BASE_DEC, NULL, 0x0f,
8041 { &hf_gsm_a_sm_tft_pkt_flt_dir,
8042 { "Packet filter direction", "gsm_a.gm.sm.tft.pkt_flt_dir",
8043 FT_UINT8, BASE_DEC, VALS(gsm_a_sm_tft_pkt_flt_dir_vals), 0x30,
8046 { &hf_gsm_a_sm_tft_pkt_flt_id,
8047 { "Packet filter identifier", "gsm_a.gm.sm.tft.pkt_flt_id",
8048 FT_UINT8, BASE_DEC, NULL, 0x0f,
8051 { &hf_gsm_a_sm_ip4_address,
8052 { "IPv4 address", "gsm_a.gm.sm.ip4_address",
8053 FT_IPv4, BASE_NONE, NULL, 0x0,
8056 { &hf_gsm_a_sm_ip4_mask,
8057 { "IPv4 address mask", "gsm_a.gm.sm.ip4_mask",
8058 FT_IPv4, BASE_NONE, NULL, 0x0,
8061 { &hf_gsm_a_sm_ip6_address,
8062 { "IPv6 address", "gsm_a.gm.sm.ip6_address",
8063 FT_IPv6, BASE_NONE, NULL, 0x0,
8066 { &hf_gsm_a_sm_ip6_mask,
8067 { "IPv6 address mask", "gsm_a.gm.sm.ip6_mask",
8068 FT_IPv6, BASE_NONE, NULL, 0x0,
8071 { &hf_gsm_a_sm_ip6_prefix_length,
8072 { "IPv6 prefix length", "gsm_a.gm.sm.ip6_prefix_length",
8073 FT_UINT8, BASE_DEC, NULL, 0x0,
8076 { &hf_gsm_a_sm_tft_protocol_header,
8077 { "Protocol/header", "gsm_a.gm.sm.tft.protocol_header",
8078 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ipproto_val_ext, 0x0,
8081 { &hf_gsm_a_sm_tft_port,
8082 { "Port", "gsm_a.gm.sm.tft.port",
8083 FT_UINT16, BASE_DEC, NULL, 0x0,
8086 { &hf_gsm_a_sm_tft_port_low,
8087 { "Low limit port", "gsm_a.gm.sm.tft.port_low",
8088 FT_UINT16, BASE_DEC, NULL, 0x0,
8091 { &hf_gsm_a_sm_tft_port_high,
8092 { "High limit port", "gsm_a.gm.sm.tft.port_high",
8093 FT_UINT16, BASE_DEC, NULL, 0x0,
8096 { &hf_gsm_a_sm_tft_security,
8097 { "IPSec security parameter index", "gsm_a.gm.sm.tft.security",
8098 FT_UINT32, BASE_HEX, NULL, 0x0,
8101 { &hf_gsm_a_sm_tft_traffic_class,
8102 { "Type of service/Traffic class field", "gsm_a.gm.sm.tft.traffic_class",
8103 FT_UINT8, BASE_HEX, NULL, 0x0,
8106 { &hf_gsm_a_sm_tft_traffic_mask,
8107 { "Mask field", "gsm_a.gm.sm.tft.traffic_mask",
8108 FT_UINT8, BASE_HEX, NULL, 0x0,
8111 { &hf_gsm_a_sm_tft_flow_label_type,
8112 { "Flow Label Type", "gsm_a.gm.sm.tft.flow_label_type",
8113 FT_UINT24, BASE_HEX, NULL, 0x0FFFFF,
8116 { &hf_gsm_a_sm_tft_param_id,
8117 { "Parameter identifier", "gsm_a.gm.sm.tft.param_id",
8118 FT_UINT8, BASE_DEC, VALS(gsm_a_sm_tft_param_id_vals), 0x0,
8121 { &hf_gsm_a_gmm_ptmsi_sig,
8122 { "P-TMSI Signature", "gsm_a.gm.gmm.ptmsi_sig",
8123 FT_UINT24, BASE_HEX, NULL, 0x0,
8126 { &hf_gsm_a_gmm_ptmsi_sig2,
8127 { "P-TMSI Signature 2", "gsm_a.gm.gmm.ptmsi_sig2",
8128 FT_UINT24, BASE_HEX, NULL, 0x0,
8131 { &hf_gsm_a_gm_acc_tech_type,
8132 { "Access Technology Type", "gsm_a.gm.gmm.acc_tech_type",
8133 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_acc_tech_type_vals), 0x0,
8136 { &hf_gsm_a_gm_acc_cap_struct_len,
8137 { "Length in bits", "gsm_a.gm.gmm.acc_cap_struct_len",
8138 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
8141 { &hf_gsm_a_gm_sms_value,
8142 { "SMS_VALUE (Switch-Measure-Switch)", "gsm_a.gm.gmm.sms",
8143 FT_UINT8, BASE_DEC, VALS(gsm_a_sms_vals), 0x0,
8146 { &hf_gsm_a_gm_sm_value,
8147 { "(SM_VALUE) Switch-Measure", "gsm_a.gm.gmm.sm",
8148 FT_UINT8, BASE_DEC, VALS(gsm_a_sms_vals), 0x0,
8151 { &hf_gsm_a_gm_link_dir,
8152 { "Link direction", "gsm_a.gm.sm.link_dir",
8153 FT_INT32, BASE_DEC, VALS(gsm_a_gm_link_dir_vals), 0x0,
8156 { &hf_gsm_a_gm_cause,
8157 { "GMM Cause", "gsm_a.gm.gmm.cause",
8158 FT_UINT8, BASE_DEC|BASE_RANGE_STRING, RVALS(gmm_cause_vals), 0x0,
8161 { &hf_gsm_a_gm_add_upd_type,
8162 { "Additional update type", "gsm_a.gm.gmm.add_upd_type",
8163 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_gm_add_upd_type_value), 0x0,
8167 { "Follow-on proceed", "gsm_a.gm.gmm.fop",
8168 FT_BOOLEAN, 8, NULL, 0x08,
8171 { &hf_gsm_a_gm_res_of_attach,
8172 { "Result of attach", "gsm_a.gm.gmm.res_of_attach",
8173 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_res_of_attach_vals), 0x07,
8176 { &hf_gsm_a_gm_type_of_ciph_alg,
8177 { "Type of ciphering algorithm", "gsm_a.gm.gmm.type_of_ciph_alg",
8178 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_type_of_ciph_alg_vals), 0x07,
8181 { &hf_gsm_a_gm_type_of_integ_alg,
8182 { "Type of integrity algorithm", "gsm_a.gm.gmm.type_of_integ_alg",
8183 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_type_of_integ_alg_vals), 0x07,
8186 { &hf_gsm_a_gm_imeisv_req,
8187 { "IMEISV request", "gsm_a.gm.gmm.imeisv_req",
8188 FT_UINT8, BASE_DEC|BASE_RANGE_STRING, RVALS(gsm_a_gm_imeisv_req_vals), 0x00,
8191 { &hf_gsm_a_gm_nsapi,
8192 { "NSAPI", "gsm_a.gm.gmm.nsapi",
8193 FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
8196 { &hf_gsm_a_gm_ac_ref_nr,
8197 { "A&C reference number", "gsm_a.gm.gmm.ac_ref_nr",
8198 FT_UINT8, BASE_DEC, NULL, 0x0,
8201 { &hf_gsm_a_gm_force_to_standby,
8202 { "Force to standby", "gsm_a.gm.gmm.force_to_standby",
8203 FT_UINT8, BASE_DEC|BASE_RANGE_STRING, RVALS(gsm_a_gm_force_to_standby_vals), 0x00,
8206 { &hf_gsm_a_gm_serv_type,
8207 { "Service type", "gsm_a.gm.gmm.serv_type",
8208 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_serv_type_vals), 0x00,
8212 { "Follow-on request pending", "gsm_a.gm.gmm.for",
8213 FT_BOOLEAN, 8, NULL, 0x08,
8216 { &hf_gsm_a_gm_type_of_attach,
8217 { "Type of attach", "gsm_a.gm.gmm.type_of_attach",
8218 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_type_of_attach_vals), 0x07,
8221 { &hf_gsm_a_gm_tmsi_flag,
8222 { "TMSI flag", "gsm_a.gm.gmm.tmsi_flag",
8223 FT_BOOLEAN, 8, TFS(&gsm_a_gm_tmsi_flag_value), 0x01,
8226 { &hf_gsm_a_gm_power_off,
8227 { "Power off", "gsm_a.gm.gmm.power_off",
8228 FT_BOOLEAN, 8, TFS(&gsm_a_gm_power_off_value), 0x08,
8231 { &hf_gsm_a_gm_type_of_detach_mo,
8232 { "Type of detach", "gsm_a.gm.gmm.type_of_detach",
8233 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_type_of_detach_mo_vals), 0x07,
8236 { &hf_gsm_a_gm_type_of_detach_mt,
8237 { "Type of detach", "gsm_a.gm.gmm.type_of_detach",
8238 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_type_of_detach_mt_vals), 0x07,
8241 { &hf_gsm_a_gm_update_type,
8242 { "Update type", "gsm_a.gm.gmm.update_type",
8243 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_update_type_vals), 0x07,
8246 { &hf_gsm_a_gm_gprs_timer,
8247 { "GPRS Timer", "gsm_a.gm.gmm.gprs_timer",
8248 FT_UINT8, BASE_HEX, NULL, 0x0,
8251 { &hf_gsm_a_gm_gprs_timer_unit,
8252 { "Unit", "gsm_a.gm.gmm.gprs_timer_unit",
8253 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_gprs_timer_unit_vals), 0xe0,
8256 { &hf_gsm_a_gm_gprs_timer_value,
8257 { "Timer value", "gsm_a.gm.gmm.gprs_timer_value",
8258 FT_UINT8, BASE_DEC, NULL, 0x1f,
8261 { &hf_gsm_a_gm_gprs_timer2,
8262 { "GPRS Timer", "gsm_a.gm.gmm.gprs_timer2",
8263 FT_UINT8, BASE_HEX, NULL, 0x0,
8266 { &hf_gsm_a_gm_gprs_timer2_unit,
8267 { "Unit", "gsm_a.gm.gmm.gprs_timer2_unit",
8268 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_gprs_timer_unit_vals), 0xe0,
8271 { &hf_gsm_a_gm_gprs_timer2_value,
8272 { "Timer value", "gsm_a.gm.gmm.gprs_timer2_value",
8273 FT_UINT8, BASE_DEC, NULL, 0x1f,
8276 { &hf_gsm_a_gm_gprs_timer3,
8277 { "GPRS Timer", "gsm_a.gm.gmm.gprs_timer3",
8278 FT_UINT8, BASE_HEX, NULL, 0x0,
8281 { &hf_gsm_a_gm_gprs_timer3_unit,
8282 { "Unit", "gsm_a.gm.gmm.gprs_timer3_unit",
8283 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_gprs_timer3_unit_vals), 0xe0,
8286 { &hf_gsm_a_gm_gprs_timer3_value,
8287 { "Timer value", "gsm_a.gm.gmm.gprs_timer3_value",
8288 FT_UINT8, BASE_DEC, NULL, 0x1f,
8291 { &hf_gsm_a_gm_nsapi_5_ul_stat,
8292 { "NSAPI(5) uplink status", "gsm_a.gm.gmm.nsapi_5_ul_stat",
8293 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_gm_nsapi_ul_stat_vals), 0x0,
8296 { &hf_gsm_a_gm_nsapi_6_ul_stat,
8297 { "NSAPI(6) uplink status", "gsm_a.gm.gmm.nsapi_6_ul_stat",
8298 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_gm_nsapi_ul_stat_vals), 0x0,
8301 { &hf_gsm_a_gm_nsapi_7_ul_stat,
8302 { "NSAPI(7) uplink status", "gsm_a.gm.gmm.nsapi_7_ul_stat",
8303 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_gm_nsapi_ul_stat_vals), 0x0,
8306 { &hf_gsm_a_gm_nsapi_8_ul_stat,
8307 { "NSAPI(8) uplink status", "gsm_a.gm.gmm.nsapi_8_ul_stat",
8308 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_gm_nsapi_ul_stat_vals), 0x0,
8311 { &hf_gsm_a_gm_nsapi_9_ul_stat,
8312 { "NSAPI(9) uplink status", "gsm_a.gm.gmm.nsapi_9_ul_stat",
8313 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_gm_nsapi_ul_stat_vals), 0x0,
8316 { &hf_gsm_a_gm_nsapi_10_ul_stat,
8317 { "NSAPI(10) uplink status", "gsm_a.gm.gmm.nsapi_10_ul_stat",
8318 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_gm_nsapi_ul_stat_vals), 0x0,
8321 { &hf_gsm_a_gm_nsapi_11_ul_stat,
8322 { "NSAPI(11) uplink status", "gsm_a.gm.gmm.nsapi_11_ul_stat",
8323 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_gm_nsapi_ul_stat_vals), 0x0,
8326 { &hf_gsm_a_gm_nsapi_12_ul_stat,
8327 { "NSAPI(12) uplink status", "gsm_a.gm.gmm.nsapi_12_ul_stat",
8328 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_gm_nsapi_ul_stat_vals), 0x0,
8331 { &hf_gsm_a_gm_nsapi_13_ul_stat,
8332 { "NSAPI(13) uplink status", "gsm_a.gm.gmm.nsapi_13_ul_stat",
8333 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_gm_nsapi_ul_stat_vals), 0x0,
8336 { &hf_gsm_a_gm_nsapi_14_ul_stat,
8337 { "NSAPI(14) uplink status", "gsm_a.gm.gmm.nsapi_14_ul_stat",
8338 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_gm_nsapi_ul_stat_vals), 0x0,
8341 { &hf_gsm_a_gm_nsapi_15_ul_stat,
8342 { "NSAPI(15) uplink status", "gsm_a.gm.gmm.nsapi_15_ul_stat",
8343 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_gm_nsapi_ul_stat_vals), 0x0,
8346 { &hf_gsm_a_gm_device_prop_low_prio,
8347 { "Low priority", "gsm_a.gm.gmm.device_prop_low_prio",
8348 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_gm_device_prop_low_prio_value), 0x0,
8352 { "APN", "gsm_a.gm.sm.apn",
8353 FT_STRING,BASE_NONE, NULL,0x0,
8356 { &hf_gsm_a_gm_pco_pid,
8357 { "Protocol or Container ID", "gsm_a.gm.sm.pco_pid",
8358 FT_UINT16, BASE_HEX, NULL, 0x0,
8361 { &hf_gsm_a_gm_pco_app_spec_info,
8362 { "Application specific information", "gsm_a.gm.sm.app_spec_info",
8363 FT_BYTES, BASE_NONE, NULL, 0x0,
8366 { &hf_gsm_a_gm_type_of_identity,
8367 { "Type of identity", "gsm_a.gm.gmm.type_of_identity",
8368 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_type_of_identity_vals), 0x07,
8372 { "Routing Area Code (RAC)", "gsm_a.gm.gmm.rac",
8373 FT_UINT8, BASE_HEX_DEC, NULL, 0x00,
8376 { &hf_gsm_a_gm_mta_e,
8377 { "MTA-E", "gsm_a.gm.gmm.mta_e",
8378 FT_BOOLEAN, 8, TFS(&gsm_a_gm_mta_e_vals), 0x80,
8381 { &hf_gsm_a_gm_mta_r,
8382 { "MTA-R", "gsm_a.gm.gmm.mta_r",
8383 FT_BOOLEAN, 8, TFS(&gsm_a_gm_mta_r_vals), 0x40,
8387 { "APC", "gsm_a.gm.gmm.apc",
8388 FT_BOOLEAN, 8, TFS(&gsm_a_gm_apc_vals), 0x20,
8391 { &hf_gsm_a_gm_otd_a,
8392 { "OTD-A", "gsm_a.gm.gmm.otd_a",
8393 FT_BOOLEAN, 8, TFS(&gsm_a_gm_otd_a_vals), 0x10,
8396 { &hf_gsm_a_gm_otd_b,
8397 { "OTD-B", "gsm_a.gm.gmm.otd_b",
8398 FT_BOOLEAN, 8, TFS(&gsm_a_gm_otd_b_vals), 0x08,
8401 { &hf_gsm_a_gm_gps_a,
8402 { "GPS-A", "gsm_a.gm.gmm.gps_a",
8403 FT_BOOLEAN, 8, TFS(&gsm_a_gm_gps_a_vals), 0x04,
8406 { &hf_gsm_a_gm_gps_b,
8407 { "GPS-B", "gsm_a.gm.gmm.gps_b",
8408 FT_BOOLEAN, 8, TFS(&gsm_a_gm_gps_b_vals), 0x02,
8411 { &hf_gsm_a_gm_gps_c,
8412 { "GPS-C", "gsm_a.gm.gmm.gps_c",
8413 FT_BOOLEAN, 8, TFS(&gsm_a_gm_gps_c_vals), 0x01,
8416 { &hf_gsm_a_gm_motd,
8417 { "MOTD", "gsm_a.gm.gmm.motd",
8418 FT_BOOLEAN, 8, TFS(&gsm_a_gm_motd_vals), 0x02,
8421 { &hf_gsm_a_gm_mta_a,
8422 { "MTA-A", "gsm_a.gm.gmm.mta_a",
8423 FT_BOOLEAN, 8, TFS(&gsm_a_gm_mta_a_vals), 0x01,
8426 { &hf_gsm_a_gm_lcs_molr,
8427 { "LCS-MOLR", "gsm_a.gm.gmm.lcs_molr",
8428 FT_BOOLEAN, 8, TFS(&gsm_a_gm_lcs_molr_value), 0x08,
8431 { &hf_gsm_a_gm_mbms,
8432 { "MBMS", "gsm_a.gm.gmm.mbms",
8433 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
8436 { &hf_gsm_a_gm_ims_vops,
8437 { "IMS VoPS", "gsm_a.gm.gmm.ims_vops",
8438 FT_BOOLEAN, 8, TFS(&gsm_a_gm_ims_vops_value), 0x02,
8439 "IMS voice over PS session indicator", HFILL }
8441 { &hf_gsm_a_gm_emc_bs,
8442 { "EMC BS", "gsm_a.gm.gmm.emc_bs",
8443 FT_BOOLEAN, 8, TFS(&gsm_a_gm_emc_bs_value), 0x01,
8444 "Emergency bearer services indicator", HFILL }
8446 { &hf_gsm_a_gm_epco,
8447 { "ePCO", "gsm_a.gm.gmm.epco",
8448 FT_BOOLEAN, 8, TFS(&gsm_a_gm_epco_value), 0x04,
8451 { &hf_gsm_a_gm_restrict_ec,
8452 { "RestrictEC", "gsm_a.gm.gmm.restrict_ec",
8453 FT_BOOLEAN, 8, TFS(&gsm_a_gm_restrict_ec_value), 0x02,
8456 { &hf_gsm_a_gm_gprs_sms,
8457 { "GPRS-SMS", "gsm_a.gm.gmm.gprs_sms",
8458 FT_BOOLEAN, 8, TFS(&gsm_a_gm_gprs_sms_value), 0x01,
8461 { &hf_gsm_a_gm_req_ms_info_irat,
8462 { "I-RAT", "gsm_a.gm.gmm.req_ms_info_irat",
8463 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_gm_req_ms_info_irat_vals), 0x0,
8466 { &hf_gsm_a_gm_req_ms_info_irat2,
8467 { "I-RAT2", "gsm_a.gm.gmm.req_ms_info_irat2",
8468 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_gm_req_ms_info_irat2_vals), 0x0,
8471 { &hf_gsm_a_gm_ue_usage_setting,
8472 { "UE's usage setting", "gsm_a.gm.gmm.ue_usage_setting",
8473 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_gm_ue_usage_setting_vals), 0x0,
8476 { &hf_gsm_a_gm_voice_domain_pref_for_eutran,
8477 { "Voice domain preference for E-UTRAN", "gsm_a.gm.gmm.voice_domain_pref_for_eutran",
8478 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_voice_domain_pref_for_eutran_vals), 0x0,
8481 { &hf_gsm_a_gm_ptmsi_type,
8482 { "P-TMSI type", "gsm_a.gm.gmm.ptmsi_type",
8483 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_gm_ptmsi_type_value), 0x0,
8486 { &hf_gsm_a_gm_nri_cont,
8487 { "NRI container value", "gsm_a.gm.gmm.nri_cont_value",
8488 FT_UINT16, BASE_HEX, NULL, 0xffc0,
8491 { &hf_gsm_a_gm_paging_time_window,
8492 { "Paging Time Window", "gsm_a.gm.gmm.paging_time_window",
8493 FT_UINT8, BASE_HEX, VALS(gsm_a_gm_paging_time_window_vals), 0xf0,
8496 { &hf_gsm_a_gm_edrx_value,
8497 { "eDRX value", "gsm_a.gm.gmm.edrx_value",
8498 FT_UINT8, BASE_HEX, VALS(gsm_a_gm_edrx_vals), 0x0f,
8502 { "Message authentication code value", "gsm_a.gm.gmm.mac",
8503 FT_UINT32, BASE_HEX, NULL, 0x0,
8506 { &hf_gsm_a_gm_up_integ_ind,
8507 { "Integrity indicator", "gsm_a.gm.gmm.up_integ_ind",
8508 FT_BOOLEAN, 8, TFS(&gsm_a_gm_up_integ_ind_value), 0x01,
8511 { &hf_gsm_a_gm_dcn_id,
8512 { "DCN-ID", "gsm_a.gm.gmm.dcn_id",
8513 FT_UINT16, BASE_HEX, NULL, 0x0,
8516 { &hf_gsm_a_gm_n3en_ind,
8517 { "N3EN indicator", "gsm_a.gm.gmm.n3en_ind",
8518 FT_BOOLEAN, 8, TFS(&gsm_a_gm_n3en_ind_value), 0x01,
8521 { &hf_gsm_a_sm_pdp_type_org,
8522 { "PDP type organization", "gsm_a.gm.sm.pdp_type_org",
8523 FT_UINT8, BASE_DEC, VALS(gsm_a_sm_pdp_type_org_vals), 0x0f,
8526 { &hf_gsm_a_sm_qos_mean_thr,
8527 { "Mean throughput", "gsm_a.gm.sm.qos.mean_throughput",
8528 FT_UINT8, BASE_DEC|BASE_RANGE_STRING, RVALS(gsm_a_sm_qos_mean_thr_vals), 0x1f,
8531 { &hf_gsm_a_sm_qos_peak_thr,
8532 { "Peak throughput", "gsm_a.gm.sm.qos.peak_throughput",
8533 FT_UINT8, BASE_DEC|BASE_RANGE_STRING, RVALS(gsm_a_sm_qos_peak_thr_vals), 0xf0,
8536 { &hf_gsm_a_sm_qos_prec_class,
8537 { "Precedence class", "gsm_a.gm.sm.qos.prec_class",
8538 FT_UINT8, BASE_DEC|BASE_RANGE_STRING, RVALS(gsm_a_sm_qos_prec_class_vals), 0x07,
8541 { &hf_gsm_a_sm_qos_trans_delay,
8542 { "Transfer delay", "gsm_a.gm.sm.qos.trans_delay",
8543 FT_UINT8, BASE_DEC, NULL, 0xfc,
8546 { &hf_gsm_a_sm_qos_signalling_ind,
8547 { "Signalling indication", "gsm_a.gm.sm.qos.signalling_ind",
8548 FT_BOOLEAN, 8, TFS(&gsm_a_sm_qos_signalling_ind_value), 0x10,
8551 { &hf_gsm_a_sm_qos_source_stat_desc,
8552 { "Source statistics description", "gsm_a.gm.sm.qos.source_stat_desc",
8553 FT_UINT8, BASE_DEC, NULL, 0x0f,
8556 { &hf_gsm_a_sm_qos_max_bitrate_upl,
8557 { "Maximum bitrate for uplink", "gsm_a.gm.sm.qos.max_bitrate_upl",
8558 FT_UINT8, BASE_DEC, NULL, 0x0,
8561 { &hf_gsm_a_sm_qos_max_bitrate_downl,
8562 { "Maximum bitrate for downlink", "gsm_a.gm.sm.qos.max_bitrate_downl",
8563 FT_UINT8, BASE_DEC, NULL, 0x0,
8566 { &hf_gsm_a_sm_qos_guar_bitrate_upl,
8567 { "Guaranteed bitrate for uplink", "gsm_a.gm.sm.qos.guar_bitrate_upl",
8568 FT_UINT8, BASE_DEC, NULL, 0x0,
8571 { &hf_gsm_a_sm_qos_guar_bitrate_downl,
8572 { "Guaranteed bitrate for downlink", "gsm_a.gm.sm.qos.guar_bitrate_downl",
8573 FT_UINT8, BASE_DEC, NULL, 0x0,
8576 { &hf_gsm_a_sm_qos_max_bitrate_upl_ext,
8577 { "Maximum bitrate for uplink (extended)", "gsm_a.gm.sm.qos.max_bitrate_upl_ext",
8578 FT_UINT8, BASE_DEC, NULL, 0x0,
8581 { &hf_gsm_a_sm_qos_max_bitrate_downl_ext,
8582 { "Maximum bitrate for downlink (extended)", "gsm_a.gm.sm.qos.max_bitrate_downl_ext",
8583 FT_UINT8, BASE_DEC, NULL, 0x0,
8586 { &hf_gsm_a_sm_qos_guar_bitrate_upl_ext,
8587 { "Guaranteed bitrate for uplink (extended)", "gsm_a.gm.sm.qos.guar_bitrate_upl_ext",
8588 FT_UINT8, BASE_DEC, NULL, 0x0,
8591 { &hf_gsm_a_sm_qos_guar_bitrate_downl_ext,
8592 { "Guaranteed bitrate for downlink (extended)", "gsm_a.gm.sm.qos.guar_bitrate_downl_ext",
8593 FT_UINT8, BASE_DEC, NULL, 0x0,
8596 { &hf_gsm_a_sm_qos_max_bitrate_upl_ext2,
8597 { "Maximum bitrate for uplink (extended-2)", "gsm_a.gm.sm.qos.max_bitrate_upl_ext2",
8598 FT_UINT8, BASE_DEC, NULL, 0x0,
8601 { &hf_gsm_a_sm_qos_max_bitrate_downl_ext2,
8602 { "Maximum bitrate for downlink (extended-2)", "gsm_a.gm.sm.qos.max_bitrate_downl_ext2",
8603 FT_UINT8, BASE_DEC, NULL, 0x0,
8606 { &hf_gsm_a_sm_qos_guar_bitrate_upl_ext2,
8607 { "Guaranteed bitrate for uplink (extended-2)", "gsm_a.gm.sm.qos.guar_bitrate_upl_ext2",
8608 FT_UINT8, BASE_DEC, NULL, 0x0,
8611 { &hf_gsm_a_sm_qos_guar_bitrate_downl_ext2,
8612 { "Guaranteed bitrate for downlink (extended-2)", "gsm_a.gm.sm.qos.guar_bitrate_downl_ext2",
8613 FT_UINT8, BASE_DEC, NULL, 0x0,
8616 { &hf_gsm_a_sm_eplmnc,
8617 { "EPLMNC", "gsm_a.gm.sm.re_attempt_ind.eplmnc",
8618 FT_BOOLEAN, 8, TFS(&gsm_a_gm_eplmnc_value), 0x02,
8621 { &hf_gsm_a_sm_ratc,
8622 { "RATC", "gsm_a.gm.sm.re_attempt_ind.ratc",
8623 FT_BOOLEAN, 8, TFS(&gsm_a_gm_ratc_value), 0x01,
8626 { &hf_gsm_a_sm_cause,
8627 { "SM Cause", "gsm_a.gm.sm.cause",
8628 FT_UINT8, BASE_DEC, NULL, 0x0,
8631 { &hf_gsm_a_sm_cause_2,
8632 { "SM Cause 2", "gsm_a.gm.sm.cause_2",
8633 FT_UINT8, BASE_DEC, NULL, 0x0,
8636 { &hf_gsm_a_sm_llc_sapi,
8637 { "LLC SAPI", "gsm_a.gm.sm.llc_sapi",
8638 FT_UINT8, BASE_DEC, VALS(gsm_a_sm_llc_sapi_vals), 0x0f,
8642 { "Tear Down Indicator (TDI)", "gsm_a.gm.sm.tdi",
8643 FT_BOOLEAN, 8, TFS(&gsm_a_sm_tdi_value), 0x01,
8646 { &hf_gsm_a_sm_packet_flow_id,
8647 { "Packet Flow Identifier (PFI)", "gsm_a.gm.sm.packet_flow_id",
8648 FT_UINT8, BASE_DEC|BASE_RANGE_STRING, RVALS(gsm_a_sm_packet_flow_id_vals), 0x7f,
8651 { &hf_gsm_a_gmm_net_cap_gea1,
8652 { "GEA/1", "gsm_a.gm.gmm.net_cap.gea1",
8653 FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_gea_vals), 0x80,
8656 { &hf_gsm_a_gmm_net_cap_smdch,
8657 { "SM capabilities via dedicated channels", "gsm_a.gm.gmm.net_cap.smdch",
8658 FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_smdch_vals), 0x40,
8661 { &hf_gsm_a_gmm_net_cap_smgprs,
8662 { "SM capabilities via GPRS channels", "gsm_a.gm.gmm.net_cap.smgprs",
8663 FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_smgprs_vals), 0x20,
8666 { &hf_gsm_a_gmm_net_cap_ucs2,
8667 { "UCS2 support", "gsm_a.gm.gmm.net_cap.ucs2",
8668 FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_ucs2_vals), 0x10,
8671 { &hf_gsm_a_gmm_net_cap_ss_scr_ind,
8672 { "SS Screening Indicator", "gsm_a.gm.gmm.net_cap.ss_scr_ind",
8673 FT_UINT8, BASE_HEX, VALS(gsm_a_gmm_net_cap_ss_scr_ind_vals), 0x0c,
8676 { &hf_gsm_a_gmm_net_cap_solsa,
8677 { "SoLSA Capability", "gsm_a.gm.gmm.net_cap.solsa",
8678 FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_solsa_vals), 0x02,
8681 { &hf_gsm_a_gmm_net_cap_rev,
8682 { "Revision level indicator", "gsm_a.gm.gmm.net_cap.rev",
8683 FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_rev_vals), 0x01,
8686 { &hf_gsm_a_gmm_net_cap_pfc,
8687 { "PFC feature mode", "gsm_a.gm.gmm.net_cap.pfc",
8688 FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_pfc_vals), 0x80,
8691 { &hf_gsm_a_gmm_net_cap_ext_gea_bits,
8692 { "Extended GEA bits", "gsm_a.gm.gmm.net_cap.ext_gea_bits",
8693 FT_UINT8, BASE_HEX, NULL, 0x7e,
8696 { &hf_gsm_a_gmm_net_cap_gea2,
8697 { "GEA/2", "gsm_a.gm.gmm.net_cap.gea2",
8698 FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_gea_vals), 0x40,
8701 { &hf_gsm_a_gmm_net_cap_gea3,
8702 { "GEA/3", "gsm_a.gm.gmm.net_cap.gea3",
8703 FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_gea_vals), 0x20,
8706 { &hf_gsm_a_gmm_net_cap_gea4,
8707 { "GEA/4", "gsm_a.gm.gmm.net_cap.gea4",
8708 FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_gea_vals), 0x10,
8711 { &hf_gsm_a_gmm_net_cap_gea5,
8712 { "GEA/5", "gsm_a.gm.gmm.net_cap.gea5",
8713 FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_gea_vals), 0x08,
8716 { &hf_gsm_a_gmm_net_cap_gea6,
8717 { "GEA/6", "gsm_a.gm.gmm.net_cap.gea6",
8718 FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_gea_vals), 0x04,
8721 { &hf_gsm_a_gmm_net_cap_gea7,
8722 { "GEA/7", "gsm_a.gm.gmm.net_cap.gea7",
8723 FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_gea_vals), 0x02,
8726 { &hf_gsm_a_gmm_net_cap_lcs,
8727 { "LCS VA capability", "gsm_a.gm.gmm.net_cap.lcs",
8728 FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_lcs_vals), 0x01,
8731 { &hf_gsm_a_gmm_net_cap_ps_irat_iu,
8732 { "PS inter-RAT HO from GERAN to UTRAN Iu mode capability", "gsm_a.gm.gmm.net_cap.ps_irat_iu",
8733 FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_ps_irat_iu_vals), 0x80,
8736 { &hf_gsm_a_gmm_net_cap_ps_irat_s1,
8737 { "PS inter-RAT HO from GERAN to E-UTRAN S1 mode capability", "gsm_a.gm.gmm.net_cap.ps_irat_s1",
8738 FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_ps_irat_s1_vals), 0x40,
8741 { &hf_gsm_a_gmm_net_cap_comb_proc,
8742 { "EMM Combined procedures capability", "gsm_a.gm.gmm.net_cap.comb_proc",
8743 FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_comb_proc_vals), 0x20,
8746 { &hf_gsm_a_gmm_net_cap_isr,
8747 { "ISR support", "gsm_a.gm.gmm.net_cap.isr",
8748 FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_isr_vals), 0x10,
8751 { &hf_gsm_a_gmm_net_cap_srvcc_to_geran,
8752 { "SRVCC to GERAN/UTRAN capability", "gsm_a.gm.gmm.net_cap.srvcc_to_geran",
8753 FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_srvcc_to_geran_vals), 0x08,
8756 { &hf_gsm_a_gmm_net_cap_epc,
8757 { "EPC capability", "gsm_a.gm.gmm.net_cap.epc",
8758 FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_epc_vals), 0x04,
8761 { &hf_gsm_a_gmm_net_cap_nf,
8762 { "NF capability", "gsm_a.gm.gmm.net_cap.nf",
8763 FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_nf_vals), 0x02,
8766 { &hf_gsm_a_gmm_net_geran_net_sharing,
8767 { "GERAN network sharing capability", "gsm_a.gm.gmm.net_cap.geran_net_sharing",
8768 FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_geran_net_vals), 0x01,
8771 { &hf_gsm_a_gmm_net_cap_up_int_prot,
8772 { "User plane integrity protection support", "gsm_a.gm.gmm.net_cap.up_int_prot",
8773 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
8776 { &hf_gsm_a_gmm_net_cap_up_gia4,
8777 { "GIA/4", "gsm_a.gm.gmm.net_cap.gia4",
8778 FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_gia_vals), 0x40,
8781 { &hf_gsm_a_gmm_net_cap_up_gia5,
8782 { "GIA/5", "gsm_a.gm.gmm.net_cap.gia5",
8783 FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_gia_vals), 0x20,
8786 { &hf_gsm_a_gmm_net_cap_up_gia6,
8787 { "GIA/6", "gsm_a.gm.gmm.net_cap.gia6",
8788 FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_gia_vals), 0x10,
8791 { &hf_gsm_a_gmm_net_cap_up_gia7,
8792 { "GIA/7", "gsm_a.gm.gmm.net_cap.gia7",
8793 FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_gia_vals), 0x08,
8796 { &hf_gsm_a_gmm_net_cap_epco_ie_ind,
8797 { "ePCO IE indicator", "gsm_a.gm.gmm.net_cap.epco_ie_ind",
8798 FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_epco_ie_ind_vals), 0x04,
8801 { &hf_gsm_a_gmm_net_cap_restrict_use_enh_cov,
8802 { "Restriction on use of enhanced coverage capability", "gsm_a.gm.gmm.net_cap.restrict_use_enh_cov",
8803 FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_restrict_use_enh_cov_vals), 0x02,
8806 { &hf_gsm_a_gmm_net_cap_dc_eutra_nr_cap,
8807 { "Dual connectivity of E-UTRA with NR capability", "gsm_a.gm.gmm.net_cap.dc_eutra_nr_cap",
8808 FT_BOOLEAN, 8, TFS(&gsm_a_gmm_net_cap_dc_eutra_nr_cap_vals), 0x01,
8811 { &hf_gsm_a_sm_tmgi,
8812 { "Temporary Mobile Group Identity (TMGI)", "gsm_a.gm.sm.tmgi",
8813 FT_UINT24, BASE_HEX, NULL, 0x0,
8816 { &hf_gsm_a_sm_enh_nsapi,
8817 { "Enhanced NSAPI", "gsm_a.gm.sm.enh_nsapi",
8818 FT_UINT8, BASE_DEC, NULL, 0x0,
8821 { &hf_gsm_a_sm_req_type,
8822 { "Request type", "gsm_a.gm.sm.req_type",
8823 FT_UINT8, BASE_DEC, VALS(gsm_a_sm_req_type_vals), 0x07,
8826 { &hf_gsm_a_sm_notif_ind,
8827 { "Notification indicator", "gsm_a.gm.sm.notif_ind",
8828 FT_UINT8, BASE_DEC, VALS(gsm_a_sm_notif_ind_vals), 0x0,
8831 { &hf_gsm_a_sm_connectivity_type,
8832 { "Connectivity type", "gsm_a.gm.sm.connectivity_type",
8833 FT_UINT8, BASE_DEC|BASE_RANGE_STRING, RVALS(gsm_a_sm_connectivity_type_vals), 0x0F,
8836 { &hf_gsm_a_sm_wlan_utran_offload_accept,
8837 { "WLAN UTRAN offload acceptability", "gsm_a.gm.sm.wlan_utran_offload_accept",
8838 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_sm_wlan_utran_offload_accept_value), 0x0,
8841 { &hf_gsm_a_sm_wlan_eutran_offload_accept,
8842 { "WLAN E-UTRAN offload acceptability", "gsm_a.gm.sm.wlan_eutran_offload_accept",
8843 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_sm_wlan_eutran_offload_accept_value), 0x0,
8846 { &hf_gsm_a_sm_nbifom_cont,
8847 { "NBIFOM container content", "gsm_a.gm.sm.nbifom_cont",
8848 FT_BYTES, BASE_NONE, NULL, 0x0,
8851 { &hf_gsm_a_gm_rac_ctrled_early_cm_sending,
8852 { "Controlled early Classmark Sending", "gsm_a.gm.gmm.rac.ctrled_early_cm_sending",
8853 FT_BOOLEAN, BASE_NONE, TFS(&tfs_implemented_not_implemented), 0x0,
8856 { &hf_gsm_a_gm_rac_pseudo_sync,
8857 { "Pseudo Synchronisation", "gsm_a.gm.gmm.rac.pseudo_sync",
8858 FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x0,
8861 { &hf_gsm_a_gm_rac_vgcs,
8862 { "Voice Group Call Service", "gsm_a.gm.gmm.rac.vgcs",
8863 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_gm_vgcs), 0x0,
8866 { &hf_gsm_a_gm_rac_vbs,
8867 { "Voice Broadcast Service", "gsm_a.gm.gmm.rac.vbs",
8868 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_gm_vbs), 0x0,
8871 { &hf_gsm_a_gm_rac_multislot_capability,
8872 { "Multislot capability struct", "gsm_a.gm.gmm.rac.multislot_capability",
8873 FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x0,
8876 { &hf_gsm_a_gm_rac_hscsd_multi_slot_class,
8877 { "HSCSD multislot class", "gsm_a.gm.gmm.rac.hscsd_multi_slot_class",
8878 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_multi_slot_vals), 0x0,
8881 { &hf_gsm_a_gm_rac_gprs_multi_slot_class,
8882 { "GPRS multislot class", "gsm_a.gm.gmm.rac.gprs_multi_slot_class",
8883 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_multi_slot_vals), 0x0,
8886 { &hf_gsm_a_gm_rac_gprs_ext_dyn_alloc_cap,
8887 { "GPRS Extended Dynamic Allocation Capability", "gsm_a.gm.gmm.rac.gprs_ext_dyn_alloc_cap",
8888 FT_BOOLEAN, BASE_NONE, TFS(&tfs_implemented_not_implemented), 0x0,
8891 { &hf_gsm_a_gm_rac_ecsd_multi_slot_class,
8892 { "ECSD multislot class", "gsm_a.gm.gmm.rac.ecsd_multi_slot_class",
8893 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_multi_slot_vals), 0x0,
8896 { &hf_gsm_a_gm_rac_egprs_multi_slot_class,
8897 { "EGPRS multislot class", "gsm_a.gm.gmm.rac.egprs_multi_slot_class",
8898 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_multi_slot_vals), 0x0,
8901 { &hf_gsm_a_gm_rac_egprs_ext_dyn_alloc_cap,
8902 { "EGPRS Extended Dynamic Allocation Capability", "gsm_a.gm.gmm.rac.egprs_ext_dyn_alloc_cap",
8903 FT_BOOLEAN, BASE_NONE, TFS(&tfs_implemented_not_implemented), 0x0,
8906 { &hf_gsm_a_gm_rac_dtm_gprs_multi_slot_class,
8907 { "DTM GPRS Multi Slot Class", "gsm_a.gm.gmm.rac.dtm_gprs_multi_slot_class",
8908 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_dtm_gprs_multi_slot_class_vals), 0x0,
8911 { &hf_gsm_a_gm_rac_single_slt_dtm,
8912 { "Single Slot DTM", "gsm_a.gm.gmm.rac.single_slt_dtm",
8913 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
8916 { &hf_gsm_a_gm_rac_dtm_egprs_multi_slot_cls_pres,
8917 { "DTM EGPRS Multi Slot Class", "gsm_a.gm.gmm.rac.dtm_egprs_multi_slot_cls_pres",
8918 FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x0,
8921 { &hf_gsm_a_gm_rac_dtm_egprs_multi_slot_class,
8922 { "DTM EGPRS Multi Slot Class", "gsm_a.gm.gmm.rac.dtm_egprs_multi_slot_class",
8923 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_dtm_gprs_multi_slot_class_vals), 0x0,
8926 { &hf_gsm_a_gm_rac_8psk_pow_cap_pres,
8927 { "8PSK Power Capability Bits", "gsm_a.gm.gmm.rac.8psk_pow_cap_pres",
8928 FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x0,
8931 { &hf_gsm_a_gm_rac_comp_int_meas_cap,
8932 { "COMPACT Interference Measurement Capability", "gsm_a.gm.gmm.rac.comp_int_meas_cap",
8933 FT_BOOLEAN, BASE_NONE, TFS(&tfs_implemented_not_implemented), 0x0,
8936 { &hf_gsm_a_gm_rel_lev_ind,
8937 { "Revision Level Indicator", "gsm_a.gm.gmm.rel_lev_ind",
8938 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_gm_revision_level_indicator), 0x0,
8941 { &hf_gsm_a_gm_rac_umts_fdd_cap,
8942 { "UMTS FDD Radio Access Technology Capability", "gsm_a.gm.gmm.rac.umts_fdd_cap",
8943 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
8946 { &hf_gsm_a_gm_rac_umts_384_tdd_ra_cap,
8947 { "UMTS 3.84 Mcps TDD Radio Access Technology Capability", "gsm_a.gm.gmm.rac.umts_384_tdd_ra_cap",
8948 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
8951 { &hf_gsm_a_gm_rac_cdma2000_cap,
8952 { "CDMA 2000 Radio Access Technology Capability", "gsm_a.gm.gmm.rac.cdma2000_cap",
8953 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
8956 { &hf_gsm_a_gm_rac_umts_128_tdd_ra_cap,
8957 { "UMTS 1.28 Mcps TDD Radio Access Technology Capability", "gsm_a.gm.gmm.rac.umts_128_tdd_ra_cap",
8958 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
8961 { &hf_gsm_a_gm_rac_geran_feat_pkg,
8962 { "GERAN Feature Package 1", "gsm_a.gm.gmm.rac.geran_feat_pkg",
8963 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
8966 { &hf_gsm_a_gm_rac_mod_based_multi_slot_class_support,
8967 { "Modulation based multislot class support", "gsm_a.gm.gmm.rac.mod_based_multi_slot_class_support",
8968 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
8971 { &hf_gsm_a_gm_rac_geran_iu_mode_cap,
8972 { "GERAN Iu mode", "gsm_a.gm.gmm.rac.geran_iu_mode_cap",
8973 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
8976 { &hf_gsm_a_gm_rac_flo_iu_cap,
8977 { "FLO Iu Capability", "gsm_a.gm.gmm.rac.flo_iu_cap",
8978 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
8981 { &hf_gsm_a_gm_rac_mult_tbf_cap,
8982 { "Multiple TBF Capability", "gsm_a.gm.gmm.rac.mult_tbf_cap",
8983 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
8986 { &hf_gsm_a_gm_rac_down_adv_rec_perf,
8987 { "Downlink Advanced Receiver Performance", "gsm_a.gm.gmm.rac.down_adv_rec_perf",
8988 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_down_adv_rec_perf_vals), 0x0,
8991 { &hf_gsm_a_gm_rac_ext_rlc_mac_ctrl_msg_seg_cap,
8992 { "Extended RLC/MAC Control Message Segmentation Capability", "gsm_a.gm.gmm.rac.ext_rlc_mac_ctrl_msg_seg_cap",
8993 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
8996 { &hf_gsm_a_gm_rac_dtm_enh_cap,
8997 { "DTM Enhancements Capability", "gsm_a.gm.gmm.rac.dtm_enh_cap",
8998 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_gm_dtm_enh_cap), 0x0,
9001 { &hf_gsm_a_gm_rac_dtm_gprs_high_multi_slot_class,
9002 { "DTM GPRS High Multi Slot Class", "gsm_a.gm.gmm.rac.dtm_gprs_high_multi_slot_class",
9003 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_dtm_gprs_high_multi_slot_class_vals), 0x0,
9006 { &hf_gsm_a_gm_rac_dtm_egprs_high_multi_slot_class,
9007 { "DTM EGPRS High Multi Slot Class", "gsm_a.gm.gmm.rac.dtm_egprs_high_multi_slot_class",
9008 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_dtm_gprs_high_multi_slot_class_vals), 0x0,
9011 { &hf_gsm_a_gm_rac_ps_ho_cap,
9012 { "PS Handover Capability", "gsm_a.gm.gmm.rac.ps_ho_cap",
9013 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
9016 { &hf_gsm_a_gm_rac_dtm_ho_cap,
9017 { "DTM Handover Capability", "gsm_a.gm.gmm.rac.dtm_ho_cap",
9018 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
9021 { &hf_gsm_a_gm_rac_multi_slot_cap_red_down_dual_carrier,
9022 { "Multislot Capability Reduction for Downlink Dual Carrier", "gsm_a.gm.gmm.rac.multi_slot_cap_red_down_dual_carrier",
9023 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_multi_slot_cap_red_down_dual_carrier_vals), 0x0,
9026 { &hf_gsm_a_gm_rac_down_dual_carrier_dtm_cap,
9027 { "Downlink Dual Carrier for DTM Capability", "gsm_a.gm.gmm.rac.down_dual_carrier_dtm_cap",
9028 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
9031 { &hf_gsm_a_gm_rac_flex_ts_assign,
9032 { "Flexible Timeslot Assignment", "gsm_a.gm.gmm.rac.flex_ts_assign",
9033 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
9036 { &hf_gsm_a_gm_rac_gan_ps_ho_cap,
9037 { "GAN PS Handover Capability", "gsm_a.gm.gmm.rac.gan_ps_ho_cap",
9038 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
9041 { &hf_gsm_a_gm_rac_rlc_non_pers_mode,
9042 { "RLC Non-persistent Mode", "gsm_a.gm.gmm.rac.rlc_non_pers_mode",
9043 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
9046 { &hf_gsm_a_gm_rac_reduced_lat_cap,
9047 { "Reduced Latency Capability", "gsm_a.gm.gmm.rac.reduced_lat_cap",
9048 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
9051 { &hf_gsm_a_gm_rac_ul_egprs2,
9052 { "Uplink EGPRS2", "gsm_a.gm.gmm.rac.ul_egprs2",
9053 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_ul_egprs2_vals), 0x0,
9056 { &hf_gsm_a_gm_rac_dl_egprs2,
9057 { "Downlink EGPRS2", "gsm_a.gm.gmm.rac.dl_egprs2",
9058 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_dl_egprs2_vals), 0x0,
9061 { &hf_gsm_a_gm_rac_eutra_fdd_support,
9062 { "E-UTRA FDD support", "gsm_a.gm.gmm.rac.eutra_fdd_support",
9063 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
9066 { &hf_gsm_a_gm_rac_eutra_tdd_support,
9067 { "E-UTRA TDD support", "gsm_a.gm.gmm.rac.eutra_tdd_support",
9068 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
9071 { &hf_gsm_a_gm_rac_geran_to_eutra_support_in_geran_ptm,
9072 { "GERAN to E-UTRA support in GERAN packet transfer mode", "gsm_a.gm.gmm.rac.geran_to_eutra_support_in_geran_ptm",
9073 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_geran_to_eutra_support_in_geran_ptm_vals), 0x0,
9076 { &hf_gsm_a_gm_rac_prio_based_resel_support,
9077 { "Priority-based reselection support", "gsm_a.gm.gmm.rac.prio_based_resel_support",
9078 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
9081 { &hf_gsm_a_gm_rac_alt_efta_multi_slot_class,
9082 { "Alternative EFTA Multislot Class", "gsm_a.gm.gmm.rac.alt_efta_multi_slot_class",
9083 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_alt_efta_multi_slot_class_vals), 0x0,
9086 { &hf_gsm_a_gm_rac_efta_multi_slot_cap_red_down_dual_carrier,
9087 { "EFTA Multislot Capability Reduction for Downlink Dual Carrier", "gsm_a.gm.gmm.rac.efta_multi_slot_cap_red_down_dual_carrier",
9088 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_multi_slot_cap_red_down_dual_carrier_vals), 0x0,
9091 { &hf_gsm_a_gm_rac_ind_up_layer_pdu_start_cap_for_rlc_um,
9092 { "Indication of Upper Layer PDU Start Capability for RLC UM", "gsm_a.gm.gmm.rac.ind_up_layer_pdu_start_cap_for_rlc_um",
9093 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
9096 { &hf_gsm_a_gm_rac_emst_cap,
9097 { "Enhanced Multiplexing for Single TBF Capability", "gsm_a.gm.gmm.rac.emst_cap",
9098 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
9101 { &hf_gsm_a_gm_rac_mtti_cap,
9102 { "Multiple TTI Capability", "gsm_a.gm.gmm.rac.mtti_cap",
9103 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
9106 { &hf_gsm_a_gm_rac_utra_csg_cell_report,
9107 { "Reporting of UTRAN CSG cells in packet transfer mode", "gsm_a.gm.gmm.rac.utra_csg_cell_report",
9108 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
9111 { &hf_gsm_a_gm_rac_eutra_csg_cell_report,
9112 { "Reporting of E-UTRAN CSG cells in packet transfer mode", "gsm_a.gm.gmm.rac.eutra_csg_cell_report",
9113 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
9116 { &hf_gsm_a_gm_rac_dtr_cap,
9117 { "Dynamic Timeslot Reduction Capability", "gsm_a.gm.gmm.rac.dtr_cap",
9118 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
9121 { &hf_gsm_a_gm_rac_emsr_cap,
9122 { "Enhanced Multiplexing for Single RLC Entity Capability", "gsm_a.gm.gmm.rac.emsr_cap",
9123 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
9126 { &hf_gsm_a_gm_rac_fast_down_freq_switch_cap,
9127 { "Fast Downlink Frequency Switching Capability", "gsm_a.gm.gmm.rac.fast_down_freq_switch_cap",
9128 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
9131 { &hf_gsm_a_gm_rac_tighter_cap,
9132 { "TIGHTER Capability", "gsm_a.gm.gmm.rac.tighter_cap",
9133 FT_UINT8, BASE_DEC, VALS(tighter_cap_level_vals), 0x0,
9136 { &hf_gsm_a_gm_rac_fanr_cap,
9137 { "Fast Ack/Nack Reporting Capability", "gsm_a.gm.gmm.rac.fanr_cap",
9138 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
9141 { &hf_gsm_a_gm_rac_ipa_cap,
9142 { "Immediate Packet Assignment Capability", "gsm_a.gm.gmm.rac.ipa_cap",
9143 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
9146 { &hf_gsm_a_gm_rac_geran_nw_sharing_support,
9147 { "GERAN Network Sharing support", "gsm_a.gm.gmm.rac.geran_nw_sharing_support",
9148 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
9151 { &hf_gsm_a_gm_rac_eutra_wb_rsrq_support,
9152 { "E-UTRA Wideband RSRQ measurements support", "gsm_a.gm.gmm.rac.eutra_wb_rsrq_support",
9153 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
9156 { &hf_gsm_a_gm_rac_utra_mfbi_support,
9157 { "UTRA Multiple Frequency Band Indicators support", "gsm_a.gm.gmm.rac.utra_mfbi_support",
9158 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
9161 { &hf_gsm_a_gm_rac_eutra_mfbi_support,
9162 { "E-UTRA Multiple Frequency Band Indicators support", "gsm_a.gm.gmm.rac.eutra_mfbi_support",
9163 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
9166 { &hf_gsm_a_gm_rac_dlmc_non_contig_intra_band_recep,
9167 { "DLMC - Non-contiguous intra-band reception", "gsm_a.gm.gmm.rac.dlmc.non_contig_intra_band_recep",
9168 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_dlmc_non_contig_intra_band_recep_vals), 0x0,
9171 { &hf_gsm_a_gm_rac_dlmc_inter_band_recep,
9172 { "DLMC - Inter-band reception", "gsm_a.gm.gmm.rac.dlmc.inter_band_recep",
9173 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_gm_dlmc_inter_band_recep_val), 0x0,
9176 { &hf_gsm_a_gm_rac_dlmc_max_bandwidth,
9177 { "DLMC - Maximum Bandwidth", "gsm_a.gm.gmm.rac.dlmc.max_bandwidth",
9178 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_dlmc_max_bandwidth_vals), 0x0,
9181 { &hf_gsm_a_gm_rac_dlmc_max_nb_dl_ts,
9182 { "DLMC - Maximum Number of Downlink Timeslots", "gsm_a.gm.gmm.rac.dlmc.max_nb_dl_ts",
9183 FT_UINT8, BASE_CUSTOM, CF_FUNC(gsm_a_gm_dlmc_max_nb_dl_ts_fmt), 0x0,
9186 { &hf_gsm_a_gm_rac_dlmc_max_nb_dl_carriers,
9187 { "DLMC - Maximum Number of Downlink Carriers", "gsm_a.gm.gmm.rac.dlmc.max_nb_dl_carriers",
9188 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_dlmc_max_nb_dl_carriers_vals), 0x0,
9191 { &hf_gsm_a_gm_rac_ext_tsc_set_cap_support,
9192 { "Extended TSC Set Capability support", "gsm_a.gm.gmm.rac.ext_tsc_set_cap_support",
9193 FT_BOOLEAN, BASE_NONE, TFS(&tfs_yes_no), 0x0,
9196 { &hf_gsm_a_gm_rac_ext_earfcn_value_range,
9197 { "Extended EARFCN value range", "gsm_a.gm.gmm.rac.ext_earfcn_value_range",
9198 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
9201 { &hf_gsm_a_gm_rac_ec_pch_mon_support,
9202 { "(EC-)PCH monitoring support", "gsm_a.gm.gmm.rac.ec_pch_mon_support",
9203 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_ec_pch_mon_support_vals), 0x0,
9206 { &hf_gsm_a_gm_rac_ms_sync_accuracy,
9207 { "MS Sync Accuracy", "gsm_a.gm.gmm.rac.ms_sync_accuracy",
9208 FT_UINT8, BASE_DEC, NULL, 0x0,
9211 { &hf_gsm_a_gm_rac_ext_ec_ul_cov_enh_support,
9212 { "EC uplink coverage enhancement support", "gsm_a.gm.gmm.rac.ec_ul_cov_enh_support",
9213 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x0,
9216 { &hf_gsm_a_sm_ti_flag,
9217 { "TI Flag", "gsm_a.gm.sm.ti_flag",
9218 FT_BOOLEAN, 8, TFS(&gsm_a_sm_ti_flag_vals), 0x80,
9222 { "Extension", "gsm_a.gm.sm.ext",
9223 FT_BOOLEAN, 8, NULL, 0x80,
9226 { &hf_gsm_a_gm_sm_pco_apn_rate_ctrl_params_aer,
9227 { "AER", "gsm_a.gm.sm.pco.apn_rate_ctrl_params.aer",
9228 FT_BOOLEAN, 8, TFS(&gsm_a_gm_apn_rate_ctrl_params_aer_value), 0x08,
9231 { &hf_gsm_a_gm_sm_pco_apn_rate_ctrl_params_ul_time_unit,
9232 { "Uplink time unit", "gsm_a.gm.sm.pco.apn_rate_ctrl_params.ul_time_unit",
9233 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_apn_rate_ctrl_ul_time_unit_vals), 0x07,
9236 { &hf_gsm_a_gm_sm_pco_apn_rate_ctrl_params_max_ul_rate,
9237 { "Maximum uplink rate", "gsm_a.gm.sm.pco.apn_rate_ctrl_params.max_ul_rate",
9238 FT_UINT24, BASE_DEC|BASE_UNIT_STRING, &units_message_messages, 0x0,
9241 { &hf_gsm_a_gm_sm_pco_3gpp_data_off_ue_status,
9242 { "3GPP PS data off UE status", "gsm_a.gm.sm.pco.3gpp_data_off_ue_status",
9243 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_sm_pco_3gpp_data_off_ue_status_vals), 0x0,
9246 { &hf_gsm_a_gm_sm_pco_add_apn_rate_ctrl_params_ul_time_unit,
9247 { "Uplink time unit", "gsm_a.gm.sm.pco.add_apn_rate_ctrl_params.ul_time_unit",
9248 FT_UINT8, BASE_DEC, VALS(gsm_a_gm_apn_rate_ctrl_ul_time_unit_vals), 0x07,
9251 { &hf_gsm_a_gm_sm_pco_add_apn_rate_ctrl_params_max_ul_rate,
9252 { "Additional uplink rate for exception data", "gsm_a.gm.sm.pco.add_apn_rate_ctrl_params.max_ul_rate",
9253 FT_UINT16, BASE_DEC|BASE_UNIT_STRING, &units_message_messages, 0x0,
9256 { &hf_gsm_a_gm_sm_pco_pdu_session_id,
9257 { "PDU session identity", "gsm_a.gm.sm.pco.pdu_session_id",
9258 FT_UINT8, BASE_DEC, VALS(nas_5gs_pdu_session_id_vals), 0x0,
9261 { &hf_gsm_a_gm_sm_pco_pdu_session_address_lifetime,
9262 { "PDU session address lifetime", "gsm_a.gm.sm.pco.pdu_session_address_lifetime",
9263 FT_UINT8, BASE_DEC|BASE_UNIT_STRING, &units_second_seconds, 0x0,
9266 /* Generated from convert_proto_tree_add_text.pl */
9267 { &hf_gsm_a_gm_presence, { "Presence", "gsm_a.gm.gmm.presence", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
9268 { &hf_gsm_a_gm_8psk_power_class, { "8PSK Power Class", "gsm_a.gm.8psk_power_class", FT_UINT8, BASE_DEC, VALS(gsm_a_gm_8psk_power_class_vals), 0x0, NULL, HFILL }},
9269 { &hf_gsm_a_gm_rf_power_capability, { "RF Power Capability", "gsm_a.gm.rf_power_capability", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
9270 { &hf_gsm_a_gm_a5_bits, { "A5 Bits", "gsm_a.gm.a5_bits", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
9271 { &hf_gsm_a_gm_8psk_power_capability, { "8PSK Power Capability", "gsm_a.gm.8psk_power_capability", FT_UINT8, BASE_DEC, VALS(gsm_a_gm_8psk_power_cap_vals), 0x0, NULL, HFILL }},
9272 { &hf_gsm_a_gm_extended_dtm_gprs_multi_slot_class, { "Extended DTM GPRS Multi Slot Class", "gsm_a.gm.extended_dtm_gprs_multi_slot_class", FT_UINT8, BASE_DEC, VALS(gsm_a_gm_extended_dtm_gprs_multi_slot_class_vals), 0x0, NULL, HFILL }},
9273 { &hf_gsm_a_gm_extended_dtm_egprs_multi_slot_class, { "Extended DTM EGPRS Multi Slot Class", "gsm_a.gm.extended_dtm_egprs_multi_slot_class", FT_UINT8, BASE_DEC, VALS(gsm_a_gm_extended_dtm_gprs_multi_slot_class_vals), 0x0, NULL, HFILL }},
9274 { &hf_gsm_a_gm_high_multislot_capability, { "High Multislot Capability", "gsm_a.gm.high_multislot_capability", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
9275 { &hf_gsm_a_gm_gmsk_multislot_power_profile, { "GMSK Multislot Power Profile", "gsm_a.gm.gmsk_multislot_power_profile", FT_UINT8, BASE_DEC, VALS(gsm_a_gm_gmsk_multislot_power_profile_vals), 0x0, NULL, HFILL }},
9276 { &hf_gsm_a_gm_8psk_multislot_power_profile, { "8-PSK Multislot Power Profile", "gsm_a.gm.8psk_multislot_power_profile", FT_UINT8, BASE_DEC, VALS(gsm_a_gm_8psk_multislot_power_profile_vals), 0x0, NULL, HFILL }},
9277 { &hf_gsm_a_gm_update_result, { "Update Result", "gsm_a.gm.gmm.update_result", FT_UINT8, BASE_DEC, VALS(gsm_a_gm_update_res_vals), 0x70, NULL, HFILL }},
9278 { &hf_gsm_a_gm_radio_priority_pdp, { "Radio Priority (PDP or SMS)", "gsm_a.gm.radio_priority_pdp", FT_UINT8, BASE_DEC, VALS(gsm_a_gm_radio_prio_vals), 0x07, NULL, HFILL }},
9279 { &hf_gsm_a_gm_radio_priority_tom8, { "Radio Priority (TOM8)", "gsm_a.gm.radio_priority_tom8", FT_UINT8, BASE_DEC, VALS(gsm_a_gm_radio_prio_vals), 0x70, NULL, HFILL }},
9280 { &hf_gsm_a_gm_configuration_protocol, { "Configuration Protocol", "gsm_a.gm.configuration_protocol", FT_UINT8, BASE_DEC, NULL, 0x7, NULL, HFILL }},
9281 { &hf_gsm_a_gm_sm_pco_length, { "Length", "gsm_a.gm.sm.pco.length", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
9282 { &hf_gsm_a_gm_sm_pco_pcscf_ipv6, { "IPv6", "gsm_a.gm.sm.pco.pcscf.ipv6", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL }},
9283 { &hf_gsm_a_gm_sm_pco_dns_ipv6, { "IPv6", "gsm_a.gm.sm.pco.dns.ipv6", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL }},
9284 { &hf_gsm_a_gm_sm_pco_dsmipv6_home_agent_ipv6, { "IPv6", "gsm_a.gm.sm.pco.dsmipv6_home_agent.ipv6", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL }},
9285 { &hf_gsm_a_gm_sm_pco_dsmipv6_home_network_ipv6, { "IPv6", "gsm_a.gm.sm.pco.dsmipv6_home_network.ipv6", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL }},
9286 { &hf_gsm_a_gm_sm_pco_dsmipv6_home_network_prefix_length, { "Prefix length", "gsm_a.gm.sm.pco.dsmipv6_home_network.ipv6_prefix_length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
9287 { &hf_gsm_a_gm_sm_pco_reject_code, { "Reject Code", "gsm_a.gm.sm.pco.reject_code", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
9288 { &hf_gsm_a_gm_sm_pco_dsmipv6_home_agent_ipv4, { "IPv4", "gsm_a.gm.sm.pco.dsmipv6_home_agent.ipv4", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
9289 { &hf_gsm_a_gm_sm_pco_pcscf_ipv4, { "IPv4", "gsm_a.gm.sm.pco.pcscf.ipv4", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
9290 { &hf_gsm_a_gm_sm_pco_dns_ipv4, { "IPv4", "gsm_a.gm.sm.pco.dns.ipv4", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
9291 { &hf_gsm_a_gm_sm_pco_ipv4_link_mtu_size, { "IPv4 link MTU size", "gsm_a.gm.sm.pco.ipv4_link_mtu_size", FT_UINT16, BASE_DEC|BASE_UNIT_STRING, &units_octet_octets, 0x0, NULL, HFILL }},
9292 { &hf_gsm_a_gm_sm_pco_nbifom_mode, { "NBIFOM mode", "gsm_a.gm.sm.pco.nbifom_mode", FT_UINT8, BASE_HEX, VALS(gsm_a_gm_nbifom_mode_vals), 0x0, NULL, HFILL }},
9293 { &hf_gsm_a_gm_sm_pco_non_ip_link_mtu_size, { "Non-IP link MTU size", "gsm_a.gm.sm.pco.non_ip_link_mtu_size", FT_UINT16, BASE_DEC|BASE_UNIT_STRING, &units_octet_octets, 0x0, NULL, HFILL }},
9294 { &hf_gsm_a_gm_sm_pco_sel_bearer_ctrl_mode, { "Selected Bearer Control Mode", "gsm_a.gm.sm.pco.sel_bearer_ctrl_mode", FT_UINT8, BASE_DEC, VALS(gsm_a_gm_sel_bearer_ctrl_mode_vals), 0x0, NULL, HFILL }},
9295 { &hf_gsm_a_sm_pdp_type_number, { "PDP type number", "gsm_a.gm.sm.pdp_type_number", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
9296 { &hf_gsm_a_sm_pdp_address, { "PDP address", "gsm_a.gm.sm.pdp_address", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
9297 { &hf_gsm_a_sm_qos_maximum_sdu_size, { "Maximum SDU size", "gsm_a.gm.sm.qos.maximum_sdu_size", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
9298 { &hf_gsm_a_gm_ti_value, { "TI value", "gsm_a.gm.ti_value", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
9299 { &hf_gsm_a_sm_tft_packet_filter, { "Packet filter", "gsm_a.gm.sm.tft.packet_filter", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
9300 { &hf_gsm_a_sm_tft_packet_evaluation_precedence, { "Packet evaluation precedence", "gsm_a.gm.sm.tft.packet_evaluation_precedence", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
9301 { &hf_gsm_a_sm_tft_packet_filter_length, { "Packet filter length", "gsm_a.gm.sm.tft.packet_filter_length", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
9302 { &hf_gsm_a_sm_tft_authorization_token_value, { "Authorization token value", "gsm_a.gm.sm.tft.authorization_token_value", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
9303 { &hf_gsm_a_sm_tft_media_component_number_value, { "Media Component number value", "gsm_a.gm.sm.tft.media_component_number_value", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
9304 { &hf_gsm_a_sm_tft_ip_flow_number, { "IP flow number", "gsm_a.gm.sm.tft.ip_flow_number", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
9305 { &hf_gsm_a_sm_tft_packet_filter_identifier, { "Packet filter identifier", "gsm_a.gm.sm.tft.packet_filter_identifier", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
9306 { &hf_gsm_a_sm_tft_parameter_content, { "Parameter content", "gsm_a.gm.sm.tft.parameter_content", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
9307 { &hf_gsm_a_sm_tft_packet_filter_component_type_id, { "Packet filter component type identifier", "gsm_a.gm.sm.tft.packet_filter_component_type_id", FT_UINT8, BASE_DEC, VALS(packet_filter_component_type_vals), 0x0, NULL, HFILL }},
9310 static ei_register_info ei[] = {
9311 { &ei_gsm_a_gm_extraneous_data, { "gsm_a.gm.extraneous_data", PI_PROTOCOL, PI_NOTE, "Extraneous Data, dissector bug or later version spec (report to wireshark.org)", EXPFILL }},
9312 { &ei_gsm_a_gm_not_enough_data, { "gsm_a.gm.not_enough_data", PI_PROTOCOL, PI_WARN, "Not enough data", EXPFILL }},
9313 { &ei_gsm_a_gm_undecoded, { "gsm_a.gm.undecoded", PI_UNDECODED, PI_WARN, "Not decoded", EXPFILL }},
9314 { &ei_gsm_a_gm_apn_too_long, { "gsm_a.gm.apn_to_long", PI_PROTOCOL, PI_ERROR, "APN encoding has more than 100 octets", EXPFILL }},
9315 { &ei_gsm_a_gm_missing_mandatory_element, { "gsm_a.gm.missing_mandatory_element", PI_PROTOCOL, PI_ERROR, "Missing Mandatory element, rest of dissection is suspect", EXPFILL }},
9318 expert_module_t* expert_gsm_a_gm;
9320 /* Setup protocol subtree array */
9321 #define NUM_INDIVIDUAL_ELEMS 7
9322 gint *ett[NUM_INDIVIDUAL_ELEMS +
9323 NUM_GSM_DTAP_MSG_GMM + NUM_GSM_DTAP_MSG_SM +
9326 ett[0] = &ett_gmm_radio_cap;
9327 ett[1] = &ett_gmm_rai;
9328 ett[2] = &ett_sm_tft;
9329 ett[3] = &ett_gmm_gprs_timer;
9330 ett[4] = &ett_gmm_network_cap;
9331 ett[5] = &ett_gsm_a_gm_msrac_multislot_capability;
9332 ett[6] = &ett_sm_pco;
9334 last_offset = NUM_INDIVIDUAL_ELEMS;
9336 for (i=0; i<NUM_GSM_DTAP_MSG_GMM; i++, last_offset++)
9338 ett_gsm_dtap_msg_gmm[i] = -1;
9339 ett[last_offset] = &ett_gsm_dtap_msg_gmm[i];
9342 for (i=0; i<NUM_GSM_DTAP_MSG_SM; i++, last_offset++)
9344 ett_gsm_dtap_msg_sm[i] = -1;
9345 ett[last_offset] = &ett_gsm_dtap_msg_sm[i];
9348 for (i=0; i<NUM_GSM_GM_ELEM; i++, last_offset++)
9350 ett_gsm_gm_elem[i] = -1;
9351 ett[last_offset] = &ett_gsm_gm_elem[i];
9355 proto_register_protocol("GSM A-I/F GPRS Mobility and Session Management", "GSM Management", "gsm_a.gm");
9357 proto_register_field_array(proto_a_gm, hf, array_length(hf));
9359 proto_register_subtree_array(ett, array_length(ett));
9360 expert_gsm_a_gm = expert_register_protocol(proto_a_gm);
9361 expert_register_field_array(expert_gsm_a_gm, ei, array_length(ei));
9363 /* subdissector code */
9364 gprs_sm_pco_subdissector_table = register_dissector_table("sm_pco.protocol",
9365 "GPRS SM PCO PPP protocol", proto_a_gm, FT_UINT16, BASE_HEX);
9369 proto_reg_handoff_gsm_a_gm(void)
9371 rrc_irat_ho_info_handle = find_dissector_add_dependency("rrc.irat.irat_ho_info", proto_a_gm);
9372 lte_rrc_ue_eutra_cap_handle = find_dissector_add_dependency("lte-rrc.ue_eutra_cap", proto_a_gm);
9373 nbifom_handle = find_dissector_add_dependency("nbifom", proto_a_gm);
9377 * Editor modelines - http://www.wireshark.org/tools/modelines.html
9382 * indent-tabs-mode: t
9385 * vi: set shiftwidth=8 tabstop=8 noexpandtab:
9386 * :indentSize=8:tabSize=8:noTabs=false: