Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / epan / dissectors / packet-gsm_a_rr.c
blob8836b05af72e0152d876b02f7ebc20e84a970875
1 /* packet-gsm_a_rr.c
2 * Routines for GSM A Interface (actually A-bis really) RR dissection - A.K.A. GSM layer 3 Radio Resource Protocol
4 * Copyright 2003, Michael Lum <mlum [AT] telostech.com>
5 * In association with Telos Technology Inc.
7 * Added Dissection of Radio Resource Management Information Elements
8 * and other enhancements and fixes.
9 * Copyright 2005 - 2006, Anders Broman [AT] ericsson.com
11 * Added Dissection of E-UTRAN Description struct in
12 * Cell selection indicator after release of all TCH and SDCCH IE
13 * Lars Sundstrom X [AT] ericsson.com and Kjell Jansson [AT] ericsson.com
14 * On Behalf of Ericsson AB
16 * Title 3GPP Other
18 * Reference [3]
19 * Mobile radio interface Layer 3 specification;
20 * Core network protocols;
21 * Stage 3
22 * (3GPP TS 24.008 version 4.7.0 Release 4)
23 * (ETSI TS 124 008 V6.8.0 (2005-03))
25 * Reference [4]
26 * Mobile radio interface layer 3 specification;
27 * Radio Resource Control Protocol
28 * (GSM 04.18 version 8.4.1 Release 1999)
29 * (3GPP TS 04.18 version 8.26.0 Release 1999)
31 * Wireshark - Network traffic analyzer
32 * By Gerald Combs <gerald@wireshark.org>
33 * Copyright 1998 Gerald Combs
35 * SPDX-License-Identifier: GPL-2.0-or-later
38 #include "config.h"
40 #include <epan/packet.h>
41 #include <epan/tap.h>
42 #include <epan/expert.h>
43 #include <epan/proto_data.h>
44 #include <epan/tfs.h>
45 #include <wsutil/array.h>
46 #include "packet-ber.h"
47 #include "packet-gsm_a_common.h"
48 #include "packet-gsmtap.h"
50 #include "packet-gsm_a_rr.h"
52 void proto_register_gsm_a_rr(void);
53 void proto_reg_handoff_gsm_a_rr(void);
55 static dissector_handle_t rrc_irat_ho_info_handle;
56 static dissector_handle_t rrc_irat_ho_to_utran_cmd_handle;
58 static unsigned gsm_a_rr_nri_length;
60 #define PADDING_BYTE 0x2B
62 /* 3GPP TS 44.018 version 11.2.0 Release 11 */
63 const value_string gsm_a_dtap_msg_rr_strings[] = {
64 { 0x3c, "Reserved" },
65 { 0x3b, "Additional Assignment" },
66 { 0x3f, "Immediate Assignment" },
67 { 0x39, "Immediate Assignment Extended" },
68 { 0x3a, "Immediate Assignment Reject" },
69 { 0x6a, "EC-Immediate Assignment Type 1"},
71 { 0x48, "DTM Assignment Failure" },
72 { 0x49, "DTM Reject" },
73 { 0x4a, "DTM Request" },
74 { 0x4b, "Packet Assignment" },
75 { 0x4c, "DTM Assignment Command" },
76 { 0x4d, "DTM Information" },
77 { 0x4e, "Packet Notification" },
79 { 0x35, "Ciphering Mode Command" },
80 { 0x32, "Ciphering Mode Complete" },
82 { 0x30, "Configuration Change Command" },
83 { 0x31, "Configuration Change Ack." },
84 { 0x33, "Configuration Change Reject" },
86 { 0x2e, "Assignment Command" },
87 { 0x29, "Assignment Complete" },
88 { 0x2f, "Assignment Failure" },
89 { 0x2b, "Handover Command" },
90 { 0x2c, "Handover Complete" },
91 { 0x28, "Handover Failure" },
92 { 0x2d, "Physical Information" },
94 { 0x08, "RR-cell Change Order" },
95 { 0x23, "PDCH Assignment Command" },
97 { 0x0d, "Channel Release" },
98 { 0x0a, "Partial Release" },
99 { 0x0f, "Partial Release Complete" },
101 { 0x21, "Paging Request Type 1" },
102 { 0x22, "Paging Request Type 2" },
103 { 0x24, "Paging Request Type 3" },
104 { 0x27, "Paging Response" },
105 { 0x20, "Notification/NCH" },
106 { 0x25, "Reserved" },
107 { 0x26, "Notification/Response" },
109 { 0x0b, "Reserved" },
111 #if 0
112 /* ETSI TS 101 503 V8.5.0 Seems to give Other def for this Messages??? */
113 { 0xc0, "Utran Classmark Change" }, CONFLICTS WITH Handover To UTRAN Command
114 { 0xc1, "UE RAB Preconfiguration" },
115 { 0xc2, "cdma2000 Classmark Change" },
116 #endif
118 /* ETSI TS 101 503 V8.5.0 */
119 { 0x60, "Utran Classmark Change" },
120 { 0x62, "cdma2000 Classmark Change" },
121 { 0x63, "Inter System to UTRAN Handover Command" },
122 { 0x64, "Inter System to cdma2000 Handover Command" },
123 { 0x18, "System Information Type 8" },
124 { 0x19, "System Information Type 1" },
125 { 0x1a, "System Information Type 2" },
126 { 0x1b, "System Information Type 3" },
127 { 0x1c, "System Information Type 4" },
128 { 0x1d, "System Information Type 5" },
129 { 0x1e, "System Information Type 6" },
130 { 0x1f, "System Information Type 7" },
132 { 0x02, "System Information Type 2bis" },
133 { 0x03, "System Information Type 2ter" },
134 { 0x07, "System Information Type 2quater" },
135 { 0x05, "System Information Type 5bis" },
136 { 0x06, "System Information Type 5ter" },
137 { 0x04, "System Information Type 9" },
138 { 0x00, "System Information Type 13" },
140 { 0x3d, "System Information Type 16" },
141 { 0x3e, "System Information Type 17" },
143 { 0x40, "System Information Type 18" },
144 { 0x41, "System Information Type 19" },
145 { 0x42, "System Information Type 20" },
146 { 0x46, "System Information Type 21" },
148 { 0x10, "Channel Mode Modify" },
149 { 0x12, "RR Status" },
150 { 0x17, "Channel Mode Modify Acknowledge" },
151 { 0x14, "Frequency Redefinition" },
152 { 0x15, "Measurement Report" },
153 { 0x16, "Classmark Change" },
154 { 0x13, "Classmark Enquiry" },
155 { 0x36, "Extended Measurement Report" },
156 { 0x37, "Extended Measurement Order" },
157 { 0x34, "GPRS Suspension Request" },
159 { 0x09, "VGCS Uplink Grant" },
160 { 0x0e, "Uplink Release" },
161 { 0x0c, "Reserved" },
162 { 0x2a, "Uplink Busy" },
163 { 0x11, "Talker Indication" },
165 { 0xc0, "UTRAN Classmark Change/Handover To UTRAN Command" }, /* spec conflict */
167 { 0x38, "Application Information" },
169 { 0, NULL }
172 static const value_string gsm_a_dtap_msg_rr_ec_ccch_strings[] = {
173 /* Channel establishment messages */
174 { 0x01, "EC-Immediate Assignment Type 2" },
175 { 0x02, "EC-Immediate Assignment Reject" },
176 { 0x03, "EC-Dummy" },
177 { 0x04, "EC-Downlink Assignment" },
178 { 0x09, "EC-Paging Request" },
180 { 0, NULL }
183 static const value_string gsm_rr_elem_strings[] = {
184 /* Radio Resource Management Information Elements 10.5.2, most are from 10.5.1 */
185 { DE_RR_BA_RANGE, "BA Range" }, /* [3] 10.5.2.1a BA Range */
186 { DE_RR_CELL_CH_DSC, "Cell Channel Description" }, /* [3] 10.5.2.1b */
187 { DE_RR_BA_LIST_PREF, "BA List Pref" }, /* [3] 10.5.2.1c BA List Pref */
188 { DE_RR_UTRAN_FREQ_LIST, "UTRAN Frequency List" }, /* [3] 10.5.2.1d UTRAN Frequency List */
189 { DE_RR_CELL_SELECT_INDIC, "Cell Selection Indicator after Release of all TCH and SDCCH" }, /* [3] 10.5.2.1e Cell selection indicator after release of all TCH and SDCCH IE */
190 { DE_RR_CELL_DSC, "Cell Description" }, /* 10.5.2.2 */
191 { DE_RR_CELL_OPT_BCCH, "Cell Options (BCCH)" }, /* [3] 10.5.2.3 Cell Options (BCCH) */
192 { DE_RR_CELL_OPT_SACCH, "Cell Options (SACCH)" }, /* [3] 10.5.2.3a Cell Options (SACCH) */
193 { DE_RR_CELL_SEL_PARAM, "Cell Selection Parameters" }, /* [3] 10.5.2.4 Cell Selection Parameters */
194 /* [3] 10.5.2.4a (void) */
195 { DE_RR_CH_DSC, "Channel Description" }, /* 10.5.2.5 */
196 { DE_RR_CH_DSC2, "Channel Description 2" }, /* 10.5.2.5a */
197 { DE_RR_CH_DSC3, "Channel Description 3" }, /* 10.5.2.5c */
198 { DE_RR_CH_MODE, "Channel Mode" }, /* [3] 10.5.2.6 */
199 { DE_RR_CH_MODE2, "Channel Mode 2" }, /* [3] 10.5.2.7 */
200 { DE_RR_UTRAN_CM, "UTRAN Classmark" }, /* [3] 10.5.2.7a */
201 /* [3] 10.5.2.7b (void) */
202 { DE_RR_CM_ENQ_MASK, "Classmark Enquiry Mask" }, /* [3] 10.5.2.7c */
203 /* [3] 10.5.2.7d GERAN Iu Mode Classmark information element */
204 { DE_RR_CHNL_NEEDED, "Channel Needed"}, /* [3] 10.5.2.8 */
205 /* [3] 10.5.2.8a (void) */
206 { DE_RR_CHNL_REQ_DESC2, "Channel Request Description 2"}, /* [3] 10.5.2.8b Channel Request Description 2 */
207 /* Pos 20 */
208 { DE_RR_CIP_MODE_SET, "Cipher Mode Setting" }, /* [3] 10.5.2.9 */
209 { DE_RR_CIP_MODE_RESP, "Cipher Mode Response" }, /* [3] 10.5.2.10 */
210 { DE_RR_CTRL_CH_DESC, "Control Channel Description" }, /* [3] 10.5.2.11 Control Channel Description */
211 { DE_RR_DTM_INFO_DETAILS, "DTM Information Details" }, /* [3] 10.5.2.11a DTM Information Details */
212 { DE_RR_DYN_ARFCN_MAP, "Dynamic ARFCN Mapping" }, /* [3] 10.5.2.11b */
213 { DE_RR_FREQ_CH_SEQ, "Frequency Channel Sequence" }, /* [3] 10.5.2.12 */
214 { DE_RR_FREQ_LIST, "Frequency List" }, /* 10.5.2.13 */
215 { DE_RR_FREQ_SHORT_LIST, "Frequency Short List" }, /* 10.5.2.14 */
216 { DE_RR_FREQ_SHORT_LIST2, "Frequency Short List 2" }, /* 10.5.2.14a */
217 /* [3] 10.5.2.14b Group Channel Description */
218 { DE_RR_GPRS_RESUMPTION, "GPRS Resumption" }, /* [3] 10.5.2.14c GPRS Resumption */
219 { DE_RR_GPRS_BROADCAST_INFORMATION, "GPRS Broadcast Information" }, /* [3] 10.5.2.14d GPRS broadcast information */
220 /* [3] 10.5.2.14e Enhanced DTM CS Release Indication */
221 { DE_RR_HO_REF, "Handover Reference" }, /* 10.5.2.15 */
222 { DE_RR_IA_REST_OCT, "IA Rest Octets" }, /* [3] 10.5.2.16 */
223 { DE_RR_IAR_REST_OCT, "IAR Rest Octets" }, /* [3] 10.5.2.17 IAR Rest Octets */
224 { DE_RR_IAX_REST_OCT, "IAX Rest Octets" }, /* [3] 10.5.2.18 IAX Rest Octets */
225 { DE_RR_L2_PSEUDO_LEN, "L2 Pseudo Length" }, /* [3] 10.5.2.19 */
226 { DE_RR_MEAS_RES, "Measurement Results" }, /* [3] 10.5.2.20 Measurement Results */
228 * [3] 10.5.2.20a GPRS Measurement Results
230 { DE_RR_MOB_ALL, "Mobile Allocation" }, /* [3] 10.5.2.21 */
231 { DE_RR_MOB_TIME_DIFF, "Mobile Time Difference" }, /* [3] 10.5.2.21a */
232 { DE_RR_MULTIRATE_CONF, "MultiRate configuration" }, /* [3] 10.5.2.21aa */
233 /* Pos 30 */
234 { DE_RR_MULT_ALL, "Multislot Allocation" }, /* [3] 10.5.2.21b */
236 * [3] 10.5.2.21c NC mode
238 { DE_RR_NEIGH_CELL_DESC, "Neighbour Cell Description" }, /* [3] 10.5.2.22 Neighbour Cell Description */
239 { DE_RR_NEIGH_CELL_DESC2, "Neighbour Cell Description 2" }, /* [3] 10.5.2.22a Neighbour Cell Description 2 */
241 * [3] 10.5.2.22b (void)
242 * [3] 10.5.2.22c NT/N Rest Octets */
243 { DE_RR_P1_REST_OCT, "P1 Rest Octets" }, /* [3] 10.5.2.23 P1 Rest Octets */
244 { DE_RR_P2_REST_OCT, "P2 Rest Octets" }, /* [3] 10.5.2.24 P2 Rest Octets */
245 { DE_RR_P3_REST_OCT, "P3 Rest Octets" }, /* [3] 10.5.2.25 P3 Rest Octets */
246 { DE_RR_PACKET_CH_DESC, "Packet Channel Description" }, /* [3] 10.5.2.25a */
247 { DE_RR_DED_MOD_OR_TBF, "Dedicated mode or TBF" }, /* [3] 10.5.2.25b */
248 { DE_RR_PKT_UL_ASS, "Packet Uplink Assignment" }, /* [3] 10.5.2.25c RR Packet Uplink Assignment */
249 { DE_RR_PKT_DL_ASS, "Packet Downlink Assignment" }, /* [3] 10.5.2.25d RR Packet Downlink Assignment */
250 { DE_RR_PKT_DL_ASS_TYPE2, "Packet Downlink Assignment Type 2" }, /* [3] 110.5.2.25e RR Packet Downlink Assignment Type 2 */
251 { DE_RR_PAGE_MODE, "Page Mode" }, /* [3] 10.5.2.26 */
252 { DE_RR_NCC_PERM, "NCC Permitted" }, /* [3] 10.5.2.27 NCC Permitted */
253 { DE_RR_POW_CMD, "Power Command" }, /* 10.5.2.28 */
254 { DE_RR_POW_CMD_AND_ACC_TYPE, "Power Command and access type" }, /* 10.5.2.28a */
255 { DE_RR_RACH_CTRL_PARAM, "RACH Control Parameters" }, /* [3] 10.5.2.29 RACH Control Parameters */
256 { DE_RR_REQ_REF, "Request Reference" }, /* [3] 10.5.2.30 Request Reference */
257 { DE_RR_CAUSE, "RR Cause" }, /* 10.5.2.31 */
258 { DE_RR_SYNC_IND, "Synchronization Indication" }, /* 10.5.2.39 */
259 { DE_RR_SI1_REST_OCT, "SI 1 Rest Octets" }, /* [3] 10.5.2.32 */
260 /* [3] 10.5.2.33 SI 2bis Rest Octets */
261 { DE_RR_SI2TER_REST_OCT, "SI 2ter Rest Octets" }, /* [3] 10.5.2.33a */
262 { DE_RR_SI2QUATER_REST_OCT, "SI 2quater Rest Octets" }, /* [3] 10.5.2.33b */
263 { DE_RR_SI3_REST_OCT, "SI 3 Rest Octets" }, /* [3] 10.5.2.34 */
264 { DE_RR_SI4_REST_OCT, "SI 4 Rest Octets" }, /* [3] 10.5.2.35 */
265 { DE_RR_SI6_REST_OCT, "SI 6 Rest Octets" }, /* [3] 10.5.2.35a */
266 /* [3] 10.5.2.36 SI 7 Rest Octets
267 * [3] 10.5.2.37 SI 8 Rest Octets
268 * [3] 10.5.2.37a SI 9 Rest Octets
270 { DE_RR_SI13_REST_OCT, "SI 13 Rest Octets" }, /* [3] 10.5.2.37b */
271 /* [3] 10.5.2.37c (void)
272 * [3] 10.5.2.37d (void)
273 * [3] 10.5.2.37e SI 16 Rest Octets
274 * [3] 10.5.2.37f SI 17 Rest Octets
275 * [3] 10.5.2.37g SI 19 Rest Octets
276 * [3] 10.5.2.37h SI 18 Rest Octets
277 * [3] 10.5.2.37i SI 20 Rest Octets */
278 { DE_RR_SI21_REST_OCT, "SI 21 Rest Octets" }, /* [3] 10.5.2.37m */
279 { DE_RR_STARTING_TIME, "Starting Time" }, /* [3] 10.5.2.38 Starting Time */
280 { DE_RR_TIMING_ADV, "Timing Advance" }, /* [3] 10.5.2.40 Timing Advance */
281 { DE_RR_TIME_DIFF, "Time Difference" }, /* [3] 10.5.2.41 Time Difference */
282 { DE_RR_TLLI, "TLLI" }, /* [3] 10.5.2.41a TLLI */
283 { DE_RR_TMSI_PTMSI, "TMSI/P-TMSI" }, /* [3] 10.5.2.42 TMSI/P-TMSI */
284 { DE_RR_VGCS_TAR_MODE_IND, "VGCS target mode Indication" }, /* [3] 10.5.2.42a */
285 /* Pos 40 */
286 { DE_RR_VGCS_CIP_PAR, "VGCS Ciphering Parameters" }, /* [3] 10.5.2.42b */
287 { DE_RR_WAIT_IND, "Wait Indication" }, /* [3] 10.5.2.43 Wait Indication */
288 /* [3] 10.5.2.44 SI10 rest octets $(ASCI)$ */
289 { DE_RR_EXT_MEAS_RESULT, "Extended Measurement Results" }, /* [3] 10.5.2.45 Extended Measurement Results */
290 { DE_RR_EXT_MEAS_FREQ_LIST, "Extended Measurement Frequency List" },/* [3] 10.5.2.46 Extended Measurement Frequency List */
291 { DE_RR_SUS_CAU, "Suspension Cause" }, /* [3] 10.5.2.47 */
292 { DE_RR_APDU_ID, "APDU ID" }, /* [3] 10.5.2.48 APDU ID */
293 { DE_RR_APDU_FLAGS, "APDU Flags" }, /* [3] 10.5.2.49 APDU Flags */
294 { DE_RR_APDU_DATA, "APDU Data" }, /* [3] 10.5.2.50 APDU Data */
295 { DE_RR_HO_TO_UTRAN_CMD, "Handover to UTRAN Command" }, /* [3] 10.5.2.51 Handover To UTRAN Command */
296 /* [3] 10.5.2.52 Handover To cdma2000 Command
297 * [3] 10.5.2.53 (void)
298 * [3] 10.5.2.54 (void)
299 * [3] 10.5.2.55 (void)
300 * [3] 10.5.2.56 3G Target Cell */
301 { DE_RR_SERV_SUP, "Service Support" }, /* [3] 10.5.2.57 */
302 /* 10.5.2.58 MBMS p-t-m Channel Description */
303 { DE_RR_DED_SERV_INF, "Dedicated Service Information" }, /* [3] 10.5.2.59 */
305 * 10.5.2.60 MPRACH Description
306 * 10.5.2.61 Restriction Timer
307 * 10.5.2.62 MBMS Session Identity
308 * 10.5.2.63 Reduced group or broadcast call reference
309 * 10.5.2.64 Talker Priority status
310 * 10.5.2.65 Talker Identity
311 * 10.5.2.66 Token
312 * 10.5.2.67 PS Cause
313 * 10.5.2.68 VGCS AMR Configuration
315 { DE_RR_CARRIER_IND, "Carrier Indication" }, /* 10.5.2.69 Carrier Indication */
317 * 10.5.2.70 SI10bis Rest Octets
318 * 10.5.2.71 SI10ter Rest Octets
319 * 10.5.2.72 Application Data
320 * 10.5.2.73 Data Identity
321 * 10.5.2.74 Uplink Access Indication
322 * 10.5.2.75 Individual priorities
324 { DE_RR_FEATURE_INDICATOR, "Feature Indicator" }, /* 10.5.2.76 Feature Indicator */
326 * 10.5.2.77 (void)
327 * 10.5.2.78 IPA Rest Octets
328 * 10.5.2.79 DL-DCCH-Message
329 * 10.5.2.80 CN to MS transparent information
330 * 10.5.2.81 PLMN Index
332 { DE_RR_EXTENDED_TSC_SET, "Extended TSC Set" }, /* 10.5.2.82 Extended TSC Set */
333 { DE_RR_EC_REQUEST_REFERENCE, "EC Request Reference" }, /* 10.5.2.83 EC Request reference */
334 { DE_RR_EC_PKT_CH_DSC1, "EC Packet Channel Description Type 1" }, /* 10.5.2.84 EC Packet Channel Description Type 1 */
335 { DE_RR_EC_PKT_CH_DSC2, "EC Packet Channel Description Type 2" }, /* 10.5.2.85 EC Packet Channel Description Type 2 */
336 { DE_RR_EC_FUA, "EC Fixed Uplink Allocation"}, /* 10.5.2.86 EC Fixed Uplink Allocation */
337 { 0, NULL }
339 value_string_ext gsm_rr_elem_strings_ext = VALUE_STRING_EXT_INIT(gsm_rr_elem_strings);
341 static const char* gsm_rr_rest_octets_elem_strings[] = {
342 /* RR Rest Octets information elements */
343 "UTRAN FDD Description",
344 "UTRAN TDD Description",
345 "3G Measurement Parameters Description",
346 "3G Additional Measurement Parameters Description",
347 "Measurement Parameters Description",
348 "GPRS Real Time Difference Description",
349 "GPRS BSIC Description",
350 "GPRS Report Priority Description",
351 "GPRS Measurement Parameters Description",
352 "NC Measurement Parameters",
353 "SI2q Extension Information",
354 "CCN Support Description",
355 "3G Neighbour Cell Description",
356 "FDD Cell Information Field",
357 "TDD Cell Information Field",
358 "GPRS 3G Measurement Parameters Description",
359 "3G Additional Measurement Parameters Description 2",
360 "Priority and E-UTRAN Parameters Description",
361 "Serving Cell Priority Parameters Description",
362 "3G Priority Parameters Description",
363 "UTRAN Priority Parameters",
364 "E-UTRAN Parameters Description",
365 "E-UTRAN Neighbour Cells",
366 "E-UTRAN Not Allowed Cells",
367 "E-UTRAN PCID to TA mapping",
368 "3G CSG Description",
369 "E-UTRAN CSG Description",
370 "Optional Selection Parameters",
371 "GPRS Indicator",
372 "SI4 Rest Octets_O",
373 "SI4 Rest Octets_S",
374 "LSA Parameters",
375 "LSA ID Information",
376 "PCH and NCH Info",
377 "VBS/VGCS Options",
378 "GPRS Mobile Allocation",
379 "GPRS Cell Options",
380 "GPRS Cell Options Extension Information",
381 "GPRS Power Control Parameters",
382 "PBCCH Description",
383 "GSM Description",
384 "Real Time Difference Description",
385 "BSIC Description",
386 "Report Priority Description",
387 "CDMA2000 Description",
388 "Serving cell data",
389 "Repeated Invalid BSIC Information",
390 "Bitmap Type Reporting",
391 "3G Supplementary Parameters Description",
392 "UTRAN Measurement Control Parameters",
393 "EGPRS Packet Uplink Assignment",
394 "Multiple Blocks Packet Downlink Assignment",
395 "Temporary Mobile Group Identity (TMGI)",
396 "Packet Timing Advance",
397 "Packet Uplink Assignment",
398 "Packet Downlink Assignment",
399 "Second Part Packet Assignment",
400 "REPORTING QUANTITY",
401 "E-UTRAN Measurement Report",
402 "E-UTRAN Description",
403 "EAB Parameters",
407 /* RR cause value (octet 2) 3GPP TS 24.018, section 10.5.2.31 */
408 /* public symbol for packet-gsm_gsup.c */
409 static const value_string gsm_a_rr_RR_cause_vals[] = {
410 { 0, "Normal event"},
411 { 1, "Abnormal release, unspecified"},
412 { 2, "Abnormal release, channel unacceptable"},
413 { 3, "Abnormal release, timer expired"},
414 { 4, "Abnormal release, no activity on the radio path"},
415 { 5, "Preemptive release"},
416 { 6, "UTRAN configuration unknown"},
417 { 8, "Handover impossible, timing advance out of range"},
418 { 9, "Channel mode unacceptable"},
419 { 10, "Frequency not implemented"},
420 { 11, "Originator or talker leaving group call area"},
421 { 12, "Lower layer failure"},
422 { 0x41, "Call already cleared"},
423 { 0x5f, "Semantically incorrect message"},
424 { 0x60, "Invalid mandatory information"},
425 { 0x61, "Message type non-existent or not implemented"},
426 { 0x62, "Message type not compatible with protocol state"},
427 { 0x64, "Conditional IE error"},
428 { 0x65, "No cell allocation available"},
429 { 0x6f, "Protocol error unspecified"},
430 { 0, NULL }
433 static const value_string gsm_a_rr_algorithm_identifier_vals[] = {
434 { 0, "Cipher with algorithm A5/1"},
435 { 1, "Cipher with algorithm A5/2"},
436 { 2, "Cipher with algorithm A5/3"},
437 { 3, "Cipher with algorithm A5/4"},
438 { 4, "Cipher with algorithm A5/5"},
439 { 5, "Cipher with algorithm A5/6"},
440 { 6, "Cipher with algorithm A5/7"},
441 { 7, "Reserved"},
442 { 0, NULL }
445 static const value_string gsm_a_rr_ec_cc_vals[] = {
446 {0x00, "Coverage Class 1"},
447 {0x01, "Coverage Class 2"},
448 {0x02, "Coverage Class 3"},
449 {0x03, "Coverage Class 4"},
450 {0, NULL }
453 #define DTAP_PD_MASK 0x0f
454 #define DTAP_SKIP_MASK 0xf0
455 #define DTAP_TI_MASK DTAP_SKIP_MASK
456 #define DTAP_TIE_PRES_MASK 0x07 /* after TI shifted to right */
457 #define DTAP_TIE_MASK 0x7f
459 #define DTAP_RR_IEI_MASK 0xff
461 /* Initialize the protocol and registered fields */
462 static int proto_a_rr;
463 static int proto_a_ccch;
464 static int proto_a_ec_ccch;
465 static int proto_a_sacch;
466 static int proto_a_rach;
468 static int hf_gsm_a_dtap_msg_rr_type;
469 static int hf_gsm_a_dtap_msg_rr_ec_ccch_type;
471 int hf_gsm_a_rr_elem_id;
473 static int hf_gsm_a_rr_short_pd_msg_type;
474 static int hf_gsm_a_rr_short_pd;
475 static int hf_gsm_a_rr_short_l2_header;
478 static int hf_gsm_a_rr_bcc;
479 static int hf_gsm_a_rr_ncc;
480 static int hf_gsm_a_rr_bcch_arfcn;
481 static int hf_gsm_a_rr_range_nb;
482 static int hf_gsm_a_rr_range_lower;
483 static int hf_gsm_a_rr_range_higher;
484 static int hf_gsm_a_rr_ba_freq;
485 static int hf_gsm_a_rr_ho_ref_val;
486 static int hf_gsm_a_rr_L2_pseudo_len;
487 static int hf_gsm_a_rr_ba_used;
488 static int hf_gsm_a_rr_dtx_used;
489 static int hf_gsm_a_rr_3g_ba_used;
490 static int hf_gsm_a_rr_meas_valid;
491 static int hf_gsm_a_rr_rxlev_full_serv_cell;
492 static int hf_gsm_a_rr_rxlev_sub_serv_cell;
493 static int hf_gsm_a_rr_si23_ba_used;
494 static int hf_gsm_a_rr_rxqual_full_serv_cell;
495 static int hf_gsm_a_rr_rxqual_sub_serv_cell;
496 static int hf_gsm_a_rr_no_ncell_m;
497 static int hf_gsm_a_rr_rxlev_ncell;
498 static int hf_gsm_a_rr_bcch_freq_ncell;
499 static int hf_gsm_a_rr_bsic_ncell;
500 static int hf_gsm_a_rr_mobile_time_difference;
501 static int hf_gsm_a_rr_pow_cmd_atc;
502 static int hf_gsm_a_rr_pow_cmd_epc;
503 static int hf_gsm_a_rr_page_mode;
504 static int hf_gsm_a_rr_dedicated_mode_or_tbf;
505 static int hf_gsm_a_rr_pow_cmd_fpcepc;
506 static int hf_gsm_a_rr_pow_cmd_powlev;
507 static int hf_gsm_a_rr_sync_ind_nci;
508 static int hf_gsm_a_rr_sync_ind_rot;
509 static int hf_gsm_a_rr_sync_ind_si;
510 static int hf_gsm_a_rr_format_id;
511 static int hf_gsm_a_rr_format_id2;
512 static int hf_gsm_a_rr_channel_mode;
513 static int hf_gsm_a_rr_channel_mode2;
514 static int hf_gsm_a_rr_sc;
515 static int hf_gsm_a_rr_algorithm_id;
516 static int hf_gsm_a_rr_cr;
517 static int hf_gsm_a_rr_multirate_speech_ver;
518 static int hf_gsm_a_rr_NCSB;
519 static int hf_gsm_a_rr_ICMI;
520 static int hf_gsm_a_rr_start_mode;
521 static int hf_gsm_a_rr_timing_adv;
522 static int hf_gsm_a_rr_time_diff;
523 static int hf_gsm_a_rr_tlli;
524 static int hf_gsm_a_rr_nri;
525 static int hf_gsm_a_rr_target_mode;
526 static int hf_gsm_a_rr_wait_indication;
527 static int hf_gsm_a_rr_seq_code;
528 static int hf_gsm_a_rr_group_cipher_key_number;
529 static int hf_gsm_a_rr_MBMS_multicast;
530 static int hf_gsm_a_rr_MBMS_broadcast;
531 static int hf_gsm_a_rr_last_segment;
532 static int hf_gsm_a_rr_carrier_ind;
533 static int hf_gsm_a_rr_ra;
534 static int hf_gsm_a_rr_T1prim;
535 static int hf_gsm_a_rr_T3;
536 static int hf_gsm_a_rr_T2;
537 static int hf_gsm_a_rr_tbf_T1prim;
538 static int hf_gsm_a_rr_tbf_T3;
539 static int hf_gsm_a_rr_tbf_T2;
540 static int hf_gsm_a_rr_rfn;
541 static int hf_gsm_a_rr_RR_cause;
542 static int hf_gsm_a_rr_cm_cng_msg_req;
543 static int hf_gsm_a_rr_utran_cm_cng_msg_req;
544 static int hf_gsm_a_rr_cdma2000_cm_cng_msg_req;
545 static int hf_gsm_a_rr_geran_iu_cm_cng_msg_req;
546 int hf_gsm_a_rr_chnl_needed_ch1;
547 static int hf_gsm_a_rr_chnl_needed_ch2;
548 static int hf_gsm_a_rr_chnl_needed_ch3;
549 static int hf_gsm_a_rr_chnl_needed_ch4;
550 static int hf_gsm_a_rr_pkt_estab_cause;
551 static int hf_gsm_a_rr_peak_throughput_class;
552 static int hf_gsm_a_rr_radio_priority;
553 static int hf_gsm_a_rr_llc_pdu_type;
554 static int hf_gsm_a_rr_rlc_octet_count;
555 static int hf_gsm_a_rr_rlc_non_pers_mode_cap;
556 static int hf_gsm_a_rr_reduced_latency_cap;
557 static int hf_gsm_a_rr_ul_egprs2;
558 static int hf_gsm_a_rr_dl_egprs2;
559 static int hf_gsm_a_rr_emst_ms_cap;
560 static int hf_gsm_a_rr_suspension_cause;
561 static int hf_gsm_a_rr_apdu_id;
562 static int hf_gsm_a_rr_apdu_flags_cr;
563 static int hf_gsm_a_rr_apdu_flags_fs;
564 static int hf_gsm_a_rr_apdu_flags_ls;
565 static int hf_gsm_a_rr_apdu_data;
566 static int hf_gsm_a_rr_set_of_amr_codec_modes_v1_b8;
567 static int hf_gsm_a_rr_set_of_amr_codec_modes_v1_b7;
568 static int hf_gsm_a_rr_set_of_amr_codec_modes_v1_b6;
569 static int hf_gsm_a_rr_set_of_amr_codec_modes_v1_b5;
570 static int hf_gsm_a_rr_set_of_amr_codec_modes_v1_b4;
571 static int hf_gsm_a_rr_set_of_amr_codec_modes_v1_b3;
572 static int hf_gsm_a_rr_set_of_amr_codec_modes_v1_b2;
573 static int hf_gsm_a_rr_set_of_amr_codec_modes_v1_b1;
574 static int hf_gsm_a_rr_set_of_amr_codec_modes_v2_b5;
575 static int hf_gsm_a_rr_set_of_amr_codec_modes_v2_b4;
576 static int hf_gsm_a_rr_set_of_amr_codec_modes_v2_b3;
577 static int hf_gsm_a_rr_set_of_amr_codec_modes_v2_b2;
578 static int hf_gsm_a_rr_set_of_amr_codec_modes_v2_b1;
579 static int hf_gsm_a_rr_amr_threshold;
580 static int hf_gsm_a_rr_amr_hysteresis;
581 static int hf_gsm_a_rr_pwrc;
582 static int hf_gsm_a_rr_dtx_bcch;
583 static int hf_gsm_a_rr_dtx_sacch;
584 static int hf_gsm_a_rr_radio_link_timeout;
585 static int hf_gsm_a_rr_cell_reselect_hyst;
586 static int hf_gsm_a_rr_ms_txpwr_max_cch;
587 static int hf_gsm_a_rr_acs;
588 static int hf_gsm_a_rr_neci;
589 static int hf_gsm_a_rr_rxlev_access_min;
590 static int hf_gsm_a_rr_mscr;
591 static int hf_gsm_a_rr_att;
592 static int hf_gsm_a_rr_ccch_conf;
593 static int hf_gsm_a_rr_cbq3;
594 static int hf_gsm_a_rr_bs_pa_mfrms;
595 static int hf_gsm_a_rr_bs_ag_blks_res;
596 int hf_gsm_a_rr_t3212;
597 static int hf_gsm_a_rr_gsm_band;
598 static int hf_gsm_a_rr_arfcn_first;
599 static int hf_gsm_a_rr_band_offset;
600 static int hf_gsm_a_rr_arfcn_range;
601 static int hf_gsm_a_rr_lowest_arfcn;
602 static int hf_gsm_a_rr_inc_skip_arfcn;
603 static int hf_gsm_a_rr_gprs_resumption_ack;
604 static int hf_gsm_a_rr_ext_ind;
605 static int hf_gsm_a_rr_ba_ind;
606 static int hf_gsm_a_rr_multiband_reporting;
607 static int hf_gsm_a_rr_ncc_permitted;
608 static int hf_gsm_a_rr_max_retrans;
609 static int hf_gsm_a_rr_tx_integer;
610 static int hf_gsm_a_rr_cell_barr_access;
611 static int hf_gsm_a_rr_re;
612 static int hf_gsm_a_rr_acc;
613 static int hf_gsm_a_rr_nch_position;
614 static int hf_gsm_a_rr_si2ter_mp_change_mark;
615 static int hf_gsm_a_rr_si2ter_3g_change_mark;
616 static int hf_gsm_a_rr_si2ter_index;
617 static int hf_gsm_a_rr_si2ter_count;
618 static int hf_gsm_a_rr_fdd_uarfcn;
619 static int hf_gsm_a_rr_bandwidth_fdd;
620 static int hf_gsm_a_rr_tdd_uarfcn;
621 static int hf_gsm_a_rr_bandwidth_tdd;
622 static int hf_gsm_a_rr_arfcn;
623 static int hf_gsm_a_rr_bsic;
624 static int hf_gsm_a_rr_qsearch_i;
625 static int hf_gsm_a_rr_fdd_qoffset;
626 static int hf_gsm_a_rr_fdd_qmin;
627 static int hf_gsm_a_rr_tdd_qoffset;
628 static int hf_gsm_a_rr_fdd_qmin_offset;
629 static int hf_gsm_a_rr_fdd_rscpmin;
630 static int hf_gsm_a_rr_3g_ba_ind;
631 static int hf_gsm_a_rr_mp_change_mark;
632 static int hf_gsm_a_rr_si2quater_index;
633 static int hf_gsm_a_rr_si2quater_count;
634 static int hf_gsm_a_rr_si21_change_mark;
635 static int hf_gsm_a_rr_si21_index;
636 static int hf_gsm_a_rr_si21_count;
637 static int hf_gsm_a_rr_gsm_report_type;
638 static int hf_gsm_a_rr_serving_band_reporting;
639 static int hf_gsm_a_rr_frequency_scrolling;
640 static int hf_gsm_a_rr_rep_priority;
641 static int hf_gsm_a_rr_report_type;
642 static int hf_gsm_a_rr_reporting_rate;
643 static int hf_gsm_a_rr_invalid_bsic_reporting;
644 static int hf_gsm_a_rr_scale_ord;
645 static int hf_gsm_a_rr_900_reporting_offset;
646 static int hf_gsm_a_rr_900_reporting_threshold;
647 static int hf_gsm_a_rr_1800_reporting_offset;
648 static int hf_gsm_a_rr_1800_reporting_threshold;
649 static int hf_gsm_a_rr_400_reporting_offset;
650 static int hf_gsm_a_rr_400_reporting_threshold;
651 static int hf_gsm_a_rr_1900_reporting_offset;
652 static int hf_gsm_a_rr_1900_reporting_threshold;
653 static int hf_gsm_a_rr_850_reporting_offset;
654 static int hf_gsm_a_rr_850_reporting_threshold;
655 static int hf_gsm_a_rr_network_control_order;
656 static int hf_gsm_a_rr_nc_non_drx_period;
657 static int hf_gsm_a_rr_nc_reporting_period_i;
658 static int hf_gsm_a_rr_nc_reporting_period_t;
659 static int hf_gsm_a_rr_index_start_3g;
660 static int hf_gsm_a_rr_absolute_index_start_emr;
661 static int hf_gsm_a_rr_qsearch_c_initial;
662 static int hf_gsm_a_rr_fdd_rep_quant;
663 static int hf_gsm_a_rr_fdd_multirat_reporting;
664 static int hf_gsm_a_rr_tdd_multirat_reporting;
665 static int hf_gsm_a_rr_qsearch_p;
666 static int hf_gsm_a_rr_3g_search_prio;
667 static int hf_gsm_a_rr_fdd_reporting_offset;
668 static int hf_gsm_a_rr_fdd_reporting_threshold_rscp;
669 static int hf_gsm_a_rr_fdd_reporting_threshold_ecn0;
670 static int hf_gsm_a_rr_tdd_reporting_offset;
671 static int hf_gsm_a_rr_tdd_reporting_threshold_rscp;
672 static int hf_gsm_a_rr_tdd_reporting_threshold_ecn0;
673 static int hf_gsm_a_rr_fdd_reporting_threshold_2;
674 static int hf_gsm_a_rr_3g_ccn_active;
675 static int hf_gsm_a_rr_700_reporting_offset;
676 static int hf_gsm_a_rr_700_reporting_threshold;
677 static int hf_gsm_a_rr_810_reporting_offset;
678 static int hf_gsm_a_rr_810_reporting_threshold;
679 static int hf_gsm_a_rr_cbq;
680 static int hf_gsm_a_rr_cell_reselect_offset;
681 static int hf_gsm_a_rr_temporary_offset;
682 static int hf_gsm_a_rr_penalty_time;
683 static int hf_gsm_a_rr_gprs_ra_colour;
684 static int hf_gsm_a_rr_si13_position;
685 static int hf_gsm_a_rr_power_offset;
686 static int hf_gsm_a_rr_si2quater_position;
687 static int hf_gsm_a_rr_si13alt_position;
688 static int hf_gsm_a_rr_si21_position;
689 static int hf_gsm_a_rr_prio_thr;
690 static int hf_gsm_a_rr_lsa_offset;
691 static int hf_gsm_a_rr_cell_id;
692 static int hf_gsm_a_rr_paging_channel_restructuring;
693 static int hf_gsm_a_rr_nln_sacch;
694 static int hf_gsm_a_rr_nln_status_sacch;
695 static int hf_gsm_a_rr_nln_pch;
696 static int hf_gsm_a_rr_nln_status_pch;
697 static int hf_gsm_a_rr_vbs_vgcs_inband_notifications;
698 static int hf_gsm_a_rr_vbs_vgcs_inband_pagings;
699 static int hf_gsm_a_rr_rac;
700 static int hf_gsm_a_rr_max_lapdm;
701 static int hf_gsm_a_rr_gprs_ms_txpwr_max_ccch;
702 static int hf_gsm_a_rr_dedicated_mode_mbms_notification_support;
703 static int hf_gsm_a_rr_mnci_support;
704 static int hf_gsm_a_rr_amr_config;
705 static int hf_gsm_a_rr_bcch_change_mark;
706 static int hf_gsm_a_rr_si_change_field;
707 static int hf_gsm_a_rr_si13_change_mark;
708 static int hf_gsm_a_rr_hsn;
709 static int hf_gsm_a_rr_rfl_number;
710 static int hf_gsm_a_rr_arfcn_index;
711 static int hf_gsm_a_rr_ma_length;
712 static int hf_gsm_a_rr_psi1_repeat_period;
713 static int hf_gsm_a_rr_pbcch_pb;
714 static int hf_gsm_a_rr_pbcch_tsc;
715 static int hf_gsm_a_rr_pbcch_tn;
716 static int hf_gsm_a_rr_spgc_ccch_sup;
717 static int hf_gsm_a_rr_priority_access_thr;
718 static int hf_gsm_a_rr_nmo;
719 static int hf_gsm_a_rr_t3168;
720 static int hf_gsm_a_rr_t3192;
721 static int hf_gsm_a_rr_drx_timer_max;
722 static int hf_gsm_a_rr_access_burst_type;
723 static int hf_gsm_a_rr_control_ack_type;
724 static int hf_gsm_a_rr_bs_cv_max;
725 static int hf_gsm_a_rr_pan_dec;
726 static int hf_gsm_a_rr_pan_inc;
727 static int hf_gsm_a_rr_pan_max;
728 static int hf_gsm_a_rr_egprs_packet_channel_request;
729 static int hf_gsm_a_rr_bep_period;
730 static int hf_gsm_a_rr_pfc_feature_mode;
731 static int hf_gsm_a_rr_dtm_support;
732 static int hf_gsm_a_rr_bss_paging_coordination;
733 static int hf_gsm_a_rr_ccn_active;
734 static int hf_gsm_a_rr_nw_ext_utbf;
735 static int hf_gsm_a_rr_multiple_tbf_capability;
736 static int hf_gsm_a_rr_ext_utbf_no_data;
737 static int hf_gsm_a_rr_dtm_enhancements_capability;
738 static int hf_gsm_a_rr_reduced_latency_access;
739 static int hf_gsm_a_rr_alpha;
740 static int hf_gsm_a_rr_t_avg_w;
741 static int hf_gsm_a_rr_t_avg_t;
742 static int hf_gsm_a_rr_pc_meas_chan;
743 static int hf_gsm_a_rr_n_avg_i;
744 static int hf_gsm_a_rr_sgsnr;
745 static int hf_gsm_a_rr_si_status_ind;
746 static int hf_gsm_a_rr_lb_ms_txpwr_max_cch;
747 static int hf_gsm_a_rr_si2n_support;
748 static int hf_gsm_a_rr_mi_index;
749 static int hf_gsm_a_rr_mi_count;
750 static int hf_gsm_a_rr_3g_wait;
751 static int hf_gsm_a_rr_qsearch_c;
752 static int hf_gsm_a_rr_bsic_seen;
753 static int hf_gsm_a_rr_scale;
754 static int hf_gsm_a_rr_mean_bep_gmsk;
755 static int hf_gsm_a_rr_mean_cv_bep;
756 static int hf_gsm_a_rr_nbr_rcvd_blocks;
757 static int hf_gsm_a_rr_reporting_quantity;
758 static int hf_gsm_a_rr_extended_ra;
759 static int hf_gsm_a_rr_access_tech_type;
760 static int hf_gsm_a_rr_tfi_assignment;
761 static int hf_gsm_a_rr_polling;
762 static int hf_gsm_a_rr_usf;
763 static int hf_gsm_a_rr_usf_granularity;
764 static int hf_gsm_a_rr_p0;
765 static int hf_gsm_a_rr_pr_mode;
766 static int hf_gsm_a_rr_egprs_mcs;
767 static int hf_gsm_a_rr_tlli_block_channel_coding;
768 static int hf_gsm_a_rr_bep_period2;
769 static int hf_gsm_a_rr_resegment;
770 static int hf_gsm_a_rr_egprs_window_size;
771 static int hf_gsm_a_rr_gamma;
772 static int hf_gsm_a_rr_timing_adv_index;
773 static int hf_gsm_a_rr_timing_adv_timeslot_num;
774 static int hf_gsm_a_rr_tbf_starting_time;
775 static int hf_gsm_a_rr_num_of_radio_block_allocated;
776 static int hf_gsm_a_rr_pfi;
777 static int hf_gsm_a_rr_mbms_service_id;
778 static int hf_gsm_a_rr_ms_id;
779 static int hf_gsm_a_rr_gprs_cs;
780 static int hf_gsm_a_rr_rlc_mode;
781 static int hf_gsm_a_rr_ta_valid;
782 static int hf_gsm_a_rr_link_quality_meas_mode;
783 static int hf_gsm_a_rr_emr_bitmap_length;
784 static int hf_gsm_a_rr_eutran_mr_n_eutran;
785 static int hf_gsm_a_rr_eutran_mr_freq_idx;
786 static int hf_gsm_a_rr_eutran_mr_cell_id;
787 static int hf_gsm_a_rr_eutran_mr_rpt_quantity;
788 static int hf_gsm_a_rr_ma_channel_set;
789 static int hf_n_range_orig_arfcn;
790 static int hf_gsm_a_rr_reported_timeslots;
791 static int hf_gsm_a_rr_tsh;
792 static int hf_gsm_a_rr_rtti_usf_mode;
793 static int hf_gsm_a_rr_pdch_pair_indic;
794 static int hf_gsm_a_rr_additional_usf;
795 static int hf_gsm_a_rr_usf_2;
796 static int hf_gsm_a_rr_additional_usf_2;
797 static int hf_gsm_a_rr_npm_transfer_time;
798 static int hf_gsm_a_rr_event_based_fanr;
799 static int hf_gsm_a_rr_dl_egprs_level;
800 static int hf_gsm_a_rr_eab_auth_mask;
801 static int hf_gsm_a_eab_subcategory;
803 /* Generated from convert_proto_tree_add_text.pl */
804 static int hf_gsm_a_rr_cell_parameter;
805 static int hf_gsm_a_rr_len_indicator_ms_id;
806 static int hf_gsm_a_rr_neighbour_cell_list_index;
807 static int hf_gsm_a_rr_mcc;
808 static int hf_gsm_a_rr_pcid_pattern;
809 static int hf_gsm_a_rr_where;
810 static int hf_gsm_a_rr_ba_index_start_bsic;
811 static int hf_gsm_a_rr_bitmap;
812 static int hf_gsm_a_rr_extension_length;
813 static int hf_gsm_a_rr_scrambling_code;
814 static int hf_gsm_a_rr_mnc;
815 static int hf_gsm_a_rr_nr_of_fdd_cells;
816 static int hf_gsm_a_rr_ba_index_start_rtd_present;
817 static int hf_gsm_a_rr_sync_case_tstd;
818 static int hf_gsm_a_rr_hopping_channel_maio;
819 static int hf_gsm_a_rr_hopping_channel_ma_num_ind;
820 static int hf_gsm_a_rr_hopping_channel_change_mark_1;
821 static int hf_gsm_a_rr_hopping_channel;
822 static int hf_gsm_a_rr_rxlev_carrier;
823 static int hf_gsm_a_rr_mobile_network_code;
824 static int hf_gsm_a_rr_packet_channel_type;
825 static int hf_gsm_a_rr_timeslot;
826 static int hf_gsm_a_rr_lsa_id;
827 static int hf_gsm_a_rr_ciphering_key_seq_num;
828 static int hf_gsm_a_rr_diversity;
829 static int hf_gsm_a_rr_maio;
830 static int hf_gsm_a_rr_mobile_country_code;
831 static int hf_gsm_a_rr_short_lsa_id;
832 static int hf_gsm_a_rr_number_remaining_bsic;
833 static int hf_gsm_a_rr_number_cells;
834 static int hf_gsm_a_rr_padding;
835 static int hf_gsm_a_rr_training_sequence;
836 static int hf_gsm_a_rr_psc_pattern_present;
837 static int hf_gsm_a_rr_nr_of_tdd_cells;
838 static int hf_gsm_a_rr_message_elements;
839 static int hf_gsm_a_rr_bitmap_length;
840 static int hf_gsm_a_rr_diversity_tdd;
841 static int hf_gsm_a_rr_spare;
842 static int hf_gsm_a_rr_single_channel_arfcn;
843 static int hf_gsm_a_rr_rtd_index;
844 static int hf_gsm_a_rr_arfcn_list;
845 static int hf_gsm_a_rr_da_list;
846 static int hf_gsm_a_rr_ua_list;
847 static int hf_gsm_a_rr_field_bit_long;
848 static int hf_gsm_a_rr_ma_bitmap;
849 static int hf_gsm_a_rr_inc_arfcn_bitmap;
850 static int hf_gsm_a_rr_ccn_supported;
851 static int hf_gsm_a_rr_pbcch_use_bcch;
852 static int hf_gsm_a_rr_ia_rest_oct_reserved;
853 static int hf_gsm_a_rr_tch_facch_sacchm;
854 static int hf_gsm_a_rr_tch_facch_sacchf;
855 static int hf_gsm_a_rr_tch_facch_sacchm_bi;
856 static int hf_gsm_a_rr_tch_acch;
857 static int hf_gsm_a_rr_sdcch4_sdcchc4_cbch;
858 static int hf_gsm_a_rr_sdcch8_sdcchc8_cbch;
859 static int hf_gsm_a_rr_tch_facchf_sacchm_bi;
860 static int hf_gsm_a_rr_tch_facchf_sacchm_uni;
861 static int hf_gsm_a_rr_tchf_acchs;
862 static int hf_gsm_a_rr_unknown_channel_info;
863 static int hf_gsm_a_rr_subchannel;
864 static int hf_gsm_a_rr_w_elements;
865 static int hf_gsm_a_rr_ra_est_cause;
866 static int hf_gsm_a_rr_ra_rand_ref;
869 /* gsm_rr_csn_flag() fields */
870 static int hf_gsm_a_rr_fdd_repeat_freq;
871 static int hf_gsm_a_rr_tdd_repeat_freq;
872 static int hf_gsm_a_rr_repeat_range_limit;
873 static int hf_gsm_a_rr_repeat_ba_frequency;
874 static int hf_gsm_a_rr_repeat_gsm_desc;
875 static int hf_gsm_a_rr_band_indicator;
876 static int hf_gsm_a_rr_repeat_utran_fdd_desc;
877 static int hf_gsm_a_rr_bandwidth_fdd_present;
878 static int hf_gsm_a_rr_fdd_cell_info_present;
879 static int hf_gsm_a_rr_fdd_indic0;
880 static int hf_gsm_a_rr_repeat_utran_tdd_desc;
881 static int hf_gsm_a_rr_bandwidth_tdd_present;
882 static int hf_gsm_a_rr_tdd_cell_info_present;
883 static int hf_gsm_a_rr_tdd_indic0;
884 static int hf_gsm_a_rr_pfi_present;
885 static int hf_gsm_a_rr_msms_procedures;
886 static int hf_gsm_a_rr_repeat_dynamic_arfcn_mapping;
887 static int hf_gsm_a_rr_pan_bits_present;
888 static int hf_gsm_a_rr_optional_extensions_present;
889 static int hf_gsm_a_rr_egprs_supported;
890 static int hf_gsm_a_rr_access_tech_req;
891 static int hf_gsm_a_rr_repeated_umts_tdd_neighbour_cells;
892 static int hf_gsm_a_rr_cdma2000_reporting_threshold;
893 static int hf_gsm_a_rr_ccn_support_description;
894 static int hf_gsm_a_rr_eutran_tdd_measurement_report_offset_present;
895 static int hf_gsm_a_rr_3g_wait_present;
896 static int hf_gsm_a_rr_packet_discriminator_bit;
897 static int hf_gsm_a_rr_3g_measurement_control_parameters_description;
898 static int hf_gsm_a_rr_bts_power_control_mode;
899 static int hf_gsm_a_rr_fdd_reporting_threshold_2_present;
900 static int hf_gsm_a_rr_gprs_measurement_parameters_description;
901 static int hf_gsm_a_rr_repeated_earfcn;
902 static int hf_gsm_a_rr_repeated_pcid_group;
903 static int hf_gsm_a_rr_repeating_pcid_group;
904 static int hf_gsm_a_rr_tfi_allocation_type;
905 static int hf_gsm_a_rr_fdd_cell_info_param_value0;
906 static int hf_gsm_a_rr_bsic_description;
907 static int hf_gsm_a_rr_maio_present;
908 static int hf_gsm_a_rr_eutran_pcid_bitmap_group_present;
909 static int hf_gsm_a_rr_repeated_utran_frequency_index;
910 static int hf_gsm_a_rr_timing_adv_present;
911 static int hf_gsm_a_rr_eutran_tdd_reporting;
912 static int hf_gsm_a_rr_eutran_reporting;
913 static int hf_gsm_a_rr_eutran_csg_description;
914 static int hf_gsm_a_rr_pcid_pattern_present;
915 static int hf_gsm_a_rr_later_r97_version_reserved_bit;
916 static int hf_gsm_a_rr_utran_fdd_description_earlier_version_bit_reserved1;
917 static int hf_gsm_a_rr_3g_priority_parameters_description;
918 static int hf_gsm_a_rr_serving_cell_priority_parameters_description;
919 static int hf_gsm_a_rr_850_reporting_present;
920 static int hf_gsm_a_rr_tfi_assignment_present;
921 static int hf_gsm_a_rr_p0_present;
922 static int hf_gsm_a_rr_early_r97_version_reserved_bit;
923 static int hf_gsm_a_rr_tdd_reporting_parameters;
924 static int hf_gsm_a_rr_eutran_tdd_reporting_present;
925 static int hf_gsm_a_rr_repeated_eutran_neighbour_cells;
926 static int hf_gsm_a_rr_eutran_tdd_reporting_offset_present;
927 static int hf_gsm_a_rr_bitmap_type_reporting;
928 static int hf_gsm_a_rr_gprs_mobile_allocation;
929 static int hf_gsm_a_rr_default_utran_priority_parameters;
930 static int hf_gsm_a_rr_tfi_multiblock;
931 static int hf_gsm_a_rr_hopping_case;
932 static int hf_gsm_a_rr_repeated_umts_tdd_neighbour_cells_earlier_version_bit_reserved;
933 static int hf_gsm_a_rr_gprs_3g_measurement_parameters_description;
934 static int hf_gsm_a_rr_nc_measurement_parameters;
935 static int hf_gsm_a_rr_lb_ms_txpwr_max_cch_present;
936 static int hf_gsm_a_rr_810_reporting;
937 static int hf_gsm_a_rr_thresh_utran_low_present;
938 static int hf_gsm_a_rr_pbcch;
939 static int hf_gsm_a_rr_packet_downlink_assignment;
940 static int hf_gsm_a_rr_repeated_csg_pci_split;
941 static int hf_gsm_a_rr_700_reporting;
942 static int hf_gsm_a_rr_fdd_reporting_parameters;
943 static int hf_gsm_a_rr_compressed_inter_rat_handover_info;
944 static int hf_gsm_a_rr_rtd12;
945 static int hf_gsm_a_rr_utran_tdd_description;
946 static int hf_gsm_a_rr_3g_csg_desc_technology;
947 static int hf_gsm_a_rr_reporting_quantity_present;
948 static int hf_gsm_a_rr_absolute_index_start_emr_present;
949 static int hf_gsm_a_rr_downlink_uplink;
950 static int hf_gsm_a_rr_extended_ra_present;
951 static int hf_gsm_a_rr_downlink_uplink_discriminator_bit;
952 static int hf_gsm_a_rr_timing_advance_index_timeslot;
953 static int hf_gsm_a_rr_3g_reporting_quantity;
954 static int hf_gsm_a_rr_additional_rtd;
955 static int hf_gsm_a_rr_repeated_umts_fdd_neighbour_cells;
956 static int hf_gsm_a_rr_1800_reporting_present;
957 static int hf_gsm_a_rr_repeated_eutran_pcid_ta_mapping;
958 static int hf_gsm_a_rr_arfcn_index_list;
959 static int hf_gsm_a_rr_tdd_multirat_reporting_present;
960 static int hf_gsm_a_rr_eutran_reporting_quantity;
961 static int hf_gsm_a_rr_repeated_eutran_not_allowed_cells;
962 static int hf_gsm_a_rr_si13_change_mark_present;
963 static int hf_gsm_a_rr_eutran_fdd_reporting_present;
964 static int hf_gsm_a_rr_hopping_flag;
965 static int hf_gsm_a_call_prio_present;
966 static int hf_gsm_a_rr_repeated_umts_fdd_neighbour_cells_earlier_version_bit_reserved;
967 static int hf_gsm_a_rr_fdd_multirat_reporting_present;
968 static int hf_gsm_a_rr_repeated_eutran_measurement_control_parameters;
969 static int hf_gsm_a_rr_timing_adv_index_present;
970 static int hf_gsm_a_rr_real_time_difference_description;
971 static int hf_gsm_a_rr_tdd_cell_info_param_value0;
972 static int hf_gsm_a_rr_gprs_report_priority_description;
973 static int hf_gsm_a_rr_eutran_fdd_reporting_threshold_2_present;
974 static int hf_gsm_a_rr_timing_advance_index;
975 static int hf_gsm_a_rr_utran_fdd_description;
976 static int hf_gsm_a_rr_repeated_rtd;
977 static int hf_gsm_a_rr_fdd_reporting_offset_present;
978 static int hf_gsm_a_rr_mcc_mnc_parameters;
979 static int hf_gsm_a_rr_packet_uplink_assignment;
980 static int hf_gsm_a_rr_utran_frequency_index_present;
981 static int hf_gsm_a_rr_earlier_version_reserved_bit;
982 static int hf_gsm_a_rr_psc_present;
983 static int hf_gsm_a_rr_serving_cell_data;
984 static int hf_gsm_a_rr_utran_tdd_description_earlier_version_bit_reserved2;
985 static int hf_gsm_a_rr_repeated_rtd_frequency;
986 static int hf_gsm_a_rr_pr_mode_present;
987 static int hf_gsm_a_rr_eutran_default_measurement_control_eutran_present;
988 static int hf_gsm_a_rr_3g_additional_measurement_parameters_description_2;
989 static int hf_gsm_a_rr_e_utran_measurement_report;
990 static int hf_gsm_a_rr_3g_neighbour_cell_description;
991 static int hf_gsm_a_rr_400_reporting_present;
992 static int hf_gsm_a_rr_gamma_present;
993 static int hf_gsm_a_rr_additional_lsa_id;
994 static int hf_gsm_a_rr_tdd_information;
995 static int hf_gsm_a_rr_utran_priority_present;
996 static int hf_gsm_a_rr_utran_qrxlevmin_present;
997 static int hf_gsm_a_rr_repeated_csg_fdd_uarfcn;
998 static int hf_gsm_a_rr_arfcn_present;
999 static int hf_gsm_a_rr_cdma2000_multirat_reporting;
1000 static int hf_gsm_a_rr_si13alt_position_present;
1001 static int hf_gsm_a_rr_3g_csg_description;
1002 static int hf_gsm_a_rr_rtd;
1003 static int hf_gsm_a_rr_tbf_starting_time_present;
1004 static int hf_gsm_a_rr_eutran_fdd_reporting;
1005 static int hf_gsm_a_rr_nc_periods;
1006 static int hf_gsm_a_rr_index_start_3g_present;
1007 static int hf_gsm_a_rr_repeated_pcid;
1008 static int hf_gsm_a_rr_repeated_invalid_bsic_information;
1009 static int hf_gsm_a_rr_repeated_utran_measurement_control_parameters_struct;
1010 static int hf_gsm_a_rr_repeated_utran_priority_parameters;
1011 static int hf_gsm_a_rr_measurement_parameters_description;
1012 static int hf_gsm_a_rr_bep_period2_present;
1013 static int hf_gsm_a_rr_serving_reporting_present;
1014 static int hf_gsm_a_rr_alpha_present;
1015 static int hf_gsm_a_rr_psc_pattern;
1016 static int hf_gsm_a_rr_second_packet_assignment_discriminator_bit;
1017 static int hf_gsm_a_rr_lsa_id_type;
1018 static int hf_gsm_a_rr_fdd_parameters;
1019 static int hf_gsm_a_rr_gprs_real_time_difference_description;
1020 static int hf_gsm_a_rr_repeated_eutran_frequency_index;
1021 static int hf_gsm_a_rr_3g_additional_measurement_parameters_description;
1022 static int hf_gsm_a_rr_eutran_measurement_parameters_description;
1023 static int hf_gsm_a_rr_mbms_assignment;
1024 static int hf_gsm_a_rr_ms_parameters;
1025 static int hf_gsm_a_rr_utran_fdd_description_earlier_version_bit_reserved2;
1026 static int hf_gsm_a_rr_3g_measurement_parameters_description;
1027 static int hf_gsm_a_rr_eutran_priority_present;
1028 static int hf_gsm_a_rr_1900_reporting_present;
1029 static int hf_gsm_a_rr_3g_measurement_control_parameters_description_struct;
1030 static int hf_gsm_a_rr_eutran_parameters_description;
1031 static int hf_gsm_a_rr_rtd6;
1032 static int hf_gsm_a_rr_thresh_eutran_low_present;
1033 static int hf_gsm_a_rr_allocation_type;
1034 static int hf_gsm_a_rr_additional_rtd_struct;
1035 static int hf_gsm_a_rr_additional_information_for_3x_auxiliary_pilot;
1036 static int hf_gsm_a_rr_fdd_information;
1037 static int hf_gsm_a_rr_future_extensions_of_the_2g_parameters;
1038 static int hf_gsm_a_rr_ba_index_start_rtd;
1039 static int hf_gsm_a_rr_utran_tdd_description_earlier_version_bit_reserved1;
1040 static int hf_gsm_a_rr_eutran_fdd_reporting_threshold;
1041 static int hf_gsm_a_rr_measurement_control_parameters_description;
1042 static int hf_gsm_a_rr_eutran_measurement_bandwidth_present;
1043 static int hf_gsm_a_rr_eutran_tdd_reporting_threshold_2_present;
1044 static int hf_gsm_a_rr_eutran_earfcn_present;
1045 static int hf_gsm_a_rr_eutran_qrxlevmin_present;
1046 static int hf_gsm_a_rr_ba_index_start_bsic_present;
1047 static int hf_gsm_a_rr_gprs_bsic_description;
1048 static int hf_gsm_a_rr_group_channel_description;
1049 static int hf_gsm_a_rr_cdma2000_description;
1050 static int hf_gsm_a_rr_si_2quater_extension_information;
1051 static int hf_gsm_a_rr_3g_supplementary_parameters_description;
1052 static int hf_gsm_a_rr_priority_and_eutran_param_description;
1053 static int hf_gsm_a_rr_multiband_reporting_present;
1054 static int hf_gsm_a_rr_report_priority_description;
1055 static int hf_gsm_a_rr_tdd_reporting_offset_present;
1056 static int hf_gsm_a_rr_amr_config_present;
1057 static int hf_gsm_a_rr_rand_bit_stream_ind;
1058 static int hf_gsm_a_rr_900_reporting_present;
1059 static int hf_gsm_a_rr_rfl_number_present;
1060 static int hf_gsm_a_rr_eutran_fdd_reporting_offset_present;
1061 static int hf_gsm_a_rr_repeated_csg_psc_split_struct;
1062 static int hf_gsm_a_rr_gprs_eutran_measurement_parameters_description;
1063 static int hf_gsm_a_rr_tdd_parameters;
1064 static int hf_gsm_a_rr_repeat_eutran_desc;
1065 static int hf_gsm_a_rr_peo_dsc_and_rcc_present;
1066 static int hf_gsm_a_rr_c1_delta_present;
1067 static int hf_gsm_a_rr_ul_xtti_tbf_assignment;
1068 static int hf_gsm_a_rr_dl_xtti_tbf_assignment;
1069 static int hf_gsm_a_rr_fanr_act_state;
1070 static int hf_gsm_a_rr_encoding_selection;
1071 static int hf_gsm_a_rr_nof_pdch_pairs;
1072 static int hf_gsm_a_rr_npm_transfer_time_present;
1073 static int hf_gsm_a_rr_eab_parameters;
1075 /* gsm_rr_csn_HL_flag() fields */
1076 static int hf_gsm_a_rr_selection_parameters;
1077 static int hf_gsm_a_rr_break_indicator;
1078 static int hf_gsm_a_rr_si13_contents;
1079 static int hf_gsm_a_rr_additions_in_rel_9;
1080 static int hf_gsm_a_rr_lsa_id_information;
1081 static int hf_gsm_a_rr_si2quater_indicator;
1082 static int hf_gsm_a_rr_si21_indicator;
1083 static int hf_gsm_a_rr_additions_in_rel_4;
1084 static int hf_gsm_a_call_prio4;
1085 static int hf_gsm_a_rr_gprs_ms_txpwr_max_ccch_present;
1086 static int hf_gsm_a_rr_vbs_vgcs_options;
1087 static int hf_gsm_a_rr_si4_rest_octets_s;
1088 static int hf_gsm_a_call_prio1;
1089 static int hf_gsm_a_rr_si2ter_mp_change_mark_present;
1090 static int hf_gsm_a_rr_gprs_indicator;
1091 static int hf_gsm_a_rr_nln_pch_present;
1092 static int hf_gsm_a_rr_early_classmark_sending;
1093 static int hf_gsm_a_rr_chnl_needed_ch3and4;
1094 static int hf_gsm_a_rr_additions_in_rel_5;
1095 static int hf_gsm_a_rr_group_call_information;
1096 static int hf_gsm_a_rr_lsa_parameters;
1097 static int hf_gsm_a_rr_first_discriminator_bit;
1098 static int hf_gsm_a_rr_packet_paging_procedure_3;
1099 static int hf_gsm_a_rr_packet_paging_procedure_1;
1100 static int hf_gsm_a_rr_chnl_needed_ch3_present;
1101 static int hf_gsm_a_rr_power_offset_present;
1102 static int hf_gsm_a_call_prio2;
1103 static int hf_gsm_a_rr_additions_in_rel_6;
1104 static int hf_gsm_a_rr_packet_paging_procedure_2;
1105 static int hf_gsm_a_rr_3g_early_classmark_sending_restriction;
1106 static int hf_gsm_a_rr_scheduling_if_and_where;
1107 static int hf_gsm_a_rr_packet_page_indication_1;
1108 static int hf_gsm_a_rr_cbq3_present;
1109 static int hf_gsm_a_rr_second_discriminator_bit;
1110 static int hf_gsm_a_call_prio3;
1111 static int hf_gsm_a_rr_additions_in_release_6_present;
1112 static int hf_gsm_a_rr_system_information_type_2ter;
1113 static int hf_gsm_a_rr_a_compressed_inter_rat_handover_info;
1114 static int hf_gsm_a_rr_additions_in_rel_8;
1115 static int hf_gsm_a_rr_dtm;
1116 static int hf_gsm_a_rr_pch_and_nch_info;
1117 static int hf_gsm_a_rr_cell_id_present;
1118 static int hf_gsm_a_rr_additions_in_r99;
1119 static int hf_gsm_a_rr_mbms_procedures;
1120 static int hf_gsm_a_rr_nch_position_present;
1121 static int hf_gsm_a_rr_additions_in_rel_7;
1122 static int hf_gsm_a_rr_packet_page_indication_2;
1123 static int hf_gsm_a_rr_multiple_tbf_procedures;
1124 static int hf_gsm_a_rr_additions_in_rel_10;
1125 static int hf_gsm_a_rr_additions_in_rel_13;
1126 static int hf_gsm_a_rr_si_change_alt;
1128 /* Additions in Rel-8 */
1129 static int hf_gsm_a_rr_3g_priority_param_desc_utran_start;
1130 static int hf_gsm_a_rr_3g_priority_param_desc_utran_stop;
1131 static int hf_gsm_a_rr_3g_priority_param_desc_default_utran_prio;
1132 static int hf_gsm_a_rr_3g_priority_param_desc_default_threshold_utran;
1133 static int hf_gsm_a_rr_3g_priority_param_desc_default_utran_qrxlevmin;
1134 static int hf_gsm_a_rr_utran_frequency_index;
1135 static int hf_gsm_a_rr_utran_priority;
1136 static int hf_gsm_a_rr_thresh_utran_high;
1137 static int hf_gsm_a_rr_thresh_utran_low;
1138 static int hf_gsm_a_rr_utran_qrxlevmin;
1139 static int hf_gsm_a_rr_eutran_ccn_active;
1140 static int hf_gsm_a_rr_eutran_start;
1141 static int hf_gsm_a_rr_eutran_stop;
1142 static int hf_gsm_a_rr_qsearch_c_eutran_initial;
1143 static int hf_gsm_a_rr_eutran_multirat_reporting;
1144 static int hf_gsm_a_rr_eutran_fdd_reporting_threshold_rsrp;
1145 static int hf_gsm_a_rr_eutran_fdd_reporting_threshold_rsrq;
1146 static int hf_gsm_a_rr_eutran_fdd_reporting_threshold_2;
1147 static int hf_gsm_a_rr_eutran_fdd_reporting_offset;
1148 static int hf_gsm_a_rr_eutran_tdd_reporting_threshold_rsrp;
1149 static int hf_gsm_a_rr_eutran_tdd_reporting_threshold_rsrq;
1150 static int hf_gsm_a_rr_eutran_tdd_reporting_threshold_2;
1151 static int hf_gsm_a_rr_eutran_tdd_reporting_offset;
1152 static int hf_gsm_a_rr_eutran_fdd_measurement_report_offset;
1153 static int hf_gsm_a_rr_eutran_tdd_measurement_report_offset;
1154 static int hf_gsm_a_rr_reporting_granularity;
1155 static int hf_gsm_a_rr_eutran_default_measurement_control_eutran;
1156 static int hf_gsm_a_rr_eutran_measurement_control_eutran;
1157 static int hf_gsm_a_rr_qsearch_p_eutran;
1158 static int hf_gsm_a_rr_serving_cell_priority_param_geran_priority;
1159 static int hf_gsm_a_rr_serving_cell_priority_param_thresh_prio_search;
1160 static int hf_gsm_a_rr_serving_cell_priority_param_thresh_gsm_low;
1161 static int hf_gsm_a_rr_serving_cell_priority_param_h_prio;
1162 static int hf_gsm_a_rr_serving_cell_priority_param_t_reselection;
1163 static int hf_gsm_a_rr_eutran_earfcn;
1164 static int hf_gsm_a_rr_eutran_measurement_bandwidth;
1165 static int hf_gsm_a_rr_eutran_priority;
1166 static int hf_gsm_a_rr_thresh_eutran_high;
1167 static int hf_gsm_a_rr_thresh_eutran_low;
1168 static int hf_gsm_a_rr_eutran_qrxlevmin;
1169 static int hf_gsm_a_rr_eutran_pcid_present;
1170 static int hf_gsm_a_rr_eutran_pcid;
1171 static int hf_gsm_a_rr_eutran_pcid_bitmap_group;
1172 static int hf_gsm_a_rr_eutran_pcid_pattern_length;
1173 /* static int hf_gsm_a_rr_eutran_pcid_pattern; */
1174 static int hf_gsm_a_rr_eutran_pcid_pattern_sense;
1175 static int hf_gsm_a_rr_eutran_frequency_index;
1176 static int hf_gsm_a_rr_psc;
1177 static int hf_gsm_a_rr_utran_psc_pattern_length;
1178 static int hf_gsm_a_rr_utran_psc_pattern_sense;
1179 static int hf_gsm_a_rr_utran_csg_fdd_uarfcn;
1180 static int hf_gsm_a_rr_utran_csg_tdd_uarfcn;
1181 static int hf_gsm_a_rr_csg_earfcn;
1182 static int hf_gsm_a_rr_3g_control_param_desc_meas_ctrl_utran;
1183 static int hf_gsm_a_rr_peo_bcch_change_mark;
1184 static int hf_gsm_a_rr_feat_ind_cs_ir;
1185 static int hf_gsm_a_rr_feat_ind_ps_ir;
1187 /* Additions for EC-GSM-IoT rel. 13 */
1188 static int hf_gsm_a_rr_ec_qhfi;
1189 static int hf_gsm_a_rr_ec_dl_cc;
1190 static int hf_gsm_a_rr_ec_ul_cc;
1191 static int hf_gsm_a_rr_tsc_set;
1192 static int hf_gsm_a_rr_ec_tsc;
1193 static int hf_gsm_a_rr_ec_ma_number;
1195 static int hf_gsm_a_rr_ec_enhanced_access_burst;
1196 static int hf_gsm_a_rr_ec_starting_ul_timeslot;
1197 static int hf_gsm_a_rr_ec_starting_dl_timeslot;
1198 static int hf_gsm_a_rr_ec_starting_dl_timeslot_offset;
1199 static int hf_gsm_a_rr_ec_starting_ul_timeslot_offset;
1200 static int hf_gsm_a_rr_ec_overlaid_cdma_code;
1201 static int hf_gsm_a_rr_ec_mcs_exist;
1202 static int hf_gsm_a_rr_ec_start_first_ul_data_block;
1203 static int hf_gsm_a_rr_ec_fua_gap_list;
1204 static int hf_gsm_a_rr_ec_start_fn_next_data_block_exist;
1205 static int hf_gsm_a_rr_ec_start_fn_next_data_block;
1207 static int hf_gsm_a_rr_ec_used_dl_cc;
1208 static int hf_gsm_a_rr_ec_page_extension_exist;
1209 static int hf_gsm_a_rr_ec_page_extension;
1210 static int hf_gsm_a_rr_ec_last_tdma_frame;
1211 static int hf_gsm_a_rr_ec_echoed_random_bits;
1213 static int hf_gsm_a_rr_ec_wait_timer;
1214 static int hf_gsm_a_rr_ec_req_ref_2_present;
1215 static int hf_gsm_a_rr_ec_req_ref_3_present;
1217 static int hf_gsm_a_rr_ec_ptmsi_imsi_select;
1218 static int hf_gsm_a_rr_ec_imsi_digits;
1219 static int hf_gsm_a_rr_ec_imsi;
1220 static int hf_gsm_a_rr_ec_mobile_identity_2_exist;
1222 static int hf_gsm_a_rr_ec_cc1_timeslot_multiplier;
1223 static int hf_gsm_a_rr_ec_alpha_enable;
1225 static int hf_gsm_a_rr_rcc;
1226 static int hf_gsm_a_rr_implicit_reject_cs;
1227 static int hf_gsm_a_rr_implicit_reject_ps;
1228 static int hf_gsm_a_rr_peo_dsc;
1229 static int hf_gsm_a_rr_c1_delta_min;
1230 static int hf_gsm_a_rr_c1_delta_max;
1232 static int hf_gsm_a_rr_cs_tsc_set;
1233 static int hf_gsm_a_rr_ps_sd_tsc_ass;
1234 static int hf_gsm_a_rr_ps_pd_tsc_set;
1235 static int hf_gsm_a_rr_ps_sd_tsc_set;
1236 static int hf_gsm_a_rr_ps_sd_tsc_val;
1238 /* Initialize the subtree pointers */
1239 static int ett_ccch_msg;
1240 static int ett_rach_msg;
1241 static int ett_ec_ccch_msg;
1242 static int ett_ccch_oct_1;
1243 static int ett_sacch_msg;
1244 static int ett_apdu;
1246 static expert_field ei_gsm_a_rr_ie_overrun;
1247 static expert_field ei_gsm_a_rr_ie_underrun;
1248 static expert_field ei_gsm_a_rr_data_not_dissected;
1249 static expert_field ei_gsm_a_rr_unknown_version;
1250 static expert_field ei_gsm_a_rr_extraneous_data;
1251 static expert_field ei_gsm_a_rr_missing_mandatory_element;
1253 static dissector_handle_t rrlp_dissector;
1256 #define NUM_GSM_RR_ELEM array_length(gsm_rr_elem_strings)
1257 int ett_gsm_rr_elem[NUM_GSM_RR_ELEM];
1259 typedef enum
1261 /* RR Rest Octets information elements */
1262 DE_RR_REST_OCTETS_UTRAN_FDD_DESC,
1263 DE_RR_REST_OCTETS_UTRAN_TDD_DESC,
1264 DE_RR_REST_OCTETS_3G_MEAS_PARAM_DESC,
1265 DE_RR_REST_OCTETS_3G_ADD_MEAS_PARAM_DESC,
1266 DE_RR_REST_OCTETS_MEAS_PARAM_DESC,
1267 DE_RR_REST_OCTETS_GPRS_RTD_DESC,
1268 DE_RR_REST_OCTETS_GPRS_BSIC_DESC,
1269 DE_RR_REST_OCTETS_GPRS_REPORT_PRIO_DESC,
1270 DE_RR_REST_OCTETS_GPRS_MEAS_PARAM_DESC,
1271 DE_RR_REST_OCTETS_NC_MEAS_PARAM,
1272 DE_RR_REST_OCTETS_SI2Q_EXT_INFO,
1273 DE_RR_REST_OCTETS_CCN_SUPPORT_DESC,
1274 DE_RR_REST_OCTETS_3G_NEIGH_CELL_DESC,
1275 DE_RR_REST_OCTETS_FDD_CELL_INFORMATION_FIELD,
1276 DE_RR_REST_OCTETS_TDD_CELL_INFORMATION_FIELD,
1277 DE_RR_REST_OCTETS_GPRS_3G_MEAS_PARAM_DESC,
1278 DE_RR_REST_OCTETS_3G_ADD_MEAS_PARAM_DESC2,
1279 DE_RR_REST_OCTETS_PRIORITY_AND_EUTRAN_PARAM_DESC,
1280 DE_RR_REST_OCTETS_SERVING_CELL_PRIORITY_PARAM_DESC,
1281 DE_RR_REST_OCTETS_3G_PRIORITY_PARAM_DESC,
1282 DE_RR_REST_OCTETS_UTRAN_PRIO_PARAM,
1283 DE_RR_REST_OCTETS_EUTRAN_PARAM_DESC,
1284 DE_RR_REST_OCTETS_EUTRAN_NEIGHBOUR_CELLS,
1285 DE_RR_REST_OCTETS_EUTRAN_NOT_ALLOWED_CELLS,
1286 DE_RR_REST_OCTETS_EUTRAN_PCID_TO_TA_MAPPING,
1287 DE_RR_REST_OCTETS_3G_CSG_DESC,
1288 DE_RR_REST_OCTETS_EUTRAN_CSG_DESC,
1289 DE_RR_REST_OCTETS_OPTIONAL_SEL_PARAM,
1290 DE_RR_REST_OCTETS_GPRS_INDICATOR,
1291 DE_RR_REST_OCTETS_SI4_REST_OCTETS_O,
1292 DE_RR_REST_OCTETS_SI4_REST_OCTETS_S,
1293 DE_RR_REST_OCTETS_LSA_PARAMETERS,
1294 DE_RR_REST_OCTETS_LSA_ID_INFO,
1295 DE_RR_REST_OCTETS_PCH_AND_NCH_INFO,
1296 DE_RR_REST_OCTETS_VBS_VGCS_OPTIONS,
1297 DE_RR_REST_OCTETS_GPRS_MOBILE_ALLOC,
1298 DE_RR_REST_OCTETS_GPRS_CELL_OPTIONS,
1299 DE_RR_REST_OCTETS_GPRS_CELL_OPTIONS_EXT_INFO,
1300 DE_RR_REST_OCTETS_GPRS_POWER_CONTROL_PARAMS,
1301 DE_RR_REST_OCTETS_PBCCH_DESC,
1302 DE_RR_REST_OCTETS_GSM_DESC,
1303 DE_RR_REST_OCTETS_RTD_DESC,
1304 DE_RR_REST_OCTETS_BSIC_DESC,
1305 DE_RR_REST_OCTETS_REPORT_PRIO_DESC,
1306 DE_RR_REST_OCTETS_CDMA2000_DESC,
1307 DE_RR_REST_OCTETS_SERVING_CELL_DATA,
1308 DE_RR_REST_OCTETS_REPEAT_INV_BSIC_INFO,
1309 DE_RR_REST_OCTETS_BITMAP_TYPE_REPORTING,
1310 DE_RR_REST_OCTETS_3G_SUPPLEMENTARY_PARAM_DESC,
1311 DE_RR_REST_OCTETS_UTRAN_MEASUREMENT_CONTROL_PARAM_DESC,
1312 DE_RR_REST_OCTETS_EGPRS_PACKET_UPLINK_ASSIGNMENT,
1313 DE_RR_REST_OCTETS_MULTIPLE_BLOCKS_PACKET_DOWNLINK_ASSIGNMENT,
1314 DE_RR_REST_OCTETS_TMGI,
1315 DE_RR_REST_OCTETS_PACKET_TIMING_ADVANCE,
1316 DE_RR_REST_OCTETS_PACKET_UPLINK_ASSIGNMENT,
1317 DE_RR_REST_OCTETS_PACKET_DOWNLINK_ASSIGNMENT,
1318 DE_RR_REST_OCTETS_SECOND_PART_PACKET_ASSIGNMENT,
1319 DE_RR_REST_OCTETS_REPORTING_QUANTITY,
1320 DE_RR_REST_OCTETS_EUTRAN_MEASUREMENT_REPORT,
1321 DE_RR_REST_OCTETS_EUTRAN_DESC,
1322 DE_RR_REST_OCTETS_EAB_PARAM_DESC,
1323 DE_RR_REST_OCTETS_NONE
1325 rr_rest_octets_elem_idx_t;
1327 #define NUM_GSM_RR_REST_OCTETS_ELEM array_length(gsm_rr_rest_octets_elem_strings)
1328 int ett_gsm_rr_rest_octets_elem[NUM_GSM_RR_REST_OCTETS_ELEM];
1330 /* True/False flags specifically for gsm_rr_csn_flag */
1331 static const true_false_string tfs_tfi_multi_block_allocation_present = {"TFI Assignment Present", "Multi Block Allocation Present"};
1332 static const true_false_string tfs_fixed_dynamic_allocation = {"Fixed Allocation (not to be used after Rel-4)", "Dynamic Allocation (mandatory after Rel-4)"};
1333 static const true_false_string tfs_mode_b_mode_a = {"Mode B (not to be used after Rel-4)", "Mode A (mandatory after Rel-4)"};
1334 static const true_false_string tfs_downlink_assignment = {"Default 0 bit", "Reserved Value"};
1335 static const true_false_string tfs_non_distribution_distribution = {"(Non-distribution)", "(Distribution)"};
1336 static const true_false_string tfs_normal_single_block = {"Normal", "Single Block"};
1337 static const true_false_string tfs_early_r97_version_later_than_r97_version = {"Early R97 version", "Later than R97 version"};
1338 static const true_false_string tfs_later_than_r97_version_early_r97_version = {"Later than R97 version", "Early R97 version"};
1339 static const true_false_string tfs_earlier_version_current_version = {"Earlier version", "Current version"};
1340 static const true_false_string tfs_downlink_uplink_discriminator_bit = {"Reserved for future use", "EGPRS Packet Uplink Assignment or Multiple blocks Packet Downlink Assignment"};
1341 static const true_false_string tfs_downlink_uplink_assign = {"Multiple blocks Packet Downlink Assignment", "EGPRS Packet Uplink Assignment"};
1342 static const true_false_string tfs_second_part_packet_assignment = {"Second Part Packet Assignment", "Packet Assignment"};
1343 static const true_false_string tfs_packet_downlink_uplink_assignment = {"Packet Downlink Assignment", "Packet Uplink Assignment"};
1344 static const true_false_string tfs_shall_be_shall_not_be_used = {"Shall be used", "Shall not be used"};
1345 static const true_false_string tfs_current_version_earlier_version = {"Current version", "Earlier version"};
1346 static const true_false_string tfs_member_not_member_of_set = {"is a member of the set", "is not a member of the set"};
1347 static const true_false_string tfs_not_present_present = {"Not Present", "Present"};
1348 static const true_false_string tfs_rsrq_rsrp = {"RSRQ", "RSRP"};
1349 static const true_false_string tfs_3_bit_6_bit = {"3 bit", "6 bit"};
1350 static const true_false_string tfs_tdd_fdd = {"TDD", "FDD"};
1351 static const true_false_string tfs_ec_no_rscp = {"Ec/No", "RSCP"};
1352 static const true_false_string tfs_short_lsa_id_lsa_id = {"Short LSA ID", "LSA ID"};
1353 static const true_false_string tfs_present_not_present_in_cell = {"Present In Cell", "Not Present In Cell"};
1354 static const true_false_string tfs_ec_ptmsi_imsi = {"IMSI", "P-TMSI"};
1356 /* this function is used for dissecting the 0/1 presence flags in CSN.1 coded IEs */
1357 static bool gsm_rr_csn_flag(tvbuff_t *tvb, proto_tree *tree, int bit_offset, int hf_bit)
1359 uint8_t bit_mask = 0x80 >> (bit_offset % 8);
1360 uint8_t value = tvb_get_uint8(tvb, bit_offset >> 3);
1362 proto_tree_add_bits_item(tree, hf_bit, tvb, bit_offset, 1, ENC_NA);
1363 return ((value & bit_mask) != 0);
1366 static const true_false_string tfs_break_indicator = {"Additional parameters \"SI4 Rest Octets_S\" are sent in SYSTEM INFORMATION TYPE 7 and 8",
1367 "Additional parameters \"SI4 Rest Octets_S\" are not sent in SYSTEM INFORMATION TYPE 7 and 8"};
1368 static const true_false_string tfs_for_gprs_for_rr_connection_establishment = {"For GPRS", "For RR connection establishment"};
1369 static const true_false_string tfs_3g_early_classmark_sending_restriction = {"The sending of UTRAN,CDMA2000 and GERAN IU MODE CLASSMARK CHANGE messages are controlled by the Early Classmark Sending Control parameter",
1370 "Neither UTRAN, CDMA2000 nor GERAN IU MODE CLASSMARK CHANGE message shall be sent with the Early classmark sending"};
1371 static const true_false_string tfs_supported_in_serving_cell_not_supported_in_serving_cell = {"Supported in Serving cell", "Not Supported in Serving cell"};
1373 static int de_rr_eutran_not_allowed_cells(tvbuff_t *tvb, proto_tree *tree, int bit_offset);
1375 /* this function is used for dissecting the H/L presence flags in CSN.1 coded IEs"
1376 If truncation ( 44.018 section 8.9) is allowed, truncation_length is set to the actual bit length of the CSN.1 string,
1377 otherwise it is set to 0 */
1378 static bool gsm_rr_csn_HL_flag(tvbuff_t *tvb, proto_tree *tree, unsigned truncation_length, unsigned bit_offset, int hf_bit)
1380 uint8_t bit_mask = 0x80 >> (bit_offset % 8);
1381 uint8_t value = PADDING_BYTE;
1382 char bits_str[] = {".... .... = "};
1383 uint8_t offset_in_octet = bit_offset % 8;
1384 proto_item* ti;
1386 if (truncation_length)
1388 if (bit_offset < truncation_length)
1390 /* there should be some real data to fetch */
1391 value = tvb_get_uint8(tvb, bit_offset >> 3)^PADDING_BYTE;
1393 else
1395 /* implicit L bit */
1396 ti = proto_tree_add_boolean(tree, hf_bit, tvb, truncation_length>>3, 1, false);
1397 proto_item_prepend_text(ti, "(implicit L bit)");
1398 return false;
1401 else
1403 /* if truncation_length == 0, then don't check for truncation*/
1404 value = tvb_get_uint8(tvb, bit_offset >> 3)^PADDING_BYTE;
1407 if (value & bit_mask)
1409 bits_str[offset_in_octet + (offset_in_octet / 4)] = 'H';
1410 ti = proto_tree_add_boolean(tree, hf_bit, tvb, bit_offset>>3, 1, true);
1411 proto_item_prepend_text(ti, "%s", bits_str);
1412 return true;
1414 else
1416 bits_str[offset_in_octet + (offset_in_octet / 4)] = 'L';
1417 ti = proto_tree_add_boolean(tree, hf_bit, tvb, bit_offset>>3, 1, false);
1418 proto_item_prepend_text(ti, "%s", bits_str);
1419 return false;
1424 10.5.2 Radio Resource management information elements
1425 * [3] 10.5.2.1a BA Range
1427 static uint16_t
1428 de_rr_ba_range(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
1430 uint32_t curr_offset;
1431 int bit_offset;
1432 uint8_t value;
1434 curr_offset = offset;
1435 proto_tree_add_item(tree, hf_gsm_a_rr_range_nb, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1436 value = tvb_get_uint8(tvb, curr_offset);
1437 curr_offset += 1;
1438 bit_offset = curr_offset << 3;
1439 while (value)
1441 proto_tree_add_bits_item(tree, hf_gsm_a_rr_range_lower, tvb, bit_offset, 10, ENC_BIG_ENDIAN);
1442 bit_offset += 10;
1443 proto_tree_add_bits_item(tree, hf_gsm_a_rr_range_higher, tvb, bit_offset, 10, ENC_BIG_ENDIAN);
1444 bit_offset += 10;
1445 value -= 1;
1448 curr_offset += len - 1;
1449 return (curr_offset - offset);
1453 * [3] 10.5.2.1b Cell Channel Description
1456 #define ARFCN_MAX 1024 /* total number of ARFCNs defined */
1458 static void display_channel_list(uint8_t *list, tvbuff_t *tvb, proto_tree *tree, uint32_t offset, unsigned len)
1460 int arfcn;
1461 proto_item *ti = NULL;
1463 ti = proto_tree_add_bytes_format(tree, hf_gsm_a_rr_arfcn_list, tvb, offset, len, NULL, "List of ARFCNs =");
1464 for (arfcn=0; arfcn<ARFCN_MAX; arfcn++) {
1465 if (list[arfcn])
1466 proto_item_append_text(ti, " %d", arfcn);
1469 return;
1473 * Checks that the remaining "rest octets" all contain the default padding value.
1474 * If not, it can be assumed that there is a protocol extension
1475 * that we don't handle,
1476 * or a malformed PDU.
1478 * bit_offset: bit offset in TVB of first bit to be examined
1479 * octet_len: total length of buffer
1480 * pattern: padding pattern (usually 0x2b or 0x00)
1482 static void gsm_rr_padding_bits(proto_tree* tree, tvbuff_t* tvb,
1483 uint16_t bit_offset, uint8_t octet_len,
1484 const uint8_t pattern)
1486 unsigned i;
1487 bool non_padding_found = false;
1488 uint8_t octet_offset = bit_offset >> 3;
1490 if ((octet_len << 3) > bit_offset)
1492 /* there is spare room, check the first padding octet */
1493 uint8_t bit_mask = 0xFF >> (bit_offset & 0x07);
1494 if ((tvb_get_uint8(tvb, octet_offset) & bit_mask) != (pattern & bit_mask))
1496 non_padding_found = true;
1498 else
1500 for (i=octet_offset+1; (i<octet_len) && !non_padding_found; i++)
1502 if (tvb_get_uint8(tvb, i) != pattern)
1503 non_padding_found = true;
1507 if (non_padding_found)
1509 /* there is something here we don't understand */
1510 proto_tree_add_bytes_format_value(tree, hf_gsm_a_rr_padding, tvb, octet_offset, -1, NULL, "Unknown extension detected or malformed PDU (Not decoded)");
1512 else
1514 proto_tree_add_bytes_format_value(tree, hf_gsm_a_rr_padding, tvb, octet_offset, -1, NULL, "default padding");
1517 else
1519 proto_tree_add_bytes_format(tree, hf_gsm_a_rr_padding, tvb, 0, 0, NULL, "No space for padding bits");
1523 static int greatest_power_of_2_lesser_or_equal_to(int idx)
1525 int j = 1;
1526 do {
1527 j <<= 1;
1528 } while (j <= idx);
1529 j >>= 1;
1530 return j;
1533 int f_k(int k, int *w, int range)
1535 int idx, n, j;
1537 idx = k;
1538 range -= 1;
1539 range = range/greatest_power_of_2_lesser_or_equal_to(idx);
1540 n = w[idx]-1;
1542 while (idx>1) {
1543 j = greatest_power_of_2_lesser_or_equal_to(idx);
1544 range = 2*range+1;
1545 if ((2*idx) < 3*j){ /* left child */
1546 idx -= j/2;
1547 n = (n+w[idx]-1+((range-1)/2)+1)%range;
1549 else { /* right child */
1550 idx -= j;
1551 n = (n+w[idx]-1+1)%range;
1555 return (n+1)%1024;
1558 static void dissect_channel_list_n_range(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len, int range)
1560 int curr_offset = offset, bit_offset, f0, arfcn_orig, w[64], wsize, i;
1561 int octet, nwi = 1, jwi=0, imax, iused, arfcn;
1562 uint8_t list[1024];
1563 proto_tree *subtree;
1565 memset((void*)list,0,sizeof(list));
1567 subtree = proto_tree_add_subtree_format(tree,tvb, curr_offset, len,
1568 ett_gsm_rr_elem[DE_RR_NEIGH_CELL_DESC], NULL, "Range %d format", range);
1570 octet = tvb_get_uint8(tvb, curr_offset);
1571 if (range == 1024) {
1572 f0 = (octet>>2)&1;
1573 if (f0)
1574 list[0] = 1;
1575 arfcn_orig = 0;
1576 wsize = 10;
1577 imax = 16;
1578 bit_offset = curr_offset*8 + 6;
1580 else {
1581 bit_offset = curr_offset*8 + 7;
1582 arfcn_orig = (int) tvb_get_bits(tvb, bit_offset, 10, false);
1583 proto_tree_add_bits_item(subtree, hf_n_range_orig_arfcn, tvb, bit_offset, 10, ENC_BIG_ENDIAN);
1584 bit_offset+=10;
1586 list[arfcn_orig] = 1;
1588 switch (range) {
1589 case 512:
1590 wsize=9;
1591 imax = 17;
1592 break;
1593 case 256:
1594 wsize=8;
1595 imax = 21;
1596 break;
1597 case 128:
1598 wsize=7;
1599 imax = 28;
1600 break;
1601 default:
1602 DISSECTOR_ASSERT_NOT_REACHED();
1605 iused = imax; /* in case the list is actually full */
1607 /* extract the variable size w[] elements */
1608 for (i=1; i<=imax; i++) {
1609 w[i] = (int) tvb_get_bits(tvb, bit_offset, wsize, false);
1610 proto_tree_add_bytes_format(subtree, hf_gsm_a_rr_w_elements, tvb, bit_offset>>3, ((bit_offset+wsize-1)>>3) - (bit_offset>>3) + 1 , NULL, "%s W(%d): %d",
1611 decode_bits_in_field(pinfo->pool, bit_offset, wsize, w[i], ENC_BIG_ENDIAN),
1613 w[i]);
1614 bit_offset += wsize;
1615 curr_offset = bit_offset>>3;
1617 if ((iused == imax) && (w[i] == 0) ) {
1618 iused = i - 1;
1620 if ((curr_offset-offset)>len) {
1621 iused = i - 1;
1622 break;
1624 if (++jwi == nwi) { /* check if the number of wi at this wsize has been extracted */
1625 jwi = 0; /* reset the count of wi at this size */
1626 nwi <<= 1; /* get twice as many of the next size */
1627 wsize--; /* make the next size 1 bit smaller */
1631 for (i=1; i<=iused; i++) {
1632 arfcn = (f_k(i, w, range) + arfcn_orig)%1024;
1633 list[arfcn] = 1;
1636 display_channel_list(list, tvb, tree, offset, curr_offset-offset);
1638 return;
1641 static uint16_t
1642 dissect_arfcn_list_core(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_, uint8_t format)
1644 uint32_t curr_offset, byte;
1645 uint8_t oct,bit;
1646 uint16_t arfcn;
1647 proto_item *item;
1649 curr_offset = offset;
1651 if ((format & 0xc0) == 0x00)
1653 /* bit map 0 */
1654 item = proto_tree_add_bytes_format(tree, hf_gsm_a_rr_arfcn_list, tvb, curr_offset, len, NULL, "List of ARFCNs =");
1655 bit = 4;
1656 arfcn = 125;
1657 for (byte = 0; byte <= len-1; byte++)
1659 oct = tvb_get_uint8(tvb, curr_offset);
1660 while (bit-- != 0)
1662 arfcn--;
1663 if (((oct >> bit) & 1) == 1)
1665 proto_item_append_text(item," %d",arfcn);
1668 bit = 8;
1669 curr_offset++;
1672 else if ((format & 0xc8) == 0x80)
1674 /* 1024 range */
1675 dissect_channel_list_n_range(tvb, tree, pinfo, curr_offset, len, 1024);
1676 curr_offset = curr_offset + len;
1678 else if ((format & 0xce) == 0x88)
1680 /* 512 range */
1681 dissect_channel_list_n_range(tvb, tree, pinfo, curr_offset, len, 512);
1682 curr_offset = curr_offset + len;
1684 else if ((format & 0xce) == 0x8a)
1686 /* 256 range */
1687 dissect_channel_list_n_range(tvb, tree, pinfo, curr_offset, len, 256);
1688 curr_offset = curr_offset + len;
1690 else if ((format & 0xce) == 0x8c)
1692 /* 128 range */
1693 dissect_channel_list_n_range(tvb, tree, pinfo, curr_offset, len, 128);
1694 curr_offset = curr_offset + len;
1696 else if ((format & 0xce) == 0x8e)
1698 /* variable bit map */
1699 arfcn = ((format & 0x01) << 9) | (tvb_get_uint8(tvb, curr_offset+1) << 1) | ((tvb_get_uint8(tvb, curr_offset + 2) & 0x80) >> 7);
1700 item = proto_tree_add_bytes_format(tree, hf_gsm_a_rr_arfcn_list, tvb, curr_offset, len, NULL, "List of ARFCNs = %d",arfcn);
1701 curr_offset = curr_offset + 2;
1702 bit = 7;
1703 for (byte = 0; byte <= len-3; byte++)
1705 oct = tvb_get_uint8(tvb, curr_offset);
1706 while (bit-- != 0)
1708 arfcn++;
1709 if (((oct >> bit) & 1) == 1)
1711 proto_item_append_text(item," %d",arfcn % 1024);
1714 bit = 8;
1715 curr_offset++;
1719 return curr_offset - offset;
1723 * Format ID is in bits:
1724 * 128 127 124 123 122 (hf_gsm_a_rr_format_id)
1726 static uint16_t
1727 dissect_arfcn_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
1729 uint32_t curr_offset;
1730 uint8_t oct;
1732 curr_offset = offset;
1734 oct = tvb_get_uint8(tvb, curr_offset);
1736 /* FORMAT-ID, Format Identifier (part of octet 3)*/
1737 proto_tree_add_item(tree, hf_gsm_a_rr_format_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1739 curr_offset += dissect_arfcn_list_core(tvb, tree, pinfo, offset, len, add_string, string_len, oct);
1741 return curr_offset - offset;
1745 * Format ID is in bits:
1746 * 128 124 123 122 (hf_gsm_a_rr_format_id2)
1748 static uint16_t
1749 dissect_arfcn_list2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
1751 uint32_t curr_offset;
1752 uint8_t oct;
1754 curr_offset = offset;
1756 /* Turn bit 127 off, in order to reuse the ARFCN dissection code */
1757 oct = tvb_get_uint8(tvb, curr_offset) & 0xbf;
1759 /* FORMAT-ID, Format Identifier (part of octet 3)*/
1760 proto_tree_add_item(tree, hf_gsm_a_rr_format_id2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1762 curr_offset += dissect_arfcn_list_core(tvb, tree, pinfo, offset, len, add_string, string_len, oct);
1764 return curr_offset - offset;
1767 static uint16_t
1768 de_rr_cell_ch_dsc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
1770 return dissect_arfcn_list(tvb, tree, pinfo, offset, 16, add_string, string_len);
1773 * [3] 10.5.2.1c BA List Pref
1775 static uint16_t
1776 de_rr_ba_list_pref(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
1778 unsigned bit_offset;
1780 bit_offset = offset << 3;
1781 while (gsm_rr_csn_flag(tvb, tree, bit_offset++, hf_gsm_a_rr_repeat_range_limit))
1783 proto_tree_add_bits_item(tree, hf_gsm_a_rr_range_lower, tvb, bit_offset, 10, ENC_BIG_ENDIAN);
1784 bit_offset += 10;
1785 proto_tree_add_bits_item(tree, hf_gsm_a_rr_range_higher, tvb, bit_offset, 10, ENC_BIG_ENDIAN);
1786 bit_offset += 10;
1788 while (gsm_rr_csn_flag(tvb, tree, bit_offset++, hf_gsm_a_rr_repeat_ba_frequency))
1790 proto_tree_add_bits_item(tree, hf_gsm_a_rr_ba_freq, tvb, bit_offset, 10, ENC_BIG_ENDIAN);
1791 bit_offset += 10;
1794 if (((bit_offset + 7) >> 3) > (offset + len))
1796 expert_add_info(pinfo, proto_tree_get_parent(tree), &ei_gsm_a_rr_ie_overrun);
1798 else if ((bit_offset >> 3) < (offset + len))
1800 expert_add_info(pinfo, proto_tree_get_parent(tree), &ei_gsm_a_rr_ie_underrun);
1802 return len;
1806 * [3] 10.5.2.1d UTRAN Frequency List
1808 static uint16_t
1809 de_rr_utran_freq_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
1811 unsigned bit_offset;
1813 /* < UTRAN Freq List >::=
1814 * < LENGTH OF UTRAN FREQ LIST : bit (8) > -- length following in octets
1815 * { 1 < FDD_ARFCN > : bit (14) } ** 0 -- FDD frequencies
1816 * { 1 < TDD_ARFCN > : bit (14) } ** 0 -- TDD frequencies
1817 * <spare bit>**;
1818 * Spare bits in the end of the field are used to fill the last octet.
1820 bit_offset = offset << 3;
1821 while (gsm_rr_csn_flag(tvb, tree, bit_offset++, hf_gsm_a_rr_fdd_repeat_freq))
1823 proto_tree_add_bits_item(tree, hf_gsm_a_rr_fdd_uarfcn, tvb, bit_offset, 14, ENC_BIG_ENDIAN);
1824 bit_offset += 14;
1826 while (gsm_rr_csn_flag(tvb, tree, bit_offset++, hf_gsm_a_rr_tdd_repeat_freq))
1828 proto_tree_add_bits_item(tree, hf_gsm_a_rr_tdd_uarfcn, tvb, bit_offset, 14, ENC_BIG_ENDIAN);
1829 bit_offset += 14;
1832 if (((bit_offset + 7) >> 3) > (offset + len))
1834 expert_add_info(pinfo, proto_tree_get_parent(tree), &ei_gsm_a_rr_ie_overrun);
1836 else if ((bit_offset >> 3) < (offset + len))
1838 expert_add_info(pinfo, proto_tree_get_parent(tree), &ei_gsm_a_rr_ie_underrun);
1840 return (len);
1844 * [3] 10.5.2.1e Cell selection indicator after release of all TCH and SDCCH
1846 static const uint8_t
1847 convert_n_to_p[32] = { 0, 10, 19, 28, 36, 44, 52, 60, 67, 74, 81, 88, 95, 102, 109, 116,
1848 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
1850 static const uint8_t
1851 convert_n_to_q[32] = { 0, 9, 17, 25, 32, 39, 46, 53, 59, 65, 71, 77, 83, 89, 95, 101,
1852 106, 111, 116, 121, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
1853 static const true_false_string tfs_1900_1800 = { "1900", "1800" };
1855 static uint16_t
1856 de_rr_cell_select_indic(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
1858 proto_tree *subtree, *subtree2;
1859 proto_item *item;
1860 uint32_t curr_offset;
1861 int bit_offset, bit_offset_sav, idx, xdd_cell_info, wsize, nwi, jwi, w[64], i, iused, xdd_indic0;
1862 uint8_t value;
1864 curr_offset = offset;
1865 bit_offset = curr_offset << 3;
1866 value = tvb_get_bits8(tvb,bit_offset,3);
1867 bit_offset += 3;
1868 switch (value)
1870 case 0: /* GSM Description */
1871 bit_offset_sav = bit_offset;
1872 subtree = proto_tree_add_subtree(tree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_GSM_DESC], &item,
1873 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_GSM_DESC]);
1874 while (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_repeat_gsm_desc))
1876 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_band_indicator, tvb, bit_offset++, 1, ENC_NA);
1877 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_arfcn, tvb, bit_offset, 10, ENC_BIG_ENDIAN);
1878 bit_offset += 10;
1879 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_bsic, tvb, bit_offset, 6, ENC_BIG_ENDIAN);
1880 bit_offset += 6;
1882 proto_item_set_len(item,((bit_offset>>3) - (bit_offset_sav>>3) + 1));
1883 break;
1884 case 1: /* UTRAN FDD Description */
1885 bit_offset_sav = bit_offset;
1886 subtree = proto_tree_add_subtree(tree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_UTRAN_FDD_DESC], &item,
1887 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_FDD_DESC]);
1888 while (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_repeat_utran_fdd_desc))
1890 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_bandwidth_fdd_present))
1892 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_bandwidth_fdd, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
1893 bit_offset += 3;
1895 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_fdd_uarfcn, tvb, bit_offset, 14, ENC_BIG_ENDIAN);
1896 bit_offset += 14;
1897 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_fdd_cell_info_present))
1899 xdd_indic0 = gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_fdd_indic0);
1900 idx = tvb_get_bits8(tvb,bit_offset,5);
1901 proto_tree_add_uint(subtree, hf_gsm_a_rr_nr_of_fdd_cells, tvb, bit_offset>>3, 1, idx);
1902 bit_offset += 5;
1903 idx = convert_n_to_p[idx];
1904 subtree2 = proto_tree_add_subtree(subtree,tvb, bit_offset>>3, (idx>>3)+1,
1905 ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_FDD_CELL_INFORMATION_FIELD], NULL,
1906 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_FDD_DESC]);
1907 proto_tree_add_bytes_format(subtree2, hf_gsm_a_rr_field_bit_long, tvb, bit_offset>>3, (idx>>3)+1, NULL, "Field is %d bits long", idx);
1908 if (xdd_indic0)
1910 proto_tree_add_uint(subtree2, hf_gsm_a_rr_scrambling_code, tvb, bit_offset>>3, 0, 0);
1911 proto_tree_add_uint(subtree2, hf_gsm_a_rr_diversity, tvb, bit_offset>>3, 0, 0);
1913 if (idx)
1915 wsize = 10;
1916 nwi = 1;
1917 jwi = 0;
1918 i = 1;
1920 while (idx > 0)
1922 w[i] = tvb_get_bits(tvb, bit_offset, wsize, ENC_BIG_ENDIAN);
1923 bit_offset += wsize;
1924 idx -= wsize;
1925 if (w[i] == 0)
1927 idx = 0;
1928 break;
1930 if (++jwi == nwi)
1932 jwi = 0;
1933 nwi <<= 1;
1934 wsize--;
1936 i++;
1938 if (idx < 0)
1940 bit_offset += idx;
1942 iused = i-1;
1944 for (i=1; i <= iused; i++)
1946 xdd_cell_info = f_k(i, w, 1024);
1947 proto_tree_add_uint(subtree2, hf_gsm_a_rr_scrambling_code, tvb, bit_offset>>3, 0, xdd_cell_info & 0x01FF);
1948 proto_tree_add_uint(subtree2, hf_gsm_a_rr_diversity, tvb, bit_offset>>3, 0, (xdd_cell_info >> 9) & 0x01);
1953 proto_item_set_len(item,((bit_offset>>3) - (bit_offset_sav>>3) + 1));
1954 break;
1955 case 2: /* UTRAN TDD Description */
1956 bit_offset_sav = bit_offset;
1957 subtree = proto_tree_add_subtree(tree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_UTRAN_TDD_DESC], &item,
1958 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_TDD_DESC]);
1960 while (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_repeat_utran_tdd_desc))
1962 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_bandwidth_tdd_present))
1964 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_bandwidth_tdd, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
1965 bit_offset += 3;
1967 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_tdd_uarfcn, tvb, bit_offset, 14, ENC_BIG_ENDIAN);
1968 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_tdd_cell_info_present))
1970 xdd_indic0 = gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_tdd_indic0);
1971 idx = tvb_get_bits8(tvb,bit_offset,5);
1972 proto_tree_add_uint(subtree, hf_gsm_a_rr_nr_of_tdd_cells, tvb, bit_offset>>3, 1, idx);
1973 bit_offset += 5;
1974 idx = convert_n_to_q[idx];
1975 subtree2 = proto_tree_add_subtree(subtree,tvb, bit_offset>>3, (idx>>3)+1,
1976 ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_TDD_CELL_INFORMATION_FIELD], NULL,
1977 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_TDD_DESC]);
1978 proto_tree_add_bytes_format(subtree2, hf_gsm_a_rr_field_bit_long, tvb, bit_offset>>3, (idx>>3)+1, NULL, "Field is %d bits long", idx);
1979 if (xdd_indic0)
1981 proto_tree_add_uint(subtree2, hf_gsm_a_rr_cell_parameter, tvb, bit_offset>>3, 0, 0);
1982 proto_tree_add_uint(subtree2, hf_gsm_a_rr_sync_case_tstd, tvb, bit_offset>>3, 0, 0);
1983 proto_tree_add_uint(subtree2, hf_gsm_a_rr_diversity_tdd, tvb, bit_offset>>3, 0, 0);
1985 if (idx)
1987 wsize = 9;
1988 nwi = 1;
1989 jwi = 0;
1990 i = 1;
1992 while (idx > 0)
1994 w[i] = tvb_get_bits(tvb, bit_offset, wsize, ENC_BIG_ENDIAN);
1995 bit_offset += wsize;
1996 idx -= wsize;
1997 if (w[i] == 0)
1999 idx = 0;
2000 break;
2002 if (++jwi == nwi)
2004 jwi = 0;
2005 nwi <<= 1;
2006 wsize--;
2008 i++;
2010 if (idx < 0)
2012 bit_offset += idx;
2014 iused = i-1;
2016 for (i=1; i <= iused; i++)
2018 xdd_cell_info = f_k(i, w, 512);
2019 proto_tree_add_uint(subtree2, hf_gsm_a_rr_cell_parameter, tvb, bit_offset>>3, 0, xdd_cell_info & 0x07F);
2020 proto_tree_add_uint(subtree2, hf_gsm_a_rr_sync_case_tstd, tvb, bit_offset>>3, 0, (xdd_cell_info >> 7) & 0x01);
2021 proto_tree_add_uint(subtree2, hf_gsm_a_rr_diversity_tdd, tvb, bit_offset>>3, 0, (xdd_cell_info >> 8) & 0x01);
2026 proto_item_set_len(item,((bit_offset>>3) - (bit_offset_sav>>3) + 1));
2027 break;
2028 case 3: /* E-UTRAN Description */
2030 bit_offset_sav = bit_offset;
2031 subtree = proto_tree_add_subtree(tree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EUTRAN_DESC], &item,
2032 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EUTRAN_DESC]);
2034 while (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_repeat_eutran_desc))
2036 /* EARFCN */
2037 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_earfcn, tvb, bit_offset, 16, ENC_BIG_ENDIAN);
2038 bit_offset += 16;
2040 /* Measurement Bandwidth */
2041 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_eutran_measurement_bandwidth_present))
2043 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_measurement_bandwidth, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
2044 bit_offset += 3;
2047 /* Repeated E-UTRAN Not Allowed Cells */
2048 while (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_repeated_eutran_not_allowed_cells))
2050 bit_offset += de_rr_eutran_not_allowed_cells(tvb, subtree, bit_offset);
2053 /* TARGET PCID */
2054 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_eutran_pcid_present))
2056 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_pcid, tvb, bit_offset, 9, ENC_BIG_ENDIAN);
2057 bit_offset += 9;
2060 proto_item_set_len(item,((bit_offset>>3) - (bit_offset_sav>>3) + 1));
2061 break;
2063 default:
2064 break;
2067 curr_offset += len;
2068 return (curr_offset - offset);
2072 * [3] 10.5.2.2 Cell Description
2074 uint16_t
2075 de_rr_cell_dsc(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
2077 uint32_t curr_offset;
2078 uint16_t bcch_arfcn;
2080 curr_offset = offset;
2082 proto_tree_add_item(subtree, hf_gsm_a_rr_ncc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2083 proto_tree_add_item(subtree, hf_gsm_a_rr_bcc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2084 bcch_arfcn = (tvb_get_uint8(tvb,curr_offset) & 0xc0) << 2;
2085 bcch_arfcn = bcch_arfcn | tvb_get_uint8(tvb,curr_offset+1);
2086 proto_tree_add_uint(subtree, hf_gsm_a_rr_bcch_arfcn , tvb, curr_offset, 2, bcch_arfcn );
2088 curr_offset = curr_offset + 2;
2090 return curr_offset - offset;
2094 * [3] 10.5.2.3 Cell Options (BCCH)
2096 static const value_string gsm_a_rr_dtx_bcch_vals[] = {
2097 { 0x00, "The MSs may use uplink discontinuous transmission" },
2098 { 0x01, "The MSs shall use uplink discontinuous transmission" },
2099 { 0x02, "The MSs shall not use uplink discontinuous transmission" },
2100 { 0x03, "Reserved" },
2101 { 0, NULL } };
2103 static const value_string gsm_a_rr_radio_link_timeout_vals[] = {
2104 { 0x00, "4" },
2105 { 0x01, "8" },
2106 { 0x02, "12" },
2107 { 0x03, "16" },
2108 { 0x04, "20" },
2109 { 0x05, "24" },
2110 { 0x06, "28" },
2111 { 0x07, "32" },
2112 { 0x08, "36" },
2113 { 0x09, "40" },
2114 { 0x0A, "44" },
2115 { 0x0B, "48" },
2116 { 0x0C, "52" },
2117 { 0x0D, "56" },
2118 { 0x0E, "60" },
2119 { 0x0F, "64" },
2120 { 0, NULL } };
2122 static uint16_t
2123 de_rr_cell_opt_bcch(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
2125 uint32_t curr_offset;
2127 curr_offset = offset;
2129 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_pwrc, tvb, (curr_offset<<3)+1, 1, ENC_BIG_ENDIAN);
2130 proto_tree_add_item(subtree, hf_gsm_a_rr_dtx_bcch, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2131 proto_tree_add_item(subtree, hf_gsm_a_rr_radio_link_timeout, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2133 curr_offset = curr_offset + 1;
2135 return curr_offset - offset;
2139 * [3] 10.5.2.3a Cell Options (SACCH)
2141 static const value_string gsm_a_rr_dtx_sacch_vals[] = {
2142 { 0x00, "The MS may use uplink discontinuous transmission on a TCH-F. The MS shall not use uplink discontinuous transmission on TCH-H" },
2143 { 0x01, "The MS shall use uplink discontinuous transmission on a TCH-F. The MS shall not use uplink discontinuous transmission on TCH-H" },
2144 { 0x02, "The MS shall not use uplink discontinuous transmission on a TCH-F. The MS shall not use uplink discontinuous transmission on TCH-H" },
2145 { 0x03, "The MS shall use uplink discontinuous transmission on a TCH-F. The MS may use uplink discontinuous transmission on TCH-H" },
2146 { 0x04, "The MS may use uplink discontinuous transmission on a TCH-F. The MS may use uplink discontinuous transmission on TCH-H" },
2147 { 0x05, "The MS shall use uplink discontinuous transmission on a TCH-F. The MS shall use uplink discontinuous transmission on TCH-H" },
2148 { 0x06, "The MS shall not use uplink discontinuous transmission on a TCH-F. The MS shall use uplink discontinuous transmission on TCH-H" },
2149 { 0x07, "The MS may use uplink discontinuous transmission on a TCH-F. The MS shall use uplink discontinuous transmission on TCH-H" },
2150 { 0, NULL } };
2152 static const crumb_spec_t gsm_a_rr_dtx_sacch_crumbs[] = {
2153 { 0, 1}, /* B8 */
2154 { 2, 2}, /* B6 - B5 */
2155 { 0, 0}
2158 static uint16_t
2159 de_rr_cell_opt_sacch(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
2161 uint32_t curr_offset;
2163 curr_offset = offset;
2166 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_pwrc, tvb, (curr_offset<<3)+1, 1, ENC_BIG_ENDIAN);
2167 /* DTX is a split field in bits 8, 6 and 5 */
2168 proto_tree_add_split_bits_item_ret_val(subtree, hf_gsm_a_rr_dtx_sacch, tvb, (curr_offset<<3), gsm_a_rr_dtx_sacch_crumbs, NULL);
2169 proto_tree_add_item(subtree, hf_gsm_a_rr_radio_link_timeout, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2171 curr_offset = curr_offset + 1;
2173 return curr_offset - offset;
2177 * [3] 10.5.2.4 Cell Selection Parameters
2179 static uint16_t
2180 de_rr_cell_sel_param(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
2182 uint32_t curr_offset;
2184 curr_offset = offset;
2186 proto_tree_add_item(subtree, hf_gsm_a_rr_cell_reselect_hyst, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2187 proto_tree_add_item(subtree, hf_gsm_a_rr_ms_txpwr_max_cch, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2189 curr_offset = curr_offset + 1;
2191 proto_tree_add_item(subtree, hf_gsm_a_rr_acs, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2192 proto_tree_add_item(subtree, hf_gsm_a_rr_neci, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2193 proto_tree_add_item(subtree, hf_gsm_a_rr_rxlev_access_min, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2195 curr_offset = curr_offset + 1;
2197 return curr_offset - offset;
2201 * [3] 10.5.2.4a MAC Mode and Channel Coding Requested
2202 * [3] 10.5.2.5 Channel Description
2204 uint16_t
2205 de_rr_ch_dsc(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
2207 uint32_t curr_offset;
2208 uint8_t oct8,subchannel;
2209 uint16_t arfcn, hsn, maio;
2210 int hf_subchannel;
2212 curr_offset = offset;
2214 /* Octet 2 */
2215 oct8 = tvb_get_uint8(tvb, curr_offset);
2217 if ((oct8 & 0xf8) == 0x08)
2219 proto_tree_add_item(subtree, hf_gsm_a_rr_tchf_acchs, tvb, curr_offset, 1, ENC_NA);
2221 else
2223 if ((oct8 & 0xf0) == 0x10)
2225 hf_subchannel = hf_gsm_a_rr_tch_acch;
2226 subchannel = ((oct8 & 0x08)>>3);
2228 else if ((oct8 & 0xe0) == 0x20)
2230 hf_subchannel = hf_gsm_a_rr_sdcch4_sdcchc4_cbch;
2231 subchannel = ((oct8 & 0x18)>>3);
2233 else if ((oct8 & 0xc0) == 0x40)
2235 hf_subchannel = hf_gsm_a_rr_sdcch8_sdcchc8_cbch;
2236 subchannel = ((oct8 & 0x38)>>3);
2237 } else {
2238 hf_subchannel = hf_gsm_a_rr_unknown_channel_info;
2239 subchannel = oct8;
2242 proto_tree_add_item(subtree, hf_subchannel, tvb, curr_offset, 1, ENC_NA);
2243 proto_tree_add_uint(subtree, hf_gsm_a_rr_subchannel, tvb, curr_offset, 1, subchannel);
2246 proto_tree_add_item(subtree, hf_gsm_a_rr_timeslot, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2248 curr_offset +=1;
2250 /* Octet 3 */
2251 oct8 = tvb_get_uint8(tvb, curr_offset);
2252 proto_tree_add_item(subtree, hf_gsm_a_rr_training_sequence, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2254 proto_tree_add_item(subtree, hf_gsm_a_rr_hopping_channel, tvb, curr_offset, 1, ENC_NA);
2255 if ((oct8 & 0x10) == 0x10)
2257 /* Hopping sequence */
2258 maio = ((oct8 & 0x0f)<<2) | ((tvb_get_uint8(tvb,curr_offset+1) & 0xc0) >> 6);
2259 hsn = (tvb_get_uint8(tvb,curr_offset+1) & 0x3f);
2261 proto_tree_add_uint(subtree, hf_gsm_a_rr_hopping_channel_maio, tvb, curr_offset, 2, maio);
2262 proto_tree_add_uint(subtree, hf_gsm_a_rr_hsn, tvb, curr_offset, 2, hsn);
2264 else
2266 /* single ARFCN */
2267 arfcn = ((oct8 & 0x03) << 8) | tvb_get_uint8(tvb,curr_offset+1);
2269 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_spare, tvb, (curr_offset<<3)+4, 2, ENC_NA);
2270 proto_tree_add_uint(subtree, hf_gsm_a_rr_single_channel_arfcn, tvb, curr_offset, 2, arfcn);
2273 curr_offset = curr_offset + 2;
2275 return curr_offset - offset;
2278 * [3] 10.5.2.5a Channel Description 2
2280 static uint16_t
2281 de_rr_ch_dsc2(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
2283 uint32_t curr_offset;
2284 uint8_t oct8,subchannel;
2285 uint16_t arfcn, hsn, maio;
2286 int hf_subchannel;
2288 curr_offset = offset;
2290 /* Octet 2 */
2291 oct8 = tvb_get_uint8(tvb, curr_offset);
2293 if ((oct8 & 0xf8) == 0x0)
2295 proto_tree_add_item(subtree, hf_gsm_a_rr_tch_facch_sacchm, tvb, curr_offset, 1, ENC_NA);
2297 else if ((oct8 & 0xf8) == 0x08)
2299 proto_tree_add_item(subtree, hf_gsm_a_rr_tch_facch_sacchf, tvb, curr_offset, 1, ENC_NA);
2301 else if ((oct8 & 0xf8) == 0xf0)
2303 proto_tree_add_item(subtree, hf_gsm_a_rr_tch_facch_sacchm_bi, tvb, curr_offset, 1, ENC_NA);
2305 else
2307 if ((oct8 & 0xf0) == 0x10)
2309 hf_subchannel = hf_gsm_a_rr_tch_acch;
2310 subchannel = ((oct8 & 0x08)>>3);
2312 else if ((oct8 & 0xe0) == 0x20)
2314 hf_subchannel = hf_gsm_a_rr_sdcch4_sdcchc4_cbch;
2315 subchannel = ((oct8 & 0x18)>>3);
2317 else if ((oct8 & 0xc0) == 0x40)
2319 hf_subchannel = hf_gsm_a_rr_sdcch8_sdcchc8_cbch;
2320 subchannel = ((oct8 % 0x38)>>3);
2322 else if ((oct8 & 0xc0) == 0x80)
2324 hf_subchannel = hf_gsm_a_rr_tch_facchf_sacchm_bi;
2325 subchannel = ((oct8 % 0x38)>>3);
2327 else if ((oct8 & 0xe0) == 0xc0)
2329 hf_subchannel = hf_gsm_a_rr_tch_facchf_sacchm_uni;
2330 subchannel = ((oct8 % 0x38)>>3);
2331 } else {
2332 hf_subchannel = hf_gsm_a_rr_unknown_channel_info;
2333 subchannel = oct8;
2335 proto_tree_add_item(subtree, hf_subchannel, tvb, curr_offset, 1, ENC_NA);
2336 proto_tree_add_uint(subtree, hf_gsm_a_rr_subchannel, tvb, curr_offset, 1, subchannel);
2339 proto_tree_add_item(subtree, hf_gsm_a_rr_timeslot, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2341 curr_offset +=1;
2343 /* Octet 3 */
2344 oct8 = tvb_get_uint8(tvb, curr_offset);
2345 proto_tree_add_item(subtree, hf_gsm_a_rr_training_sequence, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2347 proto_tree_add_item(subtree, hf_gsm_a_rr_hopping_channel, tvb, curr_offset, 1, ENC_NA);
2348 if ((oct8 & 0x10) == 0x10)
2350 /* Hopping sequence */
2351 maio = ((oct8 & 0x0f)<<2) | ((tvb_get_uint8(tvb,curr_offset+1) & 0xc0) >> 6);
2352 hsn = (tvb_get_uint8(tvb,curr_offset+1) & 0x3f);
2354 proto_tree_add_uint(subtree, hf_gsm_a_rr_hopping_channel_maio, tvb, curr_offset, 2, maio);
2355 proto_tree_add_uint(subtree, hf_gsm_a_rr_hsn, tvb, curr_offset, 2, hsn);
2357 else
2359 /* single ARFCN */
2360 arfcn = ((oct8 & 0x03) << 8) | tvb_get_uint8(tvb,curr_offset+1);
2362 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_spare, tvb, (curr_offset<<3)+4, 2, ENC_NA);
2363 proto_tree_add_uint(subtree, hf_gsm_a_rr_single_channel_arfcn, tvb, curr_offset, 2, arfcn);
2366 curr_offset = curr_offset + 2;
2368 return curr_offset - offset;
2372 * [3] 10.5.2.5c Channel Description 3
2374 static uint16_t
2375 de_rr_ch_dsc3(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
2377 uint32_t curr_offset;
2378 uint8_t oct8;
2379 uint16_t arfcn, hsn, maio;
2381 curr_offset = offset;
2383 /* Octet 2 */
2384 oct8 = tvb_get_uint8(tvb, curr_offset);
2385 proto_tree_add_item(subtree, hf_gsm_a_rr_training_sequence, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2387 proto_tree_add_item(subtree, hf_gsm_a_rr_hopping_channel, tvb, curr_offset, 1, ENC_NA);
2388 if ((oct8 & 0x10) == 0x10)
2390 /* Hopping sequence */
2391 maio = ((oct8 & 0x0f)<<2) | ((tvb_get_uint8(tvb,curr_offset+1) & 0xc0) >> 6);
2392 hsn = (tvb_get_uint8(tvb,curr_offset+1) & 0x3f);
2394 proto_tree_add_uint(subtree, hf_gsm_a_rr_hopping_channel_maio, tvb, curr_offset, 2, maio);
2395 proto_tree_add_uint(subtree, hf_gsm_a_rr_hsn, tvb, curr_offset, 2, hsn);
2397 else
2399 /* single ARFCN */
2400 arfcn = ((oct8 & 0x03) << 8) | tvb_get_uint8(tvb,curr_offset+1);
2402 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_spare, tvb, (curr_offset<<3)+4, 2, ENC_NA);
2403 proto_tree_add_uint(subtree, hf_gsm_a_rr_single_channel_arfcn, tvb, curr_offset, 2, arfcn);
2406 curr_offset = curr_offset + 2;
2408 return curr_offset - offset;
2412 * [3] 10.5.2.6 Channel Mode
2414 /* Channel Mode */
2415 static const value_string gsm_a_rr_channel_mode_vals[] = {
2416 { 0x00, "signalling only"},
2417 { 0x01, "speech full rate or half rate version 1 (GSM FR or GSM HR)"},
2418 { 0xc1, "speech full rate or half rate version 1 (GSM FR or GSM HR) in VAMOS mode" },
2419 { 0x21, "speech full rate or half rate version 2 (GSM EFR)"},
2420 { 0xC2, "speech full rate or half rate version 2 (GSM EFR) in VAMOS mode"},
2421 { 0x41, "speech full rate or half rate version 3 (FR AMR or HR AMR)"},
2422 { 0xc3, "speech full rate or half rate version 3 (FR AMR or HR AMR) in VAMOS mode"},
2423 { 0x81, "speech full rate or half rate version 4 (OFR AMR-WB or OHR AMR-WB)"},
2424 { 0x82, "speech full rate or half rate version 5 (FR AMR-WB )"},
2425 { 0xc5, "speech full rate or half rate version 5 (FR AMR-WB ) in VAMOS mode"},
2426 { 0x83, "speech full rate or half rate version 6 (OHR AMR )"},
2427 { 0x61, "data, 43.5 kbit/s (downlink)+14.5 kbps (uplink)"},
2428 { 0x62, "data, 29.0 kbit/s (downlink)+14.5 kbps (uplink)"},
2429 { 0x64, "data, 43.5 kbit/s (downlink)+29.0 kbps (uplink)"},
2430 { 0x67, "data, 14.5 kbit/s (downlink)+43.5 kbps (uplink)"},
2431 { 0x65, "data, 14.5 kbit/s (downlink)+29.0 kbps (uplink)"},
2432 { 0x66, "data, 29.0 kbit/s (downlink)+43.5 kbps (uplink)"},
2433 { 0x27, "data, 43.5 kbit/s radio interface rate"},
2434 { 0x63, "data, 32.0 kbit/s radio interface rate"},
2435 { 0x43, "data, 29.0 kbit/s radio interface rate"},
2436 { 0x0f, "data, 14.5 kbit/s radio interface rate"},
2437 { 0x03, "data, 12.0 kbit/s radio interface rate"},
2438 { 0x0b, "data, 6.0 kbit/s radio interface rate"},
2439 { 0x13, "data, 3.6 kbit/s radio interface rate"},
2440 { 0x10, "data, 64.0 kbit/s Transparent Data Bearer"},
2441 { 0, NULL }
2444 uint16_t
2445 de_rr_ch_mode(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
2447 uint32_t curr_offset;
2449 curr_offset = offset;
2451 proto_tree_add_item(tree, hf_gsm_a_rr_channel_mode, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2453 curr_offset = curr_offset + 1;
2455 return curr_offset - offset;
2458 * [3] 10.5.2.7 Channel Mode 2
2461 static const value_string gsm_a_rr_channel_mode2_vals[] = {
2462 { 0x00, "signalling only"},
2463 { 0x05, "speech half rate version 1(GSM HR)"},
2464 { 0x25, "speech half rate version 2(GSM EFR)"},
2465 { 0x45, "speech half rate version 3(HR AMR)"},
2466 { 0x85, "speech half rate version 4(OHR AMR-WB)"},
2467 { 0x06, "speech half rate version 6(OHR AMR )"},
2468 { 0x0f, "data, 6.0 kbit/s radio interface rate"},
2469 { 0x17, "data, 3.6 kbit/s radio interface rate"},
2470 { 0, NULL }
2473 static uint16_t
2474 de_rr_ch_mode2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
2476 uint32_t curr_offset;
2478 curr_offset = offset;
2480 proto_tree_add_item(tree, hf_gsm_a_rr_channel_mode2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2482 curr_offset = curr_offset + 1;
2484 return curr_offset - offset;
2487 * [3] 10.5.2.7a UTRAN Classmark information element
2489 static uint16_t
2490 de_rr_utran_cm(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
2492 uint32_t curr_offset;
2493 tvbuff_t *rrc_irat_ho_info_tvb;
2495 curr_offset = offset;
2496 if (len)
2498 rrc_irat_ho_info_tvb = tvb_new_subset_length(tvb, curr_offset, len);
2499 if (rrc_irat_ho_info_handle)
2500 call_dissector(rrc_irat_ho_info_handle, rrc_irat_ho_info_tvb, pinfo, tree);
2503 curr_offset += len;
2504 return curr_offset - offset;
2508 * [3] 10.5.2.7b (void)
2512 * [3] 10.5.2.7c Classmark Enquiry Mask
2513 * Bit 8:
2514 * 0 CLASSMARK CHANGE message is requested
2515 * 1 CLASSMARK CHANGE message is not requested
2516 * Bits 7-5 . 5
2517 * 000 UTRAN CLASSMARK CHANGE message including status on predefined configurations (i.e. Sequence Description) is requested
2518 * 111 UTRAN CLASSMARK CHANGE message including status on predefined configurations (i.e. Sequence Description) is not requested.
2519 * All other values shall not be sent. If received, they shall be interpreted as '000'.
2520 * Bit 4:
2521 * 0 CDMA2000 CLASSMARK CHANGE message requested
2522 * 1 CDMA2000 CLASSMARK CHANGE message not requested.
2523 * Bit 3:
2524 * 0 GERAN IU MODE CLASSMARK CHANGE message requested
2525 * 1 GERAN IU MODE CLASSMARK CHANGE message not requested.
2526 * Bits 2 - 1: spare(0).
2528 static const true_false_string gsm_a_msg_req_value = {
2529 "message is not requested",
2530 "message is requested"
2533 static const value_string gsm_a_rr_utran_cm_cng_msg_req_vals[] = {
2534 { 0x0, "message including status on predefined configurations (i.e. Sequence Description) is requested"},
2535 { 0x1, "message including status on predefined configurations (i.e. Sequence Description) is requested"},
2536 { 0x2, "message including status on predefined configurations (i.e. Sequence Description) is requested"},
2537 { 0x3, "message including status on predefined configurations (i.e. Sequence Description) is requested"},
2538 { 0x4, "message including status on predefined configurations (i.e. Sequence Description) is requested"},
2539 { 0x5, "message including status on predefined configurations (i.e. Sequence Description) is requested"},
2540 { 0x6, "message including status on predefined configurations (i.e. Sequence Description) is requested"},
2541 { 0x7, "message including status on predefined configurations (i.e. Sequence Description) is not requested."},
2542 { 0, NULL }
2544 uint16_t
2545 de_rr_cm_enq_mask(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
2547 uint32_t curr_offset;
2549 curr_offset = offset;
2551 proto_tree_add_item(tree, hf_gsm_a_rr_cm_cng_msg_req, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2552 proto_tree_add_item(tree, hf_gsm_a_rr_utran_cm_cng_msg_req, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2553 proto_tree_add_item(tree, hf_gsm_a_rr_cdma2000_cm_cng_msg_req, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2554 proto_tree_add_item(tree, hf_gsm_a_rr_geran_iu_cm_cng_msg_req, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2556 curr_offset = curr_offset + 1;
2558 return curr_offset - offset;
2561 * [3] 10.5.2.8 Channel Needed
2563 static const value_string gsm_a_rr_channel_needed_vals[] = {
2564 { 0x00, "Any channel"},
2565 { 0x01, "SDCCH"},
2566 { 0x02, "TCH/F (Full rate)"},
2567 { 0x03, "TCH/H or TCH/F (Dual rate)"},
2568 { 0, NULL }
2570 uint16_t
2571 de_rr_chnl_needed(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
2573 uint32_t curr_offset;
2574 int bit_offset;
2576 curr_offset = offset;
2577 if (RIGHT_NIBBLE == len)
2578 bit_offset = 4;
2579 else
2580 bit_offset = 0;
2582 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_chnl_needed_ch1, tvb, (curr_offset<<3)+bit_offset+2, 2, ENC_BIG_ENDIAN);
2583 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_chnl_needed_ch2, tvb, (curr_offset<<3)+bit_offset, 2, ENC_BIG_ENDIAN);
2585 curr_offset = curr_offset + 1;
2587 return curr_offset - offset;
2590 * [3] 10.5.2.8a Channel Request Description
2594 * [3] 10.5.2.8b Channel Request Description 2
2596 static const value_string gsm_a_rr_pkt_estab_cause_vals[] = {
2597 { 0x00, "User Data"},
2598 { 0x01, "Page Response"},
2599 { 0x02, "Cell Update"},
2600 { 0x03, "Mobility Management procedure"},
2601 { 0, NULL }
2603 static const value_string gsm_a_rr_radio_priority_vals[] = {
2604 { 0x00, "1"},
2605 { 0x01, "2"},
2606 { 0x02, "3"},
2607 { 0x03, "4"},
2608 { 0, NULL }
2610 static const true_false_string gsm_a_rr_llc_pdu_type_value = {
2611 "LLC PDU is not SACK or ACK",
2612 "LLC PDU is SACK or ACK"
2614 static const true_false_string gsm_a_rr_reduced_latency_cap_value = {
2615 "The mobile station supports Reduced TTI configurations and Fast Ack/Nack Reporting",
2616 "The mobile station does not support Reduced TTI configurations and Fast Ack/Nack Reporting"
2618 static const value_string gsm_a_rr_egprs2_vals[] = {
2619 { 0x00, "The mobile station does not support either EGPRS2-A or EGPRS2-B"},
2620 { 0x01, "The mobile station supports EGPRS2-A"},
2621 { 0x02, "The mobile station supports both EGPRS2-A and EGPRS2-B"},
2622 { 0, NULL }
2624 static uint16_t
2625 de_rr_chnl_req_desc2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
2627 uint32_t bit_offset = offset << 3;
2629 proto_tree_add_bits_item(tree, hf_gsm_a_rr_pkt_estab_cause, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
2630 bit_offset += 2;
2631 proto_tree_add_bits_item(tree, hf_gsm_a_rr_peak_throughput_class, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
2632 bit_offset += 4;
2633 proto_tree_add_bits_item(tree, hf_gsm_a_rr_radio_priority, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
2634 bit_offset += 2;
2635 proto_tree_add_bits_item(tree, hf_gsm_a_rr_rlc_mode, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2636 bit_offset += 1;
2637 proto_tree_add_bits_item(tree, hf_gsm_a_rr_llc_pdu_type, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2638 bit_offset += 1;
2639 proto_tree_add_bits_item(tree, hf_gsm_a_rr_rlc_octet_count, tvb, bit_offset, 16, ENC_BIG_ENDIAN);
2640 bit_offset += 16;
2641 if (gsm_rr_csn_flag(tvb, tree, bit_offset++, hf_gsm_a_rr_pfi_present)) {
2642 proto_tree_add_bits_item(tree, hf_gsm_a_rr_pfi, tvb, bit_offset, 7, ENC_BIG_ENDIAN);
2643 bit_offset += 7;
2645 gsm_rr_csn_HL_flag(tvb, tree, 0, bit_offset++, hf_gsm_a_rr_multiple_tbf_procedures);
2646 bit_offset += 1;
2647 if (gsm_rr_csn_HL_flag(tvb, tree, (offset+len)<<3, bit_offset++, hf_gsm_a_rr_additions_in_rel_7)) {
2648 proto_tree_add_bits_item(tree, hf_gsm_a_rr_rlc_non_pers_mode_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2649 bit_offset += 1;
2650 proto_tree_add_bits_item(tree, hf_gsm_a_rr_reduced_latency_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2651 bit_offset += 1;
2652 proto_tree_add_bits_item(tree, hf_gsm_a_rr_ul_egprs2, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
2653 bit_offset += 2;
2654 proto_tree_add_bits_item(tree, hf_gsm_a_rr_dl_egprs2, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
2655 bit_offset += 2;
2656 if (gsm_rr_csn_HL_flag(tvb, tree, (offset+len)<<3, bit_offset++, hf_gsm_a_rr_additions_in_rel_9)) {
2657 proto_tree_add_bits_item(tree, hf_gsm_a_rr_emst_ms_cap, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2658 /*bit_offset += 1;*/
2662 return len;
2666 * [3] 10.5.2.9 Cipher Mode Setting
2668 /* SC (octet 1) */
2669 static const value_string gsm_a_rr_sc_vals[] = {
2670 { 0, "No ciphering"},
2671 { 1, "Start ciphering"},
2672 { 0, NULL }
2674 /* algorithm identifier
2675 * If SC=1 then:
2676 * bits
2677 * 4 3 2
2679 uint16_t
2680 de_rr_cip_mode_set(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
2682 uint32_t curr_offset;
2683 int bit_offset;
2684 uint64_t value;
2686 curr_offset = offset;
2688 /* Cipher Mode Setting
2689 * Note: The coding of fields SC and algorithm identifier is defined in [44.018]
2690 * as part of the Cipher Mode Setting IE.
2692 if (RIGHT_NIBBLE == len)
2693 bit_offset = 4;
2694 else
2695 bit_offset = 0;
2697 proto_tree_add_bits_ret_val(tree, hf_gsm_a_rr_sc, tvb, (curr_offset<<3)+bit_offset+3, 1, &value, ENC_BIG_ENDIAN);
2698 if (value == 1){ /* Start ciphering */
2699 /* algorithm identifier */
2700 proto_tree_add_bits_item(tree, hf_gsm_a_rr_algorithm_id, tvb, (curr_offset<<3)+bit_offset, 3, ENC_BIG_ENDIAN);
2702 curr_offset = curr_offset + 1;
2704 return curr_offset - offset;
2707 * [3] 10.5.2.10 Cipher Response
2709 /* CR (octet 1) */
2710 static const value_string gsm_a_rr_cr_vals[] = {
2711 { 0, "IMEISV shall not be included"},
2712 { 1, "IMEISV shall be included"},
2713 { 0, NULL }
2716 static uint16_t
2717 de_rr_cip_mode_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
2719 uint32_t curr_offset;
2720 int bit_offset;
2722 curr_offset = offset;
2723 if (RIGHT_NIBBLE == len)
2724 bit_offset = 4;
2725 else
2726 bit_offset = 0;
2728 /* Cipher Mode Response
2729 * Note: The coding of field CR is defined in [44.018]
2730 * as part of the Cipher Mode Response IE.
2732 proto_tree_add_bits_item(tree, hf_gsm_a_rr_cr, tvb, (curr_offset<<3)+bit_offset+3, 1, ENC_BIG_ENDIAN);
2733 curr_offset = curr_offset + 1;
2735 return curr_offset - offset;
2737 /* [3] 10.5.2.11 Control Channel Description */
2739 static const value_string gsm_a_rr_mscr_vals[] = {
2740 { 0, "MSC is Release '98 or older"},
2741 { 1, "MSC is Release '99 onwards"},
2742 { 0, NULL }
2745 static const value_string gsm_a_rr_att_vals[] = {
2746 { 0, "MSs in the cell are not allowed to apply IMSI attach and detach procedure"},
2747 { 1, "MSs in the cell shall apply IMSI attach and detach procedure"},
2748 { 0, NULL }
2751 static const value_string gsm_a_rr_ccch_conf_vals[] = {
2752 { 0, "1 basic physical channel used for CCCH, not combined with SDCCHs"},
2753 { 1, "1 basic physical channel used for CCCH, combined with SDCCHs"},
2754 { 2, "2 basic physical channels used for CCCH, not combined with SDCCHs"},
2755 { 3, "Reserved"},
2756 { 4, "3 basic physical channels used for CCCH, not combined with SDCCHs"},
2757 { 5, "Reserved"},
2758 { 6, "4 basic physical channels used for CCCH, not combined with SDCCHs"},
2759 { 7, "Reserved"},
2760 { 0, NULL }
2763 static const value_string gsm_a_rr_cbq3_vals[] = {
2764 { 0, "Iu mode not supported"},
2765 { 1, "Iu mode capable MSs barred"},
2766 { 2, "Iu mode supported, cell not barred"},
2767 { 3, "Iu mode supported, cell not barred. The network shall not use this value"},
2768 { 0, NULL }
2771 static uint16_t
2772 de_rr_ctrl_ch_desc(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
2774 uint8_t oct;
2775 uint32_t curr_offset;
2777 curr_offset = offset;
2779 proto_tree_add_item(subtree, hf_gsm_a_rr_mscr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2780 proto_tree_add_item(subtree, hf_gsm_a_rr_att, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2781 proto_tree_add_item(subtree, hf_gsm_a_rr_bs_ag_blks_res, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2782 proto_tree_add_item(subtree, hf_gsm_a_rr_ccch_conf, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2784 curr_offset = curr_offset + 1;
2785 oct = tvb_get_uint8(tvb, curr_offset);
2787 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_cbq3, tvb, (curr_offset<<3)+1, 2, ENC_BIG_ENDIAN);
2788 proto_tree_add_uint(subtree, hf_gsm_a_rr_bs_pa_mfrms, tvb, curr_offset, 1, (oct&0x07)+2);
2790 curr_offset = curr_offset + 1;
2792 proto_tree_add_item(subtree, hf_gsm_a_rr_t3212, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2794 curr_offset = curr_offset + 1;
2796 return curr_offset - offset;
2799 /* [3] 10.5.2.11a DTM Information Details
2801 static const true_false_string tfs_supported_not_supported_by_cell = { "Supported by cell", "Not supported by cell" };
2803 static uint16_t
2804 de_rr_dtm_info_details(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
2806 uint32_t bit_offset = offset << 3;
2808 proto_tree_add_bits_item(tree, hf_gsm_a_rr_max_lapdm, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
2809 bit_offset += 3;
2810 proto_tree_add_bits_item(tree, hf_gsm_a_rr_gprs_ms_txpwr_max_ccch, tvb, bit_offset, 5, ENC_BIG_ENDIAN);
2811 bit_offset += 5;
2812 proto_tree_add_bits_item(tree, hf_gsm_a_rr_cell_id, tvb, bit_offset, 16, ENC_BIG_ENDIAN);
2813 bit_offset += 16;
2814 if (gsm_rr_csn_HL_flag(tvb, tree, (offset+len)<<3, bit_offset++, hf_gsm_a_rr_additions_in_rel_6)) {
2815 if (gsm_rr_csn_flag(tvb, tree, bit_offset++, hf_gsm_a_rr_msms_procedures)) {
2816 proto_tree_add_bits_item(tree, hf_gsm_a_rr_dedicated_mode_mbms_notification_support, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2817 bit_offset += 1;
2818 proto_tree_add_bits_item(tree, hf_gsm_a_rr_mnci_support, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2819 /*bit_offset += 1;*/
2823 return len;
2827 * [3] 10.5.2.11b Dynamic ARFCN Mapping
2829 static const value_string gsm_a_rr_gsm_band_vals[] = {
2830 { 0, "GSM 750"},
2831 { 1, "DCS 1800"},
2832 { 2, "PCS 1900"},
2833 { 3, "GSM T 380"},
2834 { 4, "GSM T 410"},
2835 { 5, "GSM T 900"},
2836 { 6, "GSM 710"},
2837 { 7, "GSM T 810"},
2838 { 8, "Reserved"},
2839 { 9, "Reserved"},
2840 { 10, "Reserved"},
2841 { 11, "Reserved"},
2842 { 12, "Reserved"},
2843 { 13, "Reserved"},
2844 { 14, "Reserved"},
2845 { 15, "Reserved"},
2846 { 0, NULL }
2850 static uint16_t
2851 de_rr_dyn_arfcn_map(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
2853 unsigned bit_offset;
2855 bit_offset = offset << 3;
2857 while (gsm_rr_csn_flag(tvb, tree, bit_offset++, hf_gsm_a_rr_repeat_dynamic_arfcn_mapping))
2859 proto_tree_add_bits_item(tree, hf_gsm_a_rr_gsm_band, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
2860 bit_offset += 4;
2861 proto_tree_add_bits_item(tree, hf_gsm_a_rr_arfcn_first, tvb, bit_offset, 10, ENC_BIG_ENDIAN);
2862 bit_offset += 10;
2863 proto_tree_add_bits_item(tree, hf_gsm_a_rr_band_offset, tvb, bit_offset, 10, ENC_BIG_ENDIAN);
2864 bit_offset += 10;
2865 proto_tree_add_bits_item(tree, hf_gsm_a_rr_arfcn_range, tvb, bit_offset, 7, ENC_BIG_ENDIAN);
2866 bit_offset += 7;
2869 if (((bit_offset + 7) >> 3) > (offset + len))
2871 expert_add_info(pinfo, proto_tree_get_parent(tree), &ei_gsm_a_rr_ie_overrun);
2873 else if ((bit_offset >> 3) < (offset + len))
2875 expert_add_info(pinfo, proto_tree_get_parent(tree), &ei_gsm_a_rr_ie_underrun);
2877 return len;
2880 * [3] 10.5.2.12 Frequency Channel Sequence
2882 static uint16_t
2883 de_rr_freq_ch_seq(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
2885 uint32_t curr_offset;
2886 int bit_offset, i;
2888 curr_offset = offset;
2890 proto_tree_add_item(tree, hf_gsm_a_rr_lowest_arfcn, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2891 curr_offset += 1;
2892 bit_offset = curr_offset << 3;
2893 for (i=0; i<16; i++)
2895 proto_tree_add_bits_item(tree, hf_gsm_a_rr_inc_skip_arfcn, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
2896 bit_offset += 4;
2899 curr_offset = curr_offset + 8;
2901 return curr_offset - offset;
2905 * [3] 10.5.2.13 Frequency List
2908 * [3] 10.5.2.13 Frequency List
2910 * Bit Bit Bit Bit Bit format notation
2911 * 8 7 4 3 2
2912 * 0 0 X X X bit map 0
2913 * 1 0 0 X X 1024 range
2914 * 1 0 1 0 0 512 range
2915 * 1 0 1 0 1 256 range
2916 * 1 0 1 1 0 128 range
2917 * 1 0 1 1 1 variable bit map
2919 /* The mask 0xce (1100 1110) will produce the result 0110 0111*/
2920 static const value_string gsm_a_rr_freq_list_format_id_vals[] = {
2921 { 0x00, "bit map 0"},
2922 { 0x02, "bit map 0"},
2923 { 0x04, "bit map 0"},
2924 { 0x06, "bit map 0"},
2925 { 0x08, "bit map 0"},
2926 { 0x0a, "bit map 0"},
2927 { 0x0c, "bit map 0"},
2928 { 0x0e, "bit map 0"},
2929 { 0x40, "1024 range"},
2930 { 0x41, "1024 range"},
2931 { 0x42, "1024 range"},
2932 { 0x43, "1024 range"},
2933 { 0x44, "512 range"},
2934 { 0x45, "256 range"},
2935 { 0x46, "128 range"},
2936 { 0x47, "variable bit map"},
2937 { 0x00, NULL }
2940 static uint16_t
2941 de_rr_freq_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
2943 return dissect_arfcn_list(tvb, tree, pinfo, offset, len, add_string, string_len);
2946 * [3] 10.5.2.14 Frequency Short List
2948 *The Frequency Short List information element is a type 3 information element of 10 octet length.
2950 * This element is encoded exactly as the Frequency List information element,
2951 * except that it has a fixed length instead of a variable length and does
2952 * not contain a length indicator and that it shall not be encoded in bitmap 0 format.
2955 static uint16_t
2956 de_rr_freq_short_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
2958 return dissect_arfcn_list(tvb, tree, pinfo, offset, 9, add_string, string_len);
2962 * [3] 10.5.2.14a Frequency Short List 2
2964 * The Frequency Short List information element is a type 3 information element of 8 octet length.
2966 * This element is encoded exactly as the Frequency List information element,
2967 * except that it has a fixed length instead of a variable length and does
2968 * not contain a length indicator and that it shall not be encoded in bitmap 0 format.
2970 static uint16_t
2971 de_rr_freq_short_list2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
2973 return dissect_arfcn_list(tvb, tree, pinfo, offset, 8, add_string, string_len);
2976 * [3] 10.5.2.14b Group Channel Description
2980 * [3] 10.5.2.14c GPRS Resumption
2982 static const true_false_string gsm_a_rr_gprs_resumption_ack_value = {
2983 "Resumption of GPRS services successfully acknowledged",
2984 "Resumption of GPRS services not successfully acknowledged"
2987 static uint16_t
2988 de_rr_gprs_resumption(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
2990 uint32_t curr_offset;
2992 curr_offset = offset;
2994 proto_tree_add_item(tree, hf_gsm_a_rr_gprs_resumption_ack, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2995 curr_offset += 1;
2997 return (curr_offset - offset);
3001 * [3] 10.5.2.14d GPRS broadcast information
3003 #define GPRS_CELL_OPTIONS_CHECK_REMAINING_EXT_LEN(x) \
3005 curr_bit_offset += x; \
3006 value -= x; \
3007 if (value <= 0) \
3009 goto end; \
3013 static int
3014 de_rr_rest_oct_gprs_cell_options(tvbuff_t *tvb, proto_tree *tree, int bit_offset)
3016 proto_tree *subtree, *subtree2;
3017 proto_item *item, *item2;
3018 int curr_bit_offset, curr_bit_offset_sav;
3019 int16_t value;
3021 curr_bit_offset = bit_offset;
3023 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1,
3024 ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_GPRS_CELL_OPTIONS], &item,
3025 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_GPRS_CELL_OPTIONS]);
3026 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_nmo, tvb, curr_bit_offset, 2, ENC_BIG_ENDIAN);
3027 curr_bit_offset += 2;
3028 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_t3168, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
3029 curr_bit_offset += 3;
3030 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_t3192, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
3031 curr_bit_offset += 3;
3032 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_drx_timer_max, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
3033 curr_bit_offset += 3;
3034 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_access_burst_type, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3035 curr_bit_offset += 1;
3036 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_control_ack_type, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3037 curr_bit_offset += 1;
3038 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_bs_cv_max, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
3039 curr_bit_offset += 4;
3040 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_pan_bits_present))
3042 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_pan_dec, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
3043 curr_bit_offset += 3;
3044 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_pan_inc, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
3045 curr_bit_offset += 3;
3046 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_pan_max, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
3047 curr_bit_offset += 3;
3049 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_optional_extensions_present))
3050 { /* Optional extension information */
3051 curr_bit_offset_sav = curr_bit_offset;
3052 subtree2 = proto_tree_add_subtree(subtree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_GPRS_CELL_OPTIONS_EXT_INFO], &item2,
3053 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_GPRS_CELL_OPTIONS_EXT_INFO]);
3054 value = (int16_t)tvb_get_bits8(tvb,curr_bit_offset,6);
3055 proto_tree_add_uint(subtree2, hf_gsm_a_rr_extension_length, tvb, curr_bit_offset>>3, 1, value);
3056 curr_bit_offset += 6;
3057 value += 1;
3058 proto_item_set_len(item2,((curr_bit_offset+value)>>3) - (curr_bit_offset_sav>>3)+1);
3059 if (gsm_rr_csn_flag(tvb, subtree2, curr_bit_offset, hf_gsm_a_rr_egprs_supported))
3061 GPRS_CELL_OPTIONS_CHECK_REMAINING_EXT_LEN(1);
3062 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_egprs_packet_channel_request, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3063 GPRS_CELL_OPTIONS_CHECK_REMAINING_EXT_LEN(1);
3064 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_bep_period, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
3065 GPRS_CELL_OPTIONS_CHECK_REMAINING_EXT_LEN(4);
3067 else
3069 GPRS_CELL_OPTIONS_CHECK_REMAINING_EXT_LEN(1);
3071 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_pfc_feature_mode, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3072 GPRS_CELL_OPTIONS_CHECK_REMAINING_EXT_LEN(1);
3073 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_dtm_support, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3074 GPRS_CELL_OPTIONS_CHECK_REMAINING_EXT_LEN(1);
3075 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_bss_paging_coordination, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3076 GPRS_CELL_OPTIONS_CHECK_REMAINING_EXT_LEN(1);
3077 /* Rel 4 extension */
3078 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_ccn_active, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3079 GPRS_CELL_OPTIONS_CHECK_REMAINING_EXT_LEN(1);
3080 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_nw_ext_utbf, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3081 GPRS_CELL_OPTIONS_CHECK_REMAINING_EXT_LEN(1);
3082 /* Rel 6 extension */
3083 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_multiple_tbf_capability, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3084 GPRS_CELL_OPTIONS_CHECK_REMAINING_EXT_LEN(1);
3085 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_ext_utbf_no_data, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3086 GPRS_CELL_OPTIONS_CHECK_REMAINING_EXT_LEN(1);
3087 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_dtm_enhancements_capability, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3088 GPRS_CELL_OPTIONS_CHECK_REMAINING_EXT_LEN(1);
3089 if (gsm_rr_csn_flag(tvb, subtree2, curr_bit_offset, hf_gsm_a_rr_msms_procedures))
3091 GPRS_CELL_OPTIONS_CHECK_REMAINING_EXT_LEN(1);
3092 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_dedicated_mode_mbms_notification_support, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3093 GPRS_CELL_OPTIONS_CHECK_REMAINING_EXT_LEN(1);
3094 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_mnci_support, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3095 GPRS_CELL_OPTIONS_CHECK_REMAINING_EXT_LEN(1);
3097 else
3099 GPRS_CELL_OPTIONS_CHECK_REMAINING_EXT_LEN(1);
3101 /* Rel 7 extension */
3102 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_reduced_latency_access, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3103 GPRS_CELL_OPTIONS_CHECK_REMAINING_EXT_LEN(1);
3104 /* Remaining (undecoded?) extensions */
3105 curr_bit_offset += value;
3107 end:
3108 proto_item_set_len(item,((curr_bit_offset>>3) - (bit_offset>>3) + 1));
3110 return (curr_bit_offset - bit_offset);
3113 static int
3114 de_rr_rest_oct_gprs_power_control_parameters(tvbuff_t *tvb, proto_tree *tree, int bit_offset)
3116 proto_tree *subtree;
3117 proto_item *item;
3118 int curr_bit_offset;
3120 curr_bit_offset = bit_offset;
3122 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_GPRS_POWER_CONTROL_PARAMS], &item,
3123 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_GPRS_POWER_CONTROL_PARAMS]);
3124 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_alpha, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
3125 curr_bit_offset += 4;
3126 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_t_avg_w, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
3127 curr_bit_offset += 5;
3128 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_t_avg_t, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
3129 curr_bit_offset += 5;
3130 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_pc_meas_chan, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3131 curr_bit_offset += 1;
3132 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_n_avg_i, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
3133 curr_bit_offset += 4;
3134 proto_item_set_len(item,((curr_bit_offset>>3) - (bit_offset>>3) + 1));
3136 return (curr_bit_offset - bit_offset);
3139 static uint16_t
3140 de_rr_gprs_broadcast_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len , char *add_string _U_, int string_len _U_)
3142 uint32_t curr_offset;
3143 int bit_offset;
3145 curr_offset = offset;
3146 bit_offset = curr_offset << 3;
3148 bit_offset += de_rr_rest_oct_gprs_cell_options(tvb, tree, bit_offset);
3149 /*bit_offset += */de_rr_rest_oct_gprs_power_control_parameters(tvb, tree, bit_offset);
3150 curr_offset += len;
3152 return (curr_offset - offset);
3156 * [3] 10.5.2.15 Handover Reference
3158 static uint16_t
3159 de_rr_ho_ref(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
3161 uint32_t curr_offset;
3163 curr_offset = offset;
3165 /* Handover reference value */
3166 proto_tree_add_item(subtree, hf_gsm_a_rr_ho_ref_val, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3168 curr_offset = curr_offset + 1;
3170 return curr_offset - offset;
3173 static const value_string gsm_a_access_tech_type_vals[] = {
3174 { 0, "GSM P"},
3175 { 1, "GSM E --note that GSM E covers GSM P"},
3176 { 2, "GSM R --note that GSM R covers GSM E and GSM P"},
3177 { 3, "GSM 1800"},
3178 { 4, "GSM 1900"},
3179 { 5, "GSM 450"},
3180 { 6, "GSM 480"},
3181 { 7, "GSM 850"},
3182 { 8, "GSM 750"},
3183 { 9, "GSM T 380"},
3184 { 10, "GSM T 410"},
3185 { 11, "GSM T 900"},
3186 { 12, "GSM 710"},
3187 { 13, "GSM T 810"},
3188 { 14, "reserved"},
3189 { 15, "Indicates the presence of a list of Additional access technologies"},
3190 { 0, NULL }
3194 static const value_string gsm_a_egprs_mcs_vals[] = {
3195 { 0, "MCS-1"},
3196 { 1, "MCS-2"},
3197 { 2, "MCS-3"},
3198 { 3, "MCS-4"},
3199 { 4, "MCS-5"},
3200 { 5, "MCS-6"},
3201 { 6, "MCS-7"},
3202 { 7, "MCS-8"},
3203 { 8, "MCS-9"},
3204 { 9, "MCS-5-7"},
3205 { 10, "MCS-6-9"},
3206 { 11, "reserved"},
3207 { 0, NULL }
3210 static const value_string gsm_a_gprs_cs_vals[] = {
3211 { 0, "CS-1"},
3212 { 1, "CS-2"},
3213 { 2, "CS-3"},
3214 { 3, "CS-4"},
3215 { 0, NULL }
3219 static const true_false_string gsm_a_tlli_block_channel_coding_vals = {
3220 "mobile station shall use coding scheme as specified by the corresponding CHANNEL CODING COMMAND or EGPRS CHANNEL CODING COMMAND field",
3221 "mobile station shall use CS-1 in GPRS TBF mode or MCS-1 in EGPRS TBF mode"
3224 static const true_false_string gsm_a_resegment_vals = {
3225 "Retransmitted RLC data blocks shall be re-segmented according to commanded MCS",
3226 "Retransmitted RLC data blocks shall not be re-segmented"
3229 static const true_false_string gsm_a_polling_vals = {
3230 "MS shall send a PACKET CONTROL ACKNOWLEDGEMENT message in the uplink block specified by TBF Starting Time, on the assigned PDCH",
3231 "no action is required from MS"
3234 static const true_false_string gsm_a_usf_granularity_vals = {
3235 "the mobile station shall transmit four consecutive RLC/MAC blocks",
3236 "the mobile station shall transmit one RLC/MAC block"
3239 static const true_false_string gsm_a_rlc_mode_vals = {
3240 "RLC unacknowledged mode",
3241 "RLC acknowledged mode"
3244 static const true_false_string gsm_a_ta_valid_vals = {
3245 "the timing advance value is valid",
3246 "the timing advance value is not valid"
3251 static const value_string gsm_a_egprs_windows_size_vals[] = {
3252 { 0, "64"},
3253 { 1, "96"},
3254 { 2, "128"},
3255 { 3, "160"},
3256 { 4, "192"},
3257 { 5, "224"},
3258 { 6, "256"},
3259 { 7, "288"},
3260 { 8, "320"},
3261 { 9, "352"},
3262 { 10, "384"},
3263 { 11, "416"},
3264 { 12, "448"},
3265 { 13, "480"},
3266 { 14, "512"},
3267 { 15, "544"},
3268 { 16, "576"},
3269 { 17, "608"},
3270 { 18, "640"},
3271 { 19, "672"},
3272 { 20, "704"},
3273 { 21, "736"},
3274 { 22, "768"},
3275 { 23, "800"},
3276 { 24, "832"},
3277 { 25, "864"},
3278 { 26, "896"},
3279 { 27, "928"},
3280 { 28, "960"},
3281 { 29, "992"},
3282 { 30, "1024"},
3283 { 31, "reserved"},
3284 { 0, NULL }
3287 static const value_string gsm_a_rr_gamma_vals[] = {
3288 { 0, "0 dB"},
3289 { 1, "2 dB"},
3290 { 2, "4 dB"},
3291 { 3, "6 dB"},
3292 { 4, "8 dB"},
3293 { 5, "10 dB"},
3294 { 6, "12 dB"},
3295 { 7, "14 dB"},
3296 { 8, "16 dB"},
3297 { 9, "18 dB"},
3298 { 10, "20 dB"},
3299 { 11, "22 dB"},
3300 { 12, "24 dB"},
3301 { 13, "26 dB"},
3302 { 14, "28 dB"},
3303 { 15, "30 dB"},
3304 { 16, "32 dB"},
3305 { 17, "34 dB"},
3306 { 18, "36 dB"},
3307 { 19, "38 dB"},
3308 { 20, "40 dB"},
3309 { 21, "42 dB"},
3310 { 22, "44 dB"},
3311 { 23, "46 dB"},
3312 { 24, "48 dB"},
3313 { 25, "50 dB"},
3314 { 26, "52 dB"},
3315 { 27, "54 dB"},
3316 { 28, "56 dB"},
3317 { 29, "58 dB"},
3318 { 30, "60 dB"},
3319 { 31, "62 dB"},
3320 { 0, NULL }
3325 static const value_string gsm_a_link_quality_meas_mode_vals[] = {
3326 { 0, "The MS shall not report either interference measurements or per slot BEP measurements"},
3327 { 1, "The MS shall report available interference measurements for timeslots 0 through 7"},
3328 { 2, "The MS shall report mean BEP on each assigned time slot ... No interference measurements shall be reported..."},
3329 { 3, "The MS shall report mean BEP on each assigned time slot ... In addition to mean BEP, the MS shall report interference measurements for no more than four time slots..."},
3330 { 0, NULL }
3333 static const true_false_string gsm_a_rr_ul_xtti_tbf_assignment_vals = {
3334 "An uplink BTTI TBF is assigned",
3335 "An uplink RTTI TBF is assigned"
3338 static const true_false_string gsm_a_rr_dl_xtti_tbf_assignment_vals = {
3339 "An downlink BTTI TBF is assigned",
3340 "An downlink RTTI TBF is assigned"
3343 static const true_false_string gsm_a_rr_fanr_act_state_vals = {
3344 "FANR is not activated for the assigned TBF",
3345 "FANR is activated for the assigned TBF"
3348 static const true_false_string gsm_a_rr_encoding_selection_vals = {
3349 "SSN - based encoding is selected",
3350 "Time - based encoding is selected"
3353 static const true_false_string gsm_a_rr_nof_pdch_pairs_vals = {
3354 "One PDCH Pair assigned",
3355 "Two PDCH Pairs assigned"
3358 static const value_string gsm_a_rr_rtti_usf_mode_vals[] = {
3359 { 0, "BTTI USF Mode is used" },
3360 { 1, "RTTI USF Mode is used" },
3361 { 0, NULL }
3364 static const value_string gsm_a_rr_pdch_pair_indic_vals[] = {
3365 { 0x0, "uplink PDCH pair: [i, i + 1] | downlink PDCH pair: [i, i + 1]" },
3366 { 0x1, "uplink PDCH pair: [i, i + 1] | downlink PDCH pair: [i - 1, i]" },
3367 { 0x2, "uplink PDCH pair: [i, i + 1] | downlink PDCH pair: [i - 2, i]" },
3368 { 0x3, "uplink PDCH pair: [i, i + 2] | downlink PDCH pair: [i - 1, i]" },
3369 { 0x4, "uplink PDCH pairs: [i, i + 1], [i + 2, i + 3] | downlink PDCH pairs: [i, i + 1], [i + 2, i + 3]" },
3370 { 0x5, "not used" },
3371 { 0x6, "not used" },
3372 { 0x7, "not used" },
3373 { 0, NULL }
3376 static const value_string gsm_a_rr_egprs_level_vals[] = {
3377 { 0x0, "EGPRS" },
3378 { 0x1, "EGPRS2 - A" },
3379 { 0x2, "EGPRS2 - B" },
3380 { 0x3, "reserved" },
3381 { 0, NULL }
3384 static const value_string gsm_a_rr_event_based_fanr_vals[] = {
3385 { 0, "The MS shall not use event - based FANR" },
3386 { 1, "The MS shall use event - based FANR" },
3387 { 0, NULL }
3390 static uint16_t
3391 de_tbf_starting_time(tvbuff_t *tvb, proto_tree *tree, uint32_t bit_offset)
3393 proto_item *item;
3394 uint32_t curr_bit_offset;
3395 uint16_t rfn, t;
3396 uint64_t t1, t2, t3;
3398 curr_bit_offset = bit_offset;
3400 proto_tree_add_bits_ret_val(tree, hf_gsm_a_rr_tbf_T1prim, tvb, curr_bit_offset, 5, &t1, ENC_BIG_ENDIAN);
3401 curr_bit_offset += 5;
3402 proto_tree_add_bits_ret_val(tree, hf_gsm_a_rr_tbf_T3, tvb, curr_bit_offset, 6, &t3, ENC_BIG_ENDIAN);
3403 curr_bit_offset += 6;
3404 proto_tree_add_bits_ret_val(tree, hf_gsm_a_rr_tbf_T2, tvb, curr_bit_offset, 5, &t2, ENC_BIG_ENDIAN);
3405 curr_bit_offset += 5;
3408 /* great care needed with signed/unsigned - -1 in unsigned is 0xffff, which mod(26) is not what you think !!! */
3409 t = (26 + t3 - t2) % 26;
3410 rfn = (uint16_t)((51 * t) + t3 + (51 * 26 * t1));
3412 item = proto_tree_add_uint(tree, hf_gsm_a_rr_tbf_starting_time, tvb, bit_offset >> 3, ((curr_bit_offset - bit_offset) >> 3) + 1, rfn);
3413 proto_item_set_generated(item);
3414 return curr_bit_offset - bit_offset;
3417 static int
3418 de_rr_ia_rest_oct_egprs_packet_uplink_assignment(tvbuff_t *tvb, proto_tree *tree, int bit_offset, unsigned bit_len)
3420 proto_tree *subtree;
3421 proto_item *item;
3422 unsigned curr_bit_offset;
3424 curr_bit_offset = bit_offset;
3426 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EGPRS_PACKET_UPLINK_ASSIGNMENT], &item,
3427 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EGPRS_PACKET_UPLINK_ASSIGNMENT]);
3428 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_extended_ra, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
3429 curr_bit_offset += 5;
3430 while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_access_tech_req))
3432 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_access_tech_type, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
3433 curr_bit_offset += 4;
3436 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_tfi_multiblock))
3438 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_tfi_assignment, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
3439 curr_bit_offset += 5;
3440 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_polling, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3441 curr_bit_offset += 1;
3442 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_tfi_allocation_type))
3444 int8_t bitmap_len = tvb_get_bits8(tvb, curr_bit_offset, 5);
3445 int32_t bitmap;
3446 proto_tree_add_uint(tree, hf_gsm_a_rr_bitmap_length, tvb, curr_bit_offset>>3, 1+((curr_bit_offset+5)>>3) - (curr_bit_offset>>3), bitmap_len);
3447 curr_bit_offset += 5;
3448 bitmap = tvb_get_bits32(tvb, curr_bit_offset, bitmap_len, ENC_BIG_ENDIAN);
3449 proto_tree_add_uint(tree, hf_gsm_a_rr_bitmap, tvb, curr_bit_offset>>3, 1+((curr_bit_offset+bitmap_len)>>3) - (curr_bit_offset>>3), bitmap);
3450 curr_bit_offset += bitmap_len;
3451 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_p0_present))
3453 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_p0, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
3454 curr_bit_offset += 4;
3455 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_pr_mode, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3456 curr_bit_offset += 1;
3459 else
3461 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_usf, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
3462 curr_bit_offset += 3;
3463 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_usf_granularity, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3464 curr_bit_offset += 1;
3465 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_p0_present))
3467 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_p0, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
3468 curr_bit_offset += 4;
3469 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_pr_mode, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3470 curr_bit_offset += 1;
3474 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_egprs_mcs, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
3475 curr_bit_offset += 4;
3476 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_tlli_block_channel_coding, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3477 curr_bit_offset += 1;
3478 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_bep_period2_present))
3480 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_bep_period2, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
3481 curr_bit_offset += 4;
3483 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_resegment, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3484 curr_bit_offset += 1;
3485 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_egprs_window_size, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
3486 curr_bit_offset += 5;
3487 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_alpha_present))
3489 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_alpha, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
3490 curr_bit_offset += 4;
3492 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_gamma, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
3493 curr_bit_offset += 5;
3494 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_timing_adv_index_present))
3496 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_timing_adv_index, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
3497 curr_bit_offset += 4;
3499 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_tbf_starting_time_present))
3501 curr_bit_offset += de_tbf_starting_time(tvb, subtree, curr_bit_offset);
3503 /* Null breakpoint */
3504 if (curr_bit_offset < bit_len)
3506 if (gsm_rr_csn_HL_flag(tvb, subtree, 0, curr_bit_offset++, hf_gsm_a_rr_additions_in_rel_7))
3508 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_ul_xtti_tbf_assignment))
3510 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_fanr_act_state))
3512 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_encoding_selection))
3514 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_reported_timeslots, tvb, curr_bit_offset, 8, ENC_BIG_ENDIAN);
3515 curr_bit_offset += 8;
3516 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_tsh, tvb, curr_bit_offset, 2, ENC_BIG_ENDIAN);
3517 curr_bit_offset += 2;
3521 else
3523 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_rtti_usf_mode, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3524 curr_bit_offset += 1;
3525 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_pdch_pair_indic, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
3526 curr_bit_offset += 3;
3528 if (hf_gsm_a_rr_rtti_usf_mode > 0)
3530 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_additional_usf, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
3531 curr_bit_offset += 3;
3533 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_nof_pdch_pairs))
3535 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_usf_2, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
3536 curr_bit_offset += 3;
3538 if (hf_gsm_a_rr_rtti_usf_mode > 0)
3540 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_additional_usf_2, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
3541 curr_bit_offset += 3;
3544 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_encoding_selection))
3546 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_reported_timeslots, tvb, curr_bit_offset, 8, ENC_BIG_ENDIAN);
3547 curr_bit_offset += 8;
3548 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_tsh, tvb, curr_bit_offset, 2, ENC_BIG_ENDIAN);
3549 curr_bit_offset += 2;
3555 else /* Multi Block Allocation */
3557 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_alpha_present))
3559 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_alpha, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
3560 curr_bit_offset += 4;
3562 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_gamma, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
3563 curr_bit_offset += 5;
3564 curr_bit_offset += de_tbf_starting_time(tvb, subtree, curr_bit_offset);
3565 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_num_of_radio_block_allocated, tvb, curr_bit_offset, 2, ENC_BIG_ENDIAN);
3566 curr_bit_offset += 2;
3567 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_p0_present))
3569 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_p0, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
3570 curr_bit_offset += 4;
3571 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_bts_power_control_mode, tvb, curr_bit_offset++, 1, ENC_NA);
3572 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_pr_mode, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3573 curr_bit_offset += 1;
3576 /* Null breakpoint */
3577 if (curr_bit_offset < bit_len)
3579 if (gsm_rr_csn_HL_flag(tvb,subtree, 0,curr_bit_offset++, hf_gsm_a_rr_additions_in_rel_7))
3581 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_pfi_present))
3583 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_pfi, tvb, curr_bit_offset, 7, ENC_BIG_ENDIAN);
3584 curr_bit_offset += 7;
3589 proto_item_set_len(item,((curr_bit_offset>>3) - (bit_offset>>3) + 1));
3591 return (curr_bit_offset - bit_offset);
3595 static int
3596 de_rr_ia_rest_oct_tmgi(tvbuff_t *tvb, proto_tree *tree, int bit_offset)
3598 proto_tree *subtree;
3599 proto_item *item;
3600 int curr_bit_offset;
3601 uint16_t value16;
3602 char mcc[4];
3603 char mnc[4];
3605 curr_bit_offset = bit_offset;
3607 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_TMGI], &item,
3608 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_TMGI]);
3610 if (0 == gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_mcc_mnc_parameters)) /* without MCC and MNC parameters */
3612 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_mbms_service_id, tvb, curr_bit_offset, 24, ENC_BIG_ENDIAN);
3613 curr_bit_offset += 24;
3615 else /* with MCC and MNC parameters */
3617 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_mbms_service_id, tvb, curr_bit_offset, 24, ENC_BIG_ENDIAN);
3618 curr_bit_offset += 24;
3620 value16 = tvb_get_bits16(tvb,curr_bit_offset,12,ENC_BIG_ENDIAN);
3621 mcc[0] = '0' + ((value16>>8)&0xf);
3622 mcc[1] = '0' + ((value16>>4)&0xf);
3623 mcc[2] = '0' + ((value16 )&0xf);
3624 mcc[3] = '\0';
3625 proto_tree_add_string(tree, hf_gsm_a_rr_mobile_country_code, tvb, curr_bit_offset>>3, 12, mcc);
3626 curr_bit_offset += 12;
3628 value16 = tvb_get_bits16(tvb,curr_bit_offset,12,ENC_BIG_ENDIAN);
3629 mnc[0] = '0' + ((value16>>8)&0xf);
3630 mnc[1] = '0' + ((value16>>4)&0xf);
3631 mnc[2] = '0' + ((value16 )&0xf);
3632 mnc[3] = '\0';
3633 proto_tree_add_string(tree, hf_gsm_a_rr_mobile_network_code, tvb, curr_bit_offset>>3, 12, mnc);
3634 curr_bit_offset += 12;
3636 proto_item_set_len(item,((curr_bit_offset>>3) - (bit_offset>>3) + 1));
3638 return (curr_bit_offset - bit_offset);
3643 static int
3644 de_rr_ia_rest_oct_packet_timing_advance(tvbuff_t *tvb, proto_tree *tree, int bit_offset)
3646 proto_tree *subtree;
3647 proto_item *item;
3648 int curr_bit_offset;
3651 curr_bit_offset = bit_offset;
3653 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_PACKET_TIMING_ADVANCE], &item,
3654 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_PACKET_TIMING_ADVANCE]);
3656 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_timing_adv_present))
3658 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_timing_adv, tvb, curr_bit_offset, 6, ENC_BIG_ENDIAN);
3659 curr_bit_offset += 6;
3662 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_timing_advance_index_timeslot))
3664 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_timing_adv_index, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
3665 curr_bit_offset += 4;
3666 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_timing_adv_timeslot_num, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
3667 curr_bit_offset += 3;
3669 proto_item_set_len(item,((curr_bit_offset>>3) - (bit_offset>>3) + 1));
3671 return (curr_bit_offset - bit_offset);
3676 static int
3677 de_rr_ia_rest_oct_multiple_blocks_packet_downlink_assignment(tvbuff_t *tvb, proto_tree *tree, int bit_offset)
3679 proto_tree *subtree;
3680 proto_item *item;
3681 int curr_bit_offset;
3682 uint8_t value;
3684 curr_bit_offset = bit_offset;
3686 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_MULTIPLE_BLOCKS_PACKET_DOWNLINK_ASSIGNMENT], &item,
3687 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_MULTIPLE_BLOCKS_PACKET_DOWNLINK_ASSIGNMENT]);
3689 curr_bit_offset += de_tbf_starting_time(tvb, subtree, curr_bit_offset);
3690 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_num_of_radio_block_allocated, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
3691 curr_bit_offset += 4;
3693 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_packet_downlink_assignment))
3695 if (0 == gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_mbms_assignment))
3696 {/* MBMS Assignment (Distribution) */
3697 curr_bit_offset += de_rr_ia_rest_oct_tmgi(tvb, tree, curr_bit_offset);
3699 else /* MBMS Assignment (Non-distribution) */
3701 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_tlli, tvb, curr_bit_offset, 32, ENC_BIG_ENDIAN);
3702 curr_bit_offset += 32;
3703 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_ms_parameters))
3705 value = tvb_get_bits8(tvb,curr_bit_offset,2);
3706 proto_tree_add_uint(tree, hf_gsm_a_rr_len_indicator_ms_id, tvb, curr_bit_offset>>3, 2, value);
3707 curr_bit_offset += 2;
3709 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_ms_id, tvb, curr_bit_offset, value+1, ENC_BIG_ENDIAN);
3710 curr_bit_offset += value+1;
3711 curr_bit_offset += de_rr_ia_rest_oct_packet_timing_advance(tvb, tree, curr_bit_offset);
3712 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_alpha_present))
3714 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_alpha, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
3715 curr_bit_offset += 4;
3716 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_gamma_present))
3718 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_gamma, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
3719 curr_bit_offset += 5;
3725 proto_item_set_len(item,((curr_bit_offset>>3) - (bit_offset>>3) + 1));
3727 return (curr_bit_offset - bit_offset);
3733 static int
3734 de_rr_ia_rest_oct_packet_uplink_assignment(tvbuff_t *tvb, proto_tree *tree, int bit_offset, unsigned bit_len)
3736 proto_tree *subtree;
3737 proto_item *item;
3738 unsigned curr_bit_offset;
3740 curr_bit_offset = bit_offset;
3742 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_PACKET_UPLINK_ASSIGNMENT], &item,
3743 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_PACKET_UPLINK_ASSIGNMENT]);
3745 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_packet_uplink_assignment))
3747 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_tfi_assignment, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
3748 curr_bit_offset += 5;
3749 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_polling, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3750 curr_bit_offset += 1;
3751 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_allocation_type))
3753 int8_t bitmap_len = tvb_get_bits8(tvb, curr_bit_offset, 5);
3754 int32_t bitmap;
3755 proto_tree_add_uint(tree, hf_gsm_a_rr_bitmap_length, tvb, curr_bit_offset>>3, 1+((curr_bit_offset+5)>>3) - (curr_bit_offset>>3), bitmap_len);
3756 curr_bit_offset += 5;
3757 bitmap = tvb_get_bits32(tvb, curr_bit_offset, bitmap_len, ENC_BIG_ENDIAN);
3758 proto_tree_add_uint(tree, hf_gsm_a_rr_bitmap, tvb, curr_bit_offset>>3, 1+((curr_bit_offset+bitmap_len)>>3) - (curr_bit_offset>>3), bitmap);
3759 curr_bit_offset += bitmap_len;
3760 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_p0_present))
3762 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_p0, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
3763 curr_bit_offset += 4;
3764 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_pr_mode, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3765 curr_bit_offset += 1;
3768 else
3770 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_usf, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
3771 curr_bit_offset += 3;
3772 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_usf_granularity, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3773 curr_bit_offset += 1;
3774 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_p0_present))
3776 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_p0, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
3777 curr_bit_offset += 4;
3778 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_pr_mode, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3779 curr_bit_offset += 1;
3782 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_gprs_cs, tvb, curr_bit_offset, 2, ENC_BIG_ENDIAN);
3783 curr_bit_offset += 2;
3784 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_tlli_block_channel_coding, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3785 curr_bit_offset += 1;
3786 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_alpha_present))
3788 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_alpha, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
3789 curr_bit_offset += 4;
3791 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_gamma, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
3792 curr_bit_offset += 5;
3793 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_timing_advance_index))
3795 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_timing_adv_index, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
3796 curr_bit_offset += 4;
3798 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_tbf_starting_time_present))
3800 curr_bit_offset += de_tbf_starting_time(tvb, subtree, curr_bit_offset);
3803 else /* Single Block Allocation */
3805 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_alpha_present))
3807 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_alpha, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
3808 curr_bit_offset += 4;
3810 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_gamma, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
3811 curr_bit_offset += 5;
3812 /* fixed bits '01' */
3813 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_early_r97_version_reserved_bit, tvb, curr_bit_offset++, 1, ENC_NA);
3814 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_later_r97_version_reserved_bit, tvb, curr_bit_offset++, 1, ENC_NA);
3815 curr_bit_offset += de_tbf_starting_time(tvb, subtree, curr_bit_offset);
3816 if (gsm_rr_csn_HL_flag(tvb,subtree, 0,curr_bit_offset++, hf_gsm_a_rr_p0_present))
3818 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_p0, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
3819 curr_bit_offset += 4;
3820 /* The value '1' was allocated in an earlier version of the protocol and shall not be used */
3821 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_earlier_version_reserved_bit, tvb, curr_bit_offset++, 1, ENC_NA);
3822 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_pr_mode, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3823 curr_bit_offset += 1;
3827 /* Null breakpoint */
3828 if (curr_bit_offset < bit_len)
3830 if (gsm_rr_csn_HL_flag(tvb,subtree, 0,curr_bit_offset++, hf_gsm_a_rr_additions_in_r99))
3832 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_extended_ra_present))
3834 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_extended_ra, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
3835 curr_bit_offset += 5;
3840 /* Null breakpoint */
3841 if (curr_bit_offset < bit_len)
3843 if (gsm_rr_csn_HL_flag(tvb,subtree, 0,curr_bit_offset++, hf_gsm_a_rr_additions_in_rel_6))
3845 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_pfi_present))
3847 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_pfi, tvb, curr_bit_offset, 7, ENC_BIG_ENDIAN);
3848 curr_bit_offset += 7;
3852 proto_item_set_len(item,((curr_bit_offset>>3) - (bit_offset>>3) + 1));
3854 return (curr_bit_offset - bit_offset);
3858 static int
3859 de_rr_ia_rest_oct_packet_downlink_assignment(tvbuff_t *tvb, proto_tree *tree, unsigned bit_offset, unsigned bit_len)
3861 proto_tree *subtree;
3862 proto_item *item;
3863 unsigned curr_bit_offset;
3865 curr_bit_offset = bit_offset;
3867 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_PACKET_DOWNLINK_ASSIGNMENT], &item,
3868 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_PACKET_DOWNLINK_ASSIGNMENT]);
3870 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_tlli, tvb, curr_bit_offset, 32, ENC_BIG_ENDIAN);
3871 curr_bit_offset += 32;
3873 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_tfi_assignment_present))
3875 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_tfi_assignment, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
3876 curr_bit_offset += 5;
3877 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_rlc_mode, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3878 curr_bit_offset += 1;
3879 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_alpha_present))
3881 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_alpha, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
3882 curr_bit_offset += 4;
3884 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_gamma, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
3885 curr_bit_offset += 5;
3886 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_polling, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3887 curr_bit_offset += 1;
3888 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_ta_valid, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3889 curr_bit_offset += 1;
3891 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_timing_advance_index))
3893 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_timing_adv_index, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
3894 curr_bit_offset += 4;
3896 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_tbf_starting_time_present))
3898 curr_bit_offset += de_tbf_starting_time(tvb, subtree, curr_bit_offset);
3900 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_p0_present))
3902 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_p0, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
3903 curr_bit_offset += 4;
3904 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_pr_mode_present, tvb, curr_bit_offset++, 1, ENC_NA);
3905 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_pr_mode, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3906 curr_bit_offset += 1;
3909 /* Null breakpoint */
3910 if (curr_bit_offset < bit_len)
3912 if (gsm_rr_csn_HL_flag(tvb,subtree, 0,curr_bit_offset++, hf_gsm_a_rr_additions_in_r99))
3914 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_egprs_window_size, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
3915 curr_bit_offset += 5;
3916 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_link_quality_meas_mode, tvb, curr_bit_offset, 2, ENC_BIG_ENDIAN);
3917 curr_bit_offset += 2;
3918 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_bep_period2_present))
3920 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_bep_period2, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
3921 curr_bit_offset += 4;
3926 /* Null breakpoint */
3927 if (curr_bit_offset < bit_len)
3929 if (gsm_rr_csn_HL_flag(tvb,subtree, 0, curr_bit_offset++, hf_gsm_a_rr_additions_in_rel_6))
3931 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_pfi_present))
3933 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_pfi, tvb, curr_bit_offset, 7, ENC_BIG_ENDIAN);
3934 curr_bit_offset += 7;
3939 /* Null breakpoint */
3940 if (curr_bit_offset < bit_len)
3942 if (gsm_rr_csn_HL_flag(tvb, subtree, 0, curr_bit_offset++, hf_gsm_a_rr_additions_in_rel_7))
3945 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_npm_transfer_time_present))
3947 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_npm_transfer_time, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
3948 curr_bit_offset += 5;
3951 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_dl_xtti_tbf_assignment))
3953 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_fanr_act_state))
3955 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_event_based_fanr, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3956 curr_bit_offset += 1;
3959 else
3961 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_event_based_fanr, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
3962 curr_bit_offset += 1;
3963 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_pdch_pair_indic, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
3964 curr_bit_offset += 3;
3967 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_dl_egprs_level, tvb, curr_bit_offset, 2, ENC_BIG_ENDIAN);
3968 curr_bit_offset += 2;
3972 proto_item_set_len(item,((curr_bit_offset>>3) - (bit_offset>>3) + 1));
3974 return (curr_bit_offset - bit_offset);
3977 static int
3978 de_rr_ia_rest_oct_second_part_packet_assignment(tvbuff_t *tvb, proto_tree *tree, unsigned bit_offset, unsigned bit_len)
3980 proto_tree *subtree;
3981 proto_item *item;
3982 unsigned curr_bit_offset;
3984 curr_bit_offset = bit_offset;
3986 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_SECOND_PART_PACKET_ASSIGNMENT], &item,
3987 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_SECOND_PART_PACKET_ASSIGNMENT]);
3989 /* Null breakpoint */
3990 if (curr_bit_offset < bit_len)
3992 if (gsm_rr_csn_HL_flag(tvb,subtree, 0,curr_bit_offset++, hf_gsm_a_rr_additions_in_r99))
3994 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_extended_ra_present))
3996 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_extended_ra, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
3997 curr_bit_offset += 5;
4001 proto_item_set_len(item,((curr_bit_offset>>3) - (bit_offset>>3) + 1));
4003 return (curr_bit_offset - bit_offset);
4008 * [3] 10.5.2.16 IA Rest Octets
4011 static const value_string gsm_a_rr_implicit_reject_cs_vals[] = {
4012 {0, "An implicit reject is not indicated for the CS domain"},
4013 {1, "An implicit reject is indicated for the CS domain"},
4014 {0, NULL}
4017 static const value_string gsm_a_rr_implicit_reject_ps_vals[] = {
4018 {0, "An implicit reject is not indicated for the PS domain"},
4019 {1, "An implicit reject is indicated for the PS domain"},
4020 {0, NULL}
4023 static uint16_t
4024 de_rr_ia_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
4026 proto_item *item;
4027 uint32_t curr_offset;
4028 int bit_offset;
4029 int length;
4030 uint64_t ma_length;
4031 uint8_t tvb_len = tvb_reported_length(tvb);
4032 uint16_t bit_len = tvb_len << 3;
4034 curr_offset = offset;
4036 bit_offset = curr_offset << 3;
4037 if (0 == gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_first_discriminator_bit))
4039 if (0 == gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_second_discriminator_bit))
4041 /* LL */
4042 gsm_rr_csn_HL_flag(tvb, subtree, 0,bit_offset++, hf_gsm_a_rr_a_compressed_inter_rat_handover_info);
4044 if (gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_additions_in_rel_13))
4046 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_implicit_reject_ps, tvb, bit_offset++, 1, ENC_BIG_ENDIAN);
4047 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_peo_bcch_change_mark, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
4048 bit_offset += 2;
4049 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_rcc, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
4050 bit_offset += 3;
4053 else /* LH */
4055 if (0 == gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_downlink_uplink_discriminator_bit))
4057 if (0 == gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_downlink_uplink))
4059 bit_offset += de_rr_ia_rest_oct_egprs_packet_uplink_assignment(tvb, subtree, bit_offset, bit_len);
4060 if (bit_offset == bit_len) /* This IE may be the last one */
4061 return tvb_len - offset;
4063 else
4065 bit_offset += de_rr_ia_rest_oct_multiple_blocks_packet_downlink_assignment(tvb, subtree, bit_offset);
4066 if (bit_offset == bit_len) /* This IE may be the last one */
4067 return tvb_len - offset;
4070 else
4072 proto_tree_add_item(subtree, hf_gsm_a_rr_ia_rest_oct_reserved, tvb, bit_offset>>3, 1, ENC_NA);
4074 if (gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_additions_in_rel_13))
4076 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_implicit_reject_ps, tvb, bit_offset++, 1, ENC_BIG_ENDIAN);
4077 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_peo_bcch_change_mark, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
4078 bit_offset += 2;
4079 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_rcc, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
4080 bit_offset += 3;
4085 else
4087 if (0 == gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_second_discriminator_bit))
4089 /* HL */
4090 proto_tree_add_bits_ret_val(subtree, hf_gsm_a_rr_ma_length, tvb, bit_offset, 6, &ma_length, ENC_BIG_ENDIAN);
4091 bit_offset += 6;
4092 /* Frequency Parameters, before time */
4093 if (ma_length>0)
4095 /* two '0' bits */
4096 bit_offset += 2;
4097 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_maio, tvb, bit_offset, 6, ENC_BIG_ENDIAN);
4098 bit_offset += 6;
4099 length = (int)ma_length;
4100 item = proto_tree_add_bytes_format(subtree, hf_gsm_a_rr_ma_bitmap, tvb, bit_offset>>3, (length>>3)-1, NULL, "MA Bitmap: ");
4101 length = (length-1)*8;
4102 while (length)
4104 proto_item_append_text(item,"%d",tvb_get_bits8(tvb,bit_offset,1));
4105 bit_offset += 1;
4106 length -= 1;
4109 gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_a_compressed_inter_rat_handover_info);
4111 if (gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_additions_in_rel_13))
4113 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_implicit_reject_ps, tvb, bit_offset++, 1, ENC_BIG_ENDIAN);
4114 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_peo_bcch_change_mark, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
4115 bit_offset += 2;
4116 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_rcc, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
4117 bit_offset += 3;
4120 else /* HH */
4122 if (0 == gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_second_packet_assignment_discriminator_bit))
4124 if (0 == gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_packet_discriminator_bit))
4126 /* 00 < Packet Uplink Assignment > */
4127 bit_offset += de_rr_ia_rest_oct_packet_uplink_assignment(tvb, subtree, bit_offset, bit_len);
4128 if (bit_offset == bit_len) /* This IE may be the last one */
4129 return tvb_len - offset;
4131 else /* 01 < Packet Downlink Assignment > */
4133 bit_offset += de_rr_ia_rest_oct_packet_downlink_assignment(tvb, subtree, bit_offset, bit_len);
4134 if (bit_offset == bit_len) /* This IE may be the last one */
4135 return tvb_len - offset;
4138 else /* 1 < Second Part Packet Assignment > */
4140 bit_offset += de_rr_ia_rest_oct_second_part_packet_assignment(tvb, subtree, bit_offset, bit_len);
4141 if (bit_offset == bit_len) /* This IE may be the last one */
4142 return tvb_len - offset;
4144 if (gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_additions_in_rel_10))
4146 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_implicit_reject_cs, tvb, bit_offset++, 1, ENC_BIG_ENDIAN);
4147 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_implicit_reject_ps, tvb, bit_offset++, 1, ENC_BIG_ENDIAN);
4150 if (gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_additions_in_rel_13))
4152 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_peo_bcch_change_mark, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
4153 bit_offset += 2;
4154 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_rcc, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
4155 bit_offset += 3;
4159 gsm_rr_padding_bits(subtree, tvb, bit_offset, tvb_len, PADDING_BYTE);
4160 return tvb_len - offset;
4164 * [3] 10.5.2.17 IAR Rest Octets
4167 static uint16_t
4168 de_rr_iar_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
4170 uint32_t curr_bit_offset;
4171 uint8_t i;
4172 uint8_t ra_count = 0;
4173 uint8_t tvb_len = tvb_reported_length(tvb);
4175 curr_bit_offset = offset << 3;
4177 for (i = 0; i < 4; i++)
4179 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_extended_ra_present))
4181 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_extended_ra, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
4182 curr_bit_offset += 5;
4183 ra_count += 1;
4186 if (ra_count < 4){
4187 if (gsm_rr_csn_HL_flag(tvb, subtree, 0, curr_bit_offset++, hf_gsm_a_rr_additions_in_rel_13))
4189 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_rcc, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
4190 curr_bit_offset += 3;
4194 gsm_rr_padding_bits(subtree, tvb, curr_bit_offset, tvb_len, PADDING_BYTE);
4195 return tvb_len - offset;
4199 * [3] 10.5.2.18 IAX Rest Octets
4201 static uint16_t
4202 de_rr_iax_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
4204 uint32_t curr_bit_offset;
4205 uint8_t tvb_len = tvb_reported_length(tvb);
4207 curr_bit_offset = offset<<3;
4209 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_compressed_inter_rat_handover_info, tvb, curr_bit_offset++, 1, ENC_NA);
4211 if (gsm_rr_csn_HL_flag(tvb, subtree, 0, curr_bit_offset++, hf_gsm_a_rr_additions_in_rel_13))
4213 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_rcc, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
4214 curr_bit_offset += 3;
4217 gsm_rr_padding_bits(subtree, tvb, curr_bit_offset, tvb_len, PADDING_BYTE);
4218 return tvb_len - offset;
4222 * [3] 10.5.2.19 L2 Pseudo Length
4224 static uint16_t
4225 de_rr_l2_pseudo_len(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
4227 uint32_t curr_offset;
4229 curr_offset = offset;
4231 /* L2 Pseudo Length value */
4232 proto_tree_add_item(subtree, hf_gsm_a_rr_L2_pseudo_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4234 curr_offset = curr_offset + 1;
4236 return curr_offset - offset;
4241 * 44.018 10.5.2.20 Measurement Results
4243 static const true_false_string gsm_a_rr_dtx_vals = {
4244 "DTX was used",
4245 "DTX was not used"
4249 static const true_false_string gsm_a_rr_mv_vals = {
4250 "The measurement results are not valid",
4251 "The measurement results are valid"
4254 static const value_string gsm_a_rr_ncell_vals [] = {
4255 {0, "No neighbour cell measurement result"},
4256 {1, "1 neighbour cell measurement result"},
4257 {2, "2 neighbour cell measurement result"},
4258 {3, "3 neighbour cell measurement result"},
4259 {4, "4 neighbour cell measurement result"},
4260 {5, "5 neighbour cell measurement result"},
4261 {6, "6 neighbour cell measurement result"},
4262 {7, "Neighbour cell information not available for serving cell"},
4263 {0, NULL}
4266 < Measurement Results Contents > ::=
4267 { < BA_USED : bit (1) >
4268 < DTX_USED : bit (1) >
4269 < RXLEV_FULL_SERVING_CELL : bit (6) >
4270 < 3G_BA_USED : bit (1) >
4271 < MEAS_VALID : bit (1) >
4272 < RXLEV_SUB_SERVING_CELL : bit (6) >
4273 < SI23_BA_USED : bit (1) >
4274 < RXQUAL_FULL_SERVING_CELL : bit (3) >
4275 < RXQUAL_SUB_SERVING_CELL : bit (3) >
4277 < NO_NCELL_M : { bit (3) := 111 } >
4278 0** -- Padding with zeroes
4281 < NO_NCELL_M : { bit (3) exclude 111 } >
4282 { < NCELL Report : < NCELL Report struct >> } * val (NO_NCELL_M)
4283 { null | 0** -- Padding with zeroes
4284 | 1 < UTRAN_CSG_Measurement_Report : < UTRAN_CSG_Measurement_Report IE > >
4285 { null | 0** } -- Padding with zeroes
4288 } & octet (16) ;
4289 < NCELL Report struct > ::=
4290 < RXLEV-NCELL: bit (6) >
4291 < BCCH-FREQ-NCELL : bit (5) >
4292 < BSIC-NCELL : bit (6) > ;
4295 uint16_t
4296 de_rr_meas_res(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
4298 int bit_offset;
4299 uint64_t no_ncell_m;
4301 bit_offset = offset << 3;
4302 /* 2nd octet */
4303 /* BA-USED */
4304 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_ba_used, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
4305 bit_offset++;
4306 /* DTX USED */
4307 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_dtx_used, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
4308 bit_offset++;
4309 /* RXLEV-FULL-SERVING-CELL */
4310 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_rxlev_full_serv_cell, tvb, bit_offset, 6, ENC_BIG_ENDIAN);
4311 bit_offset += 6;
4313 /* 3rd octet */
4314 /* 3G-BA-USED */
4315 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_3g_ba_used, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
4316 bit_offset++;
4317 /* MEAS-VALID */
4318 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_meas_valid, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
4319 bit_offset++;
4320 /* RXLEV-SUB-SERVING-CELL */
4321 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_rxlev_sub_serv_cell, tvb, bit_offset, 6, ENC_BIG_ENDIAN);
4322 bit_offset += 6;
4324 /* 4th octet */
4325 /* SI23_BA_USED */
4326 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_si23_ba_used, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
4327 bit_offset++;
4328 /* RXQUAL-FULL-SERVING-CELL */
4329 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_rxqual_full_serv_cell, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
4330 bit_offset += 3;
4332 /* RXQUAL-SUB-SERVING-CELL */
4333 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_rxqual_sub_serv_cell, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
4334 bit_offset += 3;
4335 /* NO-NCELL-M */
4336 proto_tree_add_bits_ret_val(subtree, hf_gsm_a_rr_no_ncell_m, tvb, bit_offset, 3, &no_ncell_m, ENC_BIG_ENDIAN);
4337 bit_offset += 3;
4338 if (no_ncell_m == 7) /* No neighbour cell information available) */
4339 no_ncell_m = 0;
4340 while (no_ncell_m)
4342 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_rxlev_ncell, tvb, bit_offset, 6, ENC_BIG_ENDIAN);
4343 bit_offset += 6;
4344 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_bcch_freq_ncell, tvb, bit_offset, 5, ENC_BIG_ENDIAN);
4345 bit_offset += 5;
4346 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_bsic_ncell, tvb, bit_offset, 6, ENC_BIG_ENDIAN);
4347 bit_offset += 6;
4348 no_ncell_m -= 1;
4351 /* The Measurement Results is a type 3 information element with 17 octets length.
4352 * Thus the value part is 17 - 1 == 16 octets long. Unused bits are set to zero. */
4353 gsm_rr_padding_bits(subtree, tvb, bit_offset, 16, 0x00);
4355 return 16;
4359 * [3] 10.5.2.20a GPRS Measurement Results
4362 * [3] 10.5.2.21 Mobile Allocation
4364 uint16_t
4365 de_rr_mob_all(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
4367 uint32_t curr_offset;
4368 proto_item *item;
4369 int i, j;
4370 uint8_t value;
4372 curr_offset = offset;
4374 item = proto_tree_add_bytes_format(tree, hf_gsm_a_rr_inc_arfcn_bitmap, tvb, curr_offset, len, NULL,
4375 "Bitmap of increasing ARFCNs included in the Mobile Allocation: ");
4376 for(i=len; i>0; i--)
4378 value = tvb_get_uint8(tvb,curr_offset+i-1);
4379 for (j=0; j<8; j++)
4381 proto_item_append_text(item,"%d",(value>>j)&0x01);
4385 curr_offset = curr_offset + len;
4386 return curr_offset - offset;
4390 * [3] 10.5.2.21a Mobile Time Difference
4392 static uint16_t
4393 de_rr_mob_time_diff(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
4395 uint32_t curr_offset;
4397 curr_offset = offset;
4399 proto_tree_add_item(tree, hf_gsm_a_rr_mobile_time_difference, tvb, curr_offset, len, ENC_BIG_ENDIAN);
4401 curr_offset = curr_offset + len;
4402 return curr_offset - offset;
4406 * [3] 10.5.2.21aa MultiRate configuration
4408 /* Multirate speech version Octet 3 Bits 8 7 6 */
4409 static const value_string multirate_speech_ver_vals[] = {
4410 { 1, "Adaptive Multirate speech version 1"},
4411 { 2, "Adaptive Multirate speech version 2"},
4412 { 0, NULL }
4414 /* Bit 5 NSCB: Noise Suppression Control Bit */
4415 static const value_string NSCB_vals[] = {
4416 { 0, "Noise Suppression can be used (default)"},
4417 { 1, "Noise Suppression shall be turned off"},
4418 { 0, NULL }
4420 /* Bit 4 ICMI: Initial Codec Mode Indicator */
4421 static const value_string ICMI_vals[] = {
4422 { 0, "The initial codec mode is defined by the implicit rule provided in 3GPP TS 05.09"},
4423 { 1, "The initial codec mode is defined by the Start Mode field"},
4424 { 0, NULL }
4427 Table 10.5.2.21aa.2: Set of adaptive multirate codec modes field (octet 4)
4428 for the Multirate speech version 1
4430 static const true_false_string gsm_a_rr_set_of_amr_codec_modes = {
4431 "is part of the subset",
4432 "is not part of the subset"
4435 static const value_string gsm_a_rr_amr_threshold_vals[] = {
4436 { 0, "0.0 dB"},
4437 { 1, "0.5 dB"},
4438 { 2, "1.0 dB"},
4439 { 3, "1.5 dB"},
4440 { 4, "2.0 dB"},
4441 { 5, "2.5 dB"},
4442 { 6, "3.0 dB"},
4443 { 7, "3.5 dB"},
4444 { 8, "4.0 dB"},
4445 { 9, "4.5 dB"},
4446 { 10, "5.0 dB"},
4447 { 11, "5.5 dB"},
4448 { 12, "6.0 dB"},
4449 { 13, "6.5 dB"},
4450 { 14, "7.0 dB"},
4451 { 15, "7.5 dB"},
4452 { 16, "8.0 dB"},
4453 { 17, "8.5 dB"},
4454 { 18, "9.0 dB"},
4455 { 19, "9.5 dB"},
4456 { 20, "10.0 dB"},
4457 { 21, "10.5 dB"},
4458 { 22, "11.0 dB"},
4459 { 23, "11.5 dB"},
4460 { 24, "12.0 dB"},
4461 { 25, "12.5 dB"},
4462 { 26, "13.0 dB"},
4463 { 27, "13.5 dB"},
4464 { 28, "14.0 dB"},
4465 { 29, "14.5 dB"},
4466 { 30, "15.0 dB"},
4467 { 31, "15.5 dB"},
4468 { 32, "16.0 dB"},
4469 { 33, "16.5 dB"},
4470 { 34, "17.0 dB"},
4471 { 35, "17.5 dB"},
4472 { 36, "18.0 dB"},
4473 { 37, "18.5 dB"},
4474 { 38, "19.0 dB"},
4475 { 39, "19.5 dB"},
4476 { 40, "20.0 dB"},
4477 { 41, "20.5 dB"},
4478 { 42, "21.0 dB"},
4479 { 43, "21.5 dB"},
4480 { 44, "22.0 dB"},
4481 { 45, "22.5 dB"},
4482 { 46, "23.0 dB"},
4483 { 47, "23.5 dB"},
4484 { 48, "24.0 dB"},
4485 { 49, "24.5 dB"},
4486 { 50, "25.0 dB"},
4487 { 51, "25.5 dB"},
4488 { 52, "26.0 dB"},
4489 { 53, "26.5 dB"},
4490 { 54, "27.0 dB"},
4491 { 55, "27.5 dB"},
4492 { 56, "28.0 dB"},
4493 { 57, "28.5 dB"},
4494 { 58, "29.0 dB"},
4495 { 59, "29.5 dB"},
4496 { 60, "30.0 dB"},
4497 { 61, "30.5 dB"},
4498 { 62, "31.0 dB"},
4499 { 63, "31.5 dB"},
4500 { 0, NULL }
4503 static value_string_ext gsm_a_rr_amr_threshold_vals_ext = VALUE_STRING_EXT_INIT(gsm_a_rr_amr_threshold_vals);
4505 static const value_string gsm_a_rr_amr_hysteresis_vals[] = {
4506 { 0, "0.0 dB"},
4507 { 1, "0.5 dB"},
4508 { 2, "1.0 dB"},
4509 { 3, "1.5 dB"},
4510 { 4, "2.0 dB"},
4511 { 5, "2.5 dB"},
4512 { 6, "3.0 dB"},
4513 { 7, "3.5 dB"},
4514 { 8, "4.0 dB"},
4515 { 9, "4.5 dB"},
4516 { 10, "5.0 dB"},
4517 { 11, "5.5 dB"},
4518 { 12, "6.0 dB"},
4519 { 13, "6.5 dB"},
4520 { 14, "7.0 dB"},
4521 { 15, "7.5 dB"},
4522 { 0, NULL }
4525 uint16_t
4526 de_rr_multirate_conf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
4528 uint32_t curr_offset;
4529 uint8_t oct;
4530 int bit_offset, remaining_length, nb_of_params;
4531 proto_item* ver_item;
4533 curr_offset = offset;
4535 ver_item = proto_tree_add_item(tree, hf_gsm_a_rr_multirate_speech_ver, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4536 proto_tree_add_item(tree, hf_gsm_a_rr_NCSB, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4537 proto_tree_add_item(tree, hf_gsm_a_rr_ICMI, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4538 /* The initial codec mode is coded as in 3GPP TS 45.009 */
4539 proto_tree_add_item(tree, hf_gsm_a_rr_start_mode, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4540 oct = ( tvb_get_uint8(tvb,curr_offset) &0xe0 ) >> 5;
4541 curr_offset++;
4542 switch ( oct){
4543 case 1:
4544 /* Adaptive Multirate speech version 1 */
4545 /* Set of AMR codec modes */
4546 proto_tree_add_item(tree, hf_gsm_a_rr_set_of_amr_codec_modes_v1_b8, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4547 proto_tree_add_item(tree, hf_gsm_a_rr_set_of_amr_codec_modes_v1_b7, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4548 proto_tree_add_item(tree, hf_gsm_a_rr_set_of_amr_codec_modes_v1_b6, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4549 proto_tree_add_item(tree, hf_gsm_a_rr_set_of_amr_codec_modes_v1_b5, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4550 proto_tree_add_item(tree, hf_gsm_a_rr_set_of_amr_codec_modes_v1_b4, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4551 proto_tree_add_item(tree, hf_gsm_a_rr_set_of_amr_codec_modes_v1_b3, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4552 proto_tree_add_item(tree, hf_gsm_a_rr_set_of_amr_codec_modes_v1_b2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4553 proto_tree_add_item(tree, hf_gsm_a_rr_set_of_amr_codec_modes_v1_b1, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4554 curr_offset++;
4556 remaining_length = len-2;
4557 break;
4558 case 2:
4559 /* Adaptive Multirate speech version 2 */
4560 proto_tree_add_item(tree, hf_gsm_a_rr_set_of_amr_codec_modes_v2_b5, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4561 proto_tree_add_item(tree, hf_gsm_a_rr_set_of_amr_codec_modes_v2_b4, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4562 proto_tree_add_item(tree, hf_gsm_a_rr_set_of_amr_codec_modes_v2_b3, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4563 proto_tree_add_item(tree, hf_gsm_a_rr_set_of_amr_codec_modes_v2_b2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4564 proto_tree_add_item(tree, hf_gsm_a_rr_set_of_amr_codec_modes_v2_b1, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4565 curr_offset++;
4567 remaining_length = len-2;
4568 break;
4569 default:
4570 expert_add_info(pinfo, ver_item, &ei_gsm_a_rr_unknown_version);
4571 proto_tree_add_expert_format(tree, pinfo, &ei_gsm_a_rr_data_not_dissected, tvb, curr_offset, len-1, "Data (Not decoded)");
4572 remaining_length = 0;
4573 break;
4576 if (remaining_length)
4578 bit_offset = (curr_offset<<3) + 2;
4579 nb_of_params = remaining_length - 1;
4580 while (nb_of_params)
4582 proto_tree_add_bits_item(tree, hf_gsm_a_rr_amr_threshold, tvb, bit_offset, 6, ENC_BIG_ENDIAN);
4583 bit_offset += 6;
4584 proto_tree_add_bits_item(tree, hf_gsm_a_rr_amr_hysteresis, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
4585 bit_offset += 4;
4586 nb_of_params -= 1;
4590 curr_offset = offset + len;
4591 return curr_offset - offset;
4595 * [3] 10.5.2.21b Multislot Allocation
4597 static uint16_t
4598 de_rr_mult_all(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
4600 proto_item *item;
4601 uint32_t curr_offset;
4602 uint8_t oct;
4603 uint8_t i;
4605 curr_offset = offset;
4607 oct = tvb_get_uint8(tvb, curr_offset);
4608 item = proto_tree_add_uint_format(tree, hf_gsm_a_rr_da_list, tvb, curr_offset, 1, oct, "List of DA:");
4610 curr_offset++;
4611 for( i=0;i<7;i++ )
4613 if( (oct>>i) & 1 )
4615 proto_item_append_text(item," DA%d",i+1);
4619 if( oct & 0x80 ) /* octet 3a present */
4621 oct = tvb_get_uint8(tvb, curr_offset);
4622 item = proto_tree_add_uint_format(tree, hf_gsm_a_rr_ua_list, tvb, curr_offset, 1, oct, "List of UA:");
4623 curr_offset++;
4624 for( i=0;i<7;i++ )
4626 if( (oct>>i) & 1 )
4628 proto_item_append_text(item," UA%d",i+1);
4633 while ( curr_offset < offset + len )
4635 proto_tree_add_item(tree, hf_gsm_a_rr_ma_channel_set, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4636 curr_offset++;
4639 return curr_offset - offset;
4643 * [3] 10.5.2.21c NC mode
4647 * [3] 10.5.2.22 Neighbour Cell Description
4649 static const value_string gsm_a_rr_ext_ind_vals[] = {
4650 { 0, "The information element carries the complete BA"},
4651 { 1, "The information element carries only a part of the BA"},
4652 { 0, NULL }
4654 static uint16_t
4655 de_rr_neigh_cell_desc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
4657 uint32_t curr_offset;
4659 curr_offset = offset;
4661 proto_tree_add_item(tree, hf_gsm_a_rr_ext_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4662 proto_tree_add_bits_item(tree, hf_gsm_a_rr_ba_ind, tvb, (curr_offset<<3)+3, 1, ENC_BIG_ENDIAN);
4664 return dissect_arfcn_list(tvb, tree, pinfo, offset, 16, add_string, string_len);
4668 * [3] 10.5.2.22a Neighbour Cell Description 2
4670 static uint16_t
4671 de_rr_neigh_cell_desc2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
4673 uint32_t curr_offset;
4675 curr_offset = offset;
4677 proto_tree_add_bits_item(tree, hf_gsm_a_rr_multiband_reporting, tvb, (curr_offset<<3)+1, 2, ENC_BIG_ENDIAN);
4678 proto_tree_add_bits_item(tree, hf_gsm_a_rr_ba_ind, tvb, (curr_offset<<3)+3, 1, ENC_BIG_ENDIAN);
4680 return dissect_arfcn_list2(tvb, tree, pinfo, offset, 16, add_string, string_len);
4684 * [3] 10.5.2.22b (void)
4685 * [3] 10.5.2.22c NT/N Rest Octets
4689 * [3] 10.5.2.23 P1 Rest Octets
4691 static uint16_t
4692 de_rr_p1_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
4694 proto_item *item2;
4695 uint32_t curr_offset, value;
4696 int bit_offset, bit_offset_sav;
4697 uint8_t tvb_len = tvb_reported_length(tvb);
4698 uint16_t bit_len = tvb_len << 3;
4700 curr_offset = offset;
4701 bit_offset = curr_offset << 3;
4703 if (gsm_rr_csn_HL_flag(tvb, subtree, bit_len, bit_offset++, hf_gsm_a_rr_nln_pch_present))
4705 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_nln_pch, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
4706 bit_offset += 2;
4707 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_nln_status_pch, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
4708 bit_offset += 1;
4710 if (gsm_rr_csn_HL_flag(tvb, subtree, bit_len, bit_offset++, hf_gsm_a_call_prio1))
4712 item2 = proto_tree_add_bits_item(subtree, hf_gsm_a_call_prio, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
4713 bit_offset += 3;
4714 proto_item_append_text(item2, " for Mobile Identity 1");
4716 if (gsm_rr_csn_HL_flag(tvb, subtree, bit_len, bit_offset++, hf_gsm_a_call_prio2))
4718 item2 = proto_tree_add_bits_item(subtree, hf_gsm_a_call_prio, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
4719 bit_offset += 3;
4720 proto_item_append_text(item2, " for Mobile Identity 2");
4722 if (gsm_rr_csn_HL_flag(tvb, subtree, bit_len, bit_offset++, hf_gsm_a_rr_group_call_information))
4723 { /* Group Call Information */
4724 bit_offset_sav = bit_offset;
4725 bit_offset += 36;
4726 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_group_channel_description))
4727 { /* Group Channel Description */
4728 bit_offset += 24;
4729 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_hopping_case))
4730 { /* Hopping case */
4731 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_hopping_flag))
4733 bit_offset += 64;
4735 else
4737 value = tvb_get_bits8(tvb,bit_offset,8);
4738 bit_offset += 8 + (value<<3);
4742 proto_tree_add_expert_format(subtree, pinfo, &ei_gsm_a_rr_data_not_dissected, tvb, bit_offset_sav>>3, (bit_offset-bit_offset_sav)>>3,
4743 "Group Call Information: Data(Not decoded)");
4745 gsm_rr_csn_HL_flag(tvb, subtree, bit_len, bit_offset++, hf_gsm_a_rr_packet_page_indication_1);
4746 gsm_rr_csn_HL_flag(tvb, subtree, bit_len, bit_offset++, hf_gsm_a_rr_packet_page_indication_2);
4748 /* Truncation allowed (see 44.018 section 8.9) */
4750 gsm_rr_padding_bits(subtree, tvb, bit_offset, tvb_len, PADDING_BYTE);
4751 return tvb_len - offset;
4755 * [3] 10.5.2.24 P2 Rest Octets
4757 static uint16_t
4758 de_rr_p2_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
4761 proto_item *item2;
4762 uint32_t curr_offset;
4763 int bit_offset;
4764 uint8_t tvb_len = tvb_reported_length(tvb);
4765 uint16_t bit_len = tvb_len << 3;
4767 curr_offset = offset;
4768 bit_offset = curr_offset << 3;
4770 if (gsm_rr_csn_HL_flag(tvb, subtree, bit_len, bit_offset++, hf_gsm_a_rr_chnl_needed_ch3_present))
4772 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_chnl_needed_ch3, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
4773 bit_offset += 2;
4775 if (gsm_rr_csn_HL_flag(tvb, subtree, bit_len ,bit_offset++, hf_gsm_a_rr_nln_pch_present))
4777 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_nln_pch, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
4778 bit_offset += 2;
4779 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_nln_status_pch, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
4780 bit_offset += 1;
4782 if (gsm_rr_csn_HL_flag(tvb, subtree, bit_len, bit_offset++, hf_gsm_a_call_prio1))
4784 item2 = proto_tree_add_bits_item(subtree, hf_gsm_a_call_prio, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
4785 bit_offset += 3;
4786 proto_item_append_text(item2, " for Mobile Identity 1");
4788 if (gsm_rr_csn_HL_flag(tvb, subtree, bit_len, bit_offset++, hf_gsm_a_call_prio2))
4790 item2 = proto_tree_add_bits_item(subtree, hf_gsm_a_call_prio, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
4791 bit_offset += 3;
4792 proto_item_append_text(item2, " for Mobile Identity 2");
4794 if (gsm_rr_csn_HL_flag(tvb, subtree, bit_len, bit_offset++, hf_gsm_a_call_prio3))
4796 item2 = proto_tree_add_bits_item(subtree, hf_gsm_a_call_prio, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
4797 bit_offset += 3;
4798 proto_item_append_text(item2, " for Mobile Identity 3");
4800 gsm_rr_csn_HL_flag(tvb, subtree, bit_len, bit_offset++, hf_gsm_a_rr_packet_paging_procedure_1);
4801 gsm_rr_csn_HL_flag(tvb, subtree, bit_len, bit_offset++, hf_gsm_a_rr_packet_paging_procedure_2);
4802 gsm_rr_csn_HL_flag(tvb, subtree, bit_len, bit_offset++, hf_gsm_a_rr_packet_paging_procedure_3);
4805 if (gsm_rr_csn_HL_flag(tvb, subtree, bit_len, bit_offset++, hf_gsm_a_rr_additions_in_release_6_present))
4806 { /* Additions in release 6 */
4807 bit_offset += 1;
4808 proto_tree_add_expert_format(subtree, pinfo, &ei_gsm_a_rr_data_not_dissected, tvb, bit_offset>>3, -1, "Additions in Release 6: Data (Not decoded)");
4811 /* Truncation allowed (see 44.018 section 8.9 */
4812 gsm_rr_padding_bits(subtree, tvb, bit_offset, tvb_len, PADDING_BYTE);
4813 return tvb_len - offset;
4817 * [3] 10.5.2.25 P3 Rest Octets
4819 static uint16_t
4820 de_rr_p3_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
4822 proto_item *item2;
4823 uint32_t curr_offset;
4824 int bit_offset;
4825 uint8_t tvb_len = tvb_reported_length(tvb);
4826 uint16_t bit_len = tvb_len << 3;
4828 curr_offset = offset;
4829 bit_offset = curr_offset << 3;
4831 if (gsm_rr_csn_HL_flag(tvb, subtree, bit_len, bit_offset++, hf_gsm_a_rr_chnl_needed_ch3and4))
4833 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_chnl_needed_ch3, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
4834 bit_offset += 2;
4835 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_chnl_needed_ch4, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
4836 bit_offset += 2;
4838 if (gsm_rr_csn_HL_flag(tvb, subtree, bit_len, bit_offset++, hf_gsm_a_rr_nln_pch_present))
4840 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_nln_pch, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
4841 bit_offset += 2;
4842 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_nln_status_pch, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
4843 bit_offset += 1;
4845 if (gsm_rr_csn_HL_flag(tvb, subtree, bit_len, bit_offset++, hf_gsm_a_call_prio1))
4847 item2 = proto_tree_add_bits_item(subtree, hf_gsm_a_call_prio, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
4848 bit_offset += 3;
4849 proto_item_append_text(item2, " for Mobile Identity 1");
4851 if (gsm_rr_csn_HL_flag(tvb, subtree, bit_len, bit_offset++, hf_gsm_a_call_prio2))
4853 item2 = proto_tree_add_bits_item(subtree, hf_gsm_a_call_prio, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
4854 bit_offset += 3;
4855 proto_item_append_text(item2, " for Mobile Identity 2");
4857 if (gsm_rr_csn_HL_flag(tvb, subtree, bit_len, bit_offset++, hf_gsm_a_call_prio3))
4859 item2 = proto_tree_add_bits_item(subtree, hf_gsm_a_call_prio, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
4860 bit_offset += 3;
4861 proto_item_append_text(item2, " for Mobile Identity 3");
4863 if (gsm_rr_csn_HL_flag(tvb, subtree, bit_len, bit_offset++, hf_gsm_a_call_prio4))
4865 item2 = proto_tree_add_bits_item(subtree, hf_gsm_a_call_prio, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
4866 bit_offset += 3;
4867 proto_item_append_text(item2, " for Mobile Identity 4");
4870 /* Truncation allowed (see 44.018 section 8.9 */
4871 gsm_rr_padding_bits(subtree, tvb, bit_offset, tvb_len, PADDING_BYTE);
4872 return tvb_len - offset;
4876 * [3] 10.5.2.25a Packet Channel Description C V 3
4878 static uint16_t
4879 de_rr_packet_ch_desc(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
4881 uint32_t curr_offset = offset;
4882 uint8_t oct8, second_oct8;
4884 /* Octet 2 */
4885 /* Channel Type */
4886 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_packet_channel_type, tvb, (curr_offset<<3), 5, ENC_NA);
4887 /* TN */
4888 proto_tree_add_item(subtree, hf_gsm_a_rr_timeslot, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4890 curr_offset +=1;
4892 /* Octet 3 */
4893 oct8 = tvb_get_uint8(tvb, curr_offset);
4894 proto_tree_add_item(subtree, hf_gsm_a_rr_training_sequence, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4895 if ((oct8 & 0x10) == 0x10)
4897 /* Hopping sequence */
4898 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_hopping_channel_maio, tvb, (curr_offset<<3)+4, 6, ENC_NA);
4899 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_hsn, tvb, (curr_offset<<3)+10, 6, ENC_NA);
4901 curr_offset = curr_offset + 2;
4903 else
4905 if ((oct8 & 0x08) == 0x08)
4907 second_oct8 = tvb_get_uint8(tvb, curr_offset+1);
4909 /* indirect encoding of hopping RF channel configuration */
4910 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_spare, tvb, (curr_offset<<3)+5, 1, ENC_NA);
4911 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_hopping_channel_maio, tvb, (curr_offset<<3)+6, 6, ENC_NA);
4912 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_hopping_channel_ma_num_ind, tvb, (curr_offset<<3)+12, 1, ENC_NA);
4914 if( (second_oct8 & 0x04) == 0x04 )
4916 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_hopping_channel_change_mark_1, tvb, (curr_offset<<3)+14, 2, ENC_NA);
4918 else
4920 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_spare, tvb, (curr_offset<<3)+14, 2, ENC_NA);
4922 curr_offset = curr_offset + 2;
4924 else
4926 /* non-hopping RF channel configuration */
4927 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_spare, tvb, (curr_offset<<3)+5, 1, ENC_NA);
4928 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_single_channel_arfcn, tvb, (curr_offset<<3)+6, 10, ENC_NA);
4929 curr_offset = curr_offset + 2;
4933 return curr_offset - offset;
4937 * [3] 10.5.2.25b Dedicated mode or TBF
4940 static const value_string gsm_a_rr_dedicated_mode_or_tbf_vals[] = {
4941 { 0, "This message assigns a dedicated mode resource"},
4942 { 1, "This message assigns an uplink TBF or is the second message of two in a two-message assignment of an uplink or downlink TBF"},
4943 { 2, "Not used"},
4944 { 3, "This message assigns a downlink TBF to the mobile station identified in the IA Rest Octets IE"},
4945 { 4, "Not used"},
4946 { 5, "This message is the first message of two in a two-message assignment of an uplink TBF"},
4947 { 6, "Not used"},
4948 { 7, "This message is the first message of two in a two-message assignment of a downlink TBF to the mobile station identified in the IA Rest Octets IE"},
4949 { 0, NULL }
4951 static uint16_t
4952 de_rr_ded_mod_or_tbf(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
4954 uint32_t curr_offset;
4956 curr_offset = offset;
4958 proto_tree_add_item(subtree, hf_gsm_a_rr_dedicated_mode_or_tbf, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4960 curr_offset += 1;
4962 return curr_offset - offset;
4965 * [3] 10.5.2.25c RR Packet Uplink Assignment
4967 static uint16_t
4968 de_rr_pkt_ul_ass(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
4970 uint32_t curr_offset = offset;
4972 proto_tree_add_expert(subtree, pinfo, &ei_gsm_a_rr_data_not_dissected, tvb, curr_offset, len);
4974 return len;
4978 * [3] 10.5.2.25d RR Packet Downlink Assignment
4980 static uint16_t
4981 de_rr_pkt_dl_ass(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
4983 uint32_t curr_offset = offset;
4985 proto_tree_add_expert(subtree, pinfo, &ei_gsm_a_rr_data_not_dissected, tvb, curr_offset, len);
4987 return len;
4991 * [3] 10.5.2.25e RR Packet Downlink Assignment Type 2
4993 static uint16_t
4994 de_rr_pkt_dl_ass_type2(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
4996 uint32_t curr_offset = offset;
4998 proto_tree_add_expert(subtree, pinfo, &ei_gsm_a_rr_data_not_dissected, tvb, curr_offset, len);
5000 return len;
5004 * [3] 10.5.2.26 Page Mode
5007 static const value_string gsm_a_rr_page_mode_vals[] = {
5008 { 0, "Normal paging"},
5009 { 1, "Extended paging"},
5010 { 2, "Paging reorganization"},
5011 { 3, "Same as before"},
5012 { 0, NULL }
5014 static uint16_t
5015 de_rr_page_mode(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
5017 uint32_t curr_offset;
5019 curr_offset = offset;
5021 proto_tree_add_item(subtree, hf_gsm_a_rr_page_mode, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5023 curr_offset += 1;
5025 return curr_offset - offset;
5028 * [3] 10.5.2.26a (void)
5029 * [3] 10.5.2.26b (void)
5030 * [3] 10.5.2.26c (void)
5031 * [3] 10.5.2.26d (void)
5034 * [3] 10.5.2.27 NCC Permitted
5036 static uint16_t
5037 de_rr_ncc_perm(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
5039 uint32_t curr_offset;
5041 curr_offset = offset;
5043 proto_tree_add_item(subtree, hf_gsm_a_rr_ncc_permitted, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5045 curr_offset = curr_offset + 1;
5047 return curr_offset - offset;
5050 * [3] 10.5.2.28 Power Command
5053 * ATC (Access Type Control) (octet 2)Bit 8
5054 * 0 Sending of Handover access is mandatory
5055 * 1 Sending of Handover access is optional
5057 static const true_false_string gsm_a_rr_pow_cmd_atc_value = {
5058 "Sending of Handover access is optional",
5059 "Sending of Handover access is mandatory"
5062 * The EPC mode field (octet 2) indicates whether the assigned channel(s)
5063 * shall be in enhanced power control (EPC) mode. It is only valid for channels
5064 * on which EPC may be used. It is coded as follows:
5066 static const true_false_string gsm_a_rr_pow_cmd_epc_value = {
5067 "Channel(s) in EPC mode",
5068 "Channel(s) not in EPC mode"
5071 * FPC_EPC (octet 2)
5072 * The FPC_EPC field (octet 2) has different interpretation depending
5073 * on the channel mode of the assigned channel (s) and the value
5074 * of the EPC mode field.
5075 * If the channel mode is such that fast power control (FPC) may be
5076 * used, the FPC_EPC field indicates whether Fast Measurement
5077 * Reporting and Power Control mechanism is used.
5078 * It is coded as follows:
5079 * Value 0 FPC not in use
5080 * 1 FPC in use
5081 * If the channel mode is such that EPC may be used and the EPC mode
5082 * field indicates that the channel is in EPC mode, the FPC_EPC
5083 * field indicates whether EPC shall be used for uplink power control.
5084 * It is coded as follows:
5085 * Value 0 EPC not in use for uplink power control
5086 * 1 EPC in use for uplink power control
5089 static const true_false_string gsm_a_rr_pow_cmd_fpcepc_value = {
5090 "FPC in use/EPC in use for uplink power control",
5091 "FPC not in use/EPC not in use for uplink power control"
5095 * Power level (octet 2)The power level field is coded as the binaryRepresentation
5096 * of the "power control level", see 3GPP TS 3GPP TS 45.005. This value shall be used
5097 * by the mobile station According to 3GPP TS 45.008.Range: 0 to 31.
5100 static uint16_t
5101 de_rr_pow_cmd(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
5103 uint32_t curr_offset;
5105 curr_offset = offset;
5107 proto_tree_add_item(subtree, hf_gsm_a_b8spare, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5108 /*EPC mode */
5109 proto_tree_add_item(subtree, hf_gsm_a_rr_pow_cmd_epc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5110 /*FPC_EPC*/
5111 proto_tree_add_item(subtree, hf_gsm_a_rr_pow_cmd_fpcepc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5112 /*POWER LEVEL*/
5113 proto_tree_add_item(subtree, hf_gsm_a_rr_pow_cmd_powlev, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5115 curr_offset = curr_offset + 1;
5117 return curr_offset - offset;
5121 * [3] 10.5.2.28a Power Command and access type
5123 static uint16_t
5124 de_rr_pow_cmd_and_acc_type(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
5126 uint32_t curr_offset;
5128 curr_offset = offset;
5130 /*ATC */
5131 proto_tree_add_item(subtree, hf_gsm_a_rr_pow_cmd_atc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5132 /*EPC mode */
5133 proto_tree_add_item(subtree, hf_gsm_a_rr_pow_cmd_epc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5134 /*FPC_EPC*/
5135 proto_tree_add_item(subtree, hf_gsm_a_rr_pow_cmd_fpcepc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5136 /*POWER LEVEL*/
5137 proto_tree_add_item(subtree, hf_gsm_a_rr_pow_cmd_powlev, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5139 curr_offset = curr_offset + 1;
5141 return curr_offset - offset;
5144 * [3] 10.5.2.29 RACH Control Parameters
5147 static const value_string gsm_a_rr_max_retrans_vals[] = {
5148 { 0, "Maximum 1 retransmission"},
5149 { 1, "Maximum 2 retransmissions"},
5150 { 2, "Maximum 4 retransmissions"},
5151 { 3, "Maximum 7 retransmissions"},
5152 { 0, NULL }
5155 static const value_string gsm_a_rr_tx_integer_vals[] = {
5156 { 0, "3 slots used to spread transmission"},
5157 { 1, "4 slots used to spread transmission"},
5158 { 2, "5 slots used to spread transmission"},
5159 { 3, "6 slots used to spread transmission"},
5160 { 4, "7 slots used to spread transmission"},
5161 { 5, "8 slots used to spread transmission"},
5162 { 6, "9 slots used to spread transmission"},
5163 { 7, "10 slots used to spread transmission"},
5164 { 8, "11 slots used to spread transmission"},
5165 { 9, "12 slots used to spread transmission"},
5166 { 10, "14 slots used to spread transmission"},
5167 { 11, "16 slots used to spread transmission"},
5168 { 12, "20 slots used to spread transmission"},
5169 { 13, "25 slots used to spread transmission"},
5170 { 14, "32 slots used to spread transmission"},
5171 { 15, "50 slots used to spread transmission"},
5172 { 0, NULL }
5174 static const value_string gsm_a_rr_cell_barr_access_vals[] = {
5175 { 0, "The cell is not barred"},
5176 { 1, "The cell is barred"},
5177 { 0, NULL }
5179 static const value_string gsm_a_rr_re_vals[] = {
5180 { 0, "Call Reestablishment allowed in the cell"},
5181 { 1, "Call Reestablishment not allowed in the cell"},
5182 { 0, NULL }
5185 static uint16_t
5186 de_rr_rach_ctrl_param(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
5188 uint32_t curr_offset;
5190 curr_offset = offset;
5192 proto_tree_add_item(subtree, hf_gsm_a_rr_max_retrans, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5193 proto_tree_add_item(subtree, hf_gsm_a_rr_tx_integer, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5194 proto_tree_add_item(subtree, hf_gsm_a_rr_cell_barr_access, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5195 proto_tree_add_item(subtree, hf_gsm_a_rr_re, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5196 curr_offset = curr_offset + 1;
5198 proto_tree_add_item(subtree, hf_gsm_a_rr_acc, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
5200 curr_offset = curr_offset + 2;
5202 return curr_offset - offset;
5205 * [3] 10.5.2.30 Request Reference M V 3
5207 uint16_t parse_reduced_frame_number(tvbuff_t *tvb, const int offset)
5209 /* great care needed with signed/unsigned - -1 in unsigned is 0xffff, which mod(26) is not what you think !!! */
5210 int16_t t2, t3, t;
5211 uint16_t frame, t1;
5212 uint16_t fn;
5214 fn = tvb_get_ntohs(tvb, offset);
5216 t1 = (fn >> 11) & 0x1f;
5217 t2 = (fn >> 0) & 0x1f;
5218 t3 = (fn >> 5) & 0x3f;
5220 t = (t3-t2)%26;
5221 if (t<0)
5222 t += 26;
5224 frame = 51*(unsigned)t+(unsigned)t3+51*26*t1;
5226 return frame;
5229 static uint16_t
5230 de_rr_req_ref(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
5232 proto_item *item;
5233 uint32_t curr_offset;
5234 uint16_t rfn;
5236 curr_offset = offset;
5238 proto_tree_add_item(subtree, hf_gsm_a_rr_ra, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5239 curr_offset++;
5240 rfn = parse_reduced_frame_number(tvb, curr_offset);
5241 proto_tree_add_item(subtree, hf_gsm_a_rr_T1prim, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5242 proto_tree_add_item(subtree, hf_gsm_a_rr_T3, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
5243 curr_offset++;
5244 proto_tree_add_item(subtree, hf_gsm_a_rr_T2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5245 curr_offset++;
5246 item = proto_tree_add_uint(subtree, hf_gsm_a_rr_rfn, tvb, curr_offset-2, 2, rfn);
5247 proto_item_set_generated(item);
5249 return curr_offset - offset;
5252 * [3] 10.5.2.31
5254 uint16_t
5255 de_rr_cause(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
5257 uint32_t curr_offset;
5259 curr_offset = offset;
5261 proto_tree_add_item(tree, hf_gsm_a_rr_RR_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5263 curr_offset++;
5265 return curr_offset - offset;
5269 * [3] 10.5.2.32 SI 1 Rest Octets
5271 static const value_string gsm_a_rr_nch_position_vals[] = {
5272 { 0, "No of blocks = 1 and Number of first block = 0"},
5273 { 1, "No of blocks = 1 and Number of first block = 1"},
5274 { 2, "No of blocks = 1 and Number of first block = 2"},
5275 { 3, "No of blocks = 1 and Number of first block = 3"},
5276 { 4, "No of blocks = 1 and Number of first block = 4"},
5277 { 5, "No of blocks = 1 and Number of first block = 5"},
5278 { 6, "No of blocks = 1 and Number of first block = 6"},
5279 { 7, "No of blocks = 1 and Number of first block = 0"},
5280 { 8, "No of blocks = 2 and Number of first block = 1"},
5281 { 9, "No of blocks = 2 and Number of first block = 2"},
5282 {10, "No of blocks = 2 and Number of first block = 3"},
5283 {11, "No of blocks = 2 and Number of first block = 4"},
5284 {12, "No of blocks = 2 and Number of first block = 5"},
5285 {13, "No of blocks = 3 and Number of first block = 0"},
5286 {14, "No of blocks = 3 and Number of first block = 1"},
5287 {15, "No of blocks = 3 and Number of first block = 2"},
5288 {16, "No of blocks = 3 and Number of first block = 3"},
5289 {17, "No of blocks = 3 and Number of first block = 4"},
5290 {18, "No of blocks = 4 and Number of first block = 0"},
5291 {19, "No of blocks = 4 and Number of first block = 1"},
5292 {20, "No of blocks = 4 and Number of first block = 2"},
5293 {21, "No of blocks = 4 and Number of first block = 3"},
5294 {22, "No of blocks = 5 and Number of first block = 0"},
5295 {23, "No of blocks = 5 and Number of first block = 1"},
5296 {24, "No of blocks = 5 and Number of first block = 2"},
5297 {25, "No of blocks = 6 and Number of first block = 0"},
5298 {26, "No of blocks = 6 and Number of first block = 1"},
5299 {27, "No of blocks = 7 and Number of first block = 0"},
5300 {28, "Reserved"},
5301 {29, "Reserved"},
5302 {30, "Reserved"},
5303 {31, "Reserved"},
5304 { 0, NULL }
5307 static uint16_t
5308 de_rr_si1_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
5310 uint32_t curr_offset;
5311 int bit_offset;
5312 uint8_t tvb_len = tvb_reported_length(tvb);
5314 curr_offset = offset;
5315 bit_offset = curr_offset << 3;
5317 if (gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_nch_position_present))
5319 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_nch_position, tvb, bit_offset, 5, ENC_BIG_ENDIAN);
5320 bit_offset += 5;
5322 gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_band_indicator);
5324 gsm_rr_padding_bits(subtree, tvb, bit_offset, tvb_len, PADDING_BYTE);
5325 return tvb_len - offset;
5329 * [3] 10.5.2.33 SI 2bis Rest Octets
5333 * [3] 10.5.2.33a SI 2ter Rest Octets
5335 static const value_string gsm_a_rr_qsearch_x_vals[] = {
5336 { 0, "-98 dBm"},
5337 { 1, "-94 dBm"},
5338 { 2, "-90 dBm"},
5339 { 3, "-86 dBm"},
5340 { 4, "-82 dBm"},
5341 { 5, "-78 dBm"},
5342 { 6, "-74 dBm"},
5343 { 7, "Always"},
5344 { 8, "-78 dBm"},
5345 { 9, "-74 dBm"},
5346 {10, "-70 dBm"},
5347 {11, "-66 dBm"},
5348 {12, "-62 dBm"},
5349 {13, "-58 dBm"},
5350 {14, "-54 dBm"},
5351 {15, "Never"},
5352 { 0, NULL }
5355 static const value_string gsm_a_rr_xdd_qoffset_vals[] = {
5356 { 0, "always select a cell if acceptable"},
5357 { 1, "-28 dB"},
5358 { 2, "-24 dB"},
5359 { 3, "-20 dB"},
5360 { 4, "-16 dB"},
5361 { 5, "-12 dB"},
5362 { 6, "-8 dB"},
5363 { 7, "-4 dB"},
5364 { 8, "0 dB"},
5365 { 9, "4 dB"},
5366 {10, "8 dB"},
5367 {11, "12 dB"},
5368 {12, "16 dB"},
5369 {13, "20 dB"},
5370 {14, "24 dB"},
5371 {15, "28 dB"},
5372 { 0, NULL }
5375 static const value_string gsm_a_rr_fdd_qmin_vals[] = {
5376 { 0, "-20 dB"},
5377 { 1, "-6 dB"},
5378 { 2, "-18 dB"},
5379 { 3, "-8 dB"},
5380 { 4, "-16 dB"},
5381 { 5, "-10 dB"},
5382 { 6, "-14 dB"},
5383 { 7, "-12 dB"},
5384 { 0, NULL }
5387 static const value_string gsm_a_rr_fdd_qmin_offset_vals[] = {
5388 { 0, "0 dB"},
5389 { 1, "2 dB"},
5390 { 2, "4 dB"},
5391 { 3, "6 dB"},
5392 { 4, "8 dB"},
5393 { 5, "10 dB"},
5394 { 6, "12 dB"},
5395 { 7, "14 dB"},
5396 { 0, NULL }
5399 static const value_string gsm_a_rr_fdd_rscpmin_vals[] = {
5400 { 0, "-114 dBm"},
5401 { 1, "-112 dBm"},
5402 { 2, "-110 dBm"},
5403 { 3, "-108 dBm"},
5404 { 4, "-106 dBm"},
5405 { 5, "-104 dBm"},
5406 { 6, "-102 dBm"},
5407 { 7, "-100 dBm"},
5408 { 8, "-98 dBm"},
5409 { 9, "-96 dBm"},
5410 {10, "-94 dBm"},
5411 {11, "-92 dBm"},
5412 {12, "-90 dBm"},
5413 {13, "-88 dBm"},
5414 {14, "-86 dBm"},
5415 {15, "-84 dBm"},
5416 { 0, NULL }
5419 static uint16_t
5420 de_rr_si2ter_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
5422 proto_tree *subtree2;
5423 proto_item *item2;
5424 uint32_t curr_offset;
5425 int bit_offset, bit_offset_sav;
5426 uint8_t tvb_len = tvb_reported_length(tvb);
5427 uint16_t bit_len = tvb_len << 3;
5429 curr_offset = offset;
5430 bit_offset = curr_offset<<3;
5432 if (gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_si2ter_mp_change_mark_present))
5434 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_si2ter_mp_change_mark, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
5435 bit_offset += 1;
5436 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_si2ter_3g_change_mark, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
5437 bit_offset += 1;
5438 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_si2ter_index, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
5439 bit_offset += 3;
5440 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_si2ter_count, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
5441 bit_offset += 3;
5442 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_utran_fdd_description))
5443 { /* UTRAN FDD Description */
5444 bit_offset_sav = bit_offset;
5445 subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_UTRAN_FDD_DESC], &item2,
5446 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_FDD_DESC]);
5447 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_utran_fdd_description_earlier_version_bit_reserved1, tvb, bit_offset++, 1, ENC_NA);
5448 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_utran_fdd_description_earlier_version_bit_reserved2, tvb, bit_offset++, 1, ENC_NA);
5449 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_fdd_uarfcn, tvb, bit_offset, 14, ENC_BIG_ENDIAN);
5450 bit_offset += 14;
5451 if (gsm_rr_csn_flag(tvb, subtree2, bit_offset++, hf_gsm_a_rr_bandwidth_fdd_present))
5453 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_bandwidth_fdd, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
5454 bit_offset += 3;
5456 proto_item_set_len(item2,(bit_offset>>3) - (bit_offset_sav>>3)+1);
5458 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_utran_tdd_description))
5459 { /* UTRAN TDD Description */
5460 bit_offset_sav = bit_offset;
5461 subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_UTRAN_TDD_DESC], &item2,
5462 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_TDD_DESC]);
5463 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_utran_tdd_description_earlier_version_bit_reserved1, tvb, bit_offset++, 1, ENC_NA);
5464 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_utran_tdd_description_earlier_version_bit_reserved2, tvb, bit_offset++, 1, ENC_NA);
5465 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_tdd_uarfcn, tvb, bit_offset, 14, ENC_BIG_ENDIAN);
5466 bit_offset += 14;
5467 if (gsm_rr_csn_flag(tvb, subtree2, bit_offset++, hf_gsm_a_rr_bandwidth_tdd_present))
5469 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_bandwidth_tdd, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
5470 bit_offset += 3;
5472 proto_item_set_len(item2,(bit_offset>>3) - (bit_offset_sav>>3)+1);
5474 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_3g_measurement_parameters_description))
5475 { /* 3G Measurement Parameters Description */
5476 bit_offset_sav = bit_offset;
5477 subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_MEAS_PARAM_DESC], &item2,
5478 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_MEAS_PARAM_DESC]);
5479 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_qsearch_i, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
5480 bit_offset += 4;
5481 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_fdd_parameters))
5483 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_fdd_qoffset, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
5484 bit_offset += 4;
5485 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_fdd_qmin, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
5486 bit_offset += 3;
5488 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_tdd_parameters))
5490 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_tdd_qoffset, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
5491 bit_offset += 4;
5493 proto_item_set_len(item2,(bit_offset>>3) - (bit_offset_sav>>3)+1);
5495 /* Null breakpoint */
5496 if (bit_len - bit_offset > 0)
5498 /* There is still room left in the Rest Octets IE */
5499 if (gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_additions_in_rel_5))
5500 { /* Additions in release R5 */
5501 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_3g_additional_measurement_parameters_description))
5502 { /* 3G Additional Measurement Parameters Description */
5503 bit_offset_sav = bit_offset;
5504 subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_ADD_MEAS_PARAM_DESC], &item2,
5505 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_ADD_MEAS_PARAM_DESC]);
5506 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_fdd_qmin_offset, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
5507 bit_offset += 3;
5508 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_fdd_rscpmin, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
5509 bit_offset += 4;
5510 proto_item_set_len(item2,(bit_offset>>3) - (bit_offset_sav>>3)+1);
5515 gsm_rr_padding_bits(subtree, tvb, bit_offset, tvb_len, PADDING_BYTE);
5516 return tvb_len - offset;
5520 * [3] 10.5.2.33b SI 2quater Rest Octets
5522 static const true_false_string gsm_a_rr_gsm_report_type_value = {
5523 "The MS shall use the Measurement Report message for reporting",
5524 "The MS shall use the Enhanced Measurement Report message for reporting if at least one BSIC is allocated to each BA (list) frequency. Otherwise, the Measurement Report message shall be used"
5527 static const true_false_string gsm_a_rr_frequency_scrolling_value = {
5528 "Next BSIC in the structure relates to the subsequent frequency in the BA(list)",
5529 "Next BSIC in the structure relates to the same frequency in the BA(list)"
5532 static const true_false_string gsm_a_rr_rep_priority_value = {
5533 "High reporting priority",
5534 "Normal reporting priority"
5537 static const true_false_string gsm_a_rr_report_type_value = {
5538 "The MS shall use the PACKET MEASUREMENT REPORT message for reporting",
5539 "The MS shall use the PACKET ENHANCED MEASUREMENT REPORT message for reporting"
5542 static const true_false_string gsm_a_rr_reporting_rate_value = {
5543 "Reduced reporting rate allowed",
5544 "Normal reporting rate"
5547 static const true_false_string gsm_a_rr_invalid_bsic_reporting_value = {
5548 "Report on cells with invalid BSIC and allowed NCC part of BSIC is allowed",
5549 "Report on cells with invalid BSIC and allowed NCC part of BSIC is not allowed"
5552 static const value_string gsm_a_rr_scale_ord_vals[] = {
5553 { 0, "An offset of 0 dB shall be used for the reported RXLEV values"},
5554 { 1, "An offset of 10 dB shall be used for the reported RXLEV values"},
5555 { 2, "An automatic offset shall be used for the reported RXLEV values"},
5556 { 0, NULL }
5559 static const value_string gsm_a_rr_xxx_reporting_offset_vals[] = {
5560 { 0, "Apply an offset of 0 dB to the reported value when prioritising the cells for reporting"},
5561 { 1, "Apply an offset of 6 dB to the reported value when prioritising the cells for reporting"},
5562 { 2, "Apply an offset of 12 dB to the reported value when prioritising the cells for reporting"},
5563 { 3, "Apply an offset of 18 dB to the reported value when prioritising the cells for reporting"},
5564 { 4, "Apply an offset of 24 dB to the reported value when prioritising the cells for reporting"},
5565 { 5, "Apply an offset of 30 dB to the reported value when prioritising the cells for reporting"},
5566 { 6, "Apply an offset of 36 dB to the reported value when prioritising the cells for reporting"},
5567 { 7, "Apply an offset of 42 dB to the reported value when prioritising the cells for reporting"},
5568 { 0, NULL }
5571 /* The TS 45.008 is not that clear, but it should be understood: threshold = minimum reported value + 6 * resolution
5572 * The minimum reported value, resolution is, for the different access technologies:
5573 * GSM: -111 dBm, 1 dBm
5574 * WCDMA/RSCP: -116 dBm, 1 dBm
5575 * WCDMA/EcN0: -24.5 dB, 0.5 dB
5576 * LTE/RSRP: -140 dBm, 1 dB
5577 * LTE/RSRQ: -19.5 dB, 0.5 dB
5579 static const value_string gsm_a_rr_gsm_reporting_threshold_vals[] = {
5580 { 0, "Apply priority reporting if the reported value is above -111 dBm"},
5581 { 1, "Apply priority reporting if the reported value is above -105 dBm"},
5582 { 2, "Apply priority reporting if the reported value is above -99 dBm"},
5583 { 3, "Apply priority reporting if the reported value is above -93 dBm"},
5584 { 4, "Apply priority reporting if the reported value is above -87 dBm"},
5585 { 5, "Apply priority reporting if the reported value is above -81 dBm"},
5586 { 6, "Apply priority reporting if the reported value is above -75 dBm"},
5587 { 7, "Never apply priority reporting"},
5588 { 0, NULL }
5591 static const value_string gsm_a_rr_wcdma_rscp_reporting_threshold_vals[] = {
5592 { 0, "Apply priority reporting if the reported value is above -116 dBm"},
5593 { 1, "Apply priority reporting if the reported value is above -110 dBm"},
5594 { 2, "Apply priority reporting if the reported value is above -104 dBm"},
5595 { 3, "Apply priority reporting if the reported value is above -98 dBm"},
5596 { 4, "Apply priority reporting if the reported value is above -92 dBm"},
5597 { 5, "Apply priority reporting if the reported value is above -86 dBm"},
5598 { 6, "Apply priority reporting if the reported value is above -80 dBm"},
5599 { 7, "Never apply priority reporting"},
5600 { 0, NULL }
5603 static const value_string gsm_a_rr_wcdma_ecn0_reporting_threshold_vals[] = {
5604 { 0, "Apply priority reporting if the reported value is above -24.5 dB"},
5605 { 1, "Apply priority reporting if the reported value is above -21.5 dB"},
5606 { 2, "Apply priority reporting if the reported value is above -17.5 dB"},
5607 { 3, "Apply priority reporting if the reported value is above -14.5 dB"},
5608 { 4, "Apply priority reporting if the reported value is above -11.5 dB"},
5609 { 5, "Apply priority reporting if the reported value is above -8.5 dB"},
5610 { 6, "Apply priority reporting if the reported value is above -5.5 dB"},
5611 { 7, "Never apply priority reporting"},
5612 { 0, NULL }
5615 static const value_string gsm_a_rr_lte_rsrp_reporting_threshold_vals[] = {
5616 { 0, "Apply priority reporting if the reported value is above -140 dBm"},
5617 { 1, "Apply priority reporting if the reported value is above -134 dBm"},
5618 { 2, "Apply priority reporting if the reported value is above -128 dBm"},
5619 { 3, "Apply priority reporting if the reported value is above -122 dBm"},
5620 { 4, "Apply priority reporting if the reported value is above -116 dBm"},
5621 { 5, "Apply priority reporting if the reported value is above -110 dBm"},
5622 { 6, "Apply priority reporting if the reported value is above -104 dBm"},
5623 { 7, "Never apply priority reporting"},
5624 { 0, NULL }
5627 static const value_string gsm_a_rr_lte_rsrq_reporting_threshold_vals[] = {
5628 { 0, "Apply priority reporting if the reported value is above -19.5 dB"},
5629 { 1, "Apply priority reporting if the reported value is above -16.5 dB"},
5630 { 2, "Apply priority reporting if the reported value is above -13.5 dB"},
5631 { 3, "Apply priority reporting if the reported value is above -10.5 dB"},
5632 { 4, "Apply priority reporting if the reported value is above -7.5 dB"},
5633 { 5, "Apply priority reporting if the reported value is above -4.5 dB"},
5634 { 6, "Apply priority reporting if the reported value is above -1.5 dB"},
5635 { 7, "Never apply priority reporting"},
5636 { 0, NULL }
5639 static const value_string gsm_a_rr_network_control_order_vals[] = {
5640 { 0, "NC0"},
5641 { 1, "NC1"},
5642 { 2, "NC2"},
5643 { 3, "NC0"},
5644 { 0, NULL }
5647 static const value_string gsm_a_rr_nc_non_drx_period_vals[] = {
5648 { 0, "No non-DRX mode after a measurement report has been sent"},
5649 { 1, "0,24 s"},
5650 { 2, "0,48 s"},
5651 { 3, "0.72 s"},
5652 { 4, "0.96 s"},
5653 { 5, "1.20 s"},
5654 { 6, "1.44 s"},
5655 { 7, "1.92 s"},
5656 { 0, NULL }
5659 static const value_string gsm_a_rr_nc_reporting_period_x_vals[] = {
5660 { 0, "0.48 s"},
5661 { 1, "0.96 s"},
5662 { 2, "1.92 s"},
5663 { 3, "3.84 s"},
5664 { 4, "7.68 s"},
5665 { 5, "15.36 s"},
5666 { 6, "30.72 s"},
5667 { 7, "61.44 s"},
5668 { 0, NULL }
5671 static const true_false_string gsm_a_rr_qsearch_c_initial_value = {
5672 "Always",
5673 "use Qsearch I"
5676 static const true_false_string gsm_a_rr_fdd_rep_quant_value = {
5677 "Ec/No",
5678 "RSCP"
5681 static const true_false_string gsm_a_rr_3g_search_prio_value = {
5682 "3G cells may be searched when BSIC decoding is required",
5683 "3G cells may not be searched when BSIC decoding is required"
5686 static const true_false_string gsm_a_rr_3g_ccn_active_value = {
5687 "CCN towards 3G cells is enabled in the cell",
5688 "CCN towards 3G cells is disabled in the cell"
5691 static int
5692 de_rr_si2quater_meas_info_utran_fdd_desc(tvbuff_t *tvb, proto_tree *tree, int bit_offset)
5694 proto_tree *subtree, *subtree2;
5695 proto_item *item, *item2;
5696 int curr_bit_offset, idx;
5697 int xdd_cell_info, wsize, nwi, jwi, w[64], i, iused, xdd_indic0;
5699 curr_bit_offset = bit_offset;
5701 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_UTRAN_FDD_DESC], &item,
5702 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_FDD_DESC]);
5703 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_bandwidth_fdd_present))
5705 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_bandwidth_fdd, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
5706 curr_bit_offset += 3;
5708 while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_repeated_umts_fdd_neighbour_cells))
5710 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_repeated_umts_fdd_neighbour_cells_earlier_version_bit_reserved, tvb, curr_bit_offset++, 1, ENC_NA);
5711 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_fdd_uarfcn, tvb, curr_bit_offset, 14, ENC_BIG_ENDIAN);
5712 curr_bit_offset += 14;
5713 xdd_indic0 = gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_fdd_cell_info_param_value0);
5714 idx = tvb_get_bits8(tvb,curr_bit_offset,5);
5715 proto_tree_add_uint(subtree, hf_gsm_a_rr_nr_of_fdd_cells, tvb, curr_bit_offset>>3, 1, idx);
5716 curr_bit_offset += 5;
5717 idx = convert_n_to_p[idx];
5718 subtree2 = proto_tree_add_subtree(subtree,tvb, curr_bit_offset>>3, (idx>>3)+1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_FDD_CELL_INFORMATION_FIELD], &item2,
5719 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_FDD_DESC]);
5720 proto_tree_add_bytes_format(subtree2, hf_gsm_a_rr_field_bit_long, tvb, curr_bit_offset>>3, (idx>>3)+1, NULL, "Field is %d bits long", idx);
5721 if (xdd_indic0)
5723 proto_tree_add_uint(subtree2, hf_gsm_a_rr_scrambling_code, tvb, curr_bit_offset>>3, 0, 0);
5724 proto_tree_add_uint(subtree2, hf_gsm_a_rr_diversity, tvb, curr_bit_offset>>3, 0, 0);
5726 if (idx)
5728 wsize = 10;
5729 nwi = 1;
5730 jwi = 0;
5731 i = 1;
5733 while (idx > 0)
5735 w[i] = tvb_get_bits(tvb, curr_bit_offset, wsize, ENC_BIG_ENDIAN);
5736 curr_bit_offset += wsize;
5737 idx -= wsize;
5738 if (w[i] == 0)
5740 idx = 0;
5741 break;
5743 if (++jwi == nwi)
5745 jwi = 0;
5746 nwi <<= 1;
5747 wsize--;
5749 i++;
5751 if (idx < 0)
5753 curr_bit_offset += idx;
5755 iused = i-1;
5757 for (i=1; i <= iused; i++)
5759 xdd_cell_info = f_k(i, w, 1024);
5760 proto_tree_add_uint(subtree2, hf_gsm_a_rr_scrambling_code, tvb, curr_bit_offset>>3, 0, xdd_cell_info & 0x01FF);
5761 proto_tree_add_uint(subtree2, hf_gsm_a_rr_diversity, tvb, curr_bit_offset>>3, 0, (xdd_cell_info >> 9) & 0x01);
5765 proto_item_set_len(item,((curr_bit_offset>>3) - (bit_offset>>3) + 1));
5767 return (curr_bit_offset - bit_offset);
5770 static int
5771 de_rr_si2quater_meas_info_utran_tdd_desc(tvbuff_t *tvb, proto_tree *tree, int bit_offset)
5773 proto_tree *subtree, *subtree2;
5774 proto_item *item;
5775 int curr_bit_offset, idx;
5776 int xdd_cell_info, wsize, nwi, jwi, w[64], i, iused, xdd_indic0;
5778 curr_bit_offset = bit_offset;
5780 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_UTRAN_TDD_DESC], &item,
5781 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_TDD_DESC]);
5782 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_bandwidth_tdd_present))
5784 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_bandwidth_tdd, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
5785 curr_bit_offset += 3;
5787 while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_repeated_umts_tdd_neighbour_cells))
5789 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_repeated_umts_tdd_neighbour_cells_earlier_version_bit_reserved, tvb, curr_bit_offset++, 1, ENC_NA);
5790 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_tdd_uarfcn, tvb, curr_bit_offset, 14, ENC_BIG_ENDIAN);
5791 curr_bit_offset += 14;
5792 xdd_indic0 = gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_tdd_cell_info_param_value0);
5793 idx = tvb_get_bits8(tvb,curr_bit_offset,5);
5794 proto_tree_add_uint(subtree, hf_gsm_a_rr_nr_of_tdd_cells, tvb, curr_bit_offset>>3, 1, idx);
5795 curr_bit_offset += 5;
5796 idx = convert_n_to_q[idx];
5797 subtree2 = proto_tree_add_subtree(subtree,tvb, curr_bit_offset>>3, (idx>>3)+1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_TDD_CELL_INFORMATION_FIELD], &item,
5798 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_TDD_DESC]);
5799 proto_tree_add_bytes_format(subtree2, hf_gsm_a_rr_field_bit_long, tvb, curr_bit_offset>>3, (idx>>3)+1, NULL, "Field is %d bits long", idx);
5800 if (xdd_indic0)
5802 proto_tree_add_uint(subtree2, hf_gsm_a_rr_cell_parameter, tvb, curr_bit_offset>>3, 0, 0);
5803 proto_tree_add_uint(subtree2, hf_gsm_a_rr_sync_case_tstd, tvb, curr_bit_offset>>3, 0, 0);
5804 proto_tree_add_uint(subtree2, hf_gsm_a_rr_diversity_tdd, tvb, curr_bit_offset>>3, 0, 0);
5806 if (idx)
5808 wsize = 9;
5809 nwi = 1;
5810 jwi = 0;
5811 i = 1;
5813 while (idx > 0)
5815 w[i] = tvb_get_bits(tvb, curr_bit_offset, wsize, ENC_BIG_ENDIAN);
5816 curr_bit_offset += wsize;
5817 idx -= wsize;
5818 if (w[i] == 0)
5820 idx = 0;
5821 break;
5823 if (++jwi == nwi)
5825 jwi = 0;
5826 nwi <<= 1;
5827 wsize--;
5829 i++;
5831 if (idx < 0)
5833 curr_bit_offset += idx;
5835 iused = i-1;
5837 for (i=1; i <= iused; i++)
5839 xdd_cell_info = f_k(i, w, 512);
5840 proto_tree_add_uint(subtree2, hf_gsm_a_rr_cell_parameter, tvb, curr_bit_offset>>3, 0, xdd_cell_info & 0x07F);
5841 proto_tree_add_uint(subtree2, hf_gsm_a_rr_sync_case_tstd, tvb, curr_bit_offset>>3, 0, (xdd_cell_info >> 7) & 0x01);
5842 proto_tree_add_uint(subtree2, hf_gsm_a_rr_diversity_tdd, tvb, curr_bit_offset>>3, 0, (xdd_cell_info >> 8) & 0x01);
5846 proto_item_set_len(item,((curr_bit_offset>>3) - (bit_offset>>3) + 1));
5848 return (curr_bit_offset - bit_offset);
5851 static int
5852 de_rr_rtd_desc(tvbuff_t *tvb, proto_tree *tree, int bit_offset, rr_rest_octets_elem_idx_t id)
5854 proto_tree *subtree;
5855 proto_item *item;
5856 int curr_bit_offset, idx;
5857 uint8_t value;
5859 curr_bit_offset = bit_offset;
5861 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[id], &item,
5862 gsm_rr_rest_octets_elem_strings[id]);
5863 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_rtd6))
5865 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_ba_index_start_rtd_present))
5867 idx = tvb_get_bits8(tvb,curr_bit_offset,5);
5868 proto_tree_add_uint(subtree, hf_gsm_a_rr_ba_index_start_rtd, tvb, curr_bit_offset>>3, 1, idx);
5869 curr_bit_offset += 5;
5871 else
5872 idx = 0;
5874 value = gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_rtd);
5875 while (value == 0)
5876 { /* all the RTDs on the first frequency */
5877 proto_tree_add_uint_format(subtree, hf_gsm_a_rr_rtd_index, tvb, curr_bit_offset>>3, 1, tvb_get_bits8(tvb,curr_bit_offset,6),
5878 "RTD index %d: %d TDMA frame(s) modulo 51 TDMA frames", idx, tvb_get_bits8(tvb,curr_bit_offset,6));
5879 curr_bit_offset += 6;
5880 value = gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_additional_rtd);
5883 value = gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_additional_rtd_struct);
5884 while(value == 0)
5885 { /* all other frequencies */
5886 idx += 1;
5887 value = gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_rtd);
5888 while (value == 0)
5889 { /* all the RTDs on the first frequency */
5890 proto_tree_add_uint_format(subtree, hf_gsm_a_rr_rtd_index, tvb, curr_bit_offset>>3, 1, tvb_get_bits8(tvb,curr_bit_offset,6),
5891 "RTD index %d: %d TDMA frame(s) modulo 51 TDMA frames", idx, tvb_get_bits8(tvb,curr_bit_offset,6));
5892 curr_bit_offset += 6;
5893 value = gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_additional_rtd);
5895 value = gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_additional_rtd_struct);
5898 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_rtd12))
5900 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_rtd12))
5902 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_ba_index_start_rtd_present))
5904 idx = tvb_get_bits8(tvb,curr_bit_offset,5);
5905 proto_tree_add_uint(subtree, hf_gsm_a_rr_ba_index_start_rtd, tvb, curr_bit_offset>>3, 1, idx);
5906 curr_bit_offset += 5;
5908 else
5909 idx = 0;
5911 while (0 == gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_repeated_rtd))
5912 { /* all the RTDs on the first frequency */
5913 proto_tree_add_uint_format(subtree, hf_gsm_a_rr_rtd_index, tvb, curr_bit_offset>>3, 2, tvb_get_bits16(tvb,curr_bit_offset,12,ENC_BIG_ENDIAN),
5914 "RTD index %d: %d/64 TDMA frame(s) modulo 51 TDMA frames", idx, tvb_get_bits16(tvb,curr_bit_offset,12,ENC_BIG_ENDIAN));
5915 curr_bit_offset += 12;
5918 while(0 == gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_repeated_rtd_frequency))
5919 { /* all other frequencies */
5920 idx += 1;
5921 while (0 == gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_repeated_rtd))
5922 { /* all the RTDs on the first frequency */
5923 proto_tree_add_uint_format(subtree, hf_gsm_a_rr_rtd_index, tvb, curr_bit_offset>>3, 2, tvb_get_bits16(tvb,curr_bit_offset,12,ENC_BIG_ENDIAN),
5924 "RTD index %d: %d/64 TDMA frame(s) modulo 51 TDMA frames", idx, tvb_get_bits16(tvb,curr_bit_offset,12,ENC_BIG_ENDIAN));
5925 curr_bit_offset += 12;
5930 proto_item_set_len(item,((curr_bit_offset>>3) - (bit_offset>>3) + 1));
5932 return (curr_bit_offset - bit_offset);
5935 static int
5936 de_rr_bsic_desc(tvbuff_t *tvb, proto_tree *tree, int bit_offset, rr_rest_octets_elem_idx_t id)
5938 proto_tree *subtree;
5939 proto_item *item;
5940 int curr_bit_offset, idx;
5942 curr_bit_offset = bit_offset;
5943 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[id], &item, gsm_rr_rest_octets_elem_strings[id]);
5944 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_ba_index_start_bsic_present))
5946 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_ba_index_start_bsic, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
5947 curr_bit_offset += 5;
5949 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_bsic, tvb, curr_bit_offset, 6, ENC_BIG_ENDIAN);
5950 curr_bit_offset += 6;
5951 idx = tvb_get_bits8(tvb,curr_bit_offset,7);
5952 proto_tree_add_uint(subtree, hf_gsm_a_rr_number_remaining_bsic, tvb, curr_bit_offset>>3, 1, idx);
5953 curr_bit_offset += 7;
5954 while (idx)
5956 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_frequency_scrolling, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
5957 curr_bit_offset += 1;
5958 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_bsic, tvb, curr_bit_offset, 6, ENC_BIG_ENDIAN);
5959 curr_bit_offset += 6;
5960 idx -= 1;
5962 proto_item_set_len(item,((curr_bit_offset>>3) - (bit_offset>>3) + 1));
5964 return curr_bit_offset - bit_offset;
5967 static int
5968 de_rr_report_priority_desc(tvbuff_t *tvb, proto_tree *tree, int bit_offset, rr_rest_octets_elem_idx_t id)
5970 proto_tree *subtree;
5971 proto_item *item;
5972 int curr_bit_offset, idx;
5974 curr_bit_offset = bit_offset;
5976 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[id], &item,
5977 gsm_rr_rest_octets_elem_strings[id]);
5978 idx = tvb_get_bits8(tvb,curr_bit_offset,7);
5979 proto_tree_add_uint(subtree, hf_gsm_a_rr_number_cells, tvb, curr_bit_offset>>3, 1, idx);
5980 curr_bit_offset += 7;
5981 while (idx)
5983 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_rep_priority, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
5984 curr_bit_offset += 1;
5985 idx -= 1;
5987 proto_item_set_len(item,((curr_bit_offset>>3) - (bit_offset>>3) + 1));
5989 return curr_bit_offset - bit_offset;
5992 static int
5993 de_rr_meas_param_desc(tvbuff_t *tvb, proto_tree *tree, int bit_offset, rr_rest_octets_elem_idx_t id)
5995 proto_tree *subtree;
5996 proto_item *item;
5997 int curr_bit_offset;
5999 curr_bit_offset = bit_offset;
6000 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[id], &item, gsm_rr_rest_octets_elem_strings[id]);
6001 if (id == DE_RR_REST_OCTETS_GPRS_MEAS_PARAM_DESC)
6003 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_report_type, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
6004 curr_bit_offset += 1;
6005 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_reporting_rate, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
6006 curr_bit_offset +=1;
6007 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_invalid_bsic_reporting, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
6008 curr_bit_offset +=1;
6010 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_multiband_reporting_present))
6012 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_multiband_reporting, tvb, curr_bit_offset, 2, ENC_BIG_ENDIAN);
6013 curr_bit_offset += 2;
6015 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_serving_reporting_present))
6017 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_serving_band_reporting, tvb, curr_bit_offset, 2, ENC_BIG_ENDIAN);
6018 curr_bit_offset += 2;
6020 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_scale_ord, tvb, curr_bit_offset, 2, ENC_BIG_ENDIAN);
6021 curr_bit_offset += 2;
6022 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_900_reporting_present))
6024 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_900_reporting_offset, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6025 curr_bit_offset += 3;
6026 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_900_reporting_threshold, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6027 curr_bit_offset += 3;
6029 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_1800_reporting_present))
6031 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_1800_reporting_offset, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6032 curr_bit_offset += 3;
6033 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_1800_reporting_threshold, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6034 curr_bit_offset += 3;
6036 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_400_reporting_present))
6038 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_400_reporting_offset, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6039 curr_bit_offset += 3;
6040 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_400_reporting_threshold, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6041 curr_bit_offset += 3;
6043 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_1900_reporting_present))
6045 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_1900_reporting_offset, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6046 curr_bit_offset += 3;
6047 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_1900_reporting_threshold, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6048 curr_bit_offset += 3;
6050 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_850_reporting_present))
6052 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_850_reporting_offset, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6053 curr_bit_offset += 3;
6054 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_850_reporting_threshold, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6055 curr_bit_offset += 3;
6057 proto_item_set_len(item,((curr_bit_offset>>3) - (bit_offset>>3) + 1));
6059 return curr_bit_offset - bit_offset;
6062 static int
6063 de_rr_3g_add_meas_param_desc2(tvbuff_t *tvb, proto_tree *tree, int bit_offset)
6065 proto_tree *subtree;
6066 proto_item *item;
6067 int curr_bit_offset;
6069 curr_bit_offset = bit_offset;
6070 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_ADD_MEAS_PARAM_DESC2], &item,
6071 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_ADD_MEAS_PARAM_DESC2]);
6072 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_fdd_reporting_threshold_2_present))
6074 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_fdd_reporting_threshold_2, tvb, curr_bit_offset, 6, ENC_BIG_ENDIAN);
6075 curr_bit_offset += 6;
6077 proto_item_set_len(item,((curr_bit_offset>>3) - (bit_offset>>3) + 1));
6079 return curr_bit_offset - bit_offset;
6082 /* Additions in Rel-8 */
6083 static const true_false_string priority_utran_start = {
6084 "This is the first instance of the message",
6085 "This is not the first instance of the message"
6088 static const true_false_string priority_utran_stop = {
6089 "This is the last instance of the message",
6090 "This is not the last instance of the message"
6093 static const true_false_string eutran_ccn_active = {
6094 "CCN towards E-UTRAN cells is enabled in the cell",
6095 "The broadcast E-UTRAN_CCN_ACTIVE parameter shall apply if applicable. Otherwise, CCN towards E-UTRAN cells is disabled in the cell"
6098 #if 0
6099 static const true_false_string eutran_rep_quant = {
6100 "RSRQ",
6101 "RSRP"
6103 #endif
6105 static const value_string gsm_a_rr_pcid_psc_pattern_length[] = {
6106 { 0, "1"},
6107 { 1, "2"},
6108 { 2, "3"},
6109 { 3, "4"},
6110 { 4, "5"},
6111 { 5, "6"},
6112 { 6, "7"},
6113 { 7, "8"},
6114 { 0, NULL }
6117 static const value_string gsm_a_rr_eutran_measurement_bandwidth[] = {
6118 { 0, "NRB = 6"},
6119 { 1, "NRB = 15"},
6120 { 2, "NRB = 25"},
6121 { 3, "NRB = 50"},
6122 { 4, "NRB = 75"},
6123 { 5, "NRB = 100"},
6124 { 6, "Reserved for future use"},
6125 { 7, "Reserved for future use"},
6126 { 0, NULL }
6129 static const value_string gsm_a_rr_serving_cell_thresh_gsm_low[] = {
6130 { 0, "0 dB"},
6131 { 1, "2 dB"},
6132 { 2, "4 dB"},
6133 { 3, "6 dB"},
6134 { 4, "8 dB"},
6135 { 5, "10 dB"},
6136 { 6, "12 dB"},
6137 { 7, "14 dB"},
6138 { 8, "16 dB"},
6139 { 9, "18 dB"},
6140 {10, "20 dB"},
6141 {11, "22 dB"},
6142 {12, "24 dB"},
6143 {13, "26 dB"},
6144 {14, "28 dB"},
6145 {15, "Always allowed"},
6146 { 0, NULL }
6149 static const value_string gsm_a_rr_serving_cell_thresh_priority_search[] = {
6150 { 0, "-98 dBm"},
6151 { 1, "-95 dBm"},
6152 { 2, "-92 dBm"},
6153 { 3, "-89 dBm"},
6154 { 4, "-86 dBm"},
6155 { 5, "-83 dBm"},
6156 { 6, "-80 dBm"},
6157 { 7, "-77 dBm"},
6158 { 8, "-74 dBm"},
6159 { 9, "-71 dBm"},
6160 {10, "-68 dBm"},
6161 {11, "-65 dBm"},
6162 {12, "-62 dBm"},
6163 {13, "-59 dBm"},
6164 {14, "-56 dBm"},
6165 {15, "Always search"},
6166 { 0, NULL }
6169 static const value_string gsm_a_rr_utran_qrxlevmin[] = {
6170 { 0, "-119 dBm"},
6171 { 1, "-117 dBm"},
6172 { 2, "-115 dBm"},
6173 { 3, "-113 dBm"},
6174 { 4, "-111 dBm"},
6175 { 5, "-109 dBm"},
6176 { 6, "-107 dBm"},
6177 { 7, "-105 dBm"},
6178 { 8, "-103 dBm"},
6179 { 9, "-101 dBm"},
6180 {10, "-99 dBm"},
6181 {11, "-97 dBm"},
6182 {12, "-95 dBm"},
6183 {13, "-93 dBm"},
6184 {14, "-91 dBm"},
6185 {15, "-89 dBm"},
6186 {16, "-87 dBm"},
6187 {17, "-85 dBm"},
6188 {18, "-83 dBm"},
6189 {19, "-81 dBm"},
6190 {20, "-79 dBm"},
6191 {21, "-77 dBm"},
6192 {22, "-75 dBm"},
6193 {23, "-73 dBm"},
6194 {24, "-71 dBm"},
6195 {25, "-69 dBm"},
6196 {26, "-67 dBm"},
6197 {27, "-65 dBm"},
6198 {28, "-63 dBm"},
6199 {29, "-61 dBm"},
6200 {30, "-59 dBm"},
6201 {31, "-57 dBm"},
6202 { 0, NULL }
6205 static const value_string gsm_a_rr_thresh_utran_eutran_high_low[] = {
6206 { 0, "0 dB"},
6207 { 1, "2 dB"},
6208 { 2, "4 dB"},
6209 { 3, "6 dB"},
6210 { 4, "8 dB"},
6211 { 5, "10 dB"},
6212 { 6, "12 dB"},
6213 { 7, "14 dB"},
6214 { 8, "16 dB"},
6215 { 9, "18 dB"},
6216 {10, "20 dB"},
6217 {11, "22 dB"},
6218 {12, "24 dB"},
6219 {13, "26 dB"},
6220 {14, "28 dB"},
6221 {15, "30 dB"},
6222 {16, "32 dB"},
6223 {17, "34 dB"},
6224 {18, "36 dB"},
6225 {19, "38 dB"},
6226 {20, "40 dB"},
6227 {21, "42 dB"},
6228 {22, "44 dB"},
6229 {23, "46 dB"},
6230 {24, "48 dB"},
6231 {25, "50 dB"},
6232 {26, "52 dB"},
6233 {27, "54 dB"},
6234 {28, "56 dB"},
6235 {29, "58 dB"},
6236 {30, "60 dB"},
6237 {31, "62 dB"},
6238 { 0, NULL }
6241 static const value_string gsm_a_rr_eutran_qrxlevmin[] = {
6242 { 0, "-140 dBm"},
6243 { 1, "-138 dBm"},
6244 { 2, "-136 dBm"},
6245 { 3, "-134 dBm"},
6246 { 4, "-132 dBm"},
6247 { 5, "-130 dBm"},
6248 { 6, "-128 dBm"},
6249 { 7, "-126 dBm"},
6250 { 8, "-124 dBm"},
6251 { 9, "-122 dBm"},
6252 {10, "-120 dBm"},
6253 {11, "-118 dBm"},
6254 {12, "-116 dBm"},
6255 {13, "-114 dBm"},
6256 {14, "-112 dBm"},
6257 {15, "-110 dBm"},
6258 {16, "-108 dBm"},
6259 {17, "-106 dBm"},
6260 {18, "-104 dBm"},
6261 {19, "-102 dBm"},
6262 {20, "-100 dBm"},
6263 {21, "-98 dBm"},
6264 {22, "-96 dBm"},
6265 {23, "-94 dBm"},
6266 {24, "-92 dBm"},
6267 {25, "-90 dBm"},
6268 {26, "-88 dBm"},
6269 {27, "-86 dBm"},
6270 {28, "-84 dBm"},
6271 {29, "-82 dBm"},
6272 {30, "-80 dBm"},
6273 {31, "-78 dBm"},
6274 { 0, NULL }
6277 static const value_string gsm_a_rr_serving_cell_priority_param_h_prio[] = {
6278 { 0, "disabled"},
6279 { 1, "5 dB"},
6280 { 2, "4 dB"},
6281 { 3, "3 dB"},
6282 { 0, NULL }
6285 static const value_string gsm_a_rr_serving_cell_priority_param_t_reselection[] = {
6286 { 0, "5 s"},
6287 { 1, "10 s"},
6288 { 2, "15 s"},
6289 { 3, "20 s"},
6290 { 0, NULL }
6293 static const value_string gsm_a_rr_qsearch_c_eutran_initial[] = {
6294 { 0, "search if signal is below -98 dBm"},
6295 { 1, "search if signal is below -94 dBm"},
6296 { 2, "search if signal is below -90 dBm"},
6297 { 3, "search if signal is below -86 dBm"},
6298 { 4, "search if signal is below -82 dBm"},
6299 { 5, "search if signal is below -78 dBm"},
6300 { 6, "search if signal is below -74 dBm"},
6301 { 7, "always search"},
6302 { 8, "search is signal is above -78 dBm"},
6303 { 9, "search is signal is above -74 dBm"},
6304 {10, "search is signal is above -70 dBm"},
6305 {11, "search is signal is above -66 dBm"},
6306 {12, "search is signal is above -62 dBm"},
6307 {13, "search is signal is above -58 dBm"},
6308 {14, "search is signal is above -54 dBm"},
6309 {15, "never search"},
6310 { 0, NULL }
6313 static const true_false_string gsm_a_rr_pcid_pattern_sense = {
6314 "The group of identified cells are the one not belonging to the PCID_BITMAP_GROUP",
6315 "The group of identified cells are the one identified by the PCID_BITMAP_GROUP"
6318 static const true_false_string measurement_control_utran = {
6319 "Frequency-specific search enabled: use Qsearch_C_E-UTRAN if received, otherwise use Qsearch_C_EUTRAN_Initial",
6320 "Frequency-specific search enabled: Never search"
6323 static const true_false_string measurement_control_eutran = {
6324 "Frequency-specific search enabled: use Qsearch_C if received, otherwise use Qsearch_C_Initial",
6325 "Frequency-specific search enabled: Never search"
6328 static int
6329 de_rr_3g_priority_param_desc(tvbuff_t *tvb, proto_tree *tree, int bit_offset)
6331 proto_tree *subtree;
6332 proto_item *item;
6333 int curr_bit_offset;
6335 curr_bit_offset = bit_offset;
6336 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_PRIORITY_PARAM_DESC], &item,
6337 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_PRIORITY_PARAM_DESC]);
6339 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_3g_priority_param_desc_utran_start, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
6340 curr_bit_offset += 1;
6341 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_3g_priority_param_desc_utran_stop, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
6342 curr_bit_offset += 1;
6344 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_default_utran_priority_parameters))
6346 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_3g_priority_param_desc_default_utran_prio, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6347 curr_bit_offset += 3;
6348 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_3g_priority_param_desc_default_threshold_utran, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
6349 curr_bit_offset += 5;
6350 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_3g_priority_param_desc_default_utran_qrxlevmin, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
6351 curr_bit_offset += 5;
6353 /* Repeated UTRAN Priority Parameters */
6354 while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_repeated_utran_priority_parameters))
6356 proto_tree *subtree_rep_utran_prio;
6357 proto_item *item_rep_utran_prio;
6358 int rep_utran_prio_bit_offset = curr_bit_offset;
6360 subtree_rep_utran_prio = proto_tree_add_subtree(subtree, tvb, curr_bit_offset>>3, 1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_UTRAN_PRIO_PARAM], &item_rep_utran_prio,
6361 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_PRIO_PARAM]);
6363 while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_utran_frequency_index_present))
6365 proto_tree_add_bits_item(subtree_rep_utran_prio, hf_gsm_a_rr_utran_frequency_index, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
6366 curr_bit_offset += 5;
6369 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_utran_priority_present))
6371 proto_tree_add_bits_item(subtree_rep_utran_prio, hf_gsm_a_rr_utran_priority, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6372 curr_bit_offset += 3;
6374 proto_tree_add_bits_item(subtree_rep_utran_prio, hf_gsm_a_rr_thresh_utran_high, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
6375 curr_bit_offset += 5;
6377 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_thresh_utran_low_present))
6379 proto_tree_add_bits_item(subtree_rep_utran_prio, hf_gsm_a_rr_thresh_utran_low, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
6380 curr_bit_offset += 5;
6383 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_utran_qrxlevmin_present))
6385 proto_tree_add_bits_item(subtree_rep_utran_prio, hf_gsm_a_rr_utran_qrxlevmin, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
6386 curr_bit_offset += 5;
6388 proto_item_set_len(item_rep_utran_prio, (curr_bit_offset>>3) - (rep_utran_prio_bit_offset>>3)+1);
6390 proto_item_set_len(item,((curr_bit_offset>>3) - (bit_offset>>3) + 1));
6392 return curr_bit_offset - bit_offset;
6395 static int
6396 de_rr_eutran_neighbour_cells(tvbuff_t *tvb, proto_tree *tree, int bit_offset)
6398 proto_tree *subtree;
6399 proto_item *item;
6400 int curr_bit_offset;
6402 curr_bit_offset = bit_offset;
6403 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EUTRAN_NEIGHBOUR_CELLS], &item,
6404 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EUTRAN_NEIGHBOUR_CELLS]);
6406 while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_eutran_earfcn_present))
6408 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_earfcn, tvb, curr_bit_offset, 16, ENC_BIG_ENDIAN);
6409 curr_bit_offset += 16;
6411 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_eutran_measurement_bandwidth_present))
6413 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_measurement_bandwidth, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6414 curr_bit_offset += 3;
6418 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_eutran_priority_present))
6420 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_priority, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6421 curr_bit_offset += 3;
6423 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_thresh_eutran_high, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
6424 curr_bit_offset += 5;
6426 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_thresh_eutran_low_present))
6428 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_thresh_eutran_low, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
6429 curr_bit_offset += 5;
6432 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_eutran_qrxlevmin_present))
6434 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_qrxlevmin, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
6435 curr_bit_offset += 5;
6437 proto_item_set_len(item,((curr_bit_offset>>3) - (bit_offset>>3) + 1));
6439 return curr_bit_offset - bit_offset;
6442 static int
6443 de_rr_eutran_neighbour_cells_mi(tvbuff_t *tvb, proto_tree *tree, int bit_offset)
6445 proto_tree *subtree;
6446 proto_item *item;
6447 int curr_bit_offset;
6449 curr_bit_offset = bit_offset;
6450 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EUTRAN_NEIGHBOUR_CELLS], &item,
6451 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EUTRAN_NEIGHBOUR_CELLS]);
6453 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_earfcn, tvb, curr_bit_offset, 16, ENC_BIG_ENDIAN);
6454 curr_bit_offset += 16;
6455 while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_repeated_earfcn))
6457 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_earfcn, tvb, curr_bit_offset, 16, ENC_BIG_ENDIAN);
6458 curr_bit_offset += 16;
6460 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_eutran_measurement_bandwidth_present))
6462 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_measurement_bandwidth, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6463 curr_bit_offset += 3;
6465 proto_item_set_len(item,((curr_bit_offset>>3) - (bit_offset>>3) + 1));
6467 return curr_bit_offset - bit_offset;
6470 static int
6471 de_rr_eutran_pcid(tvbuff_t *tvb, proto_tree *tree, int bit_offset)
6473 int curr_bit_offset = bit_offset;
6474 proto_item *item;
6476 while (gsm_rr_csn_flag(tvb, tree, curr_bit_offset++, hf_gsm_a_rr_repeated_pcid))
6478 proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_pcid, tvb, curr_bit_offset, 9, ENC_BIG_ENDIAN);
6479 curr_bit_offset += 9;
6482 if (gsm_rr_csn_flag(tvb, tree, curr_bit_offset++, hf_gsm_a_rr_eutran_pcid_bitmap_group_present))
6484 int i;
6485 uint8_t bitmap = tvb_get_bits8(tvb,curr_bit_offset,6);
6486 item = proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_pcid_bitmap_group, tvb, curr_bit_offset, 6, ENC_BIG_ENDIAN);
6487 if (bitmap > 0)
6489 proto_item_append_text(item, ": Cells IDs addressed by the bitmap:");
6491 for (i = 0; i < 6; i++)
6493 if ((1 << i) & bitmap)
6495 if ( i != 0)
6497 proto_item_append_text(item, ",");
6499 proto_item_append_text(item, " %d to %d",i*84, (i+1)*84 - 1);
6502 curr_bit_offset += 6;
6504 while (gsm_rr_csn_flag(tvb, tree, curr_bit_offset++, hf_gsm_a_rr_pcid_pattern_present))
6506 int pcid_pattern_length;
6507 int pcid_pattern;
6508 int pattern_lower_bound, pattern_upper_bound;
6509 int i;
6511 pcid_pattern_length = tvb_get_bits8(tvb,curr_bit_offset,3) + 1;
6512 proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_pcid_pattern_length, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6513 curr_bit_offset += 3;
6514 pcid_pattern = tvb_get_bits8(tvb,curr_bit_offset, pcid_pattern_length);
6516 item = proto_tree_add_uint(tree, hf_gsm_a_rr_pcid_pattern, tvb, curr_bit_offset>>3, 1, pcid_pattern);
6518 pattern_lower_bound = pcid_pattern << (9 - pcid_pattern_length);
6519 pattern_upper_bound = pattern_lower_bound;
6520 for (i = 0; i < (9-pcid_pattern_length); i++)
6522 pattern_upper_bound |= 1 << i;
6524 proto_item_append_text(item, ": Cells IDs addressed by the pattern: %d to %d", pattern_lower_bound, pattern_upper_bound);
6526 curr_bit_offset += pcid_pattern_length;
6527 proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_pcid_pattern_sense, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
6528 curr_bit_offset += 1;
6531 return curr_bit_offset - bit_offset;
6534 static int
6535 de_rr_eutran_not_allowed_cells(tvbuff_t *tvb, proto_tree *tree, int bit_offset)
6537 proto_tree *subtree;
6538 proto_item *item;
6539 int curr_bit_offset;
6541 curr_bit_offset = bit_offset;
6542 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EUTRAN_NOT_ALLOWED_CELLS], &item,
6543 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EUTRAN_NOT_ALLOWED_CELLS]);
6545 /* dissect PCID group */
6546 curr_bit_offset += de_rr_eutran_pcid(tvb, subtree, curr_bit_offset);
6548 while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_repeated_eutran_frequency_index))
6550 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_frequency_index, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6551 curr_bit_offset += 3;
6553 proto_item_set_len(item,((curr_bit_offset>>3) - (bit_offset>>3) + 1));
6555 return curr_bit_offset - bit_offset;
6558 static int
6559 de_rr_eutran_pcid_to_ta_mapping(tvbuff_t *tvb, proto_tree *tree, int bit_offset)
6561 proto_tree *subtree;
6562 proto_item *item;
6563 int curr_bit_offset;
6565 curr_bit_offset = bit_offset;
6566 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EUTRAN_PCID_TO_TA_MAPPING], &item,
6567 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EUTRAN_PCID_TO_TA_MAPPING]);
6569 while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_repeating_pcid_group))
6571 /* dissect PCID group */
6572 curr_bit_offset += de_rr_eutran_pcid(tvb, subtree, curr_bit_offset);
6574 proto_item_set_len(item,((curr_bit_offset>>3) - (bit_offset>>3) + 1));
6576 return curr_bit_offset - bit_offset;
6579 static int
6580 de_rr_eutran_measurement_param_desc(tvbuff_t *tvb, proto_tree *tree, int bit_offset)
6582 int curr_bit_offset;
6583 proto_item *item;
6584 uint8_t rep_quant, rep_thresh;
6586 curr_bit_offset = bit_offset;
6588 /* E-UTRAN Measurement Parameters Description */
6589 proto_tree_add_bits_item(tree, hf_gsm_a_rr_qsearch_c_eutran_initial, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
6590 curr_bit_offset += 4;
6591 rep_quant = gsm_rr_csn_flag(tvb, tree, curr_bit_offset, hf_gsm_a_rr_eutran_reporting_quantity);
6592 curr_bit_offset += 1;
6593 proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_multirat_reporting, tvb, curr_bit_offset, 2, ENC_BIG_ENDIAN);
6594 curr_bit_offset += 2;
6597 if (!gsm_rr_csn_flag(tvb, tree, curr_bit_offset++, hf_gsm_a_rr_eutran_reporting))
6599 if (gsm_rr_csn_flag(tvb, tree, curr_bit_offset++, hf_gsm_a_rr_eutran_fdd_reporting_present))
6601 if (rep_quant == 0)
6603 proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_fdd_reporting_threshold_rsrp, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6605 else
6607 proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_fdd_reporting_threshold_rsrq, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6609 curr_bit_offset += 3;
6611 if (gsm_rr_csn_flag(tvb, tree, curr_bit_offset++, hf_gsm_a_rr_eutran_fdd_reporting_threshold_2_present))
6613 item = proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_fdd_reporting_threshold_2, tvb, curr_bit_offset, 6, ENC_BIG_ENDIAN);
6614 rep_thresh = tvb_get_bits8(tvb,curr_bit_offset, 6);
6615 if (rep_quant == 0)
6617 proto_item_append_text(item, " (%.1f dB)", (float)rep_thresh/2 - 19.5);
6619 else
6621 proto_item_append_text(item, " (%d dBm)", rep_thresh - 140);
6623 curr_bit_offset += 6;
6625 if (gsm_rr_csn_flag(tvb, tree, curr_bit_offset++, hf_gsm_a_rr_eutran_fdd_reporting_offset_present))
6627 proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_fdd_reporting_offset, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6629 curr_bit_offset += 3;
6633 if (gsm_rr_csn_flag(tvb, tree, curr_bit_offset++, hf_gsm_a_rr_eutran_tdd_reporting_present))
6635 if (rep_quant == 0)
6637 proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_tdd_reporting_threshold_rsrp, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6639 else
6641 proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_tdd_reporting_threshold_rsrq, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6643 curr_bit_offset += 3;
6645 if (gsm_rr_csn_flag(tvb, tree, curr_bit_offset++, hf_gsm_a_rr_eutran_tdd_reporting_threshold_2_present))
6647 item = proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_tdd_reporting_threshold_2, tvb, curr_bit_offset, 6, ENC_BIG_ENDIAN);
6648 rep_thresh = tvb_get_bits8(tvb,curr_bit_offset, 6);
6649 if (rep_quant == 0)
6651 proto_item_append_text(item, " (%.1f dB)", (float)rep_thresh/2 - 19.5);
6653 else
6655 proto_item_append_text(item, " (%d dBm)", rep_thresh - 140);
6657 curr_bit_offset += 6;
6659 if (gsm_rr_csn_flag(tvb, tree, curr_bit_offset++, hf_gsm_a_rr_eutran_tdd_reporting_offset_present))
6661 proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_tdd_reporting_offset, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6663 curr_bit_offset += 3;
6667 else
6669 if (gsm_rr_csn_flag(tvb, tree, curr_bit_offset++, hf_gsm_a_rr_eutran_fdd_reporting_threshold))
6671 item = proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_fdd_measurement_report_offset, tvb, curr_bit_offset, 6, ENC_BIG_ENDIAN);
6672 rep_thresh = tvb_get_bits8(tvb,curr_bit_offset, 6);
6673 if (rep_quant == 0)
6675 proto_item_append_text(item, " (%d dBm)", rep_thresh - 140);
6677 else
6679 proto_item_append_text(item, " (%.1f dB)", (float)rep_thresh/2 - 19.5);
6681 curr_bit_offset += 6;
6683 if (gsm_rr_csn_flag(tvb, tree, curr_bit_offset++, hf_gsm_a_rr_eutran_fdd_reporting_threshold_2_present))
6685 item = proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_fdd_reporting_threshold_2, tvb, curr_bit_offset, 6, ENC_BIG_ENDIAN);
6686 rep_thresh = tvb_get_bits8(tvb,curr_bit_offset, 6);
6687 if (rep_quant == 0)
6689 proto_item_append_text(item, " (%.1f dB)", (float)rep_thresh/2 - 19.5);
6691 else
6693 proto_item_append_text(item, " (%d dBm)", rep_thresh - 140);
6695 curr_bit_offset += 6;
6697 if (gsm_rr_csn_flag(tvb, tree, curr_bit_offset++, hf_gsm_a_rr_eutran_fdd_reporting_offset_present))
6699 proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_fdd_reporting_offset, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6700 curr_bit_offset += 3;
6704 if (gsm_rr_csn_flag(tvb, tree, curr_bit_offset++, hf_gsm_a_rr_eutran_tdd_measurement_report_offset_present))
6706 item = proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_tdd_measurement_report_offset, tvb, curr_bit_offset, 6, ENC_BIG_ENDIAN);
6707 rep_thresh = tvb_get_bits8(tvb,curr_bit_offset, 6);
6708 if (rep_quant == 0)
6710 proto_item_append_text(item, " (%d dBm)", rep_thresh - 140);
6712 else
6714 proto_item_append_text(item, " (%.1f dB)", (float)rep_thresh/2 - 19.5);
6716 curr_bit_offset += 6;
6718 if (gsm_rr_csn_flag(tvb, tree, curr_bit_offset++, hf_gsm_a_rr_eutran_tdd_reporting_threshold_2_present))
6720 item = proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_tdd_reporting_threshold_2, tvb, curr_bit_offset, 6, ENC_BIG_ENDIAN);
6721 rep_thresh = tvb_get_bits8(tvb,curr_bit_offset, 6);
6722 if (rep_quant == 0)
6724 proto_item_append_text(item, " (%.1f dB)", (float)rep_thresh/2 - 19.5);
6726 else
6728 proto_item_append_text(item, " (%d dBm)", rep_thresh - 140);
6730 curr_bit_offset += 6;
6732 if (gsm_rr_csn_flag(tvb, tree, curr_bit_offset++, hf_gsm_a_rr_eutran_tdd_reporting_offset_present))
6734 proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_tdd_reporting_offset, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6735 curr_bit_offset += 3;
6738 item = proto_tree_add_bits_item(tree, hf_gsm_a_rr_reporting_granularity, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
6739 if (rep_quant == 0)
6741 proto_item_append_text(item, " (%d dB step)", 2 + tvb_get_bits8(tvb,curr_bit_offset,1));
6743 else
6745 proto_item_append_text(item, " (%d dB step)", 1 + tvb_get_bits8(tvb,curr_bit_offset,1));
6747 curr_bit_offset += 1;
6750 return curr_bit_offset - bit_offset;
6753 static int
6754 de_rr_eutran_param_desc(tvbuff_t *tvb, proto_tree *tree, int bit_offset)
6756 proto_tree *subtree;
6757 proto_item *item;
6758 int curr_bit_offset;
6759 uint8_t rep_quant = 0, rep_thresh = 0;
6761 curr_bit_offset = bit_offset;
6762 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EUTRAN_PARAM_DESC], &item,
6763 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EUTRAN_PARAM_DESC]);
6765 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_ccn_active, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
6766 curr_bit_offset += 1;
6767 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_start, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
6768 curr_bit_offset += 1;
6769 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_stop, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
6770 curr_bit_offset += 1;
6772 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_eutran_measurement_parameters_description))
6774 /* E-UTRAN Measurement Parameters Description */
6775 curr_bit_offset += de_rr_eutran_measurement_param_desc(tvb, subtree, curr_bit_offset);
6778 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_gprs_eutran_measurement_parameters_description))
6780 /* GPRS E-UTRAN Measurement Parameters Description */
6781 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_qsearch_p_eutran, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
6782 curr_bit_offset += 4;
6783 rep_quant = gsm_rr_csn_flag(tvb, subtree, curr_bit_offset, hf_gsm_a_rr_eutran_reporting_quantity);
6784 curr_bit_offset++;
6785 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_multirat_reporting, tvb, curr_bit_offset, 2, ENC_BIG_ENDIAN);
6786 curr_bit_offset += 2;
6788 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_eutran_fdd_reporting))
6790 if (rep_quant == 0)
6792 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_fdd_reporting_threshold_rsrp, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6794 else
6796 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_fdd_reporting_threshold_rsrq, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6798 curr_bit_offset += 3;
6800 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_eutran_fdd_reporting_threshold_2_present))
6802 item = proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_fdd_reporting_threshold_2, tvb, curr_bit_offset, 6, ENC_BIG_ENDIAN);
6803 rep_thresh = tvb_get_bits8(tvb,curr_bit_offset, 6);
6804 if (rep_quant == 0)
6806 proto_item_append_text(item, " (%.1f dB)", (float)rep_thresh/2 - 19.5);
6808 else
6810 proto_item_append_text(item, " (%d dBm)", rep_thresh - 140);
6812 curr_bit_offset += 6;
6814 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_eutran_fdd_reporting_offset_present))
6816 item = proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_fdd_reporting_offset, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6817 curr_bit_offset += 3;
6821 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_eutran_tdd_reporting))
6823 if (rep_quant == 0)
6825 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_tdd_reporting_threshold_rsrp, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6827 else
6829 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_tdd_reporting_threshold_rsrq, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6831 curr_bit_offset += 3;
6833 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_eutran_tdd_reporting_threshold_2_present))
6835 item = proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_tdd_reporting_threshold_2, tvb, curr_bit_offset, 6, ENC_BIG_ENDIAN);
6836 rep_thresh = tvb_get_bits8(tvb,curr_bit_offset, 6);
6837 if (rep_quant == 0)
6839 proto_item_append_text(item, " (%.1f dB)", (float)rep_thresh/2 - 19.5);
6841 else
6843 proto_item_append_text(item, " (%d dBm)", rep_thresh - 140);
6845 curr_bit_offset += 6;
6847 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_eutran_tdd_reporting_offset_present))
6849 item = proto_tree_add_bits_item(tree, hf_gsm_a_rr_eutran_tdd_reporting_offset, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6850 curr_bit_offset += 3;
6855 /* Repeated E-UTRAN Neighbour Cells */
6856 while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_repeated_eutran_neighbour_cells))
6858 curr_bit_offset += de_rr_eutran_neighbour_cells(tvb, subtree, curr_bit_offset);
6861 /* Repeated E-UTRAN Not Allowed Cells */
6862 while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_repeated_eutran_not_allowed_cells))
6864 curr_bit_offset += de_rr_eutran_not_allowed_cells(tvb, subtree, curr_bit_offset);
6867 /* Repeated E-UTRAN PCID to TA mapping */
6868 while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_repeated_eutran_pcid_ta_mapping))
6870 curr_bit_offset += de_rr_eutran_pcid_to_ta_mapping(tvb, subtree, curr_bit_offset);
6872 proto_item_set_len(item,((curr_bit_offset>>3) - (bit_offset>>3) + 1));
6874 return curr_bit_offset - bit_offset;
6877 static int
6878 de_rr_eutran_param_desc_mi(tvbuff_t *tvb, proto_tree *tree, int bit_offset)
6880 proto_tree *subtree;
6881 proto_item *item;
6882 int curr_bit_offset;
6884 curr_bit_offset = bit_offset;
6885 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EUTRAN_PARAM_DESC], &item,
6886 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EUTRAN_PARAM_DESC]);
6888 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_start, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
6889 curr_bit_offset += 1;
6890 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_stop, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
6891 curr_bit_offset += 1;
6893 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_eutran_measurement_parameters_description))
6895 /* E-UTRAN Measurement Parameters Description */
6896 curr_bit_offset += de_rr_eutran_measurement_param_desc(tvb, subtree, curr_bit_offset);
6899 /* Repeated E-UTRAN Neighbour Cells */
6900 while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_repeated_eutran_neighbour_cells))
6902 curr_bit_offset += de_rr_eutran_neighbour_cells_mi(tvb, subtree, curr_bit_offset);
6905 /* Repeated E-UTRAN Not Allowed Cells */
6906 while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_repeated_eutran_not_allowed_cells))
6908 curr_bit_offset += de_rr_eutran_not_allowed_cells(tvb, subtree, curr_bit_offset);
6911 /* Measurement Control Parameters Description */
6912 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_measurement_control_parameters_description))
6914 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_eutran_default_measurement_control_eutran_present))
6916 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_default_measurement_control_eutran, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
6917 curr_bit_offset += 1;
6919 while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_repeated_eutran_measurement_control_parameters))
6921 while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_repeated_eutran_frequency_index))
6923 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_frequency_index, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6924 curr_bit_offset += 3;
6926 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_measurement_control_eutran, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
6927 curr_bit_offset += 1;
6930 proto_item_set_len(item,((curr_bit_offset>>3) - (bit_offset>>3) + 1));
6932 return curr_bit_offset - bit_offset;
6935 static int
6936 de_rr_priority_and_eutran_param_desc(tvbuff_t *tvb, proto_tree *tree, int bit_offset)
6938 proto_tree *subtree;
6939 proto_item *item;
6940 int curr_bit_offset;
6942 curr_bit_offset = bit_offset;
6943 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_PRIORITY_AND_EUTRAN_PARAM_DESC], &item,
6944 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_PRIORITY_AND_EUTRAN_PARAM_DESC]);
6946 /* Serving Cell Priority Parameters Description */
6947 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_serving_cell_priority_parameters_description))
6949 proto_tree *subtree_serv;
6950 proto_item *item_serv;
6951 int serv_bit_offset = curr_bit_offset;
6953 subtree_serv = proto_tree_add_subtree(subtree, tvb, curr_bit_offset>>3, ((curr_bit_offset+15)>>3)-(curr_bit_offset>>3) + 1,
6954 ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_SERVING_CELL_PRIORITY_PARAM_DESC], &item_serv,
6955 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_SERVING_CELL_PRIORITY_PARAM_DESC]);
6957 proto_tree_add_bits_item(subtree_serv, hf_gsm_a_rr_serving_cell_priority_param_geran_priority, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
6958 curr_bit_offset += 3;
6959 proto_tree_add_bits_item(subtree_serv, hf_gsm_a_rr_serving_cell_priority_param_thresh_prio_search, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
6960 curr_bit_offset += 4;
6961 proto_tree_add_bits_item(subtree_serv, hf_gsm_a_rr_serving_cell_priority_param_thresh_gsm_low, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
6962 curr_bit_offset += 4;
6963 proto_tree_add_bits_item(subtree_serv, hf_gsm_a_rr_serving_cell_priority_param_h_prio, tvb, curr_bit_offset, 2, ENC_BIG_ENDIAN);
6964 curr_bit_offset += 2;
6965 proto_tree_add_bits_item(subtree_serv, hf_gsm_a_rr_serving_cell_priority_param_t_reselection, tvb, curr_bit_offset, 2, ENC_BIG_ENDIAN);
6966 curr_bit_offset += 2;
6967 proto_item_set_len(item_serv, (curr_bit_offset>>3) - (serv_bit_offset>>3)+1);
6970 /* 3G Priority Parameters Description */
6971 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_3g_priority_parameters_description))
6973 curr_bit_offset += de_rr_3g_priority_param_desc(tvb, subtree, curr_bit_offset);
6976 /* E-UTRAN Parameters Description */
6977 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_eutran_parameters_description))
6979 curr_bit_offset += de_rr_eutran_param_desc(tvb, subtree, curr_bit_offset);
6981 proto_item_set_len(item,((curr_bit_offset>>3) - (bit_offset>>3) + 1));
6983 return (curr_bit_offset - bit_offset);
6986 static int
6987 de_rr_3g_csg_desc(tvbuff_t *tvb, proto_tree *tree, int bit_offset)
6989 proto_tree *subtree;
6990 proto_item *item;
6991 int curr_bit_offset;
6993 curr_bit_offset = bit_offset;
6994 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_CSG_DESC], &item,
6995 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_CSG_DESC]);
6997 while (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_repeated_csg_psc_split_struct))
6999 /* CSG_PSC_SPLIT struct */
7000 while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_psc_present))
7002 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_psc, tvb, curr_bit_offset, 9, ENC_BIG_ENDIAN);
7003 curr_bit_offset += 9;
7005 while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_psc_pattern_present))
7007 int psc_pattern_length;
7008 int psc_pattern;
7010 psc_pattern_length = tvb_get_bits8(tvb,curr_bit_offset,3) + 1;
7011 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_utran_psc_pattern_length, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
7012 curr_bit_offset += 3;
7013 psc_pattern = tvb_get_bits8(tvb,curr_bit_offset, psc_pattern_length);
7015 item = proto_tree_add_uint(tree, hf_gsm_a_rr_psc_pattern, tvb, curr_bit_offset>>3, 1, psc_pattern);
7017 curr_bit_offset += psc_pattern_length;
7018 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_utran_psc_pattern_sense, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
7019 curr_bit_offset += 1;
7022 while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_repeated_utran_frequency_index))
7024 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_utran_frequency_index, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
7025 curr_bit_offset += 5;
7029 while(gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_repeated_csg_fdd_uarfcn))
7031 /* CSG_FDD_UARFCN */
7032 if (!gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_3g_csg_desc_technology))
7034 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_utran_csg_fdd_uarfcn, tvb, curr_bit_offset, 14, ENC_BIG_ENDIAN);
7035 curr_bit_offset += 14;
7037 else
7039 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_utran_csg_tdd_uarfcn, tvb, curr_bit_offset, 14, ENC_BIG_ENDIAN);
7040 curr_bit_offset += 14;
7043 proto_item_set_len(item,((curr_bit_offset>>3) - (bit_offset>>3) + 1));
7045 return curr_bit_offset - bit_offset;
7048 static int
7049 de_rr_eutran_csg_desc(tvbuff_t *tvb, proto_tree *tree, int bit_offset)
7051 proto_tree *subtree;
7052 proto_item *item;
7053 int curr_bit_offset;
7055 curr_bit_offset = bit_offset;
7056 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EUTRAN_CSG_DESC], &item,
7057 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EUTRAN_CSG_DESC]);
7059 while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_repeated_pcid_group))
7061 /* dissect PCID group */
7062 curr_bit_offset += de_rr_eutran_pcid(tvb, subtree, curr_bit_offset);
7065 while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_repeated_earfcn))
7067 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_csg_earfcn, tvb, curr_bit_offset, 16, ENC_BIG_ENDIAN);
7068 curr_bit_offset += 16;
7070 proto_item_set_len(item,((curr_bit_offset>>3) - (bit_offset>>3) + 1));
7072 return curr_bit_offset - bit_offset;
7075 static int
7076 de_rr_eutran_csg_desc_mi(tvbuff_t *tvb, proto_tree *tree, int bit_offset)
7078 proto_tree *subtree;
7079 proto_item *item;
7080 int curr_bit_offset;
7082 curr_bit_offset = bit_offset;
7083 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EUTRAN_CSG_DESC], &item,
7084 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EUTRAN_CSG_DESC]);
7086 while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_repeated_csg_pci_split))
7088 /* dissect PCID group */
7089 curr_bit_offset += de_rr_eutran_pcid(tvb, subtree, curr_bit_offset);
7091 proto_item_set_len(item,((curr_bit_offset>>3) - (bit_offset>>3) + 1));
7093 return curr_bit_offset - bit_offset;
7096 static int
7097 de_rr_utran_measurement_control_param_mi(tvbuff_t *tvb, proto_tree *tree, int bit_offset)
7099 proto_tree *subtree;
7100 proto_item *item;
7101 int curr_bit_offset;
7103 curr_bit_offset = bit_offset;
7104 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_UTRAN_MEASUREMENT_CONTROL_PARAM_DESC], &item,
7105 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_UTRAN_MEASUREMENT_CONTROL_PARAM_DESC]);
7107 while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_repeated_utran_frequency_index))
7109 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_utran_frequency_index, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
7110 curr_bit_offset += 5;
7112 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_3g_control_param_desc_meas_ctrl_utran, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
7113 curr_bit_offset += 1;
7115 proto_item_set_len(item,((curr_bit_offset>>3) - (bit_offset>>3) + 1));
7117 return curr_bit_offset - bit_offset;
7120 static int
7121 de_rr_3g_supplementary_param_desc_mi(tvbuff_t *tvb, proto_tree *tree, int bit_offset)
7123 proto_tree *subtree;
7124 proto_item *item;
7125 int curr_bit_offset;
7127 curr_bit_offset = bit_offset;
7128 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_SUPPLEMENTARY_PARAM_DESC], &item,
7129 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_SUPPLEMENTARY_PARAM_DESC]);
7131 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_3g_priority_param_desc_utran_start, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
7132 curr_bit_offset += 1;
7133 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_3g_priority_param_desc_utran_stop, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
7134 curr_bit_offset += 1;
7136 /* 3G Measurement Control Parameters Description */
7137 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_3g_measurement_control_parameters_description))
7139 /* 3G Measurement Control Parameters Description struct */
7140 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_3g_measurement_control_parameters_description_struct))
7142 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_3g_control_param_desc_meas_ctrl_utran, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
7143 curr_bit_offset += 1;
7145 while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_repeated_utran_measurement_control_parameters_struct))
7147 curr_bit_offset += de_rr_utran_measurement_control_param_mi(tvb, subtree, curr_bit_offset);
7150 proto_item_set_len(item,((curr_bit_offset>>3) - (bit_offset>>3) + 1));
7152 return curr_bit_offset - bit_offset;
7155 static uint16_t
7156 de_rr_si2quater_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
7158 proto_tree *subtree2, *subtree3;
7159 proto_item *item2, *item3;
7160 uint32_t curr_offset;
7161 int bit_offset, bit_offset_sav, idx;
7162 uint8_t value;
7163 uint8_t tvb_len = tvb_reported_length(tvb);
7164 uint16_t bit_len = tvb_len << 3;
7166 curr_offset = offset;
7167 bit_offset = curr_offset << 3;
7169 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_ba_ind, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
7170 bit_offset += 1;
7171 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_3g_ba_ind, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
7172 bit_offset += 1;
7173 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_mp_change_mark, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
7174 bit_offset += 1;
7175 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_si2quater_index, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
7176 bit_offset += 4;
7177 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_si2quater_count, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
7178 bit_offset += 4;
7179 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_measurement_parameters_description))
7180 { /* Measurement Parameters Description */
7181 bit_offset_sav = bit_offset;
7182 subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_MEAS_PARAM_DESC], &item2,
7183 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_MEAS_PARAM_DESC]);
7184 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_gsm_report_type, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
7185 bit_offset += 1;
7186 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_serving_band_reporting, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
7187 bit_offset += 2;
7188 proto_item_set_len(item2, (bit_offset>>3) - (bit_offset_sav>>3)+1);
7190 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_gprs_real_time_difference_description))
7191 { /* GPRS Real Time Difference Description */
7192 bit_offset += de_rr_rtd_desc(tvb, subtree, bit_offset, DE_RR_REST_OCTETS_GPRS_RTD_DESC);
7194 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_gprs_bsic_description))
7195 { /* GPRS BSIC Description */
7196 bit_offset += de_rr_bsic_desc(tvb, subtree, bit_offset, DE_RR_REST_OCTETS_GPRS_BSIC_DESC);
7198 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_gprs_report_priority_description))
7199 { /* GPRS Report Priority Description */
7200 bit_offset += de_rr_report_priority_desc(tvb, subtree, bit_offset, DE_RR_REST_OCTETS_GPRS_REPORT_PRIO_DESC);
7202 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_gprs_measurement_parameters_description))
7203 { /* GPRS Measurement Parameters Description */
7204 bit_offset += de_rr_meas_param_desc(tvb, subtree, bit_offset, DE_RR_REST_OCTETS_GPRS_MEAS_PARAM_DESC);
7206 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_nc_measurement_parameters))
7207 { /* NC Measurement Parameters */
7208 bit_offset_sav = bit_offset;
7209 subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_NC_MEAS_PARAM], &item2,
7210 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_NC_MEAS_PARAM]);
7211 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_network_control_order, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
7212 bit_offset += 2;
7213 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_nc_periods))
7215 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_nc_non_drx_period, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
7216 bit_offset += 3;
7217 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_nc_reporting_period_i, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
7218 bit_offset += 3;
7219 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_nc_reporting_period_t, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
7220 bit_offset += 3;
7222 proto_item_set_len(item2, (bit_offset>>3) - (bit_offset_sav>>3)+1);
7224 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_si_2quater_extension_information))
7225 { /* SI 2quater Extension Information */
7226 bit_offset_sav = bit_offset;
7227 subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_SI2Q_EXT_INFO], &item2,
7228 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_SI2Q_EXT_INFO]);
7229 idx = tvb_get_bits8(tvb,bit_offset,8);
7230 proto_tree_add_uint(subtree2, hf_gsm_a_rr_extension_length, tvb, bit_offset>>3, 1, idx);
7231 bit_offset += 8;
7232 proto_item_set_len(item2,((bit_offset+idx+1)>>3) - (bit_offset_sav>>3)+1);
7233 if (gsm_rr_csn_flag(tvb, subtree2, bit_offset++, hf_gsm_a_rr_ccn_support_description))
7234 { /* CCN Support Description */
7235 bit_offset_sav = bit_offset;
7236 subtree3 = proto_tree_add_subtree(subtree2, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_CCN_SUPPORT_DESC], &item3,
7237 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_CCN_SUPPORT_DESC]);
7238 value = tvb_get_bits8(tvb,bit_offset,7);
7239 proto_tree_add_uint(subtree3, hf_gsm_a_rr_number_cells, tvb, bit_offset>>3, 1, value);
7240 bit_offset += 7;
7241 idx -= 7;
7242 item2 = proto_tree_add_bytes_format(subtree3, hf_gsm_a_rr_ccn_supported, tvb, bit_offset>>3, (value>>3)+1, NULL, "CCN Supported: ");
7243 while (value)
7245 proto_item_append_text(item2,"%d",tvb_get_bits8(tvb,bit_offset,1));
7246 bit_offset += 1;
7247 value -= 1;
7248 idx -= 1;
7250 proto_item_set_len(item3, (bit_offset>>3) - (bit_offset_sav>>3)+1);
7252 bit_offset += idx;
7254 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_3g_neighbour_cell_description))
7255 { /* 3G Neighbour Cell Description */
7256 bit_offset_sav = bit_offset;
7257 subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_NEIGH_CELL_DESC], &item2,
7258 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_NEIGH_CELL_DESC]);
7259 if (gsm_rr_csn_flag(tvb, subtree2, bit_offset++, hf_gsm_a_rr_index_start_3g))
7261 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_index_start_3g, tvb, bit_offset, 7, ENC_BIG_ENDIAN);
7262 bit_offset += 7;
7264 if (gsm_rr_csn_flag(tvb, subtree2, bit_offset++, hf_gsm_a_rr_absolute_index_start_emr))
7266 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_absolute_index_start_emr, tvb, bit_offset, 7, ENC_BIG_ENDIAN);
7267 bit_offset += 7;
7269 if (gsm_rr_csn_flag(tvb, subtree2, bit_offset++, hf_gsm_a_rr_utran_fdd_description))
7270 { /* UTRAN FDD Description */
7271 bit_offset += de_rr_si2quater_meas_info_utran_fdd_desc(tvb, subtree2, bit_offset);
7273 if (gsm_rr_csn_flag(tvb, subtree2, bit_offset++, hf_gsm_a_rr_utran_tdd_description))
7274 { /* UTRAN TDD Description */
7275 bit_offset += de_rr_si2quater_meas_info_utran_tdd_desc(tvb, subtree2, bit_offset);
7277 proto_item_set_len(item2, (bit_offset>>3) - (bit_offset_sav>>3)+1);
7279 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_3g_measurement_parameters_description))
7280 { /* 3G Measurement Parameters Description */
7281 bit_offset_sav = bit_offset;
7282 subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_MEAS_PARAM_DESC], &item2,
7283 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_MEAS_PARAM_DESC]);
7284 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_qsearch_i, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
7285 bit_offset += 4;
7286 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_qsearch_c_initial, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
7287 bit_offset += 1;
7288 if (gsm_rr_csn_flag(tvb, subtree2, bit_offset++, hf_gsm_a_rr_fdd_information))
7290 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_fdd_qoffset, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
7291 bit_offset += 4;
7292 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_fdd_rep_quant, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
7293 bit_offset += 1;
7294 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_fdd_multirat_reporting, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
7295 bit_offset += 2;
7296 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_fdd_qmin, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
7297 bit_offset += 3;
7299 if (gsm_rr_csn_flag(tvb, subtree2, bit_offset++, hf_gsm_a_rr_tdd_information))
7301 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_tdd_qoffset, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
7302 bit_offset += 4;
7303 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_tdd_multirat_reporting, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
7304 bit_offset += 2;
7306 proto_item_set_len(item2, (bit_offset>>3) - (bit_offset_sav>>3)+1);
7308 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_gprs_3g_measurement_parameters_description))
7309 { /* GPRS 3G Measurement Parameters Description */
7310 uint8_t reporting_quant = 0;
7311 bit_offset_sav = bit_offset;
7312 subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_GPRS_3G_MEAS_PARAM_DESC], &item2,
7313 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_GPRS_3G_MEAS_PARAM_DESC]);
7314 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_qsearch_p, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
7315 bit_offset += 4;
7316 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_3g_search_prio, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
7317 bit_offset += 1;
7318 if (gsm_rr_csn_flag(tvb, subtree2, bit_offset++, hf_gsm_a_rr_fdd_parameters))
7320 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_fdd_rep_quant, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
7321 reporting_quant = gsm_rr_csn_flag(tvb, subtree2, bit_offset++, hf_gsm_a_rr_reporting_quantity_present);
7322 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_fdd_multirat_reporting, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
7323 bit_offset += 2;
7325 if (gsm_rr_csn_flag(tvb, subtree2, bit_offset++, hf_gsm_a_rr_fdd_reporting_parameters))
7327 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_fdd_reporting_offset, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
7328 bit_offset += 3;
7329 if (reporting_quant == 0)
7331 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_fdd_reporting_threshold_rscp, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
7333 else
7335 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_fdd_reporting_threshold_ecn0, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
7337 bit_offset += 3;
7339 if (gsm_rr_csn_flag(tvb, subtree2, bit_offset++, hf_gsm_a_rr_tdd_multirat_reporting_present))
7341 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_tdd_multirat_reporting, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
7342 bit_offset += 2;
7344 if (gsm_rr_csn_flag(tvb, subtree2, bit_offset++, hf_gsm_a_rr_tdd_reporting_parameters))
7346 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_tdd_reporting_offset, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
7347 bit_offset += 3;
7348 if (reporting_quant == 0)
7350 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_tdd_reporting_threshold_rscp, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
7352 else
7354 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_tdd_reporting_threshold_ecn0, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
7356 bit_offset += 3;
7358 proto_item_set_len(item2, (bit_offset>>3) - (bit_offset_sav>>3)+1);
7360 /* Null breakpoint */
7361 if (bit_len - bit_offset > 0)
7363 /* There is still room left in the Rest Octets IE */
7364 if (gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_additions_in_rel_5))
7365 { /* Additions in Rel-5 */
7366 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_3g_additional_measurement_parameters_description))
7367 { /* 3G Additional Measurement Parameters Description */
7368 bit_offset_sav = bit_offset;
7369 subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_ADD_MEAS_PARAM_DESC], &item2,
7370 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_ADD_MEAS_PARAM_DESC]);
7371 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_fdd_qmin_offset, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
7372 bit_offset += 3;
7373 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_fdd_rscpmin, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
7374 bit_offset += 4;
7375 proto_item_set_len(item2, (bit_offset>>3) - (bit_offset_sav>>3)+1);
7377 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_3g_additional_measurement_parameters_description_2))
7378 { /* 3G Additional Measurement Parameters Description 2 */
7379 bit_offset += de_rr_3g_add_meas_param_desc2(tvb, subtree, bit_offset);
7381 /* Null breakpoint */
7382 if (bit_len - bit_offset > 0)
7384 /* There is still room left in the Rest Octets IE */
7385 if (gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_additions_in_rel_6))
7386 { /* Additions in Rel-6 */
7387 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_3g_ccn_active, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
7388 bit_offset += 1;
7390 /* Null breakpoint */
7391 if (bit_len - bit_offset > 0)
7393 /* There is still room left in the Rest Octets IE */
7394 if (gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_additions_in_rel_7))
7395 { /* Additions in Rel-7 */
7396 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_700_reporting))
7398 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_700_reporting_offset, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
7399 bit_offset += 3;
7400 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_700_reporting_threshold, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
7401 bit_offset += 3;
7403 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_810_reporting))
7405 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_810_reporting_offset, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
7406 bit_offset += 3;
7407 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_810_reporting_threshold, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
7408 bit_offset += 3;
7411 /* Null breakpoint */
7412 if (bit_len - bit_offset > 0)
7414 /* There is still room left in the Rest Octets IE */
7415 if (gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_additions_in_rel_8))
7416 { /* Additions in Rel-8 */
7417 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_priority_and_eutran_param_description))
7419 bit_offset += de_rr_priority_and_eutran_param_desc(tvb, subtree, bit_offset);
7421 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_3g_csg_description))
7423 bit_offset += de_rr_3g_csg_desc(tvb, subtree, bit_offset);
7425 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_eutran_csg_description))
7427 bit_offset += de_rr_eutran_csg_desc(tvb, subtree, bit_offset);
7437 gsm_rr_padding_bits(subtree, tvb, bit_offset, tvb_len, PADDING_BYTE);
7438 return tvb_len - offset;
7442 * [3] 10.5.2.34 SI 3 Rest Octets
7444 static const value_string gsm_a_rr_temporary_offset_vals[] = {
7445 { 0, "0 dB"},
7446 { 1, "10 dB"},
7447 { 2, "20 dB"},
7448 { 3, "30 dB"},
7449 { 4, "40 dB"},
7450 { 5, "50 dB"},
7451 { 6, "60 dB"},
7452 { 7, "infinity"},
7453 { 0, NULL }
7456 static const value_string gsm_a_rr_cell_reselect_offset_vals[] = {
7457 { 0, "0 dB"},
7458 { 1, "2 dB"},
7459 { 2, "4 dB"},
7460 { 3, "6 dB"},
7461 { 4, "8 dB"},
7462 { 5, "10 dB"},
7463 { 6, "12 dB"},
7464 { 7, "14 dB"},
7465 { 8, "16 dB"},
7466 { 9, "18 dB"},
7467 {10, "20 dB"},
7468 {11, "22 dB"},
7469 {12, "24 dB"},
7470 {13, "26 dB"},
7471 {14, "28 dB"},
7472 {15, "30 dB"},
7473 {16, "32 dB"},
7474 {17, "34 dB"},
7475 {18, "36 dB"},
7476 {19, "38 dB"},
7477 {20, "40 dB"},
7478 {21, "42 dB"},
7479 {22, "44 dB"},
7480 {23, "46 dB"},
7481 {24, "48 dB"},
7482 {25, "50 dB"},
7483 {26, "52 dB"},
7484 {27, "54 dB"},
7485 {28, "56 dB"},
7486 {29, "58 dB"},
7487 {30, "60 dB"},
7488 {31, "62 dB"},
7489 {32, "64 dB"},
7490 {33, "66 dB"},
7491 {34, "68 dB"},
7492 {35, "70 dB"},
7493 {36, "72 dB"},
7494 {37, "74 dB"},
7495 {38, "76 dB"},
7496 {39, "78 dB"},
7497 {40, "80 dB"},
7498 {41, "82 dB"},
7499 {42, "84 dB"},
7500 {43, "86 dB"},
7501 {44, "88 dB"},
7502 {45, "90 dB"},
7503 {46, "92 dB"},
7504 {47, "94 dB"},
7505 {48, "96 dB"},
7506 {49, "98 dB"},
7507 {50, "100 dB"},
7508 {51, "102 dB"},
7509 {52, "104 dB"},
7510 {53, "106 dB"},
7511 {54, "108 dB"},
7512 {55, "110 dB"},
7513 {56, "112 dB"},
7514 {57, "114 dB"},
7515 {58, "116 dB"},
7516 {59, "118 dB"},
7517 {60, "120 dB"},
7518 {61, "122 dB"},
7519 {62, "124 dB"},
7520 {63, "126 dB"},
7521 { 0, NULL }
7524 static const value_string gsm_a_rr_penalty_time_vals[] = {
7525 { 0, "20 s"},
7526 { 1, "40 s"},
7527 { 2, "60 s"},
7528 { 3, "80 s"},
7529 { 4, "100 s"},
7530 { 5, "120 s"},
7531 { 6, "140 s"},
7532 { 7, "160 s"},
7533 { 8, "180 s"},
7534 { 9, "200 s"},
7535 {10, "220 s"},
7536 {11, "240 s"},
7537 {12, "260 s"},
7538 {13, "280 s"},
7539 {14, "300 s"},
7540 {15, "320 s"},
7541 {16, "340 s"},
7542 {17, "360 s"},
7543 {18, "380 s"},
7544 {19, "400 s"},
7545 {20, "420 s"},
7546 {21, "440 s"},
7547 {22, "460 s"},
7548 {23, "480 s"},
7549 {24, "500 s"},
7550 {25, "520 s"},
7551 {26, "540 s"},
7552 {27, "560 s"},
7553 {28, "580 s"},
7554 {29, "600 s"},
7555 {30, "620 s"},
7556 {31, "Cell Reselect Offset is subtracted from C2 and Temporary Offset is ignored"},
7557 { 0, NULL }
7560 static int
7561 de_rr_rest_oct_opt_sel_param(tvbuff_t *tvb, proto_tree *tree, int bit_offset)
7563 proto_tree *subtree;
7564 proto_item *item;
7565 int curr_bit_offset;
7567 curr_bit_offset = bit_offset;
7569 if (gsm_rr_csn_HL_flag(tvb, tree, 0, curr_bit_offset++, hf_gsm_a_rr_selection_parameters))
7570 { /* Selection Parameters */
7571 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_OPTIONAL_SEL_PARAM], &item,
7572 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_OPTIONAL_SEL_PARAM]);
7573 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_cbq, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
7574 curr_bit_offset += 1;
7575 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_cell_reselect_offset, tvb, curr_bit_offset, 6, ENC_BIG_ENDIAN);
7576 curr_bit_offset += 6;
7577 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_temporary_offset, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
7578 curr_bit_offset += 3;
7579 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_penalty_time, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
7580 curr_bit_offset += 5;
7581 proto_item_set_len(item,((curr_bit_offset>>3) - (bit_offset>>3) + 1));
7584 return (curr_bit_offset - bit_offset);
7587 static const value_string gsm_a_rr_si13_position_vals[] = {
7588 { 0, "SYSTEM INFORMATION TYPE 13 message is sent on BCCH Norm"},
7589 { 1, "SYSTEM INFORMATION TYPE 13 message is sent on BCCH Ext"},
7590 { 0, NULL }
7593 static int
7594 de_rr_rest_oct_gprs_indicator(tvbuff_t *tvb, proto_tree *tree, int bit_offset)
7596 proto_tree *subtree;
7597 int curr_bit_offset;
7599 curr_bit_offset = bit_offset;
7601 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, 1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_GPRS_INDICATOR], NULL,
7602 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_GPRS_INDICATOR]);
7603 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_gprs_ra_colour, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
7604 curr_bit_offset += 3;
7605 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_si13_position, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
7606 curr_bit_offset += 1;
7608 return (curr_bit_offset - bit_offset);
7611 static const value_string gsm_a_rr_power_offset_vals[] = {
7612 { 0, "0 dB"},
7613 { 1, "2 dB"},
7614 { 2, "4 dB"},
7615 { 3, "8 dB"},
7616 { 0, NULL }
7619 static const true_false_string gsm_a_rr_si2quater_position_value = {
7620 "SYSTEM INFORMATION TYPE 2 quater message is sent on BCCH Ext",
7621 "SYSTEM INFORMATION TYPE 2 quater message is sent on BCCH Norm"
7624 static const true_false_string gsm_a_rr_si13alt_position_value = {
7625 "If Iu mode is supported in the cell, SYSTEM INFORMATION TYPE 13alt message is sent on BCCH Ext",
7626 "If Iu mode is supported in the cell, SYSTEM INFORMATION TYPE 13alt message is sent on BCCH Norm"
7629 static const true_false_string gsm_a_rr_si21_position_value = {
7630 "SYSTEM INFORMATION TYPE 21 message is sent on BCCH Ext",
7631 "SYSTEM INFORMATION TYPE 21 message is sent on BCCH Norm"
7634 static uint16_t
7635 de_rr_si3_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
7637 uint32_t curr_offset;
7638 int bit_offset;
7639 bool gprs_indicator;
7640 uint8_t tvb_len = tvb_reported_length(tvb);
7642 curr_offset = offset;
7643 bit_offset = curr_offset << 3;
7645 bit_offset += de_rr_rest_oct_opt_sel_param(tvb, subtree, bit_offset);
7647 if (gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_power_offset_present))
7648 { /* Optional Power Offset */
7649 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_power_offset, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
7650 bit_offset += 2;
7652 gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_system_information_type_2ter);
7653 gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_early_classmark_sending);
7654 if (gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_scheduling_if_and_where))
7655 { /* Scheduling if and where */
7656 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_where, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
7657 bit_offset += 3;
7659 gprs_indicator = gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_gprs_indicator);
7660 if (gprs_indicator)
7661 { /* GPRS indicator */
7662 bit_offset += de_rr_rest_oct_gprs_indicator(tvb, subtree, bit_offset);
7664 gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_3g_early_classmark_sending_restriction);
7665 if (gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_si2quater_indicator))
7666 { /* SI2quater Indicator */
7667 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_si2quater_position, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
7668 bit_offset += 1;
7670 if (gprs_indicator == false)
7672 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_si13alt_position, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
7673 bit_offset += 1;
7675 if (gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_si21_indicator))
7676 { /* SI21 Indicator */
7677 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_si21_position, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
7678 bit_offset += 1;
7680 gsm_rr_padding_bits(subtree, tvb, bit_offset, tvb_len, PADDING_BYTE);
7681 return tvb_len - offset;
7685 * [3] 10.5.2.32 SI 4 Rest Octets
7687 static const value_string gsm_a_rr_prio_thr_vals[] = {
7688 { 0, "0 dB"},
7689 { 1, "6 dB"},
7690 { 2, "12 dB"},
7691 { 3, "18 dB"},
7692 { 4, "24 dB"},
7693 { 5, "30 dB"},
7694 { 6, "36 dB"},
7695 { 7, "Infinite"},
7696 { 0, NULL }
7699 static const value_string gsm_a_rr_lsa_offset_vals[] = {
7700 { 0, "0 dB"},
7701 { 1, "4 dB"},
7702 { 2, "8 dB"},
7703 { 3, "16 dB"},
7704 { 4, "24 dB"},
7705 { 5, "32 dB"},
7706 { 6, "48 dB"},
7707 { 7, "64 dB"},
7708 { 0, NULL }
7711 static uint16_t
7712 de_rr_si4_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
7714 proto_tree *subtree2, *subtree3;
7715 proto_item *item2, *item3;
7716 uint32_t curr_offset;
7717 int bit_offset, bit_offset_sav;
7718 uint8_t tvb_len = tvb_reported_length(tvb);
7719 uint16_t bit_len = tvb_len << 3;
7721 curr_offset = offset;
7722 bit_offset = curr_offset << 3;
7724 subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_SI4_REST_OCTETS_O], &item2,
7725 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_SI4_REST_OCTETS_O]);
7727 bit_offset += de_rr_rest_oct_opt_sel_param(tvb, subtree2, bit_offset);
7729 if (gsm_rr_csn_HL_flag(tvb, subtree2, bit_len, bit_offset++, hf_gsm_a_rr_power_offset_present))
7730 { /* Optional Power Offset */
7731 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_power_offset, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
7732 bit_offset += 2;
7734 if (gsm_rr_csn_HL_flag(tvb, subtree2, bit_len, bit_offset++, hf_gsm_a_rr_gprs_indicator))
7736 bit_offset += de_rr_rest_oct_gprs_indicator(tvb, subtree2, bit_offset);
7738 proto_item_set_len(item2,(bit_offset>>3) + 1 - curr_offset);
7740 if (gsm_rr_csn_HL_flag(tvb, subtree, bit_len, bit_offset++, hf_gsm_a_rr_si4_rest_octets_s))
7741 { /* SI4 Rest Octets_S */
7742 bit_offset_sav = bit_offset;
7743 subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_SI4_REST_OCTETS_S], &item2,
7744 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_SI4_REST_OCTETS_S]);
7746 if (gsm_rr_csn_HL_flag(tvb, subtree2, bit_len, bit_offset++, hf_gsm_a_rr_lsa_parameters))
7747 { /* LSA Parameters */
7748 subtree3 = proto_tree_add_subtree(subtree2, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_LSA_PARAMETERS], &item3,
7749 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_LSA_PARAMETERS]);
7750 proto_tree_add_bits_item(subtree3, hf_gsm_a_rr_prio_thr, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
7751 bit_offset += 3;
7752 proto_tree_add_bits_item(subtree3, hf_gsm_a_rr_lsa_offset, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
7753 bit_offset += 3;
7754 if (gsm_rr_csn_flag(tvb,subtree3, bit_offset++, hf_gsm_a_rr_mcc_mnc_parameters))
7756 proto_tree_add_bits_item(subtree3, hf_gsm_a_rr_mcc, tvb, bit_offset, 12, ENC_BIG_ENDIAN);
7757 bit_offset += 12;
7758 proto_tree_add_bits_item(subtree3, hf_gsm_a_rr_mnc, tvb, bit_offset, 12, ENC_BIG_ENDIAN);
7759 bit_offset += 12;
7761 proto_item_set_len(item2, (bit_offset>>3) - (bit_offset_sav>>3)+1);
7764 if (gsm_rr_csn_HL_flag(tvb, subtree2, bit_len, bit_offset++, hf_gsm_a_rr_cell_id_present))
7765 { /* Cell Identity */
7766 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_cell_id, tvb, bit_offset, 16, ENC_BIG_ENDIAN);
7767 bit_offset += 16;
7770 if (gsm_rr_csn_HL_flag(tvb, subtree2, bit_len, bit_offset++, hf_gsm_a_rr_lsa_id_information))
7771 { /* LSA ID information */
7772 subtree3 = proto_tree_add_subtree(subtree2, tvb, bit_offset>>3, len, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_LSA_ID_INFO], &item3,
7773 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_LSA_ID_INFO]);
7776 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_lsa_id_type))
7778 proto_tree_add_bits_item(subtree3, hf_gsm_a_rr_short_lsa_id, tvb, bit_offset, 10, ENC_BIG_ENDIAN);
7779 bit_offset += 10;
7781 else
7783 proto_tree_add_bits_item(subtree3, hf_gsm_a_rr_lsa_id, tvb, bit_offset, 24, ENC_BIG_ENDIAN);
7784 bit_offset += 24;
7786 } while (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_additional_lsa_id));
7788 if (gsm_rr_csn_HL_flag(tvb, subtree, bit_len, bit_offset++, hf_gsm_a_rr_cbq3_present))
7790 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_cbq3, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
7791 bit_offset += 3;
7793 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_si13alt_position_present))
7795 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_si13alt_position, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
7796 bit_offset += 1;
7798 proto_item_set_len(item2, (bit_offset>>3) - (bit_offset_sav>>3)+1);
7800 else
7801 { /* Break indicator */
7802 gsm_rr_csn_HL_flag(tvb, subtree, bit_len, bit_offset++, hf_gsm_a_rr_break_indicator);
7804 /* Truncation allowed (see 44.018 section 8.9 */
7805 gsm_rr_padding_bits(subtree, tvb, bit_offset, tvb_len, PADDING_BYTE);
7806 return tvb_len - offset;
7810 * [3] 10.5.2.35a SI 6 Rest Octets
7812 static const true_false_string gsm_a_rr_paging_channel_restructuring_value = {
7813 "Paging channel is restructured",
7814 "Paging channel is not restructured"
7817 static const true_false_string gsm_a_rr_vbs_vgcs_inband_notifications_value = {
7818 "The mobile shall be notified on incoming high priority VBS/VGCS calls through NOTIFICATION/FACCH, the mobile need not to inspect the NCH",
7819 "The network does not provide notification on FACCH so that the mobile should inspect the NCH for notifications"
7822 static const true_false_string gsm_a_rr_vbs_vgcs_inband_pagings_value = {
7823 "The mobile shall be notified on incoming high priority point-to-point calls through NOTIFICATION/FACCH, the mobile need not to inspect the PCH",
7824 "The network does not provide paging information on FACCH so that the mobile should inspect the PCH for pagings"
7827 static const value_string gsm_a_rr_max_lapdm_vals[] = {
7828 { 0, "Any message segmented in up to 5 LAPDm frames"},
7829 { 1, "Any message segmented in up to 6 LAPDm frames"},
7830 { 2, "Any message segmented in up to 7 LAPDm frames"},
7831 { 3, "Any message segmented in up to 8 LAPDm frames"},
7832 { 4, "Any message segmented in up to 9 LAPDm frames"},
7833 { 5, "Any message segmented in up to 10 LAPDm frames"},
7834 { 6, "Any message segmented in up to 11 LAPDm frames"},
7835 { 7, "Any message segmented in up to 12 LAPDm frames"},
7836 { 0, NULL }
7839 static const true_false_string gsm_a_rr_dedicated_mode_mbms_notification_support_value = {
7840 "The cell supports the Dedicated Mode MBMS Notification procedures",
7841 "The cell does not support the Dedicated Mode MBMS Notification procedures"
7844 static const true_false_string gsm_a_rr_mnci_support_value = {
7845 "The cell supports the distribution of MBMS NEIGHBOURING CELL INFORMATION messages",
7846 "The cell does not support the distribution of MBMS NEIGHBOURING CELL INFORMATION messages"
7849 static uint16_t
7850 de_rr_si6_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
7852 proto_tree *subtree2;
7853 proto_item *item2;
7854 uint32_t curr_offset;
7855 int bit_offset, bit_offset_sav;
7856 uint8_t value;
7857 uint8_t tvb_len = tvb_reported_length(tvb);
7859 curr_offset = offset;
7860 bit_offset = curr_offset << 3;
7862 if (gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_pch_and_nch_info))
7863 { /* PCH and NCH Info */
7864 bit_offset_sav = bit_offset;
7865 subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_PCH_AND_NCH_INFO], &item2,
7866 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_PCH_AND_NCH_INFO]);
7867 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_paging_channel_restructuring, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
7868 bit_offset += 1;
7869 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_nln_sacch, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
7870 bit_offset += 2;
7871 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_call_prio_present))
7873 proto_tree_add_bits_item(subtree2, hf_gsm_a_call_prio, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
7874 bit_offset += 3;
7876 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_nln_status_sacch, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
7877 bit_offset += 1;
7878 proto_item_set_len(item2, (bit_offset>>3) - (bit_offset_sav>>3)+1);
7880 if (gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_vbs_vgcs_options))
7881 { /* VBS/VGCS options */
7882 bit_offset_sav = bit_offset;
7883 subtree2 = proto_tree_add_subtree(subtree, tvb,bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_VBS_VGCS_OPTIONS], &item2,
7884 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_VBS_VGCS_OPTIONS]);
7885 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_vbs_vgcs_inband_notifications, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
7886 bit_offset += 1;
7887 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_vbs_vgcs_inband_pagings, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
7888 bit_offset += 1;
7889 proto_item_set_len(item2, (bit_offset>>3) - (bit_offset_sav>>3)+1);
7891 value = gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_dtm);
7892 if (value == true)
7894 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_rac, tvb, bit_offset, 8, ENC_BIG_ENDIAN);
7895 bit_offset += 8;
7896 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_max_lapdm, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
7897 bit_offset += 3;
7899 gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_band_indicator);
7900 if (gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_gprs_ms_txpwr_max_ccch_present))
7902 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_gprs_ms_txpwr_max_ccch, tvb, bit_offset, 5, ENC_BIG_ENDIAN);
7903 bit_offset += 5;
7905 if (gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_mbms_procedures))
7906 { /* MBMS Procedures */
7907 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_dedicated_mode_mbms_notification_support, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
7908 bit_offset += 1;
7909 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_mnci_support, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
7910 bit_offset += 1;
7912 if (gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_additions_in_rel_7))
7913 { /* Additions in Release 7 */
7914 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_amr_config_present))
7916 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_amr_config, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
7917 bit_offset += 4;
7920 if (gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_rand_bit_stream_ind))
7921 { /* H < Random bit stream : bit **> */
7922 proto_tree_add_bytes_format_value(subtree, hf_gsm_a_rr_padding, tvb,
7923 bit_offset >> 3, -1, NULL,
7924 "random bit stream");
7926 else
7927 { /* L <spare padding> -- (no randomization) */
7928 gsm_rr_padding_bits(subtree, tvb, bit_offset, tvb_len, PADDING_BYTE);
7930 return tvb_len - offset;
7933 /* [3] 10.5.2.36 SI 7 Rest Octets
7934 * [3] 10.5.2.37 SI 8 Rest Octets
7935 * [3] 10.5.2.37a SI 9 Rest Octets
7939 * [3] 10.5.2.37b SI 13 Rest Octets
7941 static const value_string gsm_a_rr_si_change_field_vals[] = {
7942 { 0, "Update of unspecified SI message or SI messages"},
7943 { 1, "Update of SI1 message"},
7944 { 2, "Update of SI2, SI2 bis or SI2 ter message or any instance of SI2quater messages"},
7945 { 3, "Update of SI3, SI4, SI7, SI8, SI16 or SI17 message"},
7946 { 4, "Update of SI9 message"},
7947 { 5, "Update of SI18 or SI20 message"},
7948 { 6, "Update of SI19 message"},
7949 { 7, "Update of SI15 message"},
7950 { 8, "Update of SI2n message"},
7951 { 9, "Update of unknown SI message type"},
7952 { 10, "Update of unknown SI message type"},
7953 { 11, "Update of unknown SI message type"},
7954 { 12, "Update of unknown SI message type"},
7955 { 13, "Update of unknown SI message type"},
7956 { 14, "Update of unknown SI message type"},
7957 { 15, "Update of unknown SI message type"},
7958 { 0, NULL }
7961 static const value_string gsm_a_rr_psi1_repeat_period_vals[] = {
7962 { 0, "1 multiframe"},
7963 { 1, "2 multiframes"},
7964 { 2, "3 multiframes"},
7965 { 3, "4 multiframes"},
7966 { 4, "5 multiframes"},
7967 { 5, "6 multiframes"},
7968 { 6, "7 multiframes"},
7969 { 7, "8 multiframes"},
7970 { 8, "9 multiframes"},
7971 { 9, "10 multiframes"},
7972 { 10, "11 multiframes"},
7973 { 11, "12 multiframes"},
7974 { 12, "13 multiframes"},
7975 { 13, "14 multiframes"},
7976 { 14, "15 multiframes"},
7977 { 15, "16 multiframes"},
7978 { 0, NULL }
7981 static const value_string gsm_a_rr_pbcch_pb_vals[] = {
7982 { 0, "0 dB"},
7983 { 1, "-2 dB"},
7984 { 2, "-4 dB"},
7985 { 3, "-6 dB"},
7986 { 4, "-8 dB"},
7987 { 5, "-10 dB"},
7988 { 6, "-12 dB"},
7989 { 7, "-14 dB"},
7990 { 8, "-16 dB"},
7991 { 9, "-18 dB"},
7992 { 10, "-20 dB"},
7993 { 11, "-22 dB"},
7994 { 12, "-24 dB"},
7995 { 13, "-26 dB"},
7996 { 14, "-28 dB"},
7997 { 15, "-30 dB"},
7998 { 0, NULL }
8001 static const true_false_string gsm_a_rr_spgc_ccch_sup_value = {
8002 "SPLIT_PG_CYCLE is supported on CCCH in this cell",
8003 "SPLIT_PG_CYCLE is not supported on CCCH in this cell"
8006 static const value_string gsm_a_rr_priority_access_thr_vals[] = {
8007 { 0, "Packet access is not allowed in the cell"},
8008 { 1, "Packet access is not allowed in the cell"},
8009 { 2, "Packet access is not allowed in the cell"},
8010 { 3, "Packet access is allowed for priority level 1"},
8011 { 4, "Packet access is allowed for priority level 1 to 2"},
8012 { 5, "Packet access is allowed for priority level 1 to 3"},
8013 { 6, "Packet access is allowed for priority level 1 to 4"},
8014 { 7, "Packet access is allowed for priority level 1 to 4"},
8015 { 0, NULL }
8018 static int
8019 de_rr_rest_oct_gprs_mobile_allocation(tvbuff_t *tvb, proto_tree *tree, int bit_offset)
8021 proto_tree *subtree;
8022 proto_item *item;
8023 int curr_bit_offset;
8024 uint8_t value;
8025 uint64_t ma_length;
8027 curr_bit_offset = bit_offset;
8029 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_GPRS_MOBILE_ALLOC], &item,
8030 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_GPRS_MOBILE_ALLOC]);
8031 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_hsn, tvb, curr_bit_offset, 6, ENC_BIG_ENDIAN);
8032 curr_bit_offset += 6;
8033 while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_rfl_number_present))
8035 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_rfl_number, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
8036 curr_bit_offset += 4;
8038 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_gprs_mobile_allocation))
8040 while (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_arfcn_index_list))
8042 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_arfcn_index, tvb, curr_bit_offset, 6, ENC_BIG_ENDIAN);
8043 curr_bit_offset += 6;
8046 else
8048 proto_tree_add_bits_ret_val(subtree, hf_gsm_a_rr_ma_length, tvb, curr_bit_offset, 6, &ma_length, ENC_BIG_ENDIAN);
8049 curr_bit_offset += 6;
8050 value = (int)ma_length + 1;
8051 item = proto_tree_add_bytes_format(subtree, hf_gsm_a_rr_ma_bitmap, tvb, curr_bit_offset>>3, (value>>3)+1, NULL, "MA Bitmap: ");
8052 while (value)
8054 proto_item_append_text(item,"%d",tvb_get_bits8(tvb,curr_bit_offset,1));
8055 curr_bit_offset += 1;
8056 value -= 1;
8059 proto_item_set_len(item,((curr_bit_offset>>3) - (bit_offset>>3) + 1));
8061 return (curr_bit_offset - bit_offset);
8064 static const value_string gsm_a_rr_nmo_vals[] = {
8065 { 0, "Network Mode of Operation I"},
8066 { 1, "Network Mode of Operation II"},
8067 { 2, "Network Mode of Operation III"},
8068 { 3, "Reserved"},
8069 { 0, NULL }
8072 static const value_string gsm_a_rr_t3168_vals[] = {
8073 { 0, "500 ms"},
8074 { 1, "1000 ms"},
8075 { 2, "1500 ms"},
8076 { 3, "2000 ms"},
8077 { 4, "2500 ms"},
8078 { 5, "3000 ms"},
8079 { 6, "3500 ms"},
8080 { 7, "4000 ms"},
8081 { 0, NULL }
8084 static const value_string gsm_a_rr_t3192_vals[] = {
8085 { 0, "500 ms"},
8086 { 1, "1000 ms"},
8087 { 2, "1500 ms"},
8088 { 3, "0 ms"},
8089 { 4, "80 ms"},
8090 { 5, "120 ms"},
8091 { 6, "160 ms"},
8092 { 7, "200 ms"},
8093 { 0, NULL }
8096 static const value_string gsm_a_rr_drx_timer_max_vals[] = {
8097 { 0, "0 s"},
8098 { 1, "1 s"},
8099 { 2, "2 s"},
8100 { 3, "4 s"},
8101 { 4, "8 s"},
8102 { 5, "16 s"},
8103 { 6, "32 s"},
8104 { 7, "64 s"},
8105 { 0, NULL }
8108 static const true_false_string gsm_a_rr_access_burst_type_value = {
8109 "11-bit format shall be used",
8110 "8-bit format shall be used"
8113 static const true_false_string gsm_a_rr_control_ack_type_value = {
8114 "Default format is RLC/MAC control block",
8115 "Default format is four access bursts"
8118 static const value_string gsm_a_rr_pan_max_vals[] = {
8119 { 0, "maximum value allowed for counter N3102 is 4"},
8120 { 1, "maximum value allowed for counter N3102 is 8"},
8121 { 2, "maximum value allowed for counter N3102 is 12"},
8122 { 3, "maximum value allowed for counter N3102 is 16"},
8123 { 4, "maximum value allowed for counter N3102 is 20"},
8124 { 5, "maximum value allowed for counter N3102 is 24"},
8125 { 6, "maximum value allowed for counter N3102 is 28"},
8126 { 7, "maximum value allowed for counter N3102 is 32"},
8127 { 0, NULL }
8130 static const true_false_string gsm_a_rr_egprs_packet_channel_request_value = {
8131 "Use two phase packet access with PACKET CHANNEL REQUEST message for uplink TBF establishment on the PRACH",
8132 "Use EGPRS PACKET CHANNEL REQUEST message for uplink TBF establishment on the PRACH"
8135 static const value_string gsm_a_rr_bep_period_vals[] = {
8136 { 0, "1"},
8137 { 1, "2"},
8138 { 2, "3"},
8139 { 3, "4"},
8140 { 4, "5"},
8141 { 5, "7"},
8142 { 6, "10"},
8143 { 7, "12"},
8144 { 8, "15"},
8145 { 9, "20"},
8146 { 10, "25"},
8147 { 11, "Reserved"},
8148 { 12, "Reserved"},
8149 { 13, "Reserved"},
8150 { 14, "Reserved"},
8151 { 15, "Reserved"},
8152 { 0, NULL }
8155 static const true_false_string gsm_a_rr_pfc_feature_mode_value = {
8156 "The network supports packet flow context procedures",
8157 "The network does not support packet flow context procedures"
8160 static const true_false_string gsm_a_rr_dtm_support_value = {
8161 "The cell supports DTM procedures",
8162 "The cell does not support DTM procedures"
8165 static const true_false_string gsm_a_rr_bss_paging_coordination_value = {
8166 "The cell supports Circuit-Switched paging coordination",
8167 "The cell does not support Circuit-Switched paging coordination"
8170 static const true_false_string gsm_a_rr_ccn_active_value = {
8171 "CCN is enabled in the cell",
8172 "CCN is disabled in the cell"
8175 static const true_false_string gsm_a_rr_nw_ext_utbf_value = {
8176 "The extended uplink TBF mode is supported by the network",
8177 "The extended uplink TBF mode is not supported by the network"
8180 static const true_false_string gsm_a_rr_multiple_tbf_capability_value = {
8181 "The cell supports multiple TBF procedures",
8182 "The cell does not support multiple TBF procedures"
8185 static const true_false_string gsm_a_rr_ext_utbf_no_data_value = {
8186 "The mobile station may refrain from sending a PACKET UPLINK DUMMY CONTROL BLOCK message when there is no other RLC/MAC block ready to send in an uplink radio block allocated by the network",
8187 "The mobile station shall send a PACKET UPLINK DUMMY CONTROL BLOCK message when there is no other RLC/MAC block ready to send in an uplink radio block allocated by the network"
8190 static const true_false_string gsm_a_rr_dtm_enhancements_capability_value = {
8191 "The cell supports enhanced DTM CS establishment and enhanced DTM CS release procedures",
8192 "The cell does not support enhanced DTM CS establishment and enhanced DTM CS release procedures"
8195 static const true_false_string gsm_a_rr_reduced_latency_access_value = {
8196 "The cell supports \"One Phase Access Request by Reduced Latency MS\"",
8197 "The cell does not support \"One Phase Access Request by Reduced Latency MS\""
8200 static const value_string gsm_a_rr_alpha_vals[] = {
8201 { 0, "0.0"},
8202 { 1, "0.1"},
8203 { 2, "0.2"},
8204 { 3, "0.3"},
8205 { 4, "0.4"},
8206 { 5, "0.5"},
8207 { 6, "0.6"},
8208 { 7, "0.7"},
8209 { 8, "0.8"},
8210 { 9, "0.9"},
8211 { 10, "1.0"},
8212 { 11, "1.0"},
8213 { 12, "1.0"},
8214 { 13, "1.0"},
8215 { 14, "1.0"},
8216 { 15, "1.0"},
8217 { 0, NULL }
8220 static const value_string gsm_a_rr_t_avg_x_vals[] = {
8221 { 0, "2^(0/2) / 6 multiframes"},
8222 { 1, "2^(1/2) / 6 multiframes"},
8223 { 2, "2^(2/2) / 6 multiframes"},
8224 { 3, "2^(3/2) / 6 multiframes"},
8225 { 4, "2^(4/2) / 6 multiframes"},
8226 { 5, "2^(5/2) / 6 multiframes"},
8227 { 6, "2^(6/2) / 6 multiframes"},
8228 { 7, "2^(7/2) / 6 multiframes"},
8229 { 8, "2^(8/2) / 6 multiframes"},
8230 { 9, "2^(9/2) / 6 multiframes"},
8231 { 10, "2^(10/2) / 6 multiframes"},
8232 { 11, "2^(11/2) / 6 multiframes"},
8233 { 12, "2^(12/2) / 6 multiframes"},
8234 { 13, "2^(13/2) / 6 multiframes"},
8235 { 14, "2^(14/2) / 6 multiframes"},
8236 { 15, "2^(15/2) / 6 multiframes"},
8237 { 16, "2^(16/2) / 6 multiframes"},
8238 { 17, "2^(17/2) / 6 multiframes"},
8239 { 18, "2^(18/2) / 6 multiframes"},
8240 { 19, "2^(19/2) / 6 multiframes"},
8241 { 20, "2^(20/2) / 6 multiframes"},
8242 { 21, "2^(21/2) / 6 multiframes"},
8243 { 22, "2^(22/2) / 6 multiframes"},
8244 { 23, "2^(23/2) / 6 multiframes"},
8245 { 24, "2^(24/2) / 6 multiframes"},
8246 { 25, "2^(25/2) / 6 multiframes"},
8247 { 26, "2^(25/2) / 6 multiframes"},
8248 { 27, "2^(25/2) / 6 multiframes"},
8249 { 28, "2^(25/2) / 6 multiframes"},
8250 { 29, "2^(25/2) / 6 multiframes"},
8251 { 30, "2^(25/2) / 6 multiframes"},
8252 { 31, "2^(25/2) / 6 multiframes"},
8253 { 0, NULL }
8256 static const true_false_string gsm_a_rr_pc_meas_chan_value = {
8257 "Downlink measurements for power control shall be made on PDCH",
8258 "Downlink measurements for power control shall be made on BCCH"
8261 static const value_string gsm_a_rr_n_avg_i_vals[] = {
8262 { 0, "2^(0/2)"},
8263 { 1, "2^(1/2)"},
8264 { 2, "2^(2/2)"},
8265 { 3, "2^(3/2)"},
8266 { 4, "2^(4/2)"},
8267 { 5, "2^(5/2)"},
8268 { 6, "2^(6/2)"},
8269 { 7, "2^(7/2)"},
8270 { 8, "2^(8/2)"},
8271 { 9, "2^(9/2)"},
8272 { 10, "2^(10/2)"},
8273 { 11, "2^(11/2)"},
8274 { 12, "2^(12/2)"},
8275 { 13, "2^(13/2)"},
8276 { 14, "2^(14/2)"},
8277 { 15, "2^(15/2)"},
8278 { 0, NULL }
8281 static const true_false_string gsm_a_rr_sgsnr_value = {
8282 "SGSN is Release '99 onwards",
8283 "SGSN is Release '98 or older"
8286 static const true_false_string gsm_a_rr_si_status_ind_value = {
8287 "The network supports the PACKET SI STATUS message",
8288 "The network does not support the PACKET SI STATUS message"
8291 static const value_string gsm_a_rr_lb_ms_txpwr_max_cch_vals[] = {
8292 { 0, "43 dBm"},
8293 { 1, "41 dBm"},
8294 { 2, "39 dBm"},
8295 { 3, "37 dBm"},
8296 { 4, "35 dBm"},
8297 { 5, "33 dBm"},
8298 { 6, "31 dBm"},
8299 { 7, "29 dBm"},
8300 { 8, "27 dBm"},
8301 { 9, "25 dBm"},
8302 { 10, "23 dBm"},
8303 { 11, "21 dBm"},
8304 { 12, "19 dBm"},
8305 { 13, "17 dBm"},
8306 { 14, "15 dBm"},
8307 { 15, "13 dBm"},
8308 { 16, "11 dBm"},
8309 { 17, "9 dBm"},
8310 { 18, "7 dBm"},
8311 { 19, "5 dBm"},
8312 { 20, "5 dBm"},
8313 { 21, "5 dBm"},
8314 { 22, "5 dBm"},
8315 { 23, "5 dBm"},
8316 { 24, "5 dBm"},
8317 { 25, "5 dBm"},
8318 { 26, "5 dBm"},
8319 { 27, "5 dBm"},
8320 { 28, "5 dBm"},
8321 { 29, "5 dBm"},
8322 { 30, "5 dBm"},
8323 { 31, "5 dBm"},
8324 { 0, NULL }
8327 static const value_string gsm_a_rr_si2n_support_vals[] = {
8328 { 0, "SI2n is not supported"},
8329 { 1, "SI2n is supported on PACCH"},
8330 { 2, "SI2n is supported on PACCH and broadcast on BCCH"},
8331 { 3, "SI2n is supported on PACCH and broadcast on BCCH Ext"},
8332 { 0, NULL }
8335 static const value_string gsm_a_rr_peo_dsc_vals[] = {
8336 { 0, "DSC = 4" },
8337 { 1, "DSC = 6" },
8338 { 2, "DSC = 8" },
8339 { 3, "DSC = 10" },
8340 { 0, NULL }
8343 static const value_string gsm_a_rr_c1_delta_min_vals[] = {
8344 { 0, "3 dB" },
8345 { 1, "6 dB" },
8346 { 2, "9 dB" },
8347 { 3, "12 dB" },
8348 { 0, NULL }
8351 static const value_string gsm_a_rr_c1_delta_max_vals[] = {
8352 { 0, "3 dB" },
8353 { 1, "6 dB" },
8354 { 2, "9 dB" },
8355 { 3, "12 dB" },
8356 { 4, "15 dB" },
8357 { 5, "18 dB" },
8358 { 6, "21 dB" },
8359 { 7, "24 dB" },
8360 { 0, NULL }
8363 static const true_false_string gsm_si_change_alt_value = {
8364 "A mobile station supporting network sharing should not attempt to re-read the SI2quater message",
8365 "A mobile station supporting network sharing shall fully take into account a change of system information \nsignalled by the SI_CHANGE_FIELD value '2', SI2quater included"
8368 static uint16_t
8369 de_rr_si13_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
8371 proto_tree *subtree2;
8372 proto_item *item2;
8373 unsigned bit_offset, bit_offset_sav;
8374 uint8_t tvb_len = tvb_reported_length(tvb);
8375 uint16_t bit_len = tvb_len << 3;
8376 bit_offset = offset << 3;
8378 if (gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_si13_contents))
8380 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_bcch_change_mark, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
8381 bit_offset += 3;
8382 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_si_change_field, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
8383 bit_offset += 4;
8384 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_si13_change_mark_present))
8386 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_si13_change_mark, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
8387 bit_offset += 2;
8388 bit_offset += de_rr_rest_oct_gprs_mobile_allocation(tvb, subtree, bit_offset);
8390 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_pbcch))
8391 { /* PBCCH present in the cell */
8392 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_psi1_repeat_period, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
8393 bit_offset += 4;
8394 bit_offset_sav = bit_offset;
8395 subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_PBCCH_DESC], &item2,
8396 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_PBCCH_DESC]);
8397 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_pbcch_pb, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
8398 bit_offset += 4;
8399 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_pbcch_tsc, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
8400 bit_offset += 3;
8401 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_pbcch_tn, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
8402 bit_offset += 3;
8403 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_maio_present))
8405 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_maio, tvb, bit_offset, 6, ENC_BIG_ENDIAN);
8406 bit_offset += 6;
8408 else
8410 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_arfcn_present))
8412 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_arfcn, tvb, bit_offset, 10, ENC_BIG_ENDIAN);
8413 bit_offset += 10;
8415 else
8416 proto_tree_add_item(subtree2, hf_gsm_a_rr_pbcch_use_bcch, tvb, bit_offset>>3, 1, ENC_NA);
8418 proto_item_set_len(item2, (bit_offset>>3) - (bit_offset_sav>>3)+1);
8420 else
8421 { /* PBCCH not present in the cell */
8422 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_rac, tvb, bit_offset, 8, ENC_BIG_ENDIAN);
8423 bit_offset += 8;
8424 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_spgc_ccch_sup, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
8425 bit_offset += 1;
8426 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_priority_access_thr, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
8427 bit_offset += 3;
8428 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_network_control_order, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
8429 bit_offset += 2;
8430 bit_offset += de_rr_rest_oct_gprs_cell_options(tvb, subtree, bit_offset);
8431 bit_offset += de_rr_rest_oct_gprs_power_control_parameters(tvb, subtree, bit_offset);
8434 /* Null breakpoint */
8435 if (bit_offset < bit_len)
8437 if (gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_additions_in_r99))
8438 { /* Additions in release 99 */
8439 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_sgsnr, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
8440 bit_offset += 1;
8442 /* Null breakpoint */
8443 if (bit_offset < bit_len)
8445 if (gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_additions_in_rel_4))
8446 { /* Additions in release Rel-4 */
8447 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_si_status_ind, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
8448 bit_offset += 1;
8450 /* Null breakpoint */
8451 if (bit_offset < bit_len)
8453 if (gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_additions_in_rel_6))
8454 { /* Additions in release Rel-6 */
8455 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_lb_ms_txpwr_max_cch_present))
8457 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_lb_ms_txpwr_max_cch, tvb, bit_offset, 5, ENC_BIG_ENDIAN);
8458 bit_offset += 5;
8460 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_si2n_support, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
8461 bit_offset += 2;
8463 (void)gsm_rr_csn_HL_flag(tvb, subtree, 0, bit_offset++, hf_gsm_a_rr_si_change_alt);
8465 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_peo_dsc_and_rcc_present))
8467 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_peo_dsc, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
8468 bit_offset += 2;
8469 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_rcc, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
8470 bit_offset += 3;
8473 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_c1_delta_present))
8475 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_c1_delta_min, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
8476 bit_offset += 2;
8477 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_c1_delta_max, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
8478 bit_offset += 3;
8487 gsm_rr_padding_bits(subtree, tvb, bit_offset, tvb_len, PADDING_BYTE);
8488 return tvb_len - offset;
8491 /* [3] 10.5.2.37c (void)
8492 * [3] 10.5.2.37d (void)
8493 * [3] 10.5.2.37e SI 16 Rest Octets
8494 * [3] 10.5.2.37f SI 17 Rest Octets
8495 * [3] 10.5.2.37g SI 19 Rest Octets
8496 * [3] 10.5.2.37h SI 18 Rest Octets
8497 * [3] 10.5.2.37i SI 20 Rest Octets
8501 * [3] 10.5.2.37m SI 21 Rest Octets
8503 static uint16_t
8504 de_rr_si21_rest_oct(tvbuff_t *tvb, proto_tree *subtree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
8506 proto_tree *subtree2;
8507 proto_item *item2;
8508 uint32_t curr_offset;
8509 int bit_offset, bit_offset_sav;
8510 uint8_t tvb_len = tvb_reported_length(tvb);
8512 curr_offset = offset;
8513 bit_offset = curr_offset << 3;
8515 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_si21_change_mark, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
8516 bit_offset += 2;
8517 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_si21_index, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
8518 bit_offset += 3;
8519 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_si21_count, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
8520 bit_offset += 3;
8521 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_eab_parameters))
8523 bit_offset_sav = bit_offset;
8524 subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset >> 3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EAB_PARAM_DESC], &item2,
8525 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EAB_PARAM_DESC]);
8527 /* EAB Authorization mask */
8528 proto_tree_add_bits_item(subtree2, hf_gsm_a_rr_eab_auth_mask, tvb, bit_offset, 10, ENC_BIG_ENDIAN);
8529 bit_offset += 10;
8530 /* EAB Subcategory */
8531 proto_tree_add_bits_item(subtree2, hf_gsm_a_eab_subcategory, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
8532 bit_offset += 2;
8534 proto_item_set_len(item2, (bit_offset >> 3) - (bit_offset_sav >> 3) + 1);
8536 gsm_rr_padding_bits(subtree, tvb, bit_offset, tvb_len, PADDING_BYTE);
8537 return tvb_len - offset;
8541 * [3] 10.5.2.38 Starting Time
8543 static uint16_t
8544 de_rr_starting_time(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
8546 proto_item *item;
8547 uint32_t curr_offset;
8548 uint16_t rfn;
8550 curr_offset = offset;
8552 rfn = parse_reduced_frame_number(tvb, curr_offset);
8553 proto_tree_add_item(tree, hf_gsm_a_rr_T1prim, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
8554 proto_tree_add_item(tree, hf_gsm_a_rr_T3, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
8555 curr_offset++;
8556 proto_tree_add_item(tree, hf_gsm_a_rr_T2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
8557 curr_offset++;
8558 item = proto_tree_add_uint(tree, hf_gsm_a_rr_rfn, tvb, curr_offset-2, 2, rfn);
8559 proto_item_set_generated(item);
8560 return curr_offset - offset;
8563 * [3] 10.5.2.39 Synchronization Indication
8566 * ROT: Report Observed Time Difference (Octet1 bit 3) */
8568 static const true_false_string sm_a_rr_sync_ind_rot_value = {
8569 "Mobile Time Difference IE shall be included in the HANDOVER COMPLETE message",
8570 "Mobile Time Difference IE shall not be included in the HANDOVER COMPLETE message"
8573 /* SI: Synchronization indication (octet 1)Bit2 1 */
8575 static const value_string gsm_a_rr_sync_ind_si_vals[] = {
8576 { 0, "Non-synchronized"},
8577 { 1, "Synchronized"},
8578 { 2, "Pre-synchronised"},
8579 { 3, "Pseudo-synchronised"},
8580 { 0, NULL }
8582 /* NCI: Normal cell indication (octet 1, bit 4) */
8584 static const true_false_string gsm_a_rr_sync_ind_nci_value = {
8585 "Out of range timing advance shall trigger a handover failure procedure",
8586 "Out of range timing advance is ignored"
8588 static uint16_t
8589 de_rr_sync_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
8591 uint32_t curr_offset;
8593 curr_offset = offset;
8595 /*NCI */
8596 proto_tree_add_item(tree, hf_gsm_a_rr_sync_ind_nci, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
8597 /*ROT */
8598 proto_tree_add_item(tree, hf_gsm_a_rr_sync_ind_rot, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
8599 /*SI*/
8600 proto_tree_add_item(tree, hf_gsm_a_rr_sync_ind_si, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
8602 curr_offset = curr_offset + 1;
8604 return curr_offset - offset;
8608 * [3] 10.5.2.40 Timing Advance
8610 static uint16_t
8611 de_rr_timing_adv(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
8613 uint32_t curr_offset;
8615 curr_offset = offset;
8617 proto_tree_add_item(tree, hf_gsm_a_rr_timing_adv, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
8618 curr_offset = curr_offset + 1;
8620 return curr_offset - offset;
8624 * [3] 10.5.2.41 Time Difference
8626 static uint16_t
8627 de_rr_time_diff(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
8629 uint32_t curr_offset;
8631 curr_offset = offset;
8633 proto_tree_add_item(tree, hf_gsm_a_rr_time_diff, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
8634 curr_offset = curr_offset + 1;
8636 return curr_offset - offset;
8639 * [3] 10.5.2.41a TLLI
8640 * The TLLI is encoded as a binary number with a length of 4 octets. TLLI is defined in 3GPP TS 23.003
8642 uint16_t
8643 de_rr_tlli(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
8645 uint32_t curr_offset, tlli;
8647 curr_offset = offset;
8649 tlli = tvb_get_ntohl(tvb, curr_offset);
8650 proto_tree_add_item(tree, hf_gsm_a_rr_tlli, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
8652 if(gsm_a_rr_nri_length > 0) {
8653 /* NRI is in second byte of TLLI */
8654 proto_tree_add_bits_item(tree, hf_gsm_a_rr_nri, tvb, (curr_offset+1)*8, gsm_a_rr_nri_length, ENC_BIG_ENDIAN);
8657 curr_offset = curr_offset + 4;
8658 if(add_string)
8659 snprintf(add_string, string_len, " - 0x%x", tlli);
8661 return curr_offset - offset;
8665 * [3] 10.5.2.42 TMSI/P-TMSI
8667 static uint16_t
8668 de_rr_tmsi_ptmsi(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
8670 proto_tree *subtree;
8671 uint32_t curr_offset;
8673 curr_offset = offset;
8675 subtree = proto_tree_add_subtree(tree, tvb, curr_offset, 3, ett_gsm_rr_elem[DE_RR_TMSI_PTMSI], NULL,
8676 val_to_str_ext_const(DE_RR_TMSI_PTMSI, &gsm_rr_elem_strings_ext, ""));
8678 proto_tree_add_item(subtree, hf_gsm_a_tmsi, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
8679 curr_offset = curr_offset + 4;
8681 return curr_offset - offset;
8685 * [3] 10.5.2.42a VGCS target mode Indication
8688 Target mode (octet 3)
8689 Bit 8 7
8690 0 0 dedicated mode
8691 0 1 group transmit mode
8692 Other values are reserved for future use.
8694 static const value_string gsm_a_rr_target_mode_vals[] _U_ = {
8695 { 0, "Dedicated mode"},
8696 { 1, "Group transmit mode"},
8697 { 0, NULL }
8699 static uint16_t
8700 de_rr_vgcs_tar_mode_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
8702 uint32_t curr_offset;
8704 curr_offset = offset;
8706 proto_tree_add_item(tree, hf_gsm_a_rr_target_mode, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
8707 proto_tree_add_item(tree, hf_gsm_a_rr_group_cipher_key_number, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
8708 curr_offset = curr_offset + 1;
8710 return curr_offset - offset;
8714 * [3] 10.5.2.42b VGCS Ciphering Parameters
8716 static uint16_t
8717 de_rr_vgcs_cip_par(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
8719 uint32_t curr_offset;
8721 curr_offset = offset;
8723 proto_tree_add_expert_format(tree, pinfo, &ei_gsm_a_rr_data_not_dissected, tvb, curr_offset, len, "Data (Not decoded)");
8725 curr_offset = curr_offset + 2;
8727 return curr_offset - offset;
8730 * [3] 10.5.2.43 Wait Indication
8732 static uint16_t
8733 de_rr_wait_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
8735 uint32_t curr_offset;
8737 curr_offset = offset;
8739 proto_tree_add_item(tree, hf_gsm_a_rr_wait_indication, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
8741 curr_offset = curr_offset + 1;
8743 return curr_offset - offset;
8747 * [3] 10.5.2.44 SI10 rest octets $(ASCI)$
8751 * [3] 10.5.2.45 Extended Measurement Results
8753 static uint16_t
8754 de_rr_ext_meas_result(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
8756 uint32_t curr_offset;
8757 int bit_offset, i;
8758 uint8_t value;
8760 curr_offset = offset;
8761 bit_offset = curr_offset << 3;
8763 proto_tree_add_bits_item(tree, hf_gsm_a_rr_seq_code, tvb,bit_offset, 1, ENC_BIG_ENDIAN);
8764 bit_offset += 1;
8765 proto_tree_add_bits_item(tree, hf_gsm_a_rr_dtx_used, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
8766 bit_offset += 1;
8767 for (i=0; i<21; i++)
8769 value = tvb_get_bits8(tvb,bit_offset,6);
8770 proto_tree_add_uint_format(tree, hf_gsm_a_rr_rxlev_carrier, tvb, bit_offset>>3, 1,
8771 value, "RXLEV carrier %d: %s (%d)", i, val_to_str_ext_const(value, &gsm_a_rr_rxlev_vals_ext, "Unknown"), value);
8772 bit_offset += 6;
8775 curr_offset = offset + len;
8777 return curr_offset - offset;
8781 * [3] 10.5.2.46 Extended Measurement Frequency List
8783 static uint16_t
8784 de_rr_ext_meas_freq_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
8786 uint32_t curr_offset;
8788 curr_offset = offset;
8790 proto_tree_add_bits_item(tree, hf_gsm_a_rr_seq_code, tvb,(curr_offset<<3)+3, 1, ENC_BIG_ENDIAN);
8792 return dissect_arfcn_list(tvb, tree, pinfo, offset, 16, add_string, string_len);
8796 * [3] 10.5.2.47 Suspension Cause
8798 /*Suspension cause value (octet 2)*/
8799 static const value_string gsm_a_rr_suspension_cause_vals[] = {
8800 { 0, "Emergency call, mobile originating call or call re-establishment"},
8801 { 1, "Location Area Update"},
8802 { 2, "MO Short message service"},
8803 { 3, "Other procedure which can be completed with an SDCCH"},
8804 { 4, "MO Voice broadcast or group call"},
8805 { 5, "Mobile terminating CS connection"},
8806 { 6, "DTM not supported in the cell"},
8807 { 0, NULL }
8809 uint16_t
8810 de_rr_sus_cau(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
8812 uint32_t curr_offset;
8814 curr_offset = offset;
8816 proto_tree_add_item(tree, hf_gsm_a_rr_suspension_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
8818 curr_offset = curr_offset + 1;
8820 return curr_offset - offset;
8823 * [3] 10.5.2.48 APDU ID
8825 static const value_string gsm_a_rr_apdu_id_vals[] = {
8826 { 0, "RRLP (GSM 04.31) LCS" },
8827 { 1, "ETWS (3GPP TS 23.041)" },
8828 { 0, NULL },
8830 static uint16_t
8831 de_rr_apdu_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
8833 uint32_t *ppi = wmem_new(pinfo->pool, uint32_t);
8834 proto_tree_add_item_ret_uint(tree, hf_gsm_a_rr_apdu_id, tvb, offset, 1, ENC_BIG_ENDIAN, ppi);
8835 p_add_proto_data(pinfo->pool, pinfo, proto_a_rr, pinfo->curr_layer_num, ppi);
8837 return 0;
8841 * [3] 10.5.2.49 APDU Flags
8842 * Please note that value 1 means "not".
8844 static const true_false_string gsm_a_rr_apdu_flags_cr_value = {
8845 "Not Command or Final Response",
8846 "Command or Final Response",
8848 static const true_false_string gsm_a_rr_apdu_flags_fs_value = {
8849 "Not first or only segment",
8850 "First or only segment",
8852 static const true_false_string gsm_a_rr_apdu_flags_ls_value = {
8853 "Not last or only segment",
8854 "Last or only segment",
8857 static uint16_t
8858 de_rr_apdu_flags(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
8860 proto_tree_add_item(tree, hf_gsm_a_rr_apdu_flags_cr, tvb, offset, 1, ENC_BIG_ENDIAN);
8861 proto_tree_add_item(tree, hf_gsm_a_rr_apdu_flags_fs, tvb, offset, 1, ENC_BIG_ENDIAN);
8862 proto_tree_add_item(tree, hf_gsm_a_rr_apdu_flags_ls, tvb, offset, 1, ENC_BIG_ENDIAN);
8864 return 1;
8868 * [3] 10.5.2.50 APDU Data
8870 static uint16_t
8871 de_rr_apdu_data(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
8873 proto_item *apdu_pi;
8874 proto_tree *apdu_tree;
8875 tvbuff_t *sub_tvb;
8876 uint32_t *ppi;
8878 apdu_pi = proto_tree_add_item(tree, hf_gsm_a_rr_apdu_data, tvb, offset, len, ENC_NA);
8879 apdu_tree = proto_item_add_subtree(apdu_pi, ett_apdu);
8880 sub_tvb = tvb_new_subset_length(tvb, offset, len);
8882 ppi = (uint32_t *) p_get_proto_data(pinfo->pool, pinfo, proto_a_rr, pinfo->curr_layer_num);
8883 if (ppi && *ppi == 0 && rrlp_dissector)
8884 call_dissector(rrlp_dissector, sub_tvb,pinfo, apdu_tree);
8886 return len;
8890 * [3] 10.5.2.51 Handover To UTRAN Command
8892 static uint16_t
8893 de_rr_ho_to_utran_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
8895 uint32_t curr_offset;
8896 tvbuff_t *rrc_irat_ho_to_utran_cmd_tvb;
8898 curr_offset = offset;
8899 if (len)
8901 rrc_irat_ho_to_utran_cmd_tvb = tvb_new_subset_length(tvb, curr_offset, len);
8902 if (rrc_irat_ho_to_utran_cmd_handle)
8903 call_dissector(rrc_irat_ho_to_utran_cmd_handle, rrc_irat_ho_to_utran_cmd_tvb, pinfo, tree);
8906 curr_offset += len;
8907 return curr_offset - offset;
8912 * [3] 10.5.2.52 Handover To cdma2000 Command
8913 * [3] 10.5.2.53 (void)
8914 * [3] 10.5.2.54 (void)
8915 * [3] 10.5.2.55 (void)
8916 * [3] 10.5.2.56 3G Target Cell
8919 * 10.5.2.57 Service Support
8921 static const true_false_string gsm_a_rr_MBMS_multicast_value = {
8922 "mobile station requires notification of multicast MBMS services",
8923 "mobile station does not require notification of multicast MBMS services"
8925 static const true_false_string gsm_a_rr_MBMS_broadcast_value = {
8926 "mobile station requires notification of broadcast MBMS services",
8927 "mobile station does not require notification of broadcast MBMS services"
8929 static uint16_t
8930 de_rr_serv_sup(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
8932 uint32_t curr_offset;
8934 curr_offset = offset;
8935 /* bit 1
8936 * 0 mobile station does not require notification of broadcast MBMS services
8937 * 1 mobile station requires notification of broadcast MBMS services
8938 * bit 2
8939 * 0 mobile station does not require notification of multicast MBMS services
8940 * 1 mobile station requires notification of multicast MBMS services
8942 /* MBMS Multicast */
8943 proto_tree_add_item(tree, hf_gsm_a_rr_MBMS_multicast, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
8945 /* MBMS Broadcast */
8946 proto_tree_add_item(tree, hf_gsm_a_rr_MBMS_broadcast, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
8947 curr_offset++;
8949 return curr_offset - offset;
8953 * [3] 10.5.2.59 Dedicated Service Information
8956 Last Segment (octet 2)
8957 bit 1
8958 0 mobile station shall not perform Service Information Sending procedure on new cell.
8959 1 mobile station shall perform Service Information Sending procedure on new cell.
8961 static const true_false_string gsm_a_rr_last_segment_value = {
8962 "Mobile station shall perform Service Information Sending procedure on new cell.",
8963 "mobile station shall not perform Service Information Sending procedure on new cell."
8965 static uint16_t
8966 de_rr_ded_serv_inf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
8968 uint32_t curr_offset;
8970 curr_offset = offset;
8972 proto_tree_add_item(tree, hf_gsm_a_rr_last_segment, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
8974 curr_offset = curr_offset + 3;
8976 return curr_offset - offset;
8980 * [3] 10.5.2.69 Carrier Indication
8982 static const true_false_string gsm_a_rr_carrier_ind_value = {
8983 "Carrier 2",
8984 "Carrier 1"
8987 static uint16_t
8988 de_rr_carrier_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
8990 proto_tree *subtree;
8991 uint32_t curr_offset;
8993 curr_offset = offset;
8995 subtree = proto_tree_add_subtree(tree, tvb, curr_offset, 3, ett_gsm_rr_elem[DE_RR_CARRIER_IND], NULL,
8996 val_to_str_ext_const(DE_RR_CARRIER_IND, &gsm_rr_elem_strings_ext, ""));
8998 proto_tree_add_item(subtree, hf_gsm_a_rr_carrier_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
9000 curr_offset += 1;
9002 return curr_offset - offset;
9006 * [3] 10.5.2.76 Feature Indicator
9008 static const true_false_string gsm_a_rr_feat_ind_cs_ir = {
9009 "An implicit reject is indicated for the CS domain",
9010 "An implicit reject is not indicated for the CS domain"
9013 static const true_false_string gsm_a_rr_feat_ind_ps_ir = {
9014 "An implicit reject is indicated for the PS domain",
9015 "An implicit reject is not indicated for the PS domain"
9018 static uint16_t
9019 de_rr_feature_indicator(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
9021 uint32_t curr_offset;
9023 curr_offset = offset;
9025 proto_tree_add_bits_item(tree, hf_gsm_a_rr_peo_bcch_change_mark, tvb, curr_offset << 3, 2, ENC_BIG_ENDIAN);
9026 proto_tree_add_bits_item(tree, hf_gsm_a_rr_feat_ind_cs_ir, tvb, (curr_offset<<3)+2, 1, ENC_BIG_ENDIAN);
9027 proto_tree_add_bits_item(tree, hf_gsm_a_rr_feat_ind_ps_ir, tvb, (curr_offset<<3)+3, 1, ENC_BIG_ENDIAN);
9029 curr_offset += 1;
9031 return curr_offset - offset;
9035 * [3] 10.5.2.8 Extended TSC Set
9037 static const value_string gsm_a_rr_cs_tsc_set_vals[] = {
9038 { 0, "TSC set 1" },
9039 { 1, "TSC set 2" },
9040 { 2, "TSC set 3" },
9041 { 3, "TSC set 4" },
9042 { 0, NULL }
9045 static const value_string gsm_a_rr_ps_tsc_set_vals[] = {
9046 { 0, "TSC set 1" },
9047 { 1, "TSC set 2 for 8PSK, 16QAM and 32QAM or TSC set 3 for GMSK" },
9048 { 0, NULL }
9051 static uint16_t
9052 de_rr_extended_tsc_set(tvbuff_t *tvb, proto_tree *tree,
9053 packet_info *pinfo _U_, uint32_t offset, unsigned len _U_,
9054 char *add_string _U_, int string_len _U_)
9056 proto_tree_add_item(tree, hf_gsm_a_rr_cs_tsc_set, tvb, offset, 1, ENC_NA);
9057 proto_tree_add_item(tree, hf_gsm_a_rr_ps_sd_tsc_ass, tvb, offset, 1, ENC_NA);
9058 proto_tree_add_item(tree, hf_gsm_a_rr_ps_pd_tsc_set, tvb, offset, 1, ENC_NA);
9059 proto_tree_add_item(tree, hf_gsm_a_rr_ps_sd_tsc_set, tvb, offset, 1, ENC_NA);
9060 proto_tree_add_item(tree, hf_gsm_a_rr_ps_sd_tsc_val, tvb, offset, 1, ENC_NA);
9061 return 1;
9065 * 10.5.2.83 EC Request reference
9067 static uint16_t
9068 de_rr_ec_request_reference(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t bit_offset, char *add_string)
9070 proto_tree *subtree;
9071 uint32_t curr_bit_offset = bit_offset;
9073 subtree = proto_tree_add_subtree_format(tree, tvb, curr_bit_offset>>3, 2, ett_gsm_rr_elem[DE_RR_EC_REQUEST_REFERENCE], NULL,
9074 "%s%s", val_to_str_ext_const(DE_RR_EC_REQUEST_REFERENCE, &gsm_rr_elem_strings_ext, ""),
9075 (add_string == NULL) || (add_string[0] == '\0') ? "" : add_string);
9077 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_ec_last_tdma_frame, tvb, curr_bit_offset, 10, ENC_BIG_ENDIAN);
9078 curr_bit_offset += 10;
9080 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_ec_echoed_random_bits, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
9081 curr_bit_offset += 3;
9083 return curr_bit_offset-bit_offset; /*Bits!*/
9087 * [3] 10.5.2.84 EC Packet Channel Description type 1
9089 static void
9090 gsm_a_rr_ec_ma_number_fmt(char *s, uint32_t v)
9092 snprintf(s, ITEM_LABEL_LENGTH, "EC-EGPRS Mobile Allocation set %u (%u)", v+1, v);
9095 static uint16_t
9096 de_rr_ec_pkt_ch_dsc1(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
9098 uint32_t curr_offset;
9099 uint32_t bit_offset;
9101 curr_offset = offset;
9102 bit_offset = curr_offset << 3;
9104 proto_tree_add_bits_item(tree, hf_gsm_a_rr_ec_qhfi, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
9105 bit_offset += 2;
9106 proto_tree_add_bits_item(tree, hf_gsm_a_rr_ec_dl_cc, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
9107 bit_offset += 2;
9108 proto_tree_add_bits_item(tree, hf_gsm_a_rr_ec_ul_cc, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
9109 bit_offset += 2;
9110 proto_tree_add_bits_item(tree, hf_gsm_a_rr_tsc_set, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
9111 bit_offset += 1;
9112 proto_tree_add_bits_item(tree, hf_gsm_a_rr_ec_tsc, tvb, bit_offset, 3, ENC_BIG_ENDIAN); /*FIXME: use same tsc variable as other msgs (doesn't work with bits_item)*/
9113 bit_offset += 3;
9114 proto_tree_add_bits_item(tree, hf_gsm_a_rr_ec_ma_number, tvb, bit_offset, 5, ENC_BIG_ENDIAN);
9116 return 2;
9121 * [3] 10.5.2.85 EC Packet Channel Description type 2
9123 static uint16_t
9124 de_rr_ec_pkt_ch_dsc2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t bit_offset)
9126 proto_tree *subtree;
9127 uint32_t curr_bit_offset = bit_offset;
9129 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, 2, ett_gsm_rr_elem[DE_RR_EC_PKT_CH_DSC2], NULL,
9130 val_to_str_ext_const(DE_RR_EC_PKT_CH_DSC2, &gsm_rr_elem_strings_ext, ""));
9132 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_ec_qhfi, tvb, curr_bit_offset, 2, ENC_BIG_ENDIAN);
9133 curr_bit_offset += 2;
9134 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_ec_dl_cc, tvb, curr_bit_offset, 2, ENC_BIG_ENDIAN);
9135 curr_bit_offset += 2;
9136 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_ec_ul_cc, tvb, curr_bit_offset, 2, ENC_BIG_ENDIAN);
9137 curr_bit_offset += 2;
9138 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_tsc_set, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
9139 curr_bit_offset += 1;
9140 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_ec_tsc, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN); /*FIXME: use same tsc variable as other msgs (doesn't work with bits_item)*/
9141 curr_bit_offset += 3;
9142 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_ec_ma_number, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
9143 curr_bit_offset += 5;
9145 return curr_bit_offset-bit_offset; /*Bits!*/
9149 * [3] 10.5.2.86 EC Fixed Uplink Allocation
9151 static uint16_t
9152 de_rr_ec_fua(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
9154 uint32_t bit_offset;
9156 bit_offset = offset << 3;
9158 proto_tree_add_bits_item(tree, hf_gsm_a_rr_ec_enhanced_access_burst, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
9159 bit_offset +=1;
9161 if (gsm_rr_csn_flag(tvb, tree, bit_offset++, hf_gsm_a_rr_timing_adv_present))
9162 { /* Timing Advance Description */
9163 proto_tree_add_bits_item(tree, hf_gsm_a_rr_timing_adv, tvb, bit_offset, 6, ENC_BIG_ENDIAN);
9164 bit_offset += 6;
9167 proto_tree_add_bits_item(tree, hf_gsm_a_rr_ec_starting_ul_timeslot, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
9168 bit_offset += 3;
9169 proto_tree_add_bits_item(tree, hf_gsm_a_rr_tfi_assignment, tvb, bit_offset, 5, ENC_BIG_ENDIAN);
9170 bit_offset += 5;
9171 proto_tree_add_bits_item(tree, hf_gsm_a_rr_ec_starting_dl_timeslot_offset, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
9172 bit_offset += 2;
9174 proto_tree_add_bits_item(tree, hf_gsm_a_rr_ec_overlaid_cdma_code, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
9175 bit_offset += 2;
9177 if (gsm_rr_csn_flag(tvb, tree, bit_offset++, hf_gsm_a_rr_ec_mcs_exist))
9178 { /* MCS Description */
9179 proto_tree_add_bits_item(tree, hf_gsm_a_rr_egprs_mcs, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
9180 bit_offset += 4;
9183 proto_tree_add_bits_item(tree, hf_gsm_a_rr_gamma, tvb, bit_offset, 5, ENC_BIG_ENDIAN);
9184 bit_offset += 5;
9186 if (gsm_rr_csn_flag(tvb, tree, bit_offset++, hf_gsm_a_rr_p0_present))
9188 proto_tree_add_bits_item(tree, hf_gsm_a_rr_p0, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
9189 bit_offset += 4;
9190 proto_tree_add_bits_item(tree, hf_gsm_a_rr_pr_mode, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
9191 bit_offset += 1;
9194 proto_tree_add_bits_item(tree, hf_gsm_a_rr_ec_start_first_ul_data_block, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
9195 bit_offset += 4;
9197 while(gsm_rr_csn_flag(tvb, tree, bit_offset++, hf_gsm_a_rr_ec_fua_gap_list))
9199 if (!gsm_rr_csn_flag(tvb, tree, bit_offset++, hf_gsm_a_rr_ec_start_fn_next_data_block_exist))
9201 proto_tree_add_bits_item(tree, hf_gsm_a_rr_ec_start_fn_next_data_block, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
9202 bit_offset += 3;
9204 else
9206 proto_tree_add_uint(tree, hf_gsm_a_rr_ec_start_fn_next_data_block, tvb, (bit_offset>>3), 0, 0);
9210 return len;
9213 uint16_t (*rr_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string, int string_len) = {
9214 /* Radio Resource Management Information Elements 10.5.2, most are from 10.5.1 */
9216 de_rr_ba_range, /* [3] 10.5.2.1a BA Range */
9217 de_rr_cell_ch_dsc, /* [3] 10.5.2.1b Cell Channel Description */
9218 de_rr_ba_list_pref, /* [3] 10.5.2.1c BA List Pref */
9219 de_rr_utran_freq_list, /* [3] 10.5.2.1d UTRAN Frequency List */
9220 de_rr_cell_select_indic, /* [3] 10.5.2.1e Cell selection indicator after release of all TCH and SDCCH IE */
9221 de_rr_cell_dsc, /* 10.5.2.2 RR Cell Description */
9222 de_rr_cell_opt_bcch, /* [3] 10.5.2.3 Cell Options (BCCH) */
9223 de_rr_cell_opt_sacch, /* [3] 10.5.2.3a Cell Options (SACCH) */
9224 de_rr_cell_sel_param, /* [3] 10.5.2.4 Cell Selection Parameters */
9226 * [3] 10.5.2.4a (void)
9228 de_rr_ch_dsc, /* [3] 10.5.2.5 Channel Description */
9229 de_rr_ch_dsc2, /* [3] 10.5.2.5a RR Channel Description 2 */
9230 de_rr_ch_dsc3, /* [3] 10.5.2.5c RR Channel Description 3 */
9231 de_rr_ch_mode, /* [3] 10.5.2.6 Channel Mode */
9232 de_rr_ch_mode2, /* [3] 10.5.2.7 Channel Mode 2 */
9233 de_rr_utran_cm, /* [3] 10.5.2.7a UTRAN Classmark */
9234 /* [3] 10.5.2.7b (void) */
9236 de_rr_cm_enq_mask, /* [3] 10.5.2.7c Classmark Enquiry Mask */
9237 /* [3] 10.5.2.7d GERAN Iu Mode Classmark information element */
9238 de_rr_chnl_needed, /* [3] 10.5.2.8 Channel Needed
9239 * [3] 10.5.2.8a (void) */
9240 de_rr_chnl_req_desc2, /* [3] 10.5.2.8b Channel Request Description 2 */
9241 /* Pos 20 */
9242 de_rr_cip_mode_set, /* [3] 10.5.2.9 Cipher Mode Setting */
9243 de_rr_cip_mode_resp, /* [3] 10.5.2.10 Cipher Response */
9244 de_rr_ctrl_ch_desc, /* [3] 10.5.2.11 Control Channel Description */
9245 de_rr_dtm_info_details, /* [3] 10.5.2.11a DTM Information Details */
9246 de_rr_dyn_arfcn_map, /* [3] 10.5.2.11b Dynamic ARFCN Mapping */
9247 de_rr_freq_ch_seq, /* [3] 10.5.2.12 Frequency Channel Sequence */
9248 de_rr_freq_list, /* [3] 10.5.2.13 Frequency List */
9249 de_rr_freq_short_list, /* [3] 10.5.2.14 Frequency Short List */
9250 de_rr_freq_short_list2, /* [3] 10.5.2.14a Frequency Short List 2 */
9251 /* [3] 10.5.2.14b Group Channel Description */
9252 de_rr_gprs_resumption, /* [3] 10.5.2.14c GPRS Resumption */
9253 de_rr_gprs_broadcast_info, /* [3] 10.5.2.14d GPRS broadcast information */
9254 /* [3] 10.5.2.14e Enhanced DTM CS Release Indication */
9255 de_rr_ho_ref, /* 10.5.2.15 Handover Reference */
9256 de_rr_ia_rest_oct, /* [3] 10.5.2.16 IA Rest Octets */
9257 de_rr_iar_rest_oct, /* [3] 10.5.2.17 IAR Rest Octets */
9258 de_rr_iax_rest_oct, /* [3] 10.5.2.18 IAX Rest Octets */
9259 de_rr_l2_pseudo_len, /*[3] 10.5.2.19 L2 Pseudo Length */
9260 de_rr_meas_res, /* [3] 10.5.2.20 Measurement Results */
9262 * [3] (void)
9264 de_rr_mob_all, /* [3] 10.5.2.21 Mobile Allocation */
9265 de_rr_mob_time_diff, /* [3] 10.5.2.21a Mobile Time Difference */
9266 de_rr_multirate_conf, /* [3] 10.5.2.21aa MultiRate configuration */
9267 /* Pos 30 */
9268 de_rr_mult_all, /* [3] 10.5.2.21b Multislot Allocation */
9270 * [3] 10.5.2.21c (void)
9272 de_rr_neigh_cell_desc, /* [3] 10.5.2.22 Neighbour Cell Description */
9273 de_rr_neigh_cell_desc2, /* [3] 10.5.2.22a Neighbour Cell Description 2 */
9275 * [3] 10.5.2.22b (void)
9276 * [3] 10.5.2.22c NT/N Rest Octets */
9277 de_rr_p1_rest_oct, /* [3] 10.5.2.23 P1 Rest Octets */
9278 de_rr_p2_rest_oct, /* [3] 10.5.2.24 P2 Rest Octets */
9279 de_rr_p3_rest_oct, /* [3] 10.5.2.25 P3 Rest Octets */
9280 de_rr_packet_ch_desc, /* [3] 10.5.2.25a Packet Channel Description */
9281 de_rr_ded_mod_or_tbf, /* [3] 10.5.2.25b Dedicated mode or TBF */
9282 de_rr_pkt_ul_ass, /* [3] 10.5.2.25c RR Packet Uplink Assignment */
9283 de_rr_pkt_dl_ass, /* [3] 10.5.2.25d RR Packet Downlink Assignment */
9284 de_rr_pkt_dl_ass_type2, /* [3] 10.5.2.25e RR Packet Downlink Assignment Type 2 */
9285 de_rr_page_mode, /* [3] 10.5.2.26 Page Mode */
9287 * [3] 10.5.2.26a (void)
9288 * [3] 10.5.2.26b (void)
9289 * [3] 10.5.2.26c (void)
9290 * [3] 10.5.2.26d (void)
9292 de_rr_ncc_perm, /* [3] 10.5.2.27 NCC Permitted */
9293 de_rr_pow_cmd, /* 10.5.2.28 Power Command */
9294 de_rr_pow_cmd_and_acc_type, /* 10.5.2.28a Power Command and access type */
9295 de_rr_rach_ctrl_param, /* [3] 10.5.2.29 RACH Control Parameters */
9296 de_rr_req_ref, /* [3] 10.5.2.30 Request Reference */
9297 de_rr_cause, /* 10.5.2.31 RR Cause */
9298 de_rr_sync_ind, /* 10.5.2.39 Synchronization Indication */
9299 de_rr_si1_rest_oct, /* [3] 10.5.2.32 SI1 Rest Octets */
9300 /* [3] 10.5.2.33 SI 2bis Rest Octets */
9301 de_rr_si2ter_rest_oct, /* [3] 10.5.2.33a SI 2ter Rest Octets */
9302 de_rr_si2quater_rest_oct, /* [3] 10.5.2.33b SI 2quater Rest Octets */
9303 de_rr_si3_rest_oct, /* [3] 10.5.2.34 SI3 Rest Octets */
9304 de_rr_si4_rest_oct, /* [3] 10.5.2.35 SI4 Rest Octets */
9305 de_rr_si6_rest_oct, /* [3] 10.5.2.35b SI6 Rest Octets */
9306 /* [3] 10.5.2.36 SI 7 Rest Octets
9307 * [3] 10.5.2.37 SI 8 Rest Octets
9308 * [3] 10.5.2.37a SI 9 Rest Octets
9310 de_rr_si13_rest_oct, /* [3] 10.5.2.37a SI13 Rest Octets */
9311 /* [3] 10.5.2.37c (void)
9312 * [3] 10.5.2.37d (void)
9313 * [3] 10.5.2.37e SI 16 Rest Octets
9314 * [3] 10.5.2.37f SI 17 Rest Octets
9315 * [3] 10.5.2.37g SI 19 Rest Octets
9316 * [3] 10.5.2.37h SI 18 Rest Octets
9317 * [3] 10.5.2.37i SI 20 Rest Octets */
9318 de_rr_si21_rest_oct, /* [3] 10.5.2.37m SI21 Rest Octets */
9319 de_rr_starting_time, /* [3] 10.5.2.38 Starting Time */
9320 de_rr_timing_adv, /* [3] 10.5.2.40 Timing Advance */
9321 de_rr_time_diff, /* [3] 10.5.2.41 Time Difference */
9322 de_rr_tlli, /* [3] 10.5.2.41a TLLI */
9323 de_rr_tmsi_ptmsi, /* [3] 10.5.2.42 TMSI/P-TMSI */
9324 de_rr_vgcs_tar_mode_ind, /* [3] 10.5.2.42a VGCS target mode Indication */
9325 /* Pos 40 */
9326 de_rr_vgcs_cip_par, /* [3] 10.5.2.42b VGCS Ciphering Parameters */
9327 de_rr_wait_ind, /* [3] 10.5.2.43 Wait Indication */
9328 /* [3] 10.5.2.44 SI10 rest octets $(ASCI)$ */
9329 de_rr_ext_meas_result, /* [3] 10.5.2.45 Extended Measurement Results */
9330 de_rr_ext_meas_freq_list, /* [3] 10.5.2.46 Extended Measurement Frequency List */
9331 de_rr_sus_cau, /* [3] 10.5.2.47 Suspension Cause */
9332 de_rr_apdu_id, /* [3] 10.5.2.48 APDU ID */
9333 de_rr_apdu_flags, /* [3] 10.5.2.49 APDU Flags */
9334 de_rr_apdu_data, /* [3] 10.5.2.50 APDU Data */
9335 de_rr_ho_to_utran_cmd, /* [3] 10.5.2.51 Handover To UTRAN Command */
9336 /* [3] 10.5.2.52 Handover To cdma2000 Command
9337 * [3] 10.5.2.53 (void)
9338 * [3] 10.5.2.54 (void)
9339 * [3] 10.5.2.55 (void)
9340 * [3] 10.5.2.56 3G Target Cell
9341 * 10.5.2.57 Service Support */
9342 de_rr_serv_sup, /* 10.5.2.57 Service Support */
9344 * 10.5.2.58 MBMS p-t-m Channel Description
9346 de_rr_ded_serv_inf, /* [3] 10.5.2.59 Dedicated Service Information */
9348 * 10.5.2.60 MPRACH Description
9349 * 10.5.2.61 Restriction Timer
9350 * 10.5.2.62 MBMS Session Identity
9351 * 10.5.2.63 Reduced group or broadcast call reference
9352 * 10.5.2.64 Talker Priority status
9353 * 10.5.2.65 Talker Identity
9354 * 10.5.2.66 Token
9355 * 10.5.2.67 PS Cause
9356 * 10.5.2.68 VGCS AMR Configuration
9358 de_rr_carrier_ind, /* 10.5.2.69 Carrier Indication */
9360 * 10.5.2.70 SI10bis Rest Octets
9361 * 10.5.2.71 SI10ter Rest Octets
9362 * 10.5.2.72 Application Data
9363 * 10.5.2.73 Data Identity
9364 * 10.5.2.74 Uplink Access Indication
9365 * 10.5.2.75 Individual priorities
9367 de_rr_feature_indicator, /* 10.5.2.76 Feature Indicator */
9369 * 10.5.2.77 (void)
9370 * 10.5.2.78 IPA Rest Octets
9371 * 10.5.2.79 DL-DCCH-Message
9372 * 10.5.2.80 CN to MS transparent information
9373 * 10.5.2.81 PLMN Index
9375 de_rr_extended_tsc_set, /* 10.5.2.82 Extended TSC Set */
9376 NULL, /* 10.5.2.83 EC Request reference */
9377 de_rr_ec_pkt_ch_dsc1, /* 10.5.2.84 EC Packet Channel Description Type 1 */
9378 NULL, /* 10.5.2.85 EC Packet Channel Description Type 1 */
9379 de_rr_ec_fua, /* 10.5.2.86 EC Fixed Uplink Allocation */
9380 NULL, /* NONE */
9383 /* MESSAGE FUNCTIONS */
9386 * 9.1.1 Additional Assignment
9388 static void
9389 dtap_rr_add_ass(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9391 uint32_t curr_offset;
9392 uint32_t consumed;
9393 unsigned curr_len;
9395 curr_offset = offset;
9396 curr_len = len;
9398 /* Channel Description 10.5.2.5 M V 3 */
9399 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_CH_DSC, NULL, ei_gsm_a_rr_missing_mandatory_element);
9401 /* Mobile Allocation 10.5.2.21 C TLV 3-10 */
9402 ELEM_OPT_TLV(0x72, GSM_A_PDU_TYPE_RR, DE_RR_MOB_ALL, NULL);
9404 /* Starting Time 10.5.2.38 O TV 3 */
9405 ELEM_OPT_TV(0x7c, GSM_A_PDU_TYPE_RR, DE_RR_STARTING_TIME, NULL);
9407 /* 6D Extended TSC Set 10.5.2.82 O TV 2 */
9408 ELEM_OPT_TV(0x6d, GSM_A_PDU_TYPE_RR, DE_RR_EXTENDED_TSC_SET, NULL);
9410 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_rr_extraneous_data);
9414 * 9.1.2 Assignment command
9416 static void
9417 dtap_rr_ass_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9419 uint32_t curr_offset;
9420 uint32_t consumed;
9421 unsigned curr_len;
9423 curr_offset = offset;
9424 curr_len = len;
9426 /* Channel Description 2 10.5.2.5a M V 3 */
9427 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_CH_DSC2, " - Description of the First Channel, after time", ei_gsm_a_rr_missing_mandatory_element);
9429 /* Power Command 10.5.2.28 M V 1 */
9430 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_POW_CMD, NULL, ei_gsm_a_rr_missing_mandatory_element);
9432 /* 05 Frequency List 10.5.2.13 C TLV 4-132 */
9433 ELEM_OPT_TLV(0x05, GSM_A_PDU_TYPE_RR, DE_RR_FREQ_LIST, " - Frequency List, after time");
9435 /* 62 Cell Channel Description 10.5.2.1b O TV 17 */
9436 ELEM_OPT_TV(0x62, GSM_A_PDU_TYPE_RR, DE_RR_CELL_CH_DSC, NULL);
9438 /* 10 Multislot Allocation 10.5.2.21b C TLV 3-12 */
9439 ELEM_OPT_TLV(0x10,GSM_A_PDU_TYPE_RR, DE_RR_MULT_ALL, " - Description of the multislot configuration");
9441 /* 63 Channel Mode 10.5.2.6 O TV 2 */
9442 ELEM_OPT_TV(0x63,GSM_A_PDU_TYPE_RR, DE_RR_CH_MODE, " - Mode of the First Channel(Channel Set 1)");
9444 /* 11 Channel Mode 10.5.2.6 O TV 2 */
9445 ELEM_OPT_TV(0x11,GSM_A_PDU_TYPE_RR, DE_RR_CH_MODE, " - Mode of Channel Set 2");
9447 /* 13 Channel Mode 10.5.2.6 O TV 2 */
9448 ELEM_OPT_TV(0x13,GSM_A_PDU_TYPE_RR, DE_RR_CH_MODE, " - Mode of Channel Set 3");
9450 /* 14 Channel Mode 10.5.2.6 O TV 2 */
9451 ELEM_OPT_TV(0x14,GSM_A_PDU_TYPE_RR, DE_RR_CH_MODE, " - Mode of Channel Set 4");
9453 /* 15 Channel Mode 10.5.2.6 O TV 2 */
9454 ELEM_OPT_TV(0x15,GSM_A_PDU_TYPE_RR, DE_RR_CH_MODE, " - Mode of Channel Set 5");
9456 /* 16 Channel Mode 10.5.2.6 O TV 2 */
9457 ELEM_OPT_TV(0x16,GSM_A_PDU_TYPE_RR, DE_RR_CH_MODE, " - Mode of Channel Set 6");
9459 /* 17 Channel Mode 10.5.2.6 O TV 2 */
9460 ELEM_OPT_TV(0x17,GSM_A_PDU_TYPE_RR, DE_RR_CH_MODE, " - Mode of Channel Set 7");
9462 /* 18 Channel Mode 10.5.2.6 O TV 2 */
9463 ELEM_OPT_TV(0x18,GSM_A_PDU_TYPE_RR, DE_RR_CH_MODE, " - Mode of Channel Set 8");
9465 /* 64 Channel Description 10.5.2.5 O TV 4 */
9466 ELEM_OPT_TV(0x64,GSM_A_PDU_TYPE_RR, DE_RR_CH_DSC, "Description of the Second Channel, after time");
9468 /* 66 Channel Mode 2 10.5.2.7 O TV 2 */
9469 ELEM_OPT_TV(0x66,GSM_A_PDU_TYPE_RR, DE_RR_CH_MODE2, " - Mode of the Second Channel");
9471 /* 72 Mobile Allocation 10.5.2.21 C TLV 3-10 */
9472 ELEM_OPT_TLV(0x72,GSM_A_PDU_TYPE_RR, DE_RR_MOB_ALL, " - Mobile Allocation, after time");
9474 /* 7C Starting Time 10.5.2.38 O TV 3 */
9475 ELEM_OPT_TV(0x7C,GSM_A_PDU_TYPE_RR, DE_RR_STARTING_TIME, NULL);
9477 /* 19 Frequency List 10.5.2.13 C TLV 4-132 */
9478 ELEM_OPT_TLV(0x19, GSM_A_PDU_TYPE_RR, DE_RR_FREQ_LIST, " - Frequency List, before time");
9480 /* 1C Channel Description 2 10.5.2.5a O TV 4 */
9481 ELEM_OPT_TV(0x1c,GSM_A_PDU_TYPE_RR, DE_RR_CH_DSC2, " - Description of the First Channel, before time");
9483 /* 1D Channel Description 10.5.2.5 O TV 4 */
9484 ELEM_OPT_TV(0x1d,GSM_A_PDU_TYPE_RR, DE_RR_CH_DSC, " - Description of the Second Channel, before time");
9486 /* 1E Frequency channel sequence 10.5.2.12 C TV 10 */
9487 ELEM_OPT_TV(0x1e,GSM_A_PDU_TYPE_RR, DE_RR_FREQ_CH_SEQ, " - Frequency channel sequence before time");
9489 /* 21 Mobile Allocation 10.5.2.21 C TLV 3-10 */
9490 ELEM_OPT_TLV(0x21,GSM_A_PDU_TYPE_RR, DE_RR_MOB_ALL, " - Mobile Allocation, before time");
9492 /* 9- Cipher Mode Setting 10.5.2.9 O TV 1 */
9493 ELEM_OPT_TV_SHORT(0x90,GSM_A_PDU_TYPE_RR, DE_RR_CIP_MODE_SET, NULL);
9494 /* 01 VGCS target mode Indication VGCS target mode Indication 10.5.2.42a O TLV 3 */
9495 ELEM_OPT_TLV(0x01,GSM_A_PDU_TYPE_RR, DE_RR_VGCS_TAR_MODE_IND, NULL);
9497 /* 03 Multi-Rate configuration, MultiRate configuration 10.5.2.21aa O TLV 4-8 */
9498 ELEM_OPT_TLV(0x03,GSM_A_PDU_TYPE_RR, DE_RR_MULTIRATE_CONF, NULL);
9500 /* 04 VGCS Ciphering Parameters VGCS Ciphering Parameters 10.5.2.42b O TLV 3-15 */
9501 ELEM_OPT_TLV(0x04,GSM_A_PDU_TYPE_RR, DE_RR_VGCS_CIP_PAR, NULL);
9503 /* 6D Extended TSC Set 10.5.2.82 O TV 2 */
9504 ELEM_OPT_TV(0x6d, GSM_A_PDU_TYPE_RR, DE_RR_EXTENDED_TSC_SET, " - Extended TSC Set, after time");
9506 /* 6E Extended TSC Set 10.5.2.82 O TV 2 */
9507 ELEM_OPT_TV(0x6e, GSM_A_PDU_TYPE_RR, DE_RR_EXTENDED_TSC_SET, " - Extended TSC Set, before time");
9509 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_rr_extraneous_data);
9514 * 9.1.3 Assignment complete
9516 static void
9517 dtap_rr_ass_comp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9519 uint32_t curr_offset;
9520 uint32_t consumed;
9521 unsigned curr_len;
9523 curr_offset = offset;
9524 curr_len = len;
9526 /* RR Cause RR Cause 10.5.2.31 M V 1 */
9527 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_CAUSE, NULL, ei_gsm_a_rr_missing_mandatory_element);
9529 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_rr_extraneous_data);
9534 * 9.1.4 Assignment failure
9536 static void
9537 dtap_rr_ass_fail(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9539 uint32_t curr_offset;
9540 uint32_t consumed;
9541 unsigned curr_len;
9543 curr_offset = offset;
9544 curr_len = len;
9546 /* RR Cause RR Cause 10.5.2.31 M V 1 */
9547 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_CAUSE, NULL, ei_gsm_a_rr_missing_mandatory_element);
9549 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_rr_extraneous_data);
9554 * 9.1.5 Channel Mode Modify
9556 static void
9557 dtap_rr_ch_mode_mod(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9559 uint32_t curr_offset;
9560 uint32_t consumed;
9561 unsigned curr_len;
9563 curr_offset = offset;
9564 curr_len = len;
9566 /* Channel Description 2 10.5.2.5a M V 3 */
9567 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_CH_DSC2, NULL, ei_gsm_a_rr_missing_mandatory_element);
9569 /* Channel Mode 10.5.2.6 M V 1 */
9570 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_CH_MODE, NULL, ei_gsm_a_rr_missing_mandatory_element);
9572 /* 01 VGCS target mode Indication VGCS target mode Indication 10.5.2.42a O TLV 3 */
9573 ELEM_OPT_TLV(0x01,GSM_A_PDU_TYPE_RR, DE_RR_VGCS_TAR_MODE_IND, NULL);
9575 /* 03 Multi-Rate configuration, MultiRate configuration 10.5.2.21aa O TLV 4-8 */
9576 ELEM_OPT_TLV(0x03,GSM_A_PDU_TYPE_RR, DE_RR_MULTIRATE_CONF, NULL);
9578 /* 6D Extended TSC Set 10.5.2.82 O TV 2 */
9579 ELEM_OPT_TV(0x6d, GSM_A_PDU_TYPE_RR, DE_RR_EXTENDED_TSC_SET, NULL);
9581 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_rr_extraneous_data);
9586 * 9.1.6 Channel Mode Modify Acknowledge
9588 static void
9589 dtap_rr_ch_mode_mod_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9591 uint32_t curr_offset;
9592 uint32_t consumed;
9593 unsigned curr_len;
9595 curr_offset = offset;
9596 curr_len = len;
9598 /* Channel Description 2 10.5.2.5a M V 3 */
9599 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_CH_DSC2, NULL, ei_gsm_a_rr_missing_mandatory_element);
9601 /* Channel Mode 10.5.2.6 M V 1 */
9602 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_CH_MODE, NULL, ei_gsm_a_rr_missing_mandatory_element);
9604 /* 6D Extended TSC Set 10.5.2.82 C TV 2 */
9605 ELEM_OPT_TV(0x6d, GSM_A_PDU_TYPE_RR, DE_RR_EXTENDED_TSC_SET, NULL);
9607 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_rr_extraneous_data);
9612 * 9.1.7 Channel Release
9614 static void
9615 dtap_rr_ch_rel(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9617 uint32_t curr_offset;
9618 uint32_t consumed;
9619 unsigned curr_len;
9621 curr_offset = offset;
9622 curr_len = len;
9624 /* RR Cause RR Cause 10.5.2.31 M V 1 */
9625 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_CAUSE, NULL, ei_gsm_a_rr_missing_mandatory_element);
9627 /* 73 BA Range BA Range 10.5.2.1a O TLV 6-7 */
9628 ELEM_OPT_TLV(0x73, GSM_A_PDU_TYPE_RR, DE_RR_BA_RANGE, NULL);
9630 /* 74 Group Channel Description Group Channel Description 10.5.2.14b O TLV 5-13 */
9631 /* ELEM_OPT_TLV(0x74, GSM_A_PDU_TYPE_RR, DE_GRP_CH_DESC, NULL); */
9633 /* 8x Group Cipher Key Number Group Cipher Key Number 10.5.1.10 C TV 1 */
9634 /* ELEM_OPT_TV_SHORT(0x80, GSM_A_PDU_TYPE_RR, DE_GRP_CIP_KEY_NUM, NULL); */
9636 /* Cx GPRS Resumption GPRS Resumption 10.5.2.14c O TV 1 */
9637 ELEM_OPT_TV_SHORT(0xC0, GSM_A_PDU_TYPE_RR, DE_RR_GPRS_RESUMPTION, NULL);
9639 /* 75 BA List Pref BA List Pref 10.5.2.1c O TLV 3-? */
9640 ELEM_OPT_TLV(0x75, GSM_A_PDU_TYPE_RR, DE_RR_BA_LIST_PREF, NULL);
9642 /* 76 UTRAN Freq List 10.5.2.1d O TLV 3-? */
9643 ELEM_OPT_TLV(0x76, GSM_A_PDU_TYPE_RR, DE_RR_UTRAN_FREQ_LIST, NULL);
9645 /* 62 Cell Channel Description Cell Channel Description 10.5.2.1b O TV 17 */
9646 ELEM_OPT_TV(0x62, GSM_A_PDU_TYPE_RR, DE_RR_CELL_CH_DSC, NULL);
9648 /* 77 Cell selection indicator after release of all TCH and SDCCH 10.5.2.1e O TLV 4-? */
9649 ELEM_OPT_TLV(0x77, GSM_A_PDU_TYPE_RR, DE_RR_CELL_SELECT_INDIC, NULL);
9651 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_rr_extraneous_data);
9656 * 9.1.8 Channel Request
9658 /* This message is NOT follow the basic format, and is only found on RACH - ignored here */
9661 * 9.1.9 Ciphering Mode Command
9663 static void
9664 dtap_rr_cip_mode_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9666 uint32_t curr_offset;
9667 unsigned curr_len;
9669 curr_offset = offset;
9670 curr_len = len;
9672 /* Ciphering Mode Setting 10.5.2.9 M V 0.5 */
9673 /* Cipher Response 10.5.2.10 M V 0.5 */
9674 ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_RR, DE_RR_CIP_MODE_SET,
9675 GSM_A_PDU_TYPE_RR, DE_RR_CIP_MODE_RESP, ei_gsm_a_rr_missing_mandatory_element);
9677 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_rr_extraneous_data);
9681 * 9.1.10 Ciphering Mode Complete
9683 void
9684 dtap_rr_cip_mode_cpte(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9686 uint32_t curr_offset;
9687 uint32_t consumed;
9688 unsigned curr_len;
9690 curr_offset = offset;
9691 curr_len = len;
9693 /* Mobile Equipment Identity 10.5.1.4 O TLV */
9694 ELEM_OPT_TLV(0x17, GSM_A_PDU_TYPE_COMMON, DE_MID, "Mobile Equipment Identity");
9696 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_rr_extraneous_data);
9701 * 9.1.11 Classmark change
9703 static void
9704 dtap_rr_mm_cm_change(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9706 uint32_t curr_offset;
9707 uint32_t consumed;
9708 unsigned curr_len;
9710 curr_offset = offset;
9711 curr_len = len;
9713 /* Mobile Station Classmark 2 10.5.1.6 M LV 4 */
9714 ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MS_CM_2, NULL, ei_gsm_a_rr_missing_mandatory_element);
9715 /* 20 Mobile Station Classmark 3 10.5.1.7 C TLV 3-34 */
9716 ELEM_OPT_TLV(0x20, GSM_A_PDU_TYPE_COMMON, DE_MS_CM_3, NULL);
9718 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_rr_extraneous_data);
9723 * 9.1.11 UTRAN Classmark Change
9725 static void
9726 dtap_rr_utran_classmark_change(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9728 uint32_t curr_offset;
9729 uint32_t consumed;
9730 unsigned curr_len;
9732 curr_offset = offset;
9733 curr_len = len;
9735 /* UTRAN Classmark 10.5.2.7a M LV 2-? */
9736 ELEM_MAND_LV(GSM_A_PDU_TYPE_RR, DE_RR_UTRAN_CM, NULL, ei_gsm_a_rr_missing_mandatory_element);
9738 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_rr_extraneous_data);
9742 * 9.1.12 Classmark enquiry
9744 static void
9745 dtap_rr_cm_enq(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9747 uint32_t curr_offset;
9748 uint32_t consumed;
9749 unsigned curr_len;
9751 curr_offset = offset;
9752 curr_len = len;
9754 /* 10 Classmark Enquiry Mask 10.5.2.7c O TLV 3 */
9755 ELEM_OPT_TLV(0x10, GSM_A_PDU_TYPE_RR, DE_RR_CM_ENQ_MASK, NULL);
9757 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_rr_extraneous_data);
9762 * 9.1.12b Configuration change command
9764 static void
9765 dtap_rr_conf_change_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9767 uint32_t curr_offset;
9768 uint32_t consumed;
9769 unsigned curr_len;
9771 curr_offset = offset;
9772 curr_len = len;
9774 /* Multislot Allocation 10.5.2.21b M LV 2-11 */
9775 ELEM_MAND_LV(GSM_A_PDU_TYPE_RR, DE_RR_MULT_ALL, NULL, ei_gsm_a_rr_missing_mandatory_element);
9777 /* Channel Mode 10.5.2.6 O TV 2 */
9778 ELEM_OPT_TV(0x63,GSM_A_PDU_TYPE_RR, DE_RR_CH_MODE, " - Mode of Channel Set 1");
9780 /* Channel Mode 10.5.2.6 O TV 2 */
9781 ELEM_OPT_TV(0x11,GSM_A_PDU_TYPE_RR, DE_RR_CH_MODE, " - Mode of Channel Set 2");
9783 /* Channel Mode 10.5.2.6 O TV 2 */
9784 ELEM_OPT_TV(0x13,GSM_A_PDU_TYPE_RR, DE_RR_CH_MODE, " - Mode of Channel Set 3");
9786 /* Channel Mode 10.5.2.6 O TV 2 */
9787 ELEM_OPT_TV(0x14,GSM_A_PDU_TYPE_RR, DE_RR_CH_MODE, " - Mode of Channel Set 4");
9789 /* Channel Mode 10.5.2.6 O TV 2 */
9790 ELEM_OPT_TV(0x15,GSM_A_PDU_TYPE_RR, DE_RR_CH_MODE, " - Mode of Channel Set 5");
9792 /* Channel Mode 10.5.2.6 O TV 2 */
9793 ELEM_OPT_TV(0x16,GSM_A_PDU_TYPE_RR, DE_RR_CH_MODE, " - Mode of Channel Set 6");
9795 /* Channel Mode 10.5.2.6 O TV 2 */
9796 ELEM_OPT_TV(0x17,GSM_A_PDU_TYPE_RR, DE_RR_CH_MODE, " - Mode of Channel Set 7");
9798 /* Channel Mode 10.5.2.6 O TV 2 */
9799 ELEM_OPT_TV(0x18,GSM_A_PDU_TYPE_RR, DE_RR_CH_MODE, " - Mode of Channel Set 8");
9801 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_gsm_a_rr_extraneous_data);
9805 * 9.1.12c Configuration change acknowledge
9807 /* empty message */
9810 * 9.1.12d Configuration change reject
9812 static void
9813 dtap_rr_conf_change_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9815 uint32_t curr_offset;
9816 uint32_t consumed;
9817 unsigned curr_len;
9819 curr_offset = offset;
9820 curr_len = len;
9822 /* RR Cause 10.5.2.31 M V 1 */
9823 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_CAUSE, NULL, ei_gsm_a_rr_missing_mandatory_element);
9825 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_rr_extraneous_data);
9829 * 9.1.12e DTM Assignment Command
9831 static void
9832 dtap_rr_dtm_ass_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9834 uint32_t curr_offset;
9835 uint32_t consumed;
9836 unsigned curr_len;
9838 curr_offset = offset;
9839 curr_len = len;
9841 /* CS Power Command 10.5.2.28 M V 1 */
9842 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_POW_CMD, NULL, ei_gsm_a_rr_missing_mandatory_element);
9844 /* Description of the CS Channel 10.5.2.5 M V 3 */
9845 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_CH_DSC, NULL, ei_gsm_a_rr_missing_mandatory_element);
9847 /* GPRS broadcast information 10.5.2.14d M LV 7 - n */
9848 ELEM_MAND_LV(GSM_A_PDU_TYPE_RR, DE_RR_GPRS_BROADCAST_INFORMATION, NULL, ei_gsm_a_rr_missing_mandatory_element);
9850 /* 10 Cell Channel Description 10.5.2.1b O TV 17 */
9851 ELEM_OPT_TV(0x10, GSM_A_PDU_TYPE_RR, DE_RR_CELL_CH_DSC, NULL);
9853 /* 11 Channel mode Channel mode 10.5.2.6 O TV 2 */
9854 ELEM_OPT_TV(0x11,GSM_A_PDU_TYPE_RR, DE_RR_CH_MODE, NULL);
9855 /* 12 Frequency List Frequency List 10.5.2.13 C TLV 4 - 132 */
9856 ELEM_OPT_TLV(0x12, GSM_A_PDU_TYPE_RR, DE_RR_FREQ_LIST, NULL);
9857 /* 13 Mobile Allocation Mobile Allocation 10.5.2.21 C TLV 3 - 10 */
9858 ELEM_OPT_TLV(0x13, GSM_A_PDU_TYPE_RR, DE_RR_MOB_ALL, NULL);
9860 /* 15 Description of the Uplink Packet Channel Assignment RR Packet Uplink Assignment 10.5.2.25c O TLV 3 - n */
9861 ELEM_OPT_TLV(0x15, GSM_A_PDU_TYPE_RR, DE_RR_PKT_UL_ASS, NULL);
9863 /* 16 Description of the Downlink Packet Channel Assignment RR Packet Downlink Assignment 10.5.2.25d O TLV 3 - n */
9864 ELEM_OPT_TLV(0x16, GSM_A_PDU_TYPE_RR, DE_RR_PKT_DL_ASS, NULL);
9866 /* 17 Multi-Rate configuration MultiRate configuration 10.5.2.21aa O TLV 4-8 */
9867 ELEM_OPT_TLV(0x17,GSM_A_PDU_TYPE_RR, DE_RR_MULTIRATE_CONF, NULL);
9869 /* 9- Ciphering Mode Setting Ciphering Mode Setting 10.5.2.9 O TV 1 */
9870 ELEM_OPT_TV_SHORT(0x90,GSM_A_PDU_TYPE_RR, DE_RR_CIP_MODE_SET, NULL);
9872 /* 18 Mobile Allocation C2 Mobile Allocation 10.5.2.21 C TLV 3 - 10 */
9873 ELEM_OPT_TLV(0x18, GSM_A_PDU_TYPE_RR, DE_RR_MOB_ALL, " - C2");
9875 /* 19 Frequency List C2 Frequency List 10.5.2.13 C TLV 4 - 132 */
9876 ELEM_OPT_TLV(0x19, GSM_A_PDU_TYPE_RR, DE_RR_FREQ_LIST, " - C2");
9878 /* 20 Description of the Downlink Packet Channel Assignment Type 2 RR Packet Downlink Assignment Type 2 10.5.2.25e C TLV 3 n */
9879 ELEM_OPT_TLV(0x20, GSM_A_PDU_TYPE_RR, DE_RR_PKT_DL_ASS_TYPE2, NULL);
9881 /* 21 Channel Description C2 Channel Description 3 10.5.2.5c O TV 3 */
9882 ELEM_OPT_TV(0x21,GSM_A_PDU_TYPE_RR, DE_RR_CH_DSC3, " - Channel Description C2");
9884 /* 6D Extended TSC Set 10.5.2.82 C TV 2 */
9885 ELEM_OPT_TV(0x6d, GSM_A_PDU_TYPE_RR, DE_RR_EXTENDED_TSC_SET, NULL);
9887 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_rr_extraneous_data);
9891 * 9.1.12f DTM Assignment Failure
9893 static void
9894 dtap_rr_dtm_ass_fail(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9896 uint32_t curr_offset;
9897 uint32_t consumed;
9898 unsigned curr_len;
9900 curr_offset = offset;
9901 curr_len = len;
9903 /* RR Cause RR Cause 10.5.2.31 M V 1 */
9904 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_CAUSE, NULL, ei_gsm_a_rr_missing_mandatory_element);
9906 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_gsm_a_rr_extraneous_data);
9910 * 9.1.12g DTM Information
9912 static void
9913 dtap_rr_dtm_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9915 uint32_t curr_offset;
9916 uint32_t consumed;
9917 unsigned curr_len;
9919 curr_offset = offset;
9920 curr_len = len;
9922 /* Routeing Area Identification 10.5.5.15 M V 6 */
9923 ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_RAI, NULL, ei_gsm_a_rr_missing_mandatory_element);
9925 /* DTM Information Details 10.5.2.11a M LV 4-n */
9926 ELEM_MAND_LV(GSM_A_PDU_TYPE_RR, DE_RR_DTM_INFO_DETAILS, NULL, ei_gsm_a_rr_missing_mandatory_element);
9928 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_gsm_a_rr_extraneous_data);
9932 * 9.1.12h DTM Reject
9934 static void
9935 dtap_rr_dtm_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9937 uint32_t curr_offset;
9938 uint32_t consumed;
9939 unsigned curr_len;
9941 curr_offset = offset;
9942 curr_len = len;
9944 /* Wait indication 10.5.2.43 M V 1 */
9945 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_WAIT_IND, " - DTM Wait Indication", ei_gsm_a_rr_missing_mandatory_element);
9947 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_gsm_a_rr_extraneous_data);
9951 * 9.1.12i DTM Request
9953 static void
9954 dtap_rr_dtm_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9956 uint32_t curr_offset;
9957 uint32_t consumed;
9958 unsigned curr_len;
9960 curr_offset = offset;
9961 curr_len = len;
9963 /* TLLI 10.5.2.41a M V 4 */
9964 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_gsm_a_rr_missing_mandatory_element);
9966 /* Channel Request Description 2 M LV 5-n */
9967 ELEM_MAND_LV(GSM_A_PDU_TYPE_RR, DE_RR_CHNL_REQ_DESC2, NULL, ei_gsm_a_rr_missing_mandatory_element);
9969 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_gsm_a_rr_extraneous_data);
9973 * 9.1.13 Frequency Redefinition
9975 static void
9976 dtap_rr_freq_redef(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9978 uint32_t curr_offset;
9979 uint32_t consumed;
9980 unsigned curr_len;
9982 curr_offset = offset;
9983 curr_len = len;
9985 /* Channel Description 10.5.2.5 M V 3 */
9986 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_CH_DSC, NULL, ei_gsm_a_rr_missing_mandatory_element);
9988 /* Mobile Allocation 10.5.2.21 M LV 1-9 */
9989 ELEM_MAND_LV(GSM_A_PDU_TYPE_RR, DE_RR_MOB_ALL, NULL, ei_gsm_a_rr_missing_mandatory_element);
9991 /* Starting Time 10.5.2.38 M V 2 */
9992 ELEM_MAND_LV(GSM_A_PDU_TYPE_RR, DE_RR_STARTING_TIME, NULL, ei_gsm_a_rr_missing_mandatory_element);
9994 /* Cell Channel Description 10.5.2.1b O TV 17 */
9995 ELEM_OPT_TV(0x62,GSM_A_PDU_TYPE_RR, DE_RR_CELL_CH_DSC, NULL);
9997 /* Carrier Indication 10.5.2.69 O TV 1 */
9998 ELEM_OPT_TV_SHORT(0x90,GSM_A_PDU_TYPE_RR, DE_RR_CARRIER_IND,NULL);
10000 /* Mobile Allocation 10.5.2.21 O TLV 1-9 */
10001 ELEM_OPT_TLV(0x11, GSM_A_PDU_TYPE_RR, DE_RR_MOB_ALL, " - Mobile Allocation C2");
10003 /* Channel Description 3 10.5.2.5c O TV 3 */
10004 ELEM_OPT_TV(0x12,GSM_A_PDU_TYPE_RR, DE_RR_CH_DSC3, " - Channel Description C2");
10006 /* 6D Extended TSC Set 10.5.2.82 C TV 2 */
10007 ELEM_OPT_TV(0x6d, GSM_A_PDU_TYPE_RR, DE_RR_EXTENDED_TSC_SET, NULL);
10009 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_gsm_a_rr_extraneous_data);
10013 * 9.1.13b GPRS suspension request
10015 static void
10016 dtap_rr_gprs_sus_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10018 uint32_t curr_offset;
10019 uint32_t consumed;
10020 unsigned curr_len;
10022 curr_offset = offset;
10023 curr_len = len;
10025 /* TLLI 10.5.2.41a M V 4 */
10026 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_gsm_a_rr_missing_mandatory_element);
10028 /* Routeing Area Identification 10.5.5.15 M V 6 */
10029 ELEM_MAND_V(GSM_A_PDU_TYPE_GM, DE_RAI, NULL, ei_gsm_a_rr_missing_mandatory_element);
10030 /* Suspension cause 10.5.2.47 M V 1 */
10031 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_SUS_CAU, NULL, ei_gsm_a_rr_missing_mandatory_element);
10033 /* 01 Service Support 10.5.2.57 O TV 2 */
10034 ELEM_OPT_TV_SHORT(0x01,GSM_A_PDU_TYPE_RR, DE_RR_SERV_SUP,NULL);
10036 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_gsm_a_rr_extraneous_data);
10041 * 9.1.14 Handover Access
10043 /* This message does NOT follow the basic format, and is only found on DCH during initial handover access */
10045 /* 3GPP TS 24.008 version 4.7.0 Release 4
10046 * [3] 9.1.15
10048 void
10049 dtap_rr_ho_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10051 uint32_t curr_offset;
10052 uint32_t consumed;
10053 unsigned curr_len;
10055 curr_offset = offset;
10056 curr_len = len;
10058 /* Mandatory Elements
10059 * Cell description 10.5.2.2
10061 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_CELL_DSC, NULL, ei_gsm_a_rr_missing_mandatory_element);
10063 /* Description of the first channel,after time
10064 * Channel Description 2 10.5.2.5a
10066 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_CH_DSC2, " - Description of the first channel, after time", ei_gsm_a_rr_missing_mandatory_element);
10068 /* Handover Reference 10.5.2.15 */
10069 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_HO_REF, NULL, ei_gsm_a_rr_missing_mandatory_element);
10071 /* Power Command and Access type 10.5.2.28a */
10072 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_POW_CMD_AND_ACC_TYPE, NULL, ei_gsm_a_rr_missing_mandatory_element);
10074 /* optional elements */
10076 /* Synchronization Indication 10.5.2.39 */
10077 ELEM_OPT_TV_SHORT(0xD0,GSM_A_PDU_TYPE_RR, DE_RR_SYNC_IND,NULL);
10079 /* Frequency Short List 10.5.2.14 */
10080 ELEM_OPT_TV(0x02,GSM_A_PDU_TYPE_RR, DE_RR_FREQ_SHORT_LIST," - Frequency Short List, after time");
10082 /* Frequency List 10.5.2.13 */
10083 ELEM_OPT_TLV(0x05, GSM_A_PDU_TYPE_RR, DE_RR_FREQ_LIST, " - Frequency List, after time");
10085 /* Cell Channel Description 10.5.2.1b */
10086 ELEM_OPT_TV(0x62,GSM_A_PDU_TYPE_RR, DE_RR_CELL_CH_DSC, NULL);
10088 /* Multislot Allocation 10.5.2.21b */
10089 ELEM_OPT_TLV(0x10,GSM_A_PDU_TYPE_RR, DE_RR_MULT_ALL, NULL);
10091 /* Mode of the First Channel(Channel Set 1)) Channel Mode 10.5.2.6*/
10092 ELEM_OPT_TV(0x63,GSM_A_PDU_TYPE_RR, DE_RR_CH_MODE, " - Mode of the First Channel(Channel Set 1))");
10094 /* Mode of Channel Set 2 Channel Mode 10.5.2.6*/
10095 ELEM_OPT_TV(0x11,GSM_A_PDU_TYPE_RR, DE_RR_CH_MODE, " - Mode of Channel Set 2");
10097 /* Mode of Channel Set 3 Channel Mode 10.5.2.6*/
10098 ELEM_OPT_TV(0x13,GSM_A_PDU_TYPE_RR, DE_RR_CH_MODE, " - Mode of Channel Set 3");
10100 /* Mode of Channel Set 4 Channel Mode 10.5.2.6*/
10101 ELEM_OPT_TV(0x14,GSM_A_PDU_TYPE_RR, DE_RR_CH_MODE, " - Mode of Channel Set 4");
10103 /* Mode of Channel Set 5 Channel Mode 10.5.2.6*/
10104 ELEM_OPT_TV(0x15,GSM_A_PDU_TYPE_RR, DE_RR_CH_MODE, " - Mode of Channel Set 5");
10106 /* Mode of Channel Set 6 Channel Mode 10.5.2.6*/
10107 ELEM_OPT_TV(0x16,GSM_A_PDU_TYPE_RR, DE_RR_CH_MODE, " - Mode of Channel Set 6");
10109 /* Mode of Channel Set 7 Channel Mode 10.5.2.6*/
10110 ELEM_OPT_TV(0x17,GSM_A_PDU_TYPE_RR, DE_RR_CH_MODE, " - Mode of Channel Set 7");
10112 /* Mode of Channel Set 8 Channel Mode 10.5.2.6*/
10113 ELEM_OPT_TV(0x18,GSM_A_PDU_TYPE_RR, DE_RR_CH_MODE, " - Mode of Channel Set 8");
10115 /* Description of the Second Channel, after time, Channel Description 10.5.2.5 */
10116 ELEM_OPT_TV(0x64,GSM_A_PDU_TYPE_RR, DE_RR_CH_DSC, " - Description of the Second Channel, after time");
10118 /* Mode of the Second Channel, Channel Mode 2 10.5.2.7 */
10119 ELEM_OPT_TV(0x66,GSM_A_PDU_TYPE_RR, DE_RR_CH_MODE2, " - Mode of the Second Channel");
10121 /* Frequency Channel Sequence, after time, Frequency Channel Sequence 10.5.2.12 */
10122 ELEM_OPT_TV(0x69,GSM_A_PDU_TYPE_RR, DE_RR_FREQ_CH_SEQ, " - Frequency Channel Sequence, after time");
10124 /* Mobile Allocation, after time, Mobile Allocation 10.5.2.21 */
10125 ELEM_OPT_TLV(0x72,GSM_A_PDU_TYPE_RR, DE_RR_MOB_ALL, " - Mobile Allocation, after time");
10127 /* Starting Time 10.5.2.38 */
10128 ELEM_OPT_TV(0x7C,GSM_A_PDU_TYPE_RR, DE_RR_STARTING_TIME, NULL);
10130 /* Real Time Difference, Time Difference 10.5.2.41 */
10131 ELEM_OPT_TV(0x7B,GSM_A_PDU_TYPE_RR, DE_RR_TIME_DIFF, " - Real Time Difference");
10133 /* Timing Advance, Timing Advance 10.5.2.40 */
10134 ELEM_OPT_TV(0x7D,GSM_A_PDU_TYPE_RR, DE_RR_TIMING_ADV, NULL);
10136 /* Frequency Short List, before time, Frequency Short List 10.5.2.14 */
10137 ELEM_OPT_TV(0x12,GSM_A_PDU_TYPE_RR, DE_RR_FREQ_SHORT_LIST, " - Frequency Short List, before time");
10139 /* Frequency List, before time, Frequency List 10.5.2.13 */
10140 ELEM_OPT_TLV(0x19,GSM_A_PDU_TYPE_RR, DE_RR_FREQ_LIST, " - Frequency List, before time");
10142 /* Description of the First Channel, before time, Channel Description 2 10.5.2.5a*/
10143 ELEM_OPT_TV(0x1c,GSM_A_PDU_TYPE_RR, DE_RR_CH_DSC2, " - Description of the First Channel, before time");
10145 /* Description of the Second Channel, before time, Channel Description 10.5.2.5*/
10146 ELEM_OPT_TV(0x1d,GSM_A_PDU_TYPE_RR, DE_RR_CH_DSC, " - Description of the Second Channel, before time");
10148 /* Frequency channel sequence before time, Frequency channel sequence 10.5.2.12*/
10149 ELEM_OPT_TV(0x1e,GSM_A_PDU_TYPE_RR, DE_RR_FREQ_CH_SEQ, " - Frequency channel sequence before time");
10151 /* Mobile Allocation, before time, Mobile Allocation 10.5.2.21 */
10152 ELEM_OPT_TLV(0x21,GSM_A_PDU_TYPE_RR, DE_RR_MOB_ALL, " - Mobile Allocation, before time");
10154 /* Cipher Mode Setting, Cipher Mode Setting 10.5.2.9 */
10155 ELEM_OPT_TV_SHORT(0x90,GSM_A_PDU_TYPE_RR, DE_RR_CIP_MODE_SET, NULL);
10157 /* VGCS target mode Indication, VGCS target mode Indication 10.5.2.42a */
10158 ELEM_OPT_TLV(0x01,GSM_A_PDU_TYPE_RR, DE_RR_VGCS_TAR_MODE_IND, NULL);
10160 /* Multi-Rate configuration, MultiRate configuration 10.5.2.21a */
10161 ELEM_OPT_TLV(0x03,GSM_A_PDU_TYPE_RR, DE_RR_MULTIRATE_CONF, NULL);
10163 /* Dynamic ARFCN Mapping, Dynamic ARFCN Mapping 10.5.2.11b */
10164 ELEM_OPT_TLV(0x76,GSM_A_PDU_TYPE_RR, DE_RR_DYN_ARFCN_MAP, NULL);
10166 /* VGCS Ciphering Parameters, VGCS Ciphering Parameters 10.5.2.42b */
10167 ELEM_OPT_TLV(0x04,GSM_A_PDU_TYPE_RR, DE_RR_VGCS_CIP_PAR, NULL);
10169 /* Dedicated Service Information, Dedicated Service Information 10.5.2.59 */
10170 ELEM_OPT_TV(0x51,GSM_A_PDU_TYPE_RR, DE_RR_DED_SERV_INF, NULL);
10172 /* 6D Extended TSC Set 10.5.2.82 O TV 2 */
10173 ELEM_OPT_TV(0x6d, GSM_A_PDU_TYPE_RR, DE_RR_EXTENDED_TSC_SET, " - Extended TSC Set, after time");
10175 /* 6E Extended TSC Set 10.5.2.82 O TV 2 */
10176 ELEM_OPT_TV(0x6e, GSM_A_PDU_TYPE_RR, DE_RR_EXTENDED_TSC_SET, " - Extended TSC Set, before time");
10178 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_gsm_a_rr_extraneous_data);
10183 * 9.1.15a Inter System To UTRAN Handover Command
10185 static void
10186 dtap_rr_inter_syst_to_utran_ho_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10188 uint32_t curr_offset;
10189 uint32_t consumed;
10190 unsigned curr_len;
10192 curr_offset = offset;
10193 curr_len = len;
10195 /* UTRAN Classmark 10.5.2.51 M LV 2-? */
10196 ELEM_MAND_LV(GSM_A_PDU_TYPE_RR, DE_RR_HO_TO_UTRAN_CMD, NULL, ei_gsm_a_rr_missing_mandatory_element);
10198 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_rr_extraneous_data);
10201 /* 3GPP TS 24.008 version 4.7.0 Release 4
10202 * [3] 9.1.16
10204 static void
10205 dtap_rr_ho_cpte(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10207 uint32_t curr_offset;
10208 uint32_t consumed;
10209 unsigned curr_len;
10211 curr_offset = offset;
10212 curr_len = len;
10214 /* RR Cause RR Cause 10.5.2.31 M V 1 */
10215 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_CAUSE, NULL, ei_gsm_a_rr_missing_mandatory_element);
10217 /* 77 Mobile Observed Time Difference Mobile Time Difference 10.5.2.21a */
10218 ELEM_OPT_TLV(0x77,GSM_A_PDU_TYPE_RR, DE_RR_MOB_TIME_DIFF, " - Mobile Observed Time Difference");
10220 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_gsm_a_rr_extraneous_data);
10225 * 9.1.17 Handover failure
10227 static void
10228 dtap_rr_ho_fail(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10230 uint32_t curr_offset;
10231 uint32_t consumed;
10232 unsigned curr_len;
10234 curr_offset = offset;
10235 curr_len = len;
10237 /* RR Cause RR Cause 10.5.2.31 M V 1 */
10238 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_CAUSE, NULL, ei_gsm_a_rr_missing_mandatory_element);
10240 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_rr_extraneous_data);
10245 * 9.1.18 Immediate assignment See 3GPP TS 44.018
10247 static void
10248 dtap_rr_imm_ass(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10250 uint32_t curr_offset;
10251 uint32_t consumed;
10252 unsigned curr_len;
10253 uint8_t oct;
10255 curr_offset = offset;
10256 curr_len = len;
10258 oct = tvb_get_uint8(tvb, curr_offset);
10260 /* NOTE: The order of the mandatory information elements should be chosen so that
10261 * information elements with 1/2 octet of content (type 1) go together in succession.
10262 * The first type 1 information element occupies bits 1 to 4 of octet N,
10263 * the second bits 5 to 8 of octet N, the third bits 1 to 4 of octet N+1 etc.
10264 * If the number of type 1 information elements is odd then bits 5 to 8 of the last octet
10265 * occupied by these information elements should be treated as spare bits,
10266 * i.e. coded with a "0" in each.
10269 /* Page Mode 10.5.2.26 M V 1/2 */
10270 /* Dedicated mode or TBF 10.5.2.25b M V 1/2 */
10271 ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_RR, DE_RR_PAGE_MODE,
10272 GSM_A_PDU_TYPE_RR, DE_RR_DED_MOD_OR_TBF, ei_gsm_a_rr_missing_mandatory_element);
10274 if((oct&0x10) == 0){
10275 /* Channel Description 10.5.2.5 C V 3m */
10276 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_CH_DSC, NULL, ei_gsm_a_rr_missing_mandatory_element);
10277 }else{
10278 /* Packet Channel Description 10.5.2.25a C V 3
10279 * If the Dedicated mode or TBF IE indicates that the message assigns a Temporary Block Flow (TBF),
10280 * the mobile station shall consider this information element present in the message.
10281 * If the Dedicated mode or TBF IE indicates that this message is the first of two in a two-message
10282 * assignment of an uplink or downlink TBF, the mobile station shall ignore the contents
10283 * of this information element and regard it as an unnecessary IE.
10285 if((oct&0x04) == 0){
10286 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_PACKET_CH_DESC, NULL, ei_gsm_a_rr_missing_mandatory_element);
10289 /* Request Reference 10.5.2.30 M V 3 */
10290 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_REQ_REF, NULL, ei_gsm_a_rr_missing_mandatory_element);
10292 /* Timing Advance 10.5.2.40 M V 1 */
10293 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_TIMING_ADV, NULL, ei_gsm_a_rr_missing_mandatory_element);
10294 /* Mobile Allocation 10.5.2.21 M LV 1-9 */
10295 ELEM_MAND_LV(GSM_A_PDU_TYPE_RR, DE_RR_MOB_ALL, NULL, ei_gsm_a_rr_missing_mandatory_element);
10296 /* 7C Starting Time 10.5.2.38 O TV 3 */
10297 ELEM_OPT_TV(0x7C,GSM_A_PDU_TYPE_RR, DE_RR_STARTING_TIME, NULL);
10298 /* IA Rest Octets 10.5.2.16 M V 0-11 */
10299 if(tvb_reported_length_remaining(tvb,curr_offset) > 0)
10300 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_IA_REST_OCT, NULL, ei_gsm_a_rr_missing_mandatory_element);
10302 /* 6D Extended TSC Set 10.5.2.82 O TV 2 */
10303 ELEM_OPT_TV(0x6d, GSM_A_PDU_TYPE_RR, DE_RR_EXTENDED_TSC_SET, NULL);
10307 * 9.1.19 Immediate assignment extended
10309 static void
10310 dtap_rr_imm_ass_ext(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10312 uint32_t curr_offset;
10313 uint32_t consumed;
10314 unsigned curr_len;
10316 curr_offset = offset;
10317 curr_len = len;
10319 /* Page Mode 10.5.2.26 M V 1/2 */
10320 /* Feature Indicator 10.5.2.76 M V 1/2 */
10321 ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_RR, DE_RR_PAGE_MODE,
10322 GSM_A_PDU_TYPE_RR, DE_RR_FEATURE_INDICATOR, ei_gsm_a_rr_missing_mandatory_element);
10323 /* Channel Description 1 Channel Description 10.5.2.5 M V 3 */
10324 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_CH_DSC, " - Channel Description 1", ei_gsm_a_rr_missing_mandatory_element);
10325 /* Request Reference 1 Request Reference 10.5.2.30 M V 3 */
10326 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_REQ_REF, " - Request Reference 1", ei_gsm_a_rr_missing_mandatory_element);
10327 /* Timing Advance 1 Timing Advance 10.5.2.40 M V 1 */
10328 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_TIMING_ADV, " - Timing Advance 1", ei_gsm_a_rr_missing_mandatory_element);
10329 /* Channel Description 2 Channel Description 10.5.2.5 M V 3 */
10330 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_CH_DSC, " - Channel Description 2", ei_gsm_a_rr_missing_mandatory_element);
10331 /* Request Reference 2 Request Reference 10.5.2.30 M V 3 */
10332 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_REQ_REF, " - Request Reference 2", ei_gsm_a_rr_missing_mandatory_element);
10333 /* Timing Advance 2 Timing Advance 10.5.2.40 M V 1 */
10334 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_TIMING_ADV, " - Timing Advance 2", ei_gsm_a_rr_missing_mandatory_element);
10335 /* Mobile Allocation 10.5.2.21 M LV 1-9 */
10336 ELEM_MAND_LV(GSM_A_PDU_TYPE_RR, DE_RR_MOB_ALL, NULL, ei_gsm_a_rr_missing_mandatory_element);
10337 /* 7C Starting Time 10.5.2.38 O TV 3 */
10338 ELEM_OPT_TV(0x7C,GSM_A_PDU_TYPE_RR, DE_RR_STARTING_TIME, NULL);
10339 /* IAX Rest Octets 10.5.2.18 M V 0-4 */
10340 if(tvb_reported_length_remaining(tvb,curr_offset) > 0)
10341 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_IAX_REST_OCT, NULL, ei_gsm_a_rr_missing_mandatory_element);
10346 * 9.1.20 Immediate assignment reject
10348 static void
10349 dtap_rr_imm_ass_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10351 uint32_t curr_offset;
10352 uint32_t consumed;
10353 unsigned curr_len;
10355 curr_offset = offset;
10356 curr_len = len;
10358 /* Page Mode 10.5.2.26 M V 1/2 */
10359 /* Feature Indicator 10.5.2.76 M V 1/2 */
10360 ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_RR, DE_RR_PAGE_MODE,
10361 GSM_A_PDU_TYPE_RR, DE_RR_FEATURE_INDICATOR, ei_gsm_a_rr_missing_mandatory_element);
10362 /* Request Reference 1 Request Reference 10.5.2.30 M V 3 */
10363 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_REQ_REF, " - Request Reference 1", ei_gsm_a_rr_missing_mandatory_element);
10364 /* Wait Indication 1 Wait Indication 10.5.2.43 M V 1 */
10365 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_WAIT_IND, " - Wait Indication 1", ei_gsm_a_rr_missing_mandatory_element);
10366 /* Request Reference 2 Request Reference 10.5.2.30 M V 3 */
10367 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_REQ_REF, " - Request Reference 2", ei_gsm_a_rr_missing_mandatory_element);
10368 /* Wait Indication 2 Wait Indication 10.5.2.43 M V 1 */
10369 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_WAIT_IND, " - Wait Indication 2", ei_gsm_a_rr_missing_mandatory_element);
10370 /* Request Reference 3 Request Reference 10.5.2.30 M V 3 */
10371 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_REQ_REF, " - Request Reference 3", ei_gsm_a_rr_missing_mandatory_element);
10372 /* Wait Indication 3 Wait Indication 10.5.2.43 M V 1 */
10373 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_WAIT_IND, " - Wait Indication 3", ei_gsm_a_rr_missing_mandatory_element);
10374 /* Request Reference 4 Request Reference 10.5.2.30 M V 3 */
10375 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_REQ_REF, " - Request Reference 4", ei_gsm_a_rr_missing_mandatory_element);
10376 /* Wait Indication 4 Wait Indication 10.5.2.43 M V 1 */
10377 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_WAIT_IND, " - Wait Indication 4", ei_gsm_a_rr_missing_mandatory_element);
10378 /* IAR Rest Octets 10.5.2.19 M V 3 */
10379 if(tvb_reported_length_remaining(tvb,curr_offset) > 0)
10380 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_IAR_REST_OCT, NULL, ei_gsm_a_rr_missing_mandatory_element);
10385 * 9.1.21 Measurement report
10387 static void
10388 dtap_rr_meas_rep(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10390 uint32_t curr_offset;
10391 uint32_t consumed;
10392 unsigned curr_len;
10394 curr_offset = offset;
10395 curr_len = len;
10397 /* Measurement Results 10.5.2.20 M V 16 */
10398 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_MEAS_RES, NULL, ei_gsm_a_rr_missing_mandatory_element);
10402 * 9.1.21f Packet Assignment
10404 static void
10405 dtap_rr_pkt_assign(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10407 uint32_t curr_offset;
10408 uint32_t consumed;
10409 unsigned curr_len;
10411 curr_offset = offset;
10412 curr_len = len;
10414 /* GPRS broadcast information 10.5.2.14d M LV 7-n */
10415 ELEM_MAND_LV(GSM_A_PDU_TYPE_RR, DE_RR_GPRS_BROADCAST_INFORMATION, NULL, ei_gsm_a_rr_missing_mandatory_element);
10417 /* 0x22 RR Packet Uplink Assignment 10.5.2.25c O TLV 3-n */
10418 ELEM_OPT_TLV(0x22, GSM_A_PDU_TYPE_RR, DE_RR_PKT_UL_ASS, NULL);
10420 /* 0x23 RR Packet Downlink Assignment 10.5.2.25d O TLV 3-n */
10421 ELEM_OPT_TLV(0x23, GSM_A_PDU_TYPE_RR, DE_RR_PKT_DL_ASS, NULL);
10423 /* 0x12 Frequency List 10.5.2.13 C TLV 4-132 */
10424 ELEM_OPT_TLV(0x12, GSM_A_PDU_TYPE_RR, DE_RR_FREQ_LIST, " - Frequency List C2");
10426 /* 0x13 Mobile Allocation 10.5.2.21 C TLV 3-10 */
10427 ELEM_OPT_TLV(0x13, GSM_A_PDU_TYPE_RR, DE_RR_MOB_ALL, " - Mobile Allocation C2");
10429 /* 0x14 Channel Description 3 10.5.2.5c O TV 3 */
10430 ELEM_OPT_TV(0x14, GSM_A_PDU_TYPE_RR, DE_RR_CH_DSC3, " - Channel Description C2");
10432 /* 0x24 RR Packet Downlink Assignment Type 2 10.5.2.25e C TLV 3-n */
10433 ELEM_OPT_TLV(0x24, GSM_A_PDU_TYPE_RR, DE_RR_PKT_DL_ASS_TYPE2, NULL);
10435 /* 0x6D Extended TSC Set 10.5.2.82 C TV 2 */
10436 ELEM_OPT_TV(0x6d, GSM_A_PDU_TYPE_RR, DE_RR_EXTENDED_TSC_SET, NULL);
10438 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_gsm_a_rr_extraneous_data);
10442 * 9.1.21g Packet Notification
10444 static void
10445 dtap_rr_pkt_notif(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10447 uint32_t curr_offset;
10448 uint32_t consumed;
10449 unsigned curr_len;
10451 curr_offset = offset;
10452 curr_len = len;
10454 /* 0x10 P-TMSI 10.5.2.42 C TV 5 */
10455 ELEM_OPT_TV(0x10, GSM_A_PDU_TYPE_RR, DE_RR_TMSI_PTMSI, " - Packet TMSI");
10457 /* 0x11 Mobile Identity 10.5.1.4 C TLV 3-11 */
10458 ELEM_OPT_TLV(0x11, GSM_A_PDU_TYPE_COMMON, DE_MID, NULL);
10460 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_gsm_a_rr_extraneous_data);
10464 * 9.1.22 Paging Request Type 1
10466 static void
10467 dtap_rr_paging_req_type_1(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10469 uint32_t curr_offset;
10470 uint32_t consumed;
10471 unsigned curr_len;
10472 uint8_t l2plen = tvb_get_uint8(tvb, 0) >> 2;
10474 curr_offset = offset;
10475 curr_len = len;
10477 /* RR Page Mode 10.5.2.26 M V 1/2 */
10478 /* RR Channel Needed 10.5.2.8 M V 1/2 */
10479 ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_RR, DE_RR_PAGE_MODE,
10480 GSM_A_PDU_TYPE_RR, DE_RR_CHNL_NEEDED, ei_gsm_a_rr_missing_mandatory_element);
10482 /* RR Mobile Identity 10.5.1.4 M LV 2-9 */
10483 ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MID, " - Mobile Identity 1", ei_gsm_a_rr_missing_mandatory_element);
10485 /* RR Mobile Identity 10.5.1.4 O TLV 3-10 */
10486 ELEM_OPT_TLV(0x17, GSM_A_PDU_TYPE_COMMON, DE_MID, " - Mobile Identity 2");
10488 /* 9.1.22.4 P1 Rest Octets: The sum of the length of this IE and the L2 Pseudo Length of the message equals 22. */
10489 if (l2plen < 22) {
10490 /* RR P1 Rest Octets 10.5.2.23 M V 0-17 */
10491 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_P1_REST_OCT, NULL, ei_gsm_a_rr_missing_mandatory_element);
10497 * 9.1.23 Paging Request Type 2
10499 static void
10500 dtap_rr_paging_req_type_2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10502 uint32_t curr_offset;
10503 uint32_t consumed;
10504 unsigned curr_len;
10506 curr_offset = offset;
10507 curr_len = len;
10509 /* RR Page Mode 10.5.2.26 M V 1/2 */
10510 /* RR Channel Needed 10.5.2.8 M V 1/2 */
10511 ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_RR, DE_RR_PAGE_MODE,
10512 GSM_A_PDU_TYPE_RR, DE_RR_CHNL_NEEDED, ei_gsm_a_rr_missing_mandatory_element);
10514 /* RR TMSI/P-TMSI 10.5.2.42 M V 4 */
10515 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_TMSI_PTMSI, " - Mobile Identity 1", ei_gsm_a_rr_missing_mandatory_element);
10517 /* RR TMSI/P-TMSI 10.5.2.42 M V 4 */
10518 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_TMSI_PTMSI, " - Mobile Identity 2", ei_gsm_a_rr_missing_mandatory_element);
10520 /* RR Mobile Identity 10.5.1.4 O TLV 3-10 */
10521 ELEM_OPT_TLV(0x17, GSM_A_PDU_TYPE_COMMON, DE_MID, " - Mobile Identity 3");
10523 /* RR P2 Rest Octets 10.5.2.24 M V 1-11 */
10524 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_P2_REST_OCT, NULL, ei_gsm_a_rr_missing_mandatory_element);
10529 * 9.1.24 Paging Request Type 3
10531 static void
10532 dtap_rr_paging_req_type_3(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10534 uint32_t curr_offset;
10535 uint32_t consumed;
10536 unsigned curr_len;
10538 curr_offset = offset;
10539 curr_len = len;
10541 /* RR Page Mode 10.5.2.26 M V 1/2 */
10542 /* RR Channel Needed 10.5.2.8 M V 1/2 */
10543 ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_RR, DE_RR_PAGE_MODE,
10544 GSM_A_PDU_TYPE_RR, DE_RR_CHNL_NEEDED, ei_gsm_a_rr_missing_mandatory_element);
10546 /* RR TMSI/P-TMSI 10.5.2.42 M V 4 */
10547 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_TMSI_PTMSI, " - Mobile Identity 1", ei_gsm_a_rr_missing_mandatory_element);
10549 /* RR TMSI/P-TMSI 10.5.2.42 M V 4 */
10550 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_TMSI_PTMSI, " - Mobile Identity 2", ei_gsm_a_rr_missing_mandatory_element);
10552 /* RR TMSI/P-TMSI 10.5.2.42 M V 4 */
10553 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_TMSI_PTMSI, " - Mobile Identity 3", ei_gsm_a_rr_missing_mandatory_element);
10555 /* RR TMSI/P-TMSI 10.5.2.42 M V 4 */
10556 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_TMSI_PTMSI, " - Mobile Identity 4", ei_gsm_a_rr_missing_mandatory_element);
10558 /* RR P3 Rest Octets 10.5.2.25 M V 3 */
10559 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_P3_REST_OCT, NULL, ei_gsm_a_rr_missing_mandatory_element);
10564 * [4] 9.1.25 Paging response
10566 static void
10567 dtap_rr_paging_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10569 uint32_t curr_offset;
10570 uint32_t consumed;
10571 unsigned curr_len;
10572 uint8_t oct;
10573 proto_tree *subtree;
10575 curr_offset = offset;
10576 curr_len = len;
10579 * special dissection for Cipher Key Sequence Number
10581 oct = tvb_get_uint8(tvb, curr_offset);
10583 proto_tree_add_bits_item(tree, hf_gsm_a_rr_spare, tvb, (curr_offset<<3)+4, 4, ENC_NA);
10585 subtree = proto_tree_add_subtree(tree,
10586 tvb, curr_offset, 1, ett_gsm_common_elem[DE_CIPH_KEY_SEQ_NUM], NULL,
10587 val_to_str_ext_const(DE_CIPH_KEY_SEQ_NUM, &gsm_common_elem_strings_ext, ""));
10589 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_spare, tvb, (curr_offset<<3)+3, 1, ENC_NA);
10591 switch (oct & 0x07)
10593 case 0x07:
10594 proto_tree_add_uint_format_value(subtree, hf_gsm_a_rr_ciphering_key_seq_num,
10595 tvb, curr_offset, 1, oct, "No key is available");
10596 break;
10598 default:
10599 proto_tree_add_uint(subtree, hf_gsm_a_rr_ciphering_key_seq_num, tvb, curr_offset, 1, oct);
10600 break;
10603 curr_offset++;
10604 curr_len--;
10606 ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MS_CM_2, NULL, ei_gsm_a_rr_missing_mandatory_element);
10608 ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MID, NULL, ei_gsm_a_rr_missing_mandatory_element);
10610 ELEM_OPT_TV_SHORT(0xC0, GSM_A_PDU_TYPE_DTAP, DE_ADD_UPD_PARAMS, NULL);
10612 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_rr_extraneous_data);
10616 * [4] 9.1.26 Partial Release
10618 static void
10619 dtap_rr_partial_rel(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10621 uint32_t curr_offset;
10622 uint32_t consumed;
10623 unsigned curr_len;
10625 curr_offset = offset;
10626 curr_len = len;
10628 /* Channel Description 10.5.2.5 M V 3 */
10629 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_CH_DSC, NULL, ei_gsm_a_rr_missing_mandatory_element);
10631 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_rr_extraneous_data);
10635 * [4] 9.1.27 Partial Release Complete
10637 /* empty message */
10640 * [4] 9.1.28 Physical Information
10642 static void
10643 dtap_rr_phy_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10645 uint32_t curr_offset;
10646 uint32_t consumed;
10647 unsigned curr_len;
10649 curr_offset = offset;
10650 curr_len = len;
10652 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_TIMING_ADV, NULL, ei_gsm_a_rr_missing_mandatory_element);
10654 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_rr_extraneous_data);
10658 * [4] 9.1.29
10660 static void
10661 dtap_rr_rr_status(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10663 uint32_t curr_offset;
10664 uint32_t consumed;
10665 unsigned curr_len;
10667 curr_offset = offset;
10668 curr_len = len;
10670 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_CAUSE, NULL, ei_gsm_a_rr_missing_mandatory_element);
10672 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_gsm_a_rr_extraneous_data);
10676 * [4] 9.1.31
10678 static void
10679 dtap_rr_sys_info_1(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10681 uint32_t curr_offset;
10682 uint32_t consumed;
10683 unsigned curr_len;
10685 curr_offset = offset;
10686 curr_len = len;
10688 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_CELL_CH_DSC, NULL, ei_gsm_a_rr_missing_mandatory_element);
10690 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_RACH_CTRL_PARAM, NULL, ei_gsm_a_rr_missing_mandatory_element);
10692 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_SI1_REST_OCT, NULL, ei_gsm_a_rr_missing_mandatory_element);
10696 * [4] 9.1.32
10698 static void
10699 dtap_rr_sys_info_2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10701 uint32_t curr_offset;
10702 uint32_t consumed;
10703 unsigned curr_len;
10705 curr_offset = offset;
10706 curr_len = len;
10708 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_NEIGH_CELL_DESC, " - BCCH Frequency List", ei_gsm_a_rr_missing_mandatory_element);
10710 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_NCC_PERM, NULL, ei_gsm_a_rr_missing_mandatory_element);
10712 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_RACH_CTRL_PARAM, NULL, ei_gsm_a_rr_missing_mandatory_element);
10716 * [4] 9.1.33
10718 static void
10719 dtap_rr_sys_info_2bis(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10721 uint32_t curr_offset;
10722 uint32_t consumed;
10723 unsigned curr_len;
10725 curr_offset = offset;
10726 curr_len = len;
10728 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_NEIGH_CELL_DESC, " - Extended BCCH Frequency List", ei_gsm_a_rr_missing_mandatory_element);
10730 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_RACH_CTRL_PARAM, NULL, ei_gsm_a_rr_missing_mandatory_element);
10734 * [4] 9.1.34
10736 static void
10737 dtap_rr_sys_info_2ter(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10739 uint32_t curr_offset;
10740 uint32_t consumed;
10741 unsigned curr_len;
10743 curr_offset = offset;
10744 curr_len = len;
10746 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_NEIGH_CELL_DESC2, " - Extended BCCH Frequency List", ei_gsm_a_rr_missing_mandatory_element);
10748 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_SI2TER_REST_OCT, NULL, ei_gsm_a_rr_missing_mandatory_element);
10752 * [4] 9.1.34a
10754 static void
10755 dtap_rr_sys_info_2quater(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10757 uint32_t curr_offset;
10758 uint32_t consumed;
10759 unsigned curr_len;
10761 curr_offset = offset;
10762 curr_len = len;
10764 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_SI2QUATER_REST_OCT, NULL, ei_gsm_a_rr_missing_mandatory_element);
10768 * [4] 9.1.35
10770 static void
10771 dtap_rr_sys_info_3(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10773 uint32_t curr_offset;
10774 uint32_t consumed;
10775 unsigned curr_len;
10777 curr_offset = offset;
10778 curr_len = len;
10780 ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_CELL_ID, NULL, ei_gsm_a_rr_missing_mandatory_element);
10782 ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_LAI, NULL, ei_gsm_a_rr_missing_mandatory_element);
10784 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_CTRL_CH_DESC, NULL, ei_gsm_a_rr_missing_mandatory_element);
10786 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_CELL_OPT_BCCH, NULL, ei_gsm_a_rr_missing_mandatory_element);
10788 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_CELL_SEL_PARAM, NULL, ei_gsm_a_rr_missing_mandatory_element);
10790 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_RACH_CTRL_PARAM, NULL, ei_gsm_a_rr_missing_mandatory_element);
10792 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_SI3_REST_OCT, NULL, ei_gsm_a_rr_missing_mandatory_element);
10796 * [4] 9.1.36
10798 static void
10799 dtap_rr_sys_info_4(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10801 uint32_t curr_offset;
10802 uint32_t consumed;
10803 unsigned curr_len;
10805 curr_offset = offset;
10806 curr_len = len;
10808 ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_LAI, NULL, ei_gsm_a_rr_missing_mandatory_element);
10810 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_CELL_SEL_PARAM, NULL, ei_gsm_a_rr_missing_mandatory_element);
10812 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_RACH_CTRL_PARAM, NULL, ei_gsm_a_rr_missing_mandatory_element);
10814 ELEM_OPT_TV(0x64, GSM_A_PDU_TYPE_RR, DE_RR_CH_DSC, " - CBCH");
10816 ELEM_OPT_TLV(0x72, GSM_A_PDU_TYPE_RR, DE_RR_MOB_ALL, " - CBCH");
10818 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_SI4_REST_OCT, NULL, ei_gsm_a_rr_missing_mandatory_element);
10822 * [4] 9.1.37
10824 static void
10825 dtap_rr_sys_info_5(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10827 uint32_t curr_offset;
10828 uint32_t consumed;
10829 unsigned curr_len;
10831 curr_offset = offset;
10832 curr_len = len;
10834 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_NEIGH_CELL_DESC, " - BCCH Frequency List", ei_gsm_a_rr_missing_mandatory_element);
10838 * [4] 9.1.38
10840 static void
10841 dtap_rr_sys_info_5bis(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10843 uint32_t curr_offset;
10844 uint32_t consumed;
10845 unsigned curr_len;
10847 curr_offset = offset;
10848 curr_len = len;
10850 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_NEIGH_CELL_DESC, " - Extended BCCH Frequency List", ei_gsm_a_rr_missing_mandatory_element);
10854 * [4] 9.1.39
10856 static void
10857 dtap_rr_sys_info_5ter(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10859 uint32_t curr_offset;
10860 uint32_t consumed;
10861 unsigned curr_len;
10863 curr_offset = offset;
10864 curr_len = len;
10866 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_NEIGH_CELL_DESC2, " - Extended BCCH Frequency List", ei_gsm_a_rr_missing_mandatory_element);
10870 * [4] 9.1.40
10872 static void
10873 dtap_rr_sys_info_6(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10875 uint32_t curr_offset;
10876 uint32_t consumed;
10877 unsigned curr_len;
10879 curr_offset = offset;
10880 curr_len = len;
10882 ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_CELL_ID, NULL, ei_gsm_a_rr_missing_mandatory_element);
10884 ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_LAI, NULL, ei_gsm_a_rr_missing_mandatory_element);
10886 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_CELL_OPT_SACCH, NULL, ei_gsm_a_rr_missing_mandatory_element);
10888 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_NCC_PERM, NULL, ei_gsm_a_rr_missing_mandatory_element);
10890 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_SI6_REST_OCT, NULL, ei_gsm_a_rr_missing_mandatory_element);
10894 * [4] 9.1.43a
10896 static void
10897 dtap_rr_sys_info_13(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10899 uint32_t curr_offset;
10900 uint32_t consumed;
10901 unsigned curr_len;
10903 curr_offset = offset;
10904 curr_len = len;
10906 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_SI13_REST_OCT, NULL, ei_gsm_a_rr_missing_mandatory_element);
10910 * [4] 9.1.43b
10912 static void
10913 dtap_rr_sys_info_21(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10915 uint32_t curr_offset;
10916 uint32_t consumed;
10917 unsigned curr_len;
10919 curr_offset = offset;
10920 curr_len = len;
10922 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_SI21_REST_OCT, NULL, ei_gsm_a_rr_missing_mandatory_element);
10926 * [4] 9.1.44 Talker indication
10928 static void
10929 dtap_rr_talker_indication(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10931 uint32_t curr_offset;
10932 uint32_t consumed;
10933 unsigned curr_len;
10935 curr_offset = offset;
10936 curr_len = len;
10938 /* Mobile Station Classmark 2 10.5.1.6 M LV */
10939 ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MS_CM_2, NULL, ei_gsm_a_rr_missing_mandatory_element);
10941 /* Mobile identity 10.5.1.4 M LV */
10942 ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MID, NULL, ei_gsm_a_rr_missing_mandatory_element);
10944 /* Ciphering Key Sequence Number 10.5.1.2 O TV 1 */
10945 ELEM_OPT_TV_SHORT(0xD0,GSM_A_PDU_TYPE_COMMON, DE_CIPH_KEY_SEQ_NUM,NULL);
10949 * [4] 9.1.48 Uplink release
10951 static void
10952 dtap_rr_upl_rel(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10954 uint32_t curr_offset;
10955 uint32_t consumed;
10956 unsigned curr_len;
10958 curr_offset = offset;
10959 curr_len = len;
10961 /* RR Cause 10.5.2.31 M V 1 */
10962 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_CAUSE, NULL, ei_gsm_a_rr_missing_mandatory_element);
10966 * [4] 9.1.49 VGCS uplink grant
10968 static void
10969 dtap_rr_vgcs_upl_grant(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10971 uint32_t curr_offset;
10972 uint32_t consumed;
10973 unsigned curr_len;
10975 curr_offset = offset;
10976 curr_len = len;
10978 /* Request reference 10.5.2.30 M V 3 */
10979 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_REQ_REF, NULL, ei_gsm_a_rr_missing_mandatory_element);
10981 /* Timing advance 10.5.2.40 M V 1 */
10982 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_TIMING_ADV, NULL, ei_gsm_a_rr_missing_mandatory_element);
10986 * [4] 9.1.51 Extended Measurement Order
10988 static void
10989 dtap_rr_ext_meas_order(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10991 uint32_t curr_offset;
10992 uint32_t consumed;
10993 unsigned curr_len;
10995 curr_offset = offset;
10996 curr_len = len;
10998 /* Extended Measurement Frequency List 10.5.2.46 M V 16 */
10999 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_EXT_MEAS_FREQ_LIST, NULL, ei_gsm_a_rr_missing_mandatory_element);
11003 * [4] 9.1.52 Extended Measurement Report
11005 static void
11006 dtap_rr_ext_meas_report(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
11008 uint32_t curr_offset;
11009 uint32_t consumed;
11010 unsigned curr_len;
11012 curr_offset = offset;
11013 curr_len = len;
11015 /* Extended Measurement Result 10.5.2.45 M V 16 */
11016 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_EXT_MEAS_RESULT, NULL, ei_gsm_a_rr_missing_mandatory_element);
11020 * 9.1.53 Application Information
11022 static void
11023 dtap_rr_app_inf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
11025 uint32_t curr_offset;
11026 uint32_t consumed;
11027 unsigned curr_len;
11029 curr_offset = offset;
11030 curr_len = len;
11033 * APDU ID IE (10.5.2.48) M V 1/2
11034 * APDU Flags (10.5.2.49) M V 1/2
11036 ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_RR, DE_RR_APDU_ID,
11037 GSM_A_PDU_TYPE_RR, DE_RR_APDU_FLAGS,
11038 ei_gsm_a_rr_missing_mandatory_element);
11040 ELEM_MAND_LV(GSM_A_PDU_TYPE_RR, DE_RR_APDU_DATA, NULL, ei_gsm_a_rr_missing_mandatory_element);
11044 * [4] 9.1.54 Measurement Information
11046 static const value_string gsm_a_rr_3g_wait_vals[] = {
11047 { 0, "1 instance that contain 3G Neighbour Cell Description shall be received"},
11048 { 1, "2 instances that contain 3G Neighbour Cell Description shall be received"},
11049 { 2, "3 instances that contain 3G Neighbour Cell Description shall be received"},
11050 { 3, "4 instances that contain 3G Neighbour Cell Description shall be received"},
11051 { 4, "5 instances that contain 3G Neighbour Cell Description shall be received"},
11052 { 5, "6 instances that contain 3G Neighbour Cell Description shall be received"},
11053 { 6, "7 instances that contain 3G Neighbour Cell Description shall be received"},
11054 { 7, "8 instances that contain 3G Neighbour Cell Description shall be received"},
11055 { 0, NULL }
11059 static void
11060 sacch_rr_meas_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_)
11062 proto_tree *subtree = NULL, *subtree2 = NULL;
11063 proto_item *item, *item2;
11064 uint32_t curr_offset;
11065 int bit_offset, bit_offset_sav, bit_offset_sav2;
11066 uint8_t value, idx;
11067 uint8_t tvb_len = tvb_reported_length(tvb);
11068 uint16_t bit_len = tvb_len << 3;
11070 curr_offset = offset;
11071 bit_offset = curr_offset << 3;
11073 proto_tree_add_bits_item(tree, hf_gsm_a_rr_ba_ind, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
11074 bit_offset += 1;
11075 proto_tree_add_bits_item(tree, hf_gsm_a_rr_3g_ba_ind, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
11076 bit_offset += 1;
11077 proto_tree_add_bits_item(tree, hf_gsm_a_rr_mp_change_mark, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
11078 bit_offset += 1;
11079 proto_tree_add_bits_item(tree, hf_gsm_a_rr_mi_index, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
11080 bit_offset += 4;
11081 proto_tree_add_bits_item(tree, hf_gsm_a_rr_mi_count, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
11082 bit_offset += 4;
11083 proto_tree_add_bits_item(tree, hf_gsm_a_rr_pwrc, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
11084 bit_offset += 1;
11085 proto_tree_add_bits_item(tree, hf_gsm_a_rr_gsm_report_type, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
11086 bit_offset += 1;
11087 proto_tree_add_bits_item(tree, hf_gsm_a_rr_reporting_rate, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
11088 bit_offset +=1;
11089 proto_tree_add_bits_item(tree, hf_gsm_a_rr_invalid_bsic_reporting, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
11090 bit_offset +=1;
11091 if (gsm_rr_csn_flag(tvb, tree, bit_offset++, hf_gsm_a_rr_real_time_difference_description))
11092 { /* Real Time Difference Description */
11093 bit_offset += de_rr_rtd_desc(tvb, tree, bit_offset, DE_RR_REST_OCTETS_RTD_DESC);
11095 if (gsm_rr_csn_flag(tvb, tree, bit_offset++, hf_gsm_a_rr_bsic_description))
11096 { /* BSIC Description */
11097 bit_offset += de_rr_bsic_desc(tvb, tree, bit_offset, DE_RR_REST_OCTETS_BSIC_DESC);
11099 if (gsm_rr_csn_flag(tvb, tree, bit_offset++, hf_gsm_a_rr_report_priority_description))
11100 { /* Report Priority Description */
11101 bit_offset += de_rr_report_priority_desc(tvb, tree, bit_offset, DE_RR_REST_OCTETS_REPORT_PRIO_DESC);
11103 if (gsm_rr_csn_flag(tvb, tree, bit_offset++, hf_gsm_a_rr_measurement_parameters_description))
11104 { /* Measurement Parameters Description */
11105 bit_offset += de_rr_meas_param_desc(tvb, tree, bit_offset, DE_RR_REST_OCTETS_MEAS_PARAM_DESC);
11107 if (gsm_rr_csn_flag(tvb, tree, bit_offset++, hf_gsm_a_rr_future_extensions_of_the_2g_parameters))
11108 { /* used for future extensions of the 2G parameters */
11109 value = tvb_get_bits8(tvb,bit_offset,8);
11110 bit_offset += 8 + value + 1;
11112 if (gsm_rr_csn_flag(tvb, tree, bit_offset++, hf_gsm_a_rr_3g_neighbour_cell_description))
11113 { /* 3G Neighbour Cell Description */
11114 bit_offset_sav = bit_offset;
11115 subtree = proto_tree_add_subtree(tree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_NEIGH_CELL_DESC], &item,
11116 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_NEIGH_CELL_DESC]);
11117 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_3g_wait_present))
11119 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_3g_wait, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
11120 bit_offset += 3;
11122 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_index_start_3g_present))
11124 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_index_start_3g, tvb, bit_offset, 7, ENC_BIG_ENDIAN);
11125 bit_offset += 7;
11127 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_absolute_index_start_emr_present))
11129 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_absolute_index_start_emr, tvb, bit_offset, 7, ENC_BIG_ENDIAN);
11130 bit_offset += 7;
11132 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_utran_fdd_description))
11133 { /* UTRAN FDD Description */
11134 bit_offset += de_rr_si2quater_meas_info_utran_fdd_desc(tvb, subtree, bit_offset);
11136 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_utran_tdd_description))
11137 { /* UTRAN TDD Description */
11138 bit_offset += de_rr_si2quater_meas_info_utran_tdd_desc(tvb, subtree, bit_offset);
11140 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_cdma2000_description))
11141 { /* CDMA2000 Description */
11142 bit_offset_sav2 = bit_offset;
11143 subtree2 = proto_tree_add_subtree(subtree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_CDMA2000_DESC], &item2,
11144 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_CDMA2000_DESC]);
11145 bit_offset += 16; /* cdma2000 frequency band + cdma2000 frequency */
11146 idx = tvb_get_bits8(tvb,bit_offset,5); /* number_cdma2000_cells */
11147 bit_offset += 5;
11148 while (idx)
11150 bit_offset += 9; /* Pilot PN offset */
11151 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_additional_information_for_3x_auxiliary_pilot))
11153 value = tvb_get_bits8(tvb,bit_offset,3);
11154 switch (value)
11156 case 0:
11157 bit_offset += 5; /* TD_MODE + TD_POWER_LEVEL */
11158 break;
11159 case 1:
11160 bit_offset += 2; /* QOF */
11161 bit_offset += tvb_get_bits8(tvb,bit_offset,3) + 3 + 6; /* WALSH_LEN_A + bit(val(WALSH_LEN_A)+6) */
11162 break;
11163 case 2:
11164 bit_offset += 2; /* QOF */
11165 bit_offset += tvb_get_bits8(tvb,bit_offset,3) + 3 + 6; /* WALSH_LEN_B + bit(val(WALSH_LEN_B)+6) */
11166 bit_offset += 4; /* AUX_TD_POWER_LEVEL + TD_MODE */
11167 break;
11168 case 3:
11169 bit_offset += 8; /* SR3_PRIM_PILOT + SR3_PILOT_POWER1 + SR3_PILOT_POWER2 */
11170 break;
11171 case 6:
11172 bit_offset += 10; /* SR3_PRIM_PILOT + SR3_PILOT_POWER1 + SR3_PILOT_POWER2 + QOF */
11173 bit_offset += tvb_get_bits8(tvb,bit_offset,3) + 3 + 6; /* WALSH_LEN_C + bit(val(WALSH_LEN_C)+6) */
11174 if (tvb_get_bits8(tvb,bit_offset,1))
11176 bit_offset += 3; /* 1 + QOF1 */
11177 bit_offset += tvb_get_bits8(tvb,bit_offset,3) + 3 + 6; /* WALSH_LENGTH1 + bit(val(WALSH_LENGTH1)+6) */
11179 else
11180 bit_offset += 1;
11181 if (tvb_get_bits8(tvb,bit_offset,1))
11183 bit_offset += 3; /* 1 + QOF2 */
11184 bit_offset += tvb_get_bits8(tvb,bit_offset,3) + 3 + 6; /* WALSH_LENGTH2 + bit(val(WALSH_LENGTH2)+6) */
11186 else
11187 bit_offset += 1;
11188 break;
11189 default:
11190 /* decoding sequence is unknown ! */
11191 return;
11194 idx -= 1;
11196 proto_tree_add_expert_format(subtree2, pinfo, &ei_gsm_a_rr_data_not_dissected, tvb, bit_offset_sav2>>3, ((bit_offset-bit_offset_sav2)>>3)+1, "Data (Not decoded)");
11197 proto_item_set_len(item2, (bit_offset>>3) - (bit_offset_sav>>3)+1);
11199 proto_item_set_len(item, (bit_offset>>3) - (bit_offset_sav>>3)+1);
11201 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_3g_measurement_parameters_description))
11202 { /* 3G Measurement Parameters Description */
11203 uint8_t reporting_quant = 0;
11204 bit_offset_sav = bit_offset;
11205 subtree = proto_tree_add_subtree(tree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_3G_MEAS_PARAM_DESC], &item,
11206 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_3G_MEAS_PARAM_DESC]);
11207 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_qsearch_c, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
11208 bit_offset += 4;
11209 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_3g_search_prio, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
11210 bit_offset += 1;
11211 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_fdd_rep_quant, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
11212 reporting_quant = gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_3g_reporting_quantity);
11213 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_fdd_multirat_reporting_present))
11215 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_fdd_multirat_reporting, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
11216 bit_offset += 2;
11218 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_fdd_reporting_offset_present))
11220 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_fdd_reporting_offset, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
11221 bit_offset += 3;
11222 if (reporting_quant == 0)
11224 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_fdd_reporting_threshold_rscp, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
11226 else
11228 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_fdd_reporting_threshold_ecn0, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
11230 bit_offset += 3;
11232 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_tdd_multirat_reporting_present))
11234 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_tdd_multirat_reporting, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
11235 bit_offset += 2;
11237 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_tdd_reporting_offset_present))
11239 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_tdd_reporting_offset, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
11240 bit_offset += 3;
11241 if (reporting_quant == 0)
11243 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_tdd_reporting_threshold_rscp, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
11245 else
11247 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_tdd_reporting_threshold_ecn0, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
11249 bit_offset += 3;
11251 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_cdma2000_multirat_reporting))
11252 bit_offset += 2; /* CDMA2000 Multirat Reporting */
11253 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_cdma2000_reporting_threshold))
11254 bit_offset += 6; /* CDMA2000 Reporting Offset + CDMA2000 Reporting Threshold */
11255 proto_item_set_len(item, (bit_offset>>3) - (bit_offset_sav>>3)+1);
11258 /* Null breakpoint */
11259 if (bit_len - bit_offset > 0)
11261 /* There is still room left in the Rest Octets IE */
11262 if (gsm_rr_csn_HL_flag(tvb, tree, 0, bit_offset++, hf_gsm_a_rr_additions_in_rel_5))
11263 { /* Additions in Rel-5 */
11264 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_3g_additional_measurement_parameters_description_2))
11265 { /* 3G Additional Measurement Parameters Description 2 */
11266 bit_offset += de_rr_3g_add_meas_param_desc2(tvb, tree, bit_offset);
11269 /* Null breakpoint */
11270 if (bit_len - bit_offset > 0)
11272 /* There is still room left in the Rest Octets IE */
11273 if (gsm_rr_csn_HL_flag(tvb, tree, 0, bit_offset++, hf_gsm_a_rr_additions_in_rel_7))
11274 { /* Additions in Rel-7 */
11275 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_700_reporting))
11277 proto_tree_add_bits_item(tree, hf_gsm_a_rr_700_reporting_offset, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
11278 bit_offset += 3;
11279 proto_tree_add_bits_item(tree, hf_gsm_a_rr_700_reporting_threshold, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
11280 bit_offset += 3;
11282 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_810_reporting))
11284 proto_tree_add_bits_item(tree, hf_gsm_a_rr_810_reporting_offset, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
11285 bit_offset += 3;
11286 proto_tree_add_bits_item(tree, hf_gsm_a_rr_810_reporting_threshold, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
11287 bit_offset += 3;
11290 /* Null breakpoint */
11291 if (bit_len - bit_offset > 0)
11293 /* There is still room left in the Rest Octets IE */
11294 /* Additions in Rel-8 */
11295 if (gsm_rr_csn_HL_flag(tvb, tree, 0, bit_offset++, hf_gsm_a_rr_additions_in_rel_8))
11296 { /* Additions in Rel-8 */
11297 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_3g_supplementary_parameters_description))
11299 bit_offset += de_rr_3g_supplementary_param_desc_mi(tvb, tree, bit_offset);
11301 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_eutran_parameters_description))
11303 bit_offset += de_rr_eutran_param_desc_mi(tvb, tree, bit_offset);
11305 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_eutran_csg_description))
11307 bit_offset += de_rr_eutran_csg_desc_mi(tvb, tree, bit_offset);
11315 gsm_rr_padding_bits(tree, tvb, bit_offset, tvb_len, PADDING_BYTE);
11318 static uint32_t
11319 sacch_rr_eutran_meas_report(tvbuff_t *tvb, proto_tree *tree, uint32_t bit_offset, unsigned len_in_bit _U_)
11321 proto_tree *subtree;
11322 int curr_bit_offset;
11323 int8_t n_eutran;
11325 curr_bit_offset = bit_offset;
11327 subtree = proto_tree_add_subtree(tree, tvb, curr_bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_EUTRAN_MEASUREMENT_REPORT], NULL,
11328 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_EUTRAN_MEASUREMENT_REPORT]);
11330 n_eutran = tvb_get_bits8(tvb,curr_bit_offset,2);
11331 n_eutran += 1;
11332 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_mr_n_eutran, tvb, curr_bit_offset, 2, ENC_BIG_ENDIAN);
11333 curr_bit_offset += 2;
11335 while ( (n_eutran > 0) && (curr_bit_offset - bit_offset < len_in_bit) )
11337 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_mr_freq_idx, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
11338 curr_bit_offset += 3;
11339 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_mr_cell_id, tvb, curr_bit_offset, 9, ENC_BIG_ENDIAN);
11340 curr_bit_offset += 9;
11341 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_eutran_mr_rpt_quantity, tvb, curr_bit_offset, 6, ENC_BIG_ENDIAN);
11342 curr_bit_offset += 6;
11343 n_eutran -= 1;
11346 return curr_bit_offset - bit_offset;
11350 * [4] 9.1.55 Enhanced Measurement Information
11352 static const true_false_string gsm_a_rr_bsic_seen_value = {
11353 "One Cell or more with invalid BSIC and allowed NCC part of BSIC is seen",
11354 "No cell with invalid BSIC and allowed NCC part of BSIC is seen"
11357 static const true_false_string gsm_a_rr_scale_value = {
11358 "+10 dB",
11359 "0 dB"
11362 static const value_string gsm_a_rr_mean_bep_gmsk_vals[] = {
11363 { 0, "log10(BEP) > -0.60"},
11364 { 1, "-0.70 < log10(BEP) < -0.60"},
11365 { 2, "-0.80 < log10(BEP) < -0.70"},
11366 { 3, "-0.90 < log10(BEP) < -0.80"},
11367 { 4, "-1.00 < log10(BEP) < -0.90"},
11368 { 5, "-1.10 < log10(BEP) < -1.00"},
11369 { 6, "-1.20 < log10(BEP) < -1.10"},
11370 { 7, "-1.30 < log10(BEP) < -1.20"},
11371 { 8, "-1.40 < log10(BEP) < -1.30"},
11372 { 9, "-1.50 < log10(BEP) < -1.40"},
11373 { 10, "-1.60 < log10(BEP) < -1.50"},
11374 { 11, "-1.70 < log10(BEP) < -1.60"},
11375 { 12, "-1.80 < log10(BEP) < -1.70"},
11376 { 13, "-1.90 < log10(BEP) < -1.80"},
11377 { 14, "-2.00 < log10(BEP) < -1.90"},
11378 { 15, "-2.10 < log10(BEP) < -2.00"},
11379 { 16, "-2.20 < log10(BEP) < -2.10"},
11380 { 17, "-2.30 < log10(BEP) < -2.20"},
11381 { 18, "-2.40 < log10(BEP) < -2.30"},
11382 { 19, "-2.50 < log10(BEP) < -2.40"},
11383 { 20, "-2.60 < log10(BEP) < -2.50"},
11384 { 21, "-2.70 < log10(BEP) < -2.60"},
11385 { 22, "-2.80 < log10(BEP) < -2.70"},
11386 { 23, "-2.90 < log10(BEP) < -2.80"},
11387 { 24, "-3.00 < log10(BEP) < -2.90"},
11388 { 25, "-3.10 < log10(BEP) < -3.00"},
11389 { 26, "-3.20 < log10(BEP) < -3.10"},
11390 { 27, "-3.30 < log10(BEP) < -3.20"},
11391 { 28, "-3.40 < log10(BEP) < -3.30"},
11392 { 29, "-3.50 < log10(BEP) < -3.40"},
11393 { 30, "-3.60 < log10(BEP) < -3.50"},
11394 { 31, "log10(BEP) < -3.60"},
11395 { 0, NULL }
11398 static const value_string gsm_a_rr_cv_bep_vals[] = {
11399 { 0, "1.75 < CV BEP < 2.00"},
11400 { 1, "1.50 < CV BEP < 1.75"},
11401 { 2, "1.25 < CV BEP < 1.50"},
11402 { 3, "1.00 < CV BEP < 1.25"},
11403 { 4, "0.75 < CV BEP < 1.00"},
11404 { 5, "0.50 < CV BEP < 0.75"},
11405 { 6, "0.25 < CV BEP < 0.50"},
11406 { 7, "0.00 < CV BEP < 0.25"},
11407 { 0, NULL }
11410 static void
11411 sacch_rr_enh_meas_report(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
11413 proto_tree *subtree;
11414 proto_item *item;
11415 uint32_t curr_offset;
11416 unsigned bit_offset, bit_offset_sav;
11417 uint8_t tvb_len = tvb_reported_length(tvb);
11418 uint16_t bit_len = tvb_len << 3;
11419 uint8_t idx;
11421 curr_offset = offset;
11422 bit_offset = curr_offset << 3;
11424 proto_tree_add_bits_item(tree, hf_gsm_a_rr_ba_used, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
11425 bit_offset += 1;
11426 proto_tree_add_bits_item(tree, hf_gsm_a_rr_3g_ba_used, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
11427 bit_offset += 1;
11428 proto_tree_add_bits_item(tree, hf_gsm_a_rr_bsic_seen, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
11429 bit_offset += 1;
11430 proto_tree_add_bits_item(tree, hf_gsm_a_rr_scale, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
11431 bit_offset += 1;
11432 if (gsm_rr_csn_flag(tvb, tree, bit_offset++, hf_gsm_a_rr_serving_cell_data))
11433 { /* Serving cell data */
11434 bit_offset_sav = bit_offset;
11435 subtree = proto_tree_add_subtree(tree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_SERVING_CELL_DATA], &item,
11436 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_SERVING_CELL_DATA]);
11437 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_dtx_used, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
11438 bit_offset += 1;
11439 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_rxlev_full_serv_cell, tvb, bit_offset, 6, ENC_BIG_ENDIAN);
11440 bit_offset += 6;
11441 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_rxqual_full_serv_cell, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
11442 bit_offset += 3;
11443 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_mean_bep_gmsk, tvb, bit_offset, 5, ENC_BIG_ENDIAN);
11444 bit_offset += 5;
11445 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_mean_cv_bep, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
11446 bit_offset += 3;
11447 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_nbr_rcvd_blocks, tvb, bit_offset, 5, ENC_BIG_ENDIAN);
11448 bit_offset += 5;
11449 proto_item_set_len(item, (bit_offset>>3) - (bit_offset_sav>>3)+1);
11451 while (gsm_rr_csn_flag(tvb, tree, bit_offset++, hf_gsm_a_rr_repeated_invalid_bsic_information))
11452 { /* Repeated Invalid BSIC Information */
11453 bit_offset_sav = bit_offset;
11454 subtree = proto_tree_add_subtree(tree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_REPEAT_INV_BSIC_INFO], &item,
11455 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_REPEAT_INV_BSIC_INFO]);
11456 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_bcch_freq_ncell, tvb, bit_offset, 5, ENC_BIG_ENDIAN);
11457 bit_offset += 5;
11458 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_bsic_ncell, tvb, bit_offset, 6, ENC_BIG_ENDIAN);
11459 bit_offset += 6;
11460 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_rxlev_ncell, tvb, bit_offset, 6, ENC_BIG_ENDIAN);
11461 bit_offset += 6;
11462 proto_item_set_len(item, (bit_offset>>3) - (bit_offset_sav>>3)+1);
11464 if (gsm_rr_csn_flag(tvb, tree, bit_offset++, hf_gsm_a_rr_bitmap_type_reporting))
11465 { /* Bitmap Type Reporting */
11466 subtree = proto_tree_add_subtree(tree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_BITMAP_TYPE_REPORTING], NULL,
11467 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_BITMAP_TYPE_REPORTING]);
11468 idx = 0;
11469 while (((unsigned)(bit_offset>>3) <= (offset + len)) && (idx < 96))
11471 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_reporting_quantity_present))
11473 proto_tree_add_uint(subtree, hf_gsm_a_rr_neighbour_cell_list_index, tvb, bit_offset>>3, 1, idx);
11474 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_reporting_quantity, tvb, bit_offset, 6, ENC_BIG_ENDIAN);
11475 bit_offset += 6;
11477 idx += 1;
11480 /* Null breakpoint */
11481 if (bit_offset < bit_len)
11483 if (gsm_rr_csn_HL_flag(tvb, tree, 0, bit_offset++, hf_gsm_a_rr_additions_in_rel_8))
11485 int8_t bitmap_length;
11486 bit_offset_sav = bit_offset;
11487 subtree = proto_tree_add_subtree(tree, tvb, bit_offset>>3, -1, ett_gsm_rr_rest_octets_elem[DE_RR_REST_OCTETS_REPORTING_QUANTITY], &item,
11488 gsm_rr_rest_octets_elem_strings[DE_RR_REST_OCTETS_REPORTING_QUANTITY]);
11490 bitmap_length = tvb_get_bits8(tvb,bit_offset,7);
11491 bitmap_length += 1;
11492 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_emr_bitmap_length, tvb, bit_offset, 7, ENC_BIG_ENDIAN);
11493 bit_offset += 7;
11495 /* REPORTING_QUANTITY */
11496 idx = 0;
11497 while ((unsigned)(bit_offset>>3) <= (offset + len) && (idx < bitmap_length) )
11499 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_reporting_quantity_present))
11501 proto_tree_add_uint(subtree, hf_gsm_a_rr_neighbour_cell_list_index, tvb, bit_offset>>3, 1, idx);
11502 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_reporting_quantity, tvb, bit_offset, 6, ENC_BIG_ENDIAN);
11503 bit_offset += 6;
11505 idx += 1;
11508 /* E-UTRAN Measurement Report */
11509 if (gsm_rr_csn_flag(tvb, subtree, bit_offset++, hf_gsm_a_rr_e_utran_measurement_report))
11511 bit_offset += sacch_rr_eutran_meas_report(tvb, subtree, bit_offset, len*8-(bit_offset-offset*8));
11513 proto_item_set_len(item, (bit_offset>>3) - (bit_offset_sav>>3)+1);
11516 gsm_rr_padding_bits(tree, tvb, bit_offset, tvb_len, PADDING_BYTE);
11520 * [4] 9.1.59 EC-Immediate Assignment Type 1
11522 static void
11523 dtap_rr_ec_imm_ass_type_1(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
11525 uint32_t curr_offset;
11526 uint32_t consumed;
11527 unsigned curr_len;
11529 curr_offset = offset;
11530 curr_len = len;
11532 /* Page Mode 10.5.2.26 M V 1/2 */
11533 /* Feature indicator 10.5.2.76 M V 1/2 */
11534 ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_RR, DE_RR_PAGE_MODE,
11535 GSM_A_PDU_TYPE_RR, DE_RR_FEATURE_INDICATOR, ei_gsm_a_rr_missing_mandatory_element);
11537 /* Request Reference 1 Request Reference 10.5.2.30 M V 3 */
11538 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_REQ_REF, NULL, ei_gsm_a_rr_missing_mandatory_element);
11539 /* EC Channel Description EC Channel Description 10.5.2.84 M V 2 */
11540 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_EC_PKT_CH_DSC1, NULL, ei_gsm_a_rr_missing_mandatory_element);
11541 /* Timing Advance 1 Timing Advance 10.5.2.86 M V 3-14 */
11542 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_EC_FUA, NULL, ei_gsm_a_rr_missing_mandatory_element);
11548 * [4] 9.1.60 EC-Immediate Assignment Type 2
11550 static void
11551 dtap_rr_ec_imm_ass_type_2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_)
11553 proto_tree *subtree;
11554 uint32_t curr_offset;
11555 uint32_t curr_bit_offset;
11557 curr_offset = offset;
11558 curr_bit_offset = curr_offset << 3;
11560 curr_bit_offset += 4; /* Skip msgtype */
11562 proto_tree_add_bits_item(tree, hf_gsm_a_rr_ec_used_dl_cc, tvb, curr_bit_offset, 2, ENC_BIG_ENDIAN);
11563 curr_bit_offset += 2;
11565 if (gsm_rr_csn_flag(tvb, tree, curr_bit_offset++, hf_gsm_a_rr_ec_page_extension_exist))
11567 proto_tree_add_bits_item(tree, hf_gsm_a_rr_ec_page_extension, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
11568 curr_bit_offset += 4;
11571 curr_bit_offset += de_rr_ec_request_reference(tvb, tree, pinfo, curr_bit_offset, NULL);
11573 curr_bit_offset += de_rr_ec_pkt_ch_dsc2(tvb, tree, pinfo, curr_bit_offset);
11575 /*TODO: reuse legacy FN - use subtree there?*/
11576 /*de_rr_ec_fua(tvb, tree, pinfo, (1<<31)|curr_bit_offset, len, NULL, 0);*/
11577 subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_gsm_rr_elem[DE_RR_EC_FUA], NULL,
11578 val_to_str_ext_const(DE_RR_EC_FUA, &gsm_rr_elem_strings_ext, ""));
11580 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_ec_enhanced_access_burst, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
11581 curr_bit_offset +=1;
11583 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_timing_adv_present))
11585 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_timing_adv, tvb, curr_bit_offset, 6, ENC_BIG_ENDIAN);
11586 curr_bit_offset += 6;
11589 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_ec_starting_ul_timeslot, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
11590 curr_bit_offset += 3;
11591 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_tfi_assignment, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
11592 curr_bit_offset += 5;
11593 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_ec_starting_dl_timeslot_offset, tvb, curr_bit_offset, 2, ENC_BIG_ENDIAN);
11594 curr_bit_offset += 2;
11595 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_ec_overlaid_cdma_code, tvb, curr_bit_offset, 2, ENC_BIG_ENDIAN);
11596 curr_bit_offset += 2;
11598 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_ec_mcs_exist))
11599 { /* MCS Description */
11600 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_egprs_mcs, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
11601 curr_bit_offset += 4;
11604 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_gamma, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
11605 curr_bit_offset += 5;
11606 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_ec_alpha_enable, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
11607 curr_bit_offset += 1;
11609 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_p0_present))
11611 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_p0, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
11612 curr_bit_offset += 4;
11613 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_pr_mode, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
11614 curr_bit_offset += 1;
11617 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_ec_start_first_ul_data_block, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
11618 curr_bit_offset += 4;
11620 while(gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_ec_fua_gap_list))
11622 if (!gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_ec_start_fn_next_data_block_exist))
11624 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_ec_start_fn_next_data_block, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
11625 curr_bit_offset += 3;
11627 else
11629 proto_tree_add_uint(subtree, hf_gsm_a_rr_ec_start_fn_next_data_block, tvb, (curr_bit_offset>>3), 0, 0);
11637 * [4] 9.1.61 EC-Immediate Assignment Reject
11639 static void
11640 dtap_rr_ec_imm_ass_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_)
11642 uint32_t curr_offset;
11643 uint32_t curr_bit_offset;
11645 curr_offset = offset;
11646 curr_bit_offset = curr_offset << 3;
11648 curr_bit_offset += 4; /* Skip msgtype */
11650 proto_tree_add_bits_item(tree, hf_gsm_a_rr_ec_used_dl_cc, tvb, curr_bit_offset, 2, ENC_BIG_ENDIAN);
11651 curr_bit_offset += 2;
11653 if (gsm_rr_csn_flag(tvb, tree, curr_bit_offset++, hf_gsm_a_rr_ec_page_extension_exist))
11655 proto_tree_add_bits_item(tree, hf_gsm_a_rr_ec_page_extension, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
11656 curr_bit_offset += 4;
11659 curr_bit_offset += de_rr_ec_request_reference(tvb, tree, pinfo, curr_bit_offset, " - 1");
11661 proto_tree_add_bits_item(tree, hf_gsm_a_rr_ec_wait_timer, tvb, curr_bit_offset, 8, ENC_BIG_ENDIAN);
11662 curr_bit_offset += 8;
11664 if (gsm_rr_csn_flag(tvb, tree, curr_bit_offset++, hf_gsm_a_rr_ec_req_ref_2_present))
11666 curr_bit_offset += de_rr_ec_request_reference(tvb, tree, pinfo, curr_bit_offset, " - 2");
11667 proto_tree_add_bits_item(tree, hf_gsm_a_rr_ec_wait_timer, tvb, curr_bit_offset, 8, ENC_BIG_ENDIAN);
11668 curr_bit_offset += 8;
11671 if (gsm_rr_csn_flag(tvb, tree, curr_bit_offset++, hf_gsm_a_rr_ec_req_ref_3_present))
11673 curr_bit_offset += de_rr_ec_request_reference(tvb, tree, pinfo, curr_bit_offset, " - 3");
11674 proto_tree_add_bits_item(tree, hf_gsm_a_rr_ec_wait_timer, tvb, curr_bit_offset, 8, ENC_BIG_ENDIAN);
11680 * [4] 9.1.62 EC-Dummy
11682 static void
11683 dtap_rr_ec_dummy(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_)
11685 uint32_t curr_bit_offset;
11686 curr_bit_offset = offset << 3;
11688 curr_bit_offset += 4; /* Skip msgtype */
11690 proto_tree_add_bits_item(tree, hf_gsm_a_rr_ec_used_dl_cc, tvb, curr_bit_offset, 2, ENC_BIG_ENDIAN);
11694 * [4] 9.1.63 EC-Paging Request
11696 static const char digits[16] = {
11697 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f*/
11698 '0','1','2','3','4','5','6','7','8','9','?','?','?','?','?','?'
11701 static uint32_t
11702 dtap_rr_ec_paging_imsi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t curr_bit_offset)
11704 uint64_t imsi_digits;
11705 uint8_t i;
11706 wmem_strbuf_t *imsi_str;
11707 uint32_t sav_bit_offset;
11709 proto_tree_add_bits_ret_val(tree, hf_gsm_a_rr_ec_imsi_digits, tvb, curr_bit_offset, 4, &imsi_digits, ENC_BIG_ENDIAN);
11710 curr_bit_offset += 4;
11711 sav_bit_offset = curr_bit_offset;
11712 imsi_str = wmem_strbuf_new_sized(pinfo->pool, (size_t)imsi_digits+2);
11713 for (i = 0; i <= (uint8_t)imsi_digits; i++) {
11714 wmem_strbuf_append_c(imsi_str, digits[tvb_get_bits8(tvb, curr_bit_offset, 4)]);
11715 curr_bit_offset += 4;
11717 proto_tree_add_string(tree, hf_gsm_a_rr_ec_imsi, tvb, sav_bit_offset,
11718 (curr_bit_offset-sav_bit_offset+7)>>3, wmem_strbuf_finalize(imsi_str));
11719 return curr_bit_offset;
11722 static void
11723 dtap_rr_ec_paging_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len _U_)
11725 uint32_t curr_bit_offset;
11726 curr_bit_offset = offset << 3;
11728 curr_bit_offset += 4; /* Skip msgtype */
11730 proto_tree_add_bits_item(tree, hf_gsm_a_rr_ec_used_dl_cc, tvb, curr_bit_offset, 2, ENC_BIG_ENDIAN);
11731 curr_bit_offset += 2;
11733 if (gsm_rr_csn_flag(tvb, tree, curr_bit_offset++, hf_gsm_a_rr_ec_page_extension_exist))
11735 proto_tree_add_bits_item(tree, hf_gsm_a_rr_ec_page_extension, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
11736 curr_bit_offset += 4;
11739 if (gsm_rr_csn_flag(tvb, tree, curr_bit_offset++, hf_gsm_a_rr_ec_ptmsi_imsi_select))
11740 { /* IMSI */
11741 curr_bit_offset = dtap_rr_ec_paging_imsi(tvb, pinfo, tree, curr_bit_offset);
11743 else
11744 { /* P-TMSI*/
11745 proto_tree_add_bits_item(tree, hf_gsm_a_tmsi, tvb, curr_bit_offset, 32, ENC_BIG_ENDIAN);
11746 curr_bit_offset += 32;
11749 if (gsm_rr_csn_flag(tvb, tree, curr_bit_offset++, hf_gsm_a_rr_ec_mobile_identity_2_exist))
11750 { /* Mobile identity 2 */
11751 if (gsm_rr_csn_flag(tvb, tree, curr_bit_offset++, hf_gsm_a_rr_ec_ptmsi_imsi_select))
11752 { /* IMSI */
11753 dtap_rr_ec_paging_imsi(tvb, pinfo, tree, curr_bit_offset);
11755 else
11756 { /* P-TMSI*/
11757 proto_tree_add_bits_item(tree, hf_gsm_a_tmsi, tvb, curr_bit_offset, 32, ENC_BIG_ENDIAN);
11764 * [4] 9.1.64 EC-Downlink Assignment
11766 static void
11767 dtap_rr_ec_dl_ass(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_)
11769 proto_tree* subtree;
11770 uint32_t curr_offset;
11771 uint32_t curr_bit_offset;
11773 curr_offset = offset;
11774 curr_bit_offset = curr_offset << 3;
11776 curr_bit_offset += 4; /* Skip msgtype */
11778 proto_tree_add_bits_item(tree, hf_gsm_a_rr_ec_used_dl_cc, tvb, curr_bit_offset, 2, ENC_BIG_ENDIAN);
11779 curr_bit_offset += 2;
11781 if (gsm_rr_csn_flag(tvb, tree, curr_bit_offset++, hf_gsm_a_rr_ec_page_extension_exist))
11783 proto_tree_add_bits_item(tree, hf_gsm_a_rr_ec_page_extension, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
11784 curr_bit_offset += 4;
11787 proto_tree_add_bits_item(tree, hf_gsm_a_rr_tlli, tvb, curr_bit_offset, 32, ENC_BIG_ENDIAN);
11788 curr_bit_offset += 32;
11790 curr_bit_offset += de_rr_ec_pkt_ch_dsc2(tvb, tree, pinfo, curr_bit_offset);
11792 /* FIXME:where to put "ett"? subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_gsm_rr_elem[DE_RR_EC_FUA], NULL,
11793 "EC Downlink Allocation"); */
11794 subtree = tree;
11796 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_timing_adv, tvb, curr_bit_offset, 6, ENC_BIG_ENDIAN);
11797 curr_bit_offset += 6;
11799 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_ec_starting_dl_timeslot, tvb, curr_bit_offset, 3, ENC_BIG_ENDIAN);
11800 curr_bit_offset += 3;
11802 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_tfi_assignment, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
11803 curr_bit_offset += 5;
11805 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_ec_cc1_timeslot_multiplier, tvb, curr_bit_offset, 2, ENC_BIG_ENDIAN);
11806 curr_bit_offset += 2;
11808 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_ec_starting_ul_timeslot_offset, tvb, curr_bit_offset, 2, ENC_BIG_ENDIAN);
11809 curr_bit_offset += 2;
11811 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_gamma, tvb, curr_bit_offset, 5, ENC_BIG_ENDIAN);
11812 curr_bit_offset += 5;
11814 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_ec_alpha_enable, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
11815 curr_bit_offset += 1;
11817 if (gsm_rr_csn_flag(tvb, subtree, curr_bit_offset++, hf_gsm_a_rr_p0_present))
11819 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_p0, tvb, curr_bit_offset, 4, ENC_BIG_ENDIAN);
11820 curr_bit_offset += 4;
11821 proto_tree_add_bits_item(subtree, hf_gsm_a_rr_pr_mode, tvb, curr_bit_offset, 1, ENC_BIG_ENDIAN);
11826 #define NUM_GSM_DTAP_MSG_RR array_length(gsm_a_dtap_msg_rr_strings)
11827 static int ett_gsm_dtap_msg_rr[NUM_GSM_DTAP_MSG_RR];
11828 static void (*dtap_msg_rr_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len) = {
11829 NULL, /* Reserved */
11830 dtap_rr_add_ass, /* Additional Assignment */
11831 dtap_rr_imm_ass, /* 9.1.18 Immediate assignment */
11832 dtap_rr_imm_ass_ext, /* Immediate Assignment Extended */
11833 dtap_rr_imm_ass_rej, /* Immediate Assignment Reject */
11834 dtap_rr_ec_imm_ass_type_1, /* EC-Immediate Assignment Type 1 */
11836 dtap_rr_dtm_ass_fail, /* DTM Assignment Failure */
11837 dtap_rr_dtm_rej, /* DTM Reject */
11838 dtap_rr_dtm_req, /* DTM Request */
11839 dtap_rr_pkt_assign, /* Packet Assignment */
11840 dtap_rr_dtm_ass_cmd, /* DTM Assignment Command */
11841 dtap_rr_dtm_info, /* DTM Information */
11842 dtap_rr_pkt_notif, /* Packet Notification */
11844 dtap_rr_cip_mode_cmd, /* Ciphering Mode Command */
11845 dtap_rr_cip_mode_cpte, /* Ciphering Mode Complete */
11847 dtap_rr_conf_change_cmd, /* Configuration Change Command */
11848 NULL, /* Configuration Change Ack. */
11849 dtap_rr_conf_change_rej, /* Configuration Change Reject */
11851 dtap_rr_ass_cmd, /* 9.1.2 Assignment Command */
11852 dtap_rr_ass_comp, /* Assignment Complete */
11853 dtap_rr_ass_fail, /* Assignment Failure */
11854 dtap_rr_ho_cmd, /* Handover Command */
11855 dtap_rr_ho_cpte, /* Handover Complete */
11856 dtap_rr_ho_fail, /* Handover Failure */
11857 dtap_rr_phy_info, /* Physical Information */
11859 NULL, /* RR-cell Change Order */
11860 NULL, /* PDCH Assignment Command */
11862 dtap_rr_ch_rel, /* Channel Release */
11863 dtap_rr_partial_rel, /* Partial Release */
11864 NULL, /* Partial Release Complete */
11866 dtap_rr_paging_req_type_1, /* Paging Request Type 1 */
11867 dtap_rr_paging_req_type_2, /* Paging Request Type 2 */
11868 dtap_rr_paging_req_type_3, /* Paging Request Type 3 */
11869 dtap_rr_paging_resp, /* Paging Response */
11870 NULL, /* Notification/NCH */
11871 NULL, /* Reserved */
11872 NULL, /* Notification/Response */
11874 NULL, /* Reserved */
11876 dtap_rr_utran_classmark_change, /* Utran Classmark Change */
11877 NULL, /* cdma2000 Classmark Change */
11878 dtap_rr_inter_syst_to_utran_ho_cmd, /* Inter System to UTRAN Handover Command */
11879 NULL, /* Inter System to cdma2000 Handover Command */
11881 NULL, /* System Information Type 8 */
11882 dtap_rr_sys_info_1, /* System Information Type 1 */
11883 dtap_rr_sys_info_2, /* System Information Type 2 */
11884 dtap_rr_sys_info_3, /* System Information Type 3 */
11885 dtap_rr_sys_info_4, /* System Information Type 4 */
11886 dtap_rr_sys_info_5, /* System Information Type 5 */
11887 dtap_rr_sys_info_6, /* System Information Type 6 */
11888 NULL, /* System Information Type 7 */
11890 dtap_rr_sys_info_2bis, /* System Information Type 2bis */
11891 dtap_rr_sys_info_2ter, /* System Information Type 2ter */
11892 dtap_rr_sys_info_2quater, /* System Information Type 2quater */
11893 dtap_rr_sys_info_5bis, /* System Information Type 5bis */
11894 dtap_rr_sys_info_5ter, /* System Information Type 5ter */
11895 NULL, /* System Information Type 9 */
11896 dtap_rr_sys_info_13, /* System Information Type 13 */
11898 NULL, /* System Information Type 16 */
11899 NULL, /* System Information Type 17 */
11901 NULL, /* System Information Type 18 */
11902 NULL, /* System Information Type 19 */
11903 NULL, /* System Information Type 20 */
11904 dtap_rr_sys_info_21, /* System Information Type 21 */
11906 dtap_rr_ch_mode_mod, /* Channel Mode Modify */
11907 dtap_rr_rr_status, /* RR Status */
11908 dtap_rr_ch_mode_mod_ack, /* Channel Mode Modify Acknowledge */
11909 dtap_rr_freq_redef, /* Frequency Redefinition */
11910 dtap_rr_meas_rep, /* 9.1.21 Measurement report */
11911 dtap_rr_mm_cm_change, /* 9.1.11 Classmark Change */
11912 dtap_rr_cm_enq, /* Classmark Enquiry */
11913 dtap_rr_ext_meas_report, /* Extended Measurement Report */
11914 dtap_rr_ext_meas_order, /* Extended Measurement Order */
11915 dtap_rr_gprs_sus_req, /* 9.1.13b GPRS Suspension Request */
11917 dtap_rr_vgcs_upl_grant, /* VGCS Uplink Grant */
11918 dtap_rr_upl_rel, /* Uplink Release */
11919 NULL, /* Reserved */
11920 NULL, /* Uplink Busy */
11921 dtap_rr_talker_indication, /* Talker Indication */
11923 NULL, /* UTRAN Classmark Change/Handover To UTRAN Command */ /* spec conflict */
11925 dtap_rr_app_inf, /* Application Information */
11926 NULL /* NONE */
11931 /* GSM 04.08 9.1.8 Channel request, ESTABLISHMENT CAUSE */
11933 static const value_string gsm_a_rr_cannel_request_3bit_est_cause_vals[] = {
11934 { 0x00, "Location updating and the network does not set NECI bit to 1"},
11935 { 0x80, "Answer to paging: 'Any Channel', or ('TCH/F' or 'TCH/H or TCH/F') if MS is 'Full rate only'"},
11936 { 0xa0, "Emergency call"},
11937 { 0xc0, "Call re-establishment; TCH/F was in use, or TCH/H was in use but the network does not set NECI bit to 1"},
11938 { 0xe0, "Originating call and TCH/F is needed, or originating call and the network does not set NECI bit to 1,"
11939 " or procedures that can be completed with a SDCCH and the network does not set NECI bit to 1"},
11940 { 0, NULL }
11943 static const value_string gsm_a_rr_cannel_request_4bit_est_cause_vals[] = {
11944 { 0x00, "Location updating and the network sets NECI bit to 1"},
11945 { 0x10, "Answer to paging: 'SDCCH' / Other procedures which can be completed with an SDCCH and the network sets NECI bit to 1"},
11946 { 0x20, "Answer to paging: MS is dual rate capable and requests 'TCH/F' only"},
11947 { 0x30, "Answer to paging: MS is dual rate capable and requests 'TCH/H or TCH/F'"},
11948 { 0x40, "Originating speech call from dual-rate mobile station when TCH/H is sufficient and the network sets NECI bit to 1"},
11949 { 0x50, "Originating data call from dual-rate mobile station when TCH/H is sufficient and the network sets NECI bit to 1"},
11950 { 0x70, "Reserved for future use. An SDCCH may be allocated"},
11951 { 0, NULL }
11954 static const value_string gsm_a_rr_cannel_request_5bit_est_cause_vals[] = {
11955 { 0x70, "Single block packet access; one block period on a PDCH is needed for two phase packet access or other RR"
11956 " signalling purpose"},
11957 { 0x78, "One phase packet access with request for single timeslot uplink transmission; one PDCH is needed"},
11958 { 0, NULL }
11961 static const value_string gsm_a_rr_cannel_request_6bit_est_cause_vals[] = {
11962 { 0x68, "Call re-establishment; TCH/H was in use and the network sets NECI bit to 1"},
11963 { 0x6c, "Call re-establishment; TCH/H + TCH/H was in use and the network sets NECI bit to 1"},
11964 { 0, NULL }
11967 static const value_string gsm_a_rr_cannel_request_8bit_est_cause_vals[] = {
11968 { 0x63, "Reserved for future use. An SDCCH may be allocated"},
11969 { 0x67, "LMU establishment. An SDCCH may be allocated"},
11970 { 0x7f, "Reserved. Message may be ignored"},
11971 { 0, NULL }
11974 static bool
11975 ra_channel_request_parse(const char **cause, uint8_t *reference, uint32_t ra)
11977 const char *str;
11978 uint8_t ref;
11979 int idx;
11981 str = try_val_to_str_idx((uint32_t)(ra & 0xe0), gsm_a_rr_cannel_request_3bit_est_cause_vals, &idx);
11982 if (str != NULL) {
11983 ref = ra & 0x1f;
11984 goto found;
11987 str = try_val_to_str_idx((uint32_t)(ra & 0xf0), gsm_a_rr_cannel_request_4bit_est_cause_vals, &idx);
11988 if (str != NULL) {
11989 ref = ra & 0x0f;
11990 goto found;
11993 str = try_val_to_str_idx((uint32_t)(ra & 0xf8), gsm_a_rr_cannel_request_5bit_est_cause_vals, &idx);
11994 if (str != NULL) {
11995 ref = ra & 0x07;
11996 if ((idx != 1) || (ref != 0x07)) {
11997 goto found;
12001 str = try_val_to_str_idx((uint32_t)(ra & 0xfc), gsm_a_rr_cannel_request_6bit_est_cause_vals, &idx);
12002 if (str != NULL) {
12003 ref = ra & 0x03;
12004 goto found;
12007 str = try_val_to_str_idx((uint32_t)ra, gsm_a_rr_cannel_request_8bit_est_cause_vals, &idx);
12008 if (str != NULL) {
12009 ref = 0;
12010 goto found;
12013 if ((ra & 0xf9) == 0x60) {
12014 str = "Single block MBMS access; one block period on a PDCH is needed for transfer of MBMS SERVICE REQUEST message";
12015 ref = (ra & 0x6) >> 1;
12016 goto found;
12019 if ((ra & 0xfb) == 0x61) {
12020 str = "Reserved for future use. An SDCCH may be allocated";
12021 ref = (ra & 0x4) >> 2;
12022 goto found;
12025 return false;
12027 found:
12028 if (NULL != cause) {
12029 *cause = str;
12031 if (NULL != reference) {
12032 *reference = ref;
12034 return true;
12037 static void
12038 ra_est_cause_convert(char *result, uint32_t ra)
12040 const char *str;
12042 if (ra_channel_request_parse(&str, NULL, ra)) {
12043 snprintf(result, ITEM_LABEL_LENGTH, "%s", str);
12044 } else {
12045 snprintf(result, ITEM_LABEL_LENGTH, "unknown ra %u", ra);
12050 static void
12051 ra_rand_ref_convert(char *result, uint32_t ra)
12053 uint8_t reference;
12055 if (ra_channel_request_parse(NULL, &reference, ra)) {
12056 snprintf(result, ITEM_LABEL_LENGTH, "%d", reference);
12057 } else {
12058 snprintf(result, ITEM_LABEL_LENGTH, "unknown ra %u", ra);
12063 static int dissect_rach(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12065 proto_item *rach_item = NULL;
12066 proto_tree *rach_tree = NULL;
12067 uint32_t len;
12069 col_append_str(pinfo->cinfo, COL_INFO, "(RACH) Channel Request ");
12070 len = tvb_reported_length(tvb);
12071 rach_item = proto_tree_add_protocol_format(tree, proto_a_rach, tvb, 0, len, "GSM RACH");
12072 rach_tree = proto_item_add_subtree(rach_item, ett_rach_msg);
12073 proto_tree_add_item(rach_tree, hf_gsm_a_rr_ra_est_cause, tvb, 0, 1, ENC_BIG_ENDIAN);
12074 proto_tree_add_item(rach_tree, hf_gsm_a_rr_ra_rand_ref, tvb, 0, 1, ENC_BIG_ENDIAN);
12075 return tvb_captured_length(tvb);
12078 void get_rr_msg_params(uint8_t oct, const char **msg_str, int *ett_tree, int *hf_idx, msg_fcn *msg_fcn_p)
12080 int idx;
12082 *msg_str = try_val_to_str_idx((uint32_t) (oct & DTAP_RR_IEI_MASK), gsm_a_dtap_msg_rr_strings, &idx);
12083 *hf_idx = hf_gsm_a_dtap_msg_rr_type;
12084 if (*msg_str != NULL) {
12085 *ett_tree = ett_gsm_dtap_msg_rr[idx];
12086 *msg_fcn_p = dtap_msg_rr_fcn[idx];
12089 return;
12091 /* This is more or less a copy of the dissect_dtap() code just adding
12092 * L2 Pseudo Length decoding first
12093 * The code should probably be cleaned up.
12094 * The name CCCH might not be correct!
12096 static int
12097 dissect_ccch(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
12100 static gsm_a_tap_rec_t tap_rec[4];
12101 static gsm_a_tap_rec_t *tap_p;
12102 static unsigned tap_current = 0;
12104 void (*msg_fcn_p)(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len);
12105 uint8_t oct;
12106 uint8_t pd;
12107 uint32_t offset;
12108 uint32_t len;
12109 uint32_t oct_1;
12110 proto_item *ccch_item = NULL;
12111 proto_tree *ccch_tree = NULL;
12112 proto_item *oct_1_item = NULL;
12113 proto_tree *pd_tree = NULL;
12114 const char *msg_str;
12115 int ett_tree;
12116 int hf_idx;
12117 uint8_t *gsmtap_channel_type = (uint8_t *)data;
12119 len = tvb_reported_length(tvb);
12121 if ((NULL != gsmtap_channel_type) && ((*gsmtap_channel_type & ~GSMTAP_CHANNEL_ACCH) == GSMTAP_CHANNEL_RACH)) {
12122 return dissect_rach(tvb, pinfo, tree, NULL);
12125 if (len < 3){
12127 * too short to be CCCH
12129 call_data_dissector(tvb, pinfo, tree);
12130 return tvb_captured_length(tvb);
12133 col_append_str(pinfo->cinfo, COL_INFO, "(CCCH) ");
12135 * set tap record pointer
12137 tap_current++;
12138 if (tap_current >= 4)
12140 tap_current = 0;
12142 tap_p = &tap_rec[tap_current];
12144 offset = 0;
12146 /* Skip pseudo hdr here - it is dissected later */
12147 offset += 1;
12150 * get protocol discriminator
12152 oct_1 = tvb_get_uint8(tvb, offset++);
12154 if ((((oct_1 & DTAP_TI_MASK) >> 4) & DTAP_TIE_PRES_MASK) == DTAP_TIE_PRES_MASK){
12156 * even though we don't know if a TI should be in the message yet
12157 * we rely on the TI/SKIP indicator to be 0 to avoid taking this
12158 * octet
12160 offset++;
12163 oct = tvb_get_uint8(tvb, offset);
12165 pd = oct_1 & DTAP_PD_MASK;
12166 msg_str = NULL;
12167 ett_tree = -1;
12168 hf_idx = -1;
12169 msg_fcn_p = NULL;
12170 col_append_fstr(pinfo->cinfo, COL_INFO, "(%s) ",val_to_str(pd,gsm_a_pd_short_str_vals,"Unknown (%u)"));
12173 * octet 1
12175 switch (pd){
12176 case 6:
12177 get_rr_msg_params(oct, &msg_str, &ett_tree, &hf_idx, &msg_fcn_p);
12178 break;
12180 default:
12181 /* XXX - hf_idx is still -1! this is a bug in the implementation, and I don't know how to fix it so simple return here */
12182 return tvb_captured_length(tvb);
12186 * create the protocol tree
12188 if (msg_str == NULL){
12189 ccch_item = proto_tree_add_protocol_format(tree, proto_a_ccch, tvb, 0, len,
12190 "GSM CCCH - Message Type (0x%02x)",
12191 oct);
12193 ccch_tree = proto_item_add_subtree(ccch_item, ett_ccch_msg);
12194 }else{
12195 ccch_item = proto_tree_add_protocol_format(tree, proto_a_ccch, tvb, 0, -1,
12196 "GSM CCCH - %s", msg_str);
12198 ccch_tree = proto_item_add_subtree(ccch_item, ett_tree);
12200 col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", msg_str);
12203 /* L2 Pseudo Length 10.5.2.19 */
12204 /* note: dissected out of sequence! */
12205 elem_v(tvb, ccch_tree, pinfo, GSM_A_PDU_TYPE_RR, DE_RR_L2_PSEUDO_LEN, 0, NULL);
12207 oct_1_item = proto_tree_add_item(ccch_tree, hf_gsm_a_L3_protocol_discriminator, tvb, 1, 1, ENC_BIG_ENDIAN);
12208 pd_tree = proto_item_add_subtree(oct_1_item, ett_ccch_oct_1);
12210 proto_tree_add_item(pd_tree, hf_gsm_a_L3_protocol_discriminator, tvb, 1, 1, ENC_BIG_ENDIAN);
12212 proto_tree_add_item(pd_tree, hf_gsm_a_skip_ind, tvb, 1, 1, ENC_BIG_ENDIAN);
12215 * add DTAP message name
12217 proto_tree_add_uint_format(ccch_tree, hf_idx, tvb, offset, 1, oct,
12218 "Message Type: %s",msg_str ? msg_str : "(Unknown)");
12220 offset++;
12222 tap_p->pdu_type = GSM_A_PDU_TYPE_DTAP;
12223 tap_p->message_type = oct;
12224 tap_p->protocol_disc = (gsm_a_pd_str_e)pd;
12226 tap_queue_packet(gsm_a_tap, pinfo, tap_p);
12228 if (msg_str == NULL)
12229 return offset;
12231 if (offset >= len)
12232 return offset;
12235 * decode elements
12237 if (msg_fcn_p == NULL){
12238 proto_tree_add_item(ccch_tree, hf_gsm_a_rr_message_elements, tvb, offset, len - offset, ENC_NA);
12239 }else{
12240 (*msg_fcn_p)(tvb, ccch_tree, pinfo, offset, len - offset);
12242 return tvb_captured_length(tvb);
12246 #define NUM_GSM_DTAP_EC_CCCH_MSG_RR array_length(gsm_a_dtap_msg_rr_ec_ccch_strings)
12247 static int ett_gsm_dtap_ec_ccch_msg_rr[NUM_GSM_DTAP_EC_CCCH_MSG_RR];
12248 static void (*dtap_msg_rr_ec_ccch_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len) = {
12249 dtap_rr_ec_imm_ass_type_2, /* EC-Immediate Assignment Type 2 */
12250 dtap_rr_ec_imm_ass_rej, /* EC-Immediate Assignment Reject */
12251 dtap_rr_ec_dummy, /* EC-Dummy */
12252 dtap_rr_ec_dl_ass, /* EC-Downlink Assignment */
12253 dtap_rr_ec_paging_req, /* EC-Paging Request */
12256 static void
12257 get_rr_ec_ccch_msg_params(uint8_t oct, const char **msg_str, int *ett_tree, int *hf_idx, msg_fcn *msg_fcn_p)
12259 int idx;
12261 *msg_str = try_val_to_str_idx((uint32_t) (oct & DTAP_RR_IEI_MASK), gsm_a_dtap_msg_rr_ec_ccch_strings, &idx);
12262 *hf_idx = hf_gsm_a_dtap_msg_rr_ec_ccch_type;
12263 if (*msg_str != NULL) {
12264 *ett_tree = ett_gsm_dtap_ec_ccch_msg_rr[idx];
12265 *msg_fcn_p = dtap_msg_rr_ec_ccch_fcn[idx];
12268 return;
12271 static int
12272 dissect_ec_ccch(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
12275 void (*msg_fcn_p)(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len);
12276 uint8_t msgtype;
12277 uint32_t offset;
12278 uint32_t len;
12279 proto_item *ec_ccch_item = NULL;
12280 proto_tree *ec_ccch_tree = NULL;
12281 const char *msg_str;
12282 int ett_tree;
12283 int hf_idx;
12284 len = tvb_reported_length(tvb);
12286 col_append_str(pinfo->cinfo, COL_INFO, "(EC-CCCH) (RR) ");
12288 offset = 0;
12289 msgtype = tvb_get_bits8(tvb, offset, 4);
12291 msg_str = NULL;
12292 ett_tree = -1;
12293 hf_idx = -1;
12294 msg_fcn_p = NULL;
12296 get_rr_ec_ccch_msg_params(msgtype, &msg_str, &ett_tree, &hf_idx, &msg_fcn_p);
12299 * create the protocol tree
12301 if (msg_str == NULL){
12302 ec_ccch_item = proto_tree_add_protocol_format(tree, proto_a_ec_ccch, tvb, 0, len,
12303 "GSM EC-CCCH - Message Type (0x%02x)",
12304 msgtype);
12306 ec_ccch_tree = proto_item_add_subtree(ec_ccch_item, ett_ec_ccch_msg);
12307 }else{
12308 ec_ccch_item = proto_tree_add_protocol_format(tree, proto_a_ec_ccch, tvb, 0, -1,
12309 "GSM EC-CCCH - %s", msg_str);
12311 ec_ccch_tree = proto_item_add_subtree(ec_ccch_item, ett_tree);
12313 col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", msg_str);
12317 * add DTAP message name
12319 proto_tree_add_uint_format(ec_ccch_tree, hf_idx, tvb, offset, 1, msgtype,
12320 "Message Type: %s",msg_str ? msg_str : "(Unknown)");
12322 * decode elements
12324 if (msg_fcn_p == NULL){
12325 proto_tree_add_item(ec_ccch_tree, hf_gsm_a_rr_message_elements, tvb, offset, len - offset, ENC_NA);
12326 }else{
12327 (*msg_fcn_p)(tvb, ec_ccch_tree, pinfo, offset, len - offset);
12329 return tvb_captured_length(tvb);
12333 const value_string gsm_a_rr_short_pd_msg_strings[] = {
12334 { 0x00, "System Information Type 10" },
12335 { 0x01, "Notification/FACCH" },
12336 { 0x02, "Uplink Free" },
12337 { 0x04, "Enhanced Measurement Report" },
12338 { 0x05, "Measurement Information" },
12339 { 0x06, "VBS/VGCS Reconfigure" },
12340 { 0x07, "VBS/VGCS Reconfigure2" },
12341 { 0x08, "VGCS Additional Information" },
12342 { 0x09, "VGCS SMS Information" },
12343 { 0, NULL }
12346 #define NUM_GSM_SACCH_MSG_RR array_length(gsm_a_rr_short_pd_msg_strings)
12347 static int ett_gsm_sacch_msg_rr[NUM_GSM_SACCH_MSG_RR];
12348 static void (*sacch_msg_rr_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len) = {
12349 NULL, /* System Information Type 10 */
12350 NULL, /* Notification/FACCH */
12351 NULL, /* Uplink Free */
12352 sacch_rr_enh_meas_report, /* Enhanced Measurement Report */
12353 sacch_rr_meas_info, /* Measurement Information */
12354 NULL, /* VBS/VGCS Reconfigure */
12355 NULL, /* VBS/VGCS Reconfigure2 */
12356 NULL, /* VGCS Additional Information */
12357 NULL, /* VGCS SMS Information */
12358 NULL, /* NONE */
12361 static void
12362 get_rr_short_pd_msg_params(uint8_t mess_type, const char **msg_str, int *ett_tree, int *hf_idx, msg_fcn *msg_fcn_p)
12364 int idx;
12366 *msg_str = try_val_to_str_idx((uint32_t) mess_type, gsm_a_rr_short_pd_msg_strings, &idx);
12367 *hf_idx = hf_gsm_a_rr_short_pd_msg_type;
12368 if (*msg_str != NULL) {
12369 *ett_tree = ett_gsm_sacch_msg_rr[idx];
12370 *msg_fcn_p = sacch_msg_rr_fcn[idx];
12374 #if 0
12375 const value_string short_protocol_discriminator_vals[] = {
12376 {0x0, "Radio Resources Management messages"},
12377 { 0, NULL }
12379 #endif
12381 static int
12382 dissect_sacch(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
12384 static gsm_a_tap_rec_t tap_rec[4];
12385 static gsm_a_tap_rec_t *tap_p;
12386 static unsigned tap_current = 0;
12388 void (*msg_fcn_p)(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len);
12389 uint8_t oct, short_pd, mess_type;
12390 uint32_t offset, bit_offset = 0;
12391 uint32_t len;
12392 proto_item *sacch_item = NULL;
12393 proto_tree *sacch_tree = NULL;
12394 const char *msg_str;
12395 int ett_tree;
12396 int hf_idx;
12398 len = tvb_reported_length(tvb);
12400 col_append_str(pinfo->cinfo, COL_INFO, "(SACCH) ");
12403 * set tap record pointer
12405 tap_current++;
12406 if (tap_current >= 4)
12408 tap_current = 0;
12410 tap_p = &tap_rec[tap_current];
12412 offset = 0;
12414 oct = tvb_get_uint8(tvb, offset);
12416 msg_str = NULL;
12417 ett_tree = -1;
12418 hf_idx = -1;
12419 msg_fcn_p = NULL;
12421 short_pd = (oct & 0x80) >> 7;
12422 mess_type = (oct & 0x7c) >> 2;
12424 if (short_pd == 0)
12426 col_append_str(pinfo->cinfo, COL_INFO, "(RR) ");
12427 get_rr_short_pd_msg_params(mess_type, &msg_str, &ett_tree, &hf_idx, &msg_fcn_p);
12429 else
12431 col_append_str(pinfo->cinfo, COL_INFO, "(Unknown) ");
12435 * create the protocol tree
12437 if (msg_str == NULL){
12438 sacch_item = proto_tree_add_protocol_format(tree, proto_a_sacch, tvb, 0, len,
12439 "GSM SACCH - Message Type (0x%02x)", mess_type);
12441 sacch_tree = proto_item_add_subtree(sacch_item, ett_sacch_msg);
12442 }else{
12443 sacch_item = proto_tree_add_protocol_format(tree, proto_a_sacch, tvb, 0, -1,
12444 "GSM SACCH - %s", msg_str);
12446 sacch_tree = proto_item_add_subtree(sacch_item, ett_tree);
12448 col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", msg_str);
12451 if (short_pd == 0)
12452 proto_tree_add_bits_item(sacch_tree, hf_gsm_a_rr_short_pd, tvb, offset * 8 + bit_offset++, 1, ENC_BIG_ENDIAN);
12454 if (hf_idx <= 0)
12455 return 1;
12458 * add SACCH message name
12460 proto_tree_add_bits_item(sacch_tree, hf_gsm_a_rr_short_pd_msg_type, tvb, offset * 8 + bit_offset, 5, ENC_BIG_ENDIAN);
12461 bit_offset += 5;
12463 proto_tree_add_bits_item(sacch_tree, hf_gsm_a_rr_short_l2_header, tvb, offset * 8 + bit_offset, 2, ENC_BIG_ENDIAN);
12464 offset++;
12466 tap_p->pdu_type = GSM_A_PDU_TYPE_SACCH;
12467 tap_p->message_type = mess_type;
12468 tap_p->protocol_disc = (gsm_a_pd_str_e)short_pd;
12470 tap_queue_packet(gsm_a_tap, pinfo, tap_p);
12472 if (msg_str == NULL)
12473 return offset;
12476 * decode elements
12478 if (msg_fcn_p == NULL){
12479 proto_tree_add_item(sacch_tree, hf_gsm_a_rr_message_elements, tvb, offset, len - offset, ENC_NA);
12480 }else{
12481 (*msg_fcn_p)(tvb, sacch_tree, pinfo, offset, len - offset);
12483 return tvb_captured_length(tvb);
12486 /* Register the protocol with Wireshark */
12487 void
12488 proto_register_gsm_a_rr(void)
12490 unsigned i;
12491 unsigned last_offset;
12493 /* Setup list of header fields */
12495 static hf_register_info hf[] =
12497 { &hf_gsm_a_dtap_msg_rr_type,
12498 { "DTAP Radio Resources Management Message Type", "gsm_a.dtap.msg_rr_type",
12499 FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_rr_strings), 0x0,
12500 NULL, HFILL }
12502 { &hf_gsm_a_rr_elem_id,
12503 { "Element ID", "gsm_a.rr.elem_id",
12504 FT_UINT8, BASE_HEX, NULL, 0,
12505 NULL, HFILL }
12507 { &hf_gsm_a_rr_bcc,
12508 { "BCC","gsm_a.rr.bcc",
12509 FT_UINT8,BASE_DEC, NULL, 0x07,
12510 NULL, HFILL }
12512 { &hf_gsm_a_rr_ncc,
12513 { "NCC","gsm_a.rr.ncc",
12514 FT_UINT8,BASE_DEC, NULL, 0x38,
12515 NULL, HFILL }
12517 { &hf_gsm_a_rr_bcch_arfcn,
12518 { "BCCH ARFCN(RF channel number)","gsm_a.rr.bcch_arfcn",
12519 FT_UINT16,BASE_DEC, NULL, 0x0,
12520 NULL, HFILL }
12522 { &hf_gsm_a_rr_range_nb,
12523 { "Number of Ranges","gsm_a.rr.range_nb",
12524 FT_UINT8, BASE_DEC, NULL, 0x0,
12525 NULL, HFILL }
12527 { &hf_gsm_a_rr_range_lower,
12528 { "Range Lower","gsm_a.rr.range_lower",
12529 FT_UINT16, BASE_DEC, NULL, 0x0,
12530 "ARFCN used as the lower limit of a range of frequencies to be used by the mobile station in cell selection (Range Lower)", HFILL }
12532 { &hf_gsm_a_rr_range_higher,
12533 { "Range Higher","gsm_a.rr.range_higher",
12534 FT_UINT16, BASE_DEC, NULL, 0x0,
12535 "ARFCN used as the higher limit of a range of frequencies to be used by the mobile station in cell selection (Range Higher)", HFILL }
12537 { &hf_gsm_a_rr_ba_freq,
12538 { "BA Freq","gsm_a.rr.ba_freq",
12539 FT_UINT16, BASE_DEC, NULL, 0x0,
12540 "ARFCN indicating a single frequency to be used by the mobile station in cell selection and reselection (BA Freq)", HFILL }
12542 { &hf_gsm_a_rr_ho_ref_val,
12543 { "Handover reference value","gsm_a.rr.ho_ref_val",
12544 FT_UINT8,BASE_DEC, NULL, 0x0,
12545 NULL, HFILL }
12547 { &hf_gsm_a_rr_L2_pseudo_len,
12548 { "L2 Pseudo Length value","gsm_a.rr.l2_pseudo_len",
12549 FT_UINT8, BASE_DEC, NULL, 0xfc,
12550 NULL, HFILL }
12552 { &hf_gsm_a_rr_ba_used,
12553 { "BA-USED","gsm_a.rr.ba_used",
12554 FT_UINT8, BASE_DEC, NULL, 0x00,
12555 NULL, HFILL }
12557 { &hf_gsm_a_rr_dtx_used,
12558 { "DTX-USED","gsm_a.rr.dtx_used",
12559 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_dtx_vals), 0x0,
12560 NULL, HFILL }
12562 { &hf_gsm_a_rr_3g_ba_used,
12563 { "3G-BA-USED","gsm_a.rr.3g_ba_used",
12564 FT_UINT8, BASE_DEC, NULL, 0x00,
12565 NULL, HFILL }
12567 { &hf_gsm_a_rr_meas_valid,
12568 { "MEAS-VALID","gsm_a.rr.meas_valid",
12569 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_mv_vals), 0x0,
12570 NULL, HFILL }
12572 { &hf_gsm_a_rr_rxlev_full_serv_cell,
12573 { "RXLEV-FULL-SERVING-CELL","gsm_a.rr.rxlev_full_serv_cell",
12574 FT_UINT8,BASE_DEC|BASE_EXT_STRING, &gsm_a_rr_rxlev_vals_ext, 0x00,
12575 NULL, HFILL }
12577 { &hf_gsm_a_rr_rxlev_sub_serv_cell,
12578 { "RXLEV-SUB-SERVING-CELL","gsm_a.rr.rxlev_sub_serv_cell",
12579 FT_UINT8,BASE_DEC|BASE_EXT_STRING, &gsm_a_rr_rxlev_vals_ext, 0x00,
12580 NULL, HFILL }
12582 { &hf_gsm_a_rr_si23_ba_used,
12583 { "SI23_BA_USED","gsm_a.rr.si23_ba_used",
12584 FT_UINT8,BASE_DEC, NULL, 0x00,
12585 NULL, HFILL }
12587 { &hf_gsm_a_rr_rxqual_full_serv_cell,
12588 { "RXQUAL-FULL-SERVING-CELL","gsm_a.rr.rxqual_full_serv_cell",
12589 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_rxqual_vals), 0x00,
12590 NULL, HFILL }
12592 { &hf_gsm_a_rr_rxqual_sub_serv_cell,
12593 { "RXQUAL-SUB-SERVING-CELL","gsm_a.rr.rxqual_sub_serv_cell",
12594 FT_UINT8,BASE_DEC, VALS(gsm_a_rr_rxqual_vals), 0x0,
12595 NULL, HFILL }
12597 { &hf_gsm_a_rr_no_ncell_m,
12598 { "NO-NCELL-M","gsm_a.rr.no_ncell_m",
12599 FT_UINT8,BASE_DEC, VALS(gsm_a_rr_ncell_vals), 0x00,
12600 NULL, HFILL }
12602 { &hf_gsm_a_rr_rxlev_ncell,
12603 { "RXLEV-NCELL","gsm_a.rr.rxlev_ncell",
12604 FT_UINT8,BASE_DEC, NULL, 0x00,
12605 NULL, HFILL }
12607 { &hf_gsm_a_rr_bcch_freq_ncell,
12608 { "BCCH-FREQ-NCELL","gsm_a.rr.bcch_freq_ncell",
12609 FT_UINT8,BASE_DEC, NULL, 0x00,
12610 NULL, HFILL }
12612 { &hf_gsm_a_rr_bsic_ncell,
12613 { "BSIC-NCELL","gsm_a.rr.bsic_ncell",
12614 FT_UINT8,BASE_DEC, NULL, 0x00,
12615 NULL, HFILL }
12617 { &hf_gsm_a_rr_mobile_time_difference,
12618 { "Mobile Timing Difference value (in half bit periods)","gsm_a.rr.mobile_time_difference",
12619 FT_UINT32,BASE_DEC, NULL, 0xFFFFF8,
12620 NULL, HFILL }
12622 { &hf_gsm_a_rr_pow_cmd_atc,
12623 { "ATC","gsm_a.rr.pow_cmd_atc",
12624 FT_BOOLEAN,8, TFS(&gsm_a_rr_pow_cmd_atc_value), 0x80,
12625 NULL, HFILL }
12627 { &hf_gsm_a_rr_page_mode,
12628 { "Page Mode","gsm_a.rr.page_mode",
12629 FT_UINT8,BASE_DEC, VALS(gsm_a_rr_page_mode_vals), 0x0F,
12630 NULL, HFILL }
12632 { &hf_gsm_a_rr_dedicated_mode_or_tbf,
12633 { "Dedicated mode or TBF","gsm_a.rr.dedicated_mode_or_tbf",
12634 FT_UINT8,BASE_DEC, VALS(gsm_a_rr_dedicated_mode_or_tbf_vals), 0xF0,
12635 NULL, HFILL }
12637 { &hf_gsm_a_rr_pow_cmd_epc,
12638 { "EPC_mode","gsm_a.rr.pow_cmd_epc",
12639 FT_BOOLEAN,8, TFS(&gsm_a_rr_pow_cmd_epc_value), 0x40,
12640 NULL, HFILL }
12642 { &hf_gsm_a_rr_pow_cmd_fpcepc,
12643 { "FPC_EPC","gsm_a.rr.pow_cmd_fpcepc",
12644 FT_BOOLEAN,8, TFS(&gsm_a_rr_pow_cmd_fpcepc_value), 0x20,
12645 NULL, HFILL }
12647 { &hf_gsm_a_rr_pow_cmd_powlev,
12648 { "POWER LEVEL","gsm_a.rr.pow_cmd_pow",
12649 FT_UINT8,BASE_DEC, NULL, 0x1f,
12650 NULL, HFILL }
12652 { &hf_gsm_a_rr_sync_ind_nci,
12653 { "Normal cell indication(NCI)","gsm_a.rr.sync_ind_nci",
12654 FT_BOOLEAN,8, TFS(&gsm_a_rr_sync_ind_nci_value), 0x08,
12655 NULL, HFILL }
12657 { &hf_gsm_a_rr_sync_ind_rot,
12658 { "Report Observed Time Difference(ROT)","gsm_a.rr.sync_ind_rot",
12659 FT_BOOLEAN,8, TFS(&sm_a_rr_sync_ind_rot_value), 0x04,
12660 NULL, HFILL }
12662 { &hf_gsm_a_rr_sync_ind_si,
12663 { "Synchronization indication(SI)","gsm_a.rr.sync_ind_si",
12664 FT_UINT8,BASE_DEC, VALS(gsm_a_rr_sync_ind_si_vals), 0x03,
12665 NULL, HFILL }
12667 { &hf_gsm_a_rr_format_id,
12668 { "Format Identifier","gsm_a.rr.format_id",
12669 FT_UINT8,BASE_HEX, VALS(gsm_a_rr_freq_list_format_id_vals), 0xce,
12670 NULL, HFILL }
12672 { &hf_gsm_a_rr_format_id2,
12673 { "Format Identifier","gsm_a.rr.format_id",
12674 FT_UINT8,BASE_HEX, VALS(gsm_a_rr_freq_list_format_id_vals), 0x8e,
12675 NULL, HFILL }
12677 { &hf_gsm_a_rr_channel_mode,
12678 { "Channel Mode","gsm_a.rr.channel_mode",
12679 FT_UINT8,BASE_DEC, VALS(gsm_a_rr_channel_mode_vals), 0x0,
12680 NULL, HFILL }
12682 { &hf_gsm_a_rr_channel_mode2,
12683 { "Channel Mode 2","gsm_a.rr.channel_mode2",
12684 FT_UINT8,BASE_DEC, VALS(gsm_a_rr_channel_mode2_vals), 0x0,
12685 NULL, HFILL }
12687 { &hf_gsm_a_rr_sc,
12688 { "SC","gsm_a.rr.SC",
12689 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_sc_vals), 0x00,
12690 NULL, HFILL }
12692 { &hf_gsm_a_rr_algorithm_id,
12693 { "Algorithm identifier","gsm_a.rr.algorithm_identifier",
12694 FT_UINT8,BASE_DEC, VALS(gsm_a_rr_algorithm_identifier_vals), 0x00,
12695 NULL, HFILL }
12697 { &hf_gsm_a_rr_cr,
12698 { "CR","gsm_a.rr.CR",
12699 FT_UINT8,BASE_DEC, VALS(gsm_a_rr_cr_vals), 0x00,
12700 NULL, HFILL }
12702 { &hf_gsm_a_rr_multirate_speech_ver,
12703 { "Multirate speech version","gsm_a.rr.multirate_speech_ver",
12704 FT_UINT8,BASE_DEC, VALS(multirate_speech_ver_vals), 0xe0,
12705 NULL, HFILL }
12707 { &hf_gsm_a_rr_NCSB,
12708 { "NSCB: Noise Suppression Control Bit","gsm_a.rr.NCSB",
12709 FT_UINT8,BASE_DEC, VALS(NSCB_vals), 0x10,
12710 NULL, HFILL }
12712 { &hf_gsm_a_rr_ICMI,
12713 { "ICMI: Initial Codec Mode Indicator","gsm_a.rr.ICMI",
12714 FT_UINT8,BASE_DEC, VALS(ICMI_vals), 0x8,
12715 NULL, HFILL }
12717 { &hf_gsm_a_rr_start_mode,
12718 { "Start Mode","gsm_a.rr.start_mode",
12719 FT_UINT8,BASE_DEC, NULL, 0x3,
12720 NULL, HFILL }
12722 { &hf_gsm_a_rr_timing_adv,
12723 { "Timing advance value","gsm_a.rr.timing_adv",
12724 FT_UINT8,BASE_DEC, NULL, 0x0,
12725 NULL, HFILL }
12727 { &hf_gsm_a_rr_time_diff,
12728 { "Time difference value","gsm_a.rr.time_diff",
12729 FT_UINT8,BASE_DEC, NULL, 0x0,
12730 NULL, HFILL }
12732 { &hf_gsm_a_rr_tlli,
12733 { "TLLI","gsm_a.rr.tlli",
12734 FT_UINT32,BASE_HEX, NULL, 0x0,
12735 NULL, HFILL }
12737 { &hf_gsm_a_rr_nri,
12738 { "NRI","gsm_a.rr.nri",
12739 FT_UINT8,BASE_DEC, NULL, 0x0,
12740 NULL, HFILL }
12742 { &hf_gsm_a_rr_target_mode,
12743 { "Target mode","gsm_a.rr.target_mode",
12744 FT_UINT8,BASE_DEC, NULL, 0xc0,
12745 NULL, HFILL }
12747 { &hf_gsm_a_rr_wait_indication,
12748 { "Wait Indication","gsm_a.rr.wait_indication",
12749 FT_UINT8,BASE_DEC, NULL, 0x00,
12750 NULL, HFILL }
12752 { &hf_gsm_a_rr_seq_code,
12753 { "Sequence Code","gsm_a.rr.seq_code",
12754 FT_UINT8, BASE_DEC, NULL, 0x00,
12755 NULL, HFILL }
12758 { &hf_gsm_a_rr_group_cipher_key_number,
12759 { "Group cipher key number","gsm_a.rr.Group_cipher_key_number",
12760 FT_UINT8,BASE_DEC, NULL, 0x3c,
12761 NULL, HFILL }
12763 { &hf_gsm_a_rr_MBMS_broadcast,
12764 { "MBMS Broadcast","gsm_a.rr.MBMS_broadcast",
12765 FT_BOOLEAN,8, TFS(&gsm_a_rr_MBMS_broadcast_value), 0x01,
12766 NULL, HFILL }
12768 { &hf_gsm_a_rr_MBMS_multicast,
12769 { "MBMS Multicast","gsm_a.rr.MBMS_multicast",
12770 FT_BOOLEAN,8, TFS(&gsm_a_rr_MBMS_multicast_value), 0x02,
12771 NULL, HFILL }
12773 { &hf_gsm_a_rr_last_segment,
12774 { "Last Segment","gsm_a.rr.last_segment",
12775 FT_BOOLEAN,8, TFS(&gsm_a_rr_last_segment_value), 0x01,
12776 NULL, HFILL }
12778 { &hf_gsm_a_rr_carrier_ind,
12779 { "Carrier Indication","gsm_a.rr.carrier_ind",
12780 FT_BOOLEAN,8, TFS(&gsm_a_rr_carrier_ind_value), 0x01,
12781 NULL, HFILL }
12783 { &hf_gsm_a_rr_ra,
12784 { "Random Access Information (RA)", "gsm_a.rr.ra",
12785 FT_UINT8, BASE_DEC, NULL, 0x0,
12786 NULL, HFILL }
12788 { &hf_gsm_a_rr_T1prim,
12789 { "T1'", "gsm_a.rr.T1prim",
12790 FT_UINT8, BASE_DEC, NULL, 0xf8,
12791 NULL, HFILL }
12793 { &hf_gsm_a_rr_T3,
12794 { "T3", "gsm_a.rr.T3",
12795 FT_UINT16, BASE_DEC, NULL, 0x07e0,
12796 NULL, HFILL }
12798 { &hf_gsm_a_rr_T2,
12799 { "T2", "gsm_a.rr.T2",
12800 FT_UINT8, BASE_DEC, NULL, 0x1f,
12801 NULL, HFILL }
12803 { &hf_gsm_a_rr_tbf_T1prim,
12804 { "T1' (TBF)", "gsm_a.rr.tbf.T1prim",
12805 FT_UINT8, BASE_DEC, NULL, 0x00,
12806 NULL, HFILL }
12808 { &hf_gsm_a_rr_tbf_T3,
12809 { "T3 (TBF)", "gsm_a.rr.tbf.T3",
12810 FT_UINT16, BASE_DEC, NULL, 0x00,
12811 NULL, HFILL }
12813 { &hf_gsm_a_rr_tbf_T2,
12814 { "T2 (TBF)", "gsm_a.rr.tbf.T2",
12815 FT_UINT8, BASE_DEC, NULL, 0x00,
12816 NULL, HFILL }
12818 { &hf_gsm_a_rr_rfn,
12819 { "RFN", "gsm_a.rr.rfn",
12820 FT_UINT16, BASE_DEC, NULL, 0x0,
12821 "Reduced Frame Number", HFILL }
12823 { &hf_gsm_a_rr_RR_cause,
12824 { "RR cause value","gsm_a.rr.RRcause",
12825 FT_UINT8,BASE_DEC, VALS(gsm_a_rr_RR_cause_vals), 0x0,
12826 NULL, HFILL }
12828 { &hf_gsm_a_rr_cm_cng_msg_req,
12829 { "CLASSMARK CHANGE","gsm_a.rr.cm_cng_msg_req",
12830 FT_BOOLEAN,8, TFS(&gsm_a_msg_req_value), 0x80,
12831 NULL, HFILL }
12833 { &hf_gsm_a_rr_utran_cm_cng_msg_req,
12834 { "UTRAN CLASSMARK CHANGE","gsm_a.rr.utran_cm_cng_msg_req",
12835 FT_UINT8,BASE_DEC, VALS(gsm_a_rr_utran_cm_cng_msg_req_vals), 0x70,
12836 NULL, HFILL }
12838 { &hf_gsm_a_rr_cdma2000_cm_cng_msg_req,
12839 { "CDMA2000 CLASSMARK CHANGE","gsm_a.rr.cdma2000_cm_cng_msg_req",
12840 FT_BOOLEAN,8, TFS(&gsm_a_msg_req_value), 0x08,
12841 NULL, HFILL }
12843 { &hf_gsm_a_rr_geran_iu_cm_cng_msg_req,
12844 { "GERAN IU MODE CLASSMARK CHANGE","gsm_a.rr.geran_iu_cm_cng_msg_req",
12845 FT_BOOLEAN,8, TFS(&gsm_a_msg_req_value), 0x04,
12846 NULL, HFILL }
12848 { &hf_gsm_a_rr_chnl_needed_ch1,
12849 { "Channel 1","gsm_a.rr.chnl_needed_ch1",
12850 FT_UINT8,BASE_DEC, VALS(gsm_a_rr_channel_needed_vals), 0x00,
12851 NULL, HFILL }
12853 { &hf_gsm_a_rr_chnl_needed_ch2,
12854 { "Channel 2","gsm_a.rr.chnl_needed_ch2",
12855 FT_UINT8,BASE_DEC, VALS(gsm_a_rr_channel_needed_vals), 0x00,
12856 NULL, HFILL }
12858 { &hf_gsm_a_rr_chnl_needed_ch3,
12859 { "Channel 3","gsm_a.rr.chnl_needed_ch3",
12860 FT_UINT8,BASE_DEC, VALS(gsm_a_rr_channel_needed_vals), 0x00,
12861 NULL, HFILL }
12863 { &hf_gsm_a_rr_chnl_needed_ch4,
12864 { "Channel 4","gsm_a.rr.chnl_needed_ch4",
12865 FT_UINT8,BASE_DEC, VALS(gsm_a_rr_channel_needed_vals), 0x00,
12866 NULL, HFILL }
12868 { &hf_gsm_a_rr_pkt_estab_cause,
12869 { "PACKET_ESTABLISHMENT_CAUSE","gsm_a.rr.pkt_estab_cause",
12870 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_pkt_estab_cause_vals), 0x00,
12871 NULL, HFILL }
12873 { &hf_gsm_a_rr_peak_throughput_class,
12874 { "PEAK_THROUGHPUT_CLASS","gsm_a.rr.peak_throughput_class",
12875 FT_UINT8, BASE_DEC, NULL, 0x00,
12876 NULL, HFILL }
12878 { &hf_gsm_a_rr_radio_priority,
12879 { "RADIO_PRIORITY","gsm_a.rr.radio_priority",
12880 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_radio_priority_vals), 0x00,
12881 NULL, HFILL }
12883 { &hf_gsm_a_rr_llc_pdu_type,
12884 { "LLC_PDU_TYPE","gsm_a.rr.llc_pdu_type",
12885 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_llc_pdu_type_value), 0x00,
12886 NULL, HFILL }
12888 { &hf_gsm_a_rr_rlc_octet_count,
12889 { "RLC_OCTET_COUNT","gsm_a.rr.rlc_octet_count",
12890 FT_UINT16, BASE_DEC, NULL, 0x00,
12891 NULL, HFILL }
12893 { &hf_gsm_a_rr_rlc_non_pers_mode_cap,
12894 { "RLC Non-persistent Mode Capability","gsm_a.rr.rlc_non_pers_mode_cap",
12895 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x00,
12896 NULL, HFILL }
12898 { &hf_gsm_a_rr_reduced_latency_cap,
12899 { "Reduced Latency Capability","gsm_a.rr.reduced_latency_cap",
12900 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_reduced_latency_cap_value), 0x00,
12901 NULL, HFILL }
12903 { &hf_gsm_a_rr_ul_egprs2,
12904 { "Uplink EGPRS2","gsm_a.rr.ul_egprs2",
12905 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_egprs2_vals), 0x00,
12906 NULL, HFILL }
12908 { &hf_gsm_a_rr_dl_egprs2,
12909 { "Downlink EGPRS2","gsm_a.rr.dl_egprs2",
12910 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_egprs2_vals), 0x00,
12911 NULL, HFILL }
12913 { &hf_gsm_a_rr_emst_ms_cap,
12914 { "EMST_MS_Capability","gsm_a.rr.emst_ms_cap",
12915 FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x00,
12916 NULL, HFILL }
12918 { &hf_gsm_a_rr_suspension_cause,
12919 { "Suspension cause value","gsm_a.rr.suspension_cause",
12920 FT_UINT8,BASE_DEC, VALS(gsm_a_rr_suspension_cause_vals), 0x0,
12921 NULL, HFILL }
12923 { &hf_gsm_a_rr_apdu_id,
12924 { "APDU ID","gsm_a.rr.apdu_id",
12925 FT_UINT8,BASE_HEX, VALS(gsm_a_rr_apdu_id_vals), 0x0f,
12926 NULL, HFILL }
12928 { &hf_gsm_a_rr_apdu_flags_cr,
12929 { "C/R", "gsm_a.rr.apdu_flags_cr",
12930 FT_BOOLEAN, 8, TFS(&gsm_a_rr_apdu_flags_cr_value), 0x10,
12931 NULL, HFILL }
12933 { &hf_gsm_a_rr_apdu_flags_fs,
12934 { "First Segment", "gsm_a.rr.apdu_flags_fs",
12935 FT_BOOLEAN, 8, TFS(&gsm_a_rr_apdu_flags_fs_value), 0x20,
12936 NULL, HFILL }
12938 { &hf_gsm_a_rr_apdu_flags_ls,
12939 { "Last Segment", "gsm_a.rr.apdu_flags_ls",
12940 FT_BOOLEAN, 8, TFS(&gsm_a_rr_apdu_flags_ls_value), 0x40,
12941 NULL, HFILL }
12943 { &hf_gsm_a_rr_apdu_data,
12944 { "APDU Data","gsm_a.rr.apdu_data",
12945 FT_BYTES, BASE_NONE, NULL, 0,
12946 NULL, HFILL }
12948 { &hf_gsm_a_rr_set_of_amr_codec_modes_v1_b8,
12949 { "12,2 kbit/s codec rate", "gsm_a.rr.set_of_amr_codec_modes_v1b8",
12950 FT_BOOLEAN,8, TFS(&gsm_a_rr_set_of_amr_codec_modes), 0x80,
12951 NULL, HFILL }
12953 { &hf_gsm_a_rr_set_of_amr_codec_modes_v1_b7,
12954 { "10,2 kbit/s codec rate", "gsm_a.rr.set_of_amr_codec_modes_v1b7",
12955 FT_BOOLEAN,8, TFS(&gsm_a_rr_set_of_amr_codec_modes), 0x40,
12956 NULL, HFILL }
12958 { &hf_gsm_a_rr_set_of_amr_codec_modes_v1_b6,
12959 { "7,95 kbit/s codec rate", "gsm_a.rr.set_of_amr_codec_modes_v1b6",
12960 FT_BOOLEAN,8, TFS(&gsm_a_rr_set_of_amr_codec_modes), 0x20,
12961 NULL, HFILL }
12963 { &hf_gsm_a_rr_set_of_amr_codec_modes_v1_b5,
12964 { "7,40 kbit/s codec rate", "gsm_a.rr.set_of_amr_codec_modes_v1b5",
12965 FT_BOOLEAN,8, TFS(&gsm_a_rr_set_of_amr_codec_modes), 0x10,
12966 NULL, HFILL }
12968 { &hf_gsm_a_rr_set_of_amr_codec_modes_v1_b4,
12969 { "6,70 kbit/s codec rate", "gsm_a.rr.set_of_amr_codec_modes_v1b4",
12970 FT_BOOLEAN,8, TFS(&gsm_a_rr_set_of_amr_codec_modes), 0x08,
12971 NULL, HFILL }
12973 { &hf_gsm_a_rr_set_of_amr_codec_modes_v1_b3,
12974 { "5,90 kbit/s codec rate", "gsm_a.rr.set_of_amr_codec_modes_v1b3",
12975 FT_BOOLEAN,8, TFS(&gsm_a_rr_set_of_amr_codec_modes), 0x04,
12976 NULL, HFILL }
12978 { &hf_gsm_a_rr_set_of_amr_codec_modes_v1_b2,
12979 { "5,15 kbit/s codec rate", "gsm_a.rr.set_of_amr_codec_modes_v1b2",
12980 FT_BOOLEAN,8, TFS(&gsm_a_rr_set_of_amr_codec_modes), 0x02,
12981 NULL, HFILL }
12983 { &hf_gsm_a_rr_set_of_amr_codec_modes_v1_b1,
12984 { "4,75 kbit/s codec rate", "gsm_a.rr.set_of_amr_codec_modes_v1b1",
12985 FT_BOOLEAN,8, TFS(&gsm_a_rr_set_of_amr_codec_modes), 0x01,
12986 NULL, HFILL }
12988 { &hf_gsm_a_rr_set_of_amr_codec_modes_v2_b5,
12989 { "23,85 kbit/s codec rate", "gsm_a.rr.set_of_amr_codec_modes_v2b5",
12990 FT_BOOLEAN,8, TFS(&gsm_a_rr_set_of_amr_codec_modes), 0x10,
12991 NULL, HFILL }
12993 { &hf_gsm_a_rr_set_of_amr_codec_modes_v2_b4,
12994 { "15,85 kbit/s codec rate", "gsm_a.rr.set_of_amr_codec_modes_v2b4",
12995 FT_BOOLEAN,8, TFS(&gsm_a_rr_set_of_amr_codec_modes), 0x08,
12996 NULL, HFILL }
12998 { &hf_gsm_a_rr_set_of_amr_codec_modes_v2_b3,
12999 { "12,65 kbit/s codec rate", "gsm_a.rr.set_of_amr_codec_modes_v2b3",
13000 FT_BOOLEAN,8, TFS(&gsm_a_rr_set_of_amr_codec_modes), 0x04,
13001 NULL, HFILL }
13003 { &hf_gsm_a_rr_set_of_amr_codec_modes_v2_b2,
13004 { "8,85 kbit/s codec rate", "gsm_a.rr.set_of_amr_codec_modes_v2b2",
13005 FT_BOOLEAN,8, TFS(&gsm_a_rr_set_of_amr_codec_modes), 0x02,
13006 NULL, HFILL }
13008 { &hf_gsm_a_rr_set_of_amr_codec_modes_v2_b1,
13009 { "6,60 kbit/s codec rate", "gsm_a.rr.set_of_amr_codec_modes_v2b1",
13010 FT_BOOLEAN,8, TFS(&gsm_a_rr_set_of_amr_codec_modes), 0x01,
13011 NULL, HFILL }
13013 { &hf_gsm_a_rr_amr_threshold,
13014 { "AMR Threshold", "gsm_a.rr.amr_threshold",
13015 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &gsm_a_rr_amr_threshold_vals_ext, 0x00,
13016 NULL, HFILL }
13018 { &hf_gsm_a_rr_amr_hysteresis,
13019 { "AMR Hysteresis", "gsm_a.rr.amr_hysteresis",
13020 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_amr_hysteresis_vals), 0x00,
13021 NULL, HFILL }
13023 { &hf_gsm_a_rr_pwrc,
13024 { "PWRC", "gsm_a.rr.pwrc",
13025 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
13026 "Power Control Indicator (PWRC)", HFILL }
13028 { &hf_gsm_a_rr_dtx_bcch,
13029 { "DTX (BCCH)", "gsm_a.rr.dtx_bcch",
13030 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_dtx_bcch_vals), 0x30,
13031 "Discontinuous Transmission (DTX-BCCH)", HFILL }
13033 { &hf_gsm_a_rr_dtx_sacch,
13034 { "DTX (SACCH)", "gsm_a.rr.dtx_sacch",
13035 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_dtx_sacch_vals), 0x00,
13036 "Discontinuous Transmission (DTX-SACCH)", HFILL }
13038 { &hf_gsm_a_rr_radio_link_timeout,
13039 { "Radio Link Timeout", "gsm_a.rr.radio_link_timeout",
13040 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_radio_link_timeout_vals), 0x0f,
13041 "Radio Link Timeout (s)", HFILL }
13043 { &hf_gsm_a_rr_cell_reselect_hyst,
13044 { "Cell Reselection Hysteresis", "gsm_a.rr.cell_reselect_hyst",
13045 FT_UINT8, BASE_DEC, NULL, 0xe0,
13046 "Cell Reselection Hysteresis (dB)", HFILL }
13048 { &hf_gsm_a_rr_ms_txpwr_max_cch,
13049 { "MS TXPWR MAX CCH", "gsm_a.rr.ms_txpwr_max_cch",
13050 FT_UINT8, BASE_DEC, NULL, 0x1f,
13051 NULL, HFILL }
13053 { &hf_gsm_a_rr_acs,
13054 { "ACS", "gsm_a.rr.acs",
13055 FT_BOOLEAN, 8, NULL, 0x80,
13056 "Additional Reselect Param Indicator (ACS)", HFILL }
13058 { &hf_gsm_a_rr_neci,
13059 { "NECI", "gsm_a.rr.neci",
13060 FT_UINT8, BASE_DEC, NULL, 0x40,
13061 "New Establishment Cause Indicator (NECI)", HFILL }
13063 { &hf_gsm_a_rr_rxlev_access_min,
13064 { "RXLEV-ACCESS-MIN", "gsm_a.rr.rxlev_access_min",
13065 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &gsm_a_rr_rxlev_vals_ext, 0x3f,
13066 NULL, HFILL }
13068 { &hf_gsm_a_rr_mscr,
13069 { "MSCR", "gsm_a.rr.mscr",
13070 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_mscr_vals), 0x80,
13071 "MSC Release Indicator (MSCR)", HFILL }
13073 { &hf_gsm_a_rr_att,
13074 { "ATT", "gsm_a.rr.att",
13075 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_att_vals), 0x40,
13076 "Attach Indicator (ATT)", HFILL }
13078 { &hf_gsm_a_rr_bs_ag_blks_res,
13079 { "BS_AG_BLKS_RES", "gsm_a.rr.bs_ag_blks_res",
13080 FT_UINT8, BASE_DEC, NULL, 0x38,
13081 "Access Grant Reserved Blocks (BS_AG_BLKS_RES)", HFILL }
13083 { &hf_gsm_a_rr_ccch_conf,
13084 { "CCCH-CONF", "gsm_a.rr.ccch_conf",
13085 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_ccch_conf_vals), 0x07,
13086 NULL, HFILL }
13088 { &hf_gsm_a_rr_cbq3,
13089 { "CBQ3", "gsm_a.rr.cbq3",
13090 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_cbq3_vals), 0x00,
13091 "Cell Bar Qualify 3", HFILL }
13093 { &hf_gsm_a_rr_bs_pa_mfrms,
13094 { "BS-PA-MFRMS", "gsm_a.rr.bs_pa_mfrms",
13095 FT_UINT8, BASE_DEC, NULL, 0x07,
13096 NULL, HFILL }
13098 { &hf_gsm_a_rr_t3212,
13099 { "T3212", "gsm_a.rr.t3212",
13100 FT_UINT8, BASE_DEC, NULL, 0x00,
13101 "Periodic Update period (T3212) (deci-hours)", HFILL }
13103 { &hf_gsm_a_rr_gsm_band,
13104 { "GSM Band", "gsm_a.rr.gsm_band",
13105 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_gsm_band_vals), 0x00,
13106 NULL, HFILL }
13108 { &hf_gsm_a_rr_arfcn_first,
13109 { "ARFCN First", "gsm_a.rr.arfcn_first",
13110 FT_UINT16, BASE_DEC, NULL, 0x00,
13111 NULL, HFILL }
13113 { &hf_gsm_a_rr_band_offset,
13114 { "Band Offset", "gsm_a.rr.band_offset",
13115 FT_UINT16, BASE_DEC, NULL, 0x00,
13116 NULL, HFILL }
13118 { &hf_gsm_a_rr_arfcn_range,
13119 { "ARFCN Range", "gsm_a.rr.arfcn_range",
13120 FT_UINT8, BASE_DEC, NULL, 0x00,
13121 NULL, HFILL }
13123 { &hf_gsm_a_rr_lowest_arfcn,
13124 { "Lowest ARFCN", "gsm_a.rr.lowest_arfcn",
13125 FT_UINT8, BASE_DEC, NULL, 0x7f,
13126 NULL, HFILL }
13128 { &hf_gsm_a_rr_inc_skip_arfcn,
13129 { "Increment skip ARFCN", "gsm_a.rr.inc_skip_arfcn",
13130 FT_UINT8, BASE_DEC, NULL, 0x00,
13131 NULL, HFILL }
13133 { &hf_gsm_a_rr_gprs_resumption_ack,
13134 { "Ack", "gsm_a.rr.gprs_resumption_ack",
13135 FT_BOOLEAN, 8, TFS(&gsm_a_rr_gprs_resumption_ack_value), 0x01,
13136 "GPRS Resumption Ack bit", HFILL }
13138 { &hf_gsm_a_rr_ext_ind,
13139 { "EXT-IND", "gsm_a.rr.ext_ind",
13140 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_ext_ind_vals), 0x20,
13141 "Extension Indication (EXT-IND)", HFILL }
13143 { &hf_gsm_a_rr_ba_ind,
13144 { "BA-IND", "gsm_a.rr.ba_ind",
13145 FT_UINT8, BASE_DEC, NULL, 0x00,
13146 "BCCH Allocation Indication (BA-IND)", HFILL }
13148 { &hf_gsm_a_rr_multiband_reporting,
13149 { "Multiband Reporting", "gsm_a.rr.multiband_reporting",
13150 FT_UINT8, BASE_DEC, NULL, 0x00,
13151 "Number of cells to be reported in each band if Multiband Reporting", HFILL }
13153 { &hf_gsm_a_rr_ncc_permitted,
13154 { "NCC Permitted", "gsm_a.rr.ncc_permitted",
13155 FT_UINT8, BASE_HEX, NULL, 0x0,
13156 NULL, HFILL }
13158 { &hf_gsm_a_rr_max_retrans,
13159 { "Max retrans", "gsm_a.rr.max_retrans",
13160 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_max_retrans_vals), 0xc0,
13161 "Maximum number of retransmissions", HFILL }
13163 { &hf_gsm_a_rr_tx_integer,
13164 { "Tx-integer", "gsm_a.rr.tx_integer",
13165 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_tx_integer_vals), 0x3c,
13166 "Number of Slots to spread Transmission (Tx-integer)", HFILL }
13168 { &hf_gsm_a_rr_cell_barr_access,
13169 { "CELL_BARR_ACCESS", "gsm_a.rr.cell_barr_access",
13170 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_cell_barr_access_vals), 0x02,
13171 "Cell Barred for Access (CELL_BARR_ACCESS)", HFILL }
13173 { &hf_gsm_a_rr_re,
13174 { "RE", "gsm_a.rr.re",
13175 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_re_vals), 0x01,
13176 "Call re-establishment allowed (RE)", HFILL }
13178 { &hf_gsm_a_rr_acc,
13179 { "ACC", "gsm_a.rr.acc",
13180 FT_UINT16, BASE_HEX, NULL, 0x0,
13181 "Access Control Class N barred (ACC)", HFILL }
13183 { &hf_gsm_a_rr_nch_position,
13184 { "NCH Position", "gsm_a.rr.nch_position",
13185 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_nch_position_vals), 0x00,
13186 NULL, HFILL }
13188 { &hf_gsm_a_rr_si2ter_mp_change_mark,
13189 { "SI2ter Measurement Parameter Change Mark", "gsm_a.rr.si2ter_mp_change_mark",
13190 FT_UINT8, BASE_DEC, NULL, 0x00,
13191 NULL, HFILL }
13193 { &hf_gsm_a_rr_si2ter_3g_change_mark,
13194 { "SI2ter 3G Change Mark", "gsm_a.rr.si2ter_3g_change_mark",
13195 FT_UINT8, BASE_DEC, NULL, 0x00,
13196 NULL, HFILL }
13198 { &hf_gsm_a_rr_si2ter_index,
13199 { "SI2ter Index", "gsm_a.rr.si2ter_index",
13200 FT_UINT8, BASE_DEC, NULL, 0x00,
13201 NULL, HFILL }
13203 { &hf_gsm_a_rr_si2ter_count,
13204 { "SI2ter Count", "gsm_a.rr.si2ter_count",
13205 FT_UINT8, BASE_DEC, NULL, 0x00,
13206 NULL, HFILL }
13208 { &hf_gsm_a_rr_fdd_uarfcn,
13209 { "FDD UARFCN", "gsm_a.rr.fdd_uarfcn",
13210 FT_UINT16, BASE_DEC, NULL, 0x0,
13211 NULL, HFILL }
13213 { &hf_gsm_a_rr_bandwidth_fdd,
13214 { "Bandwidth FDD", "gsm_a.rr.bandwidth_fdd",
13215 FT_UINT8, BASE_DEC, NULL, 0x0,
13216 NULL, HFILL }
13218 { &hf_gsm_a_rr_tdd_uarfcn,
13219 { "TDD UARFCN", "gsm_a.rr.tdd_uarfcn",
13220 FT_UINT16, BASE_DEC, NULL, 0x0,
13221 NULL, HFILL }
13223 { &hf_gsm_a_rr_bandwidth_tdd,
13224 { "Bandwidth TDD", "gsm_a.rr.bandwidth_tdd",
13225 FT_UINT8, BASE_DEC, NULL, 0x0,
13226 NULL, HFILL }
13228 { &hf_gsm_a_rr_arfcn,
13229 { "ARFCN", "gsm_a.rr.arfcn",
13230 FT_UINT16, BASE_DEC, NULL, 0x0,
13231 "Absolute Radio Frequency Channel Number (ARFCN)", HFILL }
13233 { &hf_gsm_a_rr_bsic,
13234 { "BSIC", "gsm_a.rr.bsic",
13235 FT_UINT8, BASE_DEC, NULL, 0x0,
13236 "Base Station Identify Code (BSIC)", HFILL }
13238 { &hf_gsm_a_rr_qsearch_i,
13239 { "Qsearch I", "gsm_a.rr.qsearch_i",
13240 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_qsearch_x_vals), 0x0,
13241 "Search for 3G cells if signal level is below (0 7) or above (8 15) threshold (Qsearch I)", HFILL }
13243 { &hf_gsm_a_rr_fdd_qoffset,
13244 { "FDD Qoffset", "gsm_a.rr.fdd_qoffset",
13245 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_xdd_qoffset_vals), 0x0,
13246 "Offset to RLA_C for cell re selection to FDD access technology (FDD Qoffset)", HFILL }
13248 { &hf_gsm_a_rr_fdd_qmin,
13249 { "FDD Qmin", "gsm_a.rr.fdd_qmin",
13250 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_fdd_qmin_vals), 0x0,
13251 "Minimum threshold for Ec/No for UTRAN FDD cell re-selection (FDD Qmin)", HFILL }
13253 { &hf_gsm_a_rr_tdd_qoffset,
13254 { "TDD Qoffset", "gsm_a.rr.tdd_qoffset",
13255 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_xdd_qoffset_vals), 0x0,
13256 "Offset to RLA_C for cell re selection to TDD access technology (TDD Qoffset)", HFILL }
13258 { &hf_gsm_a_rr_fdd_qmin_offset,
13259 { "FDD Qmin Offset", "gsm_a.rr.fdd_qmin_offset",
13260 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_fdd_qmin_offset_vals), 0x0,
13261 "Offset to FDD Qmin value (FDD Qmin Offset)", HFILL }
13263 { &hf_gsm_a_rr_fdd_rscpmin,
13264 { "FDD RSCPmin", "gsm_a.rr.fdd_rscpmin",
13265 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_fdd_rscpmin_vals), 0x0,
13266 "Minimum threshold of RSCP for UTRAN FDD cell re-selection (FDD RSCPmin)", HFILL }
13268 { &hf_gsm_a_rr_3g_ba_ind,
13269 { "3G BA-IND", "gsm_a.rr.3g_ba_ind",
13270 FT_UINT8, BASE_DEC, NULL, 0x0,
13271 "3G BCCH Allocation Indication (3G BA-IND)", HFILL }
13273 { &hf_gsm_a_rr_mp_change_mark,
13274 { "Measurement Parameter Change Mark", "gsm_a.rr.mp_change_mark",
13275 FT_UINT8, BASE_DEC, NULL, 0x0,
13276 NULL, HFILL }
13278 { &hf_gsm_a_rr_si2quater_index,
13279 { "SI2quater Index", "gsm_a.rr.si2quater_index",
13280 FT_UINT8, BASE_DEC, NULL, 0x00,
13281 NULL, HFILL }
13283 { &hf_gsm_a_rr_si2quater_count,
13284 { "SI2quater Count", "gsm_a.rr.si2quater_count",
13285 FT_UINT8, BASE_DEC, NULL, 0x00,
13286 NULL, HFILL }
13288 { &hf_gsm_a_rr_si21_change_mark,
13289 { "SI21 Change Mark", "gsm_a.rr.si21_change_mark",
13290 FT_UINT8, BASE_DEC, NULL, 0x00,
13291 NULL, HFILL }
13293 { &hf_gsm_a_rr_si21_index,
13294 { "SI21 Index", "gsm_a.rr.si21_index",
13295 FT_UINT8, BASE_DEC, NULL, 0x00,
13296 NULL, HFILL }
13298 { &hf_gsm_a_rr_si21_count,
13299 { "SI21 Count", "gsm_a.rr.si21_count",
13300 FT_UINT8, BASE_DEC, NULL, 0x00,
13301 NULL, HFILL }
13303 { &hf_gsm_a_rr_eab_auth_mask,
13304 { "EAB Authorization Mask", "gsm_a.rr.eab_auth_mask",
13305 FT_UINT8, BASE_DEC, NULL, 0x00,
13306 NULL, HFILL }
13308 { &hf_gsm_a_eab_subcategory,
13309 { "EAB Subcategory", "gsm_a.rr.eab_subcategory",
13310 FT_UINT8, BASE_DEC, NULL, 0x00,
13311 NULL, HFILL }
13313 { &hf_gsm_a_rr_gsm_report_type,
13314 { "Report Type", "gsm_a.rr.gsm_report_type",
13315 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_gsm_report_type_value), 0x0,
13316 "Report type the MS shall use (Report Type)", HFILL }
13318 { &hf_gsm_a_rr_serving_band_reporting,
13319 { "Serving Band Reporting", "gsm_a.rr.serving_band_reporting",
13320 FT_UINT8, BASE_DEC, NULL, 0x00,
13321 "Number of cells reported from the GSM serving frequency band (Serving Band Reporting)", HFILL }
13323 { &hf_gsm_a_rr_frequency_scrolling,
13324 { "Frequency Scrolling", "gsm_a.rr.frequency_scrolling",
13325 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_frequency_scrolling_value), 0x0,
13326 NULL, HFILL }
13328 { &hf_gsm_a_rr_rep_priority,
13329 { "Rep Priority", "gsm_a.rr.rep_priority",
13330 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_rep_priority_value), 0x0,
13331 "Reporting Priority", HFILL }
13333 { &hf_gsm_a_rr_report_type,
13334 { "Report Type", "gsm_a.rr.report_type",
13335 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_report_type_value), 0x0,
13336 NULL, HFILL }
13338 { &hf_gsm_a_rr_reporting_rate,
13339 { "Reporting Rate", "gsm_a.rr.reporting_rate",
13340 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_reporting_rate_value), 0x0,
13341 NULL, HFILL }
13343 { &hf_gsm_a_rr_invalid_bsic_reporting,
13344 { "Invalid BSIC Reporting", "gsm_a.rr.invalid_bsic_reporting",
13345 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_invalid_bsic_reporting_value), 0x0,
13346 NULL, HFILL }
13348 { &hf_gsm_a_rr_scale_ord,
13349 { "Scale Ord", "gsm_a.rr.scale_ord",
13350 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_scale_ord_vals), 0x00,
13351 "Offset used for the reported RXLEV values (Scale Ord)", HFILL }
13353 { &hf_gsm_a_rr_900_reporting_offset,
13354 { "900 Reporting Offset", "gsm_a.rr.900_reporting_offset",
13355 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_xxx_reporting_offset_vals), 0x00,
13356 "Offset to the reported value when prioritising the cells for reporting for GSM frequency band 900 (900 Reporting Offset)", HFILL }
13358 { &hf_gsm_a_rr_900_reporting_threshold,
13359 { "900 Reporting Threshold", "gsm_a.rr.900_reporting_threshold",
13360 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_gsm_reporting_threshold_vals), 0x00,
13361 "Apply priority reporting if the reported value is above threshold for GSM frequency band 900 (900 Reporting Threshold)", HFILL }
13363 { &hf_gsm_a_rr_1800_reporting_offset,
13364 { "1800 Reporting Offset", "gsm_a.rr.1800_reporting_offset",
13365 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_xxx_reporting_offset_vals), 0x00,
13366 "Offset to the reported value when prioritising the cells for reporting for GSM frequency band 1800 (1800 Reporting Offset)", HFILL }
13368 { &hf_gsm_a_rr_1800_reporting_threshold,
13369 { "1800 Reporting Threshold", "gsm_a.rr.1800_reporting_threshold",
13370 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_gsm_reporting_threshold_vals), 0x00,
13371 "Apply priority reporting if the reported value is above threshold for GSM frequency band 1800 (1800 Reporting Threshold)", HFILL }
13373 { &hf_gsm_a_rr_400_reporting_offset,
13374 { "400 Reporting Offset", "gsm_a.rr.400_reporting_offset",
13375 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_xxx_reporting_offset_vals), 0x00,
13376 "Offset to the reported value when prioritising the cells for reporting for GSM frequency band 400 (400 Reporting Offset)", HFILL }
13378 { &hf_gsm_a_rr_400_reporting_threshold,
13379 { "400 Reporting Threshold", "gsm_a.rr.400_reporting_threshold",
13380 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_gsm_reporting_threshold_vals), 0x00,
13381 "Apply priority reporting if the reported value is above threshold for GSM frequency band 400 (400 Reporting Threshold)", HFILL }
13383 { &hf_gsm_a_rr_1900_reporting_offset,
13384 { "1900 Reporting Offset", "gsm_a.rr.1900_reporting_offset",
13385 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_xxx_reporting_offset_vals), 0x00,
13386 "Offset to the reported value when prioritising the cells for reporting for GSM frequency band 1900 (1900 Reporting Offset)", HFILL }
13388 { &hf_gsm_a_rr_1900_reporting_threshold,
13389 { "1900 Reporting Threshold", "gsm_a.rr.1900_reporting_threshold",
13390 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_gsm_reporting_threshold_vals), 0x00,
13391 "Apply priority reporting if the reported value is above threshold for GSM frequency band 1900 (1900 Reporting Threshold)", HFILL }
13393 { &hf_gsm_a_rr_850_reporting_offset,
13394 { "850 Reporting Offset", "gsm_a.rr.850_reporting_offset",
13395 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_xxx_reporting_offset_vals), 0x00,
13396 "Offset to the reported value when prioritising the cells for reporting for GSM frequency band 850 (850 Reporting Offset)", HFILL }
13398 { &hf_gsm_a_rr_850_reporting_threshold,
13399 { "850 Reporting Threshold", "gsm_a.rr.850_reporting_threshold",
13400 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_gsm_reporting_threshold_vals), 0x00,
13401 "Apply priority reporting if the reported value is above threshold for GSM frequency band 850 (850 Reporting Threshold)", HFILL }
13403 { &hf_gsm_a_rr_network_control_order,
13404 { "Network Control Order", "gsm_a.rr.network_control_order",
13405 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_network_control_order_vals), 0x00,
13406 NULL, HFILL }
13408 { &hf_gsm_a_rr_nc_non_drx_period,
13409 { "NC Non DRX Period", "gsm_a.rr.nc_non_drx_period",
13410 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_nc_non_drx_period_vals), 0x00,
13411 NULL, HFILL }
13413 { &hf_gsm_a_rr_nc_reporting_period_i,
13414 { "NC Reporting Period I", "gsm_a.rr.nc_reporting_period_i",
13415 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_nc_reporting_period_x_vals), 0x00,
13416 "NC Reporting Period in Packet Idle mode (NC Reporting Period I)", HFILL }
13418 { &hf_gsm_a_rr_nc_reporting_period_t,
13419 { "NC Reporting Period T", "gsm_a.rr.nc_reporting_period_t",
13420 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_nc_reporting_period_x_vals), 0x00,
13421 "NC Reporting Period in Packet Transfer mode (NC Reporting Period T)", HFILL }
13423 { &hf_gsm_a_rr_index_start_3g,
13424 { "Index Start 3G", "gsm_a.rr.index_start_3g",
13425 FT_UINT8, BASE_DEC, NULL, 0x00,
13426 NULL, HFILL }
13428 { &hf_gsm_a_rr_absolute_index_start_emr,
13429 { "Absolute Index Start EMR", "gsm_a.rr.absolute_index_start_emr",
13430 FT_UINT8, BASE_DEC, NULL, 0x00,
13431 NULL, HFILL }
13433 { &hf_gsm_a_rr_qsearch_c_initial,
13434 { "QSearch C Initial", "gsm_a.rr.qsearch_c_initial",
13435 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_qsearch_c_initial_value), 0x0,
13436 "Qsearch value to be used in connected mode before Qsearch C is received (QSearch C Initial)", HFILL }
13438 { &hf_gsm_a_rr_fdd_rep_quant,
13439 { "FDD Rep Quant", "gsm_a.rr.fdd_rep_quant",
13440 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_fdd_rep_quant_value), 0x0,
13441 "FDD Reporting Quantity (FDD Rep Quant)", HFILL }
13443 { &hf_gsm_a_rr_fdd_multirat_reporting,
13444 { "FDD Multirat Reporting", "gsm_a.rr.fdd_multirat_reporting",
13445 FT_UINT8, BASE_DEC, NULL, 0x00,
13446 "Number of cells from the FDD access technology that shall be included in the list of strongest cells or in the measurement report (FDD Multirat Reporting)", HFILL }
13448 { &hf_gsm_a_rr_tdd_multirat_reporting,
13449 { "TDD Multirat Reporting", "gsm_a.rr.tdd_multirat_reporting",
13450 FT_UINT8, BASE_DEC, NULL, 0x00,
13451 "Number of cells from the TDD access technology that shall be included in the list of strongest cells or in the measurement report (TDD Multirat Reporting)", HFILL }
13453 { &hf_gsm_a_rr_qsearch_p,
13454 { "Qsearch P", "gsm_a.rr.qsearch_p",
13455 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_qsearch_x_vals), 0x00,
13456 "Search for 3G cells if signal level below threshold (Qsearch P)", HFILL }
13458 { &hf_gsm_a_rr_3g_search_prio,
13459 { "3G Search Prio (ignored in Rel-8)", "gsm_a.rr.3g_search_prio",
13460 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_3g_search_prio_value), 0x0,
13461 NULL, HFILL }
13463 { &hf_gsm_a_rr_fdd_reporting_offset,
13464 { "FDD Reporting Offset", "gsm_a.rr.fdd_reporting_offset",
13465 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_xxx_reporting_offset_vals), 0x00,
13466 "Offset to the reported value when prioritising the cells for reporting for FDD access technology (FDD Reporting Offset)", HFILL }
13468 { &hf_gsm_a_rr_fdd_reporting_threshold_rscp,
13469 { "FDD Reporting Threshold RSCP", "gsm_a.rr.fdd_reporting_threshold_rscp",
13470 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_wcdma_rscp_reporting_threshold_vals), 0x00,
13471 "Apply priority reporting if the reported value is above threshold for FDD access technology (FDD Reporting Threshold)", HFILL }
13473 { &hf_gsm_a_rr_fdd_reporting_threshold_ecn0,
13474 { "FDD Reporting Threshold EcN0", "gsm_a.rr.fdd_reporting_threshold_ecn0",
13475 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_wcdma_ecn0_reporting_threshold_vals), 0x00,
13476 "Apply priority reporting if the reported value is above threshold for FDD access technology (FDD Reporting Threshold)", HFILL }
13478 { &hf_gsm_a_rr_tdd_reporting_offset,
13479 { "TDD Reporting Offset", "gsm_a.rr.tdd_reporting_offset",
13480 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_xxx_reporting_offset_vals), 0x00,
13481 "Offset to the reported value when prioritising the cells for reporting for TDD access technology (TDD Reporting Offset)", HFILL }
13483 { &hf_gsm_a_rr_tdd_reporting_threshold_rscp,
13484 { "TDD Reporting Threshold RSCP", "gsm_a.rr.tdd_reporting_threshold_rscp",
13485 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_wcdma_rscp_reporting_threshold_vals), 0x00,
13486 "Apply priority reporting if the reported value is above threshold for TDD access technology (TDD Reporting Threshold)", HFILL }
13488 { &hf_gsm_a_rr_tdd_reporting_threshold_ecn0,
13489 { "TDD Reporting Threshold EcN0", "gsm_a.rr.tdd_reporting_threshold_ecn0",
13490 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_wcdma_ecn0_reporting_threshold_vals), 0x00,
13491 "Apply priority reporting if the reported value is above threshold for TDD access technology (TDD Reporting Threshold)", HFILL }
13493 { &hf_gsm_a_rr_fdd_reporting_threshold_2,
13494 { "FDD Reporting Threshold 2", "gsm_a.rr.fdd_reporting_threshold_2",
13495 FT_UINT8, BASE_DEC, NULL, 0x00,
13496 "Reporting threshold for the CPICH parameter (Ec/No or RSCP) that is not reported according to FDD_REP_QUANT (FDD Reporting Threshold 2)", HFILL }
13498 { &hf_gsm_a_rr_3g_ccn_active,
13499 { "3G CCN Active", "gsm_a.rr.3g_ccn_active",
13500 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_3g_ccn_active_value), 0x0,
13501 NULL, HFILL }
13503 { &hf_gsm_a_rr_700_reporting_offset,
13504 { "700 Reporting Offset", "gsm_a.rr.700_reporting_offset",
13505 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_xxx_reporting_offset_vals), 0x00,
13506 "Offset to the reported value when prioritising the cells for reporting for GSM frequency band 700 (700 Reporting Offset)", HFILL }
13508 { &hf_gsm_a_rr_700_reporting_threshold,
13509 { "700 Reporting Threshold", "gsm_a.rr.700_reporting_threshold",
13510 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_gsm_reporting_threshold_vals), 0x00,
13511 "Apply priority reporting if the reported value is above threshold for GSM frequency band 700 (700 Reporting Threshold)", HFILL }
13513 { &hf_gsm_a_rr_810_reporting_offset,
13514 { "810 Reporting Offset", "gsm_a.rr.810_reporting_offset",
13515 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_xxx_reporting_offset_vals), 0x00,
13516 "Offset to the reported value when prioritising the cells for reporting for GSM frequency band 810 (810 Reporting Offset)", HFILL }
13518 { &hf_gsm_a_rr_810_reporting_threshold,
13519 { "810 Reporting Threshold", "gsm_a.rr.810_reporting_threshold",
13520 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_gsm_reporting_threshold_vals), 0x00,
13521 "Apply priority reporting if the reported value is above threshold for GSM frequency band 810 (810 Reporting Threshold)", HFILL }
13523 { &hf_gsm_a_rr_cbq,
13524 { "CBQ", "gsm_a.rr.cbq",
13525 FT_UINT8, BASE_DEC, NULL, 0x00,
13526 "Cell Bar Qualify", HFILL }
13528 { &hf_gsm_a_rr_cell_reselect_offset,
13529 { "Cell Reselect Offset", "gsm_a.rr.cell_reselect_offset",
13530 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_cell_reselect_offset_vals), 0x00,
13531 "Offset to the C2 reselection criterion (Cell Reselect Offset)", HFILL }
13533 { &hf_gsm_a_rr_temporary_offset,
13534 { "Temporary Offset", "gsm_a.rr.temporary_offset",
13535 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_temporary_offset_vals), 0x0,
13536 "Negative offset to C2 for the duration of Penalty Time (Temporary Offset)", HFILL }
13538 { &hf_gsm_a_rr_penalty_time,
13539 { "Penalty Time", "gsm_a.rr.penalty_time",
13540 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_penalty_time_vals), 0x0,
13541 "Duration for which the temporary offset is applied (Penalty Time)", HFILL }
13543 { &hf_gsm_a_rr_gprs_ra_colour,
13544 { "GPRS RA Colour", "gsm_a.rr.gprs_ra_colour",
13545 FT_UINT8, BASE_DEC, NULL, 0x0,
13546 NULL, HFILL }
13548 { &hf_gsm_a_rr_si13_position,
13549 { "SI13 Position", "gsm_a.rr.si13_position",
13550 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_si13_position_vals), 0x0,
13551 NULL, HFILL }
13553 { &hf_gsm_a_rr_power_offset,
13554 { "Power Offset", "gsm_a.rr.power_offset",
13555 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_power_offset_vals), 0x0,
13556 "Power offset used in conjunction with the MS TXPWR MAX CCH parameter by the class 3 DCS 1800 MS (Power Offset)", HFILL }
13558 { &hf_gsm_a_rr_si2quater_position,
13559 { "SI2quater Position", "gsm_a.rr.si2quater_position",
13560 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_si2quater_position_value), 0x0,
13561 NULL, HFILL }
13563 { &hf_gsm_a_rr_si13alt_position,
13564 { "SI13alt Position", "gsm_a.rr.si13alt_position",
13565 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_si13alt_position_value), 0x0,
13566 NULL, HFILL }
13568 { &hf_gsm_a_rr_si21_position,
13569 { "SI21 Position", "gsm_a.rr.si21_position",
13570 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_si21_position_value), 0x0,
13571 NULL, HFILL }
13573 { &hf_gsm_a_rr_prio_thr,
13574 { "Prio Thr", "gsm_a.rr.prio_thr",
13575 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_prio_thr_vals), 0x0,
13576 "Prio signal strength threshold is related to RXLEV ACCESS_MIN (Prio Thr)", HFILL }
13578 { &hf_gsm_a_rr_lsa_offset,
13579 { "LSA Offset", "gsm_a.rr.lsa_offset",
13580 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_lsa_offset_vals), 0x0,
13581 "Offset to be used for LSA cell re selection between cells with the same LSA priorities (LSA Offset)", HFILL }
13583 { &hf_gsm_a_rr_cell_id,
13584 { "Cell Identity", "gsm_a.rr.cell_id",
13585 FT_UINT16, BASE_HEX_DEC, 0, 0x0,
13586 NULL, HFILL }
13588 { &hf_gsm_a_rr_paging_channel_restructuring,
13589 { "Paging Channel Restructuring", "gsm_a.rr.paging_channel_restructuring",
13590 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_paging_channel_restructuring_value), 0x0,
13591 NULL, HFILL }
13593 { &hf_gsm_a_rr_nln_sacch,
13594 { "NLN (SACCH)", "gsm_a.rr.nln_sacch",
13595 FT_UINT8, BASE_DEC, NULL, 0x0,
13596 NULL, HFILL }
13598 { &hf_gsm_a_rr_nln_status_sacch,
13599 { "NLN Status (SACCH)", "gsm_a.rr.nln_status_sacch",
13600 FT_UINT8, BASE_DEC, NULL, 0x0,
13601 NULL, HFILL }
13603 { &hf_gsm_a_rr_nln_pch,
13604 { "NLN (PCH)", "gsm_a.rr.nln_pch",
13605 FT_UINT8, BASE_DEC, NULL, 0x0,
13606 NULL, HFILL }
13608 { &hf_gsm_a_rr_nln_status_pch,
13609 { "NLN Status (PCH)", "gsm_a.rr.nln_status_pch",
13610 FT_UINT8, BASE_DEC, NULL, 0x0,
13611 NULL, HFILL }
13613 { &hf_gsm_a_rr_vbs_vgcs_inband_notifications,
13614 { "Inband Notifications", "gsm_a.rr.vbs_vgcs_inband_notifications",
13615 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_vbs_vgcs_inband_notifications_value), 0x0,
13616 NULL, HFILL }
13618 { &hf_gsm_a_rr_vbs_vgcs_inband_pagings,
13619 { "Inband Pagings", "gsm_a.rr.vbs_vgcs_inband_pagings",
13620 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_vbs_vgcs_inband_pagings_value), 0x0,
13621 NULL, HFILL }
13623 { &hf_gsm_a_rr_rac,
13624 { "RAC", "gsm_a.rr.rac",
13625 FT_UINT8, BASE_DEC, NULL, 0x0,
13626 "Routeing Area Code", HFILL }
13628 { &hf_gsm_a_rr_max_lapdm,
13629 { "Max LAPDm", "gsm_a.rr.max_lapdm",
13630 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_max_lapdm_vals), 0x0,
13631 "Maximum number of LAPDm frames on which a layer 3 can be segmented into and be sent on the main DCCH (Max LAPDm)", HFILL }
13633 { &hf_gsm_a_rr_gprs_ms_txpwr_max_ccch,
13634 { "GPRS MS TxPwr Max CCH", "gsm_a.rr.gprs_ms_txpwr_max_cch",
13635 FT_UINT8, BASE_DEC, NULL, 0x00,
13636 NULL, HFILL }
13638 { &hf_gsm_a_rr_dedicated_mode_mbms_notification_support,
13639 { "Dedicated Mode MBMS Notification Support", "gsm_a.rr.dedicated_mode_mbms_notification_support",
13640 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_dedicated_mode_mbms_notification_support_value), 0x0,
13641 NULL, HFILL }
13643 { &hf_gsm_a_rr_mnci_support,
13644 { "MNCI Support", "gsm_a.rr.mnci_support",
13645 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_mnci_support_value), 0x0,
13646 "MBMS Neighbouring Cell Information Support (MNCI Support)", HFILL }
13648 { &hf_gsm_a_rr_amr_config,
13649 { "AMR Configuration", "gsm_a.rr.amr_config",
13650 FT_UINT8, BASE_DEC, NULL, 0x0,
13651 NULL, HFILL }
13653 { &hf_gsm_a_rr_bcch_change_mark,
13654 { "BCCH Change Mark", "gsm_a.rr.bcch_change_mark",
13655 FT_UINT8, BASE_DEC, NULL, 0x0,
13656 NULL, HFILL }
13658 { &hf_gsm_a_rr_si_change_field,
13659 { "SI Change Field", "gsm_a.rr.si_change_field",
13660 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_si_change_field_vals), 0x0,
13661 NULL, HFILL }
13663 { &hf_gsm_a_rr_si13_change_mark,
13664 { "SI13 Change Mark", "gsm_a.rr.si13_change_mark",
13665 FT_UINT8, BASE_DEC, NULL, 0x0,
13666 NULL, HFILL }
13668 { &hf_gsm_a_rr_hsn,
13669 { "HSN", "gsm_a.rr.hsn",
13670 FT_UINT8, BASE_DEC, NULL, 0x0,
13671 "Hopping Sequence Number (HSN)", HFILL }
13673 { &hf_gsm_a_rr_rfl_number,
13674 { "RFL Number", "gsm_a.rr.rfl_number",
13675 FT_UINT8, BASE_DEC, NULL, 0x0,
13676 "Radio Frequency List Number (RFL Number)", HFILL }
13678 { &hf_gsm_a_rr_arfcn_index,
13679 { "ARFCN Index", "gsm_a.rr.arfcn_index",
13680 FT_UINT8, BASE_DEC, NULL, 0x0,
13681 NULL, HFILL }
13683 { &hf_gsm_a_rr_ma_length,
13684 { "MA Length", "gsm_a.rr.ma_length",
13685 FT_UINT8, BASE_DEC, NULL, 0x0,
13686 "Mobile Allocation Length (MA Length)", HFILL }
13688 { &hf_gsm_a_rr_psi1_repeat_period,
13689 { "PSI1 Repeat Period", "gsm_a.rr.psi1_repeat_period",
13690 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_psi1_repeat_period_vals), 0x0,
13691 NULL, HFILL }
13693 { &hf_gsm_a_rr_pbcch_pb,
13694 { "Pb", "gsm_a.rr.pbcch_pb",
13695 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_pbcch_pb_vals), 0x0,
13696 "Power reduction on PBCCH/PCCCH (Pb)", HFILL }
13698 { &hf_gsm_a_rr_pbcch_tsc,
13699 { "TSC", "gsm_a.rr.pbcch_tsc",
13700 FT_UINT8, BASE_DEC, NULL, 0x0,
13701 "Training Sequence Code for PBCCH (TSC)", HFILL }
13703 { &hf_gsm_a_rr_pbcch_tn,
13704 { "TN", "gsm_a.rr.pbcch_tn",
13705 FT_UINT8, BASE_DEC, NULL, 0x0,
13706 "Timeslot Number for PCCH (TN)", HFILL }
13708 { &hf_gsm_a_rr_spgc_ccch_sup,
13709 { "SPGC CCCH Sup", "gsm_a.rr.spgc_ccch_sup",
13710 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_spgc_ccch_sup_value), 0x0,
13711 "Split PG Cycle Code on CCCH Support (SPGC CCCH Sup)", HFILL }
13713 { &hf_gsm_a_rr_priority_access_thr,
13714 { "Priority Access Thr", "gsm_a.rr.priority_access_thr",
13715 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_priority_access_thr_vals), 0x0,
13716 "Priority Access Threshold for packet access (Priority Access Thr)", HFILL }
13718 { &hf_gsm_a_rr_nmo,
13719 { "NMO", "gsm_a.rr.nmo",
13720 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_nmo_vals), 0x0,
13721 "Network mode of Operation (NMO)", HFILL }
13723 { &hf_gsm_a_rr_t3168,
13724 { "T3168", "gsm_a.rr.t3168",
13725 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_t3168_vals), 0x0,
13726 NULL, HFILL }
13728 { &hf_gsm_a_rr_t3192,
13729 { "T3192", "gsm_a.rr.t3192",
13730 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_t3192_vals), 0x0,
13731 NULL, HFILL }
13733 { &hf_gsm_a_rr_drx_timer_max,
13734 { "DRX Timer Max", "gsm_a.rr.drx_timer_max",
13735 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_drx_timer_max_vals), 0x0,
13736 "Discontinuous Reception Timer Max (DRX Timer Max)", HFILL }
13738 { &hf_gsm_a_rr_access_burst_type,
13739 { "Access Burst Type", "gsm_a.rr.access_burst_type",
13740 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_access_burst_type_value), 0x0,
13741 "Format used in the PACKET CHANNEL REQUEST message, the PS HANDOVER ACCESS message, the PTCCH uplink block and in the PACKET CONTROL ACKNOWLEDGMENT message (Access Burst Type)", HFILL }
13743 { &hf_gsm_a_rr_control_ack_type,
13744 { "Control Ack Type", "gsm_a.rr.control_ack_type",
13745 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_control_ack_type_value), 0x0,
13746 "Default format of the PACKET CONTROL ACKNOWLEDGMENT message (Control Ack Type)", HFILL }
13748 { &hf_gsm_a_rr_bs_cv_max,
13749 { "BS CV Max", "gsm_a.rr.bs_cv_max",
13750 FT_UINT8, BASE_DEC, NULL, 0x0,
13751 "Base Station Countdown Value Maximum (BS CV Max)", HFILL }
13753 { &hf_gsm_a_rr_pan_dec,
13754 { "PAN Dec", "gsm_a.rr.pan_dec",
13755 FT_UINT8, BASE_DEC, NULL, 0x0,
13756 NULL, HFILL }
13758 { &hf_gsm_a_rr_pan_inc,
13759 { "PAN Inc", "gsm_a.rr.pan_inc",
13760 FT_UINT8, BASE_DEC, NULL, 0x0,
13761 NULL, HFILL }
13763 { &hf_gsm_a_rr_pan_max,
13764 { "PAN Max", "gsm_a.rr.pan_max",
13765 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_pan_max_vals), 0x0,
13766 NULL, HFILL }
13768 { &hf_gsm_a_rr_egprs_packet_channel_request,
13769 { "EGPRS Packet Channel Request", "gsm_a.rr.egprs_packet_channel_request",
13770 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_egprs_packet_channel_request_value), 0x0,
13771 NULL, HFILL }
13773 { &hf_gsm_a_rr_bep_period,
13774 { "BEP Period", "gsm_a.rr.bep_period",
13775 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_bep_period_vals), 0x0,
13776 NULL, HFILL }
13778 { &hf_gsm_a_rr_pfc_feature_mode,
13779 { "PFC Feature Mode", "gsm_a.rr.pfc_feature_mode",
13780 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_pfc_feature_mode_value), 0x0,
13781 "Packet Flow Context Feature Mode (PFC Feature Mode)", HFILL }
13783 { &hf_gsm_a_rr_dtm_support,
13784 { "DTM Support", "gsm_a.rr.dtm_support",
13785 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_dtm_support_value), 0x0,
13786 "Dual Transfer Mode Support (DTM Support)", HFILL }
13788 { &hf_gsm_a_rr_bss_paging_coordination,
13789 { "BSS Paging Coordination", "gsm_a.rr.bss_paging_coordination",
13790 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_bss_paging_coordination_value), 0x0,
13791 NULL, HFILL }
13793 { &hf_gsm_a_rr_ccn_active,
13794 { "CCN Active", "gsm_a.rr.ccn_active",
13795 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_ccn_active_value), 0x0,
13796 NULL, HFILL }
13798 { &hf_gsm_a_rr_nw_ext_utbf,
13799 { "NW Ext UTBF", "gsm_a.rr.nw_ext_utbf",
13800 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_nw_ext_utbf_value), 0x0,
13801 "Network Extended Uplink TBF (NW Ext UTBF)", HFILL }
13803 { &hf_gsm_a_rr_multiple_tbf_capability,
13804 { "Multiple TBF Capability", "gsm_a.rr.multiple_tbf_capability",
13805 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_multiple_tbf_capability_value), 0x0,
13806 NULL, HFILL }
13808 { &hf_gsm_a_rr_ext_utbf_no_data,
13809 { "Ext UTBF No Data", "gsm_a.rr.ext_utbf_no_data",
13810 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_ext_utbf_no_data_value), 0x0,
13811 NULL, HFILL }
13813 { &hf_gsm_a_rr_dtm_enhancements_capability,
13814 { "DTM Enhancements Capability", "gsm_a.rr.dtm_enhancements_capability",
13815 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_dtm_enhancements_capability_value), 0x0,
13816 NULL, HFILL }
13818 { &hf_gsm_a_rr_reduced_latency_access,
13819 { "Reduced Latency Access", "gsm_a.rr.reduced_latency_access",
13820 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_reduced_latency_access_value), 0x0,
13821 NULL, HFILL }
13823 { &hf_gsm_a_rr_alpha,
13824 { "Alpha", "gsm_a.rr.alpha",
13825 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_alpha_vals), 0x0,
13826 "Alpha parameter for GPR MS output power control (Alpha)", HFILL }
13828 { &hf_gsm_a_rr_t_avg_w,
13829 { "T Avg W", "gsm_a.rr.t_avg_w",
13830 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_t_avg_x_vals), 0x0,
13831 "Signal strength filter period for power control in packet idle mode", HFILL }
13833 { &hf_gsm_a_rr_t_avg_t,
13834 { "T Avg T", "gsm_a.rr.t_avg_t",
13835 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_t_avg_x_vals), 0x0,
13836 "Signal strength filter period for power control in packet transfer mode", HFILL }
13838 { &hf_gsm_a_rr_pc_meas_chan,
13839 { "PC Meas Chan", "gsm_a.rr.pc_meas_chan",
13840 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_pc_meas_chan_value), 0x0,
13841 "Channel used to measure the received power level on the downlink for the purpose of the uplink power control (PC Meas Chan)", HFILL }
13843 { &hf_gsm_a_rr_n_avg_i,
13844 { "N Avg I", "gsm_a.rr.n_avg_i",
13845 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_n_avg_i_vals), 0x0,
13846 "Interfering signal strength filter constant for power control (N Avg I)", HFILL }
13848 { &hf_gsm_a_rr_sgsnr,
13849 { "SGSNR", "gsm_a.rr.sgsnr",
13850 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_sgsnr_value), 0x0,
13851 "SGSN Release (SGSNR)", HFILL }
13853 { &hf_gsm_a_rr_si_status_ind,
13854 { "SI Status Ind", "gsm_a.rr.si_status_ind",
13855 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_si_status_ind_value), 0x0,
13856 NULL, HFILL }
13858 { &hf_gsm_a_rr_lb_ms_txpwr_max_cch,
13859 { "LB MS TxPwr Max CCCH", "gsm_a.rr.lb_ms_txpwr_max_cch",
13860 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_lb_ms_txpwr_max_cch_vals), 0x0,
13861 "Maximum TX power level an MS is allowed to use on all other than DCS 1800 and PCS 1900 frequency bands when accessing the system until otherwise commanded (LB MS TxPwr Max CCCH)", HFILL }
13863 { &hf_gsm_a_rr_si2n_support,
13864 { "SI2n Support", "gsm_a.rr.si2n_support",
13865 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_si2n_support_vals), 0x0,
13866 NULL, HFILL }
13868 { &hf_gsm_a_rr_mi_index,
13869 { "Measurement Information Index", "gsm_a.rr.mi_index",
13870 FT_UINT8, BASE_DEC, NULL, 0x0,
13871 NULL, HFILL }
13873 { &hf_gsm_a_rr_mi_count,
13874 { "Measurement Information Count", "gsm_a.rr.mi_count",
13875 FT_UINT8, BASE_DEC, NULL, 0x0,
13876 NULL, HFILL }
13878 { &hf_gsm_a_rr_3g_wait,
13879 { "3G Wait", "gsm_a.rr.3g_wait",
13880 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_3g_wait_vals), 0x0,
13881 NULL, HFILL }
13883 { &hf_gsm_a_rr_qsearch_c,
13884 { "Qsearch C", "gsm_a.rr.qsearch_c",
13885 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_qsearch_x_vals), 0x00,
13886 "Search for 3G cells if signal level is below (0 7) or above (8 15) threshold (Qsearch C)", HFILL }
13888 { &hf_gsm_a_rr_bsic_seen,
13889 { "BSIC Seen", "gsm_a.rr.bsic_seen",
13890 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_bsic_seen_value), 0x0,
13891 NULL, HFILL }
13893 { &hf_gsm_a_rr_scale,
13894 { "Scale", "gsm_a.rr.scale",
13895 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_scale_value), 0x0,
13896 "Offset applied for the reported RXLEV values (Scale)", HFILL }
13898 { &hf_gsm_a_rr_mean_bep_gmsk,
13899 { "Mean BEP GMSK", "gsm_a.rr.mean_bep_gmsk",
13900 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_mean_bep_gmsk_vals), 0x00,
13901 "Mean Bit Error Probability in GMSK (Mean BEP GMSK)", HFILL }
13903 { &hf_gsm_a_rr_mean_cv_bep,
13904 { "CV BEP", "gsm_a.rr.cv_bep",
13905 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_cv_bep_vals), 0x00,
13906 "Coefficient of Variation of the Bit Error Probability (CV BEP)", HFILL }
13908 { &hf_gsm_a_rr_nbr_rcvd_blocks,
13909 { "Nb Rcvd Blocks", "gsm_a.rr.nbr_rcvd_blocks",
13910 FT_UINT8, BASE_DEC, NULL, 0x00,
13911 "Number of correctly decoded blocks that were completed during the measurement report period (Nb Rcvd Blocks)", HFILL }
13913 { &hf_gsm_a_rr_reporting_quantity,
13914 { "Reporting Quantity", "gsm_a.rr.reporting_quantity",
13915 FT_UINT8, BASE_DEC, NULL, 0x00,
13916 NULL, HFILL }
13918 { &hf_gsm_a_rr_3g_priority_param_desc_utran_start,
13919 { "UTRAN Start", "gsm_a.rr.3g_priority.utran_start",
13920 FT_BOOLEAN, BASE_NONE, TFS(&priority_utran_start), 0x00,
13921 NULL, HFILL }
13923 { &hf_gsm_a_rr_3g_priority_param_desc_utran_stop,
13924 { "UTRAN Stop", "gsm_a.rr.3g_priority.utran_stop",
13925 FT_BOOLEAN, BASE_NONE, TFS(&priority_utran_stop), 0x00,
13926 NULL, HFILL }
13928 { &hf_gsm_a_rr_3g_priority_param_desc_default_utran_prio,
13929 { "DEFAULT_UTRAN_PRIORITY", "gsm_a.rr.3g_priority.default_utran_prio",
13930 FT_UINT8, BASE_DEC, NULL, 0x00,
13931 NULL, HFILL }
13933 { &hf_gsm_a_rr_3g_priority_param_desc_default_threshold_utran,
13934 { "DEFAULT_THRESH_UTRAN", "gsm_a.rr.3g_priority.default_threshold_utran",
13935 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_thresh_utran_eutran_high_low), 0x00,
13936 NULL, HFILL }
13938 { &hf_gsm_a_rr_3g_priority_param_desc_default_utran_qrxlevmin,
13939 { "DEFAULT_UTRAN_QRXLEVMIN", "gsm_a.rr.3g_priority.default_utran_qrxlevmin",
13940 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_utran_qrxlevmin), 0x00,
13941 NULL, HFILL }
13943 { &hf_gsm_a_rr_utran_frequency_index,
13944 { "UTRAN Frequency Index", "gsm_a.rr.3g_priority.utran_frequency_index",
13945 FT_UINT8, BASE_DEC, NULL, 0x00,
13946 NULL, HFILL }
13948 { &hf_gsm_a_rr_utran_priority,
13949 { "UTRAN_PRIORITY", "gsm_a.rr.3g_priority.utran_priority",
13950 FT_UINT8, BASE_DEC, NULL, 0x00,
13951 NULL, HFILL }
13953 { &hf_gsm_a_rr_thresh_utran_high,
13954 { "THRESH_UTRAN_high", "gsm_a.rr.3g_priority.thres_utran_high",
13955 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_thresh_utran_eutran_high_low), 0x00,
13956 NULL, HFILL }
13958 { &hf_gsm_a_rr_thresh_utran_low,
13959 { "THRESH_UTRAN_low", "gsm_a.rr.3g_priority.thres_utran_low",
13960 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_thresh_utran_eutran_high_low), 0x00,
13961 NULL, HFILL }
13963 { &hf_gsm_a_rr_utran_qrxlevmin,
13964 { "UTRAN_QRXLEVMIN", "gsm_a.rr.3g_priority.utran_qrxlevmin",
13965 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_utran_qrxlevmin), 0x00,
13966 NULL, HFILL }
13968 { &hf_gsm_a_rr_eutran_ccn_active,
13969 { "E-UTRAN_CCN_ACTIVE", "gsm_a.rr.3g_priority.eutran_ccn_active",
13970 FT_BOOLEAN, BASE_NONE, TFS(&eutran_ccn_active), 0x00,
13971 NULL, HFILL }
13973 { &hf_gsm_a_rr_eutran_start,
13974 { "E-UTRAN Start", "gsm_a.rr.3g_priority.eutran_start",
13975 FT_BOOLEAN, BASE_NONE, TFS(&priority_utran_start), 0x00,
13976 NULL, HFILL }
13978 { &hf_gsm_a_rr_eutran_stop,
13979 { "E-UTRAN Stop", "gsm_a.rr.3g_priority.utran_stop",
13980 FT_BOOLEAN, BASE_NONE, TFS(&priority_utran_stop), 0x00,
13981 NULL, HFILL }
13983 { &hf_gsm_a_rr_qsearch_c_eutran_initial,
13984 { "Qsearch_C_E-UTRAN_Initial", "gsm_a.rr.qsearch_c_eutran_initial",
13985 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_qsearch_c_eutran_initial), 0x00,
13986 NULL, HFILL }
13988 { &hf_gsm_a_rr_eutran_multirat_reporting,
13989 { "E-UTRAN_MULTIRAT_REPORTING (nb of E-UTRAN cells to be included in measurement report)", "gsm_a.rr.eutran_multirat_reporting",
13990 FT_UINT8, BASE_DEC, NULL, 0x00,
13991 NULL, HFILL }
13993 { &hf_gsm_a_rr_eutran_fdd_reporting_threshold_rsrp,
13994 { "E-UTRAN_FDD_REPORTING_THRESHOLD", "gsm_a.rr.eutran_fdd_reporting_threshold_rsrp",
13995 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_lte_rsrp_reporting_threshold_vals), 0x00,
13996 NULL, HFILL }
13998 { &hf_gsm_a_rr_eutran_fdd_reporting_threshold_rsrq,
13999 { "E-UTRAN_FDD_REPORTING_THRESHOLD", "gsm_a.rr.eutran_fdd_reporting_threshold_rsrq",
14000 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_lte_rsrq_reporting_threshold_vals), 0x00,
14001 NULL, HFILL }
14003 { &hf_gsm_a_rr_eutran_fdd_reporting_threshold_2,
14004 { "E-UTRAN_FDD_REPORTING_THRESHOLD_2", "gsm_a.rr.eutran_fdd_reporting_threshold_2",
14005 FT_UINT8, BASE_DEC, NULL, 0x00,
14006 NULL, HFILL }
14008 { &hf_gsm_a_rr_eutran_fdd_reporting_offset,
14009 { "E-UTRAN_FDD_REPORTING_OFFSET", "gsm_a.rr.eutran_fdd_reporting_offset",
14010 FT_UINT8, BASE_DEC, NULL, 0x00,
14011 NULL, HFILL }
14013 { &hf_gsm_a_rr_eutran_tdd_reporting_threshold_rsrp,
14014 { "E-UTRAN_TDD_REPORTING_THRESHOLD", "gsm_a.rr.eutran_tdd_reporting_threshold_rsrp",
14015 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_lte_rsrp_reporting_threshold_vals), 0x00,
14016 NULL, HFILL }
14018 { &hf_gsm_a_rr_eutran_tdd_reporting_threshold_rsrq,
14019 { "E-UTRAN_TDD_REPORTING_THRESHOLD", "gsm_a.rr.eutran_tdd_reporting_threshold_rsrq",
14020 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_lte_rsrq_reporting_threshold_vals), 0x00,
14021 NULL, HFILL }
14023 { &hf_gsm_a_rr_eutran_tdd_reporting_threshold_2,
14024 { "E-UTRAN_TDD_REPORTING_THRESHOLD_2", "gsm_a.rr.eutran_tdd_reporting_threshold_2",
14025 FT_UINT8, BASE_DEC, NULL, 0x00,
14026 NULL, HFILL }
14028 { &hf_gsm_a_rr_eutran_tdd_reporting_offset,
14029 { "E-UTRAN_TDD_REPORTING_OFFSET", "gsm_a.rr.eutran_tdd_reporting_offset",
14030 FT_UINT8, BASE_DEC, NULL, 0x00,
14031 NULL, HFILL }
14033 { &hf_gsm_a_rr_eutran_fdd_measurement_report_offset,
14034 { "E-UTRAN_FDD_MEASUREMENT_REPORT_OFFSET", "gsm_a.rr.eutran_fdd_measurement_report_offset",
14035 FT_UINT8, BASE_DEC, NULL, 0x00,
14036 NULL, HFILL }
14038 { &hf_gsm_a_rr_eutran_tdd_measurement_report_offset,
14039 { "E-UTRAN_TDD_MEASUREMENT_REPORT_OFFSET", "gsm_a.rr.eutran_tdd_measurement_report_offset",
14040 FT_UINT8, BASE_DEC, NULL, 0x00,
14041 NULL, HFILL }
14043 { &hf_gsm_a_rr_reporting_granularity,
14044 { "REPORTING_GRANULARITY", "gsm_a.rr.reporting_granularity",
14045 FT_UINT8, BASE_DEC, NULL, 0x00,
14046 NULL, HFILL }
14048 { &hf_gsm_a_rr_eutran_default_measurement_control_eutran,
14049 { "DEFAULT_Measurement_Control_E-UTRAN", "gsm_a.rr.eutran_default_measurement_control_eutran",
14050 FT_UINT8, BASE_DEC, NULL, 0x00,
14051 NULL, HFILL }
14053 { &hf_gsm_a_rr_eutran_measurement_control_eutran,
14054 { "Measurement_Control_E-UTRAN", "gsm_a.rr.eutran_measurement_control_eutran",
14055 FT_BOOLEAN, BASE_NONE, TFS(&measurement_control_eutran), 0x00,
14056 NULL, HFILL }
14058 { &hf_gsm_a_rr_qsearch_p_eutran,
14059 { "Qsearch_P_E-UTRAN", "gsm_a.rr.qsearch_p_eutran",
14060 FT_UINT8, BASE_DEC, NULL, 0x00,
14061 NULL, HFILL }
14063 { &hf_gsm_a_rr_serving_cell_priority_param_geran_priority,
14064 { "GERAN_PRIORITY", "gsm_a.rr.serving_cell_priority_param_geran_priority",
14065 FT_UINT8, BASE_DEC, NULL, 0x00,
14066 NULL, HFILL }
14068 { &hf_gsm_a_rr_serving_cell_priority_param_thresh_prio_search,
14069 { "THRESH_Priority_Search", "gsm_a.rr.serving_cell_priority_param_thresh_prio_search",
14070 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_serving_cell_thresh_priority_search), 0x00,
14071 NULL, HFILL }
14073 { &hf_gsm_a_rr_serving_cell_priority_param_thresh_gsm_low,
14074 { "THRESH_GSM_low", "gsm_a.rr.serving_cell_priority_param_thresh_gsm_low",
14075 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_serving_cell_thresh_gsm_low), 0x00,
14076 NULL, HFILL }
14078 { &hf_gsm_a_rr_serving_cell_priority_param_h_prio,
14079 { "H_PRIO", "gsm_a.rr.serving_cell_priority_param_h_prio",
14080 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_serving_cell_priority_param_h_prio), 0x00,
14081 NULL, HFILL }
14083 { &hf_gsm_a_rr_serving_cell_priority_param_t_reselection,
14084 { "T_Reselection", "gsm_a.rr.serving_cell_priority_param_t_reselection",
14085 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_serving_cell_priority_param_t_reselection), 0x00,
14086 NULL, HFILL }
14088 { &hf_gsm_a_rr_eutran_earfcn,
14089 { "EARFCN", "gsm_a.rr.earfcn",
14090 FT_UINT16, BASE_DEC, NULL, 0x00,
14091 NULL, HFILL }
14093 { &hf_gsm_a_rr_eutran_measurement_bandwidth,
14094 { "Measurement Bandwidth", "gsm_a.rr.eutran_measurement_bandwidth",
14095 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_eutran_measurement_bandwidth), 0x00,
14096 NULL, HFILL }
14098 { &hf_gsm_a_rr_eutran_priority,
14099 { "E-UTRAN_PRIORITY", "gsm_a.rr.eutran_priority",
14100 FT_UINT8, BASE_DEC, NULL, 0x00,
14101 NULL, HFILL }
14103 { &hf_gsm_a_rr_thresh_eutran_high,
14104 { "THRESH_EUTRAN_high", "gsm_a.rr.thresh_eutran_high",
14105 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_thresh_utran_eutran_high_low), 0x00,
14106 NULL, HFILL }
14108 { &hf_gsm_a_rr_thresh_eutran_low,
14109 { "THRESH_EUTRAN_low", "gsm_a.rr.thresh_eutran_low",
14110 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_thresh_utran_eutran_high_low), 0x00,
14111 NULL, HFILL }
14113 { &hf_gsm_a_rr_eutran_qrxlevmin,
14114 { "E-UTRAN_QRXLEVMIN", "gsm_a.rr.eutran_qrxlevmin",
14115 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_eutran_qrxlevmin), 0x00,
14116 NULL, HFILL }
14118 { &hf_gsm_a_rr_eutran_pcid,
14119 { "PCID", "gsm_a.rr.pcid",
14120 FT_UINT16, BASE_DEC, NULL, 0x00,
14121 NULL, HFILL }
14123 { &hf_gsm_a_rr_eutran_pcid_bitmap_group,
14124 { "PCID_BITMAP_GROUP", "gsm_a.rr.pcid_bitmap_group",
14125 FT_UINT8, BASE_DEC, NULL, 0x00,
14126 NULL, HFILL }
14128 { &hf_gsm_a_rr_eutran_pcid_pattern_length,
14129 { "PCID_Pattern_length", "gsm_a.rr.pcid_pattern_length",
14130 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_pcid_psc_pattern_length), 0x00,
14131 NULL, HFILL }
14133 #if 0
14134 { &hf_gsm_a_rr_eutran_pcid_pattern,
14135 { "PCID_Pattern", "gsm_a.rr.pcid_pattern",
14136 FT_UINT8, BASE_DEC, NULL, 0x00,
14137 NULL, HFILL }
14139 #endif
14140 { &hf_gsm_a_rr_eutran_pcid_pattern_sense,
14141 { "PCID_pattern_sense", "gsm_a.rr.pcid_pattern_sense",
14142 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_pcid_pattern_sense), 0x00,
14143 NULL, HFILL }
14145 { &hf_gsm_a_rr_eutran_frequency_index,
14146 { "E-UTRAN_FREQUENCY_INDEX", "gsm_a.rr.eutran_frequency_index",
14147 FT_UINT8, BASE_DEC, NULL, 0x00,
14148 NULL, HFILL }
14150 { &hf_gsm_a_rr_psc,
14151 { "PSC", "gsm_a.rr.psc",
14152 FT_UINT16, BASE_DEC, NULL, 0x00,
14153 NULL, HFILL }
14155 { &hf_gsm_a_rr_utran_psc_pattern_length,
14156 { "PSC_Pattern_length", "gsm_a.rr.psc_pattern_length",
14157 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_pcid_psc_pattern_length), 0x00,
14158 NULL, HFILL }
14160 { &hf_gsm_a_rr_utran_psc_pattern_sense,
14161 { "PSC_pattern_sense", "gsm_a.rr.psc_pattern_sense",
14162 FT_BOOLEAN, BASE_NONE, NULL, 0x00,
14163 NULL, HFILL }
14165 { &hf_gsm_a_rr_utran_csg_fdd_uarfcn,
14166 { "CSG FDD UARFCN", "gsm_a.rr.utran_csg_fdd_uarfcn",
14167 FT_UINT16, BASE_DEC, NULL, 0x0,
14168 NULL, HFILL }
14170 { &hf_gsm_a_rr_utran_csg_tdd_uarfcn,
14171 { "CSG TDD UARFCN", "gsm_a.rr.utran_csg_tdd_uarfcn",
14172 FT_UINT16, BASE_DEC, NULL, 0x0,
14173 NULL, HFILL }
14175 { &hf_gsm_a_rr_csg_earfcn,
14176 { "CSG_EARFCN", "gsm_a.rr.csg_earfcn",
14177 FT_UINT16, BASE_DEC, NULL, 0x00,
14178 NULL, HFILL }
14180 { &hf_gsm_a_rr_3g_control_param_desc_meas_ctrl_utran,
14181 { "PCID_pattern_sense", "gsm_a.rr.meas_ctrl_utran",
14182 FT_BOOLEAN, BASE_NONE, TFS(&measurement_control_utran), 0x00,
14183 NULL, HFILL }
14185 { &hf_gsm_a_rr_extended_ra,
14186 { "Extended_RA", "gsm_a.rr.extended_ra",
14187 FT_UINT8, BASE_DEC, NULL, 0x00,
14188 NULL, HFILL }
14190 { &hf_gsm_a_rr_access_tech_type,
14191 { "Access_Technology_Type", "gsm_a.rr.access_tech_type",
14192 FT_UINT8, BASE_DEC, VALS(gsm_a_access_tech_type_vals), 0x00,
14193 NULL, HFILL }
14195 { &hf_gsm_a_rr_tfi_assignment,
14196 { "TFI_Assignment", "gsm_a.rr.tfi_assignment",
14197 FT_UINT8, BASE_DEC, NULL, 0x00,
14198 NULL, HFILL }
14200 { &hf_gsm_a_rr_polling,
14201 { "Polling", "gsm_a.rr.polling",
14202 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_polling_vals), 0x00,
14203 NULL, HFILL }
14205 { &hf_gsm_a_rr_usf,
14206 { "USF", "gsm_a.rr.usf",
14207 FT_UINT8, BASE_DEC, NULL, 0x00,
14208 NULL, HFILL }
14210 { &hf_gsm_a_rr_usf_granularity,
14211 { "USF_granularity", "gsm_a.rr.usf_granularity",
14212 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_usf_granularity_vals), 0x00,
14213 NULL, HFILL }
14215 { &hf_gsm_a_rr_p0,
14216 { "P0", "gsm_a.rr.p0",
14217 FT_UINT8, BASE_DEC, NULL, 0x00,
14218 NULL, HFILL }
14220 { &hf_gsm_a_rr_pr_mode,
14221 { "pr_mode", "gsm_a.rr.pr_mode",
14222 FT_BOOLEAN, BASE_NONE, NULL, 0x00,
14223 NULL, HFILL }
14225 { &hf_gsm_a_rr_egprs_mcs,
14226 { "Egprs_Modulation_and_Coding_Scheme", "gsm_a.rr.egprs_mcs",
14227 FT_UINT8, BASE_DEC, VALS(gsm_a_egprs_mcs_vals), 0x00,
14228 NULL, HFILL }
14230 { &hf_gsm_a_rr_tlli_block_channel_coding,
14231 { "TLLI_Block_Channel_Coding", "gsm_a.rr.tlli_block_cs",
14232 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_tlli_block_channel_coding_vals), 0x00,
14233 NULL, HFILL }
14235 { &hf_gsm_a_rr_bep_period2,
14236 { "Bep_Period2", "gsm_a.rr.bep_period2",
14237 FT_UINT8, BASE_DEC, NULL, 0x00,
14238 NULL, HFILL }
14240 { &hf_gsm_a_rr_resegment,
14241 { "Resegment", "gsm_a.rr.resegment",
14242 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_resegment_vals), 0x00,
14243 NULL, HFILL }
14245 { &hf_gsm_a_rr_egprs_window_size,
14246 { "Egprs_Windows_Size", "gsm_a.rr.egprs_win_size",
14247 FT_UINT8, BASE_DEC, VALS(gsm_a_egprs_windows_size_vals), 0x00,
14248 NULL, HFILL }
14250 { &hf_gsm_a_rr_gamma,
14251 { "Gamma", "gsm_a.rr.gamma",
14252 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_gamma_vals), 0x00,
14253 NULL, HFILL }
14255 { &hf_gsm_a_rr_timing_adv_index,
14256 { "Timing_Advance_Index", "gsm_a.rr.timing_adv_idx",
14257 FT_UINT8, BASE_DEC, NULL, 0x00,
14258 NULL, HFILL }
14260 { &hf_gsm_a_rr_tbf_starting_time,
14261 { "TBF_Starting_Time", "gsm_a.rr.tvf_start_time",
14262 FT_UINT16, BASE_DEC, NULL, 0x00,
14263 NULL, HFILL }
14265 { &hf_gsm_a_rr_num_of_radio_block_allocated,
14266 { "Number_of_Radio_Block_Allocated", "gsm_a.rr.num_of_radio_blk_allocated",
14267 FT_UINT8, BASE_DEC, NULL, 0x00,
14268 NULL, HFILL }
14270 { &hf_gsm_a_rr_pfi,
14271 { "PFI", "gsm_a.rr.pfi",
14272 FT_UINT8, BASE_DEC, NULL, 0x00,
14273 NULL, HFILL }
14275 { &hf_gsm_a_rr_mbms_service_id,
14276 { "MBMS_Service_ID", "gsm_a.rr.mbms_service_id",
14277 FT_UINT32, BASE_DEC, NULL, 0x00,
14278 NULL, HFILL }
14280 { &hf_gsm_a_rr_ms_id,
14281 { "MS_ID", "gsm_a.rr.ms_id",
14282 FT_UINT8, BASE_DEC, NULL, 0x00,
14283 NULL, HFILL }
14285 { &hf_gsm_a_rr_timing_adv_timeslot_num,
14286 { "Timing_Advance_Timeslot_Number", "gsm_a.rr.timing_adv_ts",
14287 FT_UINT8, BASE_DEC, NULL, 0x00,
14288 NULL, HFILL }
14290 { &hf_gsm_a_rr_gprs_cs,
14291 { "Channel_Coding_Command", "gsm_a.rr.gprs_cs",
14292 FT_UINT8, BASE_DEC, VALS(gsm_a_gprs_cs_vals), 0x00,
14293 NULL, HFILL }
14295 { &hf_gsm_a_rr_rlc_mode,
14296 { "RLC_Mode", "gsm_a.rr.rlc_mode",
14297 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rlc_mode_vals), 0x00,
14298 NULL, HFILL }
14300 { &hf_gsm_a_rr_ta_valid,
14301 { "TA_Valid", "gsm_a.rr.ta_valid",
14302 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_ta_valid_vals), 0x00,
14303 NULL, HFILL }
14305 { &hf_gsm_a_rr_link_quality_meas_mode,
14306 { "Link_Quality_Measure_Mode", "gsm_a.rr.link_qual_meas_mode",
14307 FT_UINT8, BASE_DEC, VALS(gsm_a_link_quality_meas_mode_vals), 0x00,
14308 NULL, HFILL }
14310 { &hf_gsm_a_rr_emr_bitmap_length,
14311 { "BITMAP_LENGTH", "gsm_a.rr.emr_bitmap_len",
14312 FT_UINT8, BASE_DEC, NULL, 0x00,
14313 NULL, HFILL }
14315 { &hf_gsm_a_rr_eutran_mr_n_eutran,
14316 { "N_E-UTRAN", "gsm_a.rr.eutran_mr_n_eutran",
14317 FT_UINT8, BASE_DEC, NULL, 0x00,
14318 NULL, HFILL }
14320 { &hf_gsm_a_rr_eutran_mr_freq_idx,
14321 { "E-UTRAN_FREQUENCY_INDEX", "gsm_a.rr.eutran_mr_freq_idx",
14322 FT_UINT8, BASE_DEC, NULL, 0x00,
14323 NULL, HFILL }
14325 { &hf_gsm_a_rr_eutran_mr_cell_id,
14326 { "CELL IDENTITY", "gsm_a.rr.eutran_mr_cell_id",
14327 FT_UINT16, BASE_DEC, NULL, 0x00,
14328 NULL, HFILL }
14330 { &hf_gsm_a_rr_eutran_mr_rpt_quantity,
14331 { "REPORTING_QUANTITY", "gsm_a.rr.eutran_mr_rpt_quantity",
14332 FT_UINT8, BASE_DEC, NULL, 0x00,
14333 NULL, HFILL }
14335 { &hf_gsm_a_rr_ma_channel_set,
14336 { "Channel Set", "gsm_a.rr.ma_channel_set",
14337 FT_UINT8, BASE_HEX, NULL, 0x00,
14338 NULL, HFILL }
14340 { &hf_n_range_orig_arfcn,
14341 { "ORIG-ARFCN", "gsm_a.rr.orig_arfcn",
14342 FT_UINT16, BASE_DEC, NULL, 0x00,
14343 NULL, HFILL }
14345 { &hf_gsm_a_rr_peo_bcch_change_mark,
14346 { "PEO BCCH CHANGE MARK", "gsm_a.rr.peo_bcch_change_mark",
14347 FT_UINT8, BASE_DEC, NULL, 0x00,
14348 NULL, HFILL }
14350 { &hf_gsm_a_rr_feat_ind_cs_ir,
14351 { "CS IR","gsm_a.rr.feature_indicator.cs_ir",
14352 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_feat_ind_cs_ir), 0x00,
14353 NULL, HFILL }
14355 { &hf_gsm_a_rr_feat_ind_ps_ir,
14356 { "PS IR","gsm_a.rr.feature_indicator.ps_ir",
14357 FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_feat_ind_ps_ir), 0x00,
14358 NULL, HFILL }
14360 /* ---> EC <---*/
14361 { &hf_gsm_a_rr_ec_qhfi,
14362 { "QUARTER_HYPERFRAME_INDICATOR", "gsm_a.rr.ec_quarter_hyperframe_indicator",
14363 FT_UINT8, BASE_DEC, NULL, 0x00,
14364 NULL, HFILL }
14366 { &hf_gsm_a_rr_ec_dl_cc,
14367 { "DL_COVERAGE_CLASS", "gsm_a.rr.ec_dl_cc",
14368 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_ec_cc_vals), 0x00,
14369 NULL, HFILL }
14371 { &hf_gsm_a_rr_ec_ul_cc,
14372 { "UL_COVERAGE_CLASS", "gsm_a.rr.ec_ul_cc",
14373 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_ec_cc_vals), 0x00,
14374 NULL, HFILL }
14376 { &hf_gsm_a_rr_tsc_set,
14377 { "TSC Set", "gsm_a.rr.tsc_set",
14378 FT_UINT8, BASE_DEC, NULL, 0x00,
14379 NULL, HFILL }
14381 { &hf_gsm_a_rr_ec_tsc,
14382 { "TSC (EC)", "gsm_a.rr.ec_tsc",
14383 FT_UINT8, BASE_DEC, NULL, 0x00,
14384 NULL, HFILL }
14386 { &hf_gsm_a_rr_ec_ma_number,
14387 { "MA_NUMBER", "gsm_a.rr.ma_number",
14388 FT_UINT8, BASE_CUSTOM, CF_FUNC(gsm_a_rr_ec_ma_number_fmt), 0x00,
14389 NULL, HFILL }
14391 { &hf_gsm_a_rr_ec_enhanced_access_burst,
14392 { "ENHANCED_ACCESS_BURST", "gsm_a.rr.ec_enhanced_access_burst",
14393 FT_BOOLEAN, BASE_NONE, TFS(&tfs_shall_be_shall_not_be_used), 0x0,
14394 NULL, HFILL
14397 { &hf_gsm_a_rr_ec_starting_ul_timeslot,
14398 { "STARTING_UL_TIMESLOT", "gsm_a.rr.ec_starting_ul_timeslot",
14399 FT_UINT8, BASE_DEC, NULL, 0x0,
14400 NULL, HFILL
14403 { &hf_gsm_a_rr_ec_starting_dl_timeslot,
14404 { "STARTING_DL_TIMESLOT", "gsm_a.rr.ec_starting_dl_timeslot",
14405 FT_UINT8, BASE_DEC, NULL, 0x0,
14406 NULL, HFILL
14409 { &hf_gsm_a_rr_ec_starting_dl_timeslot_offset,
14410 { "STARTING_DL_TIMESLOT_OFFSET", "gsm_a.rr.ec_starting_dl_timeslot_offset",
14411 FT_UINT8, BASE_DEC, NULL, 0x0,
14412 NULL, HFILL
14415 { &hf_gsm_a_rr_ec_starting_ul_timeslot_offset,
14416 { "STARTING_UL_TIMESLOT_OFFSET", "gsm_a.rr.ec_starting_ul_timeslot_offset",
14417 FT_UINT8, BASE_DEC, NULL, 0x0,
14418 NULL, HFILL
14421 { &hf_gsm_a_rr_ec_overlaid_cdma_code,
14422 { "OVERLAID_CDMA_CODE", "gsm_a.rr.ec_overlaid_cdma_code",
14423 FT_UINT8, BASE_DEC, NULL, 0x0,
14424 NULL, HFILL
14427 { &hf_gsm_a_rr_ec_mcs_exist,
14428 { "MCS Exist (EC)", "gsm_a.rr.ec_mcs_exist",
14429 FT_UINT8, BASE_DEC, NULL, 0x0,
14430 NULL, HFILL
14433 { &hf_gsm_a_rr_ec_start_first_ul_data_block,
14434 { "START_FIRST_UL_DATA_BLOCK", "gsm_a.rr.ec_start_first_ul_data_block",
14435 FT_UINT8, BASE_DEC, NULL, 0x0,
14436 NULL, HFILL
14439 { &hf_gsm_a_rr_ec_fua_gap_list,
14440 { "FUA_GAP List", "gsm_a.rr.ec_fua_gap_list",
14441 FT_UINT8, BASE_DEC, NULL, 0x0,
14442 NULL, HFILL
14445 { &hf_gsm_a_rr_ec_start_fn_next_data_block_exist,
14446 { "START_FN_NEXT_DATA_BLOCK Present", "gsm_a.rr.ec_start_fn_next_data_block_exist",
14447 FT_UINT8, BASE_DEC, NULL, 0x0,
14448 NULL, HFILL
14451 { &hf_gsm_a_rr_ec_start_fn_next_data_block,
14452 { "START_FN_NEXT_DATA_BLOCK", "gsm_a.rr.ec_start_fn_next_data_block",
14453 FT_UINT8, BASE_DEC, NULL, 0x0,
14454 NULL, HFILL
14457 { &hf_gsm_a_dtap_msg_rr_ec_ccch_type,
14458 { "DTAP Radio Resources Management Message Type (EC)", "gsm_a.dtap.msg_rr_ec_ccch_type",
14459 FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_rr_ec_ccch_strings), 0x0,
14460 NULL, HFILL }
14463 { &hf_gsm_a_rr_ec_used_dl_cc,
14464 { "USED_DL_COVERAGE_CLASS", "gsm_a.rr.ec_used_dl_cc",
14465 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_ec_cc_vals), 0x0,
14466 NULL, HFILL
14469 { &hf_gsm_a_rr_ec_page_extension_exist,
14470 { "EC_PAGE_EXTENSION Exist", "gsm_a.rr.ec_page_extension_exist",
14471 FT_UINT8, BASE_DEC, NULL, 0x0,
14472 NULL, HFILL
14475 { &hf_gsm_a_rr_ec_page_extension,
14476 { "EC_PAGE_EXTENSION", "gsm_a.rr.ec_page_extension",
14477 FT_UINT8, BASE_DEC, NULL, 0x0,
14478 NULL, HFILL
14481 { &hf_gsm_a_rr_ec_last_tdma_frame,
14482 { "Last TDMA Frame", "gsm_a.rr.ec_last_tdma_frame",
14483 FT_UINT16, BASE_DEC, NULL, 0x0,
14484 NULL, HFILL
14487 { &hf_gsm_a_rr_ec_echoed_random_bits,
14488 { "Echoed Random Bits", "gsm_a.rr.ec_echoed_random_bits",
14489 FT_UINT8, BASE_DEC, NULL, 0x0,
14490 NULL, HFILL
14493 { &hf_gsm_a_rr_ec_wait_timer,
14494 { "EC-Wait Timer", "gsm_a.rr.ec_wait_timer",
14495 FT_UINT8, BASE_DEC, NULL, 0x0,
14496 NULL, HFILL
14499 { &hf_gsm_a_rr_ec_req_ref_2_present,
14500 { "EC Request Reference 2 Exist", "gsm_a.rr.ec_request_reference_2_exist",
14501 FT_UINT8, BASE_DEC, NULL, 0x0,
14502 NULL, HFILL
14505 { &hf_gsm_a_rr_ec_req_ref_3_present,
14506 { "EC Request Reference 3 Exist", "gsm_a.rr.ec_request_reference_3_exist",
14507 FT_UINT8, BASE_DEC, NULL, 0x0,
14508 NULL, HFILL
14511 { &hf_gsm_a_rr_ec_ptmsi_imsi_select,
14512 { "Mobile Identity", "gsm_a.rr.ec_ptmsi_imsi_select",
14513 FT_BOOLEAN, BASE_NONE, TFS(&tfs_ec_ptmsi_imsi), 0x0,
14514 NULL, HFILL
14517 { &hf_gsm_a_rr_ec_imsi_digits,
14518 { "Number of IMSI Digits", "gsm_a.rr.ec_imsi_digits",
14519 FT_UINT8, BASE_DEC, NULL, 0x0,
14520 NULL, HFILL
14523 { &hf_gsm_a_rr_ec_imsi,
14524 { "IMSI", "gsm_a.rr.ec_imsi",
14525 FT_STRING, BASE_NONE, NULL, 0x0,
14526 NULL, HFILL
14529 { &hf_gsm_a_rr_ec_mobile_identity_2_exist,
14530 { "EC Mobile Identity 2 Exist", "gsm_a.rr.ec_mobile_identity_2_exist",
14531 FT_UINT8, BASE_DEC, NULL, 0x0,
14532 NULL, HFILL
14535 { &hf_gsm_a_rr_ec_cc1_timeslot_multiplier,
14536 { "EC CC1 Timeslot Multiplier", "gsm_a.rr.ec_cc1_ts_multiplier",
14537 FT_UINT8, BASE_DEC, NULL, 0x0,
14538 NULL, HFILL
14541 { &hf_gsm_a_rr_ec_alpha_enable,
14542 { "EC ALPHA Enable", "gsm_a.rr.ec_alpha_enable",
14543 FT_UINT8, BASE_DEC, NULL, 0x0,
14544 NULL, HFILL
14547 { &hf_gsm_a_rr_rcc,
14548 { "RCC", "gsm_a.rr_rcc",
14549 FT_UINT8, BASE_DEC, NULL, 0x00,
14550 NULL, HFILL
14553 { &hf_gsm_a_rr_implicit_reject_cs,
14554 { "Implicit Reject CS", "gsm_a.rr.implicit_reject_cs",
14555 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_implicit_reject_cs_vals), 0x00,
14556 NULL, HFILL }
14558 { &hf_gsm_a_rr_implicit_reject_ps,
14559 { "Implicit Reject PS", "gsm_a.rr.implicit_reject_ps",
14560 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_implicit_reject_ps_vals), 0x00,
14561 NULL, HFILL }
14563 { &hf_gsm_a_rr_peo_dsc,
14564 { "PEO DSC", "gsm_a.rr.peo_dsc",
14565 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_peo_dsc_vals), 0x00,
14566 NULL, HFILL }
14568 { &hf_gsm_a_rr_c1_delta_min,
14569 { "C1 DELTA MIN value", "gsm_a.rr.c1_delta_min",
14570 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_c1_delta_min_vals), 0x00,
14571 NULL, HFILL }
14573 { &hf_gsm_a_rr_c1_delta_max,
14574 { "C1 DELTA MAX value", "gsm_a.rr.c1_delta_max",
14575 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_c1_delta_max_vals), 0x00,
14576 NULL, HFILL }
14578 { &hf_gsm_a_rr_reported_timeslots,
14579 { "REPORTED TIMESLOTS", "gsm_a.rr.reported_timeslots",
14580 FT_UINT8, BASE_DEC, NULL, 0x00,
14581 NULL, HFILL
14584 { &hf_gsm_a_rr_tsh,
14585 { "TSH", "gsm_a.rr.tsh",
14586 FT_UINT8, BASE_DEC, NULL, 0x00,
14587 NULL, HFILL
14590 { &hf_gsm_a_rr_rtti_usf_mode,
14591 { "RTTI USF Mode", "gsm_a.rr.rtti_usf_mode",
14592 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_rtti_usf_mode_vals), 0x00,
14593 NULL, HFILL
14596 { &hf_gsm_a_rr_pdch_pair_indic,
14597 { "PDCH PAIR INDICATION", "gsm_a.rr.pdch_pair_indic",
14598 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_pdch_pair_indic_vals), 0x00,
14599 NULL, HFILL
14602 { &hf_gsm_a_rr_additional_usf,
14603 { "Additional USF", "gsm_a.rr.additional_usf",
14604 FT_UINT8, BASE_DEC, NULL, 0x00,
14605 NULL, HFILL
14608 { &hf_gsm_a_rr_usf_2,
14609 { "USF2", "gsm_a.rr.usf_2",
14610 FT_UINT8, BASE_DEC, NULL, 0x00,
14611 NULL, HFILL
14614 { &hf_gsm_a_rr_additional_usf_2,
14615 { "Additional USF2", "gsm_a.rr.additional_usf_2",
14616 FT_UINT8, BASE_DEC, NULL, 0x00,
14617 NULL, HFILL
14620 { &hf_gsm_a_rr_npm_transfer_time,
14621 { "NPM Transfer Time", "gsm_a.rr.npm_transfer_time",
14622 FT_UINT8, BASE_DEC, NULL, 0x00,
14623 NULL, HFILL
14626 { &hf_gsm_a_rr_event_based_fanr,
14627 { "EVENT BASED FANR", "gsm_a.rr.event_base_fanr",
14628 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_event_based_fanr_vals), 0x00,
14629 NULL, HFILL
14632 { &hf_gsm_a_rr_dl_egprs_level,
14633 { "Downlink EGPRS Level", "gsm_a.rr.dl_egprs_level",
14634 FT_UINT8, BASE_DEC, VALS(gsm_a_rr_egprs_level_vals), 0x00,
14635 NULL, HFILL
14639 /* Generated from convert_proto_tree_add_text.pl */
14640 { &hf_gsm_a_rr_padding, { "Padding Bits", "gsm_a.rr.padding_bits", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
14641 { &hf_gsm_a_rr_nr_of_fdd_cells, { "Nr of FDD Cells", "gsm_a.rr.nr_of_fdd_cells", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
14642 { &hf_gsm_a_rr_scrambling_code, { "Scrambling Code", "gsm_a.rr.scrambling_code", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
14643 { &hf_gsm_a_rr_diversity, { "Diversity", "gsm_a.rr.diversity", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
14644 { &hf_gsm_a_rr_nr_of_tdd_cells, { "Nr of TDD Cells", "gsm_a.rr.nr_of_tdd_cells", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
14645 { &hf_gsm_a_rr_cell_parameter, { "Cell Parameter", "gsm_a.rr.cell_parameter", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
14646 { &hf_gsm_a_rr_sync_case_tstd, { "Sync Case TSTD", "gsm_a.rr.sync_case_tstd", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
14647 { &hf_gsm_a_rr_diversity_tdd, { "Diversity TDD", "gsm_a.rr.diversity_tdd", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
14648 { &hf_gsm_a_rr_packet_channel_type, { "Channel Type", "gsm_a.rr.packet_channel_type", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
14649 { &hf_gsm_a_rr_timeslot, { "Timeslot", "gsm_a.rr.timeslot", FT_UINT8, BASE_DEC, NULL, 0x07, NULL, HFILL }},
14650 { &hf_gsm_a_rr_training_sequence, { "Training Sequence", "gsm_a.rr.training_sequence", FT_UINT8, BASE_DEC, NULL, 0xE0, NULL, HFILL }},
14651 { &hf_gsm_a_rr_hopping_channel, { "Hopping Channel", "gsm_a.rr.hopping_channel", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x10, NULL, HFILL }},
14652 { &hf_gsm_a_rr_hopping_channel_maio, { "Hopping channel MAIO", "gsm_a.rr.hopping_channel_maio", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
14653 { &hf_gsm_a_rr_hopping_channel_ma_num_ind, { "Hopping channel MA_NUMBER_IND", "gsm_a.rr.hopping_channel_ma_num_ind", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
14654 { &hf_gsm_a_rr_hopping_channel_change_mark_1, { "CHANGE_MARK_1", "gsm_a.rr.hopping_channel_change_mark_1", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
14655 { &hf_gsm_a_rr_extension_length, { "Extension Length", "gsm_a.rr.extension_length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
14656 { &hf_gsm_a_rr_bitmap_length, { "Bitmap length", "gsm_a.rr.bitmap_length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
14657 { &hf_gsm_a_rr_bitmap, { "Bitmap", "gsm_a.rr.bitmap", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
14658 { &hf_gsm_a_rr_mobile_country_code, { "Mobile Country Code (MCC)", "gsm_a.rr.mobile_country_code", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
14659 { &hf_gsm_a_rr_mobile_network_code, { "Mobile Network Code (MNC)", "gsm_a.rr.mobile_network_code", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
14660 { &hf_gsm_a_rr_len_indicator_ms_id, { "Length Indicator of MS ID", "gsm_a.rr.len_indicator_ms_id", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
14661 { &hf_gsm_a_rr_maio, { "MAIO", "gsm_a.rr.maio", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
14662 { &hf_gsm_a_rr_ba_index_start_rtd, { "BA Index Start RTD", "gsm_a.rr.ba_index_start_rtd", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
14663 { &hf_gsm_a_rr_ba_index_start_bsic, { "BA Index Start BSIC", "gsm_a.rr.ba_index_start_bsic", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
14664 { &hf_gsm_a_rr_number_remaining_bsic, { "Number Remaining BSIC", "gsm_a.rr.number_remaining_bsic", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
14665 { &hf_gsm_a_rr_number_cells, { "Number Cells", "gsm_a.rr.number_cells", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
14666 { &hf_gsm_a_rr_pcid_pattern, { "PCID_Pattern", "gsm_a.rr.pcid_pattern", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
14667 { &hf_gsm_a_rr_psc_pattern, { "PSC_Pattern", "gsm_a.rr.psc_pattern", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
14668 { &hf_gsm_a_rr_where, { "Where", "gsm_a.rr.where", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
14669 { &hf_gsm_a_rr_mcc, { "MCC", "gsm_a.rr.mcc", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
14670 { &hf_gsm_a_rr_mnc, { "MNC", "gsm_a.rr.mnc", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
14671 { &hf_gsm_a_rr_short_lsa_id, { "Short LSA ID", "gsm_a.rr.short_lsa_id", FT_UINT24, BASE_DEC, NULL, 0x0, NULL, HFILL }},
14672 { &hf_gsm_a_rr_lsa_id, { "LSA ID", "gsm_a.rr.lsa_id", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
14673 { &hf_gsm_a_rr_rxlev_carrier, { "RXLEV carrier", "gsm_a.rr.rxlev_carrier", FT_UINT8, BASE_DEC|BASE_EXT_STRING, &gsm_a_rr_rxlev_vals_ext, 0x0, NULL, HFILL }},
14674 { &hf_gsm_a_rr_ciphering_key_seq_num, { "Ciphering Key Sequence Number", "gsm_a.rr.ciphering_key_seq_num", FT_UINT8, BASE_DEC, NULL, 0x07, NULL, HFILL }},
14675 { &hf_gsm_a_rr_neighbour_cell_list_index, { "Neighbour Cell List index", "gsm_a.rr.neighbour_cell_list_index", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
14676 { &hf_gsm_a_rr_message_elements, { "Message Elements", "gsm_a.rr.message_elements", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
14677 { &hf_gsm_a_rr_spare, { "Spare", "gsm_a.rr.spare", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
14678 { &hf_gsm_a_rr_single_channel_arfcn, { "Single channel ARFCN", "gsm_a.rr.single_channel_arfcn", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
14679 { &hf_gsm_a_rr_rtd_index, { "RTD index", "gsm_a.rr.rtd_index", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
14680 { &hf_gsm_a_rr_arfcn_list, { "List of ARFCNs", "gsm_a.rr.arfcn_list", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
14681 { &hf_gsm_a_rr_da_list, { "List of DA", "gsm_a.rr.da_list", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
14682 { &hf_gsm_a_rr_ua_list, { "List of UA", "gsm_a.rr.ua_list", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
14683 { &hf_gsm_a_rr_ma_bitmap, { "MA Bitmap", "gsm_a.rr.ma_bitmap", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
14684 { &hf_gsm_a_rr_inc_arfcn_bitmap, { "Bitmap of increasing ARFCNs included in the Mobile Allocation", "gsm_a.rr.inc_arfcn_bitmap", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
14685 { &hf_gsm_a_rr_ccn_supported, { "CCN Supported", "gsm_a.rr.ccn_supported", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
14686 { &hf_gsm_a_rr_pbcch_use_bcch, { "PBCCH shall use the BCCH carrier", "gsm_a.rr.pbcch_use_bcch", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
14687 { &hf_gsm_a_rr_ia_rest_oct_reserved, { "Reserved for future use (however the value 7C for the first octet shall not be used)", "gsm_a.rr.ia_rest_oct_reserved", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
14688 { &hf_gsm_a_rr_tch_facch_sacchm, { "TCH/F + FACCH/F and SACCH/M", "gsm_a.rr.tch_facch_sacchm", FT_UINT8, BASE_DEC, NULL, 0xF8, NULL, HFILL }},
14689 { &hf_gsm_a_rr_tch_facch_sacchf, { "TCH/F + FACCH/F and SACCH/F", "gsm_a.rr.tch_facch_sacchf", FT_UINT8, BASE_DEC, NULL, 0xF8, NULL, HFILL }},
14690 { &hf_gsm_a_rr_tch_facch_sacchm_bi, { "TCH/F + FACCH/F and SACCH/M + bi- and unidirectional channels", "gsm_a.rr.tch_facch_sacchm_bi", FT_UINT8, BASE_DEC, NULL, 0xF8, NULL, HFILL }},
14691 { &hf_gsm_a_rr_tch_acch, { "TCH/H + ACCHs", "gsm_a.rr.tch_acch", FT_UINT8, BASE_DEC, NULL, 0xF8, NULL, HFILL }},
14692 { &hf_gsm_a_rr_sdcch4_sdcchc4_cbch, { "SDCCH/4 + SACCH/C4 or CBCH (SDCCH/4)", "gsm_a.rr.sdcch4_sdcchc4_cbch", FT_UINT8, BASE_DEC, NULL, 0xF8, NULL, HFILL }},
14693 { &hf_gsm_a_rr_sdcch8_sdcchc8_cbch, { "SDCCH/8 + SACCH/C8 or CBCH (SDCCH/8)", "gsm_a.rr.sdcch8_sdcchc8_cbch", FT_UINT8, BASE_DEC, NULL, 0xF8, NULL, HFILL }},
14694 { &hf_gsm_a_rr_tch_facchf_sacchm_bi, { "TCH/F + FACCH/F and SACCH/M + bidirectional channels at timeslot", "gsm_a.rr.tch_facchf_sacchm_bi", FT_UINT8, BASE_DEC, NULL, 0xF8, NULL, HFILL }},
14695 { &hf_gsm_a_rr_tch_facchf_sacchm_uni, { "TCH/F + FACCH/F and SACCH/M + unidirectional channels at timeslot", "gsm_a.rr.tch_facchf_sacchm_uni", FT_UINT8, BASE_DEC, NULL, 0xF8, NULL, HFILL }},
14696 { &hf_gsm_a_rr_unknown_channel_info, { "Unknown channel information", "gsm_a.rr.unknown_channel_info", FT_UINT8, BASE_DEC, NULL, 0xF8, NULL, HFILL }},
14697 { &hf_gsm_a_rr_tchf_acchs, { "TCH/F + ACCHs", "gsm_a.rr.tchf_acchs", FT_UINT8, BASE_DEC, NULL, 0xF8, NULL, HFILL }},
14698 { &hf_gsm_a_rr_subchannel, { "Subchannel", "gsm_a.rr.tch_facch_sacchm", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
14699 { &hf_gsm_a_rr_w_elements, { "W elements", "gsm_a.rr.w_elements", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
14700 { &hf_gsm_a_rr_field_bit_long, { "Field is X bits long", "gsm_a.rr.field_bit_long", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
14702 /* gsm_rr_csn_flag() fields */
14703 { &hf_gsm_a_rr_fdd_repeat_freq, { "Repeating FDD Frequency", "gsm_a.rr.fdd_repeat_freq", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14704 { &hf_gsm_a_rr_tdd_repeat_freq, { "Repeating TDD Frequency", "gsm_a.rr.tdd_repeat_freq", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14705 { &hf_gsm_a_rr_repeat_range_limit, { "Repeating Range Limits", "gsm_a.rr.repeat_range_limit", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14706 { &hf_gsm_a_rr_repeat_ba_frequency, { "Repeating BA Frequency", "gsm_a.rr.repeat_ba_frequency", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14707 { &hf_gsm_a_rr_band_indicator, { "Band Indicator", "gsm_a.rr.band_indicator", FT_BOOLEAN, BASE_NONE, TFS(&tfs_1900_1800), 0x00, NULL, HFILL }},
14708 { &hf_gsm_a_rr_repeat_gsm_desc, { "Repeating GSM Description struct", "gsm_a.rr.repeat_gsm_desc", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14709 { &hf_gsm_a_rr_repeat_utran_fdd_desc, { "Repeating UTRAN FDD Description struct", "gsm_a.rr.repeat_utran_fdd_desc", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14710 { &hf_gsm_a_rr_bandwidth_fdd_present, { "Bandwidth FDD", "gsm_a.rr.bandwidth_fdd_present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14711 { &hf_gsm_a_rr_fdd_cell_info_present, { "FDD Cell Information", "gsm_a.rr.fdd_cell_info_present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14712 { &hf_gsm_a_rr_fdd_indic0, { "FDD Indic0", "gsm_a.rr.fdd_indic0", FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL }},
14713 { &hf_gsm_a_rr_repeat_utran_tdd_desc, { "Repeating UTRAN TDD Description struct", "gsm_a.rr.repeat_utran_tdd_desc", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14714 { &hf_gsm_a_rr_bandwidth_tdd_present, { "Bandwidth TDD", "gsm_a.rr.bandwidth_tdd_present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14715 { &hf_gsm_a_rr_tdd_cell_info_present, { "TDD Cell Information", "gsm_a.rr.tdd_cell_info_present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14716 { &hf_gsm_a_rr_tdd_indic0, { "TDD Indic0", "gsm_a.rr.tdd_indic0", FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL }},
14717 { &hf_gsm_a_rr_pfi_present, { "PFI", "gsm_a.rr.pfi_present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported_by_cell), 0x00, NULL, HFILL }},
14718 { &hf_gsm_a_rr_msms_procedures, { "MBMS procedures", "gsm_a.rr.msms_procedures", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14719 { &hf_gsm_a_rr_repeat_dynamic_arfcn_mapping, { "Repeating Dynamic ARFCN Mapping", "gsm_a.rr.repeat_dynamic_arfcn_mapping", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14720 { &hf_gsm_a_rr_pan_bits_present, { "PAN bits", "gsm_a.rr.pan_bits_present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14721 { &hf_gsm_a_rr_optional_extensions_present, { "Optional Extensions", "gsm_a.rr.optional_extensions_present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14722 { &hf_gsm_a_rr_egprs_supported, { "EGPRS", "gsm_a.rr.egprs_supported", FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported_by_cell), 0x00, NULL, HFILL }},
14723 { &hf_gsm_a_rr_access_tech_req, { "Access Technologies Request", "gsm_a.rr.access_tech_req", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14724 { &hf_gsm_a_rr_tfi_multiblock, { "TFI/Multiblock", "gsm_a.rr.tfi_multiblock", FT_BOOLEAN, BASE_NONE, TFS(&tfs_tfi_multi_block_allocation_present), 0x00, NULL, HFILL }},
14725 { &hf_gsm_a_rr_tfi_allocation_type, { "Allocation Type", "gsm_a.rr.tfi_allocation_type", FT_BOOLEAN, BASE_NONE, TFS(&tfs_fixed_dynamic_allocation), 0x00, NULL, HFILL }},
14726 { &hf_gsm_a_rr_p0_present, { "P0", "gsm_a.rr.p0_present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14727 { &hf_gsm_a_rr_bep_period2_present, { "BEP_PERIOD2", "gsm_a.rr.bep_period2.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14728 { &hf_gsm_a_rr_alpha_present, { "Alpha", "gsm_a.rr.alpha_present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14729 { &hf_gsm_a_rr_timing_adv_index_present, { "Timing Advance Index", "gsm_a.rr.timing_adv_index.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14730 { &hf_gsm_a_rr_tbf_starting_time_present, { "TBF Starting Time", "gsm_a.rr.tbf_starting_time.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14731 { &hf_gsm_a_rr_bts_power_control_mode, { "BTS Power Control Mode", "gsm_a.rr.bts_power_control_mode", FT_BOOLEAN, BASE_NONE, TFS(&tfs_mode_b_mode_a), 0x00, NULL, HFILL }},
14732 { &hf_gsm_a_rr_mcc_mnc_parameters, { "MCC and MNC Parameters", "gsm_a.rr.mcc_mnc_parameters", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14733 { &hf_gsm_a_rr_timing_adv_present, { "Timing Advance Value", "gsm_a.rr.timing_adv.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14734 { &hf_gsm_a_rr_timing_advance_index_timeslot, { "Timing Advance Index and Timeslot", "gsm_a.rr.timing_advance_index_timeslot", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14735 { &hf_gsm_a_rr_packet_downlink_assignment, { "Packet Downlink Assignment", "gsm_a.rr.packet_downlink_assignment", FT_BOOLEAN, BASE_NONE, TFS(&tfs_downlink_assignment), 0x00, NULL, HFILL }},
14736 { &hf_gsm_a_rr_mbms_assignment, { "MBMS Assignment", "gsm_a.rr.mbms_assignment", FT_BOOLEAN, BASE_NONE, TFS(&tfs_non_distribution_distribution), 0x00, NULL, HFILL }},
14737 { &hf_gsm_a_rr_ms_parameters, { "MS Parameters", "gsm_a.rr.ms_parameters", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14738 { &hf_gsm_a_rr_gamma_present, { "Gamma", "gsm_a.rr.gamma.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14739 { &hf_gsm_a_rr_packet_uplink_assignment, { "Packet Uplink Assignment", "gsm_a.rr.packet_uplink_assignment", FT_BOOLEAN, BASE_NONE, TFS(&tfs_normal_single_block), 0x00, NULL, HFILL }},
14740 { &hf_gsm_a_rr_allocation_type, { "Allocation Type", "gsm_a.rr.allocation_type", FT_BOOLEAN, BASE_NONE, TFS(&tfs_fixed_dynamic_allocation), 0x00, NULL, HFILL }},
14741 { &hf_gsm_a_rr_timing_advance_index, { "Timing Advance Index", "gsm_a.rr.timing_advance_index", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14742 { &hf_gsm_a_rr_early_r97_version_reserved_bit, { "Bit reserved for earlier version of protocol", "gsm_a.rr.early_r97_version_reserved_bit", FT_BOOLEAN, BASE_NONE, TFS(&tfs_early_r97_version_later_than_r97_version), 0x00, NULL, HFILL }},
14743 { &hf_gsm_a_rr_later_r97_version_reserved_bit, { "Bit reserved for earlier version of protocol", "gsm_a.rr.later_r97_version_reserved_bit", FT_BOOLEAN, BASE_NONE, TFS(&tfs_later_than_r97_version_early_r97_version), 0x00, NULL, HFILL }},
14744 { &hf_gsm_a_rr_earlier_version_reserved_bit, { "Bit reserved for earlier version of protocol", "gsm_a.rr.earlier_version_reserved_bit", FT_BOOLEAN, BASE_NONE, TFS(&tfs_earlier_version_current_version), 0x00, NULL, HFILL }},
14745 { &hf_gsm_a_rr_extended_ra_present, { "Extended RA", "gsm_a.rr.extended_ra.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14746 { &hf_gsm_a_rr_tfi_assignment_present, { "TFI Assignment (etc)", "gsm_a.rr.tfi_assignment.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14747 { &hf_gsm_a_rr_pr_mode_present, { "BTS Power Control Mode", "gsm_a.rr.pr_mode.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_fixed_dynamic_allocation), 0x00, NULL, HFILL }},
14748 { &hf_gsm_a_rr_downlink_uplink_discriminator_bit, { "Discriminator bit", "gsm_a.rr.downlink_uplink_discriminator_bit", FT_BOOLEAN, BASE_NONE, TFS(&tfs_downlink_uplink_discriminator_bit), 0x00, NULL, HFILL }},
14749 { &hf_gsm_a_rr_downlink_uplink, { "Downlink/Uplink", "gsm_a.rr.downlink_uplink", FT_BOOLEAN, BASE_NONE, TFS(&tfs_downlink_uplink_assign), 0x00, NULL, HFILL }},
14750 { &hf_gsm_a_rr_second_packet_assignment_discriminator_bit, { "Discriminator Bit", "gsm_a.rr.second_packet_assignment_discriminator_bit", FT_BOOLEAN, BASE_NONE, TFS(&tfs_second_part_packet_assignment), 0x00, NULL, HFILL }},
14751 { &hf_gsm_a_rr_packet_discriminator_bit, { "Discriminator Bit", "gsm_a.rr.packet_discriminator_bit", FT_BOOLEAN, BASE_NONE, TFS(&tfs_packet_downlink_uplink_assignment), 0x00, NULL, HFILL }},
14752 { &hf_gsm_a_rr_compressed_inter_rat_handover_info, { "A compressed version of the INTER RAT HANDOVER INFO message", "gsm_a.rr.compressed_inter_rat_handover_info", FT_BOOLEAN, BASE_NONE, TFS(&tfs_shall_be_shall_not_be_used), 0x00, NULL, HFILL }},
14753 { &hf_gsm_a_rr_group_channel_description, { "Group Channel Description", "gsm_a.rr.group_channel_description", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14754 { &hf_gsm_a_rr_hopping_case, { "Hopping case", "gsm_a.rr.hopping_case", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14755 { &hf_gsm_a_rr_hopping_flag, { "Hopping flag", "gsm_a.rr.hopping_flag", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14756 { &hf_gsm_a_rr_utran_fdd_description, { "UTRAN FDD Description", "gsm_a.rr.utran_fdd_description", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14757 { &hf_gsm_a_rr_utran_fdd_description_earlier_version_bit_reserved1, { "Bit reserved for earlier version of protocol", "gsm_a.rr.utran_fdd_description_earlier_version_bit_reserved1", FT_BOOLEAN, BASE_NONE, TFS(&tfs_earlier_version_current_version), 0x00, NULL, HFILL }},
14758 { &hf_gsm_a_rr_utran_fdd_description_earlier_version_bit_reserved2, { "Bit reserved for earlier version of protocol", "gsm_a.rr.utran_fdd_description_earlier_version_bit_reserved2", FT_BOOLEAN, BASE_NONE, TFS(&tfs_current_version_earlier_version), 0x00, NULL, HFILL }},
14759 { &hf_gsm_a_rr_utran_tdd_description, { "UTRAN TDD Description", "gsm_a.rr.utran_tdd_description", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14760 { &hf_gsm_a_rr_utran_tdd_description_earlier_version_bit_reserved1, { "Bit reserved for earlier version of protocol", "gsm_a.rr.utran_tdd_description_earlier_version_bit_reserved1", FT_BOOLEAN, BASE_NONE, TFS(&tfs_earlier_version_current_version), 0x00, NULL, HFILL }},
14761 { &hf_gsm_a_rr_utran_tdd_description_earlier_version_bit_reserved2, { "Bit reserved for earlier version of protocol", "gsm_a.rr.utran_tdd_description_earlier_version_bit_reserved2", FT_BOOLEAN, BASE_NONE, TFS(&tfs_current_version_earlier_version), 0x00, NULL, HFILL }},
14762 { &hf_gsm_a_rr_3g_measurement_parameters_description, { "3G Measurement Parameters Description", "gsm_a.rr.3g_measurement_parameters_description", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14763 { &hf_gsm_a_rr_fdd_parameters, { "FDD Parameters", "gsm_a.rr.fdd_parameters", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14764 { &hf_gsm_a_rr_tdd_parameters, { "TDD Parameters", "gsm_a.rr.tdd_parameters", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14765 { &hf_gsm_a_rr_3g_additional_measurement_parameters_description, { "3G Additional Measurement Parameters Description", "gsm_a.rr.3g_additional_measurement_parameters_description", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14766 { &hf_gsm_a_rr_repeated_umts_fdd_neighbour_cells, { "Repeated UMTS FDD Neighbour Cells", "gsm_a.rr.repeated_umts_fdd_neighbour_cells", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14767 { &hf_gsm_a_rr_repeated_umts_fdd_neighbour_cells_earlier_version_bit_reserved, { "Bit reserved for earlier version of protocol", "gsm_a.rr.repeated_umts_fdd_neighbour_cells_earlier_version_bit_reserved", FT_BOOLEAN, BASE_NONE, TFS(&tfs_earlier_version_current_version), 0x00, NULL, HFILL }},
14768 { &hf_gsm_a_rr_fdd_cell_info_param_value0, { "The FDD_CELL_INFORMATION parameter value '0000000000'", "gsm_a.rr.fdd_cell_info_param_value0", FT_BOOLEAN, BASE_NONE, TFS(&tfs_member_not_member_of_set), 0x00, NULL, HFILL }},
14769 { &hf_gsm_a_rr_repeated_umts_tdd_neighbour_cells, { "Repeated UMTS TDD Neighbour Cells", "gsm_a.rr.repeated_umts_tdd_neighbour_cells", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14770 { &hf_gsm_a_rr_repeated_umts_tdd_neighbour_cells_earlier_version_bit_reserved, { "Bit reserved for earlier version of protocol", "gsm_a.rr.repeated_umts_tdd_neighbour_cells_earlier_version_bit_reserved", FT_BOOLEAN, BASE_NONE, TFS(&tfs_earlier_version_current_version), 0x00, NULL, HFILL }},
14771 { &hf_gsm_a_rr_tdd_cell_info_param_value0, { "the TDD_CELL_INFORMATION parameter value '0000000000'", "gsm_a.rr.tdd_cell_info_param_value0", FT_BOOLEAN, BASE_NONE, TFS(&tfs_member_not_member_of_set), 0x00, NULL, HFILL }},
14772 { &hf_gsm_a_rr_rtd6, { "RTD6", "gsm_a.rr.rtd6", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14773 { &hf_gsm_a_rr_ba_index_start_rtd_present, { "BA Index Start RTD", "gsm_a.rr.ba_index_start_rtd.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14774 { &hf_gsm_a_rr_rtd, { "RTD", "gsm_a.rr.rtd", FT_BOOLEAN, BASE_NONE, TFS(&tfs_not_present_present), 0x00, NULL, HFILL }},
14775 { &hf_gsm_a_rr_additional_rtd, { "additional RTD", "gsm_a.rr.additional_rtd", FT_BOOLEAN, BASE_NONE, TFS(&tfs_not_present_present), 0x00, NULL, HFILL }},
14776 { &hf_gsm_a_rr_additional_rtd_struct, { "additional RTD struct", "gsm_a.rr.additional_rtd_struct", FT_BOOLEAN, BASE_NONE, TFS(&tfs_not_present_present), 0x00, NULL, HFILL }},
14777 { &hf_gsm_a_rr_rtd12, { "RTD12", "gsm_a.rr.rtd12", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14778 { &hf_gsm_a_rr_repeated_rtd, { "Repeated RTD", "gsm_a.rr.repeated_rtd", FT_BOOLEAN, BASE_NONE, TFS(&tfs_not_present_present), 0x00, NULL, HFILL }},
14779 { &hf_gsm_a_rr_repeated_rtd_frequency, { "Repeated RTD Frequency", "gsm_a.rr.repeated_rtd_frequency", FT_BOOLEAN, BASE_NONE, TFS(&tfs_not_present_present), 0x00, NULL, HFILL }},
14780 { &hf_gsm_a_rr_ba_index_start_bsic_present, { "BA Index Start BSIC", "gsm_a.rr.ba_index_start_bsic.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14781 { &hf_gsm_a_rr_multiband_reporting_present, { "Multiband Reporting", "gsm_a.rr.multiband_reporting.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14782 { &hf_gsm_a_rr_serving_reporting_present, { "Serving Reporting", "gsm_a.rr.serving_reporting.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14783 { &hf_gsm_a_rr_900_reporting_present, { "900 Reporting", "gsm_a.rr.900_reporting.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14784 { &hf_gsm_a_rr_1800_reporting_present, { "1800 Reporting", "gsm_a.rr.1800_reporting.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14785 { &hf_gsm_a_rr_400_reporting_present, { "400 Reporting", "gsm_a.rr.400_reporting.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14786 { &hf_gsm_a_rr_1900_reporting_present, { "1900 Reporting", "gsm_a.rr.1900_reporting.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14787 { &hf_gsm_a_rr_850_reporting_present, { "850 Reporting", "gsm_a.rr.850_reporting.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14788 { &hf_gsm_a_rr_fdd_reporting_threshold_2_present, { "FDD Reporting Threshold2", "gsm_a.rr.fdd_reporting_threshold_2.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14789 { &hf_gsm_a_rr_default_utran_priority_parameters, { "Default UTRAN Priority Parameters", "gsm_a.rr.default_utran_priority_parameters", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14790 { &hf_gsm_a_rr_repeated_utran_priority_parameters, { "Repeated UTRAN Priority Parameters", "gsm_a.rr.repeated_utran_priority_parameters", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14791 { &hf_gsm_a_rr_utran_frequency_index_present, { "UTRAN Frequency Index", "gsm_a.rr.utran_frequency_index.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14792 { &hf_gsm_a_rr_utran_priority_present, { "UTRAN Priority", "gsm_a.rr.utran_priority.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14793 { &hf_gsm_a_rr_thresh_utran_low_present, { "Threshold UTRAN Low", "gsm_a.rr.thresh_utran_low.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14794 { &hf_gsm_a_rr_utran_qrxlevmin_present, { "UTRAN Qrxlev Min", "gsm_a.rr.utran_qrxlevmin.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14795 { &hf_gsm_a_rr_eutran_earfcn_present, { "E-UTRAN Neighbour Cells Struct", "gsm_a.rr.eutran_earfcn.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14796 { &hf_gsm_a_rr_eutran_measurement_bandwidth_present, { "Measurement Bandwidth", "gsm_a.rr.eutran_measurement_bandwidth.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14797 { &hf_gsm_a_rr_eutran_priority_present, { "E-UTRAN Priority", "gsm_a.rr.eutran_priority.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14798 { &hf_gsm_a_rr_thresh_eutran_low_present, { "Threshold E-UTRAN Low", "gsm_a.rr.thresh_eutran_low.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14799 { &hf_gsm_a_rr_eutran_qrxlevmin_present, { "E-UTRAN Qrxlev Min", "gsm_a.rr.eutran_qrxlevmin.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14800 { &hf_gsm_a_rr_repeated_earfcn, { "Repeated EARFCN", "gsm_a.rr.repeated_earfcn", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14801 { &hf_gsm_a_rr_repeated_pcid, { "Repeated PCID", "gsm_a.rr.repeated_pcid", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14802 { &hf_gsm_a_rr_eutran_pcid_present, { "TARGET PCID", "gsm_a.rr.repeated_eutran_pcid_present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14803 { &hf_gsm_a_rr_eutran_pcid_bitmap_group_present, { "PCID Bitmap Group", "gsm_a.rr.eutran_pcid_bitmap_group.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14804 { &hf_gsm_a_rr_pcid_pattern_present, { "PCID Pattern", "gsm_a.rr.pcid_pattern.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14805 { &hf_gsm_a_rr_repeated_eutran_frequency_index, { "Repeated E-UTRAN Frequency Index", "gsm_a.rr.repeated_eutran_frequency_index", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14806 { &hf_gsm_a_rr_repeating_pcid_group, { "Repeating PCID group", "gsm_a.rr.repeating_pcid_group", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14807 { &hf_gsm_a_rr_eutran_reporting_quantity, { "E-UTRAN Reporting Quantity", "gsm_a.rr.eutran_reporting_quantity", FT_BOOLEAN, BASE_NONE, TFS(&tfs_rsrq_rsrp), 0x00, NULL, HFILL }},
14808 { &hf_gsm_a_rr_eutran_reporting, { "Reporting", "gsm_a.rr.eutran_reporting", FT_BOOLEAN, BASE_NONE, TFS(&tfs_3_bit_6_bit), 0x00, NULL, HFILL }},
14809 { &hf_gsm_a_rr_eutran_fdd_reporting_present, { "E-UTRAN FDD FDD 3 bit Reporting", "gsm_a.rr.eutran_fdd_reporting.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14810 { &hf_gsm_a_rr_eutran_fdd_reporting_threshold_2_present, { "E-UTRAN FDD Reporting Threshold2", "gsm_a.rr.eutran_fdd_reporting_threshold_2.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14811 { &hf_gsm_a_rr_eutran_fdd_reporting_offset_present, { "E-EUTRAN FDD Reporting Offset", "gsm_a.rr.eutran_fdd_reporting_offset.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14812 { &hf_gsm_a_rr_eutran_tdd_reporting_present, { "E-UTRAN TDD TDD 3 bit Reporting", "gsm_a.rr.eutran_tdd_reporting.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14813 { &hf_gsm_a_rr_eutran_tdd_reporting_threshold_2_present, { "E-UTRAN TDD Reporting Threshold2", "gsm_a.rr.eutran_tdd_reporting_threshold_2.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14814 { &hf_gsm_a_rr_eutran_tdd_reporting_offset_present, { "E-EUTRAN TDD Reporting Offset", "gsm_a.rr.eutran_tdd_reporting_offset.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14815 { &hf_gsm_a_rr_eutran_fdd_reporting_threshold, { "E-EUTRAN FDD Reporting Threshold", "gsm_a.rr.eutran_fdd_reporting_threshold", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14816 { &hf_gsm_a_rr_eutran_tdd_measurement_report_offset_present, { "E-UTRAN TDD Reporting Offset", "gsm_a.rr.eutran_tdd_measurement_report_offset.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14817 { &hf_gsm_a_rr_eutran_measurement_parameters_description, { "E-UTRAN Measurement Parameters Description", "gsm_a.rr.eutran_measurement_parameters_description", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14818 { &hf_gsm_a_rr_gprs_eutran_measurement_parameters_description, { "GPRS E-UTRAN Measurement Parameters Description", "gsm_a.rr.gprs_eutran_measurement_parameters_description", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14819 { &hf_gsm_a_rr_eutran_fdd_reporting, { "E-UTRAN FDD Reporting", "gsm_a.rr.eutran_fdd_reporting", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14820 { &hf_gsm_a_rr_eutran_tdd_reporting, { "E-UTRAN TDD Reporting", "gsm_a.rr.eutran_tdd_reporting", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14821 { &hf_gsm_a_rr_repeated_eutran_neighbour_cells, { "Repeated E-UTRAN Neighbour Cells", "gsm_a.rr.repeated_eutran_neighbour_cells", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14822 { &hf_gsm_a_rr_repeated_eutran_not_allowed_cells, { "Repeated E-UTRAN Not Allowed Cells", "gsm_a.rr.repeated_eutran_not_allowed_cells", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14823 { &hf_gsm_a_rr_repeated_eutran_pcid_ta_mapping, { "Repeated E-UTRAN PCID to TA mapping", "gsm_a.rr.repeated_eutran_pcid_ta_mapping", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14824 { &hf_gsm_a_rr_measurement_control_parameters_description, { "Measurement Control Parameters Description", "gsm_a.rr.measurement_control_parameters_description", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14825 { &hf_gsm_a_rr_eutran_default_measurement_control_eutran_present, { "Default Measurement Control E-UTRAN", "gsm_a.rr.eutran_default_measurement_control_eutran.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14826 { &hf_gsm_a_rr_repeated_eutran_measurement_control_parameters, { "Repeated E-UTRAN Measurement Control Parameters", "gsm_a.rr.repeated_eutran_measurement_control_parameters", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14827 { &hf_gsm_a_rr_serving_cell_priority_parameters_description, { "Serving Cell Priority Parameters Description", "gsm_a.rr.serving_cell_priority_parameters_description", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14828 { &hf_gsm_a_rr_3g_priority_parameters_description, { "3G Priority Parameters Description", "gsm_a.rr.3g_priority_parameters_description", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14829 { &hf_gsm_a_rr_eutran_parameters_description, { "E-UTRAN Parameters Description", "gsm_a.rr.eutran_parameters_description", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14830 { &hf_gsm_a_rr_repeated_csg_psc_split_struct, { "Repeated CSG_PSC_SPLIT struct", "gsm_a.rr.repeated_csg_psc_split_struct", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14831 { &hf_gsm_a_rr_psc_present, { "PSC", "gsm_a.rr.psc_present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14832 { &hf_gsm_a_rr_psc_pattern_present, { "PSC Pattern", "gsm_a.rr.psc_pattern.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14833 { &hf_gsm_a_rr_repeated_utran_frequency_index, { "Repeated UTRAN Frequency Index", "gsm_a.rr.repeated_utran_frequency_index", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14834 { &hf_gsm_a_rr_repeated_csg_fdd_uarfcn, { "Repeated CSG FDD UARFCN", "gsm_a.rr.repeated_csg_fdd_uarfcn", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14835 { &hf_gsm_a_rr_3g_csg_desc_technology, { "Technology", "gsm_a.rr.3g_csg_desc_technology", FT_BOOLEAN, BASE_NONE, TFS(&tfs_tdd_fdd), 0x00, NULL, HFILL }},
14836 { &hf_gsm_a_rr_repeated_pcid_group, { "Repeated PCID group", "gsm_a.rr.repeated_pcid_group", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14837 { &hf_gsm_a_rr_repeated_csg_pci_split, { "Repeated CSG PCI Split", "gsm_a.rr.repeated_csg_pci_split", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14838 { &hf_gsm_a_rr_3g_measurement_control_parameters_description, { "3G Measurement Control Parameters Description", "gsm_a.rr.3g_measurement_control_parameters_description", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14839 { &hf_gsm_a_rr_3g_measurement_control_parameters_description_struct, { "3G Measurement Control Parameters Description struct", "gsm_a.rr.3g_measurement_control_parameters_description_struct", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14840 { &hf_gsm_a_rr_repeated_utran_measurement_control_parameters_struct, { "Repeated UTRAN Measurement Control Parameters struct", "gsm_a.rr.repeated_utran_measurement_control_parameters_struct", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14841 { &hf_gsm_a_rr_measurement_parameters_description, { "Measurement Parameters Description", "gsm_a.rr.measurement_parameters_description", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14842 { &hf_gsm_a_rr_gprs_real_time_difference_description, { "GPRS Real Time Difference Description", "gsm_a.rr.gprs_real_time_difference_description", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14843 { &hf_gsm_a_rr_gprs_bsic_description, { "GPRS BSIC Description", "gsm_a.rr.gprs_bsic_description", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14844 { &hf_gsm_a_rr_gprs_report_priority_description, { "GPRS Report Priority Description", "gsm_a.rr.gprs_report_priority_description", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14845 { &hf_gsm_a_rr_gprs_measurement_parameters_description, { "GPRS Measurement Parameters Description", "gsm_a.rr.gprs_measurement_parameters_description", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14846 { &hf_gsm_a_rr_nc_measurement_parameters, { "NC Measurement Parameters", "gsm_a.rr.nc_measurement_parameters", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14847 { &hf_gsm_a_rr_nc_periods, { "NC Periods", "gsm_a.rr.nc_periods", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14848 { &hf_gsm_a_rr_si_2quater_extension_information, { "SI 2quater Extension Information", "gsm_a.rr.si_2quater_extension_information", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14849 { &hf_gsm_a_rr_ccn_support_description, { "CCN Support Description", "gsm_a.rr.ccn_support_description", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14850 { &hf_gsm_a_rr_3g_neighbour_cell_description, { "3G Neighbour Cell Description", "gsm_a.rr.3g_neighbour_cell_description", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14851 { &hf_gsm_a_rr_absolute_index_start_emr_present, { "Absolute Index Start EMR", "gsm_a.rr.absolute_index_start_emr.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14852 { &hf_gsm_a_rr_fdd_information, { "FDD Information", "gsm_a.rr.fdd_information", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14853 { &hf_gsm_a_rr_tdd_information, { "TDD Information", "gsm_a.rr.tdd_information", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14854 { &hf_gsm_a_rr_gprs_3g_measurement_parameters_description, { "GPRS 3G Measurement Parameters Description", "gsm_a.rr.gprs_3g_measurement_parameters_description", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14855 { &hf_gsm_a_rr_reporting_quantity_present, { "Reporting Quantity", "gsm_a.rr.reporting_quantity.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_ec_no_rscp), 0x00, NULL, HFILL }},
14856 { &hf_gsm_a_rr_fdd_reporting_parameters, { "FDD Reporting Parameters", "gsm_a.rr.fdd_reporting_parameters", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14857 { &hf_gsm_a_rr_tdd_multirat_reporting_present, { "TDD Multirat Reporting", "gsm_a.rr.tdd_multirat_reporting.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14858 { &hf_gsm_a_rr_tdd_reporting_parameters, { "TDD Reporting Parameters", "gsm_a.rr.tdd_reporting_parameters", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14859 { &hf_gsm_a_rr_3g_additional_measurement_parameters_description_2, { "3G Additional Measurement Parameters Description 2", "gsm_a.rr.3g_additional_measurement_parameters_description_2", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14860 { &hf_gsm_a_rr_700_reporting, { "700 Reporting", "gsm_a.rr.700_reporting", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14861 { &hf_gsm_a_rr_810_reporting, { "810 Reporting", "gsm_a.rr.810_reporting", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14862 { &hf_gsm_a_rr_3g_supplementary_parameters_description, { "3G Supplementary Parameters Description", "gsm_a.rr.3g_supplementary_parameters_description", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14863 { &hf_gsm_a_rr_priority_and_eutran_param_description, { "Priority and E-UTRAN Parameters Description", "gsm_a.rr.priority_and_eutran_param_description", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14864 { &hf_gsm_a_rr_3g_csg_description, { "3G CSG Description", "gsm_a.rr.3g_csg_description", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14865 { &hf_gsm_a_rr_lsa_id_type, { "Type", "gsm_a.rr.lsa_id_type", FT_BOOLEAN, BASE_NONE, TFS(&tfs_short_lsa_id_lsa_id), 0x00, NULL, HFILL }},
14866 { &hf_gsm_a_rr_additional_lsa_id, { "Additional LSA ID", "gsm_a.rr.additional_lsa_id", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14867 { &hf_gsm_a_rr_si13alt_position_present, { "SI3 alt position", "gsm_a.rr.si13alt_position.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14868 { &hf_gsm_a_call_prio_present, { "Call Priority", "gsm_a.call_prio.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14869 { &hf_gsm_a_rr_amr_config_present, { "AMR Config", "gsm_a.rr.amr_config.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14870 { &hf_gsm_a_rr_rand_bit_stream_ind, { "Random Bit Stream", "gsm_a.rr.rand_bit_stream.ind", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14871 { &hf_gsm_a_rr_rfl_number_present, { "RFL number list", "gsm_a.rr.rfl_number.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14872 { &hf_gsm_a_rr_gprs_mobile_allocation, { "MA", "gsm_a.rr.gprs_mobile_allocation", FT_BOOLEAN, BASE_NONE, TFS(&tfs_not_present_present), 0x00, NULL, HFILL }},
14873 { &hf_gsm_a_rr_arfcn_index_list, { "ARFCN index list", "gsm_a.rr.arfcn_index_list", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14874 { &hf_gsm_a_rr_si13_change_mark_present, { "SI13 Change Mark", "gsm_a.rr.si13_change_mark.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14875 { &hf_gsm_a_rr_pbcch, { "PBCCH", "gsm_a.rr.pbcch", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present_in_cell), 0x00, NULL, HFILL }},
14876 { &hf_gsm_a_rr_maio_present, { "MAIO", "gsm_a.rr.maio.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14877 { &hf_gsm_a_rr_arfcn_present, { "ARFCN", "gsm_a.rr.arfcn.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14878 { &hf_gsm_a_rr_lb_ms_txpwr_max_cch_present, { "LB MS TXPWR MAX CCH", "gsm_a.rr.lb_ms_txpwr_max_cch.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14879 { &hf_gsm_a_rr_real_time_difference_description, { "Real Time Difference Description", "gsm_a.rr.real_time_difference_description", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14880 { &hf_gsm_a_rr_bsic_description, { "BSIC Description", "gsm_a.rr.bsic_description", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14881 { &hf_gsm_a_rr_report_priority_description, { "Report Priority Description", "gsm_a.rr.report_priority_description", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14882 { &hf_gsm_a_rr_future_extensions_of_the_2g_parameters, { "Future extensions of the 2G parameters", "gsm_a.rr.future_extensions_of_the_2g_parameters", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14883 { &hf_gsm_a_rr_3g_wait_present, { "3G Wait", "gsm_a.rr.3g_wait.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14884 { &hf_gsm_a_rr_index_start_3g_present, { "Index Start 3G", "gsm_a.rr.index_start_3g.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14885 { &hf_gsm_a_rr_cdma2000_description, { "CDMA2000 Description", "gsm_a.rr.cdma2000_description", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14886 { &hf_gsm_a_rr_additional_information_for_3x_auxiliary_pilot, { "Additional information for 3X Auxiliary Pilot", "gsm_a.rr.additional_information_for_3x_auxiliary_pilot", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14887 { &hf_gsm_a_rr_3g_reporting_quantity, { "3G Reporting Quantity", "gsm_a.rr.3g_reporting_quantity", FT_BOOLEAN, BASE_NONE, TFS(&tfs_ec_no_rscp), 0x00, NULL, HFILL }},
14888 { &hf_gsm_a_rr_fdd_multirat_reporting_present, { "FDD Multirat Reporting", "gsm_a.rr.fdd_multirat_reporting.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14889 { &hf_gsm_a_rr_fdd_reporting_offset_present, { "FDD Reporting Offset", "gsm_a.rr.fdd_reporting_offset.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14890 { &hf_gsm_a_rr_tdd_reporting_offset_present, { "TDD Reporting Offset", "gsm_a.rr.tdd_reporting_offset.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14891 { &hf_gsm_a_rr_cdma2000_multirat_reporting, { "CDMA2000 Multirat Reporting", "gsm_a.rr.cdma2000_multirat_reporting", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14892 { &hf_gsm_a_rr_cdma2000_reporting_threshold, { "CDMA2000 Reporting Threshold", "gsm_a.rr.cdma2000_reporting_threshold", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14893 { &hf_gsm_a_rr_eutran_csg_description, { "E-UTRAN CSG Description", "gsm_a.rr.eutran_csg_description", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14894 { &hf_gsm_a_rr_serving_cell_data, { "Serving cell data", "gsm_a.rr.serving_cell_data", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14895 { &hf_gsm_a_rr_repeated_invalid_bsic_information, { "Repeated Invalid BSIC Information", "gsm_a.rr.repeated_invalid_bsic_information", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14896 { &hf_gsm_a_rr_bitmap_type_reporting, { "Bitmap Type Reporting", "gsm_a.rr.bitmap_type_reporting", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14897 { &hf_gsm_a_rr_e_utran_measurement_report, { "E-UTRAN Measurement Report", "gsm_a.rr.e_utran_measurement_report", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14898 { &hf_gsm_a_rr_repeat_eutran_desc, { "Repeating E-UTRAN Description struct", "gsm_a.rr.repeat_eutran_desc", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14899 { &hf_gsm_a_rr_peo_dsc_and_rcc_present, { "PEO DSC and RCC", "gsm_a.rr.peo_dsc_and_rcc_present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL } },
14900 { &hf_gsm_a_rr_c1_delta_present, { "C1 DELTA", "gsm_a.rr.c1_delta_present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL } },
14901 { &hf_gsm_a_rr_ul_xtti_tbf_assignment, { "TTI mode for uplink TBF", "gsm_a.rr.ul_xtti_tbf_assignment", FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_ul_xtti_tbf_assignment_vals), 0x00, NULL, HFILL } },
14902 { &hf_gsm_a_rr_dl_xtti_tbf_assignment, { "TTI mode for downlink TBF", "gsm_a.rr.dl_xtti_tbf_assignment", FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_dl_xtti_tbf_assignment_vals), 0x00, NULL, HFILL } },
14903 { &hf_gsm_a_rr_fanr_act_state, { "FANR state", "gsm_a.rr.fanr_act_state", FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_fanr_act_state_vals), 0x00, NULL, HFILL } },
14904 { &hf_gsm_a_rr_encoding_selection, { "Selected encoding", "gsm_a.rr.encoding_selection", FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_encoding_selection_vals), 0x00, NULL, HFILL } },
14905 { &hf_gsm_a_rr_nof_pdch_pairs, { "Number of assigned PDCH pairs", "gsm_a.rr.nof_pdch_pairs", FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_rr_nof_pdch_pairs_vals), 0x00, NULL, HFILL } },
14906 { &hf_gsm_a_rr_npm_transfer_time_present, { "NPM Transfer Time", "gsm_a.rr.npm_transfer_time_present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL } },
14907 { &hf_gsm_a_rr_eab_parameters,{ "EAB parameters structure", "gsm_a.rr.eab_parameters", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL } },
14908 /* gsm_rr_csn_HL_flag() fields */
14909 { &hf_gsm_a_rr_selection_parameters, { "Selection Parameters", "gsm_a.rr.selection_parameters", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14910 { &hf_gsm_a_rr_break_indicator, { "Break Indicator", "gsm_a.rr.break_indicator", FT_BOOLEAN, BASE_NONE, TFS(&tfs_break_indicator), 0x00, NULL, HFILL }},
14911 { &hf_gsm_a_rr_multiple_tbf_procedures, { "Multiple TBF Capability procedures in A/Gb mode", "gsm_a.rr.multiple_tbf_capability", FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x00, NULL, HFILL }},
14912 { &hf_gsm_a_rr_additions_in_rel_7, { "Additions in Rel-7", "gsm_a.rr.additions_in_rel_7", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14913 { &hf_gsm_a_rr_additions_in_rel_9, { "Additions in Rel-9", "gsm_a.rr.additions_in_rel_9", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14914 { &hf_gsm_a_rr_additions_in_rel_6, { "Additions in Rel-6", "gsm_a.rr.additions_in_rel_6", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14915 { &hf_gsm_a_rr_additions_in_rel_10, { "Additions in Rel-10", "gsm_a.rr.additions_in_rel_10", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL } },
14916 { &hf_gsm_a_rr_additions_in_rel_13, { "Additions in Rel-13", "gsm_a.rr.additions_in_rel_13", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL } },
14917 { &hf_gsm_a_rr_additions_in_r99, { "Additions in R99", "gsm_a.rr.additions_in_r99", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14918 { &hf_gsm_a_rr_first_discriminator_bit, { "First Discriminator Bit", "gsm_a.rr.first_discriminator_bit", FT_BOOLEAN, BASE_NONE, TFS(&tfs_high_low), 0x00, NULL, HFILL }},
14919 { &hf_gsm_a_rr_second_discriminator_bit, { "Second Discriminator Bit", "gsm_a.rr.second_discriminator_bit", FT_BOOLEAN, BASE_NONE, TFS(&tfs_high_low), 0x00, NULL, HFILL }},
14920 { &hf_gsm_a_rr_a_compressed_inter_rat_handover_info, { "A compressed version of the INTER RAT HANDOVER INFO message", "gsm_a.rr.a_compressed_inter_rat_handover_info", FT_BOOLEAN, BASE_NONE, TFS(&tfs_shall_be_shall_not_be_used), 0x00, NULL, HFILL }},
14921 { &hf_gsm_a_rr_nln_pch_present, { "NLN(PCH)", "gsm_a.rr.nln_pch.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14922 { &hf_gsm_a_call_prio1, { "Priority 1", "gsm_a.call_prio1.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14923 { &hf_gsm_a_call_prio2, { "Priority 2", "gsm_a.call_prio2.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14924 { &hf_gsm_a_rr_group_call_information, { "Group Call Information", "gsm_a.rr.group_call_information", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14925 { &hf_gsm_a_rr_packet_page_indication_1, { "Packet Page Indication 1", "gsm_a.rr.packet_page_indication_1", FT_BOOLEAN, BASE_NONE, TFS(&tfs_for_gprs_for_rr_connection_establishment), 0x00, NULL, HFILL }},
14926 { &hf_gsm_a_rr_packet_page_indication_2, { "Packet Page Indication 2", "gsm_a.rr.packet_page_indication_2", FT_BOOLEAN, BASE_NONE, TFS(&tfs_for_gprs_for_rr_connection_establishment), 0x00, NULL, HFILL }},
14927 { &hf_gsm_a_rr_chnl_needed_ch3_present, { "Channel Needed 3", "gsm_a.rr.chnl_needed_ch3.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14928 { &hf_gsm_a_call_prio3, { "Priority 3", "gsm_a.call_prio3.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14929 { &hf_gsm_a_rr_packet_paging_procedure_1, { "Packet Paging Procedure 1", "gsm_a.rr.packet_paging_procedure_1", FT_BOOLEAN, BASE_NONE, TFS(&tfs_for_gprs_for_rr_connection_establishment), 0x00, NULL, HFILL }},
14930 { &hf_gsm_a_rr_packet_paging_procedure_2, { "Packet Paging Procedure 2", "gsm_a.rr.packet_paging_procedure_2", FT_BOOLEAN, BASE_NONE, TFS(&tfs_for_gprs_for_rr_connection_establishment), 0x00, NULL, HFILL }},
14931 { &hf_gsm_a_rr_packet_paging_procedure_3, { "Packet Paging Procedure 3", "gsm_a.rr.packet_paging_procedure_3", FT_BOOLEAN, BASE_NONE, TFS(&tfs_for_gprs_for_rr_connection_establishment), 0x00, NULL, HFILL }},
14932 { &hf_gsm_a_rr_additions_in_release_6_present, { "Additions in release 6", "gsm_a.rr.additions_in_release_6.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14933 { &hf_gsm_a_rr_chnl_needed_ch3and4, { "Channel Needed 3 & 4", "gsm_a.rr.chnl_needed_ch3and4", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14934 { &hf_gsm_a_call_prio4, { "Priority 4", "gsm_a.call_prio4.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14935 { &hf_gsm_a_rr_nch_position_present, { "NCH position", "gsm_a.rr.nch_position.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14936 { &hf_gsm_a_rr_si2ter_mp_change_mark_present, { "MP Changemark", "gsm_a.rr.si2ter_mp_change_mark.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14937 { &hf_gsm_a_rr_additions_in_rel_5, { "Additions in Rel-5", "gsm_a.rr.additions_in_rel_5", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14938 { &hf_gsm_a_rr_additions_in_rel_8, { "Additions in Rel-8", "gsm_a.rr.additions_in_rel_8", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14939 { &hf_gsm_a_rr_power_offset_present, { "Optional Power Offset", "gsm_a.rr.power_offset.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14940 { &hf_gsm_a_rr_system_information_type_2ter, { "SYSTEM INFORMATION TYPE 2ter", "gsm_a.rr.system_information_type_2ter", FT_BOOLEAN, BASE_NONE, TFS(&tfs_available_not_available), 0x00, NULL, HFILL }},
14941 { &hf_gsm_a_rr_early_classmark_sending, { "Early Classmark Sending", "gsm_a.rr.early_classmark_sending", FT_BOOLEAN, BASE_NONE, TFS(&tfs_allowed_not_allowed), 0x00, NULL, HFILL }},
14942 { &hf_gsm_a_rr_scheduling_if_and_where, { "Scheduling if and where", "gsm_a.rr.scheduling_if_and_where", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14943 { &hf_gsm_a_rr_gprs_indicator, { "GPRS Indicator", "gsm_a.rr.gprs_indicator", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14944 { &hf_gsm_a_rr_3g_early_classmark_sending_restriction, { "3G Early Classmark Sending Restriction", "gsm_a.rr.3g_early_classmark_sending_restriction", FT_BOOLEAN, BASE_NONE, TFS(&tfs_3g_early_classmark_sending_restriction), 0x00, NULL, HFILL }},
14945 { &hf_gsm_a_rr_si2quater_indicator, { "SI2quater Indicator", "gsm_a.rr.si2quater_indicator", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14946 { &hf_gsm_a_rr_si21_indicator,{ "SI21 Indicator", "gsm_a.rr.si21_indicator", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL } },
14947 { &hf_gsm_a_rr_si4_rest_octets_s, { "SI4 Rest Octets_S", "gsm_a.rr.si4_rest_octets_s", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14948 { &hf_gsm_a_rr_lsa_parameters, { "LSA Parameters", "gsm_a.rr.lsa_parameters", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14949 { &hf_gsm_a_rr_cell_id_present, { "Cell Identity", "gsm_a.rr.cell_id.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14950 { &hf_gsm_a_rr_lsa_id_information, { "LSA ID information", "gsm_a.rr.lsa_id_information", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14951 { &hf_gsm_a_rr_cbq3_present, { "CBQ3", "gsm_a.rr.cbq3.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14952 { &hf_gsm_a_rr_pch_and_nch_info, { "PCH and NCH Info", "gsm_a.rr.pch_and_nch_info", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14953 { &hf_gsm_a_rr_vbs_vgcs_options, { "VBS/VGCS options", "gsm_a.rr.vbs_vgcs_options", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14954 { &hf_gsm_a_rr_dtm, { "DTM", "gsm_a.rr.dtm", FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_in_serving_cell_not_supported_in_serving_cell), 0x00, NULL, HFILL }},
14955 { &hf_gsm_a_rr_gprs_ms_txpwr_max_ccch_present, { "GPRS MS PWR MAX CCCH", "gsm_a.rr.gprs_ms_txpwr_max_ccch.present", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14956 { &hf_gsm_a_rr_mbms_procedures, { "MBMS Procedures", "gsm_a.rr.mbms_procedures", FT_BOOLEAN, BASE_NONE, TFS(&tfs_supported_not_supported), 0x00, NULL, HFILL }},
14957 { &hf_gsm_a_rr_si13_contents, { "SI13 contents", "gsm_a.rr.si13_contents", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14958 { &hf_gsm_a_rr_additions_in_rel_4, { "Additions in Rel-4", "gsm_a.rr.additions_in_rel_4", FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_not_present), 0x00, NULL, HFILL }},
14959 { &hf_gsm_a_rr_si_change_alt, { "SI CHANGE ALT", "gsm_a.rr.si_change_alt", FT_BOOLEAN, BASE_NONE, TFS(&gsm_si_change_alt_value), 0x00, NULL, HFILL } },
14961 { &hf_gsm_a_rr_cs_tsc_set, { "CS Domain TSC Set", "gsm_a.rr.cs_tsc_set", FT_UINT8, BASE_DEC, VALS(gsm_a_rr_cs_tsc_set_vals), 0x03, NULL, HFILL } },
14962 { &hf_gsm_a_rr_ps_sd_tsc_ass, { "Secondary PS Domain TSC Assigned", "gsm_a.rr.ps_sd_tsc_ass", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x04, NULL, HFILL } },
14963 { &hf_gsm_a_rr_ps_pd_tsc_set, { "Primary PS Domain TSC Set", "gsm_a.rr.ps_pd_tsc_set", FT_UINT8, BASE_DEC, VALS(gsm_a_rr_ps_tsc_set_vals), 0x08, NULL, HFILL } },
14964 { &hf_gsm_a_rr_ps_sd_tsc_set, { "Secondary PS Domain TSC Set", "gsm_a.rr.ps_sd_tsc_set", FT_UINT8, BASE_DEC, VALS(gsm_a_rr_ps_tsc_set_vals), 0x10, NULL, HFILL } },
14965 { &hf_gsm_a_rr_ps_sd_tsc_val, { "Secondary PS Domain TSC Value", "gsm_a.rr.ps_sd_tsc_val", FT_UINT8, BASE_DEC, NULL, 0xe0, NULL, HFILL } },
14968 static hf_register_info hf_rr_short_pd[] =
14970 { &hf_gsm_a_rr_short_pd,
14971 { "Radio Resources Short Protocol Discriminator", "gsm_a.rr.short_pd",
14972 FT_UINT8, BASE_HEX, NULL, 0x0,
14973 NULL, HFILL }
14975 { &hf_gsm_a_rr_short_pd_msg_type,
14976 { "Radio Resources Short PD Message Type", "gsm_a.rr.short_pd_type",
14977 FT_UINT8, BASE_HEX, VALS(gsm_a_rr_short_pd_msg_strings), 0x0,
14978 NULL, HFILL }
14980 { &hf_gsm_a_rr_short_l2_header,
14981 { "Radio Resources Short L2 Header", "gsm_a.rr.short_l2_header",
14982 FT_UINT8, BASE_HEX, NULL, 0x0,
14983 NULL, HFILL }
14985 { &hf_gsm_a_rr_ra_est_cause,
14986 { "Establishment Cause", "gsm_a.rr.ra_est_cause",
14987 FT_UINT8, BASE_CUSTOM, CF_FUNC(ra_est_cause_convert), 0x0,
14988 NULL, HFILL }
14990 { &hf_gsm_a_rr_ra_rand_ref,
14991 { "Random Reference", "gsm_a.rr.ra_rand_ref",
14992 FT_UINT8, BASE_CUSTOM, CF_FUNC(ra_rand_ref_convert), 0x0,
14993 NULL, HFILL }
14997 /* Setup protocol subtree array */
14998 #define NUM_INDIVIDUAL_ELEMS 6
14999 int *ett[NUM_INDIVIDUAL_ELEMS +
15000 NUM_GSM_DTAP_MSG_RR +
15001 NUM_GSM_RR_ELEM +
15002 NUM_GSM_RR_REST_OCTETS_ELEM +
15003 NUM_GSM_SACCH_MSG_RR];
15005 static ei_register_info ei[] = {
15006 { &ei_gsm_a_rr_ie_overrun, { "gsm_a.rr.ie_overrun", PI_MALFORMED, PI_ERROR, "IE over-runs stated length", EXPFILL }},
15007 { &ei_gsm_a_rr_ie_underrun, { "gsm_a.rr.ie_underrun", PI_COMMENTS_GROUP, PI_NOTE, "IE under-runs stated length", EXPFILL }},
15008 { &ei_gsm_a_rr_data_not_dissected, { "gsm_a.rr.data_not_dissected", PI_UNDECODED, PI_WARN, "Not dissected yet", EXPFILL }},
15009 { &ei_gsm_a_rr_unknown_version, { "gsm_a.rr.unknown_version", PI_PROTOCOL, PI_WARN, "Unknown version", EXPFILL }},
15010 { &ei_gsm_a_rr_extraneous_data, { "gsm_a.rr.extraneous_data", PI_PROTOCOL, PI_NOTE, "Extraneous Data, dissector bug or later version spec(report to wireshark.org)", EXPFILL }},
15011 { &ei_gsm_a_rr_missing_mandatory_element, { "gsm_a.rr.missing_mandatory_element", PI_PROTOCOL, PI_ERROR, "Missing Mandatory element, rest of dissection is suspect", EXPFILL }},
15014 module_t *gsm_a_rr_module;
15015 expert_module_t* expert_a_rr;
15017 ett[0] = &ett_ccch_msg;
15018 ett[1] = &ett_ccch_oct_1;
15019 ett[2] = &ett_sacch_msg;
15020 ett[3] = &ett_ec_ccch_msg;
15021 ett[4] = &ett_apdu;
15022 ett[5] = &ett_rach_msg;
15024 last_offset = NUM_INDIVIDUAL_ELEMS;
15026 for (i=0; i < NUM_GSM_DTAP_MSG_RR; i++, last_offset++)
15028 ett[last_offset] = &ett_gsm_dtap_msg_rr[i];
15031 for (i=0; i < NUM_GSM_RR_ELEM; i++, last_offset++)
15033 ett[last_offset] = &ett_gsm_rr_elem[i];
15036 for (i=0; i < NUM_GSM_RR_REST_OCTETS_ELEM; i++, last_offset++)
15038 ett[last_offset] = &ett_gsm_rr_rest_octets_elem[i];
15041 for (i=0; i < NUM_GSM_SACCH_MSG_RR; i++, last_offset++)
15043 ett[last_offset] = &ett_gsm_sacch_msg_rr[i];
15046 /* Register the protocol name and description */
15047 proto_a_rr =
15048 proto_register_protocol("GSM A-I/F Radio Resource Management", "GSM RR", "gsm_a.rr");
15050 proto_register_field_array(proto_a_rr, hf, array_length(hf));
15051 expert_a_rr = expert_register_protocol(proto_a_rr);
15052 expert_register_field_array(expert_a_rr, ei, array_length(ei));
15054 /* Register the protocol name and description */
15055 proto_a_ccch =
15056 proto_register_protocol("GSM CCCH", "GSM CCCH", "gsm_a.ccch");
15058 /* subdissector code */
15059 register_dissector("gsm_a_ccch", dissect_ccch, proto_a_ccch);
15061 /* Register the protocol name and description */
15062 proto_a_rach =
15063 proto_register_protocol("GSM RACH", "GSM RACH", "gsm_a.rach");
15065 /* subdissector code */
15066 register_dissector("gsm_a_rach", dissect_rach, proto_a_rach);
15068 /* Register the protocol name and description */
15069 proto_a_sacch =
15070 proto_register_protocol("GSM SACCH", "GSM SACCH", "gsm_a.sacch");
15072 proto_register_field_array(proto_a_sacch, hf_rr_short_pd, array_length(hf_rr_short_pd));
15074 /* subdissector code */
15075 register_dissector("gsm_a_sacch", dissect_sacch, proto_a_sacch);
15076 /* Register the protocol name and description */
15078 proto_a_ec_ccch =
15079 proto_register_protocol("GSM EC-CCCH", "GSM EC-CCCH", "gsm_a.ec_ccch");
15080 /* subdissector code */
15081 register_dissector("gsm_a_ec_ccch", dissect_ec_ccch, proto_a_ec_ccch);
15083 /* subtree array (for both sub-dissectors) */
15084 proto_register_subtree_array(ett, array_length(ett));
15086 /* Register configuration options */
15087 gsm_a_rr_module = prefs_register_protocol(proto_a_rr, NULL);
15088 prefs_register_uint_preference(gsm_a_rr_module, "nri_length", "NRI length",
15089 "Whether to decode NRI in TLLI. NRI is not used if length is zero",
15090 10, &gsm_a_rr_nri_length);
15093 void
15094 proto_reg_handoff_gsm_a_rr(void)
15096 rrc_irat_ho_info_handle = find_dissector_add_dependency("rrc.irat.irat_ho_info", proto_a_rr);
15097 rrc_irat_ho_to_utran_cmd_handle = find_dissector_add_dependency("rrc.irat.ho_to_utran_cmd", proto_a_rr);
15098 rrlp_dissector = find_dissector("rrlp");
15103 * Editor modelines - https://www.wireshark.org/tools/modelines.html
15105 * Local variables:
15106 * c-basic-offset: 4
15107 * tab-width: 8
15108 * indent-tabs-mode: nil
15109 * End:
15111 * vi: set shiftwidth=4 tabstop=8 expandtab:
15112 * :indentSize=4:tabSize=8:noTabs=true: