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
14 * Mobile radio interface Layer 3 specification;
15 * Core network protocols;
17 * (3GPP TS 24.008 version 4.7.0 Release 4)
18 * (ETSI TS 124 008 V6.8.0 (2005-03))
21 * Mobile radio interface layer 3 specification;
22 * Radio Resource Control Protocol
23 * (GSM 04.18 version 8.4.1 Release 1999)
24 * (3GPP TS 04.18 version 8.26.0 Release 1999)
28 * Wireshark - Network traffic analyzer
29 * By Gerald Combs <gerald@wireshark.org>
30 * Copyright 1998 Gerald Combs
32 * This program is free software; you can redistribute it and/or
33 * modify it under the terms of the GNU General Public License
34 * as published by the Free Software Foundation; either version 2
35 * of the License, or (at your option) any later version.
37 * This program is distributed in the hope that it will be useful,
38 * but WITHOUT ANY WARRANTY; without even the implied warranty of
39 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
40 * GNU General Public License for more details.
42 * You should have received a copy of the GNU General Public License
43 * along with this program; if not, write to the Free Software
44 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
49 #include <epan/packet.h>
50 #include <epan/prefs.h>
52 #include <epan/asn1.h>
53 #include <epan/expert.h>
54 #include "packet-bssap.h"
55 #include "packet-sccp.h"
56 #include "packet-ber.h"
57 #include "packet-q931.h"
58 #include "packet-gsm_a_common.h"
59 #include "packet-e212.h"
60 #include "packet-ppp.h"
62 static dissector_handle_t rrc_irat_ho_info_handle
;
63 static dissector_handle_t rrc_irat_ho_to_utran_cmd_handle
;
65 #define PADDING_BYTE 0x2B
67 /* 3GPP TS 44.018 version 11.2.0 Release 11 */
68 const value_string gsm_a_dtap_msg_rr_strings
[] = {
70 { 0x3b, "Additional Assignment" },
71 { 0x3f, "Immediate Assignment" },
72 { 0x39, "Immediate Assignment Extended" },
73 { 0x3a, "Immediate Assignment Reject" },
75 { 0x48, "DTM Assignment Failure" },
76 { 0x49, "DTM Reject" },
77 { 0x4a, "DTM Request" },
78 { 0x4b, "Packet Assignment" },
79 { 0x4c, "DTM Assignment Command" },
80 { 0x4d, "DTM Information" },
81 { 0x4e, "Packet Notification" },
83 { 0x35, "Ciphering Mode Command" },
84 { 0x32, "Ciphering Mode Complete" },
86 { 0x30, "Configuration Change Command" },
87 { 0x31, "Configuration Change Ack." },
88 { 0x33, "Configuration Change Reject" },
90 { 0x2e, "Assignment Command" },
91 { 0x29, "Assignment Complete" },
92 { 0x2f, "Assignment Failure" },
93 { 0x2b, "Handover Command" },
94 { 0x2c, "Handover Complete" },
95 { 0x28, "Handover Failure" },
96 { 0x2d, "Physical Information" },
98 { 0x08, "RR-cell Change Order" },
99 { 0x23, "PDCH Assignment Command" },
101 { 0x0d, "Channel Release" },
102 { 0x0a, "Partial Release" },
103 { 0x0f, "Partial Release Complete" },
105 { 0x21, "Paging Request Type 1" },
106 { 0x22, "Paging Request Type 2" },
107 { 0x24, "Paging Request Type 3" },
108 { 0x27, "Paging Response" },
109 { 0x20, "Notification/NCH" },
110 { 0x25, "Reserved" },
111 { 0x26, "Notification/Response" },
113 { 0x0b, "Reserved" },
116 /* ETSI TS 101 503 V8.5.0 Seems to give Other def for this Messages??? */
117 { 0xc0, "Utran Classmark Change" }, CONFLICTS WITH Handover To UTRAN Command
118 { 0xc1, "UE RAB Preconfiguration" },
119 { 0xc2, "cdma2000 Classmark Change" },
122 /* ETSI TS 101 503 V8.5.0 */
123 { 0x60, "Utran Classmark Change" },
124 { 0x62, "cdma2000 Classmark Change" },
125 { 0x63, "Inter System to UTRAN Handover Command" },
126 { 0x64, "Inter System to cdma2000 Handover Command" },
127 { 0x18, "System Information Type 8" },
128 { 0x19, "System Information Type 1" },
129 { 0x1a, "System Information Type 2" },
130 { 0x1b, "System Information Type 3" },
131 { 0x1c, "System Information Type 4" },
132 { 0x1d, "System Information Type 5" },
133 { 0x1e, "System Information Type 6" },
134 { 0x1f, "System Information Type 7" },
136 { 0x02, "System Information Type 2bis" },
137 { 0x03, "System Information Type 2ter" },
138 { 0x07, "System Information Type 2quater" },
139 { 0x05, "System Information Type 5bis" },
140 { 0x06, "System Information Type 5ter" },
141 { 0x04, "System Information Type 9" },
142 { 0x00, "System Information Type 13" },
144 { 0x3d, "System Information Type 16" },
145 { 0x3e, "System Information Type 17" },
147 { 0x40, "System Information Type 18" },
148 { 0x41, "System Information Type 19" },
149 { 0x42, "System Information Type 20" },
151 { 0x10, "Channel Mode Modify" },
152 { 0x12, "RR Status" },
153 { 0x17, "Channel Mode Modify Acknowledge" },
154 { 0x14, "Frequency Redefinition" },
155 { 0x15, "Measurement Report" },
156 { 0x16, "Classmark Change" },
157 { 0x13, "Classmark Enquiry" },
158 { 0x36, "Extended Measurement Report" },
159 { 0x37, "Extended Measurement Order" },
160 { 0x34, "GPRS Suspension Request" },
162 { 0x09, "VGCS Uplink Grant" },
163 { 0x0e, "Uplink Release" },
164 { 0x0c, "Reserved" },
165 { 0x2a, "Uplink Busy" },
166 { 0x11, "Talker Indication" },
168 { 0xc0, "UTRAN Classmark Change/Handover To UTRAN Command" }, /* spec conflict */
170 { 0x38, "Application Information" },
175 static const value_string gsm_rr_elem_strings
[] = {
176 /* Radio Resource Management Information Elements 10.5.2, most are from 10.5.1 */
177 { DE_RR_BA_RANGE
, "BA Range" }, /* [3] 10.5.2.1a BA Range */
178 { DE_RR_CELL_CH_DSC
, "Cell Channel Description" }, /* [3] 10.5.2.1b */
179 { DE_RR_BA_LIST_PREF
, "BA List Pref" }, /* [3] 10.5.2.1c BA List Pref */
180 { DE_RR_UTRAN_FREQ_LIST
, "UTRAN Frequency List" }, /* [3] 10.5.2.1d UTRAN Frequency List */
181 { 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 */
182 { DE_RR_CELL_DSC
, "Cell Description" }, /* 10.5.2.2 */
183 { DE_RR_CELL_OPT_BCCH
, "Cell Options (BCCH)" }, /* [3] 10.5.2.3 Cell Options (BCCH) */
184 { DE_RR_CELL_OPT_SACCH
, "Cell Options (SACCH)" }, /* [3] 10.5.2.3a Cell Options (SACCH) */
185 { DE_RR_CELL_SEL_PARAM
, "Cell Selection Parameters" }, /* [3] 10.5.2.4 Cell Selection Parameters */
186 /* [3] 10.5.2.4a (void) */
187 { DE_RR_CH_DSC
, "Channel Description" }, /* 10.5.2.5 */
188 { DE_RR_CH_DSC2
, "Channel Description 2" }, /* 10.5.2.5a */
189 { DE_RR_CH_DSC3
, "Channel Description 3" }, /* 10.5.2.5c */
190 { DE_RR_CH_MODE
, "Channel Mode" }, /* [3] 10.5.2.6 */
191 { DE_RR_CH_MODE2
, "Channel Mode 2" }, /* [3] 10.5.2.7 */
192 { DE_RR_UTRAN_CM
, "UTRAN Classmark" }, /* [3] 10.5.2.7a */
193 /* [3] 10.5.2.7b (void) */
194 { DE_RR_CM_ENQ_MASK
, "Classmark Enquiry Mask" }, /* [3] 10.5.2.7c */
195 /* [3] 10.5.2.7d GERAN Iu Mode Classmark information element */
196 { DE_RR_CHNL_NEEDED
, "Channel Needed"}, /* [3] 10.5.2.8 */
197 /* [3] 10.5.2.8a (void) */
198 { DE_RR_CHNL_REQ_DESC2
, "Channel Request Description 2"}, /* [3] 10.5.2.8b Channel Request Description 2 */
200 { DE_RR_CIP_MODE_SET
, "Cipher Mode Setting" }, /* [3] 10.5.2.9 */
201 { DE_RR_CIP_MODE_RESP
, "Cipher Mode Response" }, /* [3] 10.5.2.10 */
202 { DE_RR_CTRL_CH_DESC
, "Control Channel Description" }, /* [3] 10.5.2.11 Control Channel Description */
203 { DE_RR_DTM_INFO_DETAILS
, "DTM Information Details" }, /* [3] 10.5.2.11a DTM Information Details */
204 { DE_RR_DYN_ARFCN_MAP
, "Dynamic ARFCN Mapping" }, /* [3] 10.5.2.11b */
205 { DE_RR_FREQ_CH_SEQ
, "Frequency Channel Sequence" }, /* [3] 10.5.2.12 */
206 { DE_RR_FREQ_LIST
, "Frequency List" }, /* 10.5.2.13 */
207 { DE_RR_FREQ_SHORT_LIST
, "Frequency Short List" }, /* 10.5.2.14 */
208 { DE_RR_FREQ_SHORT_LIST2
, "Frequency Short List 2" }, /* 10.5.2.14a */
209 /* [3] 10.5.2.14b Group Channel Description */
210 { DE_RR_GPRS_RESUMPTION
, "GPRS Resumption" }, /* [3] 10.5.2.14c GPRS Resumption */
211 { DE_RR_GPRS_BROADCAST_INFORMATION
, "GPRS Broadcast Information" }, /* [3] 10.5.2.14d GPRS broadcast information */
212 /* [3] 10.5.2.14e Enhanced DTM CS Release Indication */
213 { DE_RR_HO_REF
, "Handover Reference" }, /* 10.5.2.15 */
214 { DE_RR_IA_REST_OCT
, "IA Rest Octets" }, /* [3] 10.5.2.16 */
215 { DE_RR_IAR_REST_OCT
, "IAR Rest Octets" }, /* [3] 10.5.2.17 IAR Rest Octets */
216 { DE_RR_IAX_REST_OCT
, "IAX Rest Octets" }, /* [3] 10.5.2.18 IAX Rest Octets */
217 { DE_RR_L2_PSEUDO_LEN
, "L2 Pseudo Length" }, /* [3] 10.5.2.19 */
218 { DE_RR_MEAS_RES
, "Measurement Results" }, /* [3] 10.5.2.20 Measurement Results */
220 * [3] 10.5.2.20a GPRS Measurement Results
222 { DE_RR_MOB_ALL
, "Mobile Allocation" }, /* [3] 10.5.2.21 */
223 { DE_RR_MOB_TIME_DIFF
, "Mobile Time Difference" }, /* [3] 10.5.2.21a */
224 { DE_RR_MULTIRATE_CONF
, "MultiRate configuration" }, /* [3] 10.5.2.21aa */
226 { DE_RR_MULT_ALL
, "Multislot Allocation" }, /* [3] 10.5.2.21b */
228 * [3] 10.5.2.21c NC mode
230 { DE_RR_NEIGH_CELL_DESC
, "Neighbour Cell Description" }, /* [3] 10.5.2.22 Neighbour Cell Description */
231 { DE_RR_NEIGH_CELL_DESC2
, "Neighbour Cell Description 2" }, /* [3] 10.5.2.22a Neighbour Cell Description 2 */
233 * [3] 10.5.2.22b (void)
234 * [3] 10.5.2.22c NT/N Rest Octets */
235 { DE_RR_P1_REST_OCT
, "P1 Rest Octets" }, /* [3] 10.5.2.23 P1 Rest Octets */
236 { DE_RR_P2_REST_OCT
, "P2 Rest Octets" }, /* [3] 10.5.2.24 P2 Rest Octets */
237 { DE_RR_P3_REST_OCT
, "P3 Rest Octets" }, /* [3] 10.5.2.25 P3 Rest Octets */
238 { DE_RR_PACKET_CH_DESC
, "Packet Channel Description" }, /* [3] 10.5.2.25a */
239 { DE_RR_DED_MOD_OR_TBF
, "Dedicated mode or TBF" }, /* [3] 10.5.2.25b */
240 { DE_RR_PKT_UL_ASS
, "Packet Uplink Assignment" }, /* [3] 10.5.2.25c RR Packet Uplink Assignment */
241 { DE_RR_PKT_DL_ASS
, "Packet Downlink Assignment" }, /* [3] 10.5.2.25d RR Packet Downlink Assignment */
242 { DE_RR_PKT_DL_ASS_TYPE2
, "Packet Downlink Assignment Type 2" }, /* [3] 110.5.2.25e RR Packet Downlink Assignment Type 2 */
243 { DE_RR_PAGE_MODE
, "Page Mode" }, /* [3] 10.5.2.26 */
244 { DE_RR_NCC_PERM
, "NCC Permitted" }, /* [3] 10.5.2.27 NCC Permitted */
245 { DE_RR_POW_CMD
, "Power Command" }, /* 10.5.2.28 */
246 { DE_RR_POW_CMD_AND_ACC_TYPE
, "Power Command and access type" }, /* 10.5.2.28a */
247 { DE_RR_RACH_CTRL_PARAM
, "RACH Control Parameters" }, /* [3] 10.5.2.29 RACH Control Parameters */
248 { DE_RR_REQ_REF
, "Request Reference" }, /* [3] 10.5.2.30 Request Reference */
249 { DE_RR_CAUSE
, "RR Cause" }, /* 10.5.2.31 */
250 { DE_RR_SYNC_IND
, "Synchronization Indication" }, /* 10.5.2.39 */
251 { DE_RR_SI1_REST_OCT
, "SI 1 Rest Octets" }, /* [3] 10.5.2.32 */
252 /* [3] 10.5.2.33 SI 2bis Rest Octets */
253 { DE_RR_SI2TER_REST_OCT
, "SI 2ter Rest Octets" }, /* [3] 10.5.2.33a */
254 { DE_RR_SI2QUATER_REST_OCT
, "SI 2quater Rest Octets" }, /* [3] 10.5.2.33b */
255 { DE_RR_SI3_REST_OCT
, "SI 3 Rest Octets" }, /* [3] 10.5.2.34 */
256 { DE_RR_SI4_REST_OCT
, "SI 4 Rest Octets" }, /* [3] 10.5.2.35 */
257 { DE_RR_SI6_REST_OCT
, "SI 6 Rest Octets" }, /* [3] 10.5.2.35a */
258 /* [3] 10.5.2.36 SI 7 Rest Octets
259 * [3] 10.5.2.37 SI 8 Rest Octets
260 * [3] 10.5.2.37a SI 9 Rest Octets
262 { DE_RR_SI13_REST_OCT
, "SI 13 Rest Octets" }, /* [3] 10.5.2.37b */
263 /* [3] 10.5.2.37c (void)
264 * [3] 10.5.2.37d (void)
265 * [3] 10.5.2.37e SI 16 Rest Octets
266 * [3] 10.5.2.37f SI 17 Rest Octets
267 * [3] 10.5.2.37g SI 19 Rest Octets
268 * [3] 10.5.2.37h SI 18 Rest Octets
269 * [3] 10.5.2.37i SI 20 Rest Octets */
270 { DE_RR_STARTING_TIME
, "Starting Time" }, /* [3] 10.5.2.38 Starting Time */
271 { DE_RR_TIMING_ADV
, "Timing Advance" }, /* [3] 10.5.2.40 Timing Advance */
272 { DE_RR_TIME_DIFF
, "Time Difference" }, /* [3] 10.5.2.41 Time Difference */
273 { DE_RR_TLLI
, "TLLI" }, /* [3] 10.5.2.41a TLLI */
274 { DE_RR_TMSI_PTMSI
, "TMSI/P-TMSI" }, /* [3] 10.5.2.42 TMSI/P-TMSI */
275 { DE_RR_VGCS_TAR_MODE_IND
, "VGCS target mode Indication" }, /* [3] 10.5.2.42a */
277 { DE_RR_VGCS_CIP_PAR
, "VGCS Ciphering Parameters" }, /* [3] 10.5.2.42b */
278 { DE_RR_WAIT_IND
, "Wait Indication" }, /* [3] 10.5.2.43 Wait Indication */
279 /* [3] 10.5.2.44 SI10 rest octets $(ASCI)$ */
280 { DE_RR_EXT_MEAS_RESULT
, "Extended Measurement Results" }, /* [3] 10.5.2.45 Extended Measurement Results */
281 { DE_RR_EXT_MEAS_FREQ_LIST
, "Extended Measurement Frequency List" },/* [3] 10.5.2.46 Extended Measurement Frequency List */
282 { DE_RR_SUS_CAU
, "Suspension Cause" }, /* [3] 10.5.2.47 */
283 { DE_RR_APDU_ID
, "APDU ID" }, /* [3] 10.5.2.48 APDU ID */
284 { DE_RR_APDU_FLAGS
, "APDU Flags" }, /* [3] 10.5.2.49 APDU Flags */
285 { DE_RR_APDU_DATA
, "APDU Data" }, /* [3] 10.5.2.50 APDU Data */
286 { DE_RR_HO_TO_UTRAN_CMD
, "Handover to UTRAN Command" }, /* [3] 10.5.2.51 Handover To UTRAN Command */
287 /* [3] 10.5.2.52 Handover To cdma2000 Command
288 * [3] 10.5.2.53 (void)
289 * [3] 10.5.2.54 (void)
290 * [3] 10.5.2.55 (void)
291 * [3] 10.5.2.56 3G Target Cell */
292 { DE_RR_SERV_SUP
, "Service Support" }, /* [3] 10.5.2.57 */
293 /* 10.5.2.58 MBMS p-t-m Channel Description */
294 { DE_RR_DED_SERV_INF
, "Dedicated Service Information" }, /* [3] 10.5.2.59 */
296 * 10.5.2.60 MPRACH Description
297 * 10.5.2.61 Restriction Timer
298 * 10.5.2.62 MBMS Session Identity
299 * 10.5.2.63 Reduced group or broadcast call reference
300 * 10.5.2.64 Talker Priority status
301 * 10.5.2.65 Talker Identity
304 * 10.5.2.68 VGCS AMR Configuration
306 { DE_RR_CARRIER_IND
, "Carrier Indication" }, /* 10.5.2.69 Carrier Indication */
309 value_string_ext gsm_rr_elem_strings_ext
= VALUE_STRING_EXT_INIT(gsm_rr_elem_strings
);
311 const value_string gsm_rr_rest_octets_elem_strings
[] = {
312 /* RR Rest Octets information elements */
313 { 0, "UTRAN FDD Description" },
314 { 0, "UTRAN TDD Description" },
315 { 0, "3G Measurement Parameters Description" },
316 { 0, "3G Additional Measurement Parameters Description" },
317 { 0, "Measurement Parameters Description" },
318 { 0, "GPRS Real Time Difference Description" },
319 { 0, "GPRS BSIC Description" },
320 { 0, "GPRS Report Priority Description" },
321 { 0, "GPRS Measurement Parameters Description" },
322 { 0, "NC Measurement Parameters" },
323 { 0, "SI2q Extension Information" },
324 { 0, "CCN Support Description" },
325 { 0, "3G Neighbour Cell Description" },
326 { 0, "FDD Cell Information Field" },
327 { 0, "TDD Cell Information Field" },
328 { 0, "GPRS 3G Measurement Parameters Description" },
329 { 0, "3G Additional Measurement Parameters Description 2" },
330 { 0, "Priority and E-UTRAN Parameters Description" },
331 { 0, "Serving Cell Priority Parameters Description" },
332 { 0, "3G Priority Parameters Description" },
333 { 0, "UTRAN Priority Parameters" },
334 { 0, "E-UTRAN Parameters Description" },
335 { 0, "E-UTRAN Neighbour Cells" },
336 { 0, "E-UTRAN Not Allowed Cells" },
337 { 0, "E-UTRAN PCID to TA mapping" },
338 { 0, "3G CSG Description" },
339 { 0, "E-UTRAN CSG Description" },
340 { 0, "Optional Selection Parameters" },
341 { 0, "GPRS Indicator" },
342 { 0, "SI4 Rest Octets_O" },
343 { 0, "SI4 Rest Octets_S" },
344 { 0, "LSA Parameters" },
345 { 0, "LSA ID Information" },
346 { 0, "PCH and NCH Info" },
347 { 0, "VBS/VGCS Options" },
348 { 0, "GPRS Mobile Allocation" },
349 { 0, "GPRS Cell Options" },
350 { 0, "GPRS Cell Options Extension Information" },
351 { 0, "GPRS Power Control Parameters" },
352 { 0, "PBCCH Description" },
353 { 0, "GSM Description" },
354 { 0, "Real Time Difference Description" },
355 { 0, "BSIC Description" },
356 { 0, "Report Priority Description" },
357 { 0, "CDMA2000 Description" },
358 { 0, "Serving cell data" },
359 { 0, "Repeated Invalid BSIC Information" },
360 { 0, "Bitmap Type Reporting" },
361 { 0, "3G Supplementary Parameters Description" },
362 { 0, "UTRAN Measurement Control Parameters" },
363 { 0, "EGPRS Packet Uplink Assignment" },
364 { 0, "Multiple Blocks Packet Downlink Assignment" },
365 { 0, "Temporary Mobile Group Identity (TMGI)" },
366 { 0, "Packet Timing Advance" },
367 { 0, "Packet Uplink Assignment" },
368 { 0, "Packet Downlink Assignment" },
369 { 0, "Second Part Packet Assignment" },
370 { 0, "REPORTING QUANTITY" },
371 { 0, "E-UTRAN Measurement Report" },
376 /* RR cause value (octet 2) TS 44.018 6.11.0*/
377 static const value_string gsm_a_rr_RR_cause_vals
[] = {
378 { 0, "Normal event"},
379 { 1, "Abnormal release, unspecified"},
380 { 2, "Abnormal release, channel unacceptable"},
381 { 3, "Abnormal release, timer expired"},
382 { 4, "Abnormal release, no activity on the radio path"},
383 { 5, "Preemptive release"},
384 { 6, "UTRAN configuration unknown"},
385 { 8, "Handover impossible, timing advance out of range"},
386 { 9, "Channel mode unacceptable"},
387 { 10, "Frequency not implemented"},
388 { 13, "Originator or talker leaving group call area"},
389 { 12, "Lower layer failure"},
390 { 0x41, "Call already cleared"},
391 { 0x5f, "Semantically incorrect message"},
392 { 0x60, "Invalid mandatory information"},
393 { 0x61, "Message type non-existent or not implemented"},
394 { 0x62, "Message type not compatible with protocol state"},
395 { 0x64, "Conditional IE error"},
396 { 0x65, "No cell allocation available"},
397 { 0x6f, "Protocol error unspecified"},
401 static const value_string gsm_a_rr_algorithm_identifier_vals
[] = {
402 { 0, "Cipher with algorithm A5/1"},
403 { 1, "Cipher with algorithm A5/2"},
404 { 2, "Cipher with algorithm A5/3"},
405 { 3, "Cipher with algorithm A5/4"},
406 { 4, "Cipher with algorithm A5/5"},
407 { 5, "Cipher with algorithm A5/6"},
408 { 6, "Cipher with algorithm A5/7"},
414 #define DTAP_PD_MASK 0x0f
415 #define DTAP_SKIP_MASK 0xf0
416 #define DTAP_TI_MASK DTAP_SKIP_MASK
417 #define DTAP_TIE_PRES_MASK 0x07 /* after TI shifted to right */
418 #define DTAP_TIE_MASK 0x7f
420 #define DTAP_RR_IEI_MASK 0xff
422 /* Initialize the protocol and registered fields */
423 static int proto_a_rr
= -1;
424 static int proto_a_ccch
= -1;
425 static int proto_a_sacch
= -1;
427 static int hf_gsm_a_dtap_msg_rr_type
= -1;
428 int hf_gsm_a_rr_elem_id
= -1;
430 static int hf_gsm_a_rr_short_pd_msg_type
= -1;
431 static int hf_gsm_a_rr_short_pd
= -1;
432 static int hf_gsm_a_rr_short_l2_header
= -1;
435 static int hf_gsm_a_rr_bcc
= -1;
436 static int hf_gsm_a_rr_ncc
= -1;
437 static int hf_gsm_a_rr_bcch_arfcn
= -1;
438 static int hf_gsm_a_rr_range_nb
= -1;
439 static int hf_gsm_a_rr_range_lower
= -1;
440 static int hf_gsm_a_rr_range_higher
= -1;
441 static int hf_gsm_a_rr_ba_freq
= -1;
442 static int hf_gsm_a_rr_ho_ref_val
= -1;
443 static int hf_gsm_a_rr_L2_pseudo_len
= -1;
444 static int hf_gsm_a_rr_ba_used
= -1;
445 static int hf_gsm_a_rr_dtx_used
= -1;
446 static int hf_gsm_a_rr_3g_ba_used
= -1;
447 static int hf_gsm_a_rr_meas_valid
= -1;
448 static int hf_gsm_a_rr_rxlev_full_serv_cell
= -1;
449 static int hf_gsm_a_rr_rxlev_sub_serv_cell
= -1;
450 static int hf_gsm_a_rr_rxqual_full_serv_cell
= -1;
451 static int hf_gsm_a_rr_rxqual_sub_serv_cell
= -1;
452 static int hf_gsm_a_rr_no_ncell_m
= -1;
453 static int hf_gsm_a_rr_rxlev_ncell
= -1;
454 static int hf_gsm_a_rr_bcch_freq_ncell
= -1;
455 static int hf_gsm_a_rr_bsic_ncell
= -1;
456 static int hf_gsm_a_rr_mobile_time_difference
= -1;
457 static int hf_gsm_a_rr_pow_cmd_atc
= -1;
458 static int hf_gsm_a_rr_pow_cmd_epc
= -1;
459 static int hf_gsm_a_rr_page_mode
= -1;
460 static int hf_gsm_a_rr_dedicated_mode_or_tbf
= -1;
461 static int hf_gsm_a_rr_pow_cmd_fpcepc
= -1;
462 static int hf_gsm_a_rr_pow_cmd_powlev
= -1;
463 static int hf_gsm_a_rr_sync_ind_nci
= -1;
464 static int hf_gsm_a_rr_sync_ind_rot
= -1;
465 static int hf_gsm_a_rr_sync_ind_si
= -1;
466 static int hf_gsm_a_rr_format_id
= -1;
467 static int hf_gsm_a_rr_format_id2
= -1;
468 static int hf_gsm_a_rr_channel_mode
= -1;
469 static int hf_gsm_a_rr_channel_mode2
= -1;
470 static int hf_gsm_a_rr_sc
= -1;
471 static int hf_gsm_a_rr_algorithm_id
= -1;
472 static int hf_gsm_a_rr_cr
= -1;
473 static int hf_gsm_a_rr_multirate_speech_ver
= -1;
474 static int hf_gsm_a_rr_NCSB
= -1;
475 static int hf_gsm_a_rr_ICMI
= -1;
476 static int hf_gsm_a_rr_start_mode
= -1;
477 static int hf_gsm_a_rr_timing_adv
= -1;
478 static int hf_gsm_a_rr_time_diff
= -1;
479 static int hf_gsm_a_rr_tlli
= -1;
480 static int hf_gsm_a_rr_tmsi_ptmsi
= -1;
481 static int hf_gsm_a_rr_target_mode
= -1;
482 static int hf_gsm_a_rr_wait_indication
= -1;
483 static int hf_gsm_a_rr_seq_code
= -1;
484 static int hf_gsm_a_rr_group_cipher_key_number
= -1;
485 static int hf_gsm_a_rr_MBMS_multicast
= -1;
486 static int hf_gsm_a_rr_MBMS_broadcast
= -1;
487 static int hf_gsm_a_rr_last_segment
= -1;
488 static int hf_gsm_a_rr_carrier_ind
= -1;
489 static int hf_gsm_a_rr_ra
= -1;
490 static int hf_gsm_a_rr_T1prim
= -1;
491 static int hf_gsm_a_rr_T3
= -1;
492 static int hf_gsm_a_rr_T2
= -1;
493 static int hf_gsm_a_rr_tbf_T1prim
= -1;
494 static int hf_gsm_a_rr_tbf_T3
= -1;
495 static int hf_gsm_a_rr_tbf_T2
= -1;
496 static int hf_gsm_a_rr_rfn
= -1;
497 static int hf_gsm_a_rr_RR_cause
= -1;
498 static int hf_gsm_a_rr_cm_cng_msg_req
= -1;
499 static int hf_gsm_a_rr_utran_cm_cng_msg_req
= -1;
500 static int hf_gsm_a_rr_cdma200_cm_cng_msg_req
= -1;
501 static int hf_gsm_a_rr_geran_iu_cm_cng_msg_req
= -1;
502 int hf_gsm_a_rr_chnl_needed_ch1
= -1;
503 static int hf_gsm_a_rr_chnl_needed_ch2
= -1;
504 static int hf_gsm_a_rr_chnl_needed_ch3
= -1;
505 static int hf_gsm_a_rr_chnl_needed_ch4
= -1;
506 static int hf_gsm_a_rr_pkt_estab_cause
= -1;
507 static int hf_gsm_a_rr_peak_throughput_class
= -1;
508 static int hf_gsm_a_rr_radio_priority
= -1;
509 static int hf_gsm_a_rr_llc_pdu_type
= -1;
510 static int hf_gsm_a_rr_rlc_octet_count
= -1;
511 static int hf_gsm_a_rr_rlc_non_pers_mode_cap
= -1;
512 static int hf_gsm_a_rr_reduced_latency_cap
= -1;
513 static int hf_gsm_a_rr_ul_egprs2
= -1;
514 static int hf_gsm_a_rr_dl_egprs2
= -1;
515 static int hf_gsm_a_rr_emst_ms_cap
= -1;
516 static int hf_gsm_a_rr_suspension_cause
= -1;
517 static int hf_gsm_a_rr_apdu_id
= -1;
518 static int hf_gsm_a_rr_apdu_flags
= -1;
519 static int hf_gsm_a_rr_set_of_amr_codec_modes_v1_b8
= -1;
520 static int hf_gsm_a_rr_set_of_amr_codec_modes_v1_b7
= -1;
521 static int hf_gsm_a_rr_set_of_amr_codec_modes_v1_b6
= -1;
522 static int hf_gsm_a_rr_set_of_amr_codec_modes_v1_b5
= -1;
523 static int hf_gsm_a_rr_set_of_amr_codec_modes_v1_b4
= -1;
524 static int hf_gsm_a_rr_set_of_amr_codec_modes_v1_b3
= -1;
525 static int hf_gsm_a_rr_set_of_amr_codec_modes_v1_b2
= -1;
526 static int hf_gsm_a_rr_set_of_amr_codec_modes_v1_b1
= -1;
527 static int hf_gsm_a_rr_set_of_amr_codec_modes_v2_b5
= -1;
528 static int hf_gsm_a_rr_set_of_amr_codec_modes_v2_b4
= -1;
529 static int hf_gsm_a_rr_set_of_amr_codec_modes_v2_b3
= -1;
530 static int hf_gsm_a_rr_set_of_amr_codec_modes_v2_b2
= -1;
531 static int hf_gsm_a_rr_set_of_amr_codec_modes_v2_b1
= -1;
532 static int hf_gsm_a_rr_amr_threshold
= -1;
533 static int hf_gsm_a_rr_amr_hysteresis
= -1;
534 static int hf_gsm_a_rr_pwrc
= -1;
535 static int hf_gsm_a_rr_dtx_bcch
= -1;
536 static int hf_gsm_a_rr_dtx_sacch
= -1;
537 static int hf_gsm_a_rr_radio_link_timeout
= -1;
538 static int hf_gsm_a_rr_cell_reselect_hyst
= -1;
539 static int hf_gsm_a_rr_ms_txpwr_max_cch
= -1;
540 static int hf_gsm_a_rr_acs
= -1;
541 static int hf_gsm_a_rr_neci
= -1;
542 static int hf_gsm_a_rr_rxlev_access_min
= -1;
543 static int hf_gsm_a_rr_mscr
= -1;
544 static int hf_gsm_a_rr_att
= -1;
545 static int hf_gsm_a_rr_ccch_conf
= -1;
546 static int hf_gsm_a_rr_cbq3
= -1;
547 static int hf_gsm_a_rr_bs_pa_mfrms
= -1;
548 static int hf_gsm_a_rr_bs_ag_blks_res
= -1;
549 int hf_gsm_a_rr_t3212
= -1;
550 static int hf_gsm_a_rr_gsm_band
= -1;
551 static int hf_gsm_a_rr_arfcn_first
= -1;
552 static int hf_gsm_a_rr_band_offset
= -1;
553 static int hf_gsm_a_rr_arfcn_range
= -1;
554 static int hf_gsm_a_rr_lowest_arfcn
= -1;
555 static int hf_gsm_a_rr_inc_skip_arfcn
= -1;
556 static int hf_gsm_a_rr_gprs_resumption_ack
= -1;
557 static int hf_gsm_a_rr_ext_ind
= -1;
558 static int hf_gsm_a_rr_ba_ind
= -1;
559 static int hf_gsm_a_rr_multiband_reporting
= -1;
560 static int hf_gsm_a_rr_ncc_permitted
= -1;
561 static int hf_gsm_a_rr_max_retrans
= -1;
562 static int hf_gsm_a_rr_tx_integer
= -1;
563 static int hf_gsm_a_rr_cell_barr_access
= -1;
564 static int hf_gsm_a_rr_re
= -1;
565 static int hf_gsm_a_rr_acc
= -1;
566 static int hf_gsm_a_rr_nch_position
= -1;
567 static int hf_gsm_a_rr_si2ter_mp_change_mark
= -1;
568 static int hf_gsm_a_rr_si2ter_3g_change_mark
= -1;
569 static int hf_gsm_a_rr_si2ter_index
= -1;
570 static int hf_gsm_a_rr_si2ter_count
= -1;
571 static int hf_gsm_a_rr_fdd_uarfcn
= -1;
572 static int hf_gsm_a_rr_bandwidth_fdd
= -1;
573 static int hf_gsm_a_rr_tdd_uarfcn
= -1;
574 static int hf_gsm_a_rr_bandwidth_tdd
= -1;
575 static int hf_gsm_a_rr_arfcn
= -1;
576 static int hf_gsm_a_rr_bsic
= -1;
577 static int hf_gsm_a_rr_qsearch_i
= -1;
578 static int hf_gsm_a_rr_fdd_qoffset
= -1;
579 static int hf_gsm_a_rr_fdd_qmin
= -1;
580 static int hf_gsm_a_rr_tdd_qoffset
= -1;
581 static int hf_gsm_a_rr_fdd_qmin_offset
= -1;
582 static int hf_gsm_a_rr_fdd_rscpmin
= -1;
583 static int hf_gsm_a_rr_3g_ba_ind
= -1;
584 static int hf_gsm_a_rr_mp_change_mark
= -1;
585 static int hf_gsm_a_rr_si2quater_index
= -1;
586 static int hf_gsm_a_rr_si2quater_count
= -1;
587 static int hf_gsm_a_rr_gsm_report_type
= -1;
588 static int hf_gsm_a_rr_serving_band_reporting
= -1;
589 static int hf_gsm_a_rr_frequency_scrolling
= -1;
590 static int hf_gsm_a_rr_rep_priority
= -1;
591 static int hf_gsm_a_rr_report_type
= -1;
592 static int hf_gsm_a_rr_reporting_rate
= -1;
593 static int hf_gsm_a_rr_invalid_bsic_reporting
= -1;
594 static int hf_gsm_a_rr_scale_ord
= -1;
595 static int hf_gsm_a_rr_900_reporting_offset
= -1;
596 static int hf_gsm_a_rr_900_reporting_threshold
= -1;
597 static int hf_gsm_a_rr_1800_reporting_offset
= -1;
598 static int hf_gsm_a_rr_1800_reporting_threshold
= -1;
599 static int hf_gsm_a_rr_400_reporting_offset
= -1;
600 static int hf_gsm_a_rr_400_reporting_threshold
= -1;
601 static int hf_gsm_a_rr_1900_reporting_offset
= -1;
602 static int hf_gsm_a_rr_1900_reporting_threshold
= -1;
603 static int hf_gsm_a_rr_850_reporting_offset
= -1;
604 static int hf_gsm_a_rr_850_reporting_threshold
= -1;
605 static int hf_gsm_a_rr_network_control_order
= -1;
606 static int hf_gsm_a_rr_nc_non_drx_period
= -1;
607 static int hf_gsm_a_rr_nc_reporting_period_i
= -1;
608 static int hf_gsm_a_rr_nc_reporting_period_t
= -1;
609 static int hf_gsm_a_rr_index_start_3g
= -1;
610 static int hf_gsm_a_rr_absolute_index_start_emr
= -1;
611 static int hf_gsm_a_rr_qsearch_c_initial
= -1;
612 static int hf_gsm_a_rr_fdd_rep_quant
= -1;
613 static int hf_gsm_a_rr_fdd_multirat_reporting
= -1;
614 static int hf_gsm_a_rr_tdd_multirat_reporting
= -1;
615 static int hf_gsm_a_rr_qsearch_p
= -1;
616 static int hf_gsm_a_rr_3g_search_prio
= -1;
617 static int hf_gsm_a_rr_fdd_reporting_offset
= -1;
618 static int hf_gsm_a_rr_fdd_reporting_threshold_rscp
= -1;
619 static int hf_gsm_a_rr_fdd_reporting_threshold_ecn0
= -1;
620 static int hf_gsm_a_rr_tdd_reporting_offset
= -1;
621 static int hf_gsm_a_rr_tdd_reporting_threshold_rscp
= -1;
622 static int hf_gsm_a_rr_tdd_reporting_threshold_ecn0
= -1;
623 static int hf_gsm_a_rr_fdd_reporting_threshold_2
= -1;
624 static int hf_gsm_a_rr_3g_ccn_active
= -1;
625 static int hf_gsm_a_rr_700_reporting_offset
= -1;
626 static int hf_gsm_a_rr_700_reporting_threshold
= -1;
627 static int hf_gsm_a_rr_810_reporting_offset
= -1;
628 static int hf_gsm_a_rr_810_reporting_threshold
= -1;
629 static int hf_gsm_a_rr_cbq
= -1;
630 static int hf_gsm_a_rr_cell_reselect_offset
= -1;
631 static int hf_gsm_a_rr_temporary_offset
= -1;
632 static int hf_gsm_a_rr_penalty_time
= -1;
633 static int hf_gsm_a_rr_gprs_ra_colour
= -1;
634 static int hf_gsm_a_rr_si13_position
= -1;
635 static int hf_gsm_a_rr_power_offset
= -1;
636 static int hf_gsm_a_rr_si2quater_position
= -1;
637 static int hf_gsm_a_rr_si13alt_position
= -1;
638 static int hf_gsm_a_rr_prio_thr
= -1;
639 static int hf_gsm_a_rr_lsa_offset
= -1;
640 static int hf_gsm_a_rr_cell_id
= -1;
641 static int hf_gsm_a_rr_paging_channel_restructuring
= -1;
642 static int hf_gsm_a_rr_nln_sacch
= -1;
643 static int hf_gsm_a_rr_nln_status_sacch
= -1;
644 static int hf_gsm_a_rr_nln_pch
= -1;
645 static int hf_gsm_a_rr_nln_status_pch
= -1;
646 static int hf_gsm_a_rr_vbs_vgcs_inband_notifications
= -1;
647 static int hf_gsm_a_rr_vbs_vgcs_inband_pagings
= -1;
648 static int hf_gsm_a_rr_rac
= -1;
649 static int hf_gsm_a_rr_max_lapdm
= -1;
650 static int hf_gsm_a_rr_gprs_ms_txpwr_max_ccch
= -1;
651 static int hf_gsm_a_rr_dedicated_mode_mbms_notification_support
= -1;
652 static int hf_gsm_a_rr_mnci_support
= -1;
653 static int hf_gsm_a_rr_amr_config
= -1;
654 static int hf_gsm_a_rr_bcch_change_mark
= -1;
655 static int hf_gsm_a_rr_si_change_field
= -1;
656 static int hf_gsm_a_rr_si13_change_mark
= -1;
657 static int hf_gsm_a_rr_hsn
= -1;
658 static int hf_gsm_a_rr_rfl_number
= -1;
659 static int hf_gsm_a_rr_arfcn_index
= -1;
660 static int hf_gsm_a_rr_ma_length
= -1;
661 static int hf_gsm_a_rr_psi1_repeat_period
= -1;
662 static int hf_gsm_a_rr_pbcch_pb
= -1;
663 static int hf_gsm_a_rr_pbcch_tsc
= -1;
664 static int hf_gsm_a_rr_pbcch_tn
= -1;
665 static int hf_gsm_a_rr_spgc_ccch_sup
= -1;
666 static int hf_gsm_a_rr_priority_access_thr
= -1;
667 static int hf_gsm_a_rr_nmo
= -1;
668 static int hf_gsm_a_rr_t3168
= -1;
669 static int hf_gsm_a_rr_t3192
= -1;
670 static int hf_gsm_a_rr_drx_timer_max
= -1;
671 static int hf_gsm_a_rr_access_burst_type
= -1;
672 static int hf_gsm_a_rr_control_ack_type
= -1;
673 static int hf_gsm_a_rr_bs_cv_max
= -1;
674 static int hf_gsm_a_rr_pan_dec
= -1;
675 static int hf_gsm_a_rr_pan_inc
= -1;
676 static int hf_gsm_a_rr_pan_max
= -1;
677 static int hf_gsm_a_rr_egprs_packet_channel_request
= -1;
678 static int hf_gsm_a_rr_bep_period
= -1;
679 static int hf_gsm_a_rr_pfc_feature_mode
= -1;
680 static int hf_gsm_a_rr_dtm_support
= -1;
681 static int hf_gsm_a_rr_bss_paging_coordination
= -1;
682 static int hf_gsm_a_rr_ccn_active
= -1;
683 static int hf_gsm_a_rr_nw_ext_utbf
= -1;
684 static int hf_gsm_a_rr_multiple_tbf_capability
= -1;
685 static int hf_gsm_a_rr_ext_utbf_no_data
= -1;
686 static int hf_gsm_a_rr_dtm_enhancements_capability
= -1;
687 static int hf_gsm_a_rr_reduced_latency_access
= -1;
688 static int hf_gsm_a_rr_alpha
= -1;
689 static int hf_gsm_a_rr_t_avg_w
= -1;
690 static int hf_gsm_a_rr_t_avg_t
= -1;
691 static int hf_gsm_a_rr_pc_meas_chan
= -1;
692 static int hf_gsm_a_rr_n_avg_i
= -1;
693 static int hf_gsm_a_rr_sgsnr
= -1;
694 static int hf_gsm_a_rr_si_status_ind
= -1;
695 static int hf_gsm_a_rr_lb_ms_txpwr_max_cch
= -1;
696 static int hf_gsm_a_rr_si2n_support
= -1;
697 static int hf_gsm_a_rr_mi_index
= -1;
698 static int hf_gsm_a_rr_mi_count
= -1;
699 static int hf_gsm_a_rr_3g_wait
= -1;
700 static int hf_gsm_a_rr_qsearch_c
= -1;
701 static int hf_gsm_a_rr_bsic_seen
= -1;
702 static int hf_gsm_a_rr_scale
= -1;
703 static int hf_gsm_a_rr_mean_bep_gmsk
= -1;
704 static int hf_gsm_a_rr_mean_cv_bep
= -1;
705 static int hf_gsm_a_rr_nbr_rcvd_blocks
= -1;
706 static int hf_gsm_a_rr_reporting_quantity
= -1;
707 static int hf_gsm_a_rr_extended_ra
= -1;
708 static int hf_gsm_a_rr_access_tech_type
= -1;
709 static int hf_gsm_a_rr_tfi_assignment
= -1;
710 static int hf_gsm_a_rr_polling
= -1;
711 static int hf_gsm_a_rr_usf
= -1;
712 static int hf_gsm_a_rr_usf_granularity
= -1;
713 static int hf_gsm_a_rr_p0
= -1;
714 static int hf_gsm_a_rr_pr_mode
= -1;
715 static int hf_gsm_a_rr_egprs_mcs
= -1;
716 static int hf_gsm_a_rr_tlli_block_channel_coding
= -1;
717 static int hf_gsm_a_rr_bep_period2
= -1;
718 static int hf_gsm_a_rr_resegment
= -1;
719 static int hf_gsm_a_rr_egprs_window_size
= -1;
720 static int hf_gsm_a_rr_gamma
= -1;
721 static int hf_gsm_a_rr_timing_adv_index
= -1;
722 static int hf_gsm_a_rr_timing_adv_timeslot_num
= -1;
723 static int hf_gsm_a_rr_tbf_starting_time
= -1;
724 static int hf_gsm_a_rr_num_of_radio_block_allocated
= -1;
725 static int hf_gsm_a_rr_pfi
= -1;
726 static int hf_gsm_a_rr_mbms_service_id
= -1;
727 static int hf_gsm_a_rr_ms_id
= -1;
728 static int hf_gsm_a_rr_gprs_cs
= -1;
729 static int hf_gsm_a_rr_rlc_mode
= -1;
730 static int hf_gsm_a_rr_ta_valid
= -1;
731 static int hf_gsm_a_rr_link_quality_meas_mode
= -1;
732 static int hf_gsm_a_rr_emr_bitmap_length
= -1;
733 static int hf_gsm_a_rr_eutran_mr_n_eutran
= -1;
734 static int hf_gsm_a_rr_eutran_mr_freq_idx
= -1;
735 static int hf_gsm_a_rr_eutran_mr_cell_id
= -1;
736 static int hf_gsm_a_rr_eutran_mr_rpt_quantity
= -1;
737 static int hf_gsm_a_rr_ma_channel_set
= -1;
738 static int hf_n_range_orig_arfcn
= -1;
742 /* Additions in Rel-8 */
743 static int hf_gsm_a_rr_3g_priority_param_desc_utran_start
= -1;
744 static int hf_gsm_a_rr_3g_priority_param_desc_utran_stop
= -1;
745 static int hf_gsm_a_rr_3g_priority_param_desc_default_utran_prio
= -1;
746 static int hf_gsm_a_rr_3g_priority_param_desc_default_threshold_utran
= -1;
747 static int hf_gsm_a_rr_3g_priority_param_desc_default_utran_qrxlevmin
= -1;
748 static int hf_gsm_a_rr_utran_frequency_index
= -1;
749 static int hf_gsm_a_rr_utran_priority
= -1;
750 static int hf_gsm_a_rr_thresh_utran_high
= -1;
751 static int hf_gsm_a_rr_thresh_utran_low
= -1;
752 static int hf_gsm_a_rr_utran_qrxlevmin
= -1;
753 static int hf_gsm_a_rr_eutran_ccn_active
= -1;
754 static int hf_gsm_a_rr_eutran_start
= -1;
755 static int hf_gsm_a_rr_eutran_stop
= -1;
756 static int hf_gsm_a_rr_qsearch_c_eutran_initial
= -1;
757 static int hf_gsm_a_rr_eutran_multirat_reporting
= -1;
758 static int hf_gsm_a_rr_eutran_fdd_reporting_threshold_rsrp
= -1;
759 static int hf_gsm_a_rr_eutran_fdd_reporting_threshold_rsrq
= -1;
760 static int hf_gsm_a_rr_eutran_fdd_reporting_threshold_2
= -1;
761 static int hf_gsm_a_rr_eutran_fdd_reporting_offset
= -1;
762 static int hf_gsm_a_rr_eutran_tdd_reporting_threshold_rsrp
= -1;
763 static int hf_gsm_a_rr_eutran_tdd_reporting_threshold_rsrq
= -1;
764 static int hf_gsm_a_rr_eutran_tdd_reporting_threshold_2
= -1;
765 static int hf_gsm_a_rr_eutran_tdd_reporting_offset
= -1;
766 static int hf_gsm_a_rr_eutran_fdd_measurement_report_offset
= -1;
767 static int hf_gsm_a_rr_eutran_tdd_measurement_report_offset
= -1;
768 static int hf_gsm_a_rr_reporting_granularity
= -1;
769 static int hf_gsm_a_rr_eutran_default_measurement_control_eutran
= -1;
770 static int hf_gsm_a_rr_eutran_measurement_control_eutran
= -1;
771 static int hf_gsm_a_rr_qsearch_p_eutran
= -1;
772 static int hf_gsm_a_rr_serving_cell_priority_param_geran_priority
= -1;
773 static int hf_gsm_a_rr_serving_cell_priority_param_thresh_prio_search
= -1;
774 static int hf_gsm_a_rr_serving_cell_priority_param_thresh_gsm_low
= -1;
775 static int hf_gsm_a_rr_serving_cell_priority_param_h_prio
= -1;
776 static int hf_gsm_a_rr_serving_cell_priority_param_t_reselection
= -1;
777 static int hf_gsm_a_rr_eutran_earfcn
= -1;
778 static int hf_gsm_a_rr_eutran_measurement_bandwidth
= -1;
779 static int hf_gsm_a_rr_eutran_priority
= -1;
780 static int hf_gsm_a_rr_thresh_eutran_high
= -1;
781 static int hf_gsm_a_rr_thresh_eutran_low
= -1;
782 static int hf_gsm_a_rr_eutran_qrxlevmin
= -1;
783 static int hf_gsm_a_rr_eutran_pcid
= -1;
784 static int hf_gsm_a_rr_eutran_pcid_bitmap_group
= -1;
785 static int hf_gsm_a_rr_eutran_pcid_pattern_length
= -1;
786 /* static int hf_gsm_a_rr_eutran_pcid_pattern = -1; */
787 static int hf_gsm_a_rr_eutran_pcid_pattern_sense
= -1;
788 static int hf_gsm_a_rr_eutran_frequency_index
= -1;
789 static int hf_gsm_a_rr_psc
= -1;
790 static int hf_gsm_a_rr_utran_psc_pattern_length
= -1;
791 static int hf_gsm_a_rr_utran_psc_pattern_sense
= -1;
792 static int hf_gsm_a_rr_utran_csg_fdd_uarfcn
= -1;
793 static int hf_gsm_a_rr_utran_csg_tdd_uarfcn
= -1;
794 static int hf_gsm_a_rr_csg_earfcn
= -1;
795 static int hf_gsm_a_rr_3g_control_param_desc_meas_ctrl_utran
= -1;
797 /* Initialize the subtree pointers */
798 static gint ett_ccch_msg
= -1;
799 static gint ett_ccch_oct_1
= -1;
800 static gint ett_sacch_msg
= -1;
802 static expert_field ei_gsm_a_rr_ie_overrun
= EI_INIT
;
803 static expert_field ei_gsm_a_rr_ie_underrun
= EI_INIT
;
805 static char a_bigbuf
[1024];
807 static dissector_handle_t data_handle
;
808 static dissector_handle_t rrlp_dissector
;
811 #define NUM_GSM_RR_ELEM (sizeof(gsm_rr_elem_strings)/sizeof(value_string))
812 gint ett_gsm_rr_elem
[NUM_GSM_RR_ELEM
];
816 /* RR Rest Octets information elements */
817 DE_RR_REST_OCTETS_UTRAN_FDD_DESC
,
818 DE_RR_REST_OCTETS_UTRAN_TDD_DESC
,
819 DE_RR_REST_OCTETS_3G_MEAS_PARAM_DESC
,
820 DE_RR_REST_OCTETS_3G_ADD_MEAS_PARAM_DESC
,
821 DE_RR_REST_OCTETS_MEAS_PARAM_DESC
,
822 DE_RR_REST_OCTETS_GPRS_RTD_DESC
,
823 DE_RR_REST_OCTETS_GPRS_BSIC_DESC
,
824 DE_RR_REST_OCTETS_GPRS_REPORT_PRIO_DESC
,
825 DE_RR_REST_OCTETS_GPRS_MEAS_PARAM_DESC
,
826 DE_RR_REST_OCTETS_NC_MEAS_PARAM
,
827 DE_RR_REST_OCTETS_SI2Q_EXT_INFO
,
828 DE_RR_REST_OCTETS_CCN_SUPPORT_DESC
,
829 DE_RR_REST_OCTETS_3G_NEIGH_CELL_DESC
,
830 DE_RR_REST_OCTETS_FDD_CELL_INFORMATION_FIELD
,
831 DE_RR_REST_OCTETS_TDD_CELL_INFORMATION_FIELD
,
832 DE_RR_REST_OCTETS_GPRS_3G_MEAS_PARAM_DESC
,
833 DE_RR_REST_OCTETS_3G_ADD_MEAS_PARAM_DESC2
,
834 DE_RR_REST_OCTETS_PRIORITY_AND_EUTRAN_PARAM_DESC
,
835 DE_RR_REST_OCTETS_SERVING_CELL_PRIORITY_PARAM_DESC
,
836 DE_RR_REST_OCTETS_3G_PRIORITY_PARAM_DESC
,
837 DE_RR_REST_OCTETS_UTRAN_PRIO_PARAM
,
838 DE_RR_REST_OCTETS_EUTRAN_PARAM_DESC
,
839 DE_RR_REST_OCTETS_EUTRAN_NEIGHBOUR_CELLS
,
840 DE_RR_REST_OCTETS_EUTRAN_NOT_ALLOWED_CELLS
,
841 DE_RR_REST_OCTETS_EUTRAN_PCID_TO_TA_MAPPING
,
842 DE_RR_REST_OCTETS_3G_CSG_DESC
,
843 DE_RR_REST_OCTETS_EUTRAN_CSG_DESC
,
844 DE_RR_REST_OCTETS_OPTIONAL_SEL_PARAM
,
845 DE_RR_REST_OCTETS_GPRS_INDICATOR
,
846 DE_RR_REST_OCTETS_SI4_REST_OCTETS_O
,
847 DE_RR_REST_OCTETS_SI4_REST_OCTETS_S
,
848 DE_RR_REST_OCTETS_LSA_PARAMETERS
,
849 DE_RR_REST_OCTETS_LSA_ID_INFO
,
850 DE_RR_REST_OCTETS_PCH_AND_NCH_INFO
,
851 DE_RR_REST_OCTETS_VBS_VGCS_OPTIONS
,
852 DE_RR_REST_OCTETS_GPRS_MOBILE_ALLOC
,
853 DE_RR_REST_OCTETS_GPRS_CELL_OPTIONS
,
854 DE_RR_REST_OCTETS_GPRS_CELL_OPTIONS_EXT_INFO
,
855 DE_RR_REST_OCTETS_GPRS_POWER_CONTROL_PARAMS
,
856 DE_RR_REST_OCTETS_PBCCH_DESC
,
857 DE_RR_REST_OCTETS_GSM_DESC
,
858 DE_RR_REST_OCTETS_RTD_DESC
,
859 DE_RR_REST_OCTETS_BSIC_DESC
,
860 DE_RR_REST_OCTETS_REPORT_PRIO_DESC
,
861 DE_RR_REST_OCTETS_CDMA2000_DESC
,
862 DE_RR_REST_OCTETS_SERVING_CELL_DATA
,
863 DE_RR_REST_OCTETS_REPEAT_INV_BSIC_INFO
,
864 DE_RR_REST_OCTETS_BITMAP_TYPE_REPORTING
,
865 DE_RR_REST_OCTETS_3G_SUPPLEMENTARY_PARAM_DESC
,
866 DE_RR_REST_OCTETS_UTRAN_MEASUREMENT_CONTROL_PARAM_DESC
,
867 DE_RR_REST_OCTETS_EGPRS_PACKET_UPLINK_ASSIGNMENT
,
868 DE_RR_REST_OCTETS_MULTIPLE_BLOCKS_PACKET_DOWNLINK_ASSIGNMENT
,
869 DE_RR_REST_OCTETS_TMGI
,
870 DE_RR_REST_OCTETS_PACKET_TIMING_ADVANCE
,
871 DE_RR_REST_OCTETS_PACKET_UPLINK_ASSIGNMENT
,
872 DE_RR_REST_OCTETS_PACKET_DOWNLINK_ASSIGNMENT
,
873 DE_RR_REST_OCTETS_SECOND_PART_PACKET_ASSIGNMENT
,
874 DE_RR_REST_OCTETS_REPORTING_QUANTITY
,
875 DE_RR_REST_OCTETS_EUTRAN_MEASUREMENT_REPORT
,
876 DE_RR_REST_OCTETS_NONE
878 rr_rest_octets_elem_idx_t
;
880 #define NUM_GSM_RR_REST_OCTETS_ELEM (sizeof(gsm_rr_rest_octets_elem_strings)/sizeof(value_string))
881 gint ett_gsm_rr_rest_octets_elem
[NUM_GSM_RR_REST_OCTETS_ELEM
];
884 * Generates a string representing the bits in a bitfield at "bit_offset" from an 8 bit boundary
885 * with the length in bits of no_of_bits based on value.
889 /* this function is used for dissecting the 0/1 presence flags in CSN.1 coded IEs */
890 static gboolean
gsm_rr_csn_flag(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
, const char *description
, const char *true_string
, const char * false_string
)
892 guint8 bit_mask
= 0x80 >> (bit_offset
% 8);
893 guint8 value
= tvb_get_guint8(tvb
, bit_offset
>> 3);
894 guint8 offset_in_octet
= bit_offset
% 8;
895 char bits_str
[] = {".... ...."};
897 if (value
& bit_mask
)
899 bits_str
[offset_in_octet
+ (offset_in_octet
/ 4)] = '1';
900 proto_tree_add_text(tree
, tvb
, bit_offset
>>3, 1, "%s: %s: %s", bits_str
, description
, true_string
);
903 bits_str
[offset_in_octet
+ (offset_in_octet
/ 4)] = '0';
904 proto_tree_add_text(tree
, tvb
, bit_offset
>>3, 1, "%s: %s: %s", bits_str
, description
, false_string
);
908 /* this function is used for dissecting the H/L presence flags in CSN.1 coded IEs"
909 If truncation ( 44.018 section 8.9) is allowed, truncation_length is set to the actual bit length of the CSN.1 string,
910 otherwise it is set to 0 */
911 static gboolean
gsm_rr_csn_HL_flag(tvbuff_t
*tvb
, proto_tree
*tree
, guint truncation_length
, guint bit_offset
, const char *description
, const char *true_string
, const char * false_string
)
913 guint8 bit_mask
= 0x80 >> (bit_offset
% 8);
914 guint8 value
= PADDING_BYTE
;
915 char bits_str
[] = {".... ...."};
916 guint8 offset_in_octet
= bit_offset
% 8;
918 if (truncation_length
)
920 if (bit_offset
< truncation_length
)
922 /* there should be some real data to fetch */
923 value
= tvb_get_guint8(tvb
, bit_offset
>> 3)^PADDING_BYTE
;
928 proto_tree_add_text(tree
, tvb
, truncation_length
>>3, 1, "(implicit L bit): %s: %s", description
, false_string
);
934 /* if truncation_length == 0, then don't check for truncation*/
935 value
= tvb_get_guint8(tvb
, bit_offset
>> 3)^PADDING_BYTE
;
938 if (value
& bit_mask
)
940 bits_str
[offset_in_octet
+ (offset_in_octet
/ 4)] = 'H';
941 proto_tree_add_text(tree
, tvb
, bit_offset
>>3, 1, "%s: %s: %s", bits_str
, description
, true_string
);
944 bits_str
[offset_in_octet
+ (offset_in_octet
/ 4)] = 'L';
945 proto_tree_add_text(tree
, tvb
, bit_offset
>>3, 1, "%s: %s: %s", bits_str
, description
, false_string
);
950 10.5.2 Radio Resource management information elements
951 * [3] 10.5.2.1a BA Range
954 de_rr_ba_range(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
)
960 curr_offset
= offset
;
961 proto_tree_add_item(tree
, hf_gsm_a_rr_range_nb
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
962 value
= tvb_get_guint8(tvb
, curr_offset
);
964 bit_offset
= curr_offset
<< 3;
967 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_range_lower
, tvb
, bit_offset
, 10, ENC_BIG_ENDIAN
);
969 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_range_higher
, tvb
, bit_offset
, 10, ENC_BIG_ENDIAN
);
974 curr_offset
+= len
- 1;
975 return (curr_offset
- offset
);
979 * [3] 10.5.2.1b Cell Channel Description
982 #define ARFCN_MAX 1024 /* total number of ARFCNs defined */
984 static void display_channel_list(guint8
*list
, tvbuff_t
*tvb
, proto_tree
*tree
, guint32 offset
, guint len
)
987 proto_item
*ti
= NULL
;
989 ti
= proto_tree_add_text(tree
, tvb
, offset
, len
, "List of ARFCNs =");
990 for (arfcn
=0; arfcn
<ARFCN_MAX
; arfcn
++) {
992 proto_item_append_text(ti
, " %d", arfcn
);
999 * Checks that the remaining "rest octets" all contain the default padding value.
1000 * If not, it can be assumed that there is a protocol extension
1001 * that we don't handle,
1002 * or a malformed PDU.
1004 * len: total length of buffer
1005 * bit_offset: bit offset in TVB of first bit to be examined
1007 static void gsm_rr_csn_padding_bits(proto_tree
* tree
, tvbuff_t
* tvb
, guint16 bit_offset
, guint8 octet_len
)
1010 gboolean non_padding_found
= FALSE
;
1011 guint8 octet_offset
= bit_offset
>> 3;
1013 if ((octet_len
<< 3) > bit_offset
)
1015 /* there is spare room, check the first padding octet */
1016 guint8 bit_mask
= 0xFF >> (bit_offset
& 0x07);
1017 if ((tvb_get_guint8(tvb
, octet_offset
) & bit_mask
) != (PADDING_BYTE
& bit_mask
))
1019 non_padding_found
= TRUE
;
1023 for (i
=octet_offset
+1; (i
<octet_len
) && !non_padding_found
; i
++)
1025 if (tvb_get_guint8(tvb
, i
) != PADDING_BYTE
)
1026 non_padding_found
= TRUE
;
1030 if (non_padding_found
)
1032 /* there is something here we don't understand */
1033 proto_tree_add_text(tree
, tvb
, octet_offset
, -1,"Padding Bits: Unknown extension detected or malformed PDU (Not decoded)");
1037 proto_tree_add_text(tree
, tvb
, octet_offset
, -1,"Padding Bits: default padding");
1042 proto_tree_add_text(tree
, tvb
, 0, 0,"No space for padding bits");
1046 static gint
greatest_power_of_2_lesser_or_equal_to(gint idx
)
1056 gint
f_k(gint k
, gint
*w
, gint range
)
1062 range
= range
/greatest_power_of_2_lesser_or_equal_to(idx
);
1066 j
= greatest_power_of_2_lesser_or_equal_to(idx
);
1068 if ((2*idx
) < 3*j
){ /* left child */
1070 n
= (n
+w
[idx
]-1+((range
-1)/2)+1)%range
;
1072 else { /* right child */
1074 n
= (n
+w
[idx
]-1+1)%range
;
1081 static void dissect_channel_list_n_range(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
, gint range
)
1083 gint curr_offset
= offset
, bit_offset
, f0
, arfcn_orig
, w
[64], wsize
, i
;
1084 gint octet
, nwi
= 1, jwi
=0, imax
, iused
, arfcn
;
1087 proto_tree
*subtree
;
1089 memset((void*)list
,0,sizeof(list
));
1091 item
= proto_tree_add_text(tree
,tvb
, curr_offset
, len
, "Range %d format", range
);
1092 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_elem
[DE_RR_NEIGH_CELL_DESC
]);
1094 octet
= tvb_get_guint8(tvb
, curr_offset
);
1095 if (range
== 1024) {
1102 bit_offset
= curr_offset
*8 + 6;
1105 bit_offset
= curr_offset
*8 + 7;
1106 arfcn_orig
= (gint
) tvb_get_bits(tvb
, bit_offset
, 10, FALSE
);
1107 proto_tree_add_bits_item(subtree
, hf_n_range_orig_arfcn
, tvb
, bit_offset
, 10, ENC_BIG_ENDIAN
);
1110 list
[arfcn_orig
] = 1;
1126 DISSECTOR_ASSERT_NOT_REACHED();
1129 iused
= imax
; /* in case the list is actually full */
1131 /* extract the variable size w[] elements */
1132 for (i
=1; i
<=imax
; i
++) {
1133 w
[i
] = (gint
) tvb_get_bits(tvb
, bit_offset
, wsize
, FALSE
);
1134 proto_tree_add_text(subtree
, tvb
, bit_offset
>>3, ((bit_offset
+wsize
-1)>>3) - (bit_offset
>>3) + 1 , "%s %s(%d): %d",
1135 decode_bits_in_field(bit_offset
, wsize
, w
[i
]),
1139 bit_offset
+= wsize
;
1140 curr_offset
= bit_offset
>>3;
1142 if ((iused
== imax
) && (w
[i
] == 0) ) {
1145 if ((curr_offset
-offset
)>len
) {
1149 if (++jwi
== nwi
) { /* check if the number of wi at this wsize has been extracted */
1150 jwi
= 0; /* reset the count of wi at this size */
1151 nwi
<<= 1; /* get twice as many of the next size */
1152 wsize
--; /* make the next size 1 bit smaller */
1156 for (i
=1; i
<=iused
; i
++) {
1157 arfcn
= (f_k(i
, w
, range
) + arfcn_orig
)%1024;
1161 display_channel_list(list
, tvb
, tree
, offset
, curr_offset
-offset
);
1167 dissect_arfcn_list_core(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
, guint8 format
)
1169 guint32 curr_offset
, byte
;
1174 curr_offset
= offset
;
1176 if ((format
& 0xc0) == 0x00)
1179 item
= proto_tree_add_text(tree
,tvb
, curr_offset
, len
, "List of ARFCNs =");
1182 for (byte
= 0; byte
<= len
-1; byte
++)
1184 oct
= tvb_get_guint8(tvb
, curr_offset
);
1188 if (((oct
>> bit
) & 1) == 1)
1190 proto_item_append_text(item
," %d",arfcn
);
1197 else if ((format
& 0xc8) == 0x80)
1200 dissect_channel_list_n_range(tvb
, tree
, pinfo
, curr_offset
, len
, 1024);
1201 curr_offset
= curr_offset
+ len
;
1203 else if ((format
& 0xce) == 0x88)
1206 dissect_channel_list_n_range(tvb
, tree
, pinfo
, curr_offset
, len
, 512);
1207 curr_offset
= curr_offset
+ len
;
1209 else if ((format
& 0xce) == 0x8a)
1212 dissect_channel_list_n_range(tvb
, tree
, pinfo
, curr_offset
, len
, 256);
1213 curr_offset
= curr_offset
+ len
;
1215 else if ((format
& 0xce) == 0x8c)
1218 dissect_channel_list_n_range(tvb
, tree
, pinfo
, curr_offset
, len
, 128);
1219 curr_offset
= curr_offset
+ len
;
1221 else if ((format
& 0xce) == 0x8e)
1223 /* variable bit map */
1224 arfcn
= ((format
& 0x01) << 9) | (tvb_get_guint8(tvb
, curr_offset
+1) << 1) | ((tvb_get_guint8(tvb
, curr_offset
+ 2) & 0x80) >> 7);
1225 item
= proto_tree_add_text(tree
,tvb
,curr_offset
,len
,"List of ARFCNs = %d",arfcn
);
1226 curr_offset
= curr_offset
+ 2;
1228 for (byte
= 0; byte
<= len
-3; byte
++)
1230 oct
= tvb_get_guint8(tvb
, curr_offset
);
1234 if (((oct
>> bit
) & 1) == 1)
1236 proto_item_append_text(item
," %d",arfcn
);
1244 return(curr_offset
- offset
);
1248 * Format ID is in bits:
1249 * 128 127 124 123 122 (hf_gsm_a_rr_format_id)
1252 dissect_arfcn_list(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
)
1254 guint32 curr_offset
;
1257 curr_offset
= offset
;
1259 oct
= tvb_get_guint8(tvb
, curr_offset
);
1261 /* FORMAT-ID, Format Identifier (part of octet 3)*/
1262 proto_tree_add_item(tree
, hf_gsm_a_rr_format_id
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1264 curr_offset
+= dissect_arfcn_list_core(tvb
, tree
, pinfo
, offset
, len
, add_string
, string_len
, oct
);
1266 return(curr_offset
- offset
);
1270 * Format ID is in bits:
1271 * 128 124 123 122 (hf_gsm_a_rr_format_id2)
1274 dissect_arfcn_list2(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
)
1276 guint32 curr_offset
;
1279 curr_offset
= offset
;
1281 /* Turn bit 127 off, in order to reuse the ARFCN dissection code */
1282 oct
= tvb_get_guint8(tvb
, curr_offset
) & 0xbf;
1284 /* FORMAT-ID, Format Identifier (part of octet 3)*/
1285 proto_tree_add_item(tree
, hf_gsm_a_rr_format_id2
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1287 curr_offset
+= dissect_arfcn_list_core(tvb
, tree
, pinfo
, offset
, len
, add_string
, string_len
, oct
);
1289 return(curr_offset
- offset
);
1293 de_rr_cell_ch_dsc(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
1295 return dissect_arfcn_list(tvb
, tree
, pinfo
, offset
, 16, add_string
, string_len
);
1298 * [3] 10.5.2.1c BA List Pref
1301 de_rr_ba_list_pref(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
)
1305 bit_offset
= offset
<< 3;
1306 while (gsm_rr_csn_flag(tvb
, tree
, bit_offset
++, "Repeating Range Limits", "Present", "Not Present"))
1308 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_range_lower
, tvb
, bit_offset
, 10, ENC_BIG_ENDIAN
);
1310 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_range_higher
, tvb
, bit_offset
, 10, ENC_BIG_ENDIAN
);
1313 while (gsm_rr_csn_flag(tvb
, tree
, bit_offset
++, "Repeating BA Frequency", "Present", "Not Present"))
1315 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_ba_freq
, tvb
, bit_offset
, 10, ENC_BIG_ENDIAN
);
1319 if (((bit_offset
+ 7) >> 3) > (offset
+ len
))
1321 expert_add_info(pinfo
, proto_tree_get_parent(tree
), &ei_gsm_a_rr_ie_overrun
);
1323 else if ((bit_offset
>> 3) < (offset
+ len
))
1325 expert_add_info(pinfo
, proto_tree_get_parent(tree
), &ei_gsm_a_rr_ie_underrun
);
1331 * [3] 10.5.2.1d UTRAN Frequency List
1334 de_rr_utran_freq_list(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
)
1338 /* < UTRAN Freq List >::=
1339 * < LENGTH OF UTRAN FREQ LIST : bit (8) > -- length following in octets
1340 * { 1 < FDD_ARFCN > : bit (14) } ** 0 -- FDD frequencies
1341 * { 1 < TDD_ARFCN > : bit (14) } ** 0 -- TDD frequencies
1343 * Spare bits in the end of the field are used to fill the last octet.
1345 bit_offset
= offset
<< 3;
1346 while (gsm_rr_csn_flag(tvb
, tree
, bit_offset
++, "Repeating FDD Frequency", "Present", "Not Present"))
1348 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_fdd_uarfcn
, tvb
, bit_offset
, 14, ENC_BIG_ENDIAN
);
1351 while (gsm_rr_csn_flag(tvb
, tree
, bit_offset
++, "Repeating TDD Frequency", "Present", "Not Present"))
1353 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_tdd_uarfcn
, tvb
, bit_offset
, 14, ENC_BIG_ENDIAN
);
1357 if (((bit_offset
+ 7) >> 3) > (offset
+ len
))
1359 expert_add_info(pinfo
, proto_tree_get_parent(tree
), &ei_gsm_a_rr_ie_overrun
);
1361 else if ((bit_offset
>> 3) < (offset
+ len
))
1363 expert_add_info(pinfo
, proto_tree_get_parent(tree
), &ei_gsm_a_rr_ie_underrun
);
1369 * [3] 10.5.2.1e Cell selection indicator after release of all TCH and SDCCH
1372 convert_n_to_p
[32] = { 0, 10, 19, 28, 36, 44, 52, 60, 67, 74, 81, 88, 95, 102, 109, 116,
1373 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
1376 convert_n_to_q
[32] = { 0, 9, 17, 25, 32, 39, 46, 53, 59, 65, 71, 77, 83, 89, 95, 101,
1377 106, 111, 116, 121, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
1380 de_rr_cell_select_indic(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
)
1382 proto_tree
*subtree
, *subtree2
;
1383 proto_item
*item
, *item2
;
1384 guint32 curr_offset
;
1385 gint bit_offset
, bit_offset_sav
, idx
, xdd_cell_info
, wsize
, nwi
, jwi
, w
[64], i
, iused
, xdd_indic0
;
1388 curr_offset
= offset
;
1389 bit_offset
= curr_offset
<< 3;
1390 value
= tvb_get_bits8(tvb
,bit_offset
,3);
1394 case 0: /* GSM Description */
1395 bit_offset_sav
= bit_offset
;
1396 item
= proto_tree_add_text(tree
, tvb
, bit_offset
>>3, -1, "%s",
1397 gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_GSM_DESC
].strptr
);
1398 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_GSM_DESC
]);
1399 while (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "Repeating GSM Description struct", "Present", "Not Present"))
1401 gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "Band Indicator", "1900", "1800");
1402 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_arfcn
, tvb
, bit_offset
, 10, ENC_BIG_ENDIAN
);
1404 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_bsic
, tvb
, bit_offset
, 6, ENC_BIG_ENDIAN
);
1407 proto_item_set_len(item
,((bit_offset
>>3) - (bit_offset_sav
>>3) + 1));
1409 case 1: /* UTRAN FDD Description */
1410 bit_offset_sav
= bit_offset
;
1411 item
= proto_tree_add_text(tree
, tvb
, bit_offset
>>3, -1, "%s",
1412 gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_UTRAN_FDD_DESC
].strptr
);
1413 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_UTRAN_FDD_DESC
]);
1414 while (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "Repeating UTRAN FDD Description struct", "Present", "Not Present"))
1416 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "Bandwidth FDD", "Present", "Not Present"))
1418 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_bandwidth_fdd
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
1421 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_fdd_uarfcn
, tvb
, bit_offset
, 14, ENC_BIG_ENDIAN
);
1423 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "FDD Cell Information", "Present", "Not Present"))
1425 xdd_indic0
= gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "FDD Indic0", "1", "0");
1426 idx
= tvb_get_bits8(tvb
,bit_offset
,5);
1427 proto_tree_add_text(subtree
,tvb
, bit_offset
>>3, 1, "Nr of FDD Cells : %d", idx
);
1429 idx
= convert_n_to_p
[idx
];
1430 item2
= proto_tree_add_text(subtree
,tvb
, bit_offset
>>3, (idx
>>3)+1, "%s",
1431 gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_UTRAN_FDD_DESC
].strptr
);
1432 subtree2
= proto_item_add_subtree(item2
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_FDD_CELL_INFORMATION_FIELD
]);
1433 proto_tree_add_text(subtree2
,tvb
, bit_offset
>>3, (idx
>>3)+1, "Field is %d bits long", idx
);
1436 proto_tree_add_text(subtree2
,tvb
, bit_offset
>>3, 0, "Scrambling Code: %d", 0);
1437 proto_tree_add_text(subtree2
,tvb
, bit_offset
>>3, 0, "Diversity: %d", 0);
1448 w
[i
] = tvb_get_bits(tvb
, bit_offset
, wsize
, ENC_BIG_ENDIAN
);
1449 bit_offset
+= wsize
;
1470 for (i
=1; i
<= iused
; i
++)
1472 xdd_cell_info
= f_k(i
, w
, 1024);
1473 proto_tree_add_text(subtree2
,tvb
, bit_offset
>>3, 0,
1474 "Scrambling Code: %d", xdd_cell_info
& 0x01FF);
1475 proto_tree_add_text(subtree2
,tvb
, bit_offset
>>3, 0,
1476 "Diversity: %d", (xdd_cell_info
>> 9) & 0x01);
1481 proto_item_set_len(item
,((bit_offset
>>3) - (bit_offset_sav
>>3) + 1));
1483 case 2: /* UTRAN TDD Description */
1484 bit_offset_sav
= bit_offset
;
1485 item
= proto_tree_add_text(tree
, tvb
, bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_UTRAN_TDD_DESC
].strptr
);
1486 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_UTRAN_TDD_DESC
]);
1487 while (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "Repeating UTRAN TDD Description struct", "Present", "Not Present"))
1489 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "Bandwidth TDD", "Present", "Not Present"))
1491 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_bandwidth_tdd
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
1494 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_tdd_uarfcn
, tvb
, bit_offset
, 14, ENC_BIG_ENDIAN
);
1495 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "TDD Cell Information", "Present", "Not Present"))
1497 xdd_indic0
= gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "TDD Indic0", "1", "0");
1498 idx
= tvb_get_bits8(tvb
,bit_offset
,5);
1499 proto_tree_add_text(subtree
,tvb
, bit_offset
>>3, 1, "Nr of TDD Cells : %d", idx
);
1501 idx
= convert_n_to_q
[idx
];
1502 item2
= proto_tree_add_text(subtree
,tvb
, bit_offset
>>3, (idx
>>3)+1, "%s",
1503 gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_UTRAN_TDD_DESC
].strptr
);
1504 subtree2
= proto_item_add_subtree(item2
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_TDD_CELL_INFORMATION_FIELD
]);
1505 proto_tree_add_text(subtree2
,tvb
, bit_offset
>>3, (idx
>>3)+1, "Field is %d bits long", idx
);
1508 proto_tree_add_text(subtree2
,tvb
, bit_offset
>>3, 0, "Cell Parameter: %d", 0);
1509 proto_tree_add_text(subtree2
,tvb
, bit_offset
>>3, 0, "Sync Case TSTD: %d", 0);
1510 proto_tree_add_text(subtree2
,tvb
, bit_offset
>>3, 0, "Diversity TDD: %d", 0);
1521 w
[i
] = tvb_get_bits(tvb
, bit_offset
, wsize
, ENC_BIG_ENDIAN
);
1522 bit_offset
+= wsize
;
1543 for (i
=1; i
<= iused
; i
++)
1545 xdd_cell_info
= f_k(i
, w
, 512);
1546 proto_tree_add_text(subtree2
,tvb
, bit_offset
>>3, 0,
1547 "Cell Parameter: %d", xdd_cell_info
& 0x07F);
1548 proto_tree_add_text(subtree2
,tvb
, bit_offset
>>3, 0,
1549 "Sync Case TSTD: %d", (xdd_cell_info
>> 7) & 0x01);
1550 proto_tree_add_text(subtree2
,tvb
, bit_offset
>>3, 0,
1551 "Diversity TDD: %d", (xdd_cell_info
>> 8) & 0x01);
1556 proto_item_set_len(item
,((bit_offset
>>3) - (bit_offset_sav
>>3) + 1));
1563 return (curr_offset
- offset
);
1567 * [3] 10.5.2.2 Cell Description
1570 de_rr_cell_dsc(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
1572 guint32 curr_offset
;
1575 curr_offset
= offset
;
1577 proto_tree_add_item(subtree
, hf_gsm_a_rr_ncc
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1578 proto_tree_add_item(subtree
, hf_gsm_a_rr_bcc
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1579 bcch_arfcn
= (tvb_get_guint8(tvb
,curr_offset
) & 0xc0) << 2;
1580 bcch_arfcn
= bcch_arfcn
| tvb_get_guint8(tvb
,curr_offset
+1);
1581 proto_tree_add_uint(subtree
, hf_gsm_a_rr_bcch_arfcn
, tvb
, curr_offset
, 2, bcch_arfcn
);
1583 curr_offset
= curr_offset
+ 2;
1585 return(curr_offset
- offset
);
1589 * [3] 10.5.2.3 Cell Options (BCCH)
1591 static const value_string gsm_a_rr_dtx_bcch_vals
[] = {
1592 { 0x00, "The MSs may use uplink discontinuous transmission" },
1593 { 0x01, "The MSs shall use uplink discontinuous transmission" },
1594 { 0x02, "The MSs shall not use uplink discontinuous transmission" },
1595 { 0x03, "Reserved" },
1598 static const value_string gsm_a_rr_radio_link_timeout_vals
[] = {
1618 de_rr_cell_opt_bcch(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
1620 guint32 curr_offset
;
1622 curr_offset
= offset
;
1624 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_pwrc
, tvb
, (curr_offset
<<3)+1, 1, ENC_BIG_ENDIAN
);
1625 proto_tree_add_item(subtree
, hf_gsm_a_rr_dtx_bcch
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1626 proto_tree_add_item(subtree
, hf_gsm_a_rr_radio_link_timeout
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1628 curr_offset
= curr_offset
+ 1;
1630 return(curr_offset
- offset
);
1634 * [3] 10.5.2.3a Cell Options (SACCH)
1636 static const value_string gsm_a_rr_dtx_sacch_vals
[] = {
1637 { 0x00, "The MS may use uplink discontinuous transmission on a TCH-F. The MS shall not use uplink discontinuous transmission on TCH-H" },
1638 { 0x01, "The MS shall use uplink discontinuous transmission on a TCH-F. The MS shall not use uplink discontinuous transmission on TCH-H" },
1639 { 0x02, "The MS shall not use uplink discontinuous transmission on a TCH-F. The MS shall not use uplink discontinuous transmission on TCH-H" },
1640 { 0x03, "The MS shall use uplink discontinuous transmission on a TCH-F. The MS may use uplink discontinuous transmission on TCH-H" },
1641 { 0x04, "The MS may use uplink discontinuous transmission on a TCH-F. The MS may use uplink discontinuous transmission on TCH-H" },
1642 { 0x05, "The MS shall use uplink discontinuous transmission on a TCH-F. The MS shall use uplink discontinuous transmission on TCH-H" },
1643 { 0x06, "The MS shall not use uplink discontinuous transmission on a TCH-F. The MS shall use uplink discontinuous transmission on TCH-H" },
1644 { 0x07, "The MS may use uplink discontinuous transmission on a TCH-F. The MS shall use uplink discontinuous transmission on TCH-H" },
1647 static const crumb_spec_t gsm_a_rr_dtx_sacch_crumbs
[] = {
1649 { 2, 2}, /* B6 - B5 */
1654 de_rr_cell_opt_sacch(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
1656 guint32 curr_offset
;
1658 curr_offset
= offset
;
1661 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_pwrc
, tvb
, (curr_offset
<<3)+1, 1, ENC_BIG_ENDIAN
);
1662 /* DTX is a split field in bits 8, 6 and 5 */
1663 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
);
1664 proto_tree_add_item(subtree
, hf_gsm_a_rr_radio_link_timeout
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1666 curr_offset
= curr_offset
+ 1;
1668 return(curr_offset
- offset
);
1672 * [3] 10.5.2.4 Cell Selection Parameters
1675 de_rr_cell_sel_param(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
1677 guint32 curr_offset
;
1679 curr_offset
= offset
;
1681 proto_tree_add_item(subtree
, hf_gsm_a_rr_cell_reselect_hyst
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1682 proto_tree_add_item(subtree
, hf_gsm_a_rr_ms_txpwr_max_cch
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1684 curr_offset
= curr_offset
+ 1;
1686 proto_tree_add_item(subtree
, hf_gsm_a_rr_acs
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1687 proto_tree_add_item(subtree
, hf_gsm_a_rr_neci
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1688 proto_tree_add_item(subtree
, hf_gsm_a_rr_rxlev_access_min
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1690 curr_offset
= curr_offset
+ 1;
1692 return(curr_offset
- offset
);
1696 * [3] 10.5.2.4a MAC Mode and Channel Coding Requested
1697 * [3] 10.5.2.5 Channel Description
1700 de_rr_ch_dsc(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
1702 guint32 curr_offset
;
1703 guint8 oct8
,subchannel
;
1704 guint16 arfcn
, hsn
, maio
;
1707 curr_offset
= offset
;
1710 oct8
= tvb_get_guint8(tvb
, curr_offset
);
1712 if ((oct8
& 0xf8) == 0x08)
1714 str
= "TCH/F + ACCHs";
1715 other_decode_bitfield_value(a_bigbuf
, oct8
, 0xf8, 8);
1716 proto_tree_add_text(subtree
,tvb
, curr_offset
, 1,"%s = %s",a_bigbuf
,str
);
1720 if ((oct8
& 0xf0) == 0x10)
1722 str
= "TCH/H + ACCHs, Subchannel";
1723 subchannel
= ((oct8
& 0x08)>>3);
1725 else if ((oct8
& 0xe0) == 0x20)
1727 str
= "SDCCH/4 + SACCH/C4 or CBCH (SDCCH/4), Subchannel";
1728 subchannel
= ((oct8
& 0x18)>>3);
1730 else if ((oct8
& 0xc0) == 0x40)
1732 str
= "SDCCH/8 + SACCH/C8 or CBCH (SDCCH/8), Subchannel";
1733 subchannel
= ((oct8
& 0x38)>>3);
1735 str
= "Unknown channel information";
1739 other_decode_bitfield_value(a_bigbuf
, oct8
, 0xf8, 8);
1740 proto_tree_add_text(subtree
,tvb
, curr_offset
, 1,"%s = %s %d",a_bigbuf
,str
,subchannel
);
1743 other_decode_bitfield_value(a_bigbuf
, oct8
, 0x07, 8);
1744 proto_tree_add_text(subtree
,tvb
, curr_offset
, 1,"%s = Timeslot: %d",a_bigbuf
,(oct8
& 0x07));
1749 oct8
= tvb_get_guint8(tvb
, curr_offset
);
1750 other_decode_bitfield_value(a_bigbuf
, oct8
, 0xe0, 8);
1751 proto_tree_add_text(subtree
,tvb
, curr_offset
, 1,"%s = Training Sequence: %d",a_bigbuf
,((oct8
& 0xe0)>>5));
1754 if ((oct8
& 0x10) == 0x10)
1756 /* Hopping sequence */
1757 maio
= ((oct8
& 0x0f)<<2) | ((tvb_get_guint8(tvb
,curr_offset
+1) & 0xc0) >> 6);
1758 hsn
= (tvb_get_guint8(tvb
,curr_offset
+1) & 0x3f);
1761 other_decode_bitfield_value(a_bigbuf
, oct8
, 0x10, 8);
1762 proto_tree_add_text(subtree
,tvb
, curr_offset
, 1,"%s = Hopping channel: %s",a_bigbuf
,str
);
1763 proto_tree_add_text(subtree
,tvb
, curr_offset
, 2,"Hopping channel: MAIO %d",maio
);
1764 proto_tree_add_text(subtree
,tvb
, curr_offset
, 2,"Hopping channel: HSN %d",hsn
);
1769 arfcn
= ((oct8
& 0x03) << 8) | tvb_get_guint8(tvb
,curr_offset
+1);
1772 other_decode_bitfield_value(a_bigbuf
, oct8
, 0x10, 8);
1773 proto_tree_add_text(subtree
,tvb
, curr_offset
, 1,"%s = Hopping channel: %s",a_bigbuf
,str
);
1774 other_decode_bitfield_value(a_bigbuf
, oct8
, 0x0c, 8);
1775 proto_tree_add_text(subtree
,tvb
, curr_offset
, 1,"%s = Spare",a_bigbuf
);
1776 proto_tree_add_text(subtree
,tvb
, curr_offset
, 2,"Single channel : ARFCN %d",arfcn
);
1779 curr_offset
= curr_offset
+ 2;
1781 return(curr_offset
- offset
);
1784 * [3] 10.5.2.5a Channel Description 2
1787 de_rr_ch_dsc2(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
1789 guint32 curr_offset
;
1790 guint8 oct8
,subchannel
;
1791 guint16 arfcn
, hsn
, maio
;
1794 curr_offset
= offset
;
1797 oct8
= tvb_get_guint8(tvb
, curr_offset
);
1799 if ((oct8
& 0xf8) == 0x0)
1801 str
= "TCH/F + FACCH/F and SACCH/M";
1802 other_decode_bitfield_value(a_bigbuf
, oct8
, 0xf8, 8);
1803 proto_tree_add_text(subtree
,tvb
, curr_offset
, 1,"%s = %s",a_bigbuf
,str
);
1805 else if ((oct8
& 0xf8) == 0x08)
1807 str
= "TCH/F + FACCH/F and SACCH/F";
1808 other_decode_bitfield_value(a_bigbuf
, oct8
, 0xf8, 8);
1809 proto_tree_add_text(subtree
,tvb
, curr_offset
, 1,"%s = %s",a_bigbuf
,str
);
1811 else if ((oct8
& 0xf8) == 0xf0)
1813 str
= "TCH/F + FACCH/F and SACCH/M + bi- and unidirectional channels";
1814 other_decode_bitfield_value(a_bigbuf
, oct8
, 0xf8, 8);
1815 proto_tree_add_text(subtree
,tvb
, curr_offset
, 1,"%s = %s",a_bigbuf
,str
);
1819 if ((oct8
& 0xf0) == 0x10)
1821 str
= "TCH/H + ACCHs, Subchannel";
1822 subchannel
= ((oct8
& 0x08)>>3);
1824 else if ((oct8
& 0xe0) == 0x20)
1826 str
= "SDCCH/4 + SACCH/C4 or CBCH (SDCCH/4), Subchannel";
1827 subchannel
= ((oct8
& 0x18)>>3);
1829 else if ((oct8
& 0xc0) == 0x40)
1831 str
= "SDCCH/8 + SACCH/C8 or CBCH (SDCCH/8), Subchannel";
1832 subchannel
= ((oct8
% 0x38)>>3);
1834 else if ((oct8
& 0xc0) == 0x80)
1836 str
= "TCH/F + FACCH/F and SACCH/M + bidirectional channels at timeslot";
1837 subchannel
= ((oct8
% 0x38)>>3);
1839 else if ((oct8
& 0xe0) == 0xc0)
1841 str
= "TCH/F + FACCH/F and SACCH/M + unidirectional channels at timeslot";
1842 subchannel
= ((oct8
% 0x38)>>3);
1844 str
= "Unknown channel information";
1847 other_decode_bitfield_value(a_bigbuf
, oct8
, 0xf8, 8);
1848 proto_tree_add_text(subtree
,tvb
, curr_offset
, 1,"%s = %s %d",a_bigbuf
,str
,subchannel
);
1851 other_decode_bitfield_value(a_bigbuf
, oct8
, 0x07, 8);
1852 proto_tree_add_text(subtree
,tvb
, curr_offset
, 1,"%s = Timeslot: %d",a_bigbuf
,(oct8
& 0x07));
1857 oct8
= tvb_get_guint8(tvb
, curr_offset
);
1858 other_decode_bitfield_value(a_bigbuf
, oct8
, 0xe0, 8);
1859 proto_tree_add_text(subtree
,tvb
, curr_offset
, 1,"%s = Training Sequence: %d",a_bigbuf
,((oct8
& 0xe0)>>5));
1861 if ((oct8
& 0x10) == 0x10)
1863 /* Hopping sequence */
1864 maio
= ((oct8
& 0x0f)<<2) | ((tvb_get_guint8(tvb
,curr_offset
+1) & 0xc0) >> 6);
1865 hsn
= (tvb_get_guint8(tvb
,curr_offset
+1) & 0x3f);
1868 other_decode_bitfield_value(a_bigbuf
, oct8
, 0x10, 8);
1869 proto_tree_add_text(subtree
,tvb
, curr_offset
, 1,"%s = Hopping channel: %s",a_bigbuf
,str
);
1870 proto_tree_add_text(subtree
,tvb
, curr_offset
, 2,"Hopping channel: MAIO %d",maio
);
1871 proto_tree_add_text(subtree
,tvb
, curr_offset
, 2,"Hopping channel: HSN %d",hsn
);
1876 arfcn
= ((oct8
& 0x03) << 8) | tvb_get_guint8(tvb
,curr_offset
+1);
1879 other_decode_bitfield_value(a_bigbuf
, oct8
, 0x10, 8);
1880 proto_tree_add_text(subtree
,tvb
, curr_offset
, 1,"%s = Hopping channel: %s",a_bigbuf
,str
);
1881 other_decode_bitfield_value(a_bigbuf
, oct8
, 0x0c, 8);
1882 proto_tree_add_text(subtree
,tvb
, curr_offset
, 1,"%s = Spare",a_bigbuf
);
1883 proto_tree_add_text(subtree
,tvb
, curr_offset
, 2,"Single channel : ARFCN %d",arfcn
);
1886 curr_offset
= curr_offset
+ 2;
1888 return(curr_offset
- offset
);
1892 * [3] 10.5.2.5c Channel Description 3
1895 de_rr_ch_dsc3(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
1897 guint32 curr_offset
;
1899 guint16 arfcn
, hsn
, maio
;
1902 curr_offset
= offset
;
1905 oct8
= tvb_get_guint8(tvb
, curr_offset
);
1906 other_decode_bitfield_value(a_bigbuf
, oct8
, 0xe0, 8);
1907 proto_tree_add_text(subtree
,tvb
, curr_offset
, 1,"%s = Training Sequence: %d",a_bigbuf
,((oct8
& 0xe0)>>5));
1909 if ((oct8
& 0x10) == 0x10)
1911 /* Hopping sequence */
1912 maio
= ((oct8
& 0x0f)<<2) | ((tvb_get_guint8(tvb
,curr_offset
+1) & 0xc0) >> 6);
1913 hsn
= (tvb_get_guint8(tvb
,curr_offset
+1) & 0x3f);
1916 other_decode_bitfield_value(a_bigbuf
, oct8
, 0x10, 8);
1917 proto_tree_add_text(subtree
,tvb
, curr_offset
, 1,"%s = Hopping channel: %s",a_bigbuf
,str
);
1918 proto_tree_add_text(subtree
,tvb
, curr_offset
, 2,"Hopping channel: MAIO %d",maio
);
1919 proto_tree_add_text(subtree
,tvb
, curr_offset
, 2,"Hopping channel: HSN %d",hsn
);
1924 arfcn
= ((oct8
& 0x03) << 8) | tvb_get_guint8(tvb
,curr_offset
+1);
1927 other_decode_bitfield_value(a_bigbuf
, oct8
, 0x10, 8);
1928 proto_tree_add_text(subtree
,tvb
, curr_offset
, 1,"%s = Hopping channel: %s",a_bigbuf
,str
);
1929 other_decode_bitfield_value(a_bigbuf
, oct8
, 0x0c, 8);
1930 proto_tree_add_text(subtree
,tvb
, curr_offset
, 1,"%s = Spare",a_bigbuf
);
1931 proto_tree_add_text(subtree
,tvb
, curr_offset
, 2,"Single channel : ARFCN %d",arfcn
);
1934 curr_offset
= curr_offset
+ 2;
1936 return(curr_offset
- offset
);
1940 * [3] 10.5.2.6 Channel Mode
1943 static const value_string gsm_a_rr_channel_mode_vals
[] = {
1944 { 0x00, "signalling only"},
1945 { 0x01, "speech full rate or half rate version 1(GSM FR or GSM HR)"},
1946 { 0x21, "speech full rate or half rate version 2(GSM EFR)"},
1947 { 0x41, "speech full rate or half rate version 3(FR AMR or HR AMR)"},
1948 { 0x81, "speech full rate or half rate version 4(OFR AMR-WB or OHR AMR-WB)"},
1949 { 0x82, "speech full rate or half rate version 5(FR AMR-WB )"},
1950 { 0x83, "speech full rate or half rate version 6(OHR AMR )"},
1951 { 0x61, "data, 43.5 kbit/s (downlink)+14.5 kbps (uplink)"},
1952 { 0x62, "data, 29.0 kbit/s (downlink)+14.5 kbps (uplink)"},
1953 { 0x64, "data, 43.5 kbit/s (downlink)+29.0 kbps (uplink)"},
1954 { 0x67, "data, 14.5 kbit/s (downlink)+43.5 kbps (uplink)"},
1955 { 0x65, "data, 14.5 kbit/s (downlink)+29.0 kbps (uplink)"},
1956 { 0x66, "data, 29.0 kbit/s (downlink)+43.5 kbps (uplink)"},
1957 { 0x27, "data, 43.5 kbit/s radio interface rate"},
1958 { 0x63, "data, 32.0 kbit/s radio interface rate"},
1959 { 0x43, "data, 29.0 kbit/s radio interface rate"},
1960 { 0x0f, "data, 14.5 kbit/s radio interface rate"},
1961 { 0x03, "data, 12.0 kbit/s radio interface rate"},
1962 { 0x0b, "data, 6.0 kbit/s radio interface rate"},
1963 { 0x13, "data, 3.6 kbit/s radio interface rate"},
1968 de_rr_ch_mode(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
1970 guint32 curr_offset
;
1972 curr_offset
= offset
;
1974 proto_tree_add_item(tree
, hf_gsm_a_rr_channel_mode
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1976 curr_offset
= curr_offset
+ 1;
1978 return(curr_offset
- offset
);
1981 * [3] 10.5.2.7 Channel Mode 2
1984 static const value_string gsm_a_rr_channel_mode2_vals
[] = {
1985 { 0x00, "signalling only"},
1986 { 0x05, "speech half rate version 1(GSM HR)"},
1987 { 0x25, "speech half rate version 2(GSM EFR)"},
1988 { 0x45, "speech half rate version 3(HR AMR)"},
1989 { 0x85, "speech half rate version 4(OHR AMR-WB)"},
1990 { 0x06, "speech half rate version 6(OHR AMR )"},
1991 { 0x0f, "data, 6.0 kbit/s radio interface rate"},
1992 { 0x17, "data, 3.6 kbit/s radio interface rate"},
1997 de_rr_ch_mode2(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
1999 guint32 curr_offset
;
2001 curr_offset
= offset
;
2003 proto_tree_add_item(tree
, hf_gsm_a_rr_channel_mode2
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
2005 curr_offset
= curr_offset
+ 1;
2007 return(curr_offset
- offset
);
2010 * [3] 10.5.2.7a UTRAN Classmark information element
2013 de_rr_utran_cm(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
)
2015 guint32 curr_offset
;
2016 tvbuff_t
*rrc_irat_ho_info_tvb
;
2018 curr_offset
= offset
;
2021 rrc_irat_ho_info_tvb
= tvb_new_subset(tvb
, curr_offset
, len
, len
);
2022 if (rrc_irat_ho_info_handle
)
2023 call_dissector(rrc_irat_ho_info_handle
, rrc_irat_ho_info_tvb
, pinfo
, tree
);
2027 return(curr_offset
- offset
);
2031 * [3] 10.5.2.7b (void)
2035 * [3] 10.5.2.7c Classmark Enquiry Mask
2037 * 0 CLASSMARK CHANGE message is requested
2038 * 1 CLASSMARK CHANGE message is not requested
2040 * 000 UTRAN CLASSMARK CHANGE message including status on predefined configurations (i.e. Sequence Description) is requested
2041 * 111 UTRAN CLASSMARK CHANGE message including status on predefined configurations (i.e. Sequence Description) is not requested.
2042 * All other values shall not be sent. If received, they shall be interpreted as '000'.
2044 * 0 CDMA2000 CLASSMARK CHANGE message requested
2045 * 1 CDMA2000 CLASSMARK CHANGE message not requested.
2047 * 0 GERAN IU MODE CLASSMARK CHANGE message requested
2048 * 1 GERAN IU MODE CLASSMARK CHANGE message not requested.
2049 * Bits 2 - 1: spare(0).
2051 static const true_false_string gsm_a_msg_req_value
= {
2052 "message is not requested",
2053 "message is requested"
2056 static const value_string gsm_a_rr_utran_cm_cng_msg_req_vals
[] = {
2057 { 0x0, "message including status on predefined configurations (i.e. Sequence Description) is requested"},
2058 { 0x1, "message including status on predefined configurations (i.e. Sequence Description) is requested"},
2059 { 0x2, "message including status on predefined configurations (i.e. Sequence Description) is requested"},
2060 { 0x3, "message including status on predefined configurations (i.e. Sequence Description) is requested"},
2061 { 0x4, "message including status on predefined configurations (i.e. Sequence Description) is requested"},
2062 { 0x5, "message including status on predefined configurations (i.e. Sequence Description) is requested"},
2063 { 0x6, "message including status on predefined configurations (i.e. Sequence Description) is requested"},
2064 { 0x7, "message including status on predefined configurations (i.e. Sequence Description) is not requested."},
2068 de_rr_cm_enq_mask(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
2070 guint32 curr_offset
;
2072 curr_offset
= offset
;
2074 proto_tree_add_item(tree
, hf_gsm_a_rr_cm_cng_msg_req
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
2075 proto_tree_add_item(tree
, hf_gsm_a_rr_utran_cm_cng_msg_req
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
2076 proto_tree_add_item(tree
, hf_gsm_a_rr_cdma200_cm_cng_msg_req
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
2077 proto_tree_add_item(tree
, hf_gsm_a_rr_geran_iu_cm_cng_msg_req
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
2079 curr_offset
= curr_offset
+ 1;
2081 return(curr_offset
- offset
);
2084 * [3] 10.5.2.8 Channel Needed
2086 static const value_string gsm_a_rr_channel_needed_vals
[] = {
2087 { 0x00, "Any channel"},
2089 { 0x02, "TCH/F (Full rate)"},
2090 { 0x03, "TCH/H or TCH/F (Dual rate)"},
2094 de_rr_chnl_needed(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
2096 guint32 curr_offset
;
2099 curr_offset
= offset
;
2100 if (RIGHT_NIBBLE
== len
)
2105 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_chnl_needed_ch1
, tvb
, (curr_offset
<<3)+bit_offset
+2, 2, ENC_BIG_ENDIAN
);
2106 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_chnl_needed_ch2
, tvb
, (curr_offset
<<3)+bit_offset
, 2, ENC_BIG_ENDIAN
);
2108 curr_offset
= curr_offset
+ 1;
2110 return(curr_offset
- offset
);
2113 * [3] 10.5.2.8a Channel Request Description
2117 * [3] 10.5.2.8b Channel Request Description 2
2119 static const value_string gsm_a_rr_pkt_estab_cause_vals
[] = {
2120 { 0x00, "User Data"},
2121 { 0x01, "Page Response"},
2122 { 0x02, "Cell Update"},
2123 { 0x03, "Mobility Management procedure"},
2126 static const value_string gsm_a_rr_radio_priority_vals
[] = {
2133 static const true_false_string gsm_a_rr_llc_pdu_type_value
= {
2134 "LLC PDU is not SACK or ACK",
2135 "LLC PDU is SACK or ACK"
2137 static const true_false_string gsm_a_rr_reduced_latency_cap_value
= {
2138 "The mobile station supports Reduced TTI configurations and Fast Ack/Nack Reporting",
2139 "The mobile station does not support Reduced TTI configurations and Fast Ack/Nack Reporting"
2141 static const value_string gsm_a_rr_egprs2_vals
[] = {
2142 { 0x00, "The mobile station does not support either EGPRS2-A or EGPRS2-B"},
2143 { 0x01, "The mobile station supports EGPRS2-A"},
2144 { 0x02, "The mobile station supports both EGPRS2-A and EGPRS2-B"},
2148 de_rr_chnl_req_desc2(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
)
2150 guint32 bit_offset
= offset
<< 3;
2152 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_pkt_estab_cause
, tvb
, bit_offset
, 2, ENC_BIG_ENDIAN
);
2154 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_peak_throughput_class
, tvb
, bit_offset
, 4, ENC_BIG_ENDIAN
);
2156 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_radio_priority
, tvb
, bit_offset
, 2, ENC_BIG_ENDIAN
);
2158 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_rlc_mode
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
2160 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_llc_pdu_type
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
2162 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_rlc_octet_count
, tvb
, bit_offset
, 16, ENC_BIG_ENDIAN
);
2164 if (gsm_rr_csn_flag(tvb
, tree
, bit_offset
++, "PFI", "Present", "Not Present")) {
2165 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_pfi
, tvb
, bit_offset
, 7, ENC_BIG_ENDIAN
);
2168 gsm_rr_csn_HL_flag(tvb
, tree
, 0, bit_offset
++, "Multiple TBF Capability",
2169 "Multiple TBF procedures in A/Gb mode supported",
2170 "Multiple TBF procedures in A/Gb mode not supported");
2172 if (gsm_rr_csn_HL_flag(tvb
, tree
, (offset
+len
)<<3, bit_offset
++, "Additions in Rel-7", "Present", "Not present")) {
2173 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_rlc_non_pers_mode_cap
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
2175 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_reduced_latency_cap
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
2177 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_ul_egprs2
, tvb
, bit_offset
, 2, ENC_BIG_ENDIAN
);
2179 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_dl_egprs2
, tvb
, bit_offset
, 2, ENC_BIG_ENDIAN
);
2181 if (gsm_rr_csn_HL_flag(tvb
, tree
, (offset
+len
)<<3, bit_offset
++, "Additions in Rel-9", "Present", "Not present")) {
2182 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_emst_ms_cap
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
2183 /*bit_offset += 1;*/
2191 * [3] 10.5.2.9 Cipher Mode Setting
2194 static const value_string gsm_a_rr_sc_vals
[] = {
2195 { 0, "No ciphering"},
2196 { 1, "Start ciphering"},
2199 /* algorithm identifier
2205 de_rr_cip_mode_set(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
)
2207 guint32 curr_offset
;
2211 curr_offset
= offset
;
2213 /* Cipher Mode Setting
2214 * Note: The coding of fields SC and algorithm identifier is defined in [44.018]
2215 * as part of the Cipher Mode Setting IE.
2217 if (RIGHT_NIBBLE
== len
)
2222 proto_tree_add_bits_ret_val(tree
, hf_gsm_a_rr_sc
, tvb
, (curr_offset
<<3)+bit_offset
+3, 1, &value
, ENC_BIG_ENDIAN
);
2223 if (value
== 1){ /* Start ciphering */
2224 /* algorithm identifier */
2225 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_algorithm_id
, tvb
, (curr_offset
<<3)+bit_offset
, 3, ENC_BIG_ENDIAN
);
2227 curr_offset
= curr_offset
+ 1;
2229 return(curr_offset
- offset
);
2232 * [3] 10.5.2.10 Cipher Response
2235 static const value_string gsm_a_rr_cr_vals
[] = {
2236 { 0, "IMEISV shall not be included"},
2237 { 1, "IMEISV shall be included"},
2242 de_rr_cip_mode_resp(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
)
2244 guint32 curr_offset
;
2247 curr_offset
= offset
;
2248 if (RIGHT_NIBBLE
== len
)
2253 /* Cipher Mode Response
2254 * Note: The coding of field CR is defined in [44.018]
2255 * as part of the Cipher Mode Response IE.
2257 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_cr
, tvb
, (curr_offset
<<3)+bit_offset
+3, 1, ENC_BIG_ENDIAN
);
2258 curr_offset
= curr_offset
+ 1;
2260 return(curr_offset
- offset
);
2262 /* [3] 10.5.2.11 Control Channel Description */
2264 static const value_string gsm_a_rr_mscr_vals
[] = {
2265 { 0, "MSC is Release '98 or older"},
2266 { 1, "MSC is Release '99 onwards"},
2270 static const value_string gsm_a_rr_att_vals
[] = {
2271 { 0, "MSs in the cell are not allowed to apply IMSI attach and detach procedure"},
2272 { 1, "MSs in the cell shall apply IMSI attach and detach procedure"},
2276 static const value_string gsm_a_rr_ccch_conf_vals
[] = {
2277 { 0, "1 basic physical channel used for CCCH, not combined with SDCCHs"},
2278 { 1, "1 basic physical channel used for CCCH, combined with SDCCHs"},
2279 { 2, "2 basic physical channels used for CCCH, not combined with SDCCHs"},
2281 { 4, "3 basic physical channels used for CCCH, not combined with SDCCHs"},
2283 { 6, "4 basic physical channels used for CCCH, not combined with SDCCHs"},
2288 static const value_string gsm_a_rr_cbq3_vals
[] = {
2289 { 0, "Iu mode not supported"},
2290 { 1, "Iu mode capable MSs barred"},
2291 { 2, "Iu mode supported, cell not barred"},
2292 { 3, "Iu mode supported, cell not barred"},
2297 de_rr_ctrl_ch_desc(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
2300 guint32 curr_offset
;
2302 curr_offset
= offset
;
2304 proto_tree_add_item(subtree
, hf_gsm_a_rr_mscr
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
2305 proto_tree_add_item(subtree
, hf_gsm_a_rr_att
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
2306 proto_tree_add_item(subtree
, hf_gsm_a_rr_bs_ag_blks_res
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
2307 proto_tree_add_item(subtree
, hf_gsm_a_rr_ccch_conf
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
2309 curr_offset
= curr_offset
+ 1;
2310 oct
= tvb_get_guint8(tvb
, curr_offset
);
2312 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_cbq3
, tvb
, (curr_offset
<<3)+1, 2, ENC_BIG_ENDIAN
);
2313 proto_tree_add_uint(subtree
, hf_gsm_a_rr_bs_pa_mfrms
, tvb
, curr_offset
, 1, (oct
&0x07)+2);
2315 curr_offset
= curr_offset
+ 1;
2317 proto_tree_add_item(subtree
, hf_gsm_a_rr_t3212
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
2319 curr_offset
= curr_offset
+ 1;
2321 return(curr_offset
- offset
);
2324 /* [3] 10.5.2.11a DTM Information Details
2327 de_rr_dtm_info_details(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
)
2329 guint32 bit_offset
= offset
<< 3;
2331 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_max_lapdm
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
2333 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_gprs_ms_txpwr_max_ccch
, tvb
, bit_offset
, 5, ENC_BIG_ENDIAN
);
2335 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_cell_id
, tvb
, bit_offset
, 16, ENC_BIG_ENDIAN
);
2337 if (gsm_rr_csn_HL_flag(tvb
, tree
, (offset
+len
)<<3, bit_offset
++, "Additions in Rel-6", "Present", "Not present")) {
2338 if (gsm_rr_csn_flag(tvb
, tree
, bit_offset
++, "MBMS procedures", "Supported by cell", "Not supported by cell")) {
2339 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_dedicated_mode_mbms_notification_support
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
2341 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_mnci_support
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
2342 /*bit_offset += 1;*/
2350 * [3] 10.5.2.11b Dynamic ARFCN Mapping
2352 static const value_string gsm_a_rr_gsm_band_vals
[] = {
2374 de_rr_dyn_arfcn_map(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
)
2378 bit_offset
= offset
<< 3;
2380 while (gsm_rr_csn_flag(tvb
, tree
, bit_offset
++, "Repeating Dynamic ARFCN Mapping", "Present", "Not Present"))
2382 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_gsm_band
, tvb
, bit_offset
, 4, ENC_BIG_ENDIAN
);
2384 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_arfcn_first
, tvb
, bit_offset
, 10, ENC_BIG_ENDIAN
);
2386 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_band_offset
, tvb
, bit_offset
, 10, ENC_BIG_ENDIAN
);
2388 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_arfcn_range
, tvb
, bit_offset
, 7, ENC_BIG_ENDIAN
);
2392 if (((bit_offset
+ 7) >> 3) > (offset
+ len
))
2394 expert_add_info(pinfo
, proto_tree_get_parent(tree
), &ei_gsm_a_rr_ie_overrun
);
2396 else if ((bit_offset
>> 3) < (offset
+ len
))
2398 expert_add_info(pinfo
, proto_tree_get_parent(tree
), &ei_gsm_a_rr_ie_underrun
);
2403 * [3] 10.5.2.12 Frequency Channel Sequence
2406 de_rr_freq_ch_seq(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
2408 guint32 curr_offset
;
2411 curr_offset
= offset
;
2413 proto_tree_add_item(tree
, hf_gsm_a_rr_lowest_arfcn
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
2415 bit_offset
= curr_offset
<< 3;
2416 for (i
=0; i
<16; i
++)
2418 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_inc_skip_arfcn
, tvb
, bit_offset
, 4, ENC_BIG_ENDIAN
);
2422 curr_offset
= curr_offset
+ 8;
2424 return(curr_offset
- offset
);
2428 * [3] 10.5.2.13 Frequency List
2431 * [3] 10.5.2.13 Frequency List
2433 * Bit Bit Bit Bit Bit format notation
2435 * 0 0 X X X bit map 0
2436 * 1 0 0 X X 1024 range
2437 * 1 0 1 0 0 512 range
2438 * 1 0 1 0 1 256 range
2439 * 1 0 1 1 0 128 range
2440 * 1 0 1 1 1 variable bit map
2442 /* The mask 0xce (1100 1110) will produce the result 0110 0111*/
2443 static const value_string gsm_a_rr_freq_list_format_id_vals
[] = {
2444 { 0x00, "bit map 0"},
2445 { 0x02, "bit map 0"},
2446 { 0x04, "bit map 0"},
2447 { 0x06, "bit map 0"},
2448 { 0x08, "bit map 0"},
2449 { 0x0a, "bit map 0"},
2450 { 0x0c, "bit map 0"},
2451 { 0x0e, "bit map 0"},
2452 { 0x40, "1024 range"},
2453 { 0x41, "1024 range"},
2454 { 0x42, "1024 range"},
2455 { 0x43, "1024 range"},
2456 { 0x44, "512 range"},
2457 { 0x45, "256 range"},
2458 { 0x46, "128 range"},
2459 { 0x47, "variable bit map"},
2464 de_rr_freq_list(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
)
2466 return dissect_arfcn_list(tvb
, tree
, pinfo
, offset
, len
, add_string
, string_len
);
2469 * [3] 10.5.2.14 Frequency Short List
2471 *The Frequency Short List information element is a type 3 information element of 10 octet length.
2473 * This element is encoded exactly as the Frequency List information element,
2474 * except that it has a fixed length instead of a variable length and does
2475 * not contain a length indicator and that it shall not be encoded in bitmap 0 format.
2479 de_rr_freq_short_list(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
2481 return dissect_arfcn_list(tvb
, tree
, pinfo
, offset
, 9, add_string
, string_len
);
2485 * [3] 10.5.2.14a Frequency Short List 2
2487 * The Frequency Short List information element is a type 3 information element of 8 octet length.
2489 * This element is encoded exactly as the Frequency List information element,
2490 * except that it has a fixed length instead of a variable length and does
2491 * not contain a length indicator and that it shall not be encoded in bitmap 0 format.
2494 de_rr_freq_short_list2(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
2496 return dissect_arfcn_list(tvb
, tree
, pinfo
, offset
, 8, add_string
, string_len
);
2499 * [3] 10.5.2.14b Group Channel Description
2503 * [3] 10.5.2.14c GPRS Resumption
2505 static const true_false_string gsm_a_rr_gprs_resumption_ack_value
= {
2506 "Resumption of GPRS services successfully acknowledged",
2507 "Resumption of GPRS services not successfully acknowledged"
2511 de_rr_gprs_resumption(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
2513 guint32 curr_offset
;
2515 curr_offset
= offset
;
2517 proto_tree_add_item(tree
, hf_gsm_a_rr_gprs_resumption_ack
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
2520 return (curr_offset
- offset
);
2524 * [3] 10.5.2.14d GPRS broadcast information
2528 de_rr_rest_oct_gprs_cell_options(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
)
2530 proto_tree
*subtree
, *subtree2
;
2531 proto_item
*item
, *item2
;
2532 gint curr_bit_offset
, curr_bit_offset_sav
;
2535 curr_bit_offset
= bit_offset
;
2537 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_GPRS_CELL_OPTIONS
].strptr
);
2538 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_GPRS_CELL_OPTIONS
]);
2539 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_nmo
, tvb
, curr_bit_offset
, 2, ENC_BIG_ENDIAN
);
2540 curr_bit_offset
+= 2;
2541 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_t3168
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
2542 curr_bit_offset
+= 3;
2543 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_t3192
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
2544 curr_bit_offset
+= 3;
2545 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_drx_timer_max
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
2546 curr_bit_offset
+= 3;
2547 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_access_burst_type
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
2548 curr_bit_offset
+= 1;
2549 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_control_ack_type
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
2550 curr_bit_offset
+= 1;
2551 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_bs_cv_max
, tvb
, curr_bit_offset
, 4, ENC_BIG_ENDIAN
);
2552 curr_bit_offset
+= 4;
2553 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "PAN bits", "Present", "Not Present"))
2555 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_pan_dec
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
2556 curr_bit_offset
+= 3;
2557 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_pan_inc
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
2558 curr_bit_offset
+= 3;
2559 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_pan_max
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
2560 curr_bit_offset
+= 3;
2562 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Optional Extensions", "Present", "Not Present"))
2563 { /* Optional extension information */
2564 curr_bit_offset_sav
= curr_bit_offset
;
2565 item2
= proto_tree_add_text(subtree
, tvb
, curr_bit_offset
>>3, -1, "%s",
2566 gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_GPRS_CELL_OPTIONS_EXT_INFO
].strptr
);
2567 subtree2
= proto_item_add_subtree(item2
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_GPRS_CELL_OPTIONS_EXT_INFO
]);
2568 value
= tvb_get_bits8(tvb
,curr_bit_offset
,6);
2569 proto_tree_add_text(subtree2
,tvb
, curr_bit_offset
>>3, 1, "Extension Length: %d", value
);
2570 curr_bit_offset
+= 6;
2572 proto_item_set_len(item2
,((curr_bit_offset
+value
)>>3) - (curr_bit_offset_sav
>>3)+1);
2573 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "EGPRS", "Supported by cell", "Not supported by cell"))
2575 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_egprs_packet_channel_request
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
2576 curr_bit_offset
+= 1;
2577 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_bep_period
, tvb
, curr_bit_offset
, 4, ENC_BIG_ENDIAN
);
2578 curr_bit_offset
+= 4;
2582 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_pfc_feature_mode
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
2583 curr_bit_offset
+= 1;
2584 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_dtm_support
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
2585 curr_bit_offset
+= 1;
2586 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_bss_paging_coordination
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
2587 curr_bit_offset
+= 1;
2590 { /* Rel 4 extension */
2591 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_ccn_active
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
2592 curr_bit_offset
+= 1;
2593 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_nw_ext_utbf
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
2594 curr_bit_offset
+= 1;
2597 { /* Rel 6 extension */
2598 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_multiple_tbf_capability
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
2599 curr_bit_offset
+= 1;
2600 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_ext_utbf_no_data
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
2601 curr_bit_offset
+= 1;
2602 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_dtm_enhancements_capability
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
2603 curr_bit_offset
+= 1;
2605 if (gsm_rr_csn_flag(tvb
, subtree2
, curr_bit_offset
++, "MBMS procedures", "Supported by cell", "Not supported by cell"))
2607 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_dedicated_mode_mbms_notification_support
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
2608 curr_bit_offset
+= 1;
2609 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_mnci_support
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
2610 curr_bit_offset
+= 1;
2615 { /* Rel 7 extension */
2616 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_reduced_latency_access
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
2617 curr_bit_offset
+= 1;
2622 curr_bit_offset
+= value
;
2624 proto_item_set_len(item
,((curr_bit_offset
>>3) - (bit_offset
>>3) + 1));
2626 return (curr_bit_offset
- bit_offset
);
2630 de_rr_rest_oct_gprs_power_control_parameters(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
)
2632 proto_tree
*subtree
;
2634 gint curr_bit_offset
;
2636 curr_bit_offset
= bit_offset
;
2638 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_GPRS_POWER_CONTROL_PARAMS
].strptr
);
2639 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_GPRS_POWER_CONTROL_PARAMS
]);
2640 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_alpha
, tvb
, curr_bit_offset
, 4, ENC_BIG_ENDIAN
);
2641 curr_bit_offset
+= 4;
2642 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_t_avg_w
, tvb
, curr_bit_offset
, 5, ENC_BIG_ENDIAN
);
2643 curr_bit_offset
+= 5;
2644 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_t_avg_t
, tvb
, curr_bit_offset
, 5, ENC_BIG_ENDIAN
);
2645 curr_bit_offset
+= 5;
2646 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_pc_meas_chan
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
2647 curr_bit_offset
+= 1;
2648 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_n_avg_i
, tvb
, curr_bit_offset
, 4, ENC_BIG_ENDIAN
);
2649 curr_bit_offset
+= 4;
2650 proto_item_set_len(item
,((curr_bit_offset
>>3) - (bit_offset
>>3) + 1));
2652 return (curr_bit_offset
- bit_offset
);
2656 de_rr_gprs_broadcast_info(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
)
2658 guint32 curr_offset
;
2661 curr_offset
= offset
;
2662 bit_offset
= curr_offset
<< 3;
2664 bit_offset
+= de_rr_rest_oct_gprs_cell_options(tvb
, tree
, bit_offset
);
2665 /*bit_offset += */de_rr_rest_oct_gprs_power_control_parameters(tvb
, tree
, bit_offset
);
2668 return (curr_offset
- offset
);
2672 * [3] 10.5.2.15 Handover Reference
2675 de_rr_ho_ref(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
2677 guint32 curr_offset
;
2679 curr_offset
= offset
;
2681 /* Handover reference value */
2682 proto_tree_add_item(subtree
, hf_gsm_a_rr_ho_ref_val
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
2684 curr_offset
= curr_offset
+ 1;
2686 return(curr_offset
- offset
);
2689 static const value_string gsm_a_access_tech_type_vals
[] = {
2691 { 1, "GSM E --note that GSM E covers GSM P"},
2692 { 2, "GSM R --note that GSM R covers GSM E and GSM P"},
2705 { 15, "Indicates the presence of a list of Additional access technologies"},
2710 static const value_string gsm_a_egprs_mcs_vals
[] = {
2726 static const value_string gsm_a_gprs_cs_vals
[] = {
2735 static const true_false_string gsm_a_tlli_block_channel_coding_vals
= {
2736 "mobile station shall use coding scheme as specified by the corresponding CHANNEL CODING COMMAND or EGPRS CHANNEL CODING COMMAND field",
2737 "mobile station shall use CS-1 in GPRS TBF mode or MCS-1 in EGPRS TBF mode"
2740 static const true_false_string gsm_a_resegment_vals
= {
2741 "Retransmitted RLC data blocks shall be re-segmented according to commanded MCS",
2742 "Retransmitted RLC data blocks shall not be re-segmented"
2745 static const true_false_string gsm_a_polling_vals
= {
2746 "MS shall send a PACKET CONTROL ACKNOWLEDGEMENT message in the uplink block specified by TBF Starting Time, on the assigned PDCH",
2747 "no action is required from MS"
2750 static const true_false_string gsm_a_usf_granularity_vals
= {
2751 "the mobile station shall transmit four consecutive RLC/MAC blocks",
2752 "the mobile station shall transmit one RLC/MAC block"
2755 static const true_false_string gsm_a_rlc_mode_vals
= {
2756 "RLC unacknowledged mode",
2757 "RLC acknowledged mode"
2760 static const true_false_string gsm_a_ta_valid_vals
= {
2761 "the timing advance value is valid",
2762 "the timing advance value is not valid"
2767 static const value_string gsm_a_egprs_windows_size_vals
[] = {
2803 static const value_string gsm_a_rr_gamma_vals
[] = {
2841 static const value_string gsm_a_link_quality_meas_mode_vals
[] = {
2842 { 0, "The MS shall not report either interference measurements or per slot BEP measurements"},
2843 { 1, "The MS shall report available interference measurements for timeslots 0 through 7"},
2844 { 2, "The MS shall report mean BEP on each assigned time slot ... No interference measurements shall be reported..."},
2845 { 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..."},
2851 de_tbf_starting_time(tvbuff_t
*tvb
, proto_tree
*tree
, guint32 bit_offset
)
2854 guint32 curr_bit_offset
;
2858 curr_bit_offset
= bit_offset
;
2860 proto_tree_add_bits_ret_val(tree
, hf_gsm_a_rr_tbf_T1prim
, tvb
, curr_bit_offset
, 5, &t1
, ENC_BIG_ENDIAN
);
2861 curr_bit_offset
+= 5;
2862 proto_tree_add_bits_ret_val(tree
, hf_gsm_a_rr_tbf_T3
, tvb
, curr_bit_offset
, 6, &t3
, ENC_BIG_ENDIAN
);
2863 curr_bit_offset
+= 6;
2864 proto_tree_add_bits_ret_val(tree
, hf_gsm_a_rr_tbf_T2
, tvb
, curr_bit_offset
, 5, &t2
, ENC_BIG_ENDIAN
);
2865 curr_bit_offset
+= 5;
2868 /* great care needed with signed/unsigned - -1 in unsigned is 0xffff, which mod(26) is not what you think !!! */
2869 t
= (26 + t3
- t2
) % 26;
2870 rfn
= (guint16
)((51 * t
) + t3
+ (51 * 26 * t1
));
2872 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
);
2873 PROTO_ITEM_SET_GENERATED(item
);
2874 return(curr_bit_offset
- bit_offset
);
2878 de_rr_ia_rest_oct_egprs_packet_uplink_assignment(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
, guint bit_len
)
2880 proto_tree
*subtree
;
2882 guint curr_bit_offset
;
2884 curr_bit_offset
= bit_offset
;
2886 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_EGPRS_PACKET_UPLINK_ASSIGNMENT
].strptr
);
2887 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_EGPRS_PACKET_UPLINK_ASSIGNMENT
]);
2888 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_extended_ra
, tvb
, curr_bit_offset
, 5, ENC_BIG_ENDIAN
);
2889 curr_bit_offset
+= 5;
2890 while (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Access Technologies Request", "Present", "Not Present"))
2892 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_access_tech_type
, tvb
, curr_bit_offset
, 4, ENC_BIG_ENDIAN
);
2893 curr_bit_offset
+= 4;
2896 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "", "TFI Assignment Present", "Multi Block Allocation Present"))
2898 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_tfi_assignment
, tvb
, curr_bit_offset
, 5, ENC_BIG_ENDIAN
);
2899 curr_bit_offset
+= 5;
2900 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_polling
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
2901 curr_bit_offset
+= 1;
2902 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Allocation Type", "Fixed Allocation (not to be used after Rel-4)", "Dynamic Allocation (mandatory after Rel-4)"))
2904 gint8 bitmap_len
= tvb_get_bits8(tvb
, curr_bit_offset
, 5);
2906 proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, 1+((curr_bit_offset
+5)>>3) - (curr_bit_offset
>>3), "Bitmap length %d", bitmap_len
);
2907 curr_bit_offset
+= 5;
2908 bitmap
= tvb_get_bits32(tvb
, curr_bit_offset
, bitmap_len
, ENC_BIG_ENDIAN
);
2909 proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, 1+((curr_bit_offset
+bitmap_len
)>>3) - (curr_bit_offset
>>3), "Bitmap %d", bitmap
);
2910 curr_bit_offset
+= bitmap_len
;
2911 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "P0 bits", "Present", "Not Present"))
2913 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_p0
, tvb
, curr_bit_offset
, 4, ENC_BIG_ENDIAN
);
2914 curr_bit_offset
+= 4;
2915 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_pr_mode
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
2916 curr_bit_offset
+= 1;
2921 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_usf
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
2922 curr_bit_offset
+= 3;
2923 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_usf_granularity
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
2924 curr_bit_offset
+= 1;
2925 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "P0 bits", "Present", "Not Present"))
2927 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_p0
, tvb
, curr_bit_offset
, 4, ENC_BIG_ENDIAN
);
2928 curr_bit_offset
+= 4;
2929 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_pr_mode
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
2930 curr_bit_offset
+= 1;
2934 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_egprs_mcs
, tvb
, curr_bit_offset
, 4, ENC_BIG_ENDIAN
);
2935 curr_bit_offset
+= 4;
2936 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_tlli_block_channel_coding
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
2937 curr_bit_offset
+= 1;
2938 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "BEP_PERIOD2", "Present", "Not Present"))
2940 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_bep_period2
, tvb
, curr_bit_offset
, 4, ENC_BIG_ENDIAN
);
2941 curr_bit_offset
+= 4;
2943 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_resegment
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
2944 curr_bit_offset
+= 1;
2945 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_egprs_window_size
, tvb
, curr_bit_offset
, 5, ENC_BIG_ENDIAN
);
2946 curr_bit_offset
+= 5;
2947 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Alpha", "Present", "Not Present"))
2949 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_alpha
, tvb
, curr_bit_offset
, 4, ENC_BIG_ENDIAN
);
2950 curr_bit_offset
+= 4;
2952 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_gamma
, tvb
, curr_bit_offset
, 5, ENC_BIG_ENDIAN
);
2953 curr_bit_offset
+= 5;
2954 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Timing Advance Index", "Present", "Not Present"))
2956 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_timing_adv_index
, tvb
, curr_bit_offset
, 4, ENC_BIG_ENDIAN
);
2957 curr_bit_offset
+= 4;
2959 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "TBF Starting Time", "Present", "Not Present"))
2961 curr_bit_offset
+= de_tbf_starting_time(tvb
, subtree
, curr_bit_offset
);
2963 /* Null breakpoint */
2965 else /* Multi Block Allocation */
2967 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Alpha", "Present", "Not Present"))
2969 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_alpha
, tvb
, curr_bit_offset
, 4, ENC_BIG_ENDIAN
);
2970 curr_bit_offset
+= 4;
2972 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_gamma
, tvb
, curr_bit_offset
, 5, ENC_BIG_ENDIAN
);
2973 curr_bit_offset
+= 5;
2974 curr_bit_offset
+= de_tbf_starting_time(tvb
, subtree
, curr_bit_offset
);
2975 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_num_of_radio_block_allocated
, tvb
, curr_bit_offset
, 2, ENC_BIG_ENDIAN
);
2976 curr_bit_offset
+= 2;
2977 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "P0 bits", "Present", "Not Present"))
2979 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_p0
, tvb
, curr_bit_offset
, 4, ENC_BIG_ENDIAN
);
2980 curr_bit_offset
+= 4;
2981 gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "BTS Power Control Mode", "Mode B (not to be used after Rel-4)", "Mode A (mandatory after Rel-4)");
2982 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_pr_mode
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
2983 curr_bit_offset
+= 1;
2986 /* Null breakpoint */
2987 if (curr_bit_offset
< bit_len
)
2989 if (gsm_rr_csn_HL_flag(tvb
,subtree
, 0,curr_bit_offset
++,"Additions in Rel-7", "Present", "Not present"))
2991 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "PFI", "Present", "Not Present"))
2993 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_pfi
, tvb
, curr_bit_offset
, 7, ENC_BIG_ENDIAN
);
2994 curr_bit_offset
+= 7;
2999 proto_item_set_len(item
,((curr_bit_offset
>>3) - (bit_offset
>>3) + 1));
3001 return (curr_bit_offset
- bit_offset
);
3006 de_rr_ia_rest_oct_tmgi(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
)
3008 proto_tree
*subtree
;
3010 gint curr_bit_offset
;
3015 curr_bit_offset
= bit_offset
;
3017 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_TMGI
].strptr
);
3018 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_TMGI
]);
3020 if (0 == gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "MCC and MNC Parameters", "Present", "Not Present")) /* without MCC and MNC parameters */
3022 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_mbms_service_id
, tvb
, curr_bit_offset
, 24, ENC_BIG_ENDIAN
);
3023 curr_bit_offset
+= 24;
3025 else /* with MCC and MNC parameters */
3027 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_mbms_service_id
, tvb
, curr_bit_offset
, 24, ENC_BIG_ENDIAN
);
3028 curr_bit_offset
+= 24;
3030 value16
= tvb_get_bits16(tvb
,curr_bit_offset
,12,ENC_BIG_ENDIAN
);
3031 mcc
[0] = '0' + ((value16
>>8)&0xf);
3032 mcc
[1] = '0' + ((value16
>>4)&0xf);
3033 mcc
[2] = '0' + ((value16
)&0xf);
3035 proto_tree_add_text(tree
,
3036 tvb
, curr_bit_offset
>>3, 12,
3037 "Mobile Country Code (MCC): %s",
3039 curr_bit_offset
+= 12;
3041 value16
= tvb_get_bits16(tvb
,curr_bit_offset
,12,ENC_BIG_ENDIAN
);
3042 mnc
[0] = '0' + ((value16
>>8)&0xf);
3043 mnc
[1] = '0' + ((value16
>>4)&0xf);
3044 mnc
[2] = '0' + ((value16
)&0xf);
3046 proto_tree_add_text(tree
,
3047 tvb
, curr_bit_offset
>>3, 12,
3048 "Mobile Network Code (MNC): %s",
3050 curr_bit_offset
+= 12;
3052 proto_item_set_len(item
,((curr_bit_offset
>>3) - (bit_offset
>>3) + 1));
3054 return (curr_bit_offset
- bit_offset
);
3060 de_rr_ia_rest_oct_packet_timing_advance(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
)
3062 proto_tree
*subtree
;
3064 gint curr_bit_offset
;
3067 curr_bit_offset
= bit_offset
;
3069 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_PACKET_TIMING_ADVANCE
].strptr
);
3070 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_PACKET_TIMING_ADVANCE
]);
3072 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Timing Advance Value", "Present", "Not Present"))
3074 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_timing_adv
, tvb
, curr_bit_offset
, 6, ENC_BIG_ENDIAN
);
3075 curr_bit_offset
+= 6;
3078 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Timing Advance Index and Timeslot", "Present", "Not Present"))
3080 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_timing_adv_index
, tvb
, curr_bit_offset
, 4, ENC_BIG_ENDIAN
);
3081 curr_bit_offset
+= 4;
3082 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_timing_adv_timeslot_num
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
3083 curr_bit_offset
+= 3;
3085 proto_item_set_len(item
,((curr_bit_offset
>>3) - (bit_offset
>>3) + 1));
3087 return (curr_bit_offset
- bit_offset
);
3093 de_rr_ia_rest_oct_multiple_blocks_packet_downlink_assignment(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
)
3095 proto_tree
*subtree
;
3097 gint curr_bit_offset
;
3100 curr_bit_offset
= bit_offset
;
3102 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_MULTIPLE_BLOCKS_PACKET_DOWNLINK_ASSIGNMENT
].strptr
);
3103 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_MULTIPLE_BLOCKS_PACKET_DOWNLINK_ASSIGNMENT
]);
3105 curr_bit_offset
+= de_tbf_starting_time(tvb
, subtree
, curr_bit_offset
);
3106 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_num_of_radio_block_allocated
, tvb
, curr_bit_offset
, 4, ENC_BIG_ENDIAN
);
3107 curr_bit_offset
+= 4;
3109 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "", "default 0 bit", "Reserved Value"))
3111 if (0 == gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "MBMS Assignment", "(Non-distribution)", "(Distribution)"))
3112 {/* MBMS Assignment (Distribution) */
3113 curr_bit_offset
+= de_rr_ia_rest_oct_tmgi(tvb
, tree
, curr_bit_offset
);
3115 else /* MBMS Assignment (Non-distribution) */
3117 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_tlli
, tvb
, curr_bit_offset
, 32, ENC_BIG_ENDIAN
);
3118 curr_bit_offset
+= 32;
3119 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "MS Parameters", "Present", "Not Present"))
3121 value
= tvb_get_bits8(tvb
,curr_bit_offset
,2);
3122 proto_tree_add_text(tree
,
3123 tvb
, curr_bit_offset
>>3, 2,
3124 "Length Indicator of MS ID: %d",
3126 curr_bit_offset
+= 2;
3128 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_ms_id
, tvb
, curr_bit_offset
, value
+1, ENC_BIG_ENDIAN
);
3129 curr_bit_offset
+= value
+1;
3130 curr_bit_offset
+= de_rr_ia_rest_oct_packet_timing_advance(tvb
, tree
, curr_bit_offset
);
3131 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Alpha", "Present", "Not Present"))
3133 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_alpha
, tvb
, curr_bit_offset
, 4, ENC_BIG_ENDIAN
);
3134 curr_bit_offset
+= 4;
3135 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Gamma", "Present", "Not Present"))
3137 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_gamma
, tvb
, curr_bit_offset
, 5, ENC_BIG_ENDIAN
);
3138 curr_bit_offset
+= 5;
3144 proto_item_set_len(item
,((curr_bit_offset
>>3) - (bit_offset
>>3) + 1));
3146 return (curr_bit_offset
- bit_offset
);
3153 de_rr_ia_rest_oct_packet_uplink_assignment(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
, guint bit_len
)
3155 proto_tree
*subtree
;
3157 guint curr_bit_offset
;
3159 curr_bit_offset
= bit_offset
;
3161 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_PACKET_UPLINK_ASSIGNMENT
].strptr
);
3162 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_PACKET_UPLINK_ASSIGNMENT
]);
3164 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Packet Uplink Assignment", "Normal", "Single Block"))
3166 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_tfi_assignment
, tvb
, curr_bit_offset
, 5, ENC_BIG_ENDIAN
);
3167 curr_bit_offset
+= 5;
3168 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_polling
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
3169 curr_bit_offset
+= 1;
3170 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Allocation Type", "Fixed Allocation (not to be used after Rel-4))", "Dynamic Allocation (mandatory after Rel-4)"))
3172 gint8 bitmap_len
= tvb_get_bits8(tvb
, curr_bit_offset
, 5);
3174 proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, 1+((curr_bit_offset
+5)>>3) - (curr_bit_offset
>>3), "Bitmap length %d", bitmap_len
);
3175 curr_bit_offset
+= 5;
3176 bitmap
= tvb_get_bits32(tvb
, curr_bit_offset
, bitmap_len
, ENC_BIG_ENDIAN
);
3177 proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, 1+((curr_bit_offset
+bitmap_len
)>>3) - (curr_bit_offset
>>3), "Bitmap %d", bitmap
);
3178 curr_bit_offset
+= bitmap_len
;
3179 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "P0 bits", "Present", "Not Present"))
3181 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_p0
, tvb
, curr_bit_offset
, 4, ENC_BIG_ENDIAN
);
3182 curr_bit_offset
+= 4;
3183 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_pr_mode
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
3184 curr_bit_offset
+= 1;
3189 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_usf
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
3190 curr_bit_offset
+= 3;
3191 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_usf_granularity
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
3192 curr_bit_offset
+= 1;
3193 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "P0", "Present", "Not Present"))
3195 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_p0
, tvb
, curr_bit_offset
, 4, ENC_BIG_ENDIAN
);
3196 curr_bit_offset
+= 4;
3197 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_pr_mode
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
3198 curr_bit_offset
+= 1;
3201 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_gprs_cs
, tvb
, curr_bit_offset
, 2, ENC_BIG_ENDIAN
);
3202 curr_bit_offset
+= 2;
3203 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_tlli_block_channel_coding
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
3204 curr_bit_offset
+= 1;
3205 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Alpha", "Present", "Not Present"))
3207 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_alpha
, tvb
, curr_bit_offset
, 4, ENC_BIG_ENDIAN
);
3208 curr_bit_offset
+= 4;
3210 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_gamma
, tvb
, curr_bit_offset
, 5, ENC_BIG_ENDIAN
);
3211 curr_bit_offset
+= 5;
3212 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Timing Advance Index", "Present", "Not Present"))
3214 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_timing_adv_index
, tvb
, curr_bit_offset
, 4, ENC_BIG_ENDIAN
);
3215 curr_bit_offset
+= 4;
3217 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "TBF Starting Time", "Present", "Not Present"))
3219 curr_bit_offset
+= de_tbf_starting_time(tvb
, subtree
, curr_bit_offset
);
3222 else /* Single Block Allocation */
3224 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Alpha", "Present", "Not Present"))
3226 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_alpha
, tvb
, curr_bit_offset
, 4, ENC_BIG_ENDIAN
);
3227 curr_bit_offset
+= 4;
3229 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_gamma
, tvb
, curr_bit_offset
, 5, ENC_BIG_ENDIAN
);
3230 curr_bit_offset
+= 5;
3231 /* fixed bits '01' */
3232 gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Bit reserved for earlier version of protocol", "Early R97 version", "Later than R97 version");
3233 gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Bit reserved for earlier version of protocol", "Later than R97 version", "Early R97 version");
3234 curr_bit_offset
+= de_tbf_starting_time(tvb
, subtree
, curr_bit_offset
);
3235 if (gsm_rr_csn_HL_flag(tvb
,subtree
, 0,curr_bit_offset
++,"P0", "Present", "Not Present"))
3237 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_p0
, tvb
, curr_bit_offset
, 4, ENC_BIG_ENDIAN
);
3238 curr_bit_offset
+= 4;
3239 /* The value '1' was allocated in an earlier version of the protocol and shall not be used */
3240 gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Bit reserved for earlier version of protocol", "Earlier version", "Current version");
3241 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_pr_mode
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
3242 curr_bit_offset
+= 1;
3246 /* Null breakpoint */
3247 if (curr_bit_offset
< bit_len
)
3249 if (gsm_rr_csn_HL_flag(tvb
,subtree
, 0,curr_bit_offset
++,"Additions in R99", "Present", "Not Present"))
3251 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Extended RA", "Present", "Not Present"))
3253 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_extended_ra
, tvb
, curr_bit_offset
, 5, ENC_BIG_ENDIAN
);
3254 curr_bit_offset
+= 5;
3259 /* Null breakpoint */
3260 if (curr_bit_offset
< bit_len
)
3262 if (gsm_rr_csn_HL_flag(tvb
,subtree
, 0,curr_bit_offset
++,"Additions in Rel-6", "Present", "Not Present"))
3264 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "PFI", "Present", "Not Present"))
3266 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_pfi
, tvb
, curr_bit_offset
, 7, ENC_BIG_ENDIAN
);
3267 curr_bit_offset
+= 7;
3271 proto_item_set_len(item
,((curr_bit_offset
>>3) - (bit_offset
>>3) + 1));
3273 return (curr_bit_offset
- bit_offset
);
3278 de_rr_ia_rest_oct_packet_downlink_assignment(tvbuff_t
*tvb
, proto_tree
*tree
, guint bit_offset
, guint bit_len
)
3280 proto_tree
*subtree
;
3282 guint curr_bit_offset
;
3284 curr_bit_offset
= bit_offset
;
3286 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_PACKET_DOWNLINK_ASSIGNMENT
].strptr
);
3287 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_PACKET_DOWNLINK_ASSIGNMENT
]);
3289 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_tlli
, tvb
, curr_bit_offset
, 32, ENC_BIG_ENDIAN
);
3290 curr_bit_offset
+= 32;
3292 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "TFI Assignment (etc)", "Present", "Not Present"))
3294 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_tfi_assignment
, tvb
, curr_bit_offset
, 5, ENC_BIG_ENDIAN
);
3295 curr_bit_offset
+= 5;
3296 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_rlc_mode
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
3297 curr_bit_offset
+= 1;
3298 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Alpha", "Present", "Not Present"))
3300 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_alpha
, tvb
, curr_bit_offset
, 4, ENC_BIG_ENDIAN
);
3301 curr_bit_offset
+= 4;
3303 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_gamma
, tvb
, curr_bit_offset
, 5, ENC_BIG_ENDIAN
);
3304 curr_bit_offset
+= 5;
3305 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_polling
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
3306 curr_bit_offset
+= 1;
3307 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_ta_valid
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
3308 curr_bit_offset
+= 1;
3310 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Timing Advance Index", "Present", "Not Present"))
3312 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_timing_adv_index
, tvb
, curr_bit_offset
, 4, ENC_BIG_ENDIAN
);
3313 curr_bit_offset
+= 4;
3315 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "TBF Starting Time", "Present", "Not Present"))
3317 curr_bit_offset
+= de_tbf_starting_time(tvb
, subtree
, curr_bit_offset
);
3319 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "P0", "Present", "Not Present"))
3321 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_p0
, tvb
, curr_bit_offset
, 4, ENC_BIG_ENDIAN
);
3322 curr_bit_offset
+= 4;
3323 gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "BTS Power Control Mode", "Mode B (not to be used after Rel-4)", "Mode A (mandatory after Rel-4)");
3324 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_pr_mode
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
3325 curr_bit_offset
+= 1;
3328 /* Null breakpoint */
3329 if (curr_bit_offset
< bit_len
)
3331 if (gsm_rr_csn_HL_flag(tvb
,subtree
, 0,curr_bit_offset
++,"Additions in R99", "Present", "Not Present"))
3333 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_egprs_window_size
, tvb
, curr_bit_offset
, 5, ENC_BIG_ENDIAN
);
3334 curr_bit_offset
+= 5;
3335 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_link_quality_meas_mode
, tvb
, curr_bit_offset
, 2, ENC_BIG_ENDIAN
);
3336 curr_bit_offset
+= 2;
3337 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "BEP_PERIOD2", "Present", "Not Present"))
3339 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_bep_period2
, tvb
, curr_bit_offset
, 4, ENC_BIG_ENDIAN
);
3340 curr_bit_offset
+= 4;
3345 /* Null breakpoint */
3346 if (curr_bit_offset
< bit_len
)
3348 if (gsm_rr_csn_HL_flag(tvb
,subtree
, 0, curr_bit_offset
++, "Additions in Rel-6", "Present", "Not Present"))
3350 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "PFI", "Present", "Not Present"))
3352 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_pfi
, tvb
, curr_bit_offset
, 7, ENC_BIG_ENDIAN
);
3353 curr_bit_offset
+= 7;
3357 proto_item_set_len(item
,((curr_bit_offset
>>3) - (bit_offset
>>3) + 1));
3359 return (curr_bit_offset
- bit_offset
);
3363 de_rr_ia_rest_oct_second_part_packet_assignment(tvbuff_t
*tvb
, proto_tree
*tree
, guint bit_offset
, guint bit_len
)
3365 proto_tree
*subtree
;
3367 guint curr_bit_offset
;
3369 curr_bit_offset
= bit_offset
;
3371 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_SECOND_PART_PACKET_ASSIGNMENT
].strptr
);
3372 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_SECOND_PART_PACKET_ASSIGNMENT
]);
3374 /* Null breakpoint */
3375 if (curr_bit_offset
< bit_len
)
3377 if (gsm_rr_csn_HL_flag(tvb
,subtree
, 0,curr_bit_offset
++,"Additions in R99", "Present", "Not Present"))
3379 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Extended RA", "Present", "Not Present"))
3381 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_extended_ra
, tvb
, curr_bit_offset
, 5, ENC_BIG_ENDIAN
);
3382 curr_bit_offset
+= 5;
3386 proto_item_set_len(item
,((curr_bit_offset
>>3) - (bit_offset
>>3) + 1));
3388 return (curr_bit_offset
- bit_offset
);
3393 * [3] 10.5.2.16 IA Rest Octets
3397 de_rr_ia_rest_oct(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
3400 guint32 curr_offset
;
3404 guint8 tvb_len
= tvb_length(tvb
);
3405 guint16 bit_len
= tvb_len
<< 3;
3407 curr_offset
= offset
;
3409 bit_offset
= curr_offset
<< 3;
3410 if (0 == gsm_rr_csn_HL_flag(tvb
, subtree
, 0, bit_offset
++, "First Discriminator Bit", "High", "Low"))
3412 if (0 == gsm_rr_csn_HL_flag(tvb
, subtree
, 0, bit_offset
++, "Second Discriminator Bit", "High", "Low"))
3415 gsm_rr_csn_HL_flag(tvb
, subtree
, 0,bit_offset
++, "A compressed version of the INTER RAT HANDOVER INFO message ", "shall be used", "shall not be used");
3419 if (0 == gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "Discriminator bit", "reserved for future use", "EGPRS Packet Uplink Assignment or Multiple blocks Packet Downlink Assignment"))
3421 if (0 == gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "", "Multiple blocks Packet Downlink Assignment", "EGPRS Packet Uplink Assignment"))
3423 bit_offset
+= de_rr_ia_rest_oct_egprs_packet_uplink_assignment(tvb
, subtree
, bit_offset
, bit_len
);
3427 bit_offset
+= de_rr_ia_rest_oct_multiple_blocks_packet_downlink_assignment(tvb
, subtree
, bit_offset
);
3432 proto_tree_add_text(subtree
, tvb
, bit_offset
>>3, 1, "reserved for future use (however the value 7C for the first octet shall not be used)");
3438 if (0 == gsm_rr_csn_HL_flag(tvb
, subtree
, 0, bit_offset
++, "Second Discriminator Bit", "High", "Low"))
3441 proto_tree_add_bits_ret_val(subtree
, hf_gsm_a_rr_ma_length
, tvb
, bit_offset
, 6, &ma_length
, ENC_BIG_ENDIAN
);
3443 /* Frequency Parameters, before time */
3448 proto_tree_add_text(subtree
, tvb
, bit_offset
>>3, 1, "MAIO: %d", tvb_get_bits8(tvb
,bit_offset
,6));
3450 length
= (gint
)ma_length
;
3451 item
= proto_tree_add_text(subtree
,tvb
, bit_offset
>>3, (length
>>3)-1, "MA Bitmap: ");
3452 length
= (length
-1)*8;
3455 proto_item_append_text(item
,"%d",tvb_get_bits8(tvb
,bit_offset
,1));
3460 gsm_rr_csn_HL_flag(tvb
, subtree
, 0, bit_offset
++, "A compressed version of the INTER RAT HANDOVER INFO message", "shall be used", "shall not be used");
3464 if (0 == gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "Discriminator Bit", "Second Part Packet Assignment", "Packet Assignment"))
3466 if (0 == gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "Discriminator Bit", "Packet Downlink Assignment", "Packet Uplink Assignment"))
3468 /* 00 < Packet Uplink Assignment > */
3469 bit_offset
+= de_rr_ia_rest_oct_packet_uplink_assignment(tvb
, subtree
, bit_offset
, bit_len
);
3471 else /* 01 < Packet Downlink Assignment > */
3473 bit_offset
+= de_rr_ia_rest_oct_packet_downlink_assignment(tvb
, subtree
, bit_offset
, bit_len
);
3476 else /* 1 < Second Part Packet Assignment > */
3478 bit_offset
+= de_rr_ia_rest_oct_second_part_packet_assignment(tvb
, subtree
, bit_offset
, bit_len
);
3482 gsm_rr_csn_padding_bits(subtree
, tvb
, bit_offset
, tvb_len
);
3483 return tvb_len
- offset
;
3487 * [3] 10.5.2.17 IAR Rest Octets
3491 de_rr_iar_rest_oct(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
3493 guint32 curr_bit_offset
;
3495 guint8 tvb_len
= tvb_length(tvb
);
3497 curr_bit_offset
= offset
<<3;
3499 for( i
=0; i
<4; i
++ )
3501 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Extended RA", "Present", "Not Present"))
3503 proto_tree_add_text(subtree
, tvb
, curr_bit_offset
>>3, 1, "Extended RA %d present", i
);
3504 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_extended_ra
, tvb
, curr_bit_offset
, 5, ENC_BIG_ENDIAN
);
3505 curr_bit_offset
+= 5;
3509 proto_tree_add_text(subtree
, tvb
, curr_bit_offset
>>3, 1, "Extended RA %d not present", i
);
3512 gsm_rr_csn_padding_bits(subtree
, tvb
, curr_bit_offset
, tvb_len
);
3513 return tvb_len
- offset
;
3517 * [3] 10.5.2.18 IAX Rest Octets
3520 de_rr_iax_rest_oct(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
3522 guint32 curr_bit_offset
;
3523 guint8 tvb_len
= tvb_length(tvb
);
3525 curr_bit_offset
= offset
<<3;
3527 gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "A compressed version of the INTER RAT HANDOVER INFO message", "shall be used", "shall not be used");
3529 gsm_rr_csn_padding_bits(subtree
, tvb
, curr_bit_offset
, tvb_len
);
3530 return tvb_len
- offset
;
3534 * [3] 10.5.2.19 L2 Pseudo Length
3537 de_rr_l2_pseudo_len(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
3539 guint32 curr_offset
;
3541 curr_offset
= offset
;
3543 /* L2 Pseudo Length value */
3544 proto_tree_add_item(subtree
, hf_gsm_a_rr_L2_pseudo_len
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3546 curr_offset
= curr_offset
+ 1;
3548 return(curr_offset
- offset
);
3552 * [3] 10.5.2.20 Measurement Results
3554 static const true_false_string gsm_a_rr_dtx_vals
= {
3560 static const true_false_string gsm_a_rr_mv_vals
= {
3561 "The measurement results are not valid",
3562 "The measurement results are valid"
3565 static const value_string gsm_a_rr_rxqual_vals
[] = {
3566 {0, "BER < 0.2%, Mean value 0.14%"},
3567 {1, "0.2% <= BER < 0.4%, Mean value 0.28%"},
3568 {2, "0.4% <= BER < 0.8%, Mean value 0.57%"},
3569 {3, "0.8% <= BER < 1.6%, Mean value 1.13%"},
3570 {4, "1.6% <= BER < 3.2%, Mean value 2.26%"},
3571 {5, "3.2% <= BER < 6.4%, Mean value 4.53%"},
3572 {6, "6.4% <= BER < 12.8%, Mean value 9.05%"},
3573 {7, "BER > 12.8%, Mean value 18.10%"},
3577 static const value_string gsm_a_rr_ncell_vals
[] = {
3578 {0, "No neighbour cell measurement result"},
3579 {1, "1 neighbour cell measurement result"},
3580 {2, "2 neighbour cell measurement result"},
3581 {3, "3 neighbour cell measurement result"},
3582 {4, "4 neighbour cell measurement result"},
3583 {5, "5 neighbour cell measurement result"},
3584 {6, "6 neighbour cell measurement result"},
3585 {7, "Neighbour cell information not available for serving cell"},
3590 de_rr_meas_res(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
3592 guint32 curr_offset
;
3596 curr_offset
= offset
;
3600 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_ba_used
, tvb
, curr_offset
<<3, 1, ENC_BIG_ENDIAN
);
3602 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_dtx_used
, tvb
, (curr_offset
<<3)+1, 1, ENC_BIG_ENDIAN
);
3603 /* RXLEV-FULL-SERVING-CELL */
3604 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_rxlev_full_serv_cell
, tvb
, (curr_offset
<<3)+2, 6, ENC_BIG_ENDIAN
);
3609 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_3g_ba_used
, tvb
, curr_offset
<<3, 1, ENC_BIG_ENDIAN
);
3611 proto_tree_add_item(subtree
, hf_gsm_a_rr_meas_valid
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3612 /* RXLEV-SUB-SERVING-CELL */
3613 proto_tree_add_item(subtree
, hf_gsm_a_rr_rxlev_sub_serv_cell
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3618 /* RXQUAL-FULL-SERVING-CELL */
3619 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_rxqual_full_serv_cell
, tvb
, (curr_offset
<<3)+1, 3, ENC_BIG_ENDIAN
);
3621 /* RXQUAL-SUB-SERVING-CELL */
3622 proto_tree_add_item(subtree
, hf_gsm_a_rr_rxqual_sub_serv_cell
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3624 bit_offset
= (curr_offset
<< 3) + 7;
3625 proto_tree_add_bits_ret_val(subtree
, hf_gsm_a_rr_no_ncell_m
, tvb
, bit_offset
, 3, &no_ncell_m
, ENC_BIG_ENDIAN
);
3627 if (no_ncell_m
== 7) /* No neighbour cell information available) */
3631 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_rxlev_ncell
, tvb
, bit_offset
, 6, ENC_BIG_ENDIAN
);
3633 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_bcch_freq_ncell
, tvb
, bit_offset
, 5, ENC_BIG_ENDIAN
);
3635 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_bsic_ncell
, tvb
, bit_offset
, 6, ENC_BIG_ENDIAN
);
3644 * [3] 10.5.2.20a GPRS Measurement Results
3647 * [3] 10.5.2.21 Mobile Allocation
3650 de_rr_mob_all(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
)
3652 guint32 curr_offset
;
3657 curr_offset
= offset
;
3659 item
= proto_tree_add_text(tree
, tvb
, curr_offset
, len
, "Bitmap of increasing ARFCNs included in the Mobile Allocation: ");
3660 for(i
=len
; i
>0; i
--)
3662 value
= tvb_get_guint8(tvb
,curr_offset
+i
-1);
3665 proto_item_append_text(item
,"%d",(value
>>j
)&0x01);
3669 curr_offset
= curr_offset
+ len
;
3670 return(curr_offset
- offset
);
3674 * [3] 10.5.2.21a Mobile Time Difference
3677 de_rr_mob_time_diff(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
)
3679 guint32 curr_offset
;
3681 curr_offset
= offset
;
3683 proto_tree_add_item(tree
, hf_gsm_a_rr_mobile_time_difference
, tvb
, curr_offset
, len
, ENC_BIG_ENDIAN
);
3685 curr_offset
= curr_offset
+ len
;
3686 return(curr_offset
- offset
);
3690 * [3] 10.5.2.21aa MultiRate configuration
3692 /* Multirate speech version Octet 3 Bits 8 7 6 */
3693 static const value_string multirate_speech_ver_vals
[] = {
3694 { 1, "Adaptive Multirate speech version 1"},
3695 { 2, "Adaptive Multirate speech version 2"},
3698 /* Bit 5 NSCB: Noise Suppression Control Bit */
3699 static const value_string NSCB_vals
[] = {
3700 { 0, "Noise Suppression can be used (default)"},
3701 { 1, "Noise Suppression shall be turned off"},
3704 /* Bit 4 ICMI: Initial Codec Mode Indicator */
3705 static const value_string ICMI_vals
[] = {
3706 { 0, "The initial codec mode is defined by the implicit rule provided in 3GPP TS 05.09"},
3707 { 1, "The initial codec mode is defined by the Start Mode field"},
3711 Table 10.5.2.21aa.2: Set of adaptive multirate codec modes field (octet 4)
3712 for the Multirate speech version 1
3714 static const true_false_string gsm_a_rr_set_of_amr_codec_modes
= {
3715 "is part of the subset",
3716 "is not part of the subset"
3719 static const value_string gsm_a_rr_amr_threshold_vals
[] = {
3787 static value_string_ext gsm_a_rr_amr_threshold_vals_ext
= VALUE_STRING_EXT_INIT(gsm_a_rr_amr_threshold_vals
);
3789 static const value_string gsm_a_rr_amr_hysteresis_vals
[] = {
3810 de_rr_multirate_conf(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
)
3812 guint32 curr_offset
;
3814 gint bit_offset
, remaining_length
, nb_of_params
;
3816 curr_offset
= offset
;
3818 proto_tree_add_item(tree
, hf_gsm_a_rr_multirate_speech_ver
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3819 proto_tree_add_item(tree
, hf_gsm_a_rr_NCSB
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3820 proto_tree_add_item(tree
, hf_gsm_a_rr_ICMI
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3821 /* The initial codec mode is coded as in 3GPP TS 45.009 */
3822 proto_tree_add_item(tree
, hf_gsm_a_rr_start_mode
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3823 oct
= ( tvb_get_guint8(tvb
,curr_offset
) &0xe0 ) >> 5;
3827 /* Adaptive Multirate speech version 1 */
3828 /* Set of AMR codec modes */
3829 proto_tree_add_item(tree
, hf_gsm_a_rr_set_of_amr_codec_modes_v1_b8
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3830 proto_tree_add_item(tree
, hf_gsm_a_rr_set_of_amr_codec_modes_v1_b7
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3831 proto_tree_add_item(tree
, hf_gsm_a_rr_set_of_amr_codec_modes_v1_b6
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3832 proto_tree_add_item(tree
, hf_gsm_a_rr_set_of_amr_codec_modes_v1_b5
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3833 proto_tree_add_item(tree
, hf_gsm_a_rr_set_of_amr_codec_modes_v1_b4
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3834 proto_tree_add_item(tree
, hf_gsm_a_rr_set_of_amr_codec_modes_v1_b3
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3835 proto_tree_add_item(tree
, hf_gsm_a_rr_set_of_amr_codec_modes_v1_b2
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3836 proto_tree_add_item(tree
, hf_gsm_a_rr_set_of_amr_codec_modes_v1_b1
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3839 remaining_length
= len
-2;
3842 /* Adaptive Multirate speech version 2 */
3843 proto_tree_add_item(tree
, hf_gsm_a_rr_set_of_amr_codec_modes_v2_b5
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3844 proto_tree_add_item(tree
, hf_gsm_a_rr_set_of_amr_codec_modes_v2_b4
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3845 proto_tree_add_item(tree
, hf_gsm_a_rr_set_of_amr_codec_modes_v2_b3
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3846 proto_tree_add_item(tree
, hf_gsm_a_rr_set_of_amr_codec_modes_v2_b2
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3847 proto_tree_add_item(tree
, hf_gsm_a_rr_set_of_amr_codec_modes_v2_b1
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3850 remaining_length
= len
-2;
3853 proto_tree_add_text(tree
,tvb
,offset
,1,"Unknown version");
3854 proto_tree_add_text(tree
,tvb
, curr_offset
, len
-1 ,"Data(Not decoded)");
3855 remaining_length
= 0;
3859 if (remaining_length
)
3861 bit_offset
= (curr_offset
<<3) + 2;
3862 nb_of_params
= remaining_length
- 1;
3863 while (nb_of_params
)
3865 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_amr_threshold
, tvb
, bit_offset
, 6, ENC_BIG_ENDIAN
);
3867 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_amr_hysteresis
, tvb
, bit_offset
, 4, ENC_BIG_ENDIAN
);
3873 curr_offset
= offset
+ len
;
3874 return(curr_offset
- offset
);
3878 * [3] 10.5.2.21b Multislot Allocation
3881 de_rr_mult_all(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
)
3884 guint32 curr_offset
;
3888 curr_offset
= offset
;
3890 item
= proto_tree_add_text(tree
,tvb
, curr_offset
, 1 ,"List of DA:");
3892 oct
= tvb_get_guint8(tvb
, curr_offset
);
3898 proto_item_append_text(item
," DA%d",i
+1);
3902 if( oct
& 0x80 ) /* octet 3a present */
3904 item
= proto_tree_add_text(tree
,tvb
, curr_offset
, 1 ,"List of UA:");
3905 oct
= tvb_get_guint8(tvb
, curr_offset
);
3911 proto_item_append_text(item
," UA%d",i
+1);
3916 while ( curr_offset
< offset
+ len
)
3918 proto_tree_add_item(tree
, hf_gsm_a_rr_ma_channel_set
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3922 return(curr_offset
- offset
);
3926 * [3] 10.5.2.21c NC mode
3930 * [3] 10.5.2.22 Neighbour Cell Description
3932 static const value_string gsm_a_rr_ext_ind_vals
[] = {
3933 { 0, "The information element carries the complete BA"},
3934 { 1, "The information element carries only a part of the BA"},
3938 de_rr_neigh_cell_desc(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
3940 guint32 curr_offset
;
3942 curr_offset
= offset
;
3944 proto_tree_add_item(tree
, hf_gsm_a_rr_ext_ind
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3945 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_ba_ind
, tvb
, (curr_offset
<<3)+3, 1, ENC_BIG_ENDIAN
);
3947 return dissect_arfcn_list(tvb
, tree
, pinfo
, offset
, 16, add_string
, string_len
);
3951 * [3] 10.5.2.22a Neighbour Cell Description 2
3954 de_rr_neigh_cell_desc2(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
3956 guint32 curr_offset
;
3958 curr_offset
= offset
;
3960 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_multiband_reporting
, tvb
, (curr_offset
<<3)+1, 2, ENC_BIG_ENDIAN
);
3961 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_ba_ind
, tvb
, (curr_offset
<<3)+3, 1, ENC_BIG_ENDIAN
);
3963 return dissect_arfcn_list2(tvb
, tree
, pinfo
, offset
, 16, add_string
, string_len
);
3967 * [3] 10.5.2.22b (void)
3968 * [3] 10.5.2.22c NT/N Rest Octets
3972 * [3] 10.5.2.23 P1 Rest Octets
3975 de_rr_p1_rest_oct(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
3978 guint32 curr_offset
, value
;
3979 gint bit_offset
, bit_offset_sav
;
3980 guint8 tvb_len
= tvb_length(tvb
);
3981 guint16 bit_len
= tvb_len
<< 3;
3983 curr_offset
= offset
;
3984 bit_offset
= curr_offset
<< 3;
3986 if (gsm_rr_csn_HL_flag(tvb
, subtree
, bit_len
, bit_offset
++, "NLN(PCH)", "Present", "Not present"))
3988 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_nln_pch
, tvb
, bit_offset
, 2, ENC_BIG_ENDIAN
);
3990 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_nln_status_pch
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
3993 if (gsm_rr_csn_HL_flag(tvb
, subtree
, bit_len
, bit_offset
++, "Priority 1", "Present", "Not present"))
3995 item2
= proto_tree_add_bits_item(subtree
, hf_gsm_a_call_prio
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
3997 proto_item_append_text(item2
, " for Mobile Identity 1");
3999 if (gsm_rr_csn_HL_flag(tvb
, subtree
, bit_len
, bit_offset
++, "Priority 2", "Present", "Not present"))
4001 item2
= proto_tree_add_bits_item(subtree
, hf_gsm_a_call_prio
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
4003 proto_item_append_text(item2
, " for Mobile Identity 2");
4005 if (gsm_rr_csn_HL_flag(tvb
, subtree
, bit_len
, bit_offset
++, "Group Call Information", "Present", "Not present"))
4006 { /* Group Call Information */
4007 bit_offset_sav
= bit_offset
;
4009 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "Group Channel Description", "Present", "Not Present"))
4010 { /* Group Channel Description */
4012 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "Hopping case", "Present", "Not Present"))
4013 { /* Hopping case */
4014 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "????", "Present", "Not Present"))
4020 value
= tvb_get_bits8(tvb
,bit_offset
,8);
4021 bit_offset
+= 8 + (value
<<3);
4025 proto_tree_add_text(subtree
,tvb
, bit_offset_sav
>>3, (bit_offset
-bit_offset_sav
)>>3,"Group Call Information: Data(Not decoded)");
4027 gsm_rr_csn_HL_flag(tvb
, subtree
, bit_len
, bit_offset
++, "Packet Page Indication 1", "For GPRS", "For RR connection establishment");
4028 gsm_rr_csn_HL_flag(tvb
, subtree
, bit_len
, bit_offset
++, "Packet Page Indication 2", "For GPRS", "For RR connection establishment");
4030 /* Truncation allowed (see 44.018 section 8.9) */
4032 gsm_rr_csn_padding_bits(subtree
, tvb
, bit_offset
, tvb_len
);
4033 return tvb_len
- offset
;
4037 * [3] 10.5.2.24 P2 Rest Octets
4040 de_rr_p2_rest_oct(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
4044 guint32 curr_offset
;
4046 guint8 tvb_len
= tvb_length(tvb
);
4047 guint16 bit_len
= tvb_len
<< 3;
4049 curr_offset
= offset
;
4050 bit_offset
= curr_offset
<< 3;
4052 if (gsm_rr_csn_HL_flag(tvb
, subtree
, bit_len
, bit_offset
++, "Channel Needed 3", "Present", "Not present"))
4054 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_chnl_needed_ch3
, tvb
, bit_offset
, 2, ENC_BIG_ENDIAN
);
4057 if (gsm_rr_csn_HL_flag(tvb
, subtree
, bit_len
,bit_offset
++, "NLN (PCH)", "Present", "Not present"))
4059 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_nln_pch
, tvb
, bit_offset
, 2, ENC_BIG_ENDIAN
);
4061 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_nln_status_pch
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
4064 if (gsm_rr_csn_HL_flag(tvb
, subtree
, bit_len
, bit_offset
++, "Priority 1", "Present", "Not present"))
4066 item2
= proto_tree_add_bits_item(subtree
, hf_gsm_a_call_prio
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
4068 proto_item_append_text(item2
, " for Mobile Identity 1");
4070 if (gsm_rr_csn_HL_flag(tvb
, subtree
, bit_len
, bit_offset
++, "Priority 2", "Present", "Not present"))
4072 item2
= proto_tree_add_bits_item(subtree
, hf_gsm_a_call_prio
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
4074 proto_item_append_text(item2
, " for Mobile Identity 2");
4076 if (gsm_rr_csn_HL_flag(tvb
, subtree
, bit_len
, bit_offset
++, "Priority 3", "Present", "Not present"))
4078 item2
= proto_tree_add_bits_item(subtree
, hf_gsm_a_call_prio
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
4080 proto_item_append_text(item2
, " for Mobile Identity 3");
4082 gsm_rr_csn_HL_flag(tvb
, subtree
, bit_len
, bit_offset
++, "Packet Paging Procedure 1", "For GPRS", "For RR connection establishment");
4083 gsm_rr_csn_HL_flag(tvb
, subtree
, bit_len
, bit_offset
++, "Packet Paging Procedure 2", "For GPRS", "For RR connection establishment");
4084 gsm_rr_csn_HL_flag(tvb
, subtree
, bit_len
, bit_offset
++, "Packet Paging Procedure 3", "For GPRS", "For RR connection establishment");
4087 if (gsm_rr_csn_HL_flag(tvb
, subtree
, bit_len
, bit_offset
++, "Additions in release 6", "Present", "Not present"))
4088 { /* Additions in release 6 */
4090 proto_tree_add_text(subtree
, tvb
, bit_offset
>>3, -1,"Additions in Release 6: Data(Not decoded)");
4093 /* Truncation allowed (see 44.018 section 8.9 */
4094 gsm_rr_csn_padding_bits(subtree
, tvb
, bit_offset
, tvb_len
);
4095 return tvb_len
- offset
;
4099 * [3] 10.5.2.25 P3 Rest Octets
4102 de_rr_p3_rest_oct(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
4105 guint32 curr_offset
;
4107 guint8 tvb_len
= tvb_length(tvb
);
4108 guint16 bit_len
= tvb_len
<< 3;
4110 curr_offset
= offset
;
4111 bit_offset
= curr_offset
<< 3;
4113 if (gsm_rr_csn_HL_flag(tvb
, subtree
, bit_len
, bit_offset
++, "Channel Needed 3 & 4", "Present", "Not present"))
4115 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_chnl_needed_ch3
, tvb
, bit_offset
, 2, ENC_BIG_ENDIAN
);
4117 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_chnl_needed_ch4
, tvb
, bit_offset
, 2, ENC_BIG_ENDIAN
);
4120 if (gsm_rr_csn_HL_flag(tvb
, subtree
, bit_len
, bit_offset
++, "NLN (PCH)", "Present", "Not present"))
4122 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_nln_pch
, tvb
, bit_offset
, 2, ENC_BIG_ENDIAN
);
4124 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_nln_status_pch
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
4127 if (gsm_rr_csn_HL_flag(tvb
, subtree
, bit_len
, bit_offset
++, "Priority 1", "Present", "Not present"))
4129 item2
= proto_tree_add_bits_item(subtree
, hf_gsm_a_call_prio
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
4131 proto_item_append_text(item2
, " for Mobile Identity 1");
4133 if (gsm_rr_csn_HL_flag(tvb
, subtree
, bit_len
, bit_offset
++, "Priority 2", "Present", "Not present"))
4135 item2
= proto_tree_add_bits_item(subtree
, hf_gsm_a_call_prio
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
4137 proto_item_append_text(item2
, " for Mobile Identity 2");
4139 if (gsm_rr_csn_HL_flag(tvb
, subtree
, bit_len
, bit_offset
++, "Priority 3", "Present", "Not present"))
4141 item2
= proto_tree_add_bits_item(subtree
, hf_gsm_a_call_prio
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
4143 proto_item_append_text(item2
, " for Mobile Identity 3");
4145 if (gsm_rr_csn_HL_flag(tvb
, subtree
, bit_len
, bit_offset
++, "Priority 4", "Present", "Not present"))
4147 item2
= proto_tree_add_bits_item(subtree
, hf_gsm_a_call_prio
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
4149 proto_item_append_text(item2
, " for Mobile Identity 4");
4152 /* Truncation allowed (see 44.018 section 8.9 */
4153 gsm_rr_csn_padding_bits(subtree
, tvb
, bit_offset
, tvb_len
);
4154 return tvb_len
- offset
;
4158 * [3] 10.5.2.25a Packet Channel Description C V 3
4161 de_rr_packet_ch_desc(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
4163 guint32 curr_offset
;
4165 guint16 arfcn
, hsn
, maio
;
4168 curr_offset
= offset
;
4171 oct8
= tvb_get_guint8(tvb
, curr_offset
);
4173 str
= "Spare bits (ignored by receiver)";
4174 other_decode_bitfield_value(a_bigbuf
, oct8
, 0xf8, 8);
4175 proto_tree_add_text(subtree
,tvb
, curr_offset
, 1,"%s = %s",a_bigbuf
,str
);
4177 other_decode_bitfield_value(a_bigbuf
, oct8
, 0x07, 8);
4178 proto_tree_add_text(subtree
,tvb
, curr_offset
, 1,"%s = Timeslot: %d",a_bigbuf
,(oct8
& 0x07));
4183 oct8
= tvb_get_guint8(tvb
, curr_offset
);
4184 other_decode_bitfield_value(a_bigbuf
, oct8
, 0xe0, 8);
4185 proto_tree_add_text(subtree
,tvb
, curr_offset
, 1,"%s = Training Sequence: %d",a_bigbuf
,((oct8
& 0xe0)>>5));
4187 if ((oct8
& 0x10) == 0x10)
4189 /* Hopping sequence */
4190 maio
= ((oct8
& 0x0f)<<2) | ((tvb_get_guint8(tvb
,curr_offset
+1) & 0xc0) >> 6);
4191 hsn
= (tvb_get_guint8(tvb
,curr_offset
+1) & 0x3f);
4194 other_decode_bitfield_value(a_bigbuf
, oct8
, 0x10, 8);
4195 proto_tree_add_text(subtree
,tvb
, curr_offset
, 1,"%s = Hopping channel: %s",a_bigbuf
,str
);
4196 proto_tree_add_text(subtree
,tvb
, curr_offset
, 2,"Hopping channel: MAIO %d",maio
);
4197 proto_tree_add_text(subtree
,tvb
, curr_offset
, 2,"Hopping channel: HSN %d",hsn
);
4202 arfcn
= ((oct8
& 0x03) << 8) | tvb_get_guint8(tvb
,curr_offset
+1);
4204 other_decode_bitfield_value(a_bigbuf
, oct8
, 0x10, 8);
4205 proto_tree_add_text(subtree
,tvb
, curr_offset
, 1,"%s = Hopping channel: %s",a_bigbuf
,str
);
4206 other_decode_bitfield_value(a_bigbuf
, oct8
, 0x0c, 8);
4207 proto_tree_add_text(subtree
,tvb
, curr_offset
, 1,"%s = Spare",a_bigbuf
);
4208 proto_tree_add_text(subtree
,tvb
, curr_offset
, 2,"Single channel : ARFCN %d",arfcn
);
4211 curr_offset
= curr_offset
+ 2;
4212 return(curr_offset
- offset
);
4216 * [3] 10.5.2.25b Dedicated mode or TBF
4219 static const value_string gsm_a_rr_dedicated_mode_or_tbf_vals
[] = {
4220 { 0, "This message assigns a dedicated mode resource"},
4221 { 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"},
4223 { 3, "This message assigns a downlink TBF to the mobile station identified in the IA Rest Octets IE"},
4225 { 5, "This message is the first message of two in a two-message assignment of an uplink TBF"},
4227 { 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"},
4231 de_rr_ded_mod_or_tbf(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
4233 guint32 curr_offset
;
4235 curr_offset
= offset
;
4237 proto_tree_add_item(subtree
, hf_gsm_a_rr_dedicated_mode_or_tbf
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4241 return(curr_offset
- offset
);
4244 * [3] 10.5.2.25c RR Packet Uplink Assignment
4247 de_rr_pkt_ul_ass(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
4249 guint32 curr_offset
;
4251 curr_offset
= offset
;
4253 proto_tree_add_text(subtree
, tvb
, curr_offset
, len
, "Not dissected yet");
4259 * [3] 10.5.2.25d RR Packet Downlink Assignment
4262 de_rr_pkt_dl_ass(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
4264 guint32 curr_offset
;
4266 curr_offset
= offset
;
4268 proto_tree_add_text(subtree
, tvb
, curr_offset
, len
, "Not dissected yet");
4274 * [3] 10.5.2.25e RR Packet Downlink Assignment Type 2
4277 de_rr_pkt_dl_ass_type2(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
4279 guint32 curr_offset
;
4281 curr_offset
= offset
;
4283 proto_tree_add_text(subtree
, tvb
, curr_offset
, len
, "Not dissected yet");
4289 * [3] 10.5.2.26 Page Mode
4292 static const value_string gsm_a_rr_page_mode_vals
[] = {
4293 { 0, "Normal paging"},
4294 { 1, "Extended paging"},
4295 { 2, "Paging reorganization"},
4296 { 3, "Same as before"},
4300 de_rr_page_mode(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
4302 guint32 curr_offset
;
4304 curr_offset
= offset
;
4306 proto_tree_add_item(subtree
, hf_gsm_a_rr_page_mode
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4310 return(curr_offset
- offset
);
4313 * [3] 10.5.2.26a (void)
4314 * [3] 10.5.2.26b (void)
4315 * [3] 10.5.2.26c (void)
4316 * [3] 10.5.2.26d (void)
4319 * [3] 10.5.2.27 NCC Permitted
4322 de_rr_ncc_perm(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
4324 guint32 curr_offset
;
4326 curr_offset
= offset
;
4328 proto_tree_add_item(subtree
, hf_gsm_a_rr_ncc_permitted
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4330 curr_offset
= curr_offset
+ 1;
4332 return(curr_offset
- offset
);
4335 * [3] 10.5.2.28 Power Command
4338 * ATC (Access Type Control) (octet 2)Bit 8
4339 * 0 Sending of Handover access is mandatory
4340 * 1 Sending of Handover access is optional
4342 static const true_false_string gsm_a_rr_pow_cmd_atc_value
= {
4343 "Sending of Handover access is optional",
4344 "Sending of Handover access is mandatory"
4347 * The EPC mode field (octet 2) indicates whether the assigned channel(s)
4348 * shall be in enhanced power control (EPC) mode. It is only valid for channels
4349 * on which EPC may be used. It is coded as follows:
4351 static const true_false_string gsm_a_rr_pow_cmd_epc_value
= {
4352 "Channel(s) in EPC mode",
4353 "Channel(s) not in EPC mode"
4357 * The FPC_EPC field (octet 2) has different interpretation depending
4358 * on the channel mode of the assigned channel (s) and the value
4359 * of the EPC mode field.
4360 * If the channel mode is such that fast power control (FPC) may be
4361 * used, the FPC_EPC field indicates whether Fast Measurement
4362 * Reporting and Power Control mechanism is used.
4363 * It is coded as follows:
4364 * Value 0 FPC not in use
4366 * If the channel mode is such that EPC may be used and the EPC mode
4367 * field indicates that the channel is in EPC mode, the FPC_EPC
4368 * field indicates whether EPC shall be used for uplink power control.
4369 * It is coded as follows:
4370 * Value 0 EPC not in use for uplink power control
4371 * 1 EPC in use for uplink power control
4374 static const true_false_string gsm_a_rr_pow_cmd_fpcepc_value
= {
4375 "FPC in use/EPC in use for uplink power control",
4376 "FPC not in use/C not in use for uplink power control"
4380 * Power level (octet 2)The power level field is coded as the binaryRepresentation
4381 * of the "power control level", see 3GPP TS 3GPP TS 45.005. This value shall be used
4382 * by the mobile station According to 3GPP TS 45.008.Range: 0 to 31.
4386 de_rr_pow_cmd(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
4388 guint32 curr_offset
;
4390 curr_offset
= offset
;
4392 proto_tree_add_item(subtree
, hf_gsm_a_b8spare
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4394 proto_tree_add_item(subtree
, hf_gsm_a_rr_pow_cmd_epc
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4396 proto_tree_add_item(subtree
, hf_gsm_a_rr_pow_cmd_fpcepc
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4398 proto_tree_add_item(subtree
, hf_gsm_a_rr_pow_cmd_powlev
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4400 curr_offset
= curr_offset
+ 1;
4402 return(curr_offset
- offset
);
4406 * [3] 10.5.2.28a Power Command and access type
4409 de_rr_pow_cmd_and_acc_type(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
4411 guint32 curr_offset
;
4413 curr_offset
= offset
;
4416 proto_tree_add_item(subtree
, hf_gsm_a_rr_pow_cmd_atc
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4418 proto_tree_add_item(subtree
, hf_gsm_a_rr_pow_cmd_epc
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4420 proto_tree_add_item(subtree
, hf_gsm_a_rr_pow_cmd_fpcepc
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4422 proto_tree_add_item(subtree
, hf_gsm_a_rr_pow_cmd_powlev
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4424 curr_offset
= curr_offset
+ 1;
4426 return(curr_offset
- offset
);
4429 * [3] 10.5.2.29 RACH Control Parameters
4432 static const value_string gsm_a_rr_max_retrans_vals
[] = {
4433 { 0, "Maximum 1 retransmission"},
4434 { 1, "Maximum 2 retransmissions"},
4435 { 2, "Maximum 4 retransmissions"},
4436 { 3, "Maximum 7 retransmissions"},
4440 static const value_string gsm_a_rr_tx_integer_vals
[] = {
4441 { 0, "3 slots used to spread transmission"},
4442 { 1, "4 slots used to spread transmission"},
4443 { 2, "5 slots used to spread transmission"},
4444 { 3, "6 slots used to spread transmission"},
4445 { 4, "7 slots used to spread transmission"},
4446 { 5, "8 slots used to spread transmission"},
4447 { 6, "9 slots used to spread transmission"},
4448 { 7, "10 slots used to spread transmission"},
4449 { 8, "11 slots used to spread transmission"},
4450 { 9, "12 slots used to spread transmission"},
4451 { 10, "14 slots used to spread transmission"},
4452 { 11, "16 slots used to spread transmission"},
4453 { 12, "20 slots used to spread transmission"},
4454 { 13, "25 slots used to spread transmission"},
4455 { 14, "32 slots used to spread transmission"},
4456 { 15, "50 slots used to spread transmission"},
4459 static const value_string gsm_a_rr_cell_barr_access_vals
[] = {
4460 { 0, "The cell is not barred"},
4461 { 1, "The cell is barred"},
4464 static const value_string gsm_a_rr_re_vals
[] = {
4465 { 0, "Call Reestablishment allowed in the cell"},
4466 { 1, "Call Reestablishment not allowed in the cell"},
4471 de_rr_rach_ctrl_param(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
4473 guint32 curr_offset
;
4475 curr_offset
= offset
;
4477 proto_tree_add_item(subtree
, hf_gsm_a_rr_max_retrans
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4478 proto_tree_add_item(subtree
, hf_gsm_a_rr_tx_integer
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4479 proto_tree_add_item(subtree
, hf_gsm_a_rr_cell_barr_access
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4480 proto_tree_add_item(subtree
, hf_gsm_a_rr_re
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4481 curr_offset
= curr_offset
+ 1;
4483 proto_tree_add_item(subtree
, hf_gsm_a_rr_acc
, tvb
, curr_offset
, 2, ENC_BIG_ENDIAN
);
4485 curr_offset
= curr_offset
+ 2;
4487 return(curr_offset
- offset
);
4490 * [3] 10.5.2.30 Request Reference M V 3
4492 static guint16
reduced_frame_number(guint16 fn
)
4494 /* great care needed with signed/unsigned - -1 in unsigned is 0xffff, which mod(26) is not what you think !!! */
4498 t1
= (fn
>> 11) & 0x1f;
4499 t2
= (fn
>> 0) & 0x1f;
4500 t3
= (fn
>> 5) & 0x3f;
4506 frame
= 51*(unsigned)t
+(unsigned)t3
+51*26*t1
;
4512 de_rr_req_ref(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
4515 guint32 curr_offset
;
4519 curr_offset
= offset
;
4521 proto_tree_add_item(subtree
, hf_gsm_a_rr_ra
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4523 fn
= tvb_get_ntohs(tvb
,curr_offset
);
4524 rfn
= reduced_frame_number(fn
);
4525 proto_tree_add_item(subtree
, hf_gsm_a_rr_T1prim
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4526 proto_tree_add_item(subtree
, hf_gsm_a_rr_T3
, tvb
, curr_offset
, 2, ENC_BIG_ENDIAN
);
4528 proto_tree_add_item(subtree
, hf_gsm_a_rr_T2
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4530 item
= proto_tree_add_uint(subtree
, hf_gsm_a_rr_rfn
, tvb
, curr_offset
-2, 2, rfn
);
4531 PROTO_ITEM_SET_GENERATED(item
);
4533 return(curr_offset
- offset
);
4539 de_rr_cause(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
4541 guint32 curr_offset
;
4543 curr_offset
= offset
;
4545 proto_tree_add_item(tree
, hf_gsm_a_rr_RR_cause
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4549 return(curr_offset
- offset
);
4553 * [3] 10.5.2.32 SI 1 Rest Octets
4555 static const value_string gsm_a_rr_nch_position_vals
[] = {
4556 { 0, "No of blocks = 1 and Number of first block = 0"},
4557 { 1, "No of blocks = 1 and Number of first block = 1"},
4558 { 2, "No of blocks = 1 and Number of first block = 2"},
4559 { 3, "No of blocks = 1 and Number of first block = 3"},
4560 { 4, "No of blocks = 1 and Number of first block = 4"},
4561 { 5, "No of blocks = 1 and Number of first block = 5"},
4562 { 6, "No of blocks = 1 and Number of first block = 6"},
4563 { 7, "No of blocks = 1 and Number of first block = 0"},
4564 { 8, "No of blocks = 2 and Number of first block = 1"},
4565 { 9, "No of blocks = 2 and Number of first block = 2"},
4566 {10, "No of blocks = 2 and Number of first block = 3"},
4567 {11, "No of blocks = 2 and Number of first block = 4"},
4568 {12, "No of blocks = 2 and Number of first block = 5"},
4569 {13, "No of blocks = 3 and Number of first block = 0"},
4570 {14, "No of blocks = 3 and Number of first block = 1"},
4571 {15, "No of blocks = 3 and Number of first block = 2"},
4572 {16, "No of blocks = 3 and Number of first block = 3"},
4573 {17, "No of blocks = 3 and Number of first block = 4"},
4574 {18, "No of blocks = 4 and Number of first block = 0"},
4575 {19, "No of blocks = 4 and Number of first block = 1"},
4576 {20, "No of blocks = 4 and Number of first block = 2"},
4577 {21, "No of blocks = 4 and Number of first block = 3"},
4578 {22, "No of blocks = 5 and Number of first block = 0"},
4579 {23, "No of blocks = 5 and Number of first block = 1"},
4580 {24, "No of blocks = 5 and Number of first block = 2"},
4581 {25, "No of blocks = 6 and Number of first block = 0"},
4582 {26, "No of blocks = 6 and Number of first block = 1"},
4583 {27, "No of blocks = 7 and Number of first block = 0"},
4592 de_rr_si1_rest_oct(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
4594 guint32 curr_offset
;
4596 guint8 tvb_len
= tvb_length(tvb
);
4598 curr_offset
= offset
;
4599 bit_offset
= curr_offset
<< 3;
4601 if (gsm_rr_csn_HL_flag(tvb
, subtree
, 0, bit_offset
++, "NCH position", "Present", "Not present"))
4603 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_nch_position
, tvb
, bit_offset
, 5, ENC_BIG_ENDIAN
);
4606 gsm_rr_csn_HL_flag(tvb
, subtree
, 0, bit_offset
++, "Band Indicator", "1900", "1800");
4608 gsm_rr_csn_padding_bits(subtree
, tvb
, bit_offset
, tvb_len
);
4609 return tvb_len
- offset
;
4613 * [3] 10.5.2.33 SI 2bis Rest Octets
4617 * [3] 10.5.2.33a SI 2ter Rest Octets
4619 static const value_string gsm_a_rr_qsearch_x_vals
[] = {
4639 static const value_string gsm_a_rr_xdd_qoffset_vals
[] = {
4640 { 0, "always select a cell if acceptable"},
4659 static const value_string gsm_a_rr_fdd_qmin_vals
[] = {
4671 static const value_string gsm_a_rr_fdd_qmin_offset_vals
[] = {
4683 static const value_string gsm_a_rr_fdd_rscpmin_vals
[] = {
4704 de_rr_si2ter_rest_oct(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
4706 proto_tree
*subtree2
;
4708 guint32 curr_offset
;
4709 gint bit_offset
, bit_offset_sav
;
4710 guint8 tvb_len
= tvb_length(tvb
);
4711 guint16 bit_len
= tvb_len
<< 3;
4713 curr_offset
= offset
;
4714 bit_offset
= curr_offset
<<3;
4716 if (gsm_rr_csn_HL_flag(tvb
, subtree
, 0, bit_offset
++, "MP Changemark", "Present", "Not present"))
4718 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_si2ter_mp_change_mark
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
4720 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_si2ter_3g_change_mark
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
4722 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_si2ter_index
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
4724 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_si2ter_count
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
4726 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "UTRAN FDD Description", "Present", "Not Present"))
4727 { /* UTRAN FDD Description */
4728 bit_offset_sav
= bit_offset
;
4729 item2
= proto_tree_add_text(subtree
, tvb
, bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_UTRAN_FDD_DESC
].strptr
);
4730 subtree2
= proto_item_add_subtree(item2
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_UTRAN_FDD_DESC
]);
4731 gsm_rr_csn_flag(tvb
, subtree2
, bit_offset
++, "Bit reserved for earlier version of protocol", "Earlier version", "Current version");
4732 gsm_rr_csn_flag(tvb
, subtree2
, bit_offset
++, "Bit reserved for earlier version of protocol", "Current version", "Earlier version");
4733 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_fdd_uarfcn
, tvb
, bit_offset
, 14, ENC_BIG_ENDIAN
);
4735 if (gsm_rr_csn_flag(tvb
, subtree2
, bit_offset
++, "Bandwidth FDD", "Present", "Not Present"))
4737 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_bandwidth_fdd
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
4740 proto_item_set_len(item2
,(bit_offset
>>3) - (bit_offset_sav
>>3)+1);
4742 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "UTRAN TDD Description", "Present", "Not Present"))
4743 { /* UTRAN TDD Description */
4744 bit_offset_sav
= bit_offset
;
4745 item2
= proto_tree_add_text(subtree
, tvb
, bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_UTRAN_TDD_DESC
].strptr
);
4746 subtree2
= proto_item_add_subtree(item2
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_UTRAN_TDD_DESC
]);
4747 gsm_rr_csn_flag(tvb
, subtree2
, bit_offset
++, "Bit reserved for earlier version of protocol", "Earlier version", "Current version");
4748 gsm_rr_csn_flag(tvb
, subtree2
, bit_offset
++, "Bit reserved for earlier version of protocol", "Current version", "Earlier version");
4749 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_tdd_uarfcn
, tvb
, bit_offset
, 14, ENC_BIG_ENDIAN
);
4751 if (gsm_rr_csn_flag(tvb
, subtree2
, bit_offset
++, "Bandwidth TDD", "Present", "Not Present"))
4753 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_bandwidth_tdd
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
4756 proto_item_set_len(item2
,(bit_offset
>>3) - (bit_offset_sav
>>3)+1);
4758 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "3G Measurement Parameters Description", "Present", "Not Present"))
4759 { /* 3G Measurement Parameters Description */
4760 bit_offset_sav
= bit_offset
;
4761 item2
= proto_tree_add_text(subtree
, tvb
, bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_3G_MEAS_PARAM_DESC
].strptr
);
4762 subtree2
= proto_item_add_subtree(item2
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_3G_MEAS_PARAM_DESC
]);
4763 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_qsearch_i
, tvb
, bit_offset
, 4, ENC_BIG_ENDIAN
);
4765 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "FDD Parameters", "Present", "Not Present"))
4767 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_fdd_qoffset
, tvb
, bit_offset
, 4, ENC_BIG_ENDIAN
);
4769 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_fdd_qmin
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
4772 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "TDD Parameters", "Present", "Not Present"))
4774 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_tdd_qoffset
, tvb
, bit_offset
, 4, ENC_BIG_ENDIAN
);
4777 proto_item_set_len(item2
,(bit_offset
>>3) - (bit_offset_sav
>>3)+1);
4779 /* Null breakpoint */
4780 if (bit_len
- bit_offset
> 0)
4782 /* There is still room left in the Rest Octets IE */
4783 if (gsm_rr_csn_HL_flag(tvb
, subtree
, 0, bit_offset
++, "Additions in Rel-5", "Present", "Not present"))
4784 { /* Additions in release R5 */
4785 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "3G Additional Measurement Parameters Description", "Present", "Not Present"))
4786 { /* 3G Additional Measurement Parameters Description */
4787 bit_offset_sav
= bit_offset
;
4788 item2
= proto_tree_add_text(subtree
, tvb
, bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_3G_ADD_MEAS_PARAM_DESC
].strptr
);
4789 subtree2
= proto_item_add_subtree(item2
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_3G_ADD_MEAS_PARAM_DESC
]);
4790 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_fdd_qmin_offset
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
4792 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_fdd_rscpmin
, tvb
, bit_offset
, 4, ENC_BIG_ENDIAN
);
4794 proto_item_set_len(item2
,(bit_offset
>>3) - (bit_offset_sav
>>3)+1);
4799 gsm_rr_csn_padding_bits(subtree
, tvb
, bit_offset
, tvb_len
);
4800 return tvb_len
- offset
;
4804 * [3] 10.5.2.33b SI 2quater Rest Octets
4806 static const true_false_string gsm_a_rr_gsm_report_type_value
= {
4807 "The MS shall use the Measurement Report message for reporting",
4808 "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"
4811 static const true_false_string gsm_a_rr_frequency_scrolling_value
= {
4812 "Next BSIC in the structure relates to the subsequent frequency in the BA(list)",
4813 "Next BSIC in the structure relates to the same frequency in the BA(list)"
4816 static const true_false_string gsm_a_rr_rep_priority_value
= {
4817 "High reporting priority",
4818 "Normal reporting priority"
4821 static const true_false_string gsm_a_rr_report_type_value
= {
4822 "The MS shall use the PACKET MEASUREMENT REPORT message for reporting",
4823 "The MS shall use the PACKET ENHANCED MEASUREMENT REPORT message for reporting"
4826 static const true_false_string gsm_a_rr_reporting_rate_value
= {
4827 "Reduced reporting rate allowed",
4828 "Normal reporting rate"
4831 static const true_false_string gsm_a_rr_invalid_bsic_reporting_value
= {
4832 "Report on cells with invalid BSIC and allowed NCC part of BSIC is allowed",
4833 "Report on cells with invalid BSIC and allowed NCC part of BSIC is not allowed"
4836 static const value_string gsm_a_rr_scale_ord_vals
[] = {
4837 { 0, "An offset of 0 dB shall be used for the reported RXLEV values"},
4838 { 1, "An offset of 10 dB shall be used for the reported RXLEV values"},
4839 { 2, "An automatic offset shall be used for the reported RXLEV values"},
4843 static const value_string gsm_a_rr_xxx_reporting_offset_vals
[] = {
4844 { 0, "Apply an offset of 0 dB to the reported value when prioritising the cells for reporting"},
4845 { 1, "Apply an offset of 6 dB to the reported value when prioritising the cells for reporting"},
4846 { 2, "Apply an offset of 12 dB to the reported value when prioritising the cells for reporting"},
4847 { 3, "Apply an offset of 18 dB to the reported value when prioritising the cells for reporting"},
4848 { 4, "Apply an offset of 24 dB to the reported value when prioritising the cells for reporting"},
4849 { 5, "Apply an offset of 30 dB to the reported value when prioritising the cells for reporting"},
4850 { 6, "Apply an offset of 36 dB to the reported value when prioritising the cells for reporting"},
4851 { 7, "Apply an offset of 42 dB to the reported value when prioritising the cells for reporting"},
4855 /* The TS 45.008 is not that clear, but it should be understood: threshold = minimum reported value + 6 * resolution
4856 * The minimum reported value, resolution is, for the different access technologies:
4857 * GSM: -111 dBm, 1 dBm
4858 * WCDMA/RSCP: -116 dBm, 1 dBm
4859 * WCDMA/EcN0: -24.5 dB, 0.5 dB
4860 * LTE/RSRP: -140 dBm, 1 dB
4861 * LTE/RSRQ: -19.5 dB, 0.5 dB
4863 static const value_string gsm_a_rr_gsm_reporting_threshold_vals
[] = {
4864 { 0, "Apply priority reporting if the reported value is above -111 dBm"},
4865 { 1, "Apply priority reporting if the reported value is above -105 dBm"},
4866 { 2, "Apply priority reporting if the reported value is above -99 dBm"},
4867 { 3, "Apply priority reporting if the reported value is above -93 dBm"},
4868 { 4, "Apply priority reporting if the reported value is above -87 dBm"},
4869 { 5, "Apply priority reporting if the reported value is above -81 dBm"},
4870 { 6, "Apply priority reporting if the reported value is above -75 dBm"},
4871 { 7, "Never apply priority reporting"},
4875 static const value_string gsm_a_rr_wcdma_rscp_reporting_threshold_vals
[] = {
4876 { 0, "Apply priority reporting if the reported value is above -116 dBm"},
4877 { 1, "Apply priority reporting if the reported value is above -110 dBm"},
4878 { 2, "Apply priority reporting if the reported value is above -104 dBm"},
4879 { 3, "Apply priority reporting if the reported value is above -98 dBm"},
4880 { 4, "Apply priority reporting if the reported value is above -92 dBm"},
4881 { 5, "Apply priority reporting if the reported value is above -86 dBm"},
4882 { 6, "Apply priority reporting if the reported value is above -80 dBm"},
4883 { 7, "Never apply priority reporting"},
4887 static const value_string gsm_a_rr_wcdma_ecn0_reporting_threshold_vals
[] = {
4888 { 0, "Apply priority reporting if the reported value is above -24.5 dB"},
4889 { 1, "Apply priority reporting if the reported value is above -21.5 dB"},
4890 { 2, "Apply priority reporting if the reported value is above -17.5 dB"},
4891 { 3, "Apply priority reporting if the reported value is above -14.5 dB"},
4892 { 4, "Apply priority reporting if the reported value is above -11.5 dB"},
4893 { 5, "Apply priority reporting if the reported value is above -8.5 dB"},
4894 { 6, "Apply priority reporting if the reported value is above -5.5 dB"},
4895 { 7, "Never apply priority reporting"},
4899 static const value_string gsm_a_rr_lte_rsrp_reporting_threshold_vals
[] = {
4900 { 0, "Apply priority reporting if the reported value is above -140 dBm"},
4901 { 1, "Apply priority reporting if the reported value is above -134 dBm"},
4902 { 2, "Apply priority reporting if the reported value is above -128 dBm"},
4903 { 3, "Apply priority reporting if the reported value is above -122 dBm"},
4904 { 4, "Apply priority reporting if the reported value is above -116 dBm"},
4905 { 5, "Apply priority reporting if the reported value is above -110 dBm"},
4906 { 6, "Apply priority reporting if the reported value is above -104 dBm"},
4907 { 7, "Never apply priority reporting"},
4911 static const value_string gsm_a_rr_lte_rsrq_reporting_threshold_vals
[] = {
4912 { 0, "Apply priority reporting if the reported value is above -19.5 dB"},
4913 { 1, "Apply priority reporting if the reported value is above -16.5 dB"},
4914 { 2, "Apply priority reporting if the reported value is above -13.5 dB"},
4915 { 3, "Apply priority reporting if the reported value is above -10.5 dB"},
4916 { 4, "Apply priority reporting if the reported value is above -7.5 dB"},
4917 { 5, "Apply priority reporting if the reported value is above -4.5 dB"},
4918 { 6, "Apply priority reporting if the reported value is above -1.5 dB"},
4919 { 7, "Never apply priority reporting"},
4923 static const value_string gsm_a_rr_network_control_order_vals
[] = {
4931 static const value_string gsm_a_rr_nc_non_drx_period_vals
[] = {
4932 { 0, "No non-DRX mode after a measurement report has been sent"},
4943 static const value_string gsm_a_rr_nc_reporting_period_x_vals
[] = {
4955 static const true_false_string gsm_a_rr_qsearch_c_initial_value
= {
4960 static const true_false_string gsm_a_rr_fdd_rep_quant_value
= {
4965 static const true_false_string gsm_a_rr_3g_search_prio_value
= {
4966 "3G cells may be searched when BSIC decoding is required",
4967 "3G cells may not be searched when BSIC decoding is required"
4970 static const true_false_string gsm_a_rr_3g_ccn_active_value
= {
4971 "CCN towards 3G cells is enabled in the cell",
4972 "CCN towards 3G cells is disabled in the cell"
4976 de_rr_si2quater_meas_info_utran_fdd_desc(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
)
4978 proto_tree
*subtree
, *subtree2
;
4979 proto_item
*item
, *item2
;
4980 gint curr_bit_offset
, idx
;
4981 gint xdd_cell_info
, wsize
, nwi
, jwi
, w
[64], i
, iused
, xdd_indic0
;
4983 curr_bit_offset
= bit_offset
;
4985 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_UTRAN_FDD_DESC
].strptr
);
4986 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_UTRAN_FDD_DESC
]);
4987 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Bandwidth FDD", "Present", "Not Present"))
4989 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_bandwidth_fdd
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
4990 curr_bit_offset
+= 3;
4992 while (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Repeated UMTS FDD Neighbour Cells", "Present", "Not Present"))
4994 gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Bit reserved for earlier version of protocol", "Earlier version", "Current version");
4995 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_fdd_uarfcn
, tvb
, curr_bit_offset
, 14, ENC_BIG_ENDIAN
);
4996 curr_bit_offset
+= 14;
4997 xdd_indic0
= gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "the FDD_CELL_INFORMATION parameter value '0000000000' ", "is a member of the set", "is not a member of the set");
4998 idx
= tvb_get_bits8(tvb
,curr_bit_offset
,5);
4999 proto_tree_add_text(subtree
,tvb
, curr_bit_offset
>>3, 1, "Nr of FDD Cells : %d", idx
);
5000 curr_bit_offset
+= 5;
5001 idx
= convert_n_to_p
[idx
];
5002 item2
= proto_tree_add_text(subtree
,tvb
, curr_bit_offset
>>3, (idx
>>3)+1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_UTRAN_FDD_DESC
].strptr
);
5003 subtree2
= proto_item_add_subtree(item2
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_FDD_CELL_INFORMATION_FIELD
]);
5004 proto_tree_add_text(subtree2
,tvb
, curr_bit_offset
>>3, (idx
>>3)+1, "Field is %d bits long", idx
);
5007 proto_tree_add_text(subtree2
,tvb
, curr_bit_offset
>>3, 0, "Scrambling Code: %d", 0);
5008 proto_tree_add_text(subtree2
,tvb
, curr_bit_offset
>>3, 0, "Diversity: %d", 0);
5019 w
[i
] = tvb_get_bits(tvb
, curr_bit_offset
, wsize
, ENC_BIG_ENDIAN
);
5020 curr_bit_offset
+= wsize
;
5037 curr_bit_offset
+= idx
;
5041 for (i
=1; i
<= iused
; i
++)
5043 xdd_cell_info
= f_k(i
, w
, 1024);
5044 proto_tree_add_text(subtree2
,tvb
, curr_bit_offset
>>3, 0, "Scrambling Code: %d", xdd_cell_info
& 0x01FF);
5045 proto_tree_add_text(subtree2
,tvb
, curr_bit_offset
>>3, 0, "Diversity: %d", (xdd_cell_info
>> 9) & 0x01);
5049 proto_item_set_len(item
,((curr_bit_offset
>>3) - (bit_offset
>>3) + 1));
5051 return (curr_bit_offset
- bit_offset
);
5055 de_rr_si2quater_meas_info_utran_tdd_desc(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
)
5057 proto_tree
*subtree
, *subtree2
;
5058 proto_item
*item
, *item2
;
5059 gint curr_bit_offset
, idx
;
5060 gint xdd_cell_info
, wsize
, nwi
, jwi
, w
[64], i
, iused
, xdd_indic0
;
5062 curr_bit_offset
= bit_offset
;
5064 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_UTRAN_TDD_DESC
].strptr
);
5065 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_UTRAN_TDD_DESC
]);
5066 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Bandwidth TDD", "Present", "Not Present"))
5068 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_bandwidth_tdd
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
5069 curr_bit_offset
+= 3;
5071 while (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Repeated UMTS TDD Neighbour Cells", "Present", "Not Present"))
5073 gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Bit reserved for earlier version of protocol", "Earlier version", "Current version");
5074 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_tdd_uarfcn
, tvb
, curr_bit_offset
, 14, ENC_BIG_ENDIAN
);
5075 curr_bit_offset
+= 14;
5076 xdd_indic0
= gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "the FDD_CELL_INFORMATION parameter value '0000000000' ", "is a member of the set", "is not a member of the set");
5077 idx
= tvb_get_bits8(tvb
,curr_bit_offset
,5);
5078 proto_tree_add_text(subtree
,tvb
, curr_bit_offset
>>3, 1, "Nr of TDD Cells : %d", idx
);
5079 curr_bit_offset
+= 5;
5080 idx
= convert_n_to_q
[idx
];
5081 item2
= proto_tree_add_text(subtree
,tvb
, curr_bit_offset
>>3, (idx
>>3)+1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_UTRAN_TDD_DESC
].strptr
);
5082 subtree2
= proto_item_add_subtree(item2
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_TDD_CELL_INFORMATION_FIELD
]);
5083 proto_tree_add_text(subtree2
,tvb
, curr_bit_offset
>>3, (idx
>>3)+1, "Field is %d bits long", idx
);
5086 proto_tree_add_text(subtree2
,tvb
, curr_bit_offset
>>3, 0, "Cell Parameter: %d", 0);
5087 proto_tree_add_text(subtree2
,tvb
, curr_bit_offset
>>3, 0, "Sync Case TSTD: %d", 0);
5088 proto_tree_add_text(subtree2
,tvb
, curr_bit_offset
>>3, 0, "Diversity TDD: %d", 0);
5099 w
[i
] = tvb_get_bits(tvb
, curr_bit_offset
, wsize
, ENC_BIG_ENDIAN
);
5100 curr_bit_offset
+= wsize
;
5117 curr_bit_offset
+= idx
;
5121 for (i
=1; i
<= iused
; i
++)
5123 xdd_cell_info
= f_k(i
, w
, 512);
5124 proto_tree_add_text(subtree2
,tvb
, curr_bit_offset
>>3, 0, "Cell Parameter: %d", xdd_cell_info
& 0x07F);
5125 proto_tree_add_text(subtree2
,tvb
, curr_bit_offset
>>3, 0, "Sync Case TSTD: %d", (xdd_cell_info
>> 7) & 0x01);
5126 proto_tree_add_text(subtree2
,tvb
, curr_bit_offset
>>3, 0, "Diversity TDD: %d", (xdd_cell_info
>> 8) & 0x01);
5130 proto_item_set_len(item
,((curr_bit_offset
>>3) - (bit_offset
>>3) + 1));
5132 return (curr_bit_offset
- bit_offset
);
5136 de_rr_rtd_desc(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
, rr_rest_octets_elem_idx_t id
)
5138 proto_tree
*subtree
;
5140 gint curr_bit_offset
, idx
;
5143 curr_bit_offset
= bit_offset
;
5145 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[id
].strptr
);
5146 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[id
]);
5147 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "RTD6", "Present", "Not Present"))
5149 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "BA Index Start RTD", "Present", "Not Present"))
5151 idx
= tvb_get_bits8(tvb
,curr_bit_offset
,5);
5152 proto_tree_add_text(subtree
,tvb
, curr_bit_offset
>>3, 1, "BA Index Start RTD: %d", idx
);
5153 curr_bit_offset
+= 5;
5158 value
= gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "RTD", "Not Present", "Present");
5160 { /* all the RTDs on the first frequency */
5161 proto_tree_add_text(subtree
,tvb
, curr_bit_offset
>>3, 1, "RTD index %d: %d TDMA frame(s) modulo 51 TDMA frames", idx
, tvb_get_bits8(tvb
,curr_bit_offset
,6));
5162 curr_bit_offset
+= 6;
5163 value
= gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "additional RTD", "Not Present", "Present");
5166 value
= gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "additional RTD struct", "Not Present", "Present");
5168 { /* all other frequencies */
5170 value
= gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "RTD", "Not Present", "Present");
5172 { /* all the RTDs on the first frequency */
5173 proto_tree_add_text(subtree
,tvb
, curr_bit_offset
>>3, 1, "RTD index %d: %d TDMA frame(s) modulo 51 TDMA frames", idx
, tvb_get_bits8(tvb
,curr_bit_offset
,6));
5174 curr_bit_offset
+= 6;
5175 value
= gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "additional RTD", "Not Present", "Present");
5177 value
= gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "additional RTD struct", "Not Present", "Present");
5180 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "RTD12", "Present", "Not Present"))
5182 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "RTD12", "Present", "Not Present"))
5184 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "BA Index Start RTD", "Present", "Not Present"))
5186 idx
= tvb_get_bits8(tvb
,curr_bit_offset
,5);
5187 proto_tree_add_text(subtree
,tvb
, curr_bit_offset
>>3, 1, "BA Index Start RTD: %d", idx
);
5188 curr_bit_offset
+= 5;
5193 while (0 == gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Repeated RTD", "Not Present", "Present"))
5194 { /* all the RTDs on the first frequency */
5195 proto_tree_add_text(subtree
,tvb
, curr_bit_offset
>>3, 2, "RTD index %d: %d/64 TDMA frame(s) modulo 51 TDMA frames", idx
, tvb_get_bits16(tvb
,curr_bit_offset
,12,ENC_BIG_ENDIAN
));
5196 curr_bit_offset
+= 12;
5199 while(0 == gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Repeated RTD Frequency", "Not Present", "Present"))
5200 { /* all other frequencies */
5202 while (0 == gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Repeated RTD", "Not Present", "Present"))
5203 { /* all the RTDs on the first frequency */
5204 proto_tree_add_text(subtree
,tvb
, curr_bit_offset
>>3, 2, "RTD index %d: %d/64 TDMA frame(s) modulo 51 TDMA frames", idx
, tvb_get_bits16(tvb
,curr_bit_offset
,12,ENC_BIG_ENDIAN
));
5205 curr_bit_offset
+= 12;
5210 proto_item_set_len(item
,((curr_bit_offset
>>3) - (bit_offset
>>3) + 1));
5212 return (curr_bit_offset
- bit_offset
);
5216 de_rr_bsic_desc(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
, rr_rest_octets_elem_idx_t id
)
5218 proto_tree
*subtree
;
5220 gint curr_bit_offset
, idx
;
5222 curr_bit_offset
= bit_offset
;
5223 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[id
].strptr
);
5224 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[id
]);
5225 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "BA Index Start BSIC", "Present", "Not Present"))
5227 proto_tree_add_text(subtree
,tvb
, curr_bit_offset
>>3, 1, "BA Index Start BSIC: %d", tvb_get_bits8(tvb
,curr_bit_offset
,5));
5228 curr_bit_offset
+= 5;
5230 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_bsic
, tvb
, curr_bit_offset
, 6, ENC_BIG_ENDIAN
);
5231 curr_bit_offset
+= 6;
5232 idx
= tvb_get_bits8(tvb
,curr_bit_offset
,7);
5233 proto_tree_add_text(subtree
,tvb
, curr_bit_offset
>>3, 1, "Number Remaining BSIC: %d", idx
);
5234 curr_bit_offset
+= 7;
5237 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_frequency_scrolling
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
5238 curr_bit_offset
+= 1;
5239 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_bsic
, tvb
, curr_bit_offset
, 6, ENC_BIG_ENDIAN
);
5240 curr_bit_offset
+= 6;
5243 proto_item_set_len(item
,((curr_bit_offset
>>3) - (bit_offset
>>3) + 1));
5245 return(curr_bit_offset
- bit_offset
);
5249 de_rr_report_priority_desc(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
, rr_rest_octets_elem_idx_t id
)
5251 proto_tree
*subtree
;
5253 gint curr_bit_offset
, idx
;
5255 curr_bit_offset
= bit_offset
;
5257 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[id
].strptr
);
5258 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[id
]);
5259 idx
= tvb_get_bits8(tvb
,curr_bit_offset
,7);
5260 proto_tree_add_text(subtree
,tvb
, curr_bit_offset
>>3, 1, "Number Cells: %d", idx
);
5261 curr_bit_offset
+= 7;
5264 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_rep_priority
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
5265 curr_bit_offset
+= 1;
5268 proto_item_set_len(item
,((curr_bit_offset
>>3) - (bit_offset
>>3) + 1));
5270 return(curr_bit_offset
- bit_offset
);
5274 de_rr_meas_param_desc(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
, rr_rest_octets_elem_idx_t id
)
5276 proto_tree
*subtree
;
5278 gint curr_bit_offset
;
5280 curr_bit_offset
= bit_offset
;
5281 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[id
].strptr
);
5282 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[id
]);
5283 if (id
== DE_RR_REST_OCTETS_GPRS_MEAS_PARAM_DESC
)
5285 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_report_type
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
5286 curr_bit_offset
+= 1;
5287 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_reporting_rate
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
5288 curr_bit_offset
+=1;
5289 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_invalid_bsic_reporting
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
5290 curr_bit_offset
+=1;
5292 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Multiband Reporting", "Present", "Not Present"))
5294 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_multiband_reporting
, tvb
, curr_bit_offset
, 2, ENC_BIG_ENDIAN
);
5295 curr_bit_offset
+= 2;
5297 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Serving Reporting", "Present", "Not Present"))
5299 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_serving_band_reporting
, tvb
, curr_bit_offset
, 2, ENC_BIG_ENDIAN
);
5300 curr_bit_offset
+= 2;
5302 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_scale_ord
, tvb
, curr_bit_offset
, 2, ENC_BIG_ENDIAN
);
5303 curr_bit_offset
+= 2;
5304 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "900 Reporting", "Present", "Not Present"))
5306 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_900_reporting_offset
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
5307 curr_bit_offset
+= 3;
5308 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_900_reporting_threshold
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
5309 curr_bit_offset
+= 3;
5311 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "1800 Reporting", "Present", "Not Present"))
5313 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_1800_reporting_offset
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
5314 curr_bit_offset
+= 3;
5315 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_1800_reporting_threshold
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
5316 curr_bit_offset
+= 3;
5318 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "400 Reporting", "Present", "Not Present"))
5320 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_400_reporting_offset
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
5321 curr_bit_offset
+= 3;
5322 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_400_reporting_threshold
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
5323 curr_bit_offset
+= 3;
5325 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "1900 Reporting", "Present", "Not Present"))
5327 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_1900_reporting_offset
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
5328 curr_bit_offset
+= 3;
5329 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_1900_reporting_threshold
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
5330 curr_bit_offset
+= 3;
5332 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "850 Reporting", "Present", "Not Present"))
5334 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_850_reporting_offset
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
5335 curr_bit_offset
+= 3;
5336 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_850_reporting_threshold
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
5337 curr_bit_offset
+= 3;
5339 proto_item_set_len(item
,((curr_bit_offset
>>3) - (bit_offset
>>3) + 1));
5341 return(curr_bit_offset
- bit_offset
);
5345 de_rr_3g_add_meas_param_desc2(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
)
5347 proto_tree
*subtree
;
5349 gint curr_bit_offset
;
5351 curr_bit_offset
= bit_offset
;
5352 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_3G_ADD_MEAS_PARAM_DESC2
].strptr
);
5353 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_3G_ADD_MEAS_PARAM_DESC2
]);
5354 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "FDD Reporting Threshold2", "Present", "Not Present"))
5356 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_fdd_reporting_threshold_2
, tvb
, curr_bit_offset
, 6, ENC_BIG_ENDIAN
);
5357 curr_bit_offset
+= 6;
5359 proto_item_set_len(item
,((curr_bit_offset
>>3) - (bit_offset
>>3) + 1));
5361 return(curr_bit_offset
- bit_offset
);
5364 /* Additions in Rel-8 */
5365 static const true_false_string priority_utran_start
= {
5366 "This is the first instance of the message",
5367 "This is not the first instance of the message"
5370 static const true_false_string priority_utran_stop
= {
5371 "This is the last instance of the message",
5372 "This is not the last instance of the message"
5375 static const true_false_string eutran_ccn_active
= {
5376 "CCN towards E-UTRAN cells is enabled in the cell",
5377 "The broadcast E-UTRAN_CCN_ACTIVE parameter shall apply if applicable. Otherwise, CCN towards E-UTRAN cells is disabled in the cell"
5381 static const true_false_string eutran_rep_quant
= {
5387 static const value_string gsm_a_rr_pcid_psc_pattern_length
[] = {
5399 static const value_string gsm_a_rr_eutran_measurement_bandwidth
[] = {
5406 { 6, "Reserved for future use"},
5407 { 7, "Reserved for future use"},
5411 static const value_string gsm_a_rr_serving_cell_thresh_gsm_low
[] = {
5427 {15, "Always allowed"},
5431 static const value_string gsm_a_rr_serving_cell_thresh_priority_search
[] = {
5447 {15, "Always search"},
5451 static const value_string gsm_a_rr_utran_qrxlevmin
[] = {
5487 static const value_string gsm_a_rr_thresh_utran_eutran_high_low
[] = {
5523 static const value_string gsm_a_rr_eutran_qrxlevmin
[] = {
5559 static const value_string gsm_a_rr_serving_cell_priority_param_h_prio
[] = {
5567 static const value_string gsm_a_rr_serving_cell_priority_param_t_reselection
[] = {
5575 static const value_string gsm_a_rr_qsearch_c_eutran_initial
[] = {
5576 { 0, "search if signal is below -98 dBm"},
5577 { 1, "search if signal is below -94 dBm"},
5578 { 2, "search if signal is below -90 dBm"},
5579 { 3, "search if signal is below -86 dBm"},
5580 { 4, "search if signal is below -82 dBm"},
5581 { 5, "search if signal is below -78 dBm"},
5582 { 6, "search if signal is below -74 dBm"},
5583 { 7, "always search"},
5584 { 8, "search is signal is above -78 dBm"},
5585 { 9, "search is signal is above -74 dBm"},
5586 {10, "search is signal is above -70 dBm"},
5587 {11, "search is signal is above -66 dBm"},
5588 {12, "search is signal is above -62 dBm"},
5589 {13, "search is signal is above -58 dBm"},
5590 {14, "search is signal is above -54 dBm"},
5591 {15, "never search"},
5595 static const true_false_string gsm_a_rr_pcid_pattern_sense
= {
5596 "The group of identified cells are the one not belonging to the PCID_BITMAP_GROUP",
5597 "The group of identified cells are the one identified by the PCID_BITMAP_GROUP"
5600 static const true_false_string measurement_control_utran
= {
5601 "Frequency-specific search enabled: use Qsearch_C_E-UTRAN if received, otherwise use Qsearch_C_EUTRAN_Initial",
5602 "Frequency-specific search enabled: Never search"
5605 static const true_false_string measurement_control_eutran
= {
5606 "Frequency-specific search enabled: use Qsearch_C if received, otherwise use Qsearch_C_Initial",
5607 "Frequency-specific search enabled: Never search"
5611 de_rr_3g_priority_param_desc(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
)
5613 proto_tree
*subtree
;
5615 gint curr_bit_offset
;
5617 curr_bit_offset
= bit_offset
;
5618 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_3G_PRIORITY_PARAM_DESC
].strptr
);
5619 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_3G_PRIORITY_PARAM_DESC
]);
5621 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_3g_priority_param_desc_utran_start
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
5622 curr_bit_offset
+= 1;
5623 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_3g_priority_param_desc_utran_stop
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
5624 curr_bit_offset
+= 1;
5626 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Default UTRAN Priority Parameters", "Present", "Not Present"))
5628 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
);
5629 curr_bit_offset
+= 3;
5630 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
);
5631 curr_bit_offset
+= 5;
5632 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
);
5633 curr_bit_offset
+= 5;
5635 /* Repeated UTRAN Priority Parameters */
5636 while (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Repeated UTRAN Priority Parameters", "Present", "Not Present"))
5638 proto_tree
*subtree_rep_utran_prio
;
5639 proto_item
*item_rep_utran_prio
;
5640 gint rep_utran_prio_bit_offset
= curr_bit_offset
;
5642 item_rep_utran_prio
= proto_tree_add_text(subtree
, tvb
, curr_bit_offset
>>3, 1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_UTRAN_PRIO_PARAM
].strptr
);
5643 subtree_rep_utran_prio
= proto_item_add_subtree(item_rep_utran_prio
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_UTRAN_PRIO_PARAM
]);
5645 while (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "UTRAN Frequency Index", "Present", "Not Present"))
5647 proto_tree_add_bits_item(subtree_rep_utran_prio
, hf_gsm_a_rr_utran_frequency_index
, tvb
, curr_bit_offset
, 5, ENC_BIG_ENDIAN
);
5648 curr_bit_offset
+= 5;
5651 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "UTRAN Priority", "Present", "Not Present"))
5653 proto_tree_add_bits_item(subtree_rep_utran_prio
, hf_gsm_a_rr_utran_priority
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
5654 curr_bit_offset
+= 3;
5656 proto_tree_add_bits_item(subtree_rep_utran_prio
, hf_gsm_a_rr_thresh_utran_high
, tvb
, curr_bit_offset
, 5, ENC_BIG_ENDIAN
);
5657 curr_bit_offset
+= 5;
5659 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Threshold UTRAN Low", "Present", "Not Present"))
5661 proto_tree_add_bits_item(subtree_rep_utran_prio
, hf_gsm_a_rr_thresh_utran_low
, tvb
, curr_bit_offset
, 5, ENC_BIG_ENDIAN
);
5662 curr_bit_offset
+= 5;
5665 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "UTRAN Qrxlev Min", "Present", "Not Present"))
5667 proto_tree_add_bits_item(subtree_rep_utran_prio
, hf_gsm_a_rr_utran_qrxlevmin
, tvb
, curr_bit_offset
, 5, ENC_BIG_ENDIAN
);
5668 curr_bit_offset
+= 5;
5670 proto_item_set_len(item_rep_utran_prio
, (curr_bit_offset
>>3) - (rep_utran_prio_bit_offset
>>3)+1);
5672 proto_item_set_len(item
,((curr_bit_offset
>>3) - (bit_offset
>>3) + 1));
5674 return(curr_bit_offset
- bit_offset
);
5678 de_rr_eutran_neighbour_cells(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
)
5680 proto_tree
*subtree
;
5682 gint curr_bit_offset
;
5684 curr_bit_offset
= bit_offset
;
5685 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_EUTRAN_NEIGHBOUR_CELLS
].strptr
);
5686 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_EUTRAN_NEIGHBOUR_CELLS
]);
5688 while (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "E-UTRAN Neighbour Cells Struct", "Present", "Not Present"))
5690 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_eutran_earfcn
, tvb
, curr_bit_offset
, 16, ENC_BIG_ENDIAN
);
5691 curr_bit_offset
+= 16;
5693 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Measurement Bandwidth", "Present", "Not Present"))
5695 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_eutran_measurement_bandwidth
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
5696 curr_bit_offset
+= 3;
5700 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "E-UTRAN Priority", "Present", "Not Present"))
5702 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_eutran_priority
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
5703 curr_bit_offset
+= 3;
5705 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_thresh_eutran_high
, tvb
, curr_bit_offset
, 5, ENC_BIG_ENDIAN
);
5706 curr_bit_offset
+= 5;
5708 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Threshold E-UTRAN Low", "Present", "Not Present"))
5710 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_thresh_eutran_low
, tvb
, curr_bit_offset
, 5, ENC_BIG_ENDIAN
);
5711 curr_bit_offset
+= 5;
5714 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "E-UTRAN Qrxlev Min", "Present", "Not Present"))
5716 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_eutran_qrxlevmin
, tvb
, curr_bit_offset
, 5, ENC_BIG_ENDIAN
);
5717 curr_bit_offset
+= 5;
5719 proto_item_set_len(item
,((curr_bit_offset
>>3) - (bit_offset
>>3) + 1));
5721 return(curr_bit_offset
- bit_offset
);
5725 de_rr_eutran_neighbour_cells_mi(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
)
5727 proto_tree
*subtree
;
5729 gint curr_bit_offset
;
5731 curr_bit_offset
= bit_offset
;
5732 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_EUTRAN_NEIGHBOUR_CELLS
].strptr
);
5733 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_EUTRAN_NEIGHBOUR_CELLS
]);
5735 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_eutran_earfcn
, tvb
, curr_bit_offset
, 16, ENC_BIG_ENDIAN
);
5736 curr_bit_offset
+= 16;
5737 while (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Repeated EARFCN", "Present", "Not Present"))
5739 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_eutran_earfcn
, tvb
, curr_bit_offset
, 16, ENC_BIG_ENDIAN
);
5740 curr_bit_offset
+= 16;
5742 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Measurement Bandwidth ", "Present", "Not Present"))
5744 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_eutran_measurement_bandwidth
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
5745 curr_bit_offset
+= 3;
5747 proto_item_set_len(item
,((curr_bit_offset
>>3) - (bit_offset
>>3) + 1));
5749 return(curr_bit_offset
- bit_offset
);
5753 de_rr_eutran_pcid(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
)
5755 gint curr_bit_offset
= bit_offset
;
5758 while (gsm_rr_csn_flag(tvb
, tree
, curr_bit_offset
++, "Repeated PCID", "Present", "Not Present"))
5760 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_eutran_pcid
, tvb
, curr_bit_offset
, 9, ENC_BIG_ENDIAN
);
5761 curr_bit_offset
+= 9;
5764 if (gsm_rr_csn_flag(tvb
, tree
, curr_bit_offset
++, "PCID Bitmap Group", "Present", "Not Present"))
5767 guint8 bitmap
= tvb_get_bits8(tvb
,curr_bit_offset
,6);
5768 item
= proto_tree_add_bits_item(tree
, hf_gsm_a_rr_eutran_pcid_bitmap_group
, tvb
, curr_bit_offset
, 6, ENC_BIG_ENDIAN
);
5771 proto_item_append_text(item
, ": Cells IDs addressed by the bitmap:");
5773 for (i
= 0; i
< 6; i
++)
5775 if ((1 << i
) & bitmap
)
5779 proto_item_append_text(item
, ",");
5781 proto_item_append_text(item
, " %d to %d",i
*84, (i
+1)*84 - 1);
5784 curr_bit_offset
+= 6;
5786 while (gsm_rr_csn_flag(tvb
, tree
, curr_bit_offset
++, "PCID Pattern", "Present", "Not Present"))
5788 gint pcid_pattern_length
;
5790 gint pattern_lower_bound
, pattern_upper_bound
;
5793 pcid_pattern_length
= tvb_get_bits8(tvb
,curr_bit_offset
,3) + 1;
5794 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_eutran_pcid_pattern_length
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
5795 curr_bit_offset
+= 3;
5796 pcid_pattern
= tvb_get_bits8(tvb
,curr_bit_offset
, pcid_pattern_length
);
5798 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, 1, "%s = PCID_Pattern: %d",
5799 decode_bits_in_field(curr_bit_offset
,pcid_pattern_length
, pcid_pattern
),
5802 pattern_lower_bound
= pcid_pattern
<< (9 - pcid_pattern_length
);
5803 pattern_upper_bound
= pattern_lower_bound
;
5804 for (i
= 0; i
< (9-pcid_pattern_length
); i
++)
5806 pattern_upper_bound
|= 1 << i
;
5808 proto_item_append_text(item
, ": Cells IDs addressed by the pattern: %d to %d", pattern_lower_bound
, pattern_upper_bound
);
5810 curr_bit_offset
+= pcid_pattern_length
;
5811 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_eutran_pcid_pattern_sense
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
5812 curr_bit_offset
+= 1;
5815 return(curr_bit_offset
- bit_offset
);
5819 de_rr_eutran_not_allowed_cells(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
)
5821 proto_tree
*subtree
;
5823 gint curr_bit_offset
;
5825 curr_bit_offset
= bit_offset
;
5826 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_EUTRAN_NOT_ALLOWED_CELLS
].strptr
);
5827 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_EUTRAN_NOT_ALLOWED_CELLS
]);
5829 /* dissect PCID group */
5830 curr_bit_offset
+= de_rr_eutran_pcid(tvb
, subtree
, curr_bit_offset
);
5832 while (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Repeated E-UTRAN Frequency Index", "Present", "Not Present"))
5834 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_eutran_frequency_index
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
5835 curr_bit_offset
+= 3;
5837 proto_item_set_len(item
,((curr_bit_offset
>>3) - (bit_offset
>>3) + 1));
5839 return(curr_bit_offset
- bit_offset
);
5843 de_rr_eutran_pcid_to_ta_mapping(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
)
5845 proto_tree
*subtree
;
5847 gint curr_bit_offset
;
5849 curr_bit_offset
= bit_offset
;
5850 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_EUTRAN_PCID_TO_TA_MAPPING
].strptr
);
5851 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_EUTRAN_PCID_TO_TA_MAPPING
]);
5853 while (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Repeating PCID group", "Present", "Not Present"))
5855 /* dissect PCID group */
5856 curr_bit_offset
+= de_rr_eutran_pcid(tvb
, subtree
, curr_bit_offset
);
5858 proto_item_set_len(item
,((curr_bit_offset
>>3) - (bit_offset
>>3) + 1));
5860 return(curr_bit_offset
- bit_offset
);
5864 de_rr_eutran_measurement_param_desc(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
)
5866 gint curr_bit_offset
;
5870 curr_bit_offset
= bit_offset
;
5872 /* E-UTRAN Measurement Parameters Description */
5873 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_qsearch_c_eutran_initial
, tvb
, curr_bit_offset
, 4, ENC_BIG_ENDIAN
);
5874 curr_bit_offset
+= 4;
5875 rep_quant
= gsm_rr_csn_flag(tvb
, tree
, curr_bit_offset
, "E-UTRAN Reporting Quantity", "RSRQ", "RSRP");
5876 curr_bit_offset
+= 1;
5877 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_eutran_multirat_reporting
, tvb
, curr_bit_offset
, 2, ENC_BIG_ENDIAN
);
5878 curr_bit_offset
+= 2;
5881 if (!gsm_rr_csn_flag(tvb
, tree
, curr_bit_offset
++, "Reporting", "3 bit", "6 bit"))
5883 if (gsm_rr_csn_flag(tvb
, tree
, curr_bit_offset
++, "E-UTRAN FDD FDD 3 bit Reporting", "Present", "Not Present"))
5887 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_eutran_fdd_reporting_threshold_rsrp
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
5891 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_eutran_fdd_reporting_threshold_rsrq
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
5893 curr_bit_offset
+= 3;
5895 if (gsm_rr_csn_flag(tvb
, tree
, curr_bit_offset
++, "E-UTRAN FDD Reporting Threshold2", "Present", "Not Present"))
5897 item
= proto_tree_add_bits_item(tree
, hf_gsm_a_rr_eutran_fdd_reporting_threshold_2
, tvb
, curr_bit_offset
, 6, ENC_BIG_ENDIAN
);
5900 proto_item_append_text(item
, " (%.1f dB)", (gfloat
)tvb_get_bits8(tvb
,curr_bit_offset
,6)/2 - 19.5);
5904 proto_item_append_text(item
, " (%d dBm)", tvb_get_bits8(tvb
,curr_bit_offset
,6) - 140);
5906 curr_bit_offset
+= 6;
5908 if (gsm_rr_csn_flag(tvb
, tree
, curr_bit_offset
++, "E-EUTRAN FDD Reporting Offset", "Present", "Not Present"))
5910 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_eutran_fdd_reporting_offset
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
5912 curr_bit_offset
+= 3;
5916 if (gsm_rr_csn_flag(tvb
, tree
, curr_bit_offset
++, "E-UTRAN TDD TDD 3 bit Reporting", "Present", "Not Present"))
5920 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_eutran_tdd_reporting_threshold_rsrp
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
5924 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_eutran_tdd_reporting_threshold_rsrq
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
5926 curr_bit_offset
+= 3;
5928 if (gsm_rr_csn_flag(tvb
, tree
, curr_bit_offset
++, "E-UTRAN TDD Reporting Threshold2", "Present", "Not Present"))
5930 item
= proto_tree_add_bits_item(tree
, hf_gsm_a_rr_eutran_tdd_reporting_threshold_2
, tvb
, curr_bit_offset
, 6, ENC_BIG_ENDIAN
);
5933 proto_item_append_text(item
, " (%.1f dB)", (gfloat
)tvb_get_bits8(tvb
,curr_bit_offset
,6)/2 - 19.5);
5937 proto_item_append_text(item
, " (%d dBm)", tvb_get_bits8(tvb
,curr_bit_offset
,6) - 140);
5939 curr_bit_offset
+= 6;
5941 if (gsm_rr_csn_flag(tvb
, tree
, curr_bit_offset
++, "E-EUTRAN TDD Reporting Offset", "Present", "Not Present"))
5943 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_eutran_tdd_reporting_offset
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
5945 curr_bit_offset
+= 3;
5951 if (gsm_rr_csn_flag(tvb
, tree
, curr_bit_offset
++, "E-EUTRAN FDD Reporting Threshold", "Present", "Not Present"))
5953 item
= proto_tree_add_bits_item(tree
, hf_gsm_a_rr_eutran_fdd_measurement_report_offset
, tvb
, curr_bit_offset
, 6, ENC_BIG_ENDIAN
);
5956 proto_item_append_text(item
, " (%d dBm)", tvb_get_bits8(tvb
,curr_bit_offset
,6) - 140);
5960 proto_item_append_text(item
, " (%.1f dB)", (gfloat
)tvb_get_bits8(tvb
,curr_bit_offset
,6)/2 - 19.5);
5962 curr_bit_offset
+= 6;
5964 if (gsm_rr_csn_flag(tvb
, tree
, curr_bit_offset
++, "E-UTRAN FDD Reporting Threshold2", "Present", "Not Present"))
5966 item
= proto_tree_add_bits_item(tree
, hf_gsm_a_rr_eutran_fdd_reporting_threshold_2
, tvb
, curr_bit_offset
, 6, ENC_BIG_ENDIAN
);
5969 proto_item_append_text(item
, " (%.1f dB)", (gfloat
)tvb_get_bits8(tvb
,curr_bit_offset
,6)/2 - 19.5);
5973 proto_item_append_text(item
, " (%d dBm)", tvb_get_bits8(tvb
,curr_bit_offset
,6) - 140);
5975 curr_bit_offset
+= 6;
5977 if (gsm_rr_csn_flag(tvb
, tree
, curr_bit_offset
++, "E-UTRAN FDD Reporting Offset", "Present", "Not Present"))
5979 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_eutran_fdd_reporting_offset
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
5980 curr_bit_offset
+= 3;
5984 if (gsm_rr_csn_flag(tvb
, tree
, curr_bit_offset
++, "E-UTRAN TDD Reporting Offset", "Present", "Not Present"))
5986 item
= proto_tree_add_bits_item(tree
, hf_gsm_a_rr_eutran_tdd_measurement_report_offset
, tvb
, curr_bit_offset
, 6, ENC_BIG_ENDIAN
);
5989 proto_item_append_text(item
, " (%d dBm)", tvb_get_bits8(tvb
,curr_bit_offset
,6) - 140);
5993 proto_item_append_text(item
, " (%.1f dB)", (gfloat
)tvb_get_bits8(tvb
,curr_bit_offset
,6)/2 - 19.5);
5995 curr_bit_offset
+= 6;
5997 if (gsm_rr_csn_flag(tvb
, tree
, curr_bit_offset
++, "E-UTRAN TDD Reporting Threshold2", "Present", "Not Present"))
5999 item
= proto_tree_add_bits_item(tree
, hf_gsm_a_rr_eutran_tdd_reporting_threshold_2
, tvb
, curr_bit_offset
, 6, ENC_BIG_ENDIAN
);
6002 proto_item_append_text(item
, " (%.1f dB)", (gfloat
)tvb_get_bits8(tvb
,curr_bit_offset
,6)/2 - 19.5);
6006 proto_item_append_text(item
, " (%d dBm)", tvb_get_bits8(tvb
,curr_bit_offset
,6) - 140);
6008 curr_bit_offset
+= 6;
6010 if (gsm_rr_csn_flag(tvb
, tree
, curr_bit_offset
++, "E-UTRAN TDD Reporting Offset", "Present", "Not Present"))
6012 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_eutran_tdd_reporting_offset
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
6013 curr_bit_offset
+= 3;
6016 item
= proto_tree_add_bits_item(tree
, hf_gsm_a_rr_reporting_granularity
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
6019 proto_item_append_text(item
, " (%d dB step)", 2 + tvb_get_bits8(tvb
,curr_bit_offset
,1));
6023 proto_item_append_text(item
, " (%d dB step)", 1 + tvb_get_bits8(tvb
,curr_bit_offset
,1));
6025 curr_bit_offset
+= 1;
6028 return(curr_bit_offset
- bit_offset
);
6032 de_rr_eutran_param_desc(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
)
6034 proto_tree
*subtree
;
6036 gint curr_bit_offset
;
6037 guint8 rep_quant
= 0;
6039 curr_bit_offset
= bit_offset
;
6040 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_EUTRAN_PARAM_DESC
].strptr
);
6041 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_EUTRAN_PARAM_DESC
]);
6043 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_eutran_ccn_active
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
6044 curr_bit_offset
+= 1;
6045 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_eutran_start
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
6046 curr_bit_offset
+= 1;
6047 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_eutran_stop
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
6048 curr_bit_offset
+= 1;
6050 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "E-UTRAN Measurement Parameters Description", "Present", "Not Present"))
6052 /* E-UTRAN Measurement Parameters Description */
6053 curr_bit_offset
+= de_rr_eutran_measurement_param_desc(tvb
, subtree
, curr_bit_offset
);
6056 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "GPRS E-UTRAN Measurement Parameters Description", "Present", "Not Present"))
6058 /* GPRS E-UTRAN Measurement Parameters Description */
6059 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_qsearch_p_eutran
, tvb
, curr_bit_offset
, 4, ENC_BIG_ENDIAN
);
6060 curr_bit_offset
+= 4;
6061 rep_quant
= gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
, "E-UTRAN Reporting Quantity", "RSRQ", "RSRP");
6063 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_eutran_multirat_reporting
, tvb
, curr_bit_offset
, 2, ENC_BIG_ENDIAN
);
6064 curr_bit_offset
+= 2;
6066 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "E-UTRAN FDD Reporting", "Present", "Not Present"))
6070 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_eutran_fdd_reporting_threshold_rsrp
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
6074 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_eutran_fdd_reporting_threshold_rsrq
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
6076 curr_bit_offset
+= 3;
6078 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "E-UTRAN FDD Reporting Threshold 2", "Present", "Not Present"))
6080 item
= proto_tree_add_bits_item(tree
, hf_gsm_a_rr_eutran_fdd_reporting_threshold_2
, tvb
, curr_bit_offset
, 6, ENC_BIG_ENDIAN
);
6083 proto_item_append_text(item
, " (%.1f dB)", (gfloat
)tvb_get_bits8(tvb
,curr_bit_offset
,6)/2 - 19.5);
6087 proto_item_append_text(item
, " (%d dBm)", tvb_get_bits8(tvb
,curr_bit_offset
,6) - 140);
6089 curr_bit_offset
+= 6;
6091 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "E-UTRAN FDD Reporting Offset", "Present", "Not Present"))
6093 item
= proto_tree_add_bits_item(tree
, hf_gsm_a_rr_eutran_fdd_reporting_offset
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
6094 curr_bit_offset
+= 3;
6098 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "E-UTRAN TDD Reporting", "Present", "Not Present"))
6102 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_eutran_tdd_reporting_threshold_rsrp
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
6106 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_eutran_tdd_reporting_threshold_rsrq
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
6108 curr_bit_offset
+= 3;
6110 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "E-UTRAN TDD Reporting Threshold 2", "Present", "Not Present"))
6112 item
= proto_tree_add_bits_item(tree
, hf_gsm_a_rr_eutran_tdd_reporting_threshold_2
, tvb
, curr_bit_offset
, 6, ENC_BIG_ENDIAN
);
6115 proto_item_append_text(item
, " (%.1f dB)", (gfloat
)tvb_get_bits8(tvb
,curr_bit_offset
,6)/2 - 19.5);
6119 proto_item_append_text(item
, " (%d dBm)", tvb_get_bits8(tvb
,curr_bit_offset
,6) - 140);
6121 curr_bit_offset
+= 6;
6123 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "E-UTRAN TDD Reporting Offset", "Present", "Not Present"))
6125 item
= proto_tree_add_bits_item(tree
, hf_gsm_a_rr_eutran_tdd_reporting_offset
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
6126 curr_bit_offset
+= 3;
6131 /* Repeated E-UTRAN Neighbour Cells */
6132 while (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Repeated E-UTRAN Neighbour Cells", "Present", "Not Present"))
6134 curr_bit_offset
+= de_rr_eutran_neighbour_cells(tvb
, subtree
, curr_bit_offset
);
6137 /* Repeated E-UTRAN Not Allowed Cells */
6138 while (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Repeated E-UTRAN Not Allowed Cells", "Present", "Not Present"))
6140 curr_bit_offset
+= de_rr_eutran_not_allowed_cells(tvb
, subtree
, curr_bit_offset
);
6143 /* Repeated E-UTRAN PCID to TA mapping */
6144 while (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Repeated E-UTRAN PCID to TA mapping", "Present", "Not Present"))
6146 curr_bit_offset
+= de_rr_eutran_pcid_to_ta_mapping(tvb
, subtree
, curr_bit_offset
);
6148 proto_item_set_len(item
,((curr_bit_offset
>>3) - (bit_offset
>>3) + 1));
6150 return(curr_bit_offset
- bit_offset
);
6154 de_rr_eutran_param_desc_mi(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
)
6156 proto_tree
*subtree
;
6158 gint curr_bit_offset
;
6160 curr_bit_offset
= bit_offset
;
6161 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_EUTRAN_PARAM_DESC
].strptr
);
6162 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_EUTRAN_PARAM_DESC
]);
6164 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_eutran_start
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
6165 curr_bit_offset
+= 1;
6166 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_eutran_stop
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
6167 curr_bit_offset
+= 1;
6169 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "E-UTRAN Measurement Parameters Description", "Present", "Not Present"))
6171 /* E-UTRAN Measurement Parameters Description */
6172 curr_bit_offset
+= de_rr_eutran_measurement_param_desc(tvb
, subtree
, curr_bit_offset
);
6175 /* Repeated E-UTRAN Neighbour Cells */
6176 while (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Repeated E-UTRAN Neighbour Cells", "Present", "Not Present"))
6178 curr_bit_offset
+= de_rr_eutran_neighbour_cells_mi(tvb
, subtree
, curr_bit_offset
);
6181 /* Repeated E-UTRAN Not Allowed Cells */
6182 while (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Repeated E-UTRAN Not Allowed Cells", "Present", "Not Present"))
6184 curr_bit_offset
+= de_rr_eutran_not_allowed_cells(tvb
, subtree
, curr_bit_offset
);
6187 /* Measurement Control Parameters Description */
6188 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Measurement Control Parameters Description", "Present", "Not Present"))
6190 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Default Measurement Control E-UTRAN", "Present", "Not Present"))
6192 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_eutran_default_measurement_control_eutran
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
6193 curr_bit_offset
+= 1;
6195 while (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Repeated E-UTRAN Measurement Control Parameters", "Present", "Not Present"))
6197 while (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Repeated E-UTRAN Frequency Index", "Present", "Not Present"))
6199 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_eutran_frequency_index
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
6200 curr_bit_offset
+= 3;
6202 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_eutran_measurement_control_eutran
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
6203 curr_bit_offset
+= 1;
6206 proto_item_set_len(item
,((curr_bit_offset
>>3) - (bit_offset
>>3) + 1));
6208 return(curr_bit_offset
- bit_offset
);
6212 de_rr_priority_and_eutran_param_desc(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
)
6214 proto_tree
*subtree
;
6216 gint curr_bit_offset
;
6218 curr_bit_offset
= bit_offset
;
6219 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_PRIORITY_AND_EUTRAN_PARAM_DESC
].strptr
);
6220 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_PRIORITY_AND_EUTRAN_PARAM_DESC
]);
6223 /* Serving Cell Priority Parameters Description */
6224 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Serving Cell Priority Parameters Description", "Present", "Not Present"))
6226 proto_tree
*subtree_serv
;
6227 proto_item
*item_serv
;
6228 gint serv_bit_offset
= curr_bit_offset
;
6230 item_serv
= proto_tree_add_text(subtree
, tvb
, curr_bit_offset
>>3, ((curr_bit_offset
+15)>>3)-(curr_bit_offset
>>3) + 1 , "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_SERVING_CELL_PRIORITY_PARAM_DESC
].strptr
);
6231 subtree_serv
= proto_item_add_subtree(item_serv
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_SERVING_CELL_PRIORITY_PARAM_DESC
]);
6233 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
);
6234 curr_bit_offset
+= 3;
6235 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
);
6236 curr_bit_offset
+= 4;
6237 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
);
6238 curr_bit_offset
+= 4;
6239 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
);
6240 curr_bit_offset
+= 2;
6241 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
);
6242 curr_bit_offset
+= 2;
6243 proto_item_set_len(item_serv
, (curr_bit_offset
>>3) - (serv_bit_offset
>>3)+1);
6246 /* 3G Priority Parameters Description */
6247 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "3G Priority Parameters Description", "Present", "Not Present"))
6249 curr_bit_offset
+= de_rr_3g_priority_param_desc(tvb
, subtree
, curr_bit_offset
);
6252 /* E-UTRAN Parameters Description */
6253 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "E-UTRAN Parameters Description", "Present", "Not Present"))
6255 curr_bit_offset
+= de_rr_eutran_param_desc(tvb
, subtree
, curr_bit_offset
);
6257 proto_item_set_len(item
,((curr_bit_offset
>>3) - (bit_offset
>>3) + 1));
6259 return (curr_bit_offset
- bit_offset
);
6263 de_rr_3g_csg_desc(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
)
6265 proto_tree
*subtree
;
6267 gint curr_bit_offset
;
6269 curr_bit_offset
= bit_offset
;
6270 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_3G_CSG_DESC
].strptr
);
6271 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_3G_CSG_DESC
]);
6273 while (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "Repeated CSG_PSC_SPLIT struct", "Present", "Not Present"))
6275 /* CSG_PSC_SPLIT struct */
6276 while (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "PSC", "Present", "Not Present"))
6278 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_psc
, tvb
, curr_bit_offset
, 9, ENC_BIG_ENDIAN
);
6279 curr_bit_offset
+= 9;
6281 while (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "PSC Pattern", "Present", "Not Present"))
6283 gint psc_pattern_length
;
6286 psc_pattern_length
= tvb_get_bits8(tvb
,curr_bit_offset
,3) + 1;
6287 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_utran_psc_pattern_length
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
6288 curr_bit_offset
+= 3;
6289 psc_pattern
= tvb_get_bits8(tvb
,curr_bit_offset
, psc_pattern_length
);
6291 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, 1, "%s = PSC_Pattern: %d",
6292 decode_bits_in_field(curr_bit_offset
,psc_pattern_length
, psc_pattern
),
6295 curr_bit_offset
+= psc_pattern_length
;
6296 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_utran_psc_pattern_sense
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
6297 curr_bit_offset
+= 1;
6300 while (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Repeated UTRAN Frequency Index", "Present", "Not Present"))
6302 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_utran_frequency_index
, tvb
, curr_bit_offset
, 5, ENC_BIG_ENDIAN
);
6303 curr_bit_offset
+= 5;
6307 while(gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "repeated CSG FDD UARFCN", "Present", "Not Present"))
6309 /* CSG_FDD_UARFCN */
6310 if (!gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Technology", "TDD", "FDD"))
6312 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_utran_csg_fdd_uarfcn
, tvb
, curr_bit_offset
, 14, ENC_BIG_ENDIAN
);
6313 curr_bit_offset
+= 14;
6317 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_utran_csg_tdd_uarfcn
, tvb
, curr_bit_offset
, 14, ENC_BIG_ENDIAN
);
6318 curr_bit_offset
+= 14;
6321 proto_item_set_len(item
,((curr_bit_offset
>>3) - (bit_offset
>>3) + 1));
6323 return(curr_bit_offset
- bit_offset
);
6327 de_rr_eutran_csg_desc(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
)
6329 proto_tree
*subtree
;
6331 gint curr_bit_offset
;
6333 curr_bit_offset
= bit_offset
;
6334 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_EUTRAN_CSG_DESC
].strptr
);
6335 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_EUTRAN_CSG_DESC
]);
6337 while (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Repeated PCID group", "Present", "Not Present"))
6339 /* dissect PCID group */
6340 curr_bit_offset
+= de_rr_eutran_pcid(tvb
, subtree
, curr_bit_offset
);
6343 while (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Repeated EARFCN", "Present", "Not Present"))
6345 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_csg_earfcn
, tvb
, curr_bit_offset
, 16, ENC_BIG_ENDIAN
);
6346 curr_bit_offset
+= 16;
6348 proto_item_set_len(item
,((curr_bit_offset
>>3) - (bit_offset
>>3) + 1));
6350 return(curr_bit_offset
- bit_offset
);
6354 de_rr_eutran_csg_desc_mi(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
)
6356 proto_tree
*subtree
;
6358 gint curr_bit_offset
;
6360 curr_bit_offset
= bit_offset
;
6361 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_EUTRAN_CSG_DESC
].strptr
);
6362 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_EUTRAN_CSG_DESC
]);
6364 while (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Repeated CSG PCI Split", "Present", "Not Present"))
6366 /* dissect PCID group */
6367 curr_bit_offset
+= de_rr_eutran_pcid(tvb
, subtree
, curr_bit_offset
);
6369 proto_item_set_len(item
,((curr_bit_offset
>>3) - (bit_offset
>>3) + 1));
6371 return(curr_bit_offset
- bit_offset
);
6375 de_rr_utran_measurement_control_param_mi(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
)
6377 proto_tree
*subtree
;
6379 gint curr_bit_offset
;
6381 curr_bit_offset
= bit_offset
;
6382 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_UTRAN_MEASUREMENT_CONTROL_PARAM_DESC
].strptr
);
6383 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_UTRAN_MEASUREMENT_CONTROL_PARAM_DESC
]);
6385 while (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Repeated UTRAN Frequency Index", "Present", "Not Present"))
6387 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_utran_frequency_index
, tvb
, curr_bit_offset
, 5, ENC_BIG_ENDIAN
);
6388 curr_bit_offset
+= 5;
6390 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
);
6391 curr_bit_offset
+= 1;
6393 proto_item_set_len(item
,((curr_bit_offset
>>3) - (bit_offset
>>3) + 1));
6395 return(curr_bit_offset
- bit_offset
);
6399 de_rr_3g_supplementary_param_desc_mi(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
)
6401 proto_tree
*subtree
;
6403 gint curr_bit_offset
;
6405 curr_bit_offset
= bit_offset
;
6406 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_3G_SUPPLEMENTARY_PARAM_DESC
].strptr
);
6407 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_3G_SUPPLEMENTARY_PARAM_DESC
]);
6409 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_3g_priority_param_desc_utran_start
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
6410 curr_bit_offset
+= 1;
6411 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_3g_priority_param_desc_utran_stop
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
6412 curr_bit_offset
+= 1;
6414 /* 3G Measurement Control Parameters Description */
6415 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "3G Measurement Control Parameters Description", "Present", "Not Present"))
6417 /* 3G Measurement Control Parameters Description struct */
6418 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "3G Measurement Control Parameters Description struct", "Present", "Not Present"))
6420 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
);
6421 curr_bit_offset
+= 1;
6423 while (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "Repeated UTRAN Measurement Control Parameters struct", "Present", "Not Present"))
6425 curr_bit_offset
+= de_rr_utran_measurement_control_param_mi(tvb
, subtree
, curr_bit_offset
);
6428 proto_item_set_len(item
,((curr_bit_offset
>>3) - (bit_offset
>>3) + 1));
6430 return(curr_bit_offset
- bit_offset
);
6434 de_rr_si2quater_rest_oct(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
6436 proto_tree
*subtree2
, *subtree3
;
6437 proto_item
*item2
, *item3
;
6438 guint32 curr_offset
;
6439 gint bit_offset
, bit_offset_sav
, idx
;
6441 guint8 tvb_len
= tvb_length(tvb
);
6442 guint16 bit_len
= tvb_len
<< 3;
6444 curr_offset
= offset
;
6445 bit_offset
= curr_offset
<< 3;
6447 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_ba_ind
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
6449 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_3g_ba_ind
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
6451 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_mp_change_mark
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
6453 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_si2quater_index
, tvb
, bit_offset
, 4, ENC_BIG_ENDIAN
);
6455 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_si2quater_count
, tvb
, bit_offset
, 4, ENC_BIG_ENDIAN
);
6457 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "Measurement Parameters Description", "Present", "Not Present"))
6458 { /* Measurement Parameters Description */
6459 bit_offset_sav
= bit_offset
;
6460 item2
= proto_tree_add_text(subtree
, tvb
, bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_MEAS_PARAM_DESC
].strptr
);
6461 subtree2
= proto_item_add_subtree(item2
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_MEAS_PARAM_DESC
]);
6462 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_gsm_report_type
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
6464 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_serving_band_reporting
, tvb
, bit_offset
, 2, ENC_BIG_ENDIAN
);
6466 proto_item_set_len(item2
, (bit_offset
>>3) - (bit_offset_sav
>>3)+1);
6468 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "GPRS Real Time Difference Description", "Present", "Not Present"))
6469 { /* GPRS Real Time Difference Description */
6470 bit_offset
+= de_rr_rtd_desc(tvb
, subtree
, bit_offset
, DE_RR_REST_OCTETS_GPRS_RTD_DESC
);
6472 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "GPRS BSIC Description", "Present", "Not Present"))
6473 { /* GPRS BSIC Description */
6474 bit_offset
+= de_rr_bsic_desc(tvb
, subtree
, bit_offset
, DE_RR_REST_OCTETS_GPRS_BSIC_DESC
);
6476 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "GPRS Report Priority Description", "Present", "Not Present"))
6477 { /* GPRS Report Priority Description */
6478 bit_offset
+= de_rr_report_priority_desc(tvb
, subtree
, bit_offset
, DE_RR_REST_OCTETS_GPRS_REPORT_PRIO_DESC
);
6480 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "GPRS Measurement Parameters Description", "Present", "Not Present"))
6481 { /* GPRS Measurement Parameters Description */
6482 bit_offset
+= de_rr_meas_param_desc(tvb
, subtree
, bit_offset
, DE_RR_REST_OCTETS_GPRS_MEAS_PARAM_DESC
);
6484 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "NC Measurement Parameters", "Present", "Not Present"))
6485 { /* NC Measurement Parameters */
6486 bit_offset_sav
= bit_offset
;
6487 item2
= proto_tree_add_text(subtree
, tvb
, bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_NC_MEAS_PARAM
].strptr
);
6488 subtree2
= proto_item_add_subtree(item2
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_NC_MEAS_PARAM
]);
6489 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_network_control_order
, tvb
, bit_offset
, 2, ENC_BIG_ENDIAN
);
6491 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "NC Periods", "Present", "Not Present"))
6493 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_nc_non_drx_period
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
6495 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_nc_reporting_period_i
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
6497 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_nc_reporting_period_t
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
6500 proto_item_set_len(item2
, (bit_offset
>>3) - (bit_offset_sav
>>3)+1);
6502 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "SI 2quater Extension Information", "Present", "Not Present"))
6503 { /* SI 2quater Extension Information */
6504 bit_offset_sav
= bit_offset
;
6505 item2
= proto_tree_add_text(subtree
, tvb
, bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_SI2Q_EXT_INFO
].strptr
);
6506 subtree2
= proto_item_add_subtree(item2
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_SI2Q_EXT_INFO
]);
6507 idx
= tvb_get_bits8(tvb
,bit_offset
,8);
6508 proto_tree_add_text(subtree2
,tvb
, bit_offset
>>3, 1, "Extension Length: %d", idx
);
6510 proto_item_set_len(item2
,((bit_offset
+idx
+1)>>3) - (bit_offset_sav
>>3)+1);
6511 if (gsm_rr_csn_flag(tvb
, subtree2
, bit_offset
++, "CCN Support Description", "Present", "Not Present"))
6512 { /* CCN Support Description */
6513 bit_offset_sav
= bit_offset
;
6514 item3
= proto_tree_add_text(subtree2
, tvb
, bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_CCN_SUPPORT_DESC
].strptr
);
6515 subtree3
= proto_item_add_subtree(item3
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_CCN_SUPPORT_DESC
]);
6516 value
= tvb_get_bits8(tvb
,bit_offset
,7);
6517 proto_tree_add_text(subtree3
,tvb
, bit_offset
>>3, 1, "Number Cells: %d", value
);
6520 item2
= proto_tree_add_text(subtree3
,tvb
, bit_offset
>>3, (value
>>3)+1, "CCN Supported: ");
6523 proto_item_append_text(item2
,"%d",tvb_get_bits8(tvb
,bit_offset
,1));
6528 proto_item_set_len(item3
, (bit_offset
>>3) - (bit_offset_sav
>>3)+1);
6532 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "3G Neighbour Cell Description", "Present", "Not Present"))
6533 { /* 3G Neighbour Cell Description */
6534 bit_offset_sav
= bit_offset
;
6535 item2
= proto_tree_add_text(subtree
, tvb
, bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_3G_NEIGH_CELL_DESC
].strptr
);
6536 subtree2
= proto_item_add_subtree(item2
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_3G_NEIGH_CELL_DESC
]);
6537 if (gsm_rr_csn_flag(tvb
, subtree2
, bit_offset
++, "Index Start 3G", "Present", "Not Present"))
6539 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_index_start_3g
, tvb
, bit_offset
, 7, ENC_BIG_ENDIAN
);
6542 if (gsm_rr_csn_flag(tvb
, subtree2
, bit_offset
++, "Absolute Index Start EMR", "Present", "Not Present"))
6544 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_absolute_index_start_emr
, tvb
, bit_offset
, 7, ENC_BIG_ENDIAN
);
6547 if (gsm_rr_csn_flag(tvb
, subtree2
, bit_offset
++, "UTRAN FDD Description", "Present", "Not Present"))
6548 { /* UTRAN FDD Description */
6549 bit_offset
+= de_rr_si2quater_meas_info_utran_fdd_desc(tvb
, subtree2
, bit_offset
);
6551 if (gsm_rr_csn_flag(tvb
, subtree2
, bit_offset
++, "UTRAN TDD Description", "Present", "Not Present"))
6552 { /* UTRAN TDD Description */
6553 bit_offset
+= de_rr_si2quater_meas_info_utran_tdd_desc(tvb
, subtree2
, bit_offset
);
6555 proto_item_set_len(item2
, (bit_offset
>>3) - (bit_offset_sav
>>3)+1);
6557 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "3G Measurement Parameters Description", "Present", "Not Present"))
6558 { /* 3G Measurement Parameters Description */
6559 bit_offset_sav
= bit_offset
;
6560 item2
= proto_tree_add_text(subtree
, tvb
, bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_3G_MEAS_PARAM_DESC
].strptr
);
6561 subtree2
= proto_item_add_subtree(item2
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_3G_MEAS_PARAM_DESC
]);
6562 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_qsearch_i
, tvb
, bit_offset
, 4, ENC_BIG_ENDIAN
);
6564 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_qsearch_c_initial
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
6566 if (gsm_rr_csn_flag(tvb
, subtree2
, bit_offset
++, "FDD Information", "Present", "Not Present"))
6568 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_fdd_qoffset
, tvb
, bit_offset
, 4, ENC_BIG_ENDIAN
);
6570 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_fdd_rep_quant
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
6572 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_fdd_multirat_reporting
, tvb
, bit_offset
, 2, ENC_BIG_ENDIAN
);
6574 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_fdd_qmin
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
6577 if (gsm_rr_csn_flag(tvb
, subtree2
, bit_offset
++, "TDD Information", "Present", "Not Present"))
6579 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_tdd_qoffset
, tvb
, bit_offset
, 4, ENC_BIG_ENDIAN
);
6581 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_tdd_multirat_reporting
, tvb
, bit_offset
, 2, ENC_BIG_ENDIAN
);
6584 proto_item_set_len(item2
, (bit_offset
>>3) - (bit_offset_sav
>>3)+1);
6586 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "GPRS 3G Measurement Parameters Description", "Present", "Not Present"))
6587 { /* GPRS 3G Measurement Parameters Description */
6588 guint8 reporting_quant
= 0;
6589 bit_offset_sav
= bit_offset
;
6590 item2
= proto_tree_add_text(subtree
, tvb
, bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_GPRS_3G_MEAS_PARAM_DESC
].strptr
);
6591 subtree2
= proto_item_add_subtree(item2
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_GPRS_3G_MEAS_PARAM_DESC
]);
6592 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_qsearch_p
, tvb
, bit_offset
, 4, ENC_BIG_ENDIAN
);
6594 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_3g_search_prio
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
6596 if (gsm_rr_csn_flag(tvb
, subtree2
, bit_offset
++, "FDD Parameters", "Present", "Not Present"))
6598 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_fdd_rep_quant
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
6599 reporting_quant
= gsm_rr_csn_flag(tvb
, subtree2
, bit_offset
++, "Reporting Quantity", "Ec/No", "RSCP");
6600 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_fdd_multirat_reporting
, tvb
, bit_offset
, 2, ENC_BIG_ENDIAN
);
6603 if (gsm_rr_csn_flag(tvb
, subtree2
, bit_offset
++, "FDD Reporting Parameters", "Present", "Not Present"))
6605 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_fdd_reporting_offset
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
6607 if (reporting_quant
== 0)
6609 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_fdd_reporting_threshold_rscp
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
6613 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_fdd_reporting_threshold_ecn0
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
6617 if (gsm_rr_csn_flag(tvb
, subtree2
, bit_offset
++, "TDD Multirat Reporting", "Present", "Not Present"))
6619 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_tdd_multirat_reporting
, tvb
, bit_offset
, 2, ENC_BIG_ENDIAN
);
6622 if (gsm_rr_csn_flag(tvb
, subtree2
, bit_offset
++, "TDD Reporting Parameters", "Present", "Not Present"))
6624 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_tdd_reporting_offset
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
6626 if (reporting_quant
== 0)
6628 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_tdd_reporting_threshold_rscp
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
6632 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_tdd_reporting_threshold_ecn0
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
6636 proto_item_set_len(item2
, (bit_offset
>>3) - (bit_offset_sav
>>3)+1);
6638 /* Null breakpoint */
6639 if (bit_len
- bit_offset
> 0)
6641 /* There is still room left in the Rest Octets IE */
6642 if (gsm_rr_csn_HL_flag(tvb
, subtree
, 0, bit_offset
++, "Additions in Rel-5", "Present", "Not present"))
6643 { /* Additions in Rel-5 */
6644 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "3G Additional Measurement Parameters Description", "Present", "Not Present"))
6645 { /* 3G Additional Measurement Parameters Description */
6646 bit_offset_sav
= bit_offset
;
6647 item2
= proto_tree_add_text(subtree
, tvb
, bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_3G_ADD_MEAS_PARAM_DESC
].strptr
);
6648 subtree2
= proto_item_add_subtree(item2
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_3G_ADD_MEAS_PARAM_DESC
]);
6649 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_fdd_qmin_offset
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
6651 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_fdd_rscpmin
, tvb
, bit_offset
, 4, ENC_BIG_ENDIAN
);
6653 proto_item_set_len(item2
, (bit_offset
>>3) - (bit_offset_sav
>>3)+1);
6655 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "3G Additional Measurement Parameters Description 2", "Present", "Not Present"))
6656 { /* 3G Additional Measurement Parameters Description 2 */
6657 bit_offset
+= de_rr_3g_add_meas_param_desc2(tvb
, subtree
, bit_offset
);
6659 /* Null breakpoint */
6660 if (bit_len
- bit_offset
> 0)
6662 /* There is still room left in the Rest Octets IE */
6663 if (gsm_rr_csn_HL_flag(tvb
, subtree
, 0, bit_offset
++, "Additions in Rel-6", "Present", "Not present"))
6664 { /* Additions in Rel-6 */
6665 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_3g_ccn_active
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
6668 /* Null breakpoint */
6669 if (bit_len
- bit_offset
> 0)
6671 /* There is still room left in the Rest Octets IE */
6672 if (gsm_rr_csn_HL_flag(tvb
, subtree
, 0, bit_offset
++, "Additions in Rel-7", "Present", "Not present"))
6673 { /* Additions in Rel-7 */
6674 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "700 Reporting", "Present", "Not Present"))
6676 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_700_reporting_offset
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
6678 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_700_reporting_threshold
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
6681 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "810 Reporting", "Present", "Not Present"))
6683 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_810_reporting_offset
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
6685 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_810_reporting_threshold
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
6689 /* Null breakpoint */
6690 if (bit_len
- bit_offset
> 0)
6692 /* There is still room left in the Rest Octets IE */
6693 if (gsm_rr_csn_HL_flag(tvb
, subtree
, 0, bit_offset
++, "Additions in Rel-8", "Present", "Not present"))
6694 { /* Additions in Rel-8 */
6695 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "3G Supplementary Parameters Description ", "Present", "Not Present"))
6697 bit_offset
+= de_rr_priority_and_eutran_param_desc(tvb
, subtree
, bit_offset
);
6699 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "3G CSG Description ", "Present", "Not Present"))
6701 bit_offset
+= de_rr_3g_csg_desc(tvb
, subtree
, bit_offset
);
6703 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "EUTRAN CSG Description ", "Present", "Not Present"))
6705 bit_offset
+= de_rr_eutran_csg_desc(tvb
, subtree
, bit_offset
);
6715 gsm_rr_csn_padding_bits(subtree
, tvb
, bit_offset
, tvb_len
);
6716 return tvb_len
- offset
;
6720 * [3] 10.5.2.34 SI 3 Rest Octets
6722 static const value_string gsm_a_rr_temporary_offset_vals
[] = {
6734 static const value_string gsm_a_rr_cell_reselect_offset_vals
[] = {
6802 static const value_string gsm_a_rr_penalty_time_vals
[] = {
6834 {31, "Cell Reselect Offset is subtracted from C2 and Temporary Offset is ignored"},
6839 de_rr_rest_oct_opt_sel_param(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
)
6841 proto_tree
*subtree
;
6843 gint curr_bit_offset
;
6845 curr_bit_offset
= bit_offset
;
6847 if (gsm_rr_csn_HL_flag(tvb
, tree
, 0, curr_bit_offset
++, "Selection Parameters", "Present", "Not present"))
6848 { /* Selection Parameters */
6849 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_OPTIONAL_SEL_PARAM
].strptr
);
6850 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_OPTIONAL_SEL_PARAM
]);
6851 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_cbq
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
6852 curr_bit_offset
+= 1;
6853 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_cell_reselect_offset
, tvb
, curr_bit_offset
, 6, ENC_BIG_ENDIAN
);
6854 curr_bit_offset
+= 6;
6855 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_temporary_offset
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
6856 curr_bit_offset
+= 3;
6857 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_penalty_time
, tvb
, curr_bit_offset
, 5, ENC_BIG_ENDIAN
);
6858 curr_bit_offset
+= 5;
6859 proto_item_set_len(item
,((curr_bit_offset
>>3) - (bit_offset
>>3) + 1));
6862 return (curr_bit_offset
- bit_offset
);
6865 static const value_string gsm_a_rr_si13_position_vals
[] = {
6866 { 0, "SYSTEM INFORMATION TYPE 13 message is sent on BCCH Norm"},
6867 { 1, "SYSTEM INFORMATION TYPE 13 message is sent on BCCH Ext"},
6872 de_rr_rest_oct_gprs_indicator(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
)
6874 proto_tree
*subtree
;
6876 gint curr_bit_offset
;
6878 curr_bit_offset
= bit_offset
;
6880 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, 1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_GPRS_INDICATOR
].strptr
);
6881 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_GPRS_INDICATOR
]);
6882 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_gprs_ra_colour
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
6883 curr_bit_offset
+= 3;
6884 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_si13_position
, tvb
, curr_bit_offset
, 1, ENC_BIG_ENDIAN
);
6885 curr_bit_offset
+= 1;
6887 return (curr_bit_offset
- bit_offset
);
6890 static const value_string gsm_a_rr_power_offset_vals
[] = {
6898 static const true_false_string gsm_a_rr_si2quater_position_value
= {
6899 "SYSTEM INFORMATION TYPE 2 quater message is sent on BCCH Ext",
6900 "SYSTEM INFORMATION TYPE 2 quater message is sent on BCCH Norm"
6903 static const true_false_string gsm_a_rr_si13alt_position_value
= {
6904 "If Iu mode is supported in the cell, SYSTEM INFORMATION TYPE 13alt message is sent on BCCH Ext",
6905 "If Iu mode is supported in the cell, SYSTEM INFORMATION TYPE 13alt message is sent on BCCH Norm"
6909 de_rr_si3_rest_oct(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
6911 guint32 curr_offset
;
6913 gboolean gprs_indicator
;
6914 guint8 tvb_len
= tvb_length(tvb
);
6916 curr_offset
= offset
;
6917 bit_offset
= curr_offset
<< 3;
6919 bit_offset
+= de_rr_rest_oct_opt_sel_param(tvb
, subtree
, bit_offset
);
6921 if (gsm_rr_csn_HL_flag(tvb
, subtree
, 0, bit_offset
++, "Optional Power Offset", "Present", "Not present"))
6922 { /* Optional Power Offset */
6923 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_power_offset
, tvb
, bit_offset
, 2, ENC_BIG_ENDIAN
);
6926 gsm_rr_csn_HL_flag(tvb
, subtree
, 0, bit_offset
++, "SYSTEM INFORMATION TYPE 2ter", "Available", "Not Available");
6927 gsm_rr_csn_HL_flag(tvb
, subtree
, 0, bit_offset
++, "Early Classmark Sending", "Is allowed", "Is forbidden");
6928 if (gsm_rr_csn_HL_flag(tvb
, subtree
, 0, bit_offset
++, "Scheduling if and where", "Present", "Not present"))
6929 { /* Scheduling if and where */
6930 proto_tree_add_text(subtree
, tvb
, bit_offset
>>3, 1, "Where: %d",tvb_get_bits8(tvb
,bit_offset
,3));
6933 gprs_indicator
= gsm_rr_csn_HL_flag(tvb
, subtree
, 0, bit_offset
++, "GPRS Indicator", "Present", "Not present");
6935 { /* GPRS indicator */
6936 bit_offset
+= de_rr_rest_oct_gprs_indicator(tvb
, subtree
, bit_offset
);
6938 gsm_rr_csn_HL_flag(tvb
, subtree
, 0, bit_offset
++, "3G Early Classmark Sending Restriction",
6939 "The sending of UTRAN,CDMA2000 and GERAN IU MODE CLASSMARK CHANGE messages are controlled by the Early Classmark Sending Control parameter",
6940 "Neither UTRAN, CDMA2000 nor GERAN IU MODE CLASSMARK CHANGE message shall be sent with the Early classmark sending");
6941 if (gsm_rr_csn_HL_flag(tvb
, subtree
, 0, bit_offset
++, "SI2quater Indicator", "Present", "Not present"))
6942 { /* SI2quater Indicator */
6943 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_si2quater_position
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
6946 if (gprs_indicator
== FALSE
)
6948 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_si13alt_position
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
6951 gsm_rr_csn_padding_bits(subtree
, tvb
, bit_offset
, tvb_len
);
6952 return tvb_len
- offset
;
6956 * [3] 10.5.2.32 SI 4 Rest Octets
6958 static const value_string gsm_a_rr_prio_thr_vals
[] = {
6970 static const value_string gsm_a_rr_lsa_offset_vals
[] = {
6983 de_rr_si4_rest_oct(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
)
6985 proto_tree
*subtree2
, *subtree3
;
6986 proto_item
*item2
, *item3
;
6987 guint32 curr_offset
;
6988 gint bit_offset
, bit_offset_sav
;
6989 guint8 tvb_len
= tvb_length(tvb
);
6990 guint16 bit_len
= tvb_len
<< 3;
6992 curr_offset
= offset
;
6993 bit_offset
= curr_offset
<< 3;
6995 item2
= proto_tree_add_text(subtree
, tvb
, bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_SI4_REST_OCTETS_O
].strptr
);
6997 subtree2
= proto_item_add_subtree(item2
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_SI4_REST_OCTETS_O
]);
6999 bit_offset
+= de_rr_rest_oct_opt_sel_param(tvb
, subtree2
, bit_offset
);
7001 if (gsm_rr_csn_HL_flag(tvb
, subtree2
, bit_len
, bit_offset
++, "Optional Power Offset", "Present", "Not present"))
7002 { /* Optional Power Offset */
7003 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_power_offset
, tvb
, bit_offset
, 2, ENC_BIG_ENDIAN
);
7006 if (gsm_rr_csn_HL_flag(tvb
, subtree2
, bit_len
, bit_offset
++, "GPRS Indicator", "Present", "Not present"))
7008 bit_offset
+= de_rr_rest_oct_gprs_indicator(tvb
, subtree2
, bit_offset
);
7010 proto_item_set_len(item2
,(bit_offset
>>3) + 1 - curr_offset
);
7012 if (gsm_rr_csn_HL_flag(tvb
, subtree
, bit_len
, bit_offset
++, "SI4 Rest Octets_S", "Present", "Not present"))
7013 { /* SI4 Rest Octets_S */
7014 bit_offset_sav
= bit_offset
;
7015 item2
= proto_tree_add_text(subtree
, tvb
, bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_SI4_REST_OCTETS_S
].strptr
);
7016 subtree2
= proto_item_add_subtree(item2
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_SI4_REST_OCTETS_S
]);
7018 if (gsm_rr_csn_HL_flag(tvb
, subtree2
, bit_len
, bit_offset
++, "LSA Parameters", "Present", "Not present"))
7019 { /* LSA Parameters */
7020 item3
= proto_tree_add_text(subtree2
, tvb
, bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_LSA_PARAMETERS
].strptr
);
7021 subtree3
= proto_item_add_subtree(item3
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_LSA_PARAMETERS
]);
7022 proto_tree_add_bits_item(subtree3
, hf_gsm_a_rr_prio_thr
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
7024 proto_tree_add_bits_item(subtree3
, hf_gsm_a_rr_lsa_offset
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
7026 if (gsm_rr_csn_flag(tvb
,subtree3
, bit_offset
++,"MCC/MNC", "Present", "Not Present"))
7028 proto_tree_add_text(subtree3
, tvb
, bit_offset
>>3, 2, "MCC: %d", tvb_get_bits16(tvb
,bit_offset
,12,ENC_BIG_ENDIAN
));
7030 proto_tree_add_text(subtree3
, tvb
, bit_offset
>>3, 2, "MNC: %d", tvb_get_bits16(tvb
,bit_offset
,12,ENC_BIG_ENDIAN
));
7033 proto_item_set_len(item2
, (bit_offset
>>3) - (bit_offset_sav
>>3)+1);
7036 if (gsm_rr_csn_HL_flag(tvb
, subtree2
, bit_len
, bit_offset
++, "Cell Identity", "Present", "Not present"))
7037 { /* Cell Identity */
7038 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_cell_id
, tvb
, bit_offset
, 16, ENC_BIG_ENDIAN
);
7042 if (gsm_rr_csn_HL_flag(tvb
, subtree2
, bit_len
, bit_offset
++, "LSA ID information", "Present", "Not present"))
7043 { /* LSA ID information */
7044 item3
= proto_tree_add_text(subtree2
, tvb
, bit_offset
>>3, len
, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_LSA_ID_INFO
].strptr
);
7045 subtree3
= proto_item_add_subtree(item3
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_LSA_ID_INFO
]);
7048 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "Type", "Short LSA ID", "LSA ID"))
7050 proto_tree_add_text(subtree3
, tvb
, bit_offset
>>3, 3, "Short LSA ID: %d",tvb_get_bits16(tvb
,bit_offset
,10,ENC_BIG_ENDIAN
));
7055 proto_tree_add_text(subtree3
, tvb
, bit_offset
>>3, 3, "LSA ID: %d",tvb_get_bits32(tvb
,bit_offset
,24,ENC_BIG_ENDIAN
));
7058 } while (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "Additional LSA ID", "Present", "Not Present"));
7060 if (gsm_rr_csn_HL_flag(tvb
, subtree
, bit_len
, bit_offset
++, "CBQ3", "Present", "Not present"))
7062 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_cbq3
, tvb
, bit_offset
, 2, ENC_BIG_ENDIAN
);
7065 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "SI3 alt position", "Present", "Not Present"))
7067 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_si13alt_position
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
7070 proto_item_set_len(item2
, (bit_offset
>>3) - (bit_offset_sav
>>3)+1);
7073 { /* Break indicator */
7074 gsm_rr_csn_HL_flag(tvb
, subtree
, bit_len
, bit_offset
++, "Break Indicator",
7075 "Additional parameters \"SI4 Rest Octets_S\" are sent in SYSTEM INFORMATION TYPE 7 and 8",
7076 "Additional parameters \"SI4 Rest Octets_S\" are not sent in SYSTEM INFORMATION TYPE 7 and 8");
7078 /* Truncation allowed (see 44.018 section 8.9 */
7079 gsm_rr_csn_padding_bits(subtree
, tvb
, bit_offset
, tvb_len
);
7080 return tvb_len
- offset
;
7084 * [3] 10.5.2.35a SI 6 Rest Octets
7086 static const true_false_string gsm_a_rr_paging_channel_restructuring_value
= {
7087 "Paging channel is restructured",
7088 "Paging channel is not restructured"
7091 static const true_false_string gsm_a_rr_vbs_vgcs_inband_notifications_value
= {
7092 "The mobile shall be notified on incoming high priority VBS/VGCS calls through NOTIFICATION/FACCH, the mobile need not to inspect the NCH",
7093 "The network does not provide notification on FACCH so that the mobile should inspect the NCH for notifications"
7096 static const true_false_string gsm_a_rr_vbs_vgcs_inband_pagings_value
= {
7097 "The mobile shall be notified on incoming high priority point-to-point calls through NOTIFICATION/FACCH, the mobile need not to inspect the PCH",
7098 "The network does not provide paging information on FACCH so that the mobile should inspect the PCH for pagings"
7101 static const value_string gsm_a_rr_max_lapdm_vals
[] = {
7102 { 0, "Any message segmented in up to 5 LAPDm frames"},
7103 { 1, "Any message segmented in up to 6 LAPDm frames"},
7104 { 2, "Any message segmented in up to 7 LAPDm frames"},
7105 { 3, "Any message segmented in up to 8 LAPDm frames"},
7106 { 4, "Any message segmented in up to 9 LAPDm frames"},
7107 { 5, "Any message segmented in up to 10 LAPDm frames"},
7108 { 6, "Any message segmented in up to 11 LAPDm frames"},
7109 { 7, "Any message segmented in up to 12 LAPDm frames"},
7113 static const true_false_string gsm_a_rr_dedicated_mode_mbms_notification_support_value
= {
7114 "The cell supports the Dedicated Mode MBMS Notification procedures",
7115 "The cell does not support the Dedicated Mode MBMS Notification procedures"
7118 static const true_false_string gsm_a_rr_mnci_support_value
= {
7119 "The cell supports the distribution of MBMS NEIGHBOURING CELL INFORMATION messages",
7120 "The cell does not support the distribution of MBMS NEIGHBOURING CELL INFORMATION messages"
7124 de_rr_si6_rest_oct(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
7126 proto_tree
*subtree2
;
7128 guint32 curr_offset
;
7129 gint bit_offset
, bit_offset_sav
;
7131 guint8 tvb_len
= tvb_length(tvb
);
7133 curr_offset
= offset
;
7134 bit_offset
= curr_offset
<< 3;
7136 if (gsm_rr_csn_HL_flag(tvb
, subtree
, 0, bit_offset
++, "PCH and NCH Info", "Present", "Not present"))
7137 { /* PCH and NCH Info */
7138 bit_offset_sav
= bit_offset
;
7139 item2
= proto_tree_add_text(subtree
, tvb
, bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_PCH_AND_NCH_INFO
].strptr
);
7140 subtree2
= proto_item_add_subtree(item2
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_PCH_AND_NCH_INFO
]);
7141 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_paging_channel_restructuring
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
7143 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_nln_sacch
, tvb
, bit_offset
, 2, ENC_BIG_ENDIAN
);
7145 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "Call Priority", "Present", "Not Present"))
7147 proto_tree_add_bits_item(subtree2
, hf_gsm_a_call_prio
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
7150 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_nln_status_sacch
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
7152 proto_item_set_len(item2
, (bit_offset
>>3) - (bit_offset_sav
>>3)+1);
7154 if (gsm_rr_csn_HL_flag(tvb
, subtree
, 0, bit_offset
++, "VBS/VGCS options", "Present", "Not present"))
7155 { /* VBS/VGCS options */
7156 bit_offset_sav
= bit_offset
;
7157 item2
= proto_tree_add_text(subtree
, tvb
,bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_VBS_VGCS_OPTIONS
].strptr
);
7158 subtree2
= proto_item_add_subtree(item2
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_VBS_VGCS_OPTIONS
]);
7159 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_vbs_vgcs_inband_notifications
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
7161 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_vbs_vgcs_inband_pagings
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
7163 proto_item_set_len(item2
, (bit_offset
>>3) - (bit_offset_sav
>>3)+1);
7165 value
= gsm_rr_csn_HL_flag(tvb
, subtree
, 0, bit_offset
++, "DTM", "Supported in Serving cell", "Not Supported in Serving cell");
7168 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_rac
, tvb
, bit_offset
, 8, ENC_BIG_ENDIAN
);
7170 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_max_lapdm
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
7173 gsm_rr_csn_HL_flag(tvb
, subtree
, 0, bit_offset
++, "Band Indicator", "1900", "1800");
7174 if (gsm_rr_csn_HL_flag(tvb
, subtree
, 0, bit_offset
++, "GPRS MS PWR MAX CCCH", "Present", "Not present"))
7176 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_gprs_ms_txpwr_max_ccch
, tvb
, bit_offset
, 5, ENC_BIG_ENDIAN
);
7179 if (gsm_rr_csn_HL_flag(tvb
, subtree
, 0, bit_offset
++, "MBMS Procedures", "Supported", "Not supported"))
7180 { /* MBMS Procedures */
7181 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_dedicated_mode_mbms_notification_support
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
7183 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_mnci_support
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
7186 if (gsm_rr_csn_HL_flag(tvb
, subtree
, 0, bit_offset
++, "Additions in Rel-7", "Present", "Not present"))
7187 { /* Additions in Release 7 */
7188 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "AMR Config", "Present", "Not Present"))
7190 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_amr_config
, tvb
, bit_offset
, 4, ENC_BIG_ENDIAN
);
7194 gsm_rr_csn_padding_bits(subtree
, tvb
, bit_offset
, tvb_len
);
7195 return tvb_len
- offset
;
7198 /* [3] 10.5.2.36 SI 7 Rest Octets
7199 * [3] 10.5.2.37 SI 8 Rest Octets
7200 * [3] 10.5.2.37a SI 9 Rest Octets
7204 * [3] 10.5.2.37b SI 13 Rest Octets
7206 static const value_string gsm_a_rr_si_change_field_vals
[] = {
7207 { 0, "Update of unspecified SI message or SI messages"},
7208 { 1, "Update of SI1 message"},
7209 { 2, "Update of SI2, SI2 bis or SI2 ter message or any instance of SI2quater messages"},
7210 { 3, "Update of SI3, SI4, SI7, SI8, SI16 or SI17 message"},
7211 { 4, "Update of SI9 message"},
7212 { 5, "Update of SI18 or SI20 message"},
7213 { 6, "Update of SI19 message"},
7214 { 7, "Update of SI15 message"},
7215 { 8, "Update of SI2n message"},
7216 { 9, "Update of unknown SI message type"},
7217 { 10, "Update of unknown SI message type"},
7218 { 11, "Update of unknown SI message type"},
7219 { 12, "Update of unknown SI message type"},
7220 { 13, "Update of unknown SI message type"},
7221 { 14, "Update of unknown SI message type"},
7222 { 15, "Update of unknown SI message type"},
7226 static const value_string gsm_a_rr_psi1_repeat_period_vals
[] = {
7227 { 0, "1 multiframe"},
7228 { 1, "2 multiframes"},
7229 { 2, "3 multiframes"},
7230 { 3, "4 multiframes"},
7231 { 4, "5 multiframes"},
7232 { 5, "6 multiframes"},
7233 { 6, "7 multiframes"},
7234 { 7, "8 multiframes"},
7235 { 8, "9 multiframes"},
7236 { 9, "10 multiframes"},
7237 { 10, "11 multiframes"},
7238 { 11, "12 multiframes"},
7239 { 12, "13 multiframes"},
7240 { 13, "14 multiframes"},
7241 { 14, "15 multiframes"},
7242 { 15, "16 multiframes"},
7246 static const value_string gsm_a_rr_pbcch_pb_vals
[] = {
7266 static const true_false_string gsm_a_rr_spgc_ccch_sup_value
= {
7267 "SPLIT_PG_CYCLE is supported on CCCH in this cell",
7268 "SPLIT_PG_CYCLE is not supported on CCCH in this cell"
7271 static const value_string gsm_a_rr_priority_access_thr_vals
[] = {
7272 { 0, "Packet access is not allowed in the cell"},
7273 { 1, "Packet access is not allowed in the cell"},
7274 { 2, "Packet access is not allowed in the cell"},
7275 { 3, "Packet access is allowed for priority level 1"},
7276 { 4, "Packet access is allowed for priority level 1 to 2"},
7277 { 5, "Packet access is allowed for priority level 1 to 3"},
7278 { 6, "Packet access is allowed for priority level 1 to 4"},
7279 { 7, "Packet access is allowed for priority level 1 to 4"},
7284 de_rr_rest_oct_gprs_mobile_allocation(tvbuff_t
*tvb
, proto_tree
*tree
, gint bit_offset
)
7286 proto_tree
*subtree
;
7288 gint curr_bit_offset
;
7292 curr_bit_offset
= bit_offset
;
7294 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_GPRS_MOBILE_ALLOC
].strptr
);
7295 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_GPRS_MOBILE_ALLOC
]);
7296 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_hsn
, tvb
, curr_bit_offset
, 6, ENC_BIG_ENDIAN
);
7297 curr_bit_offset
+= 6;
7298 while (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "RFL number list", "Present", "Not Present"))
7300 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_rfl_number
, tvb
, curr_bit_offset
, 4, ENC_BIG_ENDIAN
);
7301 curr_bit_offset
+= 4;
7303 if (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "MA", "Not Present", "Present"))
7305 while (gsm_rr_csn_flag(tvb
, subtree
, curr_bit_offset
++, "ARFCN index list", "Present", "Not Present"))
7307 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_arfcn_index
, tvb
, curr_bit_offset
, 6, ENC_BIG_ENDIAN
);
7308 curr_bit_offset
+= 6;
7313 proto_tree_add_bits_ret_val(subtree
, hf_gsm_a_rr_ma_length
, tvb
, curr_bit_offset
, 6, &ma_length
, ENC_BIG_ENDIAN
);
7314 curr_bit_offset
+= 6;
7315 value
= (gint
)ma_length
+ 1;
7316 item
= proto_tree_add_text(subtree
,tvb
, curr_bit_offset
>>3, (value
>>3)+1, "MA Bitmap: ");
7319 proto_item_append_text(item
,"%d",tvb_get_bits8(tvb
,curr_bit_offset
,1));
7320 curr_bit_offset
+= 1;
7324 proto_item_set_len(item
,((curr_bit_offset
>>3) - (bit_offset
>>3) + 1));
7326 return (curr_bit_offset
- bit_offset
);
7329 static const value_string gsm_a_rr_nmo_vals
[] = {
7330 { 0, "Network Mode of Operation I"},
7331 { 1, "Network Mode of Operation II"},
7332 { 2, "Network Mode of Operation III"},
7337 static const value_string gsm_a_rr_t3168_vals
[] = {
7349 static const value_string gsm_a_rr_t3192_vals
[] = {
7361 static const value_string gsm_a_rr_drx_timer_max_vals
[] = {
7373 static const true_false_string gsm_a_rr_access_burst_type_value
= {
7374 "11-bit format shall be used",
7375 "8-bit format shall be used"
7378 static const true_false_string gsm_a_rr_control_ack_type_value
= {
7379 "Default format is RLC/MAC control block",
7380 "Default format is four access bursts"
7383 static const value_string gsm_a_rr_pan_max_vals
[] = {
7384 { 0, "maximum value allowed for counter N3102 is 4"},
7385 { 1, "maximum value allowed for counter N3102 is 8"},
7386 { 2, "maximum value allowed for counter N3102 is 12"},
7387 { 3, "maximum value allowed for counter N3102 is 16"},
7388 { 4, "maximum value allowed for counter N3102 is 20"},
7389 { 5, "maximum value allowed for counter N3102 is 24"},
7390 { 6, "maximum value allowed for counter N3102 is 28"},
7391 { 7, "maximum value allowed for counter N3102 is 32"},
7395 static const true_false_string gsm_a_rr_egprs_packet_channel_request_value
= {
7396 "Use two phase packet access with PACKET CHANNEL REQUEST message for uplink TBF establishment on the PRACH",
7397 "Use EGPRS PACKET CHANNEL REQUEST message for uplink TBF establishment on the PRACH"
7400 static const value_string gsm_a_rr_bep_period_vals
[] = {
7420 static const true_false_string gsm_a_rr_pfc_feature_mode_value
= {
7421 "The network supports packet flow context procedures",
7422 "The network does not support packet flow context procedures"
7425 static const true_false_string gsm_a_rr_dtm_support_value
= {
7426 "The cell supports DTM procedures",
7427 "The cell does not support DTM procedures"
7430 static const true_false_string gsm_a_rr_bss_paging_coordination_value
= {
7431 "The cell supports Circuit-Switched paging coordination",
7432 "The cell does not support Circuit-Switched paging coordination"
7435 static const true_false_string gsm_a_rr_ccn_active_value
= {
7436 "CCN is enabled in the cell",
7437 "CCN is disabled in the cell"
7440 static const true_false_string gsm_a_rr_nw_ext_utbf_value
= {
7441 "The extended uplink TBF mode is supported by the network",
7442 "The extended uplink TBF mode is not supported by the network"
7445 static const true_false_string gsm_a_rr_multiple_tbf_capability_value
= {
7446 "The cell supports multiple TBF procedures",
7447 "The cell does not support multiple TBF procedures"
7450 static const true_false_string gsm_a_rr_ext_utbf_no_data_value
= {
7451 "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",
7452 "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"
7455 static const true_false_string gsm_a_rr_dtm_enhancements_capability_value
= {
7456 "The cell supports enhanced DTM CS establishment and enhanced DTM CS release procedures",
7457 "The cell does not support enhanced DTM CS establishment and enhanced DTM CS release procedures"
7460 static const true_false_string gsm_a_rr_reduced_latency_access_value
= {
7461 "The cell supports \"One Phase Access Request by Reduced Latency MS\"",
7462 "The cell does not support \"One Phase Access Request by Reduced Latency MS\""
7465 static const value_string gsm_a_rr_alpha_vals
[] = {
7485 static const value_string gsm_a_rr_t_avg_x_vals
[] = {
7486 { 0, "2^(0/2) / 6 multiframes"},
7487 { 1, "2^(1/2) / 6 multiframes"},
7488 { 2, "2^(2/2) / 6 multiframes"},
7489 { 3, "2^(3/2) / 6 multiframes"},
7490 { 4, "2^(4/2) / 6 multiframes"},
7491 { 5, "2^(5/2) / 6 multiframes"},
7492 { 6, "2^(6/2) / 6 multiframes"},
7493 { 7, "2^(7/2) / 6 multiframes"},
7494 { 8, "2^(8/2) / 6 multiframes"},
7495 { 9, "2^(9/2) / 6 multiframes"},
7496 { 10, "2^(10/2) / 6 multiframes"},
7497 { 11, "2^(11/2) / 6 multiframes"},
7498 { 12, "2^(12/2) / 6 multiframes"},
7499 { 13, "2^(13/2) / 6 multiframes"},
7500 { 14, "2^(14/2) / 6 multiframes"},
7501 { 15, "2^(15/2) / 6 multiframes"},
7502 { 16, "2^(16/2) / 6 multiframes"},
7503 { 17, "2^(17/2) / 6 multiframes"},
7504 { 18, "2^(18/2) / 6 multiframes"},
7505 { 19, "2^(19/2) / 6 multiframes"},
7506 { 20, "2^(20/2) / 6 multiframes"},
7507 { 21, "2^(21/2) / 6 multiframes"},
7508 { 22, "2^(22/2) / 6 multiframes"},
7509 { 23, "2^(23/2) / 6 multiframes"},
7510 { 24, "2^(24/2) / 6 multiframes"},
7511 { 25, "2^(25/2) / 6 multiframes"},
7512 { 26, "2^(25/2) / 6 multiframes"},
7513 { 27, "2^(25/2) / 6 multiframes"},
7514 { 28, "2^(25/2) / 6 multiframes"},
7515 { 29, "2^(25/2) / 6 multiframes"},
7516 { 30, "2^(25/2) / 6 multiframes"},
7517 { 31, "2^(25/2) / 6 multiframes"},
7521 static const true_false_string gsm_a_rr_pc_meas_chan_value
= {
7522 "Downlink measurements for power control shall be made on PDCH",
7523 "Downlink measurements for power control shall be made on BCCH"
7526 static const value_string gsm_a_rr_n_avg_i_vals
[] = {
7546 static const true_false_string gsm_a_rr_sgsnr_value
= {
7547 "SGSN is Release '99 onwards",
7548 "SGSN is Release '98 or older"
7551 static const true_false_string gsm_a_rr_si_status_ind_value
= {
7552 "The network supports the PACKET SI STATUS message",
7553 "The network does not support the PACKET SI STATUS message"
7556 static const value_string gsm_a_rr_lb_ms_txpwr_max_cch_vals
[] = {
7592 static const value_string gsm_a_rr_si2n_support_vals
[] = {
7593 { 0, "SI2n is not supported"},
7594 { 1, "SI2n is supported on PACCH"},
7595 { 2, "SI2n is supported on PACCH and broadcast on BCCH"},
7596 { 3, "SI2n is supported on PACCH and broadcast on BCCH Ext"},
7601 de_rr_si13_rest_oct(tvbuff_t
*tvb
, proto_tree
*subtree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
7603 proto_tree
*subtree2
;
7605 guint bit_offset
, bit_offset_sav
;
7606 guint8 tvb_len
= tvb_length(tvb
);
7607 guint16 bit_len
= tvb_len
<< 3;
7608 bit_offset
= offset
<< 3;
7610 if (gsm_rr_csn_HL_flag(tvb
, subtree
, 0, bit_offset
++, "SI13 contents", "Present", "Not present"))
7612 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_bcch_change_mark
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
7614 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_si_change_field
, tvb
, bit_offset
, 4, ENC_BIG_ENDIAN
);
7616 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "SI13 Change Mark", "Present", "Not Present"))
7618 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_si13_change_mark
, tvb
, bit_offset
, 2, ENC_BIG_ENDIAN
);
7620 bit_offset
+= de_rr_rest_oct_gprs_mobile_allocation(tvb
, subtree
, bit_offset
);
7622 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "PBCCH", "Present In Cell", "Not Present In Cell"))
7623 { /* PBCCH present in the cell */
7624 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_psi1_repeat_period
, tvb
, bit_offset
, 4, ENC_BIG_ENDIAN
);
7626 bit_offset_sav
= bit_offset
;
7627 item2
= proto_tree_add_text(subtree
, tvb
, bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_PBCCH_DESC
].strptr
);
7628 subtree2
= proto_item_add_subtree(item2
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_PBCCH_DESC
]);
7629 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_pbcch_pb
, tvb
, bit_offset
, 4, ENC_BIG_ENDIAN
);
7631 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_pbcch_tsc
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
7633 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_pbcch_tn
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
7635 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "MAIO", "Present", "Not Present"))
7637 proto_tree_add_text(subtree2
, tvb
, bit_offset
>>3, 1, "MAIO: %d", tvb_get_bits8(tvb
,bit_offset
,6));
7642 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "ARFCN", "Present", "Not Present"))
7644 proto_tree_add_bits_item(subtree2
, hf_gsm_a_rr_arfcn
, tvb
, bit_offset
, 10, ENC_BIG_ENDIAN
);
7648 proto_tree_add_text(subtree2
, tvb
, bit_offset
>>3, 1, "PBCCH shall use the BCCH carrier");
7650 proto_item_set_len(item2
, (bit_offset
>>3) - (bit_offset_sav
>>3)+1);
7653 { /* PBCCH not present in the cell */
7654 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_rac
, tvb
, bit_offset
, 8, ENC_BIG_ENDIAN
);
7656 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_spgc_ccch_sup
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
7658 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_priority_access_thr
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
7660 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_network_control_order
, tvb
, bit_offset
, 2, ENC_BIG_ENDIAN
);
7662 bit_offset
+= de_rr_rest_oct_gprs_cell_options(tvb
, subtree
, bit_offset
);
7663 bit_offset
+= de_rr_rest_oct_gprs_power_control_parameters(tvb
, subtree
, bit_offset
);
7666 /* Null breakpoint */
7667 if (bit_offset
< bit_len
)
7669 if (gsm_rr_csn_HL_flag(tvb
, subtree
, 0, bit_offset
++, "Additions in R99", "Present", "Not present"))
7670 { /* Additions in release 99 */
7671 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_sgsnr
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
7674 /* Null breakpoint */
7675 if (bit_offset
< bit_len
)
7677 if (gsm_rr_csn_HL_flag(tvb
, subtree
, 0, bit_offset
++, "Additions in Rel-4", "Present", "Not present"))
7678 { /* Additions in release Rel-4 */
7679 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_si_status_ind
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
7682 /* Null breakpoint */
7683 if (bit_offset
< bit_len
)
7685 if (gsm_rr_csn_HL_flag(tvb
, subtree
, 0, bit_offset
++, "Additions in Rel-6", "Present", "Not present"))
7686 { /* Additions in release Rel-6 */
7687 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "LB MS TXPWR MAX CCH ", "Present", "Not Present"))
7689 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_lb_ms_txpwr_max_cch
, tvb
, bit_offset
, 5, ENC_BIG_ENDIAN
);
7692 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_si2n_support
, tvb
, bit_offset
, 2, ENC_BIG_ENDIAN
);
7701 gsm_rr_csn_padding_bits(subtree
, tvb
, bit_offset
, tvb_len
);
7702 return tvb_len
- offset
;
7705 /* [3] 10.5.2.37c (void)
7706 * [3] 10.5.2.37d (void)
7707 * [3] 10.5.2.37e SI 16 Rest Octets
7708 * [3] 10.5.2.37f SI 17 Rest Octets
7709 * [3] 10.5.2.37g SI 19 Rest Octets
7710 * [3] 10.5.2.37h SI 18 Rest Octets
7711 * [3] 10.5.2.37i SI 20 Rest Octets
7714 * [3] 10.5.2.38 Starting Time
7717 de_rr_starting_time(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
7720 guint32 curr_offset
;
7723 curr_offset
= offset
;
7725 fn
= tvb_get_ntohs(tvb
,curr_offset
);
7726 rfn
= reduced_frame_number(fn
);
7727 proto_tree_add_item(tree
, hf_gsm_a_rr_T1prim
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
7728 proto_tree_add_item(tree
, hf_gsm_a_rr_T3
, tvb
, curr_offset
, 2, ENC_BIG_ENDIAN
);
7730 proto_tree_add_item(tree
, hf_gsm_a_rr_T2
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
7732 item
= proto_tree_add_uint(tree
, hf_gsm_a_rr_rfn
, tvb
, curr_offset
-2, 2, rfn
);
7733 PROTO_ITEM_SET_GENERATED(item
);
7734 return(curr_offset
- offset
);
7737 * [3] 10.5.2.39 Synchronization Indication
7740 * ROT: Report Observed Time Difference (Octet1 bit 3) */
7742 static const true_false_string sm_a_rr_sync_ind_rot_value
= {
7743 "Mobile Time Difference IE shall be included in the HANDOVER COMPLETE message",
7744 "Mobile Time Difference IE shall not be included in the HANDOVER COMPLETE message"
7747 /* SI: Synchronization indication (octet 1)Bit2 1 */
7749 static const value_string gsm_a_rr_sync_ind_si_vals
[] = {
7750 { 0, "Non-synchronized"},
7751 { 1, "Synchronized"},
7752 { 2, "Pre-synchronised"},
7753 { 3, "Pseudo-synchronised"},
7756 /* NCI: Normal cell indication (octet 1, bit 4) */
7758 static const true_false_string gsm_a_rr_sync_ind_nci_value
= {
7759 "Out of range timing advance shall trigger a handover failure procedure",
7760 "Out of range timing advance is ignored"
7763 de_rr_sync_ind(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
7765 guint32 curr_offset
;
7767 curr_offset
= offset
;
7770 proto_tree_add_item(tree
, hf_gsm_a_rr_sync_ind_nci
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
7772 proto_tree_add_item(tree
, hf_gsm_a_rr_sync_ind_rot
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
7774 proto_tree_add_item(tree
, hf_gsm_a_rr_sync_ind_si
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
7776 curr_offset
= curr_offset
+ 1;
7778 return(curr_offset
- offset
);
7782 * [3] 10.5.2.40 Timing Advance
7785 de_rr_timing_adv(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
7787 guint32 curr_offset
;
7789 curr_offset
= offset
;
7791 proto_tree_add_item(tree
, hf_gsm_a_rr_timing_adv
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
7792 curr_offset
= curr_offset
+ 1;
7794 return(curr_offset
- offset
);
7798 * [3] 10.5.2.41 Time Difference
7801 de_rr_time_diff(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
7803 guint32 curr_offset
;
7805 curr_offset
= offset
;
7807 proto_tree_add_item(tree
, hf_gsm_a_rr_time_diff
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
7808 curr_offset
= curr_offset
+ 1;
7810 return(curr_offset
- offset
);
7813 * [3] 10.5.2.41a TLLI
7814 * The TLLI is encoded as a binary number with a length of 4 octets. TLLI is defined in 3GPP TS 23.003
7817 de_rr_tlli(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
7819 guint32 curr_offset
, tlli
;
7821 curr_offset
= offset
;
7823 tlli
= tvb_get_ntohl(tvb
, curr_offset
);
7824 proto_tree_add_item(tree
, hf_gsm_a_rr_tlli
, tvb
, curr_offset
, 4, ENC_BIG_ENDIAN
);
7825 curr_offset
= curr_offset
+ 4;
7827 g_snprintf(add_string
, string_len
, " - 0x%x", tlli
);
7829 return(curr_offset
- offset
);
7833 * [3] 10.5.2.42 TMSI/P-TMSI
7836 de_rr_tmsi_ptmsi(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
7838 proto_tree
*subtree
;
7840 guint32 curr_offset
;
7842 curr_offset
= offset
;
7844 item
= proto_tree_add_text(tree
, tvb
, curr_offset
, 3, "%s",
7845 val_to_str_ext_const(DE_RR_TMSI_PTMSI
, &gsm_rr_elem_strings_ext
, ""));
7847 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_elem
[DE_RR_TMSI_PTMSI
]);
7849 proto_tree_add_item(subtree
, hf_gsm_a_rr_tmsi_ptmsi
, tvb
, curr_offset
, 4, ENC_BIG_ENDIAN
);
7850 curr_offset
= curr_offset
+ 4;
7852 return(curr_offset
- offset
);
7856 * [3] 10.5.2.42a VGCS target mode Indication
7859 Target mode (octet 3)
7862 0 1 group transmit mode
7863 Other values are reserved for future use.
7865 static const value_string gsm_a_rr_target_mode_vals
[] _U_
= {
7866 { 0, "Dedicated mode"},
7867 { 1, "Group transmit mode"},
7871 de_rr_vgcs_tar_mode_ind(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
7873 guint32 curr_offset
;
7875 curr_offset
= offset
;
7877 proto_tree_add_item(tree
, hf_gsm_a_rr_target_mode
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
7878 proto_tree_add_item(tree
, hf_gsm_a_rr_group_cipher_key_number
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
7879 curr_offset
= curr_offset
+ 1;
7881 return(curr_offset
- offset
);
7885 * [3] 10.5.2.42b VGCS Ciphering Parameters
7888 de_rr_vgcs_cip_par(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
7890 guint32 curr_offset
;
7892 curr_offset
= offset
;
7894 proto_tree_add_text(tree
,tvb
, curr_offset
, len
,"Data(Not decoded)");
7896 curr_offset
= curr_offset
+ 2;
7898 return(curr_offset
- offset
);
7901 * [3] 10.5.2.43 Wait Indication
7904 de_rr_wait_ind(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
7906 guint32 curr_offset
;
7908 curr_offset
= offset
;
7910 proto_tree_add_item(tree
, hf_gsm_a_rr_wait_indication
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
7912 curr_offset
= curr_offset
+ 1;
7914 return(curr_offset
- offset
);
7918 * [3] 10.5.2.44 SI10 rest octets $(ASCI)$
7922 * [3] 10.5.2.45 Extended Measurement Results
7925 de_rr_ext_meas_result(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
)
7927 guint32 curr_offset
;
7931 curr_offset
= offset
;
7932 bit_offset
= curr_offset
<< 3;
7934 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_seq_code
, tvb
,bit_offset
, 1, ENC_BIG_ENDIAN
);
7936 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_dtx_used
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
7938 for (i
=0; i
<21; i
++)
7940 value
= tvb_get_bits8(tvb
,bit_offset
,6);
7941 proto_tree_add_text(tree
, tvb
, bit_offset
>>3, 1, "RXLEV carrier %d: %s (%d)",i
,val_to_str_ext_const(value
, &gsm_a_rr_rxlev_vals_ext
, "Unknown"),value
);
7945 curr_offset
= offset
+ len
;
7947 return(curr_offset
- offset
);
7951 * [3] 10.5.2.46 Extended Measurement Frequency List
7954 de_rr_ext_meas_freq_list(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
7956 guint32 curr_offset
;
7958 curr_offset
= offset
;
7960 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_seq_code
, tvb
,(curr_offset
<<3)+3, 1, ENC_BIG_ENDIAN
);
7962 return dissect_arfcn_list(tvb
, tree
, pinfo
, offset
, 16, add_string
, string_len
);
7966 * [3] 10.5.2.47 Suspension Cause
7968 /*Suspension cause value (octet 2)*/
7969 static const value_string gsm_a_rr_suspension_cause_vals
[] = {
7970 { 0, "Emergency call, mobile originating call or call re-establishment"},
7971 { 1, "Location Area Update"},
7972 { 2, "MO Short message service"},
7973 { 3, "Other procedure which can be completed with an SDCCH"},
7974 { 4, "MO Voice broadcast or group call"},
7975 { 5, "Mobile terminating CS connection"},
7976 { 6, "DTM not supported in the cell"},
7980 de_rr_sus_cau(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
7982 guint32 curr_offset
;
7984 curr_offset
= offset
;
7986 proto_tree_add_item(tree
, hf_gsm_a_rr_suspension_cause
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
7988 curr_offset
= curr_offset
+ 1;
7990 return(curr_offset
- offset
);
7993 * [3] 10.5.2.48 APDU ID
7995 static const value_string gsm_a_rr_apdu_id_vals
[] = {
7996 { 0, "RRLP (GSM 04.31) LCS" },
8000 de_rr_apdu_id(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
8002 proto_tree_add_item(tree
, hf_gsm_a_rr_apdu_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
8008 * [3] 10.5.2.49 APDU Flags
8010 static const value_string gsm_a_rr_apdu_flags_vals
[] = {
8011 { 1, "Last or only segment" },
8012 { 2, "First or only segment" },
8016 de_rr_apdu_flags(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
8018 proto_tree_add_item(tree
, hf_gsm_a_rr_apdu_flags
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
8024 * [3] 10.5.2.50 APDU Data
8027 de_rr_apdu_data(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
)
8031 sub_tvb
= tvb_new_subset(tvb
, offset
, len
, len
);
8034 call_dissector(rrlp_dissector
, sub_tvb
,pinfo
, tree
);
8040 * [3] 10.5.2.51 Handover To UTRAN Command
8043 de_rr_ho_to_utran_cmd(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
)
8045 guint32 curr_offset
;
8046 tvbuff_t
*rrc_irat_ho_to_utran_cmd_tvb
;
8048 curr_offset
= offset
;
8051 rrc_irat_ho_to_utran_cmd_tvb
= tvb_new_subset(tvb
, curr_offset
, len
, len
);
8052 if (rrc_irat_ho_to_utran_cmd_handle
)
8053 call_dissector(rrc_irat_ho_to_utran_cmd_handle
, rrc_irat_ho_to_utran_cmd_tvb
, pinfo
, tree
);
8057 return(curr_offset
- offset
);
8062 * [3] 10.5.2.52 Handover To cdma2000 Command
8063 * [3] 10.5.2.53 (void)
8064 * [3] 10.5.2.54 (void)
8065 * [3] 10.5.2.55 (void)
8066 * [3] 10.5.2.56 3G Target Cell
8069 * 10.5.2.57 Service Support
8071 static const true_false_string gsm_a_rr_MBMS_multicast_value
= {
8072 "mobile station requires notification of multicast MBMS services",
8073 "mobile station does not require notification of multicast MBMS services"
8075 static const true_false_string gsm_a_rr_MBMS_broadcast_value
= {
8076 "mobile station requires notification of broadcast MBMS services",
8077 "mobile station does not require notification of broadcast MBMS services"
8080 de_rr_serv_sup(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
8082 guint32 curr_offset
;
8084 curr_offset
= offset
;
8086 * 0 mobile station does not require notification of broadcast MBMS services
8087 * 1 mobile station requires notification of broadcast MBMS services
8089 * 0 mobile station does not require notification of multicast MBMS services
8090 * 1 mobile station requires notification of multicast MBMS services
8092 /* MBMS Multicast */
8093 proto_tree_add_item(tree
, hf_gsm_a_rr_MBMS_multicast
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
8095 /* MBMS Broadcast */
8096 proto_tree_add_item(tree
, hf_gsm_a_rr_MBMS_broadcast
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
8099 return(curr_offset
- offset
);
8103 * [3] 10.5.2.59 Dedicated Service Information
8106 Last Segment (octet 2)
8108 0 mobile station shall not perform Service Information Sending procedure on new cell.
8109 1 mobile station shall perform Service Information Sending procedure on new cell.
8111 static const true_false_string gsm_a_rr_last_segment_value
= {
8112 "Mobile station shall perform Service Information Sending procedure on new cell.",
8113 "mobile station shall not perform Service Information Sending procedure on new cell."
8116 de_rr_ded_serv_inf(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
8118 guint32 curr_offset
;
8120 curr_offset
= offset
;
8122 proto_tree_add_item(tree
, hf_gsm_a_rr_last_segment
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
8124 curr_offset
= curr_offset
+ 3;
8126 return(curr_offset
- offset
);
8130 * [3] 10.5.2.69 Carrier Indication
8132 static const true_false_string gsm_a_rr_carrier_ind_value
= {
8138 de_rr_carrier_ind(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
8140 proto_tree
*subtree
;
8142 guint32 curr_offset
;
8144 curr_offset
= offset
;
8146 item
= proto_tree_add_text(tree
, tvb
, curr_offset
, 3, "%s",
8147 val_to_str_ext_const(DE_RR_CARRIER_IND
, &gsm_rr_elem_strings_ext
, ""));
8149 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_elem
[DE_RR_CARRIER_IND
]);
8151 proto_tree_add_item(subtree
, hf_gsm_a_rr_carrier_ind
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
8155 return(curr_offset
- offset
);
8158 guint16 (*rr_elem_fcn
[])(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
, guint32 offset
, guint len
, gchar
*add_string
, int string_len
) = {
8159 /* Radio Resource Management Information Elements 10.5.2, most are from 10.5.1 */
8161 de_rr_ba_range
, /* [3] 10.5.2.1a BA Range */
8162 de_rr_cell_ch_dsc
, /* [3] 10.5.2.1b Cell Channel Description */
8163 de_rr_ba_list_pref
, /* [3] 10.5.2.1c BA List Pref */
8164 de_rr_utran_freq_list
, /* [3] 10.5.2.1d UTRAN Frequency List */
8165 de_rr_cell_select_indic
, /* [3] 10.5.2.1e Cell selection indicator after release of all TCH and SDCCH IE */
8166 de_rr_cell_dsc
, /* 10.5.2.2 RR Cell Description */
8167 de_rr_cell_opt_bcch
, /* [3] 10.5.2.3 Cell Options (BCCH) */
8168 de_rr_cell_opt_sacch
, /* [3] 10.5.2.3a Cell Options (SACCH) */
8169 de_rr_cell_sel_param
, /* [3] 10.5.2.4 Cell Selection Parameters */
8171 * [3] 10.5.2.4a (void)
8173 de_rr_ch_dsc
, /* [3] 10.5.2.5 Channel Description */
8174 de_rr_ch_dsc2
, /* [3] 10.5.2.5a RR Channel Description 2 */
8175 de_rr_ch_dsc3
, /* [3] 10.5.2.5c RR Channel Description 3 */
8176 de_rr_ch_mode
, /* [3] 10.5.2.6 Channel Mode */
8177 de_rr_ch_mode2
, /* [3] 10.5.2.7 Channel Mode 2 */
8178 de_rr_utran_cm
, /* [3] 10.5.2.7a UTRAN Classmark */
8179 /* [3] 10.5.2.7b (void) */
8181 de_rr_cm_enq_mask
, /* [3] 10.5.2.7c Classmark Enquiry Mask */
8182 /* [3] 10.5.2.7d GERAN Iu Mode Classmark information element */
8183 de_rr_chnl_needed
, /* [3] 10.5.2.8 Channel Needed
8184 * [3] 10.5.2.8a (void) */
8185 de_rr_chnl_req_desc2
, /* [3] 10.5.2.8b Channel Request Description 2 */
8187 de_rr_cip_mode_set
, /* [3] 10.5.2.9 Cipher Mode Setting */
8188 de_rr_cip_mode_resp
, /* [3] 10.5.2.10 Cipher Response */
8189 de_rr_ctrl_ch_desc
, /* [3] 10.5.2.11 Control Channel Description */
8190 de_rr_dtm_info_details
, /* [3] 10.5.2.11a DTM Information Details */
8191 de_rr_dyn_arfcn_map
, /* [3] 10.5.2.11b Dynamic ARFCN Mapping */
8192 de_rr_freq_ch_seq
, /* [3] 10.5.2.12 Frequency Channel Sequence */
8193 de_rr_freq_list
, /* [3] 10.5.2.13 Frequency List */
8194 de_rr_freq_short_list
, /* [3] 10.5.2.14 Frequency Short List */
8195 de_rr_freq_short_list2
, /* [3] 10.5.2.14a Frequency Short List 2 */
8196 /* [3] 10.5.2.14b Group Channel Description */
8197 de_rr_gprs_resumption
, /* [3] 10.5.2.14c GPRS Resumption */
8198 de_rr_gprs_broadcast_info
, /* [3] 10.5.2.14d GPRS broadcast information */
8199 /* [3] 10.5.2.14e Enhanced DTM CS Release Indication */
8200 de_rr_ho_ref
, /* 10.5.2.15 Handover Reference */
8201 de_rr_ia_rest_oct
, /* [3] 10.5.2.16 IA Rest Octets */
8202 de_rr_iar_rest_oct
, /* [3] 10.5.2.17 IAR Rest Octets */
8203 de_rr_iax_rest_oct
, /* [3] 10.5.2.18 IAX Rest Octets */
8204 de_rr_l2_pseudo_len
, /*[3] 10.5.2.19 L2 Pseudo Length */
8205 de_rr_meas_res
, /* [3] 10.5.2.20 Measurement Results */
8209 de_rr_mob_all
, /* [3] 10.5.2.21 Mobile Allocation */
8210 de_rr_mob_time_diff
, /* [3] 10.5.2.21a Mobile Time Difference */
8211 de_rr_multirate_conf
, /* [3] 10.5.2.21aa MultiRate configuration */
8213 de_rr_mult_all
, /* [3] 10.5.2.21b Multislot Allocation */
8215 * [3] 10.5.2.21c (void)
8217 de_rr_neigh_cell_desc
, /* [3] 10.5.2.22 Neighbour Cell Description */
8218 de_rr_neigh_cell_desc2
, /* [3] 10.5.2.22a Neighbour Cell Description 2 */
8220 * [3] 10.5.2.22b (void)
8221 * [3] 10.5.2.22c NT/N Rest Octets */
8222 de_rr_p1_rest_oct
, /* [3] 10.5.2.23 P1 Rest Octets */
8223 de_rr_p2_rest_oct
, /* [3] 10.5.2.24 P2 Rest Octets */
8224 de_rr_p3_rest_oct
, /* [3] 10.5.2.25 P3 Rest Octets */
8225 de_rr_packet_ch_desc
, /* [3] 10.5.2.25a Packet Channel Description */
8226 de_rr_ded_mod_or_tbf
, /* [3] 10.5.2.25b Dedicated mode or TBF */
8227 de_rr_pkt_ul_ass
, /* [3] 10.5.2.25c RR Packet Uplink Assignment */
8228 de_rr_pkt_dl_ass
, /* [3] 10.5.2.25d RR Packet Downlink Assignment */
8229 de_rr_pkt_dl_ass_type2
, /* [3] 10.5.2.25e RR Packet Downlink Assignment Type 2 */
8230 de_rr_page_mode
, /* [3] 10.5.2.26 Page Mode */
8232 * [3] 10.5.2.26a (void)
8233 * [3] 10.5.2.26b (void)
8234 * [3] 10.5.2.26c (void)
8235 * [3] 10.5.2.26d (void)
8237 de_rr_ncc_perm
, /* [3] 10.5.2.27 NCC Permitted */
8238 de_rr_pow_cmd
, /* 10.5.2.28 Power Command */
8239 de_rr_pow_cmd_and_acc_type
, /* 10.5.2.28a Power Command and access type */
8240 de_rr_rach_ctrl_param
, /* [3] 10.5.2.29 RACH Control Parameters */
8241 de_rr_req_ref
, /* [3] 10.5.2.30 Request Reference */
8242 de_rr_cause
, /* 10.5.2.31 RR Cause */
8243 de_rr_sync_ind
, /* 10.5.2.39 Synchronization Indication */
8244 de_rr_si1_rest_oct
, /* [3] 10.5.2.32 SI1 Rest Octets */
8245 /* [3] 10.5.2.33 SI 2bis Rest Octets */
8246 de_rr_si2ter_rest_oct
, /* [3] 10.5.2.33a SI 2ter Rest Octets */
8247 de_rr_si2quater_rest_oct
, /* [3] 10.5.2.33b SI 2quater Rest Octets */
8248 de_rr_si3_rest_oct
, /* [3] 10.5.2.34 SI3 Rest Octets */
8249 de_rr_si4_rest_oct
, /* [3] 10.5.2.35 SI4 Rest Octets */
8250 de_rr_si6_rest_oct
, /* [3] 10.5.2.35b SI6 Rest Octets */
8251 /* [3] 10.5.2.36 SI 7 Rest Octets
8252 * [3] 10.5.2.37 SI 8 Rest Octets
8253 * [3] 10.5.2.37a SI 9 Rest Octets
8255 de_rr_si13_rest_oct
, /* [3] 10.5.2.37a SI13 Rest Octets */
8256 /* [3] 10.5.2.37c (void)
8257 * [3] 10.5.2.37d (void)
8258 * [3] 10.5.2.37e SI 16 Rest Octets
8259 * [3] 10.5.2.37f SI 17 Rest Octets
8260 * [3] 10.5.2.37g SI 19 Rest Octets
8261 * [3] 10.5.2.37h SI 18 Rest Octets
8262 * [3] 10.5.2.37i SI 20 Rest Octets */
8263 de_rr_starting_time
, /* [3] 10.5.2.38 Starting Time */
8264 de_rr_timing_adv
, /* [3] 10.5.2.40 Timing Advance */
8265 de_rr_time_diff
, /* [3] 10.5.2.41 Time Difference */
8266 de_rr_tlli
, /* [3] 10.5.2.41a TLLI */
8267 de_rr_tmsi_ptmsi
, /* [3] 10.5.2.42 TMSI/P-TMSI */
8268 de_rr_vgcs_tar_mode_ind
, /* [3] 10.5.2.42a VGCS target mode Indication */
8270 de_rr_vgcs_cip_par
, /* [3] 10.5.2.42b VGCS Ciphering Parameters */
8271 de_rr_wait_ind
, /* [3] 10.5.2.43 Wait Indication */
8272 /* [3] 10.5.2.44 SI10 rest octets $(ASCI)$ */
8273 de_rr_ext_meas_result
, /* [3] 10.5.2.45 Extended Measurement Results */
8274 de_rr_ext_meas_freq_list
, /* [3] 10.5.2.46 Extended Measurement Frequency List */
8275 de_rr_sus_cau
, /* [3] 10.5.2.47 Suspension Cause */
8276 de_rr_apdu_id
, /* [3] 10.5.2.48 APDU ID */
8277 de_rr_apdu_flags
, /* [3] 10.5.2.49 APDU Flags */
8278 de_rr_apdu_data
, /* [3] 10.5.2.50 APDU Data */
8279 de_rr_ho_to_utran_cmd
, /* [3] 10.5.2.51 Handover To UTRAN Command */
8280 /* [3] 10.5.2.52 Handover To cdma2000 Command
8281 * [3] 10.5.2.53 (void)
8282 * [3] 10.5.2.54 (void)
8283 * [3] 10.5.2.55 (void)
8284 * [3] 10.5.2.56 3G Target Cell
8285 * 10.5.2.57 Service Support */
8286 de_rr_serv_sup
, /* 10.5.2.57 Service Support */
8288 * 10.5.2.58 MBMS p-t-m Channel Description
8290 de_rr_ded_serv_inf
, /* [3] 10.5.2.59 Dedicated Service Information */
8292 * 10.5.2.60 MPRACH Description
8293 * 10.5.2.61 Restriction Timer
8294 * 10.5.2.62 MBMS Session Identity
8295 * 10.5.2.63 Reduced group or broadcast call reference
8296 * 10.5.2.64 Talker Priority status
8297 * 10.5.2.65 Talker Identity
8299 * 10.5.2.67 PS Cause
8300 * 10.5.2.68 VGCS AMR Configuration
8302 de_rr_carrier_ind
, /* 10.5.2.69 Carrier Indication */
8306 /* MESSAGE FUNCTIONS */
8309 * 9.1.1 Additional Assignment
8312 dtap_rr_add_ass(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
8314 guint32 curr_offset
;
8318 curr_offset
= offset
;
8321 /* Channel Description 10.5.2.5 M V 3 */
8322 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_CH_DSC
, NULL
);
8324 /* Mobile Allocation 10.5.2.21 C TLV 3-10 */
8325 ELEM_OPT_TLV(0x72, GSM_A_PDU_TYPE_RR
, DE_RR_MOB_ALL
, NULL
);
8327 /* Starting Time 10.5.2.38 O TV 3 */
8328 ELEM_OPT_TV(0x7c, GSM_A_PDU_TYPE_RR
, DE_RR_STARTING_TIME
, NULL
);
8330 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
8334 * 9.1.2 Assignment command
8337 dtap_rr_ass_cmd(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
8339 guint32 curr_offset
;
8343 curr_offset
= offset
;
8346 /* Channel Description 2 10.5.2.5a M V 3 */
8347 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_CH_DSC2
, " - Description of the First Channel, after time");
8349 /* Power Command 10.5.2.28 M V 1 */
8350 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_POW_CMD
, NULL
);
8352 /* 05 Frequency List 10.5.2.13 C TLV 4-132 */
8353 ELEM_OPT_TLV(0x05, GSM_A_PDU_TYPE_RR
, DE_RR_FREQ_LIST
, " - Frequency List, after time");
8355 /* 62 Cell Channel Description 10.5.2.1b O TV 17 */
8356 ELEM_OPT_TV(0x62, GSM_A_PDU_TYPE_RR
, DE_RR_CELL_CH_DSC
, NULL
);
8358 /* 10 Multislot Allocation 10.5.2.21b C TLV 3-12 */
8359 ELEM_OPT_TLV(0x10,GSM_A_PDU_TYPE_RR
, DE_RR_MULT_ALL
, " - Description of the multislot configuration");
8361 /* 63 Channel Mode 10.5.2.6 O TV 2 */
8362 ELEM_OPT_TV(0x63,GSM_A_PDU_TYPE_RR
, DE_RR_CH_MODE
, " - Mode of the First Channel(Channel Set 1)");
8364 /* 11 Channel Mode 10.5.2.6 O TV 2 */
8365 ELEM_OPT_TV(0x11,GSM_A_PDU_TYPE_RR
, DE_RR_CH_MODE
, " - Mode of Channel Set 2");
8367 /* 13 Channel Mode 10.5.2.6 O TV 2 */
8368 ELEM_OPT_TV(0x13,GSM_A_PDU_TYPE_RR
, DE_RR_CH_MODE
, " - Mode of Channel Set 3");
8370 /* 14 Channel Mode 10.5.2.6 O TV 2 */
8371 ELEM_OPT_TV(0x14,GSM_A_PDU_TYPE_RR
, DE_RR_CH_MODE
, " - Mode of Channel Set 4");
8373 /* 15 Channel Mode 10.5.2.6 O TV 2 */
8374 ELEM_OPT_TV(0x15,GSM_A_PDU_TYPE_RR
, DE_RR_CH_MODE
, " - Mode of Channel Set 5");
8376 /* 16 Channel Mode 10.5.2.6 O TV 2 */
8377 ELEM_OPT_TV(0x16,GSM_A_PDU_TYPE_RR
, DE_RR_CH_MODE
, " - Mode of Channel Set 6");
8379 /* 17 Channel Mode 10.5.2.6 O TV 2 */
8380 ELEM_OPT_TV(0x17,GSM_A_PDU_TYPE_RR
, DE_RR_CH_MODE
, " - Mode of Channel Set 7");
8382 /* 18 Channel Mode 10.5.2.6 O TV 2 */
8383 ELEM_OPT_TV(0x18,GSM_A_PDU_TYPE_RR
, DE_RR_CH_MODE
, " - Mode of Channel Set 8");
8385 /* 64 Channel Description 10.5.2.5 O TV 4 */
8386 ELEM_OPT_TV(0x64,GSM_A_PDU_TYPE_RR
, DE_RR_CH_DSC
, "Description of the Second Channel, after time");
8388 /* 66 Channel Mode 2 10.5.2.7 O TV 2 */
8389 ELEM_OPT_TV(0x66,GSM_A_PDU_TYPE_RR
, DE_RR_CH_MODE2
, " - Mode of the Second Channel");
8391 /* 72 Mobile Allocation 10.5.2.21 C TLV 3-10 */
8392 ELEM_OPT_TLV(0x72,GSM_A_PDU_TYPE_RR
, DE_RR_MOB_ALL
, " - Mobile Allocation, after time");
8394 /* 7C Starting Time 10.5.2.38 O TV 3 */
8395 ELEM_OPT_TV(0x7C,GSM_A_PDU_TYPE_RR
, DE_RR_STARTING_TIME
, NULL
);
8397 /* 19 Frequency List 10.5.2.13 C TLV 4-132 */
8398 ELEM_OPT_TLV(0x19, GSM_A_PDU_TYPE_RR
, DE_RR_FREQ_LIST
, " - Frequency List, before time");
8400 /* 1C Channel Description 2 10.5.2.5a O TV 4 */
8401 ELEM_OPT_TV(0x1c,GSM_A_PDU_TYPE_RR
, DE_RR_CH_DSC2
, " - Description of the First Channel, before time");
8403 /* 1D Channel Description 10.5.2.5 O TV 4 */
8404 ELEM_OPT_TV(0x1d,GSM_A_PDU_TYPE_RR
, DE_RR_CH_DSC
, " - Description of the Second Channel, before time");
8406 /* 1E Frequency channel sequence 10.5.2.12 C TV 10 */
8407 ELEM_OPT_TV(0x1e,GSM_A_PDU_TYPE_RR
, DE_RR_FREQ_CH_SEQ
, " - Frequency channel sequence before time");
8409 /* 21 Mobile Allocation 10.5.2.21 C TLV 3-10 */
8410 ELEM_OPT_TLV(0x21,GSM_A_PDU_TYPE_RR
, DE_RR_MOB_ALL
, " - Mobile Allocation, before time");
8412 /* 9- Cipher Mode Setting 10.5.2.9 O TV 1 */
8413 ELEM_OPT_TV_SHORT(0x90,GSM_A_PDU_TYPE_RR
, DE_RR_CIP_MODE_SET
, NULL
);
8414 /* 01 VGCS target mode Indication VGCS target mode Indication 10.5.2.42a O TLV 3 */
8415 ELEM_OPT_TLV(0x01,GSM_A_PDU_TYPE_RR
, DE_RR_VGCS_TAR_MODE_IND
, NULL
);
8417 /* 03 Multi-Rate configuration, MultiRate configuration 10.5.2.21aa O TLV 4-8 */
8418 ELEM_OPT_TLV(0x03,GSM_A_PDU_TYPE_RR
, DE_RR_MULTIRATE_CONF
, NULL
);
8420 /* 04 VGCS Ciphering Parameters VGCS Ciphering Parameters 10.5.2.42b O TLV 3-15 */
8421 ELEM_OPT_TLV(0x04,GSM_A_PDU_TYPE_RR
, DE_RR_VGCS_CIP_PAR
, NULL
);
8423 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
8428 * 9.1.3 Assignment complete
8431 dtap_rr_ass_comp(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
8433 guint32 curr_offset
;
8437 curr_offset
= offset
;
8440 /* RR Cause RR Cause 10.5.2.31 M V 1 */
8441 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_CAUSE
, NULL
);
8443 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
8448 * 9.1.4 Assignment failure
8451 dtap_rr_ass_fail(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
8453 guint32 curr_offset
;
8457 curr_offset
= offset
;
8460 /* RR Cause RR Cause 10.5.2.31 M V 1 */
8461 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_CAUSE
, NULL
);
8463 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
8468 * 9.1.5 Channel Mode Modify
8471 dtap_rr_ch_mode_mod(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
8473 guint32 curr_offset
;
8477 curr_offset
= offset
;
8480 /* Channel Description 2 10.5.2.5a M V 3 */
8481 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_CH_DSC2
, NULL
);
8483 /* Channel Mode 10.5.2.6 M V 1 */
8484 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_CH_MODE
, NULL
);
8486 /* 01 VGCS target mode Indication VGCS target mode Indication 10.5.2.42a O TLV 3 */
8487 ELEM_OPT_TLV(0x01,GSM_A_PDU_TYPE_RR
, DE_RR_VGCS_TAR_MODE_IND
, NULL
);
8489 /* 03 Multi-Rate configuration, MultiRate configuration 10.5.2.21aa O TLV 4-8 */
8490 ELEM_OPT_TLV(0x03,GSM_A_PDU_TYPE_RR
, DE_RR_MULTIRATE_CONF
, NULL
);
8492 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
8497 * 9.1.6 Channel Mode Modify Acknowledge
8500 dtap_rr_ch_mode_mod_ack(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
8502 guint32 curr_offset
;
8506 curr_offset
= offset
;
8509 /* Channel Description 2 10.5.2.5a M V 3 */
8510 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_CH_DSC2
, NULL
);
8512 /* Channel Mode 10.5.2.6 M V 1 */
8513 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_CH_MODE
, NULL
);
8515 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
8520 * 9.1.7 Channel Release
8523 dtap_rr_ch_rel(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
8525 guint32 curr_offset
;
8529 curr_offset
= offset
;
8532 /* RR Cause RR Cause 10.5.2.31 M V 1 */
8533 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_CAUSE
, NULL
);
8535 /* 73 BA Range BA Range 10.5.2.1a O TLV 6-7 */
8536 ELEM_OPT_TLV(0x73, GSM_A_PDU_TYPE_RR
, DE_RR_BA_RANGE
, NULL
);
8538 /* 74 Group Channel Description Group Channel Description 10.5.2.14b O TLV 5-13 */
8539 /* ELEM_OPT_TLV(0x74, GSM_A_PDU_TYPE_RR, DE_GRP_CH_DESC, NULL); */
8541 /* 8x Group Cipher Key Number Group Cipher Key Number 10.5.1.10 C TV 1 */
8542 /* ELEM_OPT_TV_SHORT(0x80, GSM_A_PDU_TYPE_RR, DE_GRP_CIP_KEY_NUM, NULL); */
8544 /* Cx GPRS Resumption GPRS Resumption 10.5.2.14c O TV 1 */
8545 ELEM_OPT_TV_SHORT(0xC0, GSM_A_PDU_TYPE_RR
, DE_RR_GPRS_RESUMPTION
, NULL
);
8547 /* 75 BA List Pref BA List Pref 10.5.2.1c O TLV 3-? */
8548 ELEM_OPT_TLV(0x75, GSM_A_PDU_TYPE_RR
, DE_RR_BA_LIST_PREF
, NULL
);
8550 /* 76 UTRAN Freq List 10.5.2.1d O TLV 3-? */
8551 ELEM_OPT_TLV(0x76, GSM_A_PDU_TYPE_RR
, DE_RR_UTRAN_FREQ_LIST
, NULL
);
8553 /* 62 Cell Channel Description Cell Channel Description 10.5.2.1b O TV 17 */
8554 ELEM_OPT_TV(0x62, GSM_A_PDU_TYPE_RR
, DE_RR_CELL_CH_DSC
, NULL
);
8556 /* 62 Cell selection indicator after release of all TCH and SDCCH 10.5.2.1e O TLV 4-? */
8557 ELEM_OPT_TLV(0x77, GSM_A_PDU_TYPE_RR
, DE_RR_CELL_SELECT_INDIC
, NULL
);
8559 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
8564 * 9.1.8 Channel Request
8566 /* This message is NOT follow the basic format, and is only found on RACH - ignored here */
8569 * 9.1.9 Ciphering Mode Command
8572 dtap_rr_cip_mode_cmd(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
8574 guint32 curr_offset
;
8577 curr_offset
= offset
;
8580 /* Ciphering Mode Setting 10.5.2.9 M V 0.5 */
8581 /* Cipher Response 10.5.2.10 M V 0.5 */
8582 ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_RR
, DE_RR_CIP_MODE_SET
,
8583 GSM_A_PDU_TYPE_RR
, DE_RR_CIP_MODE_RESP
);
8585 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
8589 * 9.1.10 Ciphering Mode Complete
8592 dtap_rr_cip_mode_cpte(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
8594 guint32 curr_offset
;
8598 curr_offset
= offset
;
8601 /* Mobile Equipment Identity 10.5.1.4 O TLV */
8602 ELEM_OPT_TLV(0x17, GSM_A_PDU_TYPE_COMMON
, DE_MID
, "Mobile Equipment Identity");
8604 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
8609 * 9.1.11 Classmark change
8612 dtap_rr_mm_cm_change(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
8614 guint32 curr_offset
;
8618 curr_offset
= offset
;
8621 /* Mobile Station Classmark 2 10.5.1.6 M LV 4 */
8622 ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON
, DE_MS_CM_2
, NULL
);
8623 /* 20 Mobile Station Classmark 3 10.5.1.7 C TLV 3-34 */
8624 ELEM_OPT_TLV(0x20, GSM_A_PDU_TYPE_COMMON
, DE_MS_CM_3
, NULL
);
8626 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
8631 * 9.1.11 UTRAN Classmark Change
8634 dtap_rr_utran_classmark_change(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
8636 guint32 curr_offset
;
8640 curr_offset
= offset
;
8643 /* UTRAN Classmark 10.5.2.7a M LV 2-? */
8644 ELEM_MAND_LV(GSM_A_PDU_TYPE_RR
, DE_RR_UTRAN_CM
, NULL
);
8646 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
8650 * 9.1.12 Classmark enquiry
8653 dtap_rr_cm_enq(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
8655 guint32 curr_offset
;
8659 curr_offset
= offset
;
8662 /* 10 Classmark Enquiry Mask 10.5.2.7c O TLV 3 */
8663 ELEM_OPT_TLV(0x10, GSM_A_PDU_TYPE_RR
, DE_RR_CM_ENQ_MASK
, NULL
);
8665 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
8670 * 9.1.12b Configuration change command
8673 dtap_rr_conf_change_cmd(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
8675 guint32 curr_offset
;
8679 curr_offset
= offset
;
8682 /* Multislot Allocation 10.5.2.21b M LV 2-11 */
8683 ELEM_MAND_LV(GSM_A_PDU_TYPE_RR
, DE_RR_MULT_ALL
, NULL
);
8685 /* Channel Mode 10.5.2.6 O TV 2 */
8686 ELEM_OPT_TV(0x63,GSM_A_PDU_TYPE_RR
, DE_RR_CH_MODE
, " - Mode of Channel Set 1");
8688 /* Channel Mode 10.5.2.6 O TV 2 */
8689 ELEM_OPT_TV(0x11,GSM_A_PDU_TYPE_RR
, DE_RR_CH_MODE
, " - Mode of Channel Set 2");
8691 /* Channel Mode 10.5.2.6 O TV 2 */
8692 ELEM_OPT_TV(0x13,GSM_A_PDU_TYPE_RR
, DE_RR_CH_MODE
, " - Mode of Channel Set 3");
8694 /* Channel Mode 10.5.2.6 O TV 2 */
8695 ELEM_OPT_TV(0x14,GSM_A_PDU_TYPE_RR
, DE_RR_CH_MODE
, " - Mode of Channel Set 4");
8697 /* Channel Mode 10.5.2.6 O TV 2 */
8698 ELEM_OPT_TV(0x15,GSM_A_PDU_TYPE_RR
, DE_RR_CH_MODE
, " - Mode of Channel Set 5");
8700 /* Channel Mode 10.5.2.6 O TV 2 */
8701 ELEM_OPT_TV(0x16,GSM_A_PDU_TYPE_RR
, DE_RR_CH_MODE
, " - Mode of Channel Set 6");
8703 /* Channel Mode 10.5.2.6 O TV 2 */
8704 ELEM_OPT_TV(0x17,GSM_A_PDU_TYPE_RR
, DE_RR_CH_MODE
, " - Mode of Channel Set 7");
8706 /* Channel Mode 10.5.2.6 O TV 2 */
8707 ELEM_OPT_TV(0x18,GSM_A_PDU_TYPE_RR
, DE_RR_CH_MODE
, " - Mode of Channel Set 8");
8709 EXTRANEOUS_DATA_CHECK(len
, curr_offset
- offset
);
8713 * 9.1.12c Configuration change acknowledge
8718 * 9.1.12d Configuration change reject
8721 dtap_rr_conf_change_rej(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
8723 guint32 curr_offset
;
8727 curr_offset
= offset
;
8730 /* RR Cause 10.5.2.31 M V 1 */
8731 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_CAUSE
, NULL
);
8733 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
8737 * 9.1.12e DTM Assignment Command
8740 dtap_rr_dtm_ass_cmd(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
8742 guint32 curr_offset
;
8746 curr_offset
= offset
;
8749 /* CS Power Command 10.5.2.28 M V 1 */
8750 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_POW_CMD
, NULL
);
8752 /* Description of the CS Channel 10.5.2.5 M V 3 */
8753 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_CH_DSC
, NULL
);
8755 /* GPRS broadcast information 10.5.2.14d M LV 7 - n */
8756 ELEM_MAND_LV(GSM_A_PDU_TYPE_RR
, DE_RR_GPRS_BROADCAST_INFORMATION
, NULL
);
8758 /* 10 Cell Channel Description 10.5.2.1b O TV 17 */
8759 ELEM_OPT_TV(0x10, GSM_A_PDU_TYPE_RR
, DE_RR_CELL_CH_DSC
, NULL
);
8761 /* 11 Channel mode Channel mode 10.5.2.6 O TV 2 */
8762 ELEM_OPT_TV(0x11,GSM_A_PDU_TYPE_RR
, DE_RR_CH_MODE
, NULL
);
8763 /* 12 Frequency List Frequency List 10.5.2.13 C TLV 4 - 132 */
8764 ELEM_OPT_TLV(0x12, GSM_A_PDU_TYPE_RR
, DE_RR_FREQ_LIST
, NULL
);
8765 /* 13 Mobile Allocation Mobile Allocation 10.5.2.21 C TLV 3 - 10 */
8766 ELEM_OPT_TLV(0x13, GSM_A_PDU_TYPE_RR
, DE_RR_MOB_ALL
, NULL
);
8768 /* 15 Description of the Uplink Packet Channel Assignment RR Packet Uplink Assignment 10.5.2.25c O TLV 3 - n */
8769 ELEM_OPT_TLV(0x15, GSM_A_PDU_TYPE_RR
, DE_RR_PKT_UL_ASS
, NULL
);
8771 /* 16 Description of the Downlink Packet Channel Assignment RR Packet Downlink Assignment 10.5.2.25d O TLV 3 - n */
8772 ELEM_OPT_TLV(0x16, GSM_A_PDU_TYPE_RR
, DE_RR_PKT_DL_ASS
, NULL
);
8774 /* 17 Multi-Rate configuration MultiRate configuration 10.5.2.21aa O TLV 4-8 */
8775 ELEM_OPT_TLV(0x17,GSM_A_PDU_TYPE_RR
, DE_RR_MULTIRATE_CONF
, NULL
);
8777 /* 9- Ciphering Mode Setting Ciphering Mode Setting 10.5.2.9 O TV 1 */
8778 ELEM_OPT_TV_SHORT(0x90,GSM_A_PDU_TYPE_RR
, DE_RR_CIP_MODE_SET
, NULL
);
8780 /* 18 Mobile Allocation C2 Mobile Allocation 10.5.2.21 C TLV 3 - 10 */
8781 ELEM_OPT_TLV(0x18, GSM_A_PDU_TYPE_RR
, DE_RR_MOB_ALL
, " - C2");
8783 /* 19 Frequency List C2 Frequency List 10.5.2.13 C TLV 4 - 132 */
8784 ELEM_OPT_TLV(0x19, GSM_A_PDU_TYPE_RR
, DE_RR_FREQ_LIST
, " - C2");
8786 /* 20 Description of the Downlink Packet Channel Assignment Type 2 RR Packet Downlink Assignment Type 2 10.5.2.25e C TLV 3 n */
8787 ELEM_OPT_TLV(0x20, GSM_A_PDU_TYPE_RR
, DE_RR_PKT_DL_ASS_TYPE2
, NULL
);
8789 /* 21 Channel Description C2 Channel Description 3 10.5.2.5c O TV 3 */
8790 ELEM_OPT_TV(0x21,GSM_A_PDU_TYPE_RR
, DE_RR_CH_DSC3
, " - Channel Description C2");
8792 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
8796 * 9.1.12f DTM Assignment Failure
8799 dtap_rr_dtm_ass_fail(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
8801 guint32 curr_offset
;
8805 curr_offset
= offset
;
8808 /* RR Cause RR Cause 10.5.2.31 M V 1 */
8809 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_CAUSE
, NULL
);
8811 EXTRANEOUS_DATA_CHECK(len
, curr_offset
- offset
);
8815 * 9.1.12g DTM Information
8818 dtap_rr_dtm_info(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
8820 guint32 curr_offset
;
8824 curr_offset
= offset
;
8827 /* Routeing Area Identification 10.5.5.15 M V 6 */
8828 ELEM_MAND_V(GSM_A_PDU_TYPE_GM
, DE_RAI
, NULL
);
8830 /* DTM Information Details 10.5.2.11a M LV 4-n */
8831 ELEM_MAND_LV(GSM_A_PDU_TYPE_RR
, DE_RR_DTM_INFO_DETAILS
, NULL
);
8833 EXTRANEOUS_DATA_CHECK(len
, curr_offset
- offset
);
8837 * 9.1.12h DTM Reject
8840 dtap_rr_dtm_rej(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
8842 guint32 curr_offset
;
8846 curr_offset
= offset
;
8849 /* Wait indication 10.5.2.43 M V 1 */
8850 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_WAIT_IND
, " - DTM Wait Indication");
8852 EXTRANEOUS_DATA_CHECK(len
, curr_offset
- offset
);
8856 * 9.1.12i DTM Request
8859 dtap_rr_dtm_req(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
8861 guint32 curr_offset
;
8865 curr_offset
= offset
;
8868 /* TLLI 10.5.2.41a M V 4 */
8869 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_TLLI
, NULL
);
8871 /* Channel Request Description 2 M LV 5-n */
8872 ELEM_MAND_LV(GSM_A_PDU_TYPE_RR
, DE_RR_CHNL_REQ_DESC2
, NULL
);
8874 EXTRANEOUS_DATA_CHECK(len
, curr_offset
- offset
);
8878 * 9.1.13 Frequency Redefinition
8881 dtap_rr_freq_redef(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
8883 guint32 curr_offset
;
8887 curr_offset
= offset
;
8890 /* Channel Description 10.5.2.5 M V 3 */
8891 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_CH_DSC
, NULL
);
8893 /* Mobile Allocation 10.5.2.21 M LV 1-9 */
8894 ELEM_MAND_LV(GSM_A_PDU_TYPE_RR
, DE_RR_MOB_ALL
, NULL
);
8896 /* Starting Time 10.5.2.38 M V 2 */
8897 ELEM_MAND_LV(GSM_A_PDU_TYPE_RR
, DE_RR_STARTING_TIME
, NULL
);
8899 /* Cell Channel Description 10.5.2.1b O TV 17 */
8900 ELEM_OPT_TV(0x62,GSM_A_PDU_TYPE_RR
, DE_RR_CELL_CH_DSC
, NULL
);
8902 /* Carrier Indication 10.5.2.69 O TV 1 */
8903 ELEM_OPT_TV_SHORT(0x90,GSM_A_PDU_TYPE_RR
, DE_RR_CARRIER_IND
,NULL
);
8905 /* Mobile Allocation 10.5.2.21 O TLV 1-9 */
8906 ELEM_OPT_TLV(0x11, GSM_A_PDU_TYPE_RR
, DE_RR_MOB_ALL
, " - Mobile Allocation C2");
8908 /* Channel Description 3 10.5.2.5c O TV 3 */
8909 ELEM_OPT_TV(0x12,GSM_A_PDU_TYPE_RR
, DE_RR_CH_DSC3
, " - Channel Description C2");
8911 EXTRANEOUS_DATA_CHECK(len
, curr_offset
- offset
);
8915 * 9.1.13b GPRS suspension request
8918 dtap_rr_gprs_sus_req(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
8920 guint32 curr_offset
;
8924 curr_offset
= offset
;
8927 /* TLLI 10.5.2.41a M V 4 */
8928 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_TLLI
, NULL
);
8930 /* Routeing Area Identification 10.5.5.15 M V 6 */
8931 ELEM_MAND_V(GSM_A_PDU_TYPE_GM
, DE_RAI
, NULL
);
8932 /* Suspension cause 10.5.2.47 M V 1 */
8933 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_SUS_CAU
, NULL
);
8935 /* 01 Service Support 10.5.2.57 O TV 2 */
8936 ELEM_OPT_TV_SHORT(0x01,GSM_A_PDU_TYPE_RR
, DE_RR_SERV_SUP
,NULL
);
8938 EXTRANEOUS_DATA_CHECK(len
, curr_offset
- offset
);
8943 * 9.1.14 Handover Access
8945 /* This message does NOT follow the basic format, and is only found on DCH during initial handover access */
8947 /* 3GPP TS 24.008 version 4.7.0 Release 4
8951 dtap_rr_ho_cmd(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
8953 guint32 curr_offset
;
8957 curr_offset
= offset
;
8960 /* Mandatory Elements
8961 * Cell description 10.5.2.2
8963 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_CELL_DSC
, NULL
);
8965 /* Description of the first channel,after time
8966 * Channel Description 2 10.5.2.5a
8968 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_CH_DSC2
, " - Description of the first channel, after time");
8970 /* Handover Reference 10.5.2.15 */
8971 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_HO_REF
, NULL
);
8973 /* Power Command and Access type 10.5.2.28a */
8974 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_POW_CMD_AND_ACC_TYPE
, NULL
);
8976 /* optional elements */
8978 /* Synchronization Indication 10.5.2.39 */
8979 ELEM_OPT_TV_SHORT(0xD0,GSM_A_PDU_TYPE_RR
, DE_RR_SYNC_IND
,NULL
);
8981 /* Frequency Short List 10.5.2.14 */
8982 ELEM_OPT_TV(0x02,GSM_A_PDU_TYPE_RR
, DE_RR_FREQ_SHORT_LIST
," - Frequency Short List, after time");
8984 /* Frequency List 10.5.2.13 */
8985 ELEM_OPT_TLV(0x05, GSM_A_PDU_TYPE_RR
, DE_RR_FREQ_LIST
, " - Frequency List, after time");
8987 /* Cell Channel Description 10.5.2.1b */
8988 ELEM_OPT_TV(0x62,GSM_A_PDU_TYPE_RR
, DE_RR_CELL_CH_DSC
, NULL
);
8990 /* Multislot Allocation 10.5.2.21b */
8991 ELEM_OPT_TLV(0x10,GSM_A_PDU_TYPE_RR
, DE_RR_MULT_ALL
, NULL
);
8993 /* Mode of the First Channel(Channel Set 1)) Channel Mode 10.5.2.6*/
8994 ELEM_OPT_TV(0x63,GSM_A_PDU_TYPE_RR
, DE_RR_CH_MODE
, " - Mode of the First Channel(Channel Set 1))");
8996 /* Mode of Channel Set 2 Channel Mode 10.5.2.6*/
8997 ELEM_OPT_TV(0x11,GSM_A_PDU_TYPE_RR
, DE_RR_CH_MODE
, " - Mode of Channel Set 2");
8999 /* Mode of Channel Set 3 Channel Mode 10.5.2.6*/
9000 ELEM_OPT_TV(0x13,GSM_A_PDU_TYPE_RR
, DE_RR_CH_MODE
, " - Mode of Channel Set 3");
9002 /* Mode of Channel Set 4 Channel Mode 10.5.2.6*/
9003 ELEM_OPT_TV(0x14,GSM_A_PDU_TYPE_RR
, DE_RR_CH_MODE
, " - Mode of Channel Set 4");
9005 /* Mode of Channel Set 5 Channel Mode 10.5.2.6*/
9006 ELEM_OPT_TV(0x15,GSM_A_PDU_TYPE_RR
, DE_RR_CH_MODE
, " - Mode of Channel Set 5");
9008 /* Mode of Channel Set 6 Channel Mode 10.5.2.6*/
9009 ELEM_OPT_TV(0x16,GSM_A_PDU_TYPE_RR
, DE_RR_CH_MODE
, " - Mode of Channel Set 6");
9011 /* Mode of Channel Set 7 Channel Mode 10.5.2.6*/
9012 ELEM_OPT_TV(0x17,GSM_A_PDU_TYPE_RR
, DE_RR_CH_MODE
, " - Mode of Channel Set 7");
9014 /* Mode of Channel Set 8 Channel Mode 10.5.2.6*/
9015 ELEM_OPT_TV(0x18,GSM_A_PDU_TYPE_RR
, DE_RR_CH_MODE
, " - Mode of Channel Set 8");
9017 /* Description of the Second Channel, after time, Channel Description 10.5.2.5 */
9018 ELEM_OPT_TV(0x64,GSM_A_PDU_TYPE_RR
, DE_RR_CH_DSC
, " - Description of the Second Channel, after time");
9020 /* Mode of the Second Channel, Channel Mode 2 10.5.2.7 */
9021 ELEM_OPT_TV(0x66,GSM_A_PDU_TYPE_RR
, DE_RR_CH_MODE2
, " - Mode of the Second Channel");
9023 /* Frequency Channel Sequence, after time, Frequency Channel Sequence 10.5.2.12 */
9024 ELEM_OPT_TV(0x69,GSM_A_PDU_TYPE_RR
, DE_RR_FREQ_CH_SEQ
, " - Frequency Channel Sequence, after time");
9026 /* Mobile Allocation, after time, Mobile Allocation 10.5.2.21 */
9027 ELEM_OPT_TLV(0x72,GSM_A_PDU_TYPE_RR
, DE_RR_MOB_ALL
, " - Mobile Allocation, after time");
9029 /* Starting Time 10.5.2.38 */
9030 ELEM_OPT_TV(0x7C,GSM_A_PDU_TYPE_RR
, DE_RR_STARTING_TIME
, NULL
);
9032 /* Real Time Difference, Time Difference 10.5.2.41 */
9033 ELEM_OPT_TV(0x7B,GSM_A_PDU_TYPE_RR
, DE_RR_TIME_DIFF
, " - Real Time Difference");
9035 /* Timing Advance, Timing Advance 10.5.2.40 */
9036 ELEM_OPT_TV(0x7D,GSM_A_PDU_TYPE_RR
, DE_RR_TIMING_ADV
, NULL
);
9038 /* Frequency Short List, before time, Frequency Short List 10.5.2.14 */
9039 ELEM_OPT_TV(0x12,GSM_A_PDU_TYPE_RR
, DE_RR_FREQ_SHORT_LIST
, " - Frequency Short List, before time");
9041 /* Frequency List, before time, Frequency List 10.5.2.13 */
9042 ELEM_OPT_TLV(0x19,GSM_A_PDU_TYPE_RR
, DE_RR_FREQ_LIST
, " - Frequency List, before time");
9044 /* Description of the First Channel, before time, Channel Description 2 10.5.2.5a*/
9045 ELEM_OPT_TV(0x1c,GSM_A_PDU_TYPE_RR
, DE_RR_CH_DSC2
, " - Description of the First Channel, before time");
9047 /* Description of the Second Channel, before time, Channel Description 10.5.2.5*/
9048 ELEM_OPT_TV(0x1d,GSM_A_PDU_TYPE_RR
, DE_RR_CH_DSC
, " - Description of the Second Channel, before time");
9050 /* Frequency channel sequence before time, Frequency channel sequence 10.5.2.12*/
9051 ELEM_OPT_TV(0x1e,GSM_A_PDU_TYPE_RR
, DE_RR_FREQ_CH_SEQ
, " - Frequency channel sequence before time");
9053 /* Mobile Allocation, before time, Mobile Allocation 10.5.2.21 */
9054 ELEM_OPT_TLV(0x21,GSM_A_PDU_TYPE_RR
, DE_RR_MOB_ALL
, " - Mobile Allocation, before time");
9056 /* Cipher Mode Setting, Cipher Mode Setting 10.5.2.9 */
9057 ELEM_OPT_TV_SHORT(0x90,GSM_A_PDU_TYPE_RR
, DE_RR_CIP_MODE_SET
, NULL
);
9059 /* VGCS target mode Indication, VGCS target mode Indication 10.5.2.42a */
9060 ELEM_OPT_TLV(0x01,GSM_A_PDU_TYPE_RR
, DE_RR_VGCS_TAR_MODE_IND
, NULL
);
9062 /* Multi-Rate configuration, MultiRate configuration 10.5.2.21a */
9063 ELEM_OPT_TLV(0x03,GSM_A_PDU_TYPE_RR
, DE_RR_MULTIRATE_CONF
, NULL
);
9065 /* Dynamic ARFCN Mapping, Dynamic ARFCN Mapping 10.5.2.11b */
9066 ELEM_OPT_TLV(0x76,GSM_A_PDU_TYPE_RR
, DE_RR_DYN_ARFCN_MAP
, NULL
);
9068 /* VGCS Ciphering Parameters, VGCS Ciphering Parameters 10.5.2.42b */
9069 ELEM_OPT_TLV(0x04,GSM_A_PDU_TYPE_RR
, DE_RR_VGCS_CIP_PAR
, NULL
);
9071 /* Dedicated Service Information, Dedicated Service Information 10.5.2.59 */
9072 ELEM_OPT_TV(0x51,GSM_A_PDU_TYPE_RR
, DE_RR_DED_SERV_INF
, NULL
);
9074 EXTRANEOUS_DATA_CHECK(len
, curr_offset
- offset
);
9079 * 9.1.15a Inter System To UTRAN Handover Command
9082 dtap_rr_inter_syst_to_utran_ho_cmd(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
9084 guint32 curr_offset
;
9088 curr_offset
= offset
;
9091 /* UTRAN Classmark 10.5.2.51 M LV 2-? */
9092 ELEM_MAND_LV(GSM_A_PDU_TYPE_RR
, DE_RR_HO_TO_UTRAN_CMD
, NULL
);
9094 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
9097 /* 3GPP TS 24.008 version 4.7.0 Release 4
9101 dtap_rr_ho_cpte(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
9103 guint32 curr_offset
;
9107 curr_offset
= offset
;
9110 /* RR Cause RR Cause 10.5.2.31 M V 1 */
9111 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_CAUSE
, NULL
);
9113 /* 77 Mobile Observed Time Difference Mobile Time Difference 10.5.2.21a */
9114 ELEM_OPT_TLV(0x77,GSM_A_PDU_TYPE_RR
, DE_RR_MOB_TIME_DIFF
, " - Mobile Observed Time Difference");
9116 EXTRANEOUS_DATA_CHECK(len
, curr_offset
- offset
);
9121 * 9.1.17 Handover failure
9124 dtap_rr_ho_fail(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
9126 guint32 curr_offset
;
9130 curr_offset
= offset
;
9133 /* RR Cause RR Cause 10.5.2.31 M V 1 */
9134 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_CAUSE
, NULL
);
9136 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
9141 * 9.1.18 Immediate assignment See 3GPP TS 44.018
9144 dtap_rr_imm_ass(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
9146 guint32 curr_offset
;
9151 curr_offset
= offset
;
9154 oct
= tvb_get_guint8(tvb
, curr_offset
);
9156 /* NOTE: The order of the mandatory information elements should be chosen so that
9157 * information elements with 1/2 octet of content (type 1) go together in succession.
9158 * The first type 1 information element occupies bits 1 to 4 of octet N,
9159 * the second bits 5 to 8 of octet N, the third bits 1 to 4 of octet N+1 etc.
9160 * If the number of type 1 information elements is odd then bits 5 to 8 of the last octet
9161 * occupied by these information elements should be treated as spare bits,
9162 * i.e. coded with a "0" in each.
9165 /* Page Mode 10.5.2.26 M V 1/2 */
9166 /* Dedicated mode or TBF 10.5.2.25b M V 1/2 */
9167 ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_RR
, DE_RR_PAGE_MODE
,
9168 GSM_A_PDU_TYPE_RR
, DE_RR_DED_MOD_OR_TBF
);
9170 if((oct
&0x10) == 0){
9171 /* Channel Description 10.5.2.5 C V 3m */
9172 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_CH_DSC
, NULL
);
9174 /* Packet Channel Description 10.5.2.25a C V 3
9175 * If the Dedicated mode or TBF IE indicates that the message assigns a Temporary Block Flow (TBF),
9176 * the mobile station shall consider this information element present in the message.
9177 * If the Dedicated mode or TBF IE indicates that this message is the first of two in a two-message
9178 * assignment of an uplink or downlink TBF, the mobile station shall ignore the contents
9179 * of this information element and regard it as an unnecessary IE.
9181 if((oct
&0x04) == 0){
9182 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_PACKET_CH_DESC
, NULL
);
9185 /* Request Reference 10.5.2.30 M V 3 */
9186 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_REQ_REF
, NULL
);
9188 /* Timing Advance 10.5.2.40 M V 1 */
9189 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_TIMING_ADV
, NULL
);
9190 /* Mobile Allocation 10.5.2.21 M LV 1-9 */
9191 ELEM_MAND_LV(GSM_A_PDU_TYPE_RR
, DE_RR_MOB_ALL
, NULL
);
9192 /* 7C Starting Time 10.5.2.38 O TV 3 */
9193 ELEM_OPT_TV(0x7C,GSM_A_PDU_TYPE_RR
, DE_RR_STARTING_TIME
, NULL
);
9194 /* IA Rest Octets 10.5.2.16 M V 0-11 */
9195 if(tvb_length_remaining(tvb
,curr_offset
) > 0)
9196 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_IA_REST_OCT
, NULL
);
9201 * 9.1.19 Immediate assignment extended
9204 dtap_rr_imm_ass_ext(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
9206 guint32 curr_offset
;
9210 curr_offset
= offset
;
9213 /* Page Mode 10.5.2.26 M V 1/2 */
9214 /* Spare Half Octet 10.5.1.8 M V 1/2 */
9215 ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_RR
, DE_RR_PAGE_MODE
,
9216 GSM_A_PDU_TYPE_COMMON
, DE_SPARE_NIBBLE
);
9217 /* Channel Description 1 Channel Description 10.5.2.5 M V 3 */
9218 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_CH_DSC
, " - Channel Description 1");
9219 /* Request Reference 1 Request Reference 10.5.2.30 M V 3 */
9220 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_REQ_REF
, " - Request Reference 1");
9221 /* Timing Advance 1 Timing Advance 10.5.2.40 M V 1 */
9222 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_TIMING_ADV
, " - Timing Advance 1");
9223 /* Channel Description 2 Channel Description 10.5.2.5 M V 3 */
9224 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_CH_DSC
, " - Channel Description 2");
9225 /* Request Reference 2 Request Reference 10.5.2.30 M V 3 */
9226 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_REQ_REF
, " - Request Reference 2");
9227 /* Timing Advance 2 Timing Advance 10.5.2.40 M V 1 */
9228 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_TIMING_ADV
, " - Timing Advance 2");
9229 /* Mobile Allocation 10.5.2.21 M LV 1-9 */
9230 ELEM_MAND_LV(GSM_A_PDU_TYPE_RR
, DE_RR_MOB_ALL
, NULL
);
9231 /* 7C Starting Time 10.5.2.38 O TV 3 */
9232 ELEM_OPT_TV(0x7C,GSM_A_PDU_TYPE_RR
, DE_RR_STARTING_TIME
, NULL
);
9233 /* IAX Rest Octets 10.5.2.18 M V 0-4 */
9234 if(tvb_length_remaining(tvb
,curr_offset
) > 0)
9235 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_IAX_REST_OCT
, NULL
);
9240 * 9.1.20 Immediate assignment reject
9243 dtap_rr_imm_ass_rej(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
9245 guint32 curr_offset
;
9249 curr_offset
= offset
;
9252 /* Page Mode 10.5.2.26 M V 1/2 */
9253 /* Spare Half Octet 10.5.1.8 M V 1/2 */
9254 ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_RR
, DE_RR_PAGE_MODE
,
9255 GSM_A_PDU_TYPE_COMMON
, DE_SPARE_NIBBLE
);
9256 /* Request Reference 1 Request Reference 10.5.2.30 M V 3 */
9257 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_REQ_REF
, " - Request Reference 1");
9258 /* Wait Indication 1 Wait Indication 10.5.2.43 M V 1 */
9259 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_WAIT_IND
, " - Wait Indication 1");
9260 /* Request Reference 2 Request Reference 10.5.2.30 M V 3 */
9261 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_REQ_REF
, " - Request Reference 2");
9262 /* Wait Indication 2 Wait Indication 10.5.2.43 M V 1 */
9263 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_WAIT_IND
, " - Wait Indication 2");
9264 /* Request Reference 3 Request Reference 10.5.2.30 M V 3 */
9265 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_REQ_REF
, " - Request Reference 3");
9266 /* Wait Indication 3 Wait Indication 10.5.2.43 M V 1 */
9267 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_WAIT_IND
, " - Wait Indication 3");
9268 /* Request Reference 4 Request Reference 10.5.2.30 M V 3 */
9269 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_REQ_REF
, " - Request Reference 4");
9270 /* Wait Indication 4 Wait Indication 10.5.2.43 M V 1 */
9271 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_WAIT_IND
, " - Wait Indication 4");
9272 /* IAR Rest Octets 10.5.2.19 M V 3 */
9273 if(tvb_length_remaining(tvb
,curr_offset
) > 0)
9274 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_IAR_REST_OCT
, NULL
);
9279 * 9.1.21 Measurement report
9282 dtap_rr_meas_rep(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
9284 guint32 curr_offset
;
9288 curr_offset
= offset
;
9291 /* Measurement Results 10.5.2.20 M V 16 */
9292 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_MEAS_RES
, NULL
);
9296 * 9.1.21f Packet Assignment
9299 dtap_rr_pkt_assign(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
9301 guint32 curr_offset
;
9305 curr_offset
= offset
;
9308 /* GPRS broadcast information 10.5.2.14d M LV 7-n */
9309 ELEM_MAND_LV(GSM_A_PDU_TYPE_RR
, DE_RR_GPRS_BROADCAST_INFORMATION
, NULL
);
9311 /* 0x22 RR Packet Uplink Assignment 10.5.2.25c O TLV 3-n */
9312 ELEM_OPT_TLV(0x22, GSM_A_PDU_TYPE_RR
, DE_RR_PKT_UL_ASS
, NULL
);
9314 /* 0x23 RR Packet Downlink Assignment 10.5.2.25d O TLV 3-n */
9315 ELEM_OPT_TLV(0x23, GSM_A_PDU_TYPE_RR
, DE_RR_PKT_DL_ASS
, NULL
);
9317 /* 0x12 Frequency List 10.5.2.13 C TLV 4-132 */
9318 ELEM_OPT_TLV(0x12, GSM_A_PDU_TYPE_RR
, DE_RR_FREQ_LIST
, " - Frequency List C2");
9320 /* 0x13 Mobile Allocation 10.5.2.21 C TLV 3-10 */
9321 ELEM_OPT_TLV(0x13, GSM_A_PDU_TYPE_RR
, DE_RR_MOB_ALL
, " - Mobile Allocation C2");
9323 /* 0x14 Channel Description 3 10.5.2.5c O TV 3 */
9324 ELEM_OPT_TV(0x14, GSM_A_PDU_TYPE_RR
, DE_RR_CH_DSC3
, " - Channel Description C2");
9326 /* 0x24 RR Packet Downlink Assignment Type 2 10.5.2.25e C TLV 3-n */
9327 ELEM_OPT_TLV(0x24, GSM_A_PDU_TYPE_RR
, DE_RR_PKT_DL_ASS_TYPE2
, NULL
);
9329 EXTRANEOUS_DATA_CHECK(len
, curr_offset
- offset
);
9333 * 9.1.21g Packet Notification
9336 dtap_rr_pkt_notif(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
9338 guint32 curr_offset
;
9342 curr_offset
= offset
;
9345 /* 0x10 P-TMSI 10.5.2.42 C TV 5 */
9346 ELEM_OPT_TV(0x10, GSM_A_PDU_TYPE_RR
, DE_RR_TMSI_PTMSI
, " - Packet TMSI");
9348 /* 0x11 Mobile Identity 10.5.1.4 C TLV 3-11 */
9349 ELEM_OPT_TLV(0x11, GSM_A_PDU_TYPE_COMMON
, DE_MID
, NULL
);
9351 EXTRANEOUS_DATA_CHECK(len
, curr_offset
- offset
);
9355 * 9.1.22 Paging Request Type 1
9358 dtap_rr_paging_req_type_1(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
9360 guint32 curr_offset
;
9364 curr_offset
= offset
;
9367 /* RR Page Mode 10.5.2.26 M V 1/2 */
9368 /* RR Channel Needed 10.5.2.8 M V 1/2 */
9369 ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_RR
, DE_RR_PAGE_MODE
,
9370 GSM_A_PDU_TYPE_RR
, DE_RR_CHNL_NEEDED
);
9372 /* RR Mobile Identity 10.5.1.4 M LV 2-9 */
9373 ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON
, DE_MID
, " - Mobile Identity 1");
9375 /* RR Mobile Identity 10.5.1.4 O TLV 3-10 */
9376 ELEM_OPT_TLV(0x17, GSM_A_PDU_TYPE_COMMON
, DE_MID
, " - Mobile Identity 2");
9378 /* RR P1 Rest Octets 10.5.2.23 M V 0-17 */
9379 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_P1_REST_OCT
, NULL
);
9384 * 9.1.23 Paging Request Type 2
9387 dtap_rr_paging_req_type_2(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
9389 guint32 curr_offset
;
9393 curr_offset
= offset
;
9396 /* RR Page Mode 10.5.2.26 M V 1/2 */
9397 /* RR Channel Needed 10.5.2.8 M V 1/2 */
9398 ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_RR
, DE_RR_PAGE_MODE
,
9399 GSM_A_PDU_TYPE_RR
, DE_RR_CHNL_NEEDED
);
9401 /* RR TMSI/P-TMSI 10.5.2.42 M V 4 */
9402 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_TMSI_PTMSI
, " - Mobile Identity 1");
9404 /* RR TMSI/P-TMSI 10.5.2.42 M V 4 */
9405 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_TMSI_PTMSI
, " - Mobile Identity 2");
9407 /* RR Mobile Identity 10.5.1.4 O TLV 3-10 */
9408 ELEM_OPT_TLV(0x17, GSM_A_PDU_TYPE_COMMON
, DE_MID
, " - Mobile Identity 3");
9410 /* RR P2 Rest Octets 10.5.2.24 M V 1-11 */
9411 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_P2_REST_OCT
, NULL
);
9416 * 9.1.24 Paging Request Type 3
9419 dtap_rr_paging_req_type_3(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
9421 guint32 curr_offset
;
9425 curr_offset
= offset
;
9428 /* RR Page Mode 10.5.2.26 M V 1/2 */
9429 /* RR Channel Needed 10.5.2.8 M V 1/2 */
9430 ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_RR
, DE_RR_PAGE_MODE
,
9431 GSM_A_PDU_TYPE_RR
, DE_RR_CHNL_NEEDED
);
9433 /* RR TMSI/P-TMSI 10.5.2.42 M V 4 */
9434 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_TMSI_PTMSI
, " - Mobile Identity 1");
9436 /* RR TMSI/P-TMSI 10.5.2.42 M V 4 */
9437 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_TMSI_PTMSI
, " - Mobile Identity 2");
9439 /* RR TMSI/P-TMSI 10.5.2.42 M V 4 */
9440 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_TMSI_PTMSI
, " - Mobile Identity 3");
9442 /* RR TMSI/P-TMSI 10.5.2.42 M V 4 */
9443 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_TMSI_PTMSI
, " - Mobile Identity 4");
9445 /* RR P3 Rest Octets 10.5.2.25 M V 3 */
9446 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_P3_REST_OCT
, NULL
);
9451 * [4] 9.1.25 Paging response
9454 dtap_rr_paging_resp(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
9456 guint32 curr_offset
;
9460 proto_tree
*subtree
;
9463 curr_offset
= offset
;
9467 * special dissection for Cipher Key Sequence Number
9469 oct
= tvb_get_guint8(tvb
, curr_offset
);
9471 other_decode_bitfield_value(a_bigbuf
, oct
, 0xf0, 8);
9472 proto_tree_add_text(tree
,
9473 tvb
, curr_offset
, 1,
9478 proto_tree_add_text(tree
,
9479 tvb
, curr_offset
, 1, "%s",
9480 val_to_str_ext_const(DE_CIPH_KEY_SEQ_NUM
, &gsm_common_elem_strings_ext
, ""));
9482 subtree
= proto_item_add_subtree(item
, ett_gsm_common_elem
[DE_CIPH_KEY_SEQ_NUM
]);
9484 other_decode_bitfield_value(a_bigbuf
, oct
, 0x08, 8);
9485 proto_tree_add_text(subtree
,
9486 tvb
, curr_offset
, 1,
9490 other_decode_bitfield_value(a_bigbuf
, oct
, 0x07, 8);
9495 proto_tree_add_text(subtree
,
9496 tvb
, curr_offset
, 1,
9497 "%s : Ciphering Key Sequence Number: No key is available",
9502 proto_tree_add_text(subtree
,
9503 tvb
, curr_offset
, 1,
9504 "%s : Ciphering Key Sequence Number: %u",
9513 if ((signed)curr_len
<= 0) return;
9515 ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON
, DE_MS_CM_2
, NULL
);
9517 ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON
, DE_MID
, NULL
);
9519 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
9523 * [4] 9.1.26 Partial Release
9526 dtap_rr_partial_rel(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
9528 guint32 curr_offset
;
9532 curr_offset
= offset
;
9535 /* Channel Description 10.5.2.5 M V 3 */
9536 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_CH_DSC
, NULL
);
9538 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
9542 * [4] 9.1.27 Partial Release Complete
9547 * [4] 9.1.28 Physical Information
9550 dtap_rr_phy_info(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
9552 guint32 curr_offset
;
9556 curr_offset
= offset
;
9559 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_TIMING_ADV
, NULL
);
9561 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
9568 dtap_rr_rr_status(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
9570 guint32 curr_offset
;
9574 curr_offset
= offset
;
9577 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_CAUSE
, NULL
);
9579 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
9586 dtap_rr_sys_info_1(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
9588 guint32 curr_offset
;
9592 curr_offset
= offset
;
9595 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_CELL_CH_DSC
, NULL
);
9597 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_RACH_CTRL_PARAM
, NULL
);
9599 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_SI1_REST_OCT
, NULL
);
9606 dtap_rr_sys_info_2(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
9608 guint32 curr_offset
;
9612 curr_offset
= offset
;
9615 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_NEIGH_CELL_DESC
, " - BCCH Frequency List");
9617 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_NCC_PERM
, NULL
);
9619 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_RACH_CTRL_PARAM
, NULL
);
9626 dtap_rr_sys_info_2bis(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
9628 guint32 curr_offset
;
9632 curr_offset
= offset
;
9635 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_NEIGH_CELL_DESC
, " - Extended BCCH Frequency List");
9637 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_RACH_CTRL_PARAM
, NULL
);
9644 dtap_rr_sys_info_2ter(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
9646 guint32 curr_offset
;
9650 curr_offset
= offset
;
9653 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_NEIGH_CELL_DESC2
, " - Extended BCCH Frequency List");
9655 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_SI2TER_REST_OCT
, NULL
);
9662 dtap_rr_sys_info_2quater(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
9664 guint32 curr_offset
;
9668 curr_offset
= offset
;
9671 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_SI2QUATER_REST_OCT
, NULL
);
9678 dtap_rr_sys_info_3(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
9680 guint32 curr_offset
;
9684 curr_offset
= offset
;
9687 ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON
, DE_CELL_ID
, NULL
);
9689 ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON
, DE_LAI
, NULL
);
9691 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_CTRL_CH_DESC
, NULL
);
9693 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_CELL_OPT_BCCH
, NULL
);
9695 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_CELL_SEL_PARAM
, NULL
);
9697 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_RACH_CTRL_PARAM
, NULL
);
9699 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_SI3_REST_OCT
, NULL
);
9706 dtap_rr_sys_info_4(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
9708 guint32 curr_offset
;
9712 curr_offset
= offset
;
9715 ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON
, DE_LAI
, NULL
);
9717 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_CELL_SEL_PARAM
, NULL
);
9719 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_RACH_CTRL_PARAM
, NULL
);
9721 ELEM_OPT_TV(0x64, GSM_A_PDU_TYPE_RR
, DE_RR_CH_DSC
, " - CBCH");
9723 ELEM_OPT_TLV(0x72, GSM_A_PDU_TYPE_RR
, DE_RR_MOB_ALL
, " - CBCH");
9725 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_SI4_REST_OCT
, NULL
);
9732 dtap_rr_sys_info_5(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
9734 guint32 curr_offset
;
9738 curr_offset
= offset
;
9741 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_NEIGH_CELL_DESC
, " - BCCH Frequency List");
9748 dtap_rr_sys_info_5bis(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
9750 guint32 curr_offset
;
9754 curr_offset
= offset
;
9757 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_NEIGH_CELL_DESC
, " - Extended BCCH Frequency List");
9764 dtap_rr_sys_info_5ter(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
9766 guint32 curr_offset
;
9770 curr_offset
= offset
;
9773 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_NEIGH_CELL_DESC2
, " - Extended BCCH Frequency List");
9780 dtap_rr_sys_info_6(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
9782 guint32 curr_offset
;
9786 curr_offset
= offset
;
9789 ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON
, DE_CELL_ID
, NULL
);
9791 ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON
, DE_LAI
, NULL
);
9793 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_CELL_OPT_SACCH
, NULL
);
9795 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_NCC_PERM
, NULL
);
9797 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_SI6_REST_OCT
, NULL
);
9804 dtap_rr_sys_info_13(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
9806 guint32 curr_offset
;
9810 curr_offset
= offset
;
9813 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_SI13_REST_OCT
, NULL
);
9817 * [4] 9.1.51 Extended Measurement Order
9820 dtap_rr_ext_meas_order(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
9822 guint32 curr_offset
;
9826 curr_offset
= offset
;
9829 /* Extended Measurement Frequency List 10.5.2.46 M V 16 */
9830 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_EXT_MEAS_FREQ_LIST
, NULL
);
9834 * [4] 9.1.52 Extended Measurement Report
9837 dtap_rr_ext_meas_report(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
9839 guint32 curr_offset
;
9843 curr_offset
= offset
;
9846 /* Extended Measurement Result 10.5.2.45 M V 16 */
9847 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_EXT_MEAS_RESULT
, NULL
);
9851 * 9.1.53 Application Information
9854 dtap_rr_app_inf(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
9856 guint32 curr_offset
;
9860 curr_offset
= offset
;
9863 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_APDU_ID
, NULL
);
9864 ELEM_MAND_V(GSM_A_PDU_TYPE_RR
, DE_RR_APDU_FLAGS
, NULL
);
9865 ELEM_MAND_LV(GSM_A_PDU_TYPE_RR
, DE_RR_APDU_DATA
, NULL
);
9869 * [4] 9.1.54 Measurement Information
9871 static const value_string gsm_a_rr_3g_wait_vals
[] = {
9872 { 0, "1 instance that contain 3G Neighbour Cell Description shall be received"},
9873 { 1, "2 instances that contain 3G Neighbour Cell Description shall be received"},
9874 { 2, "3 instances that contain 3G Neighbour Cell Description shall be received"},
9875 { 3, "4 instances that contain 3G Neighbour Cell Description shall be received"},
9876 { 4, "5 instances that contain 3G Neighbour Cell Description shall be received"},
9877 { 5, "6 instances that contain 3G Neighbour Cell Description shall be received"},
9878 { 6, "7 instances that contain 3G Neighbour Cell Description shall be received"},
9879 { 7, "8 instances that contain 3G Neighbour Cell Description shall be received"},
9885 sacch_rr_meas_info(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
)
9887 proto_tree
*subtree
= NULL
, *subtree2
= NULL
;
9888 proto_item
*item
, *item2
;
9889 guint32 curr_offset
;
9890 gint bit_offset
, bit_offset_sav
, bit_offset_sav2
;
9892 guint8 tvb_len
= tvb_length(tvb
);
9893 guint16 bit_len
= tvb_len
<< 3;
9895 curr_offset
= offset
;
9896 bit_offset
= curr_offset
<< 3;
9898 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_ba_ind
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
9900 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_3g_ba_ind
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
9902 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_mp_change_mark
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
9904 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_mi_index
, tvb
, bit_offset
, 4, ENC_BIG_ENDIAN
);
9906 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_mi_count
, tvb
, bit_offset
, 4, ENC_BIG_ENDIAN
);
9908 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_pwrc
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
9910 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_gsm_report_type
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
9912 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_reporting_rate
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
9914 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_invalid_bsic_reporting
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
9916 if (gsm_rr_csn_flag(tvb
, tree
, bit_offset
++, "Real Time Difference Description", "Present", "Not Present"))
9917 { /* Real Time Difference Description */
9918 bit_offset
+= de_rr_rtd_desc(tvb
, tree
, bit_offset
, DE_RR_REST_OCTETS_RTD_DESC
);
9920 if (gsm_rr_csn_flag(tvb
, tree
, bit_offset
++, "BSIC Description", "Present", "Not Present"))
9921 { /* BSIC Description */
9922 bit_offset
+= de_rr_bsic_desc(tvb
, tree
, bit_offset
, DE_RR_REST_OCTETS_BSIC_DESC
);
9924 if (gsm_rr_csn_flag(tvb
, tree
, bit_offset
++, "Report Priority Description", "Present", "Not Present"))
9925 { /* Report Priority Description */
9926 bit_offset
+= de_rr_report_priority_desc(tvb
, tree
, bit_offset
, DE_RR_REST_OCTETS_REPORT_PRIO_DESC
);
9928 if (gsm_rr_csn_flag(tvb
, tree
, bit_offset
++, "Measurement Parameters Description", "Present", "Not Present"))
9929 { /* Measurement Parameters Description */
9930 bit_offset
+= de_rr_meas_param_desc(tvb
, tree
, bit_offset
, DE_RR_REST_OCTETS_MEAS_PARAM_DESC
);
9932 if (gsm_rr_csn_flag(tvb
, tree
, bit_offset
++, "future extensions of the 2G parameters", "Present", "Not Present"))
9933 { /* used for future extensions of the 2G parameters */
9934 value
= tvb_get_bits8(tvb
,bit_offset
,8);
9935 bit_offset
+= 8 + value
+ 1;
9937 if (gsm_rr_csn_flag(tvb
, tree
, bit_offset
++, "3G Neighbour Cell Description", "Present", "Not Present"))
9938 { /* 3G Neighbour Cell Description */
9939 bit_offset_sav
= bit_offset
;
9940 item
= proto_tree_add_text(tree
, tvb
, bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_3G_NEIGH_CELL_DESC
].strptr
);
9941 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_3G_NEIGH_CELL_DESC
]);
9942 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "3G Wait", "Present", "Not Present"))
9944 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_3g_wait
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
9947 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "Index Start 3G", "Present", "Not Present"))
9949 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_index_start_3g
, tvb
, bit_offset
, 7, ENC_BIG_ENDIAN
);
9952 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "Absolute Index Start EMR", "Present", "Not Present"))
9954 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_absolute_index_start_emr
, tvb
, bit_offset
, 7, ENC_BIG_ENDIAN
);
9957 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "UTRAN FDD Description", "Present", "Not Present"))
9958 { /* UTRAN FDD Description */
9959 bit_offset
+= de_rr_si2quater_meas_info_utran_fdd_desc(tvb
, subtree
, bit_offset
);
9961 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "UTRAN TDD Description", "Present", "Not Present"))
9962 { /* UTRAN TDD Description */
9963 bit_offset
+= de_rr_si2quater_meas_info_utran_tdd_desc(tvb
, subtree
, bit_offset
);
9965 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "CDMA2000 Description", "Present", "Not Present"))
9966 { /* CDMA2000 Description */
9967 bit_offset_sav2
= bit_offset
;
9968 item2
= proto_tree_add_text(subtree
, tvb
, bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_CDMA2000_DESC
].strptr
);
9969 subtree2
= proto_item_add_subtree(item2
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_CDMA2000_DESC
]);
9970 bit_offset
+= 16; /* cdma2000 frequency band + cdma2000 frequency */
9971 idx
= tvb_get_bits8(tvb
,bit_offset
,5); /* number_cdma2000_cells */
9975 bit_offset
+= 9; /* Pilot PN offset */
9976 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "additional information for 3X Auxiliary Pilot", "Present", "Not Present"))
9978 value
= tvb_get_bits8(tvb
,bit_offset
,3);
9982 bit_offset
+= 5; /* TD_MODE + TD_POWER_LEVEL */
9985 bit_offset
+= 2; /* QOF */
9986 bit_offset
+= tvb_get_bits8(tvb
,bit_offset
,3) + 3 + 6; /* WALSH_LEN_A + bit(val(WALSH_LEN_A)+6) */
9989 bit_offset
+= 2; /* QOF */
9990 bit_offset
+= tvb_get_bits8(tvb
,bit_offset
,3) + 3 + 6; /* WALSH_LEN_B + bit(val(WALSH_LEN_B)+6) */
9991 bit_offset
+= 4; /* AUX_TD_POWER_LEVEL + TD_MODE */
9994 bit_offset
+= 8; /* SR3_PRIM_PILOT + SR3_PILOT_POWER1 + SR3_PILOT_POWER2 */
9997 bit_offset
+= 10; /* SR3_PRIM_PILOT + SR3_PILOT_POWER1 + SR3_PILOT_POWER2 + QOF */
9998 bit_offset
+= tvb_get_bits8(tvb
,bit_offset
,3) + 3 + 6; /* WALSH_LEN_C + bit(val(WALSH_LEN_C)+6) */
9999 if (tvb_get_bits8(tvb
,bit_offset
,1))
10001 bit_offset
+= 3; /* 1 + QOF1 */
10002 bit_offset
+= tvb_get_bits8(tvb
,bit_offset
,3) + 3 + 6; /* WALSH_LENGTH1 + bit(val(WALSH_LENGTH1)+6) */
10006 if (tvb_get_bits8(tvb
,bit_offset
,1))
10008 bit_offset
+= 3; /* 1 + QOF2 */
10009 bit_offset
+= tvb_get_bits8(tvb
,bit_offset
,3) + 3 + 6; /* WALSH_LENGTH2 + bit(val(WALSH_LENGTH2)+6) */
10015 /* decoding sequence is unknown ! */
10021 proto_tree_add_text(subtree2
,tvb
, bit_offset_sav2
>>3, ((bit_offset
-bit_offset_sav2
)>>3)+1,"Data(Not decoded)");
10022 proto_item_set_len(item2
, (bit_offset
>>3) - (bit_offset_sav
>>3)+1);
10024 proto_item_set_len(item
, (bit_offset
>>3) - (bit_offset_sav
>>3)+1);
10026 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "3G Measurement Parameters Description", "Present", "Not Present"))
10027 { /* 3G Measurement Parameters Description */
10028 guint8 reporting_quant
= 0;
10029 bit_offset_sav
= bit_offset
;
10030 item
= proto_tree_add_text(tree
, tvb
, bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_3G_MEAS_PARAM_DESC
].strptr
);
10031 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_3G_MEAS_PARAM_DESC
]);
10032 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_qsearch_c
, tvb
, bit_offset
, 4, ENC_BIG_ENDIAN
);
10034 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_3g_search_prio
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
10036 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_fdd_rep_quant
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
10037 reporting_quant
= gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "3G Reporting Quantity", "Ec/No", "RSCP");
10038 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "FDD Multirat Reporting", "Present", "Not Present"))
10040 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_fdd_multirat_reporting
, tvb
, bit_offset
, 2, ENC_BIG_ENDIAN
);
10043 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "FDD Reporting Offset", "Present", "Not Present"))
10045 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_fdd_reporting_offset
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
10047 if (reporting_quant
== 0)
10049 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_fdd_reporting_threshold_rscp
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
10053 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_fdd_reporting_threshold_ecn0
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
10057 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "TDD Multirat Reporting", "Present", "Not Present"))
10059 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_tdd_multirat_reporting
, tvb
, bit_offset
, 2, ENC_BIG_ENDIAN
);
10062 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "TDD Reporting Offset", "Present", "Not Present"))
10064 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_tdd_reporting_offset
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
10066 if (reporting_quant
== 0)
10068 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_tdd_reporting_threshold_rscp
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
10072 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_tdd_reporting_threshold_ecn0
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
10076 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "CDMA2000 Multirat Reporting", "Present", "Not Present"))
10077 bit_offset
+= 2; /* CDMA2000 Multirat Reporting */
10078 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "CDMA2000 Reporting Threshold", "Present", "Not Present"))
10079 bit_offset
+= 6; /* CDMA2000 Reporting Offset + CDMA2000 Reporting Threshold */
10080 proto_item_set_len(item
, (bit_offset
>>3) - (bit_offset_sav
>>3)+1);
10083 /* Null breakpoint */
10084 if (bit_len
- bit_offset
> 0)
10086 /* There is still room left in the Rest Octets IE */
10087 if (gsm_rr_csn_HL_flag(tvb
, tree
, 0, bit_offset
++, "Additions in Rel-5", "Present", "Not present"))
10088 { /* Additions in Rel-5 */
10089 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "3G Additional Measurement Parameters Description 2", "Present", "Not Present"))
10090 { /* 3G Additional Measurement Parameters Description 2 */
10091 bit_offset
+= de_rr_3g_add_meas_param_desc2(tvb
, tree
, bit_offset
);
10094 /* Null breakpoint */
10095 if (bit_len
- bit_offset
> 0)
10097 /* There is still room left in the Rest Octets IE */
10098 if (gsm_rr_csn_HL_flag(tvb
, tree
, 0, bit_offset
++,"Additions in Rel-7", "Present", "Not present"))
10099 { /* Additions in Rel-7 */
10100 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "700 Reporting", "Present", "Not Present"))
10102 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_700_reporting_offset
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
10104 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_700_reporting_threshold
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
10107 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "810 Reporting", "Present", "Not Present"))
10109 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_810_reporting_offset
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
10111 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_810_reporting_threshold
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
10115 /* Null breakpoint */
10116 if (bit_len
- bit_offset
> 0)
10118 /* There is still room left in the Rest Octets IE */
10119 /* Additions in Rel-8 */
10120 if (gsm_rr_csn_HL_flag(tvb
, tree
, 0, bit_offset
++, "Additions in Rel-8", "Present", "Not present"))
10121 { /* Additions in Rel-8 */
10122 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "3G Supplementary Parameters Description", "Present", "Not Present"))
10124 bit_offset
+= de_rr_3g_supplementary_param_desc_mi(tvb
, tree
, bit_offset
);
10126 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "E-UTRAN Parameters Description", "Present", "Not Present"))
10128 bit_offset
+= de_rr_eutran_param_desc_mi(tvb
, tree
, bit_offset
);
10130 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "E-UTRAN CSG Description", "Present", "Not Present"))
10132 bit_offset
+= de_rr_eutran_csg_desc_mi(tvb
, tree
, bit_offset
);
10140 gsm_rr_csn_padding_bits(tree
, tvb
, bit_offset
, tvb_len
);
10144 sacch_rr_eutran_meas_report(tvbuff_t
*tvb
, proto_tree
*tree
, guint32 bit_offset
, guint len_in_bit _U_
)
10146 proto_tree
*subtree
;
10148 gint curr_bit_offset
;
10151 curr_bit_offset
= bit_offset
;
10153 item
= proto_tree_add_text(tree
, tvb
, curr_bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_EUTRAN_MEASUREMENT_REPORT
].strptr
);
10154 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_EUTRAN_MEASUREMENT_REPORT
]);
10156 n_eutran
= tvb_get_bits8(tvb
,curr_bit_offset
,2);
10158 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_eutran_mr_n_eutran
, tvb
, curr_bit_offset
, 2, ENC_BIG_ENDIAN
);
10159 curr_bit_offset
+= 2;
10161 while ( (n_eutran
> 0) && (curr_bit_offset
- bit_offset
< len_in_bit
) )
10163 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_eutran_mr_freq_idx
, tvb
, curr_bit_offset
, 3, ENC_BIG_ENDIAN
);
10164 curr_bit_offset
+= 3;
10165 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_eutran_mr_cell_id
, tvb
, curr_bit_offset
, 9, ENC_BIG_ENDIAN
);
10166 curr_bit_offset
+= 9;
10167 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_eutran_mr_rpt_quantity
, tvb
, curr_bit_offset
, 6, ENC_BIG_ENDIAN
);
10168 curr_bit_offset
+= 6;
10172 return curr_bit_offset
- bit_offset
;
10176 * [4] 9.1.55 Enhanced Measurement Information
10178 static const true_false_string gsm_a_rr_bsic_seen_value
= {
10179 "One Cell or more with invalid BSIC and allowed NCC part of BSIC is seen",
10180 "No cell with invalid BSIC and allowed NCC part of BSIC is seen"
10183 static const true_false_string gsm_a_rr_scale_value
= {
10188 static const value_string gsm_a_rr_mean_bep_gmsk_vals
[] = {
10189 { 0, "log10(BEP) > -0.60"},
10190 { 1, "-0.70 < log10(BEP) < -0.60"},
10191 { 2, "-0.80 < log10(BEP) < -0.70"},
10192 { 3, "-0.90 < log10(BEP) < -0.80"},
10193 { 4, "-1.00 < log10(BEP) < -0.90"},
10194 { 5, "-1.10 < log10(BEP) < -1.00"},
10195 { 6, "-1.20 < log10(BEP) < -1.10"},
10196 { 7, "-1.30 < log10(BEP) < -1.20"},
10197 { 8, "-1.40 < log10(BEP) < -1.30"},
10198 { 9, "-1.50 < log10(BEP) < -1.40"},
10199 { 10, "-1.60 < log10(BEP) < -1.50"},
10200 { 11, "-1.70 < log10(BEP) < -1.60"},
10201 { 12, "-1.80 < log10(BEP) < -1.70"},
10202 { 13, "-1.90 < log10(BEP) < -1.80"},
10203 { 14, "-2.00 < log10(BEP) < -1.90"},
10204 { 15, "-2.10 < log10(BEP) < -2.00"},
10205 { 16, "-2.20 < log10(BEP) < -2.10"},
10206 { 17, "-2.30 < log10(BEP) < -2.20"},
10207 { 18, "-2.40 < log10(BEP) < -2.30"},
10208 { 19, "-2.50 < log10(BEP) < -2.40"},
10209 { 20, "-2.60 < log10(BEP) < -2.50"},
10210 { 21, "-2.70 < log10(BEP) < -2.60"},
10211 { 22, "-2.80 < log10(BEP) < -2.70"},
10212 { 23, "-2.90 < log10(BEP) < -2.80"},
10213 { 24, "-3.00 < log10(BEP) < -2.90"},
10214 { 25, "-3.10 < log10(BEP) < -3.00"},
10215 { 26, "-3.20 < log10(BEP) < -3.10"},
10216 { 27, "-3.30 < log10(BEP) < -3.20"},
10217 { 28, "-3.40 < log10(BEP) < -3.30"},
10218 { 29, "-3.50 < log10(BEP) < -3.40"},
10219 { 30, "-3.60 < log10(BEP) < -3.50"},
10220 { 31, "log10(BEP) < -3.60"},
10224 static const value_string gsm_a_rr_cv_bep_vals
[] = {
10225 { 0, "1.75 < CV BEP < 2.00"},
10226 { 1, "1.50 < CV BEP < 1.75"},
10227 { 2, "1.25 < CV BEP < 1.50"},
10228 { 3, "1.00 < CV BEP < 1.25"},
10229 { 4, "0.75 < CV BEP < 1.00"},
10230 { 5, "0.50 < CV BEP < 0.75"},
10231 { 6, "0.25 < CV BEP < 0.50"},
10232 { 7, "0.00 < CV BEP < 0.25"},
10237 sacch_rr_enh_meas_report(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
10239 proto_tree
*subtree
;
10241 guint32 curr_offset
;
10242 guint bit_offset
, bit_offset_sav
;
10243 guint8 tvb_len
= tvb_length(tvb
);
10244 guint16 bit_len
= tvb_len
<< 3;
10247 curr_offset
= offset
;
10248 bit_offset
= curr_offset
<< 3;
10250 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_ba_used
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
10252 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_3g_ba_used
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
10254 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_bsic_seen
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
10256 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_scale
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
10258 if (gsm_rr_csn_flag(tvb
, tree
, bit_offset
++, "Serving cell data", "Present", "Not Present"))
10259 { /* Serving cell data */
10260 bit_offset_sav
= bit_offset
;
10261 item
= proto_tree_add_text(tree
, tvb
, bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_SERVING_CELL_DATA
].strptr
);
10262 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_SERVING_CELL_DATA
]);
10263 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_dtx_used
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
10265 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_rxlev_full_serv_cell
, tvb
, bit_offset
, 6, ENC_BIG_ENDIAN
);
10267 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_rxqual_full_serv_cell
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
10269 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_mean_bep_gmsk
, tvb
, bit_offset
, 5, ENC_BIG_ENDIAN
);
10271 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_mean_cv_bep
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
10273 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_nbr_rcvd_blocks
, tvb
, bit_offset
, 5, ENC_BIG_ENDIAN
);
10275 proto_item_set_len(item
, (bit_offset
>>3) - (bit_offset_sav
>>3)+1);
10277 while (gsm_rr_csn_flag(tvb
, tree
, bit_offset
++, "Repeated Invalid BSIC Information", "Present", "Not Present"))
10278 { /* Repeated Invalid BSIC Information */
10279 bit_offset_sav
= bit_offset
;
10280 item
= proto_tree_add_text(tree
, tvb
, bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_REPEAT_INV_BSIC_INFO
].strptr
);
10281 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_REPEAT_INV_BSIC_INFO
]);
10282 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_bcch_freq_ncell
, tvb
, bit_offset
, 5, ENC_BIG_ENDIAN
);
10284 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_bsic_ncell
, tvb
, bit_offset
, 6, ENC_BIG_ENDIAN
);
10286 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_rxlev_ncell
, tvb
, bit_offset
, 6, ENC_BIG_ENDIAN
);
10288 proto_item_set_len(item
, (bit_offset
>>3) - (bit_offset_sav
>>3)+1);
10290 if (gsm_rr_csn_flag(tvb
, tree
, bit_offset
++, "Bitmap Type Reporting", "Present", "Not Present"))
10291 { /* Bitmap Type Reporting */
10292 item
= proto_tree_add_text(tree
, tvb
, bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_BITMAP_TYPE_REPORTING
].strptr
);
10293 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_BITMAP_TYPE_REPORTING
]);
10295 while (((guint
)(bit_offset
>>3) <= (offset
+ len
)) && (idx
< 96))
10297 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "Reporting Quantity", "Present", "Not Present"))
10299 proto_tree_add_text(subtree
, tvb
, bit_offset
>>3, 1, "Neighbour Cell List index: %u", idx
);
10300 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_reporting_quantity
, tvb
, bit_offset
, 6, ENC_BIG_ENDIAN
);
10306 /* Null breakpoint */
10307 if (bit_offset
< bit_len
)
10309 if (gsm_rr_csn_HL_flag(tvb
, tree
, 0, bit_offset
++, "Additions in Rel-8", "Present", "Not Present"))
10311 gint8 bitmap_length
;
10312 bit_offset_sav
= bit_offset
;
10313 item
= proto_tree_add_text(tree
, tvb
, bit_offset
>>3, -1, "%s", gsm_rr_rest_octets_elem_strings
[DE_RR_REST_OCTETS_REPORTING_QUANTITY
].strptr
);
10314 subtree
= proto_item_add_subtree(item
, ett_gsm_rr_rest_octets_elem
[DE_RR_REST_OCTETS_REPORTING_QUANTITY
]);
10316 bitmap_length
= tvb_get_bits8(tvb
,bit_offset
,7);
10317 bitmap_length
+= 1;
10318 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_emr_bitmap_length
, tvb
, bit_offset
, 7, ENC_BIG_ENDIAN
);
10321 /* REPORTING_QUANTITY */
10323 while ((guint
)(bit_offset
>>3) <= (offset
+ len
) && (idx
< bitmap_length
) )
10325 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "Reporting Quantity", "Present", "Not Present"))
10327 proto_tree_add_text(subtree
, tvb
, bit_offset
>>3, 1, "Neighbour Cell List index: %u", idx
);
10328 proto_tree_add_bits_item(subtree
, hf_gsm_a_rr_reporting_quantity
, tvb
, bit_offset
, 6, ENC_BIG_ENDIAN
);
10334 /* E-UTRAN Measurement Report */
10335 if (gsm_rr_csn_flag(tvb
, subtree
, bit_offset
++, "E-UTRAN Measurement Report", "Present", "Not Present"))
10337 bit_offset
+= sacch_rr_eutran_meas_report(tvb
, subtree
, bit_offset
, len
*8-(bit_offset
-offset
*8));
10339 proto_item_set_len(item
, (bit_offset
>>3) - (bit_offset_sav
>>3)+1);
10342 gsm_rr_csn_padding_bits(tree
, tvb
, bit_offset
, tvb_len
);
10345 #define NUM_GSM_DTAP_MSG_RR (sizeof(gsm_a_dtap_msg_rr_strings)/sizeof(value_string))
10346 static gint ett_gsm_dtap_msg_rr
[NUM_GSM_DTAP_MSG_RR
];
10347 static void (*dtap_msg_rr_fcn
[])(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
) = {
10348 NULL
, /* Reserved */
10349 dtap_rr_add_ass
, /* Additional Assignment */
10350 dtap_rr_imm_ass
, /* 9.1.18 Immediate assignment */
10351 dtap_rr_imm_ass_ext
, /* Immediate Assignment Extended */
10352 dtap_rr_imm_ass_rej
, /* Immediate Assignment Reject */
10354 dtap_rr_dtm_ass_fail
, /* DTM Assignment Failure */
10355 dtap_rr_dtm_rej
, /* DTM Reject */
10356 dtap_rr_dtm_req
, /* DTM Request */
10357 dtap_rr_pkt_assign
, /* Packet Assignment */
10358 dtap_rr_dtm_ass_cmd
, /* DTM Assignment Command */
10359 dtap_rr_dtm_info
, /* DTM Information */
10360 dtap_rr_pkt_notif
, /* Packet Notification */
10362 dtap_rr_cip_mode_cmd
, /* Ciphering Mode Command */
10363 dtap_rr_cip_mode_cpte
, /* Ciphering Mode Complete */
10365 dtap_rr_conf_change_cmd
, /* Configuration Change Command */
10366 NULL
, /* Configuration Change Ack. */
10367 dtap_rr_conf_change_rej
, /* Configuration Change Reject */
10369 dtap_rr_ass_cmd
, /* 9.1.2 Assignment Command */
10370 dtap_rr_ass_comp
, /* Assignment Complete */
10371 dtap_rr_ass_fail
, /* Assignment Failure */
10372 dtap_rr_ho_cmd
, /* Handover Command */
10373 dtap_rr_ho_cpte
, /* Handover Complete */
10374 dtap_rr_ho_fail
, /* Handover Failure */
10375 dtap_rr_phy_info
, /* Physical Information */
10377 NULL
, /* RR-cell Change Order */
10378 NULL
, /* PDCH Assignment Command */
10380 dtap_rr_ch_rel
, /* Channel Release */
10381 dtap_rr_partial_rel
, /* Partial Release */
10382 NULL
, /* Partial Release Complete */
10384 dtap_rr_paging_req_type_1
, /* Paging Request Type 1 */
10385 dtap_rr_paging_req_type_2
, /* Paging Request Type 2 */
10386 dtap_rr_paging_req_type_3
, /* Paging Request Type 3 */
10387 dtap_rr_paging_resp
, /* Paging Response */
10388 NULL
, /* Notification/NCH */
10389 NULL
, /* Reserved */
10390 NULL
, /* Notification/Response */
10392 NULL
, /* Reserved */
10394 dtap_rr_utran_classmark_change
, /* Utran Classmark Change */
10395 NULL
, /* cdma2000 Classmark Change */
10396 dtap_rr_inter_syst_to_utran_ho_cmd
, /* Inter System to UTRAN Handover Command */
10397 NULL
, /* Inter System to cdma2000 Handover Command */
10399 NULL
, /* System Information Type 8 */
10400 dtap_rr_sys_info_1
, /* System Information Type 1 */
10401 dtap_rr_sys_info_2
, /* System Information Type 2 */
10402 dtap_rr_sys_info_3
, /* System Information Type 3 */
10403 dtap_rr_sys_info_4
, /* System Information Type 4 */
10404 dtap_rr_sys_info_5
, /* System Information Type 5 */
10405 dtap_rr_sys_info_6
, /* System Information Type 6 */
10406 NULL
, /* System Information Type 7 */
10408 dtap_rr_sys_info_2bis
, /* System Information Type 2bis */
10409 dtap_rr_sys_info_2ter
, /* System Information Type 2ter */
10410 dtap_rr_sys_info_2quater
, /* System Information Type 2quater */
10411 dtap_rr_sys_info_5bis
, /* System Information Type 5bis */
10412 dtap_rr_sys_info_5ter
, /* System Information Type 5ter */
10413 NULL
, /* System Information Type 9 */
10414 dtap_rr_sys_info_13
, /* System Information Type 13 */
10416 NULL
, /* System Information Type 16 */
10417 NULL
, /* System Information Type 17 */
10419 NULL
, /* System Information Type 18 */
10420 NULL
, /* System Information Type 19 */
10421 NULL
, /* System Information Type 20 */
10423 dtap_rr_ch_mode_mod
, /* Channel Mode Modify */
10424 dtap_rr_rr_status
, /* RR Status */
10425 dtap_rr_ch_mode_mod_ack
, /* Channel Mode Modify Acknowledge */
10426 dtap_rr_freq_redef
, /* Frequency Redefinition */
10427 dtap_rr_meas_rep
, /* 9.1.21 Measurement report */
10428 dtap_rr_mm_cm_change
, /* 9.1.11 Classmark Change */
10429 dtap_rr_cm_enq
, /* Classmark Enquiry */
10430 dtap_rr_ext_meas_report
, /* Extended Measurement Report */
10431 dtap_rr_ext_meas_order
, /* Extended Measurement Order */
10432 dtap_rr_gprs_sus_req
, /* 9.1.13b GPRS Suspension Request */
10434 NULL
, /* VGCS Uplink Grant */
10435 NULL
, /* Uplink Release */
10436 NULL
, /* Reserved */
10437 NULL
, /* Uplink Busy */
10438 NULL
, /* Talker Indication */
10440 NULL
, /* UTRAN Classmark Change/Handover To UTRAN Command */ /* spec conflict */
10442 dtap_rr_app_inf
, /* Application Information */
10447 void get_rr_msg_params(guint8 oct
, const gchar
**msg_str
, int *ett_tree
, int *hf_idx
, msg_fcn
*msg_fcn_p
)
10451 *msg_str
= try_val_to_str_idx((guint32
) (oct
& DTAP_RR_IEI_MASK
), gsm_a_dtap_msg_rr_strings
, &idx
);
10452 *hf_idx
= hf_gsm_a_dtap_msg_rr_type
;
10453 if (*msg_str
!= NULL
) {
10454 *ett_tree
= ett_gsm_dtap_msg_rr
[idx
];
10455 *msg_fcn_p
= dtap_msg_rr_fcn
[idx
];
10460 /* This is more or less a copy of the dissect_dtap() code just adding
10461 * L2 Pseudo Length decoding first
10462 * The code should probably be cleaned up.
10463 * The name CCCH might not be correct!
10466 dissect_ccch(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
)
10469 static gsm_a_tap_rec_t tap_rec
[4];
10470 static gsm_a_tap_rec_t
*tap_p
;
10471 static guint tap_current
= 0;
10473 void (*msg_fcn_p
)(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
, guint32 offset
, guint len
);
10478 guint32 oct_1
, oct_2
;
10479 proto_item
*ccch_item
= NULL
;
10480 proto_tree
*ccch_tree
= NULL
;
10481 proto_item
*oct_1_item
= NULL
;
10482 proto_tree
*pd_tree
= NULL
;
10483 const gchar
*msg_str
;
10489 len
= tvb_length(tvb
);
10493 * too short to be CCCH
10495 call_dissector(data_handle
, tvb
, pinfo
, tree
);
10499 col_append_str(pinfo
->cinfo
, COL_INFO
, "(CCCH) ");
10501 * set tap record pointer
10504 if (tap_current
>= 4)
10508 tap_p
= &tap_rec
[tap_current
];
10513 /* Skip pseudo hdr here - it is dissected later */
10517 * get protocol discriminator
10519 oct_1
= tvb_get_guint8(tvb
, offset
++);
10521 if ((((oct_1
& DTAP_TI_MASK
) >> 4) & DTAP_TIE_PRES_MASK
) == DTAP_TIE_PRES_MASK
){
10523 * even though we don't know if a TI should be in the message yet
10524 * we rely on the TI/SKIP indicator to be 0 to avoid taking this
10527 oct_2
= tvb_get_guint8(tvb
, offset
++);
10530 oct
= tvb_get_guint8(tvb
, offset
);
10532 pd
= oct_1
& DTAP_PD_MASK
;
10539 col_append_fstr(pinfo
->cinfo
, COL_INFO
, "(%s) ",val_to_str(pd
,gsm_a_pd_short_str_vals
,"Unknown (%u)"));
10546 get_rr_msg_params(oct
, &msg_str
, &ett_tree
, &hf_idx
, &msg_fcn_p
);
10550 /* 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 */
10555 * create the protocol tree
10557 if (msg_str
== NULL
){
10558 ccch_item
= proto_tree_add_protocol_format(tree
, proto_a_ccch
, tvb
, 0, len
,
10559 "GSM CCCH - Message Type (0x%02x)",
10562 ccch_tree
= proto_item_add_subtree(ccch_item
, ett_ccch_msg
);
10564 ccch_item
= proto_tree_add_protocol_format(tree
, proto_a_ccch
, tvb
, 0, -1,
10565 "GSM CCCH - %s", msg_str
);
10567 ccch_tree
= proto_item_add_subtree(ccch_item
, ett_tree
);
10570 col_append_fstr(pinfo
->cinfo
, COL_INFO
, "%s ", msg_str
);
10572 /* L2 Pseudo Length 10.5.2.19 */
10573 /* note: dissected out of sequence! */
10574 elem_v(tvb
, ccch_tree
, pinfo
, GSM_A_PDU_TYPE_RR
, DE_RR_L2_PSEUDO_LEN
, 0, NULL
);
10577 proto_tree_add_text(ccch_tree
,
10579 "Protocol Discriminator: %s",
10580 val_to_str(pd
, protocol_discriminator_vals
, "Unknown (%u)"));
10582 pd_tree
= proto_item_add_subtree(oct_1_item
, ett_ccch_oct_1
);
10583 proto_tree_add_item(pd_tree
, hf_gsm_a_L3_protocol_discriminator
, tvb
, 1, 1, ENC_BIG_ENDIAN
);
10586 proto_tree_add_item(pd_tree
, hf_gsm_a_skip_ind
, tvb
, 1, 1, ENC_BIG_ENDIAN
);
10588 other_decode_bitfield_value(a_bigbuf
, oct_1
, 0x80, 8);
10589 proto_tree_add_text(pd_tree
,tvb
, 1, 1,
10590 "%s : TI flag: %s",
10592 ((oct_1
& 0x80) ? "allocated by receiver" : "allocated by sender"));
10594 if ((ti
& DTAP_TIE_PRES_MASK
) == DTAP_TIE_PRES_MASK
){
10595 /* ti is extended to next octet */
10596 other_decode_bitfield_value(a_bigbuf
, oct_1
, 0x70, 8);
10597 proto_tree_add_text(pd_tree
, tvb
, 1, 1,
10598 "%s : TIO: The TI value is given by the TIE in octet 2",
10601 other_decode_bitfield_value(a_bigbuf
, oct_1
, 0x70, 8);
10602 proto_tree_add_text(pd_tree
,tvb
, 1, 1,
10603 "%s : TIO: %u",a_bigbuf
,ti
& DTAP_TIE_PRES_MASK
);
10608 if ((ti
!= -1) && (ti
& DTAP_TIE_PRES_MASK
) == DTAP_TIE_PRES_MASK
){
10609 proto_tree_add_item(tree
, hf_gsm_a_extension
, tvb
, 2, 1, ENC_BIG_ENDIAN
);
10610 other_decode_bitfield_value(a_bigbuf
, oct_2
, DTAP_TIE_MASK
, 8);
10611 proto_tree_add_text(pd_tree
, tvb
, 2, 1,
10612 "%s : TIE: %u", a_bigbuf
, oct_2
& DTAP_TIE_MASK
);
10618 if ((pinfo
->p2p_dir
== P2P_DIR_RECV
) &&
10625 * add DTAP message name
10627 proto_tree_add_uint_format(ccch_tree
, hf_idx
, tvb
, offset
, 1, oct
,
10628 "Message Type: %s",msg_str
? msg_str
: "(Unknown)");
10632 tap_p
->pdu_type
= GSM_A_PDU_TYPE_DTAP
;
10633 tap_p
->message_type
= (nsd
? (oct
& 0x3f) : oct
);
10634 tap_p
->protocol_disc
= (gsm_a_pd_str_e
)pd
;
10636 tap_queue_packet(gsm_a_tap
, pinfo
, tap_p
);
10638 if (msg_str
== NULL
)
10647 if (msg_fcn_p
== NULL
){
10648 proto_tree_add_text(ccch_tree
, tvb
, offset
, len
- offset
,
10649 "Message Elements");
10651 (*msg_fcn_p
)(tvb
, ccch_tree
, pinfo
, offset
, len
- offset
);
10655 const value_string gsm_a_rr_short_pd_msg_strings
[] = {
10656 { 0x00, "System Information Type 10" },
10657 { 0x01, "Notification/FACCH" },
10658 { 0x02, "Uplink Free" },
10659 { 0x04, "Enhanced Measurement Report" },
10660 { 0x05, "Measurement Information" },
10661 { 0x06, "VBS/VGCS Reconfigure" },
10662 { 0x07, "VBS/VGCS Reconfigure2" },
10663 { 0x08, "VGCS Additional Information" },
10664 { 0x09, "VGCS SMS Information" },
10668 #define NUM_GSM_SACCH_MSG_RR (sizeof(gsm_a_rr_short_pd_msg_strings)/sizeof(value_string))
10669 static gint ett_gsm_sacch_msg_rr
[NUM_GSM_SACCH_MSG_RR
];
10670 static void (*sacch_msg_rr_fcn
[])(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
, guint32 offset
, guint len
) = {
10671 NULL
, /* System Information Type 10 */
10672 NULL
, /* Notification/FACCH */
10673 NULL
, /* Uplink Free */
10674 sacch_rr_enh_meas_report
, /* Enhanced Measurement Report */
10675 sacch_rr_meas_info
, /* Measurement Information */
10676 NULL
, /* VBS/VGCS Reconfigure */
10677 NULL
, /* VBS/VGCS Reconfigure2 */
10678 NULL
, /* VGCS Additional Information */
10679 NULL
, /* VGCS SMS Information */
10684 get_rr_short_pd_msg_params(guint8 mess_type
, const gchar
**msg_str
, int *ett_tree
, int *hf_idx
, msg_fcn
*msg_fcn_p
)
10688 *msg_str
= try_val_to_str_idx((guint32
) mess_type
, gsm_a_rr_short_pd_msg_strings
, &idx
);
10689 *hf_idx
= hf_gsm_a_rr_short_pd_msg_type
;
10690 if (*msg_str
!= NULL
) {
10691 *ett_tree
= ett_gsm_sacch_msg_rr
[idx
];
10692 *msg_fcn_p
= sacch_msg_rr_fcn
[idx
];
10696 const value_string short_protocol_discriminator_vals
[] = {
10697 {0x0, "Radio Resources Management messages"},
10702 dissect_sacch(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
)
10704 static gsm_a_tap_rec_t tap_rec
[4];
10705 static gsm_a_tap_rec_t
*tap_p
;
10706 static guint tap_current
= 0;
10708 void (*msg_fcn_p
)(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
, guint32 offset
, guint len
);
10709 guint8 oct
, short_pd
, mess_type
;
10710 guint32 offset
, bit_offset
= 0;
10712 proto_item
*sacch_item
= NULL
;
10713 proto_tree
*sacch_tree
= NULL
;
10714 const gchar
*msg_str
;
10718 len
= tvb_length(tvb
);
10720 col_append_str(pinfo
->cinfo
, COL_INFO
, "(SACCH) ");
10723 * set tap record pointer
10726 if (tap_current
>= 4)
10730 tap_p
= &tap_rec
[tap_current
];
10734 oct
= tvb_get_guint8(tvb
, offset
);
10741 short_pd
= (oct
& 0x80) >> 7;
10742 mess_type
= (oct
& 0x7c) >> 2;
10746 col_append_str(pinfo
->cinfo
, COL_INFO
, "(RR) ");
10747 get_rr_short_pd_msg_params(mess_type
, &msg_str
, &ett_tree
, &hf_idx
, &msg_fcn_p
);
10751 col_append_str(pinfo
->cinfo
, COL_INFO
, "(Unknown) ");
10755 * create the protocol tree
10757 if (msg_str
== NULL
){
10758 sacch_item
= proto_tree_add_protocol_format(tree
, proto_a_sacch
, tvb
, 0, len
,
10759 "GSM SACCH - Message Type (0x%02x)", mess_type
);
10761 sacch_tree
= proto_item_add_subtree(sacch_item
, ett_sacch_msg
);
10763 sacch_item
= proto_tree_add_protocol_format(tree
, proto_a_sacch
, tvb
, 0, -1,
10764 "GSM SACCH - %s", msg_str
);
10766 sacch_tree
= proto_item_add_subtree(sacch_item
, ett_tree
);
10768 col_append_fstr(pinfo
->cinfo
, COL_INFO
, "%s ", msg_str
);
10772 proto_tree_add_bits_item(sacch_tree
, hf_gsm_a_rr_short_pd
, tvb
, offset
* 8 + bit_offset
++, 1, ENC_BIG_ENDIAN
);
10778 * add SACCH message name
10780 proto_tree_add_bits_item(sacch_tree
, hf_gsm_a_rr_short_pd_msg_type
, tvb
, offset
* 8 + bit_offset
, 5, ENC_BIG_ENDIAN
);
10783 proto_tree_add_bits_item(sacch_tree
, hf_gsm_a_rr_short_l2_header
, tvb
, offset
* 8 + bit_offset
, 2, ENC_BIG_ENDIAN
);
10786 tap_p
->pdu_type
= GSM_A_PDU_TYPE_SACCH
;
10787 tap_p
->message_type
= mess_type
;
10788 tap_p
->protocol_disc
= (gsm_a_pd_str_e
)short_pd
;
10790 tap_queue_packet(gsm_a_tap
, pinfo
, tap_p
);
10792 if (msg_str
== NULL
)
10798 if (msg_fcn_p
== NULL
){
10799 proto_tree_add_text(sacch_tree
, tvb
, offset
, len
- offset
,
10800 "Message Elements");
10802 (*msg_fcn_p
)(tvb
, sacch_tree
, pinfo
, offset
, len
- offset
);
10806 /* Register the protocol with Wireshark */
10808 proto_register_gsm_a_rr(void)
10813 /* Setup list of header fields */
10815 static hf_register_info hf
[] =
10817 { &hf_gsm_a_dtap_msg_rr_type
,
10818 { "DTAP Radio Resources Management Message Type", "gsm_a.dtap.msg_rr_type",
10819 FT_UINT8
, BASE_HEX
, VALS(gsm_a_dtap_msg_rr_strings
), 0x0,
10822 { &hf_gsm_a_rr_elem_id
,
10823 { "Element ID", "gsm_a.rr.elem_id",
10824 FT_UINT8
, BASE_HEX
, NULL
, 0,
10827 { &hf_gsm_a_rr_bcc
,
10828 { "BCC","gsm_a.rr.bcc",
10829 FT_UINT8
,BASE_DEC
, NULL
, 0x07,
10832 { &hf_gsm_a_rr_ncc
,
10833 { "NCC","gsm_a.rr.ncc",
10834 FT_UINT8
,BASE_DEC
, NULL
, 0x38,
10837 { &hf_gsm_a_rr_bcch_arfcn
,
10838 { "BCCH ARFCN(RF channel number)","gsm_a.rr.bcch_arfcn",
10839 FT_UINT16
,BASE_DEC
, NULL
, 0x0,
10842 { &hf_gsm_a_rr_range_nb
,
10843 { "Number of Ranges","gsm_a.rr.range_nb",
10844 FT_UINT8
, BASE_DEC
, NULL
, 0xff,
10847 { &hf_gsm_a_rr_range_lower
,
10848 { "Range Lower","gsm_a.rr.range_lower",
10849 FT_UINT16
, BASE_DEC
, NULL
, 0x0000,
10850 "ARFCN used as the lower limit of a range of frequencies to be used by the mobile station in cell selection (Range Lower)", HFILL
}
10852 { &hf_gsm_a_rr_range_higher
,
10853 { "Range Higher","gsm_a.rr.range_higher",
10854 FT_UINT16
, BASE_DEC
, NULL
, 0x0000,
10855 "ARFCN used as the higher limit of a range of frequencies to be used by the mobile station in cell selection (Range Higher)", HFILL
}
10857 { &hf_gsm_a_rr_ba_freq
,
10858 { "BA Freq","gsm_a.rr.ba_freq",
10859 FT_UINT16
, BASE_DEC
, NULL
, 0x0000,
10860 "ARFCN indicating a single frequency to be used by the mobile station in cell selection and reselection (BA Freq)", HFILL
}
10862 { &hf_gsm_a_rr_ho_ref_val
,
10863 { "Handover reference value","gsm_a.rr.ho_ref_val",
10864 FT_UINT8
,BASE_DEC
, NULL
, 0x0,
10867 { &hf_gsm_a_rr_L2_pseudo_len
,
10868 { "L2 Pseudo Length value","gsm_a.rr.l2_pseudo_len",
10869 FT_UINT8
, BASE_DEC
, NULL
, 0xfc,
10872 { &hf_gsm_a_rr_ba_used
,
10873 { "BA-USED","gsm_a.rr.ba_used",
10874 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
10877 { &hf_gsm_a_rr_dtx_used
,
10878 { "DTX-USED","gsm_a.rr.dtx_used",
10879 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_dtx_vals
), 0x0,
10882 { &hf_gsm_a_rr_3g_ba_used
,
10883 { "3G-BA-USED","gsm_a.rr.3g_ba_used",
10884 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
10887 { &hf_gsm_a_rr_meas_valid
,
10888 { "MEAS-VALID","gsm_a.rr.meas_valid",
10889 FT_BOOLEAN
,8, TFS(&gsm_a_rr_mv_vals
), 0x40,
10892 { &hf_gsm_a_rr_rxlev_full_serv_cell
,
10893 { "RXLEV-FULL-SERVING-CELL","gsm_a.rr.rxlev_full_serv_cell",
10894 FT_UINT8
,BASE_DEC
|BASE_EXT_STRING
, &gsm_a_rr_rxlev_vals_ext
, 0x00,
10897 { &hf_gsm_a_rr_rxlev_sub_serv_cell
,
10898 { "RXLEV-SUB-SERVING-CELL","gsm_a.rr.rxlev_sub_serv_cell",
10899 FT_UINT8
,BASE_DEC
|BASE_EXT_STRING
, &gsm_a_rr_rxlev_vals_ext
, 0x00,
10902 { &hf_gsm_a_rr_rxqual_full_serv_cell
,
10903 { "RXQUAL-FULL-SERVING-CELL","gsm_a.rr.rxqual_full_serv_cell",
10904 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_rxqual_vals
), 0x00,
10907 { &hf_gsm_a_rr_rxqual_sub_serv_cell
,
10908 { "RXQUAL-SUB-SERVING-CELL","gsm_a.rr.rxqual_sub_serv_cell",
10909 FT_UINT8
,BASE_DEC
, VALS(gsm_a_rr_rxqual_vals
), 0x0e,
10912 { &hf_gsm_a_rr_no_ncell_m
,
10913 { "NO-NCELL-M","gsm_a.rr.no_ncell_m",
10914 FT_UINT8
,BASE_DEC
, VALS(gsm_a_rr_ncell_vals
), 0x00,
10917 { &hf_gsm_a_rr_rxlev_ncell
,
10918 { "RXLEV-NCELL","gsm_a.rr.rxlev_ncell",
10919 FT_UINT8
,BASE_DEC
, NULL
, 0x00,
10922 { &hf_gsm_a_rr_bcch_freq_ncell
,
10923 { "BCCH-FREQ-NCELL","gsm_a.rr.bcch_freq_ncell",
10924 FT_UINT8
,BASE_DEC
, NULL
, 0x00,
10927 { &hf_gsm_a_rr_bsic_ncell
,
10928 { "BSIC-NCELL","gsm_a.rr.bsic_ncell",
10929 FT_UINT8
,BASE_DEC
, NULL
, 0x00,
10932 { &hf_gsm_a_rr_mobile_time_difference
,
10933 { "Mobile Timing Difference value (in half bit periods)","gsm_a.rr.mobile_time_difference",
10934 FT_UINT32
,BASE_DEC
, NULL
, 0xFFFFF8,
10937 { &hf_gsm_a_rr_pow_cmd_atc
,
10938 { "ATC","gsm_a.rr.pow_cmd_atc",
10939 FT_BOOLEAN
,8, TFS(&gsm_a_rr_pow_cmd_atc_value
), 0x80,
10942 { &hf_gsm_a_rr_page_mode
,
10943 { "Page Mode","gsm_a.rr.page_mode",
10944 FT_UINT8
,BASE_DEC
, VALS(gsm_a_rr_page_mode_vals
), 0x0F,
10947 { &hf_gsm_a_rr_dedicated_mode_or_tbf
,
10948 { "Dedicated mode or TBF","gsm_a.rr.dedicated_mode_or_tbf",
10949 FT_UINT8
,BASE_DEC
, VALS(gsm_a_rr_dedicated_mode_or_tbf_vals
), 0xF0,
10952 { &hf_gsm_a_rr_pow_cmd_epc
,
10953 { "EPC_mode","gsm_a.rr.pow_cmd_epc",
10954 FT_BOOLEAN
,8, TFS(&gsm_a_rr_pow_cmd_epc_value
), 0x40,
10957 { &hf_gsm_a_rr_pow_cmd_fpcepc
,
10958 { "FPC_EPC","gsm_a.rr.pow_cmd_fpcepc",
10959 FT_BOOLEAN
,8, TFS(&gsm_a_rr_pow_cmd_fpcepc_value
), 0x20,
10962 { &hf_gsm_a_rr_pow_cmd_powlev
,
10963 { "POWER LEVEL","gsm_a.rr.pow_cmd_pow",
10964 FT_UINT8
,BASE_DEC
, NULL
, 0x1f,
10967 { &hf_gsm_a_rr_sync_ind_nci
,
10968 { "Normal cell indication(NCI)","gsm_a.rr.sync_ind_nci",
10969 FT_BOOLEAN
,8, TFS(&gsm_a_rr_sync_ind_nci_value
), 0x08,
10972 { &hf_gsm_a_rr_sync_ind_rot
,
10973 { "Report Observed Time Difference(ROT)","gsm_a.rr.sync_ind_rot",
10974 FT_BOOLEAN
,8, TFS(&sm_a_rr_sync_ind_rot_value
), 0x04,
10977 { &hf_gsm_a_rr_sync_ind_si
,
10978 { "Synchronization indication(SI)","gsm_a.rr.sync_ind_si",
10979 FT_UINT8
,BASE_DEC
, VALS(gsm_a_rr_sync_ind_si_vals
), 0x03,
10982 { &hf_gsm_a_rr_format_id
,
10983 { "Format Identifier","gsm_a.rr.format_id",
10984 FT_UINT8
,BASE_HEX
, VALS(gsm_a_rr_freq_list_format_id_vals
), 0xce,
10987 { &hf_gsm_a_rr_format_id2
,
10988 { "Format Identifier","gsm_a.rr.format_id",
10989 FT_UINT8
,BASE_HEX
, VALS(gsm_a_rr_freq_list_format_id_vals
), 0x8e,
10992 { &hf_gsm_a_rr_channel_mode
,
10993 { "Channel Mode","gsm_a.rr.channel_mode",
10994 FT_UINT8
,BASE_DEC
, VALS(gsm_a_rr_channel_mode_vals
), 0x0,
10997 { &hf_gsm_a_rr_channel_mode2
,
10998 { "Channel Mode 2","gsm_a.rr.channel_mode2",
10999 FT_UINT8
,BASE_DEC
, VALS(gsm_a_rr_channel_mode2_vals
), 0x0,
11003 { "SC","gsm_a.rr.SC",
11004 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_sc_vals
), 0x00,
11007 { &hf_gsm_a_rr_algorithm_id
,
11008 { "Algorithm identifier","gsm_a.rr.algorithm_identifier",
11009 FT_UINT8
,BASE_DEC
, VALS(gsm_a_rr_algorithm_identifier_vals
), 0x00,
11013 { "CR","gsm_a.rr.CR",
11014 FT_UINT8
,BASE_DEC
, VALS(gsm_a_rr_cr_vals
), 0x00,
11017 { &hf_gsm_a_rr_multirate_speech_ver
,
11018 { "Multirate speech version","gsm_a.rr.multirate_speech_ver",
11019 FT_UINT8
,BASE_DEC
, VALS(multirate_speech_ver_vals
), 0xe0,
11022 { &hf_gsm_a_rr_NCSB
,
11023 { "NSCB: Noise Suppression Control Bit","gsm_a.rr.NCSB",
11024 FT_UINT8
,BASE_DEC
, VALS(NSCB_vals
), 0x10,
11027 { &hf_gsm_a_rr_ICMI
,
11028 { "ICMI: Initial Codec Mode Indicator","gsm_a.rr.ICMI",
11029 FT_UINT8
,BASE_DEC
, VALS(ICMI_vals
), 0x8,
11032 { &hf_gsm_a_rr_start_mode
,
11033 { "Start Mode","gsm_a.rr.start_mode",
11034 FT_UINT8
,BASE_DEC
, NULL
, 0x3,
11037 { &hf_gsm_a_rr_timing_adv
,
11038 { "Timing advance value","gsm_a.rr.timing_adv",
11039 FT_UINT8
,BASE_DEC
, NULL
, 0x0,
11042 { &hf_gsm_a_rr_time_diff
,
11043 { "Time difference value","gsm_a.rr.time_diff",
11044 FT_UINT8
,BASE_DEC
, NULL
, 0x0,
11047 { &hf_gsm_a_rr_tlli
,
11048 { "TLLI","gsm_a.rr.tlli",
11049 FT_UINT32
,BASE_HEX
, NULL
, 0x0,
11052 { &hf_gsm_a_rr_tmsi_ptmsi
,
11053 { "TMSI/P-TMSI Value","gsm_a.rr.tmsi_ptmsi",
11054 FT_UINT32
,BASE_HEX
, NULL
, 0x0,
11057 { &hf_gsm_a_rr_target_mode
,
11058 { "Target mode","gsm_a.rr.target_mode",
11059 FT_UINT8
,BASE_DEC
, NULL
, 0xc0,
11062 { &hf_gsm_a_rr_wait_indication
,
11063 { "Wait Indication","gsm_a.rr.wait_indication",
11064 FT_UINT8
,BASE_DEC
, NULL
, 0x00,
11067 { &hf_gsm_a_rr_seq_code
,
11068 { "Sequence Code","gsm_a.rr.seq_code",
11069 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
11073 { &hf_gsm_a_rr_group_cipher_key_number
,
11074 { "Group cipher key number","gsm_a.rr.Group_cipher_key_number",
11075 FT_UINT8
,BASE_DEC
, NULL
, 0x3c,
11078 { &hf_gsm_a_rr_MBMS_broadcast
,
11079 { "MBMS Broadcast","gsm_a.rr.MBMS_broadcast",
11080 FT_BOOLEAN
,8, TFS(&gsm_a_rr_MBMS_broadcast_value
), 0x01,
11083 { &hf_gsm_a_rr_MBMS_multicast
,
11084 { "MBMS Multicast","gsm_a.rr.MBMS_multicast",
11085 FT_BOOLEAN
,8, TFS(&gsm_a_rr_MBMS_multicast_value
), 0x02,
11088 { &hf_gsm_a_rr_last_segment
,
11089 { "Last Segment","gsm_a.rr.last_segment",
11090 FT_BOOLEAN
,8, TFS(&gsm_a_rr_last_segment_value
), 0x01,
11093 { &hf_gsm_a_rr_carrier_ind
,
11094 { "Carrier Indication","gsm_a.rr.carrier_ind",
11095 FT_BOOLEAN
,8, TFS(&gsm_a_rr_carrier_ind_value
), 0x01,
11099 { "Random Access Information (RA)", "gsm_a.rr.ra",
11100 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
11103 { &hf_gsm_a_rr_T1prim
,
11104 { "T1'", "gsm_a.rr.T1prim",
11105 FT_UINT8
, BASE_DEC
, NULL
, 0xf8,
11109 { "T3", "gsm_a.rr.T3",
11110 FT_UINT16
, BASE_DEC
, NULL
, 0x07e0,
11114 { "T2", "gsm_a.rr.T2",
11115 FT_UINT8
, BASE_DEC
, NULL
, 0x1f,
11118 { &hf_gsm_a_rr_tbf_T1prim
,
11119 { "T1' (TBF)", "gsm_a.rr.tbf.T1prim",
11120 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
11123 { &hf_gsm_a_rr_tbf_T3
,
11124 { "T3 (TBF)", "gsm_a.rr.tbf.T3",
11125 FT_UINT16
, BASE_DEC
, NULL
, 0x00,
11128 { &hf_gsm_a_rr_tbf_T2
,
11129 { "T2 (TBF)", "gsm_a.rr.tbf.T2",
11130 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
11133 { &hf_gsm_a_rr_rfn
,
11134 { "RFN", "gsm_a.rr.rfn",
11135 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
11136 "Reduced Frame Number", HFILL
}
11138 { &hf_gsm_a_rr_RR_cause
,
11139 { "RR cause value","gsm_a.rr.RRcause",
11140 FT_UINT8
,BASE_DEC
, VALS(gsm_a_rr_RR_cause_vals
), 0x0,
11143 { &hf_gsm_a_rr_cm_cng_msg_req
,
11144 { "CLASSMARK CHANGE","gsm_a.rr.cm_cng_msg_req",
11145 FT_BOOLEAN
,8, TFS(&gsm_a_msg_req_value
), 0x80,
11148 { &hf_gsm_a_rr_utran_cm_cng_msg_req
,
11149 { "UTRAN CLASSMARK CHANGE","gsm_a.rr.utran_cm_cng_msg_req",
11150 FT_UINT8
,BASE_DEC
, VALS(gsm_a_rr_utran_cm_cng_msg_req_vals
), 0x70,
11153 { &hf_gsm_a_rr_cdma200_cm_cng_msg_req
,
11154 { "CDMA2000 CLASSMARK CHANGE","gsm_a.rr.cdma200_cm_cng_msg_req",
11155 FT_BOOLEAN
,8, TFS(&gsm_a_msg_req_value
), 0x08,
11158 { &hf_gsm_a_rr_geran_iu_cm_cng_msg_req
,
11159 { "GERAN IU MODE CLASSMARK CHANGE","gsm_a.rr.geran_iu_cm_cng_msg_req",
11160 FT_BOOLEAN
,8, TFS(&gsm_a_msg_req_value
), 0x04,
11163 { &hf_gsm_a_rr_chnl_needed_ch1
,
11164 { "Channel 1","gsm_a.rr.chnl_needed_ch1",
11165 FT_UINT8
,BASE_DEC
, VALS(gsm_a_rr_channel_needed_vals
), 0x00,
11168 { &hf_gsm_a_rr_chnl_needed_ch2
,
11169 { "Channel 2","gsm_a.rr.chnl_needed_ch2",
11170 FT_UINT8
,BASE_DEC
, VALS(gsm_a_rr_channel_needed_vals
), 0x00,
11173 { &hf_gsm_a_rr_chnl_needed_ch3
,
11174 { "Channel 3","gsm_a.rr.chnl_needed_ch3",
11175 FT_UINT8
,BASE_DEC
, VALS(gsm_a_rr_channel_needed_vals
), 0x00,
11178 { &hf_gsm_a_rr_chnl_needed_ch4
,
11179 { "Channel 4","gsm_a.rr.chnl_needed_ch4",
11180 FT_UINT8
,BASE_DEC
, VALS(gsm_a_rr_channel_needed_vals
), 0x00,
11183 { &hf_gsm_a_rr_pkt_estab_cause
,
11184 { "PACKET_ESTABLISHMENT_CAUSE","gsm_a.rr.pkt_estab_cause",
11185 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_pkt_estab_cause_vals
), 0x00,
11188 { &hf_gsm_a_rr_peak_throughput_class
,
11189 { "PEAK_THROUGHPUT_CLASS","gsm_a.rr.peak_throughput_class",
11190 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
11193 { &hf_gsm_a_rr_radio_priority
,
11194 { "RADIO_PRIORITY","gsm_a.rr.radio_priority",
11195 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_radio_priority_vals
), 0x00,
11198 { &hf_gsm_a_rr_llc_pdu_type
,
11199 { "LLC_PDU_TYPE","gsm_a.rr.llc_pdu_type",
11200 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_llc_pdu_type_value
), 0x00,
11203 { &hf_gsm_a_rr_rlc_octet_count
,
11204 { "RLC_OCTET_COUNT","gsm_a.rr.rlc_octet_count",
11205 FT_UINT16
, BASE_DEC
, NULL
, 0x00,
11208 { &hf_gsm_a_rr_rlc_non_pers_mode_cap
,
11209 { "RLC Non-persistent Mode Capability","gsm_a.rr.rlc_non_pers_mode_cap",
11210 FT_BOOLEAN
, BASE_NONE
, TFS(&tfs_supported_not_supported
), 0x00,
11213 { &hf_gsm_a_rr_reduced_latency_cap
,
11214 { "Reduced Latency Capability","gsm_a.rr.reduced_latency_cap",
11215 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_reduced_latency_cap_value
), 0x00,
11218 { &hf_gsm_a_rr_ul_egprs2
,
11219 { "Uplink EGPRS2","gsm_a.rr.ul_egprs2",
11220 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_egprs2_vals
), 0x00,
11223 { &hf_gsm_a_rr_dl_egprs2
,
11224 { "Downlink EGPRS2","gsm_a.rr.dl_egprs2",
11225 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_egprs2_vals
), 0x00,
11228 { &hf_gsm_a_rr_emst_ms_cap
,
11229 { "EMST_MS_Capability","gsm_a.rr.emst_ms_cap",
11230 FT_BOOLEAN
, BASE_NONE
, TFS(&tfs_supported_not_supported
), 0x00,
11233 { &hf_gsm_a_rr_suspension_cause
,
11234 { "Suspension cause value","gsm_a.rr.suspension_cause",
11235 FT_UINT8
,BASE_DEC
, VALS(gsm_a_rr_suspension_cause_vals
), 0x0,
11238 { &hf_gsm_a_rr_apdu_id
,
11239 { "APDU ID","gsm_a.rr.apdu_id",
11240 FT_UINT8
,BASE_HEX
, VALS(gsm_a_rr_apdu_id_vals
), 0x0f,
11243 { &hf_gsm_a_rr_apdu_flags
,
11244 { "APDU Flags","gsm_a.rr.apdu_flags",
11245 FT_UINT8
,BASE_HEX
, VALS(gsm_a_rr_apdu_flags_vals
), 0xf0,
11248 { &hf_gsm_a_rr_set_of_amr_codec_modes_v1_b8
,
11249 { "12,2 kbit/s codec rate", "gsm_a.rr.set_of_amr_codec_modes_v1b8",
11250 FT_BOOLEAN
,8, TFS(&gsm_a_rr_set_of_amr_codec_modes
), 0x80,
11253 { &hf_gsm_a_rr_set_of_amr_codec_modes_v1_b7
,
11254 { "10,2 kbit/s codec rate", "gsm_a.rr.set_of_amr_codec_modes_v1b7",
11255 FT_BOOLEAN
,8, TFS(&gsm_a_rr_set_of_amr_codec_modes
), 0x40,
11258 { &hf_gsm_a_rr_set_of_amr_codec_modes_v1_b6
,
11259 { "7,95 kbit/s codec rate", "gsm_a.rr.set_of_amr_codec_modes_v1b6",
11260 FT_BOOLEAN
,8, TFS(&gsm_a_rr_set_of_amr_codec_modes
), 0x20,
11263 { &hf_gsm_a_rr_set_of_amr_codec_modes_v1_b5
,
11264 { "7,40 kbit/s codec rate", "gsm_a.rr.set_of_amr_codec_modes_v1b5",
11265 FT_BOOLEAN
,8, TFS(&gsm_a_rr_set_of_amr_codec_modes
), 0x10,
11268 { &hf_gsm_a_rr_set_of_amr_codec_modes_v1_b4
,
11269 { "6,70 kbit/s codec rate", "gsm_a.rr.set_of_amr_codec_modes_v1b4",
11270 FT_BOOLEAN
,8, TFS(&gsm_a_rr_set_of_amr_codec_modes
), 0x08,
11273 { &hf_gsm_a_rr_set_of_amr_codec_modes_v1_b3
,
11274 { "5,90 kbit/s codec rate", "gsm_a.rr.set_of_amr_codec_modes_v1b3",
11275 FT_BOOLEAN
,8, TFS(&gsm_a_rr_set_of_amr_codec_modes
), 0x04,
11278 { &hf_gsm_a_rr_set_of_amr_codec_modes_v1_b2
,
11279 { "5,15 kbit/s codec rate", "gsm_a.rr.set_of_amr_codec_modes_v1b2",
11280 FT_BOOLEAN
,8, TFS(&gsm_a_rr_set_of_amr_codec_modes
), 0x02,
11283 { &hf_gsm_a_rr_set_of_amr_codec_modes_v1_b1
,
11284 { "4,75 kbit/s codec rate", "gsm_a.rr.set_of_amr_codec_modes_v1b1",
11285 FT_BOOLEAN
,8, TFS(&gsm_a_rr_set_of_amr_codec_modes
), 0x01,
11288 { &hf_gsm_a_rr_set_of_amr_codec_modes_v2_b5
,
11289 { "23,85 kbit/s codec rate", "gsm_a.rr.set_of_amr_codec_modes_v2b5",
11290 FT_BOOLEAN
,8, TFS(&gsm_a_rr_set_of_amr_codec_modes
), 0x10,
11293 { &hf_gsm_a_rr_set_of_amr_codec_modes_v2_b4
,
11294 { "15,85 kbit/s codec rate", "gsm_a.rr.set_of_amr_codec_modes_v2b4",
11295 FT_BOOLEAN
,8, TFS(&gsm_a_rr_set_of_amr_codec_modes
), 0x08,
11298 { &hf_gsm_a_rr_set_of_amr_codec_modes_v2_b3
,
11299 { "12,65 kbit/s codec rate", "gsm_a.rr.set_of_amr_codec_modes_v2b3",
11300 FT_BOOLEAN
,8, TFS(&gsm_a_rr_set_of_amr_codec_modes
), 0x04,
11303 { &hf_gsm_a_rr_set_of_amr_codec_modes_v2_b2
,
11304 { "8,85 kbit/s codec rate", "gsm_a.rr.set_of_amr_codec_modes_v2b2",
11305 FT_BOOLEAN
,8, TFS(&gsm_a_rr_set_of_amr_codec_modes
), 0x02,
11308 { &hf_gsm_a_rr_set_of_amr_codec_modes_v2_b1
,
11309 { "6,60 kbit/s codec rate", "gsm_a.rr.set_of_amr_codec_modes_v2b1",
11310 FT_BOOLEAN
,8, TFS(&gsm_a_rr_set_of_amr_codec_modes
), 0x01,
11313 { &hf_gsm_a_rr_amr_threshold
,
11314 { "AMR Threshold", "gsm_a.rr.amr_threshold",
11315 FT_UINT8
, BASE_DEC
|BASE_EXT_STRING
, &gsm_a_rr_amr_threshold_vals_ext
, 0x00,
11318 { &hf_gsm_a_rr_amr_hysteresis
,
11319 { "AMR Hysteresis", "gsm_a.rr.amr_hysteresis",
11320 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_amr_hysteresis_vals
), 0x00,
11323 { &hf_gsm_a_rr_pwrc
,
11324 { "PWRC", "gsm_a.rr.pwrc",
11325 FT_BOOLEAN
, BASE_NONE
, NULL
, 0x0,
11326 "Power Control Indicator (PWRC)", HFILL
}
11328 { &hf_gsm_a_rr_dtx_bcch
,
11329 { "DTX (BCCH)", "gsm_a.rr.dtx_bcch",
11330 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_dtx_bcch_vals
), 0x30,
11331 "Discontinuous Transmission (DTX-BCCH)", HFILL
}
11333 { &hf_gsm_a_rr_dtx_sacch
,
11334 { "DTX (SACCH)", "gsm_a.rr.dtx_sacch",
11335 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_dtx_sacch_vals
), 0x00,
11336 "Discontinuous Transmission (DTX-SACCH)", HFILL
}
11338 { &hf_gsm_a_rr_radio_link_timeout
,
11339 { "Radio Link Timeout", "gsm_a.rr.radio_link_timeout",
11340 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_radio_link_timeout_vals
), 0x0f,
11341 "Radio Link Timeout (s)", HFILL
}
11343 { &hf_gsm_a_rr_cell_reselect_hyst
,
11344 { "Cell Reselection Hysteresis", "gsm_a.rr.cell_reselect_hyst",
11345 FT_UINT8
, BASE_DEC
, NULL
, 0xe0,
11346 "Cell Reselection Hysteresis (dB)", HFILL
}
11348 { &hf_gsm_a_rr_ms_txpwr_max_cch
,
11349 { "MS TXPWR MAX CCH", "gsm_a.rr.ms_txpwr_max_cch",
11350 FT_UINT8
, BASE_DEC
, NULL
, 0x1f,
11353 { &hf_gsm_a_rr_acs
,
11354 { "ACS", "gsm_a.rr.acs",
11355 FT_BOOLEAN
, 8, NULL
, 0x80,
11356 "Additional Reselect Param Indicator (ACS)", HFILL
}
11358 { &hf_gsm_a_rr_neci
,
11359 { "NECI", "gsm_a.rr.neci",
11360 FT_UINT8
, BASE_DEC
, NULL
, 0x40,
11361 "New Establishment Cause Indicator (NECI)", HFILL
}
11363 { &hf_gsm_a_rr_rxlev_access_min
,
11364 { "RXLEV-ACCESS-MIN", "gsm_a.rr.rxlev_access_min",
11365 FT_UINT8
, BASE_DEC
|BASE_EXT_STRING
, &gsm_a_rr_rxlev_vals_ext
, 0x3f,
11368 { &hf_gsm_a_rr_mscr
,
11369 { "MSCR", "gsm_a.rr.mscr",
11370 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_mscr_vals
), 0x80,
11371 "MSC Release Indicator (MSCR)", HFILL
}
11373 { &hf_gsm_a_rr_att
,
11374 { "ATT", "gsm_a.rr.att",
11375 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_att_vals
), 0x40,
11376 "Attach Indicator (ATT)", HFILL
}
11378 { &hf_gsm_a_rr_bs_ag_blks_res
,
11379 { "BS_AG_BLKS_RES", "gsm_a.rr.bs_ag_blks_res",
11380 FT_UINT8
, BASE_DEC
, NULL
, 0x38,
11381 "Access Grant Reserved Blocks (BS_AG_BLKS_RES)", HFILL
}
11383 { &hf_gsm_a_rr_ccch_conf
,
11384 { "CCCH-CONF", "gsm_a.rr.ccch_conf",
11385 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_ccch_conf_vals
), 0x07,
11388 { &hf_gsm_a_rr_cbq3
,
11389 { "CBQ3", "gsm_a.rr.cbq3",
11390 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_cbq3_vals
), 0x00,
11391 "Cell Bar Qualify 3", HFILL
}
11393 { &hf_gsm_a_rr_bs_pa_mfrms
,
11394 { "BS-PA-MFRMS", "gsm_a.rr.bs_pa_mfrms",
11395 FT_UINT8
, BASE_DEC
, NULL
, 0x07,
11398 { &hf_gsm_a_rr_t3212
,
11399 { "T3212", "gsm_a.rr.t3212",
11400 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
11401 "Periodic Update period (T3212) (deci-hours)", HFILL
}
11403 { &hf_gsm_a_rr_gsm_band
,
11404 { "GSM Band", "gsm_a.rr.gsm_band",
11405 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_gsm_band_vals
), 0x00,
11408 { &hf_gsm_a_rr_arfcn_first
,
11409 { "ARFCN First", "gsm_a.rr.arfcn_first",
11410 FT_UINT16
, BASE_DEC
, NULL
, 0x00,
11413 { &hf_gsm_a_rr_band_offset
,
11414 { "Band Offset", "gsm_a.rr.band_offset",
11415 FT_UINT16
, BASE_DEC
, NULL
, 0x00,
11418 { &hf_gsm_a_rr_arfcn_range
,
11419 { "ARFCN Range", "gsm_a.rr.arfcn_range",
11420 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
11423 { &hf_gsm_a_rr_lowest_arfcn
,
11424 { "Lowest ARFCN", "gsm_a.rr.lowest_arfcn",
11425 FT_UINT8
, BASE_DEC
, NULL
, 0x7f,
11428 { &hf_gsm_a_rr_inc_skip_arfcn
,
11429 { "Increment skip ARFCN", "gsm_a.rr.inc_skip_arfcn",
11430 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
11433 { &hf_gsm_a_rr_gprs_resumption_ack
,
11434 { "Ack", "gsm_a.rr.gprs_resumption_ack",
11435 FT_BOOLEAN
, 8, TFS(&gsm_a_rr_gprs_resumption_ack_value
), 0x01,
11436 "GPRS Resumption Ack bit", HFILL
}
11438 { &hf_gsm_a_rr_ext_ind
,
11439 { "EXT-IND", "gsm_a.rr.ext_ind",
11440 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_ext_ind_vals
), 0x20,
11441 "Extension Indication (EXT-IND)", HFILL
}
11443 { &hf_gsm_a_rr_ba_ind
,
11444 { "BA-IND", "gsm_a.rr.ba_ind",
11445 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
11446 "BCCH Allocation Indication (BA-IND)", HFILL
}
11448 { &hf_gsm_a_rr_multiband_reporting
,
11449 { "Multiband Reporting", "gsm_a.rr.multiband_reporting",
11450 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
11451 "Number of cells to be reported in each band if Multiband Reporting", HFILL
}
11453 { &hf_gsm_a_rr_ncc_permitted
,
11454 { "NCC Permitted", "gsm_a.rr.ncc_permitted",
11455 FT_UINT8
, BASE_HEX
, NULL
, 0xff,
11458 { &hf_gsm_a_rr_max_retrans
,
11459 { "Max retrans", "gsm_a.rr.max_retrans",
11460 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_max_retrans_vals
), 0xc0,
11461 "Maximum number of retransmissions", HFILL
}
11463 { &hf_gsm_a_rr_tx_integer
,
11464 { "Tx-integer", "gsm_a.rr.tx_integer",
11465 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_tx_integer_vals
), 0x3c,
11466 "Number of Slots to spread Transmission (Tx-integer)", HFILL
}
11468 { &hf_gsm_a_rr_cell_barr_access
,
11469 { "CELL_BARR_ACCESS", "gsm_a.rr.cell_barr_access",
11470 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_cell_barr_access_vals
), 0x02,
11471 "Cell Barred for Access (CELL_BARR_ACCESS)", HFILL
}
11474 { "RE", "gsm_a.rr.re",
11475 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_re_vals
), 0x01,
11476 "Call re-establishment allowed (RE)", HFILL
}
11478 { &hf_gsm_a_rr_acc
,
11479 { "ACC", "gsm_a.rr.acc",
11480 FT_UINT16
, BASE_HEX
, NULL
, 0xffff,
11481 "Access Control Class N barred (ACC)", HFILL
}
11483 { &hf_gsm_a_rr_nch_position
,
11484 { "NCH Position", "gsm_a.rr.nch_position",
11485 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_nch_position_vals
), 0x00,
11488 { &hf_gsm_a_rr_si2ter_mp_change_mark
,
11489 { "SI2ter Measurement Parameter Change Mark", "gsm_a.rr.si2ter_mp_change_mark",
11490 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
11493 { &hf_gsm_a_rr_si2ter_3g_change_mark
,
11494 { "SI2ter 3G Change Mark", "gsm_a.rr.si2ter_3g_change_mark",
11495 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
11498 { &hf_gsm_a_rr_si2ter_index
,
11499 { "SI2ter Index", "gsm_a.rr.si2ter_index",
11500 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
11503 { &hf_gsm_a_rr_si2ter_count
,
11504 { "SI2ter Count", "gsm_a.rr.si2ter_count",
11505 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
11508 { &hf_gsm_a_rr_fdd_uarfcn
,
11509 { "FDD UARFCN", "gsm_a.rr.fdd_uarfcn",
11510 FT_UINT16
, BASE_DEC
, NULL
, 0x0000,
11513 { &hf_gsm_a_rr_bandwidth_fdd
,
11514 { "Bandwidth FDD", "gsm_a.rr.bandwidth_fdd",
11515 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
11518 { &hf_gsm_a_rr_tdd_uarfcn
,
11519 { "TDD UARFCN", "gsm_a.rr.tdd_uarfcn",
11520 FT_UINT16
, BASE_DEC
, NULL
, 0x0000,
11523 { &hf_gsm_a_rr_bandwidth_tdd
,
11524 { "Bandwidth TDD", "gsm_a.rr.bandwidth_tdd",
11525 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
11528 { &hf_gsm_a_rr_arfcn
,
11529 { "ARFCN", "gsm_a.rr.arfcn",
11530 FT_UINT16
, BASE_DEC
, NULL
, 0x0000,
11531 "Absolute Radio Frequency Channel Number (ARFCN)", HFILL
}
11533 { &hf_gsm_a_rr_bsic
,
11534 { "BSIC", "gsm_a.rr.bsic",
11535 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
11536 "Base Station Identify Code (BSIC)", HFILL
}
11538 { &hf_gsm_a_rr_qsearch_i
,
11539 { "Qsearch I", "gsm_a.rr.qsearch_i",
11540 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_qsearch_x_vals
), 0x00,
11541 "Search for 3G cells if signal level is below (0 7) or above (8 15) threshold (Qsearch I)", HFILL
}
11543 { &hf_gsm_a_rr_fdd_qoffset
,
11544 { "FDD Qoffset", "gsm_a.rr.fdd_qoffset",
11545 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_xdd_qoffset_vals
), 0x00,
11546 "Offset to RLA_C for cell re selection to FDD access technology (FDD Qoffset)", HFILL
}
11548 { &hf_gsm_a_rr_fdd_qmin
,
11549 { "FDD Qmin", "gsm_a.rr.fdd_qmin",
11550 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_fdd_qmin_vals
), 0x00,
11551 "Minimum threshold for Ec/No for UTRAN FDD cell re-selection (FDD Qmin)", HFILL
}
11553 { &hf_gsm_a_rr_tdd_qoffset
,
11554 { "TDD Qoffset", "gsm_a.rr.tdd_qoffset",
11555 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_xdd_qoffset_vals
), 0x00,
11556 "Offset to RLA_C for cell re selection to TDD access technology (TDD Qoffset)", HFILL
}
11558 { &hf_gsm_a_rr_fdd_qmin_offset
,
11559 { "FDD Qmin Offset", "gsm_a.rr.fdd_qmin_offset",
11560 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_fdd_qmin_offset_vals
), 0x00,
11561 "Offset to FDD Qmin value (FDD Qmin Offset)", HFILL
}
11563 { &hf_gsm_a_rr_fdd_rscpmin
,
11564 { "FDD RSCPmin", "gsm_a.rr.fdd_rscpmin",
11565 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_fdd_rscpmin_vals
), 0x00,
11566 "Minimum threshold of RSCP for UTRAN FDD cell re-selection (FDD RSCPmin)", HFILL
}
11568 { &hf_gsm_a_rr_3g_ba_ind
,
11569 { "3G BA-IND", "gsm_a.rr.3g_ba_ind",
11570 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
11571 "3G BCCH Allocation Indication (3G BA-IND)", HFILL
}
11573 { &hf_gsm_a_rr_mp_change_mark
,
11574 { "Measurement Parameter Change Mark", "gsm_a.rr.mp_change_mark",
11575 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
11578 { &hf_gsm_a_rr_si2quater_index
,
11579 { "SI2quater Index", "gsm_a.rr.si2quater_index",
11580 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
11583 { &hf_gsm_a_rr_si2quater_count
,
11584 { "SI2quater Count", "gsm_a.rr.si2quater_count",
11585 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
11588 { &hf_gsm_a_rr_gsm_report_type
,
11589 { "Report Type", "gsm_a.rr.gsm_report_type",
11590 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_gsm_report_type_value
), 0x0,
11591 "Report type the MS shall use (Report Type)", HFILL
}
11593 { &hf_gsm_a_rr_serving_band_reporting
,
11594 { "Serving Band Reporting", "gsm_a.rr.serving_band_reporting",
11595 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
11596 "Number of cells reported from the GSM serving frequency band (Serving Band Reporting)", HFILL
}
11598 { &hf_gsm_a_rr_frequency_scrolling
,
11599 { "Frequency Scrolling", "gsm_a.rr.frequency_scrolling",
11600 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_frequency_scrolling_value
), 0x0,
11603 { &hf_gsm_a_rr_rep_priority
,
11604 { "Rep Priority", "gsm_a.rr.rep_priority",
11605 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_rep_priority_value
), 0x0,
11606 "Reporting Priority", HFILL
}
11608 { &hf_gsm_a_rr_report_type
,
11609 { "Report Type", "gsm_a.rr.report_type",
11610 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_report_type_value
), 0x0,
11613 { &hf_gsm_a_rr_reporting_rate
,
11614 { "Reporting Rate", "gsm_a.rr.reporting_rate",
11615 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_reporting_rate_value
), 0x0,
11618 { &hf_gsm_a_rr_invalid_bsic_reporting
,
11619 { "Invalid BSIC Reporting", "gsm_a.rr.invalid_bsic_reporting",
11620 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_invalid_bsic_reporting_value
), 0x0,
11623 { &hf_gsm_a_rr_scale_ord
,
11624 { "Scale Ord", "gsm_a.rr.scale_ord",
11625 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_scale_ord_vals
), 0x00,
11626 "Offset used for the reported RXLEV values (Scale Ord)", HFILL
}
11628 { &hf_gsm_a_rr_900_reporting_offset
,
11629 { "900 Reporting Offset", "gsm_a.rr.900_reporting_offset",
11630 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_xxx_reporting_offset_vals
), 0x00,
11631 "Offset to the reported value when prioritising the cells for reporting for GSM frequency band 900 (900 Reporting Offset)", HFILL
}
11633 { &hf_gsm_a_rr_900_reporting_threshold
,
11634 { "900 Reporting Threshold", "gsm_a.rr.900_reporting_threshold",
11635 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_gsm_reporting_threshold_vals
), 0x00,
11636 "Apply priority reporting if the reported value is above threshold for GSM frequency band 900 (900 Reporting Threshold)", HFILL
}
11638 { &hf_gsm_a_rr_1800_reporting_offset
,
11639 { "1800 Reporting Offset", "gsm_a.rr.1800_reporting_offset",
11640 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_xxx_reporting_offset_vals
), 0x00,
11641 "Offset to the reported value when prioritising the cells for reporting for GSM frequency band 1800 (1800 Reporting Offset)", HFILL
}
11643 { &hf_gsm_a_rr_1800_reporting_threshold
,
11644 { "1800 Reporting Threshold", "gsm_a.rr.1800_reporting_threshold",
11645 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_gsm_reporting_threshold_vals
), 0x00,
11646 "Apply priority reporting if the reported value is above threshold for GSM frequency band 1800 (1800 Reporting Threshold)", HFILL
}
11648 { &hf_gsm_a_rr_400_reporting_offset
,
11649 { "400 Reporting Offset", "gsm_a.rr.400_reporting_offset",
11650 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_xxx_reporting_offset_vals
), 0x00,
11651 "Offset to the reported value when prioritising the cells for reporting for GSM frequency band 400 (400 Reporting Offset)", HFILL
}
11653 { &hf_gsm_a_rr_400_reporting_threshold
,
11654 { "400 Reporting Threshold", "gsm_a.rr.400_reporting_threshold",
11655 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_gsm_reporting_threshold_vals
), 0x00,
11656 "Apply priority reporting if the reported value is above threshold for GSM frequency band 400 (400 Reporting Threshold)", HFILL
}
11658 { &hf_gsm_a_rr_1900_reporting_offset
,
11659 { "1900 Reporting Offset", "gsm_a.rr.1900_reporting_offset",
11660 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_xxx_reporting_offset_vals
), 0x00,
11661 "Offset to the reported value when prioritising the cells for reporting for GSM frequency band 1900 (1900 Reporting Offset)", HFILL
}
11663 { &hf_gsm_a_rr_1900_reporting_threshold
,
11664 { "1900 Reporting Threshold", "gsm_a.rr.1900_reporting_threshold",
11665 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_gsm_reporting_threshold_vals
), 0x00,
11666 "Apply priority reporting if the reported value is above threshold for GSM frequency band 1900 (1900 Reporting Threshold)", HFILL
}
11668 { &hf_gsm_a_rr_850_reporting_offset
,
11669 { "850 Reporting Offset", "gsm_a.rr.850_reporting_offset",
11670 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_xxx_reporting_offset_vals
), 0x00,
11671 "Offset to the reported value when prioritising the cells for reporting for GSM frequency band 850 (850 Reporting Offset)", HFILL
}
11673 { &hf_gsm_a_rr_850_reporting_threshold
,
11674 { "850 Reporting Threshold", "gsm_a.rr.900_reporting_threshold",
11675 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_gsm_reporting_threshold_vals
), 0x00,
11676 "Apply priority reporting if the reported value is above threshold for GSM frequency band 850 (850 Reporting Threshold)", HFILL
}
11678 { &hf_gsm_a_rr_network_control_order
,
11679 { "Network Control Order", "gsm_a.rr.network_control_order",
11680 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_network_control_order_vals
), 0x00,
11683 { &hf_gsm_a_rr_nc_non_drx_period
,
11684 { "NC Non DRX Period", "gsm_a.rr.nc_non_drx_period",
11685 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_nc_non_drx_period_vals
), 0x00,
11688 { &hf_gsm_a_rr_nc_reporting_period_i
,
11689 { "NC Reporting Period I", "gsm_a.rr.nc_reporting_period_i",
11690 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_nc_reporting_period_x_vals
), 0x00,
11691 "NC Reporting Period in Packet Idle mode (NC Reporting Period I)", HFILL
}
11693 { &hf_gsm_a_rr_nc_reporting_period_t
,
11694 { "NC Reporting Period T", "gsm_a.rr.nc_reporting_period_t",
11695 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_nc_reporting_period_x_vals
), 0x00,
11696 "NC Reporting Period in Packet Transfer mode (NC Reporting Period T)", HFILL
}
11698 { &hf_gsm_a_rr_index_start_3g
,
11699 { "Index Start 3G", "gsm_a.rr.index_start_3g",
11700 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
11703 { &hf_gsm_a_rr_absolute_index_start_emr
,
11704 { "Absolute Index Start EMR", "gsm_a.rr.absolute_index_start_emr",
11705 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
11708 { &hf_gsm_a_rr_qsearch_c_initial
,
11709 { "QSearch C Initial", "gsm_a.rr.qsearch_c_initial",
11710 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_qsearch_c_initial_value
), 0x0,
11711 "Qsearch value to be used in connected mode before Qsearch C is received (QSearch C Initial)", HFILL
}
11713 { &hf_gsm_a_rr_fdd_rep_quant
,
11714 { "FDD Rep Quant", "gsm_a.rr.fdd_rep_quant",
11715 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_fdd_rep_quant_value
), 0x0,
11716 "FDD Reporting Quantity (FDD Rep Quant)", HFILL
}
11718 { &hf_gsm_a_rr_fdd_multirat_reporting
,
11719 { "FDD Multirat Reporting", "gsm_a.rr.fdd_multirat_reporting",
11720 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
11721 "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
}
11723 { &hf_gsm_a_rr_tdd_multirat_reporting
,
11724 { "TDD Multirat Reporting", "gsm_a.rr.tdd_multirat_reporting",
11725 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
11726 "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
}
11728 { &hf_gsm_a_rr_qsearch_p
,
11729 { "Qsearch P", "gsm_a.rr.qsearch_p",
11730 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_qsearch_x_vals
), 0x00,
11731 "Search for 3G cells if signal level below threshold (Qsearch P)", HFILL
}
11733 { &hf_gsm_a_rr_3g_search_prio
,
11734 { "3G Search Prio (ignored in Rel-8)", "gsm_a.rr.3g_search_prio",
11735 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_3g_search_prio_value
), 0x0,
11738 { &hf_gsm_a_rr_fdd_reporting_offset
,
11739 { "FDD Reporting Offset", "gsm_a.rr.fdd_reporting_offset",
11740 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_xxx_reporting_offset_vals
), 0x00,
11741 "Offset to the reported value when prioritising the cells for reporting for FDD access technology (FDD Reporting Offset)", HFILL
}
11743 { &hf_gsm_a_rr_fdd_reporting_threshold_rscp
,
11744 { "FDD Reporting Threshold RSCP", "gsm_a.rr.fdd_reporting_threshold_rscp",
11745 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_wcdma_rscp_reporting_threshold_vals
), 0x00,
11746 "Apply priority reporting if the reported value is above threshold for FDD access technology (FDD Reporting Threshold)", HFILL
}
11748 { &hf_gsm_a_rr_fdd_reporting_threshold_ecn0
,
11749 { "FDD Reporting Threshold EcN0", "gsm_a.rr.fdd_reporting_threshold_ecn0",
11750 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_wcdma_ecn0_reporting_threshold_vals
), 0x00,
11751 "Apply priority reporting if the reported value is above threshold for FDD access technology (FDD Reporting Threshold)", HFILL
}
11753 { &hf_gsm_a_rr_tdd_reporting_offset
,
11754 { "TDD Reporting Offset", "gsm_a.rr.tdd_reporting_offset",
11755 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_xxx_reporting_offset_vals
), 0x00,
11756 "Offset to the reported value when prioritising the cells for reporting for TDD access technology (TDD Reporting Offset)", HFILL
}
11758 { &hf_gsm_a_rr_tdd_reporting_threshold_rscp
,
11759 { "TDD Reporting Threshold RSCP", "gsm_a.rr.tdd_reporting_threshold_rscp",
11760 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_wcdma_rscp_reporting_threshold_vals
), 0x00,
11761 "Apply priority reporting if the reported value is above threshold for TDD access technology (TDD Reporting Threshold)", HFILL
}
11763 { &hf_gsm_a_rr_tdd_reporting_threshold_ecn0
,
11764 { "TDD Reporting Threshold EcN0", "gsm_a.rr.tdd_reporting_threshold_ecn0",
11765 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_wcdma_ecn0_reporting_threshold_vals
), 0x00,
11766 "Apply priority reporting if the reported value is above threshold for TDD access technology (TDD Reporting Threshold)", HFILL
}
11768 { &hf_gsm_a_rr_fdd_reporting_threshold_2
,
11769 { "FDD Reporting Threshold 2", "gsm_a.rr.fdd_reporting_threshold_2",
11770 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
11771 "Reporting threshold for the CPICH parameter (Ec/No or RSCP) that is not reported according to FDD_REP_QUANT (FDD Reporting Threshold 2)", HFILL
}
11773 { &hf_gsm_a_rr_3g_ccn_active
,
11774 { "3G CCN Active", "gsm_a.rr.3g_ccn_active",
11775 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_3g_ccn_active_value
), 0x0,
11778 { &hf_gsm_a_rr_700_reporting_offset
,
11779 { "700 Reporting Offset", "gsm_a.rr.700_reporting_offset",
11780 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_xxx_reporting_offset_vals
), 0x00,
11781 "Offset to the reported value when prioritising the cells for reporting for GSM frequency band 700 (700 Reporting Offset)", HFILL
}
11783 { &hf_gsm_a_rr_700_reporting_threshold
,
11784 { "700 Reporting Threshold", "gsm_a.rr.700_reporting_threshold",
11785 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_gsm_reporting_threshold_vals
), 0x00,
11786 "Apply priority reporting if the reported value is above threshold for GSM frequency band 700 (700 Reporting Threshold)", HFILL
}
11788 { &hf_gsm_a_rr_810_reporting_offset
,
11789 { "810 Reporting Offset", "gsm_a.rr.810_reporting_offset",
11790 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_xxx_reporting_offset_vals
), 0x00,
11791 "Offset to the reported value when prioritising the cells for reporting for GSM frequency band 810 (810 Reporting Offset)", HFILL
}
11793 { &hf_gsm_a_rr_810_reporting_threshold
,
11794 { "810 Reporting Threshold", "gsm_a.rr.810_reporting_threshold",
11795 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_gsm_reporting_threshold_vals
), 0x00,
11796 "Apply priority reporting if the reported value is above threshold for GSM frequency band 810 (810 Reporting Threshold)", HFILL
}
11798 { &hf_gsm_a_rr_cbq
,
11799 { "CBQ", "gsm_a.rr.cbq",
11800 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
11801 "Cell Bar Qualify", HFILL
}
11803 { &hf_gsm_a_rr_cell_reselect_offset
,
11804 { "Cell Reselect Offset", "gsm_a.rr.cell_reselect_offset",
11805 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_cell_reselect_offset_vals
), 0x00,
11806 "Offset to the C2 reselection criterion (Cell Reselect Offset)", HFILL
}
11808 { &hf_gsm_a_rr_temporary_offset
,
11809 { "Temporary Offset", "gsm_a.rr.temporary_offset",
11810 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_temporary_offset_vals
), 0x0,
11811 "Negative offset to C2 for the duration of Penalty Time (Temporary Offset)", HFILL
}
11813 { &hf_gsm_a_rr_penalty_time
,
11814 { "Penalty Time", "gsm_a.rr.penalty_time",
11815 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_penalty_time_vals
), 0x0,
11816 "Duration for which the temporary offset is applied (Penalty Time)", HFILL
}
11818 { &hf_gsm_a_rr_gprs_ra_colour
,
11819 { "GPRS RA Colour", "gsm_a.rr.gprs_ra_colour",
11820 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
11823 { &hf_gsm_a_rr_si13_position
,
11824 { "SI13 Position", "gsm_a.rr.si13_position",
11825 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_si13_position_vals
), 0x0,
11828 { &hf_gsm_a_rr_power_offset
,
11829 { "Power Offset", "gsm_a.rr.power_offset",
11830 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_power_offset_vals
), 0x0,
11831 "Power offset used in conjunction with the MS TXPWR MAX CCH parameter by the class 3 DCS 1800 MS (Power Offset)", HFILL
}
11833 { &hf_gsm_a_rr_si2quater_position
,
11834 { "SI2quater Position", "gsm_a.rr.si2quater_position",
11835 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_si2quater_position_value
), 0x0,
11838 { &hf_gsm_a_rr_si13alt_position
,
11839 { "SI13alt Position", "gsm_a.rr.si13alt_position",
11840 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_si13alt_position_value
), 0x0,
11843 { &hf_gsm_a_rr_prio_thr
,
11844 { "Prio Thr", "gsm_a.rr.prio_thr",
11845 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_prio_thr_vals
), 0x0,
11846 "Prio signal strength threshold is related to RXLEV ACCESS_MIN (Prio Thr)", HFILL
}
11848 { &hf_gsm_a_rr_lsa_offset
,
11849 { "LSA Offset", "gsm_a.rr.lsa_offset",
11850 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_lsa_offset_vals
), 0x0,
11851 "Offset to be used for LSA cell re selection between cells with the same LSA priorities (LSA Offset)", HFILL
}
11853 { &hf_gsm_a_rr_cell_id
,
11854 { "Cell Identity", "gsm_a.rr.cell_id",
11855 FT_UINT16
, BASE_HEX_DEC
, 0, 0x0,
11858 { &hf_gsm_a_rr_paging_channel_restructuring
,
11859 { "Paging Channel Restructuring", "gsm_a.rr.paging_channel_restructuring",
11860 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_paging_channel_restructuring_value
), 0x0,
11863 { &hf_gsm_a_rr_nln_sacch
,
11864 { "NLN (SACCH)", "gsm_a.rr.nln_sacch",
11865 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
11868 { &hf_gsm_a_rr_nln_status_sacch
,
11869 { "NLN Status (SACCH)", "gsm_a.rr.nln_status_sacch",
11870 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
11873 { &hf_gsm_a_rr_nln_pch
,
11874 { "NLN (PCH)", "gsm_a.rr.nln_pch",
11875 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
11878 { &hf_gsm_a_rr_nln_status_pch
,
11879 { "NLN Status (PCH)", "gsm_a.rr.nln_status_pch",
11880 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
11883 { &hf_gsm_a_rr_vbs_vgcs_inband_notifications
,
11884 { "Inband Notifications", "gsm_a.rr.vbs_vgcs_inband_notifications",
11885 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_vbs_vgcs_inband_notifications_value
), 0x0,
11888 { &hf_gsm_a_rr_vbs_vgcs_inband_pagings
,
11889 { "Inband Pagings", "gsm_a.rr.vbs_vgcs_inband_pagings",
11890 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_vbs_vgcs_inband_pagings_value
), 0x0,
11893 { &hf_gsm_a_rr_rac
,
11894 { "RAC", "gsm_a.rr.rac",
11895 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
11896 "Routeing Area Code", HFILL
}
11898 { &hf_gsm_a_rr_max_lapdm
,
11899 { "Max LAPDm", "gsm_a.rr.max_lapdm",
11900 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_max_lapdm_vals
), 0x0,
11901 "Maximum number of LAPDm frames on which a layer 3 can be segmented into and be sent on the main DCCH (Max LAPDm)", HFILL
}
11903 { &hf_gsm_a_rr_gprs_ms_txpwr_max_ccch
,
11904 { "GPRS MS TxPwr Max CCH", "gsm_a.rr.gprs_ms_txpwr_max_cch",
11905 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
11908 { &hf_gsm_a_rr_dedicated_mode_mbms_notification_support
,
11909 { "Dedicated Mode MBMS Notification Support", "gsm_a.rr.dedicated_mode_mbms_notification_support",
11910 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_dedicated_mode_mbms_notification_support_value
), 0x0,
11913 { &hf_gsm_a_rr_mnci_support
,
11914 { "MNCI Support", "gsm_a.rr.mnci_support",
11915 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_mnci_support_value
), 0x0,
11916 "MBMS Neighbouring Cell Information Support (MNCI Support)", HFILL
}
11918 { &hf_gsm_a_rr_amr_config
,
11919 { "AMR Configuration", "gsm_a.rr.amr_config",
11920 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
11923 { &hf_gsm_a_rr_bcch_change_mark
,
11924 { "BCCH Change Mark", "gsm_a.rr.bcch_change_mark",
11925 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
11928 { &hf_gsm_a_rr_si_change_field
,
11929 { "SI Change Field", "gsm_a.rr.si_change_field",
11930 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_si_change_field_vals
), 0x0,
11933 { &hf_gsm_a_rr_si13_change_mark
,
11934 { "SI13 Change Mark", "gsm_a.rr.si13_change_mark",
11935 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
11938 { &hf_gsm_a_rr_hsn
,
11939 { "HSN", "gsm_a.rr.hsn",
11940 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
11941 "Hopping Sequence Number (HSN)", HFILL
}
11943 { &hf_gsm_a_rr_rfl_number
,
11944 { "RFL Number", "gsm_a.rr.rfl_number",
11945 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
11946 "Radio Frequency List Number (RFL Number)", HFILL
}
11948 { &hf_gsm_a_rr_arfcn_index
,
11949 { "ARFCN Index", "gsm_a.rr.arfcn_index",
11950 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
11953 { &hf_gsm_a_rr_ma_length
,
11954 { "MA Length", "gsm_a.rr.ma_length",
11955 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
11956 "Mobile Allocation Length (MA Length)", HFILL
}
11958 { &hf_gsm_a_rr_psi1_repeat_period
,
11959 { "PSI1 Repeat Period", "gsm_a.rr.psi1_repeat_period",
11960 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_psi1_repeat_period_vals
), 0x0,
11963 { &hf_gsm_a_rr_pbcch_pb
,
11964 { "Pb", "gsm_a.rr.pbcch_pb",
11965 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_pbcch_pb_vals
), 0x0,
11966 "Power reduction on PBCCH/PCCCH (Pb)", HFILL
}
11968 { &hf_gsm_a_rr_pbcch_tsc
,
11969 { "TSC", "gsm_a.rr.pbcch_tsc",
11970 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
11971 "Training Sequence Code for PBCCH (TSC)", HFILL
}
11973 { &hf_gsm_a_rr_pbcch_tn
,
11974 { "TN", "gsm_a.rr.pbcch_tn",
11975 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
11976 "Timeslot Number for PCCH (TN)", HFILL
}
11978 { &hf_gsm_a_rr_spgc_ccch_sup
,
11979 { "SPGC CCCH Sup", "gsm_a.rr.spgc_ccch_sup",
11980 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_spgc_ccch_sup_value
), 0x0,
11981 "Split PG Cycle Code on CCCH Support (SPGC CCCH Sup)", HFILL
}
11983 { &hf_gsm_a_rr_priority_access_thr
,
11984 { "Priority Access Thr", "gsm_a.rr.priority_access_thr",
11985 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_priority_access_thr_vals
), 0x0,
11986 "Priority Access Threshold for packet access (Priority Access Thr)", HFILL
}
11988 { &hf_gsm_a_rr_nmo
,
11989 { "NMO", "gsm_a.rr.nmo",
11990 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_nmo_vals
), 0x0,
11991 "Network mode of Operation (NMO)", HFILL
}
11993 { &hf_gsm_a_rr_t3168
,
11994 { "T3168", "gsm_a.rr.t3168",
11995 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_t3168_vals
), 0x0,
11998 { &hf_gsm_a_rr_t3192
,
11999 { "T3192", "gsm_a.rr.t3192",
12000 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_t3192_vals
), 0x0,
12003 { &hf_gsm_a_rr_drx_timer_max
,
12004 { "DRX Timer Max", "gsm_a.rr.drx_timer_max",
12005 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_drx_timer_max_vals
), 0x0,
12006 "Discontinuous Reception Timer Max (DRX Timer Max)", HFILL
}
12008 { &hf_gsm_a_rr_access_burst_type
,
12009 { "Access Burst Type", "gsm_a.rr.access_burst_type",
12010 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_access_burst_type_value
), 0x0,
12011 "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
}
12013 { &hf_gsm_a_rr_control_ack_type
,
12014 { "Control Ack Type", "gsm_a.rr.control_ack_type",
12015 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_control_ack_type_value
), 0x0,
12016 "Default format of the PACKET CONTROL ACKNOWLEDGMENT message (Control Ack Type)", HFILL
}
12018 { &hf_gsm_a_rr_bs_cv_max
,
12019 { "BS CV Max", "gsm_a.rr.bs_cv_max",
12020 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
12021 "Base Station Countdown Value Maximum (BS CV Max)", HFILL
}
12023 { &hf_gsm_a_rr_pan_dec
,
12024 { "PAN Dec", "gsm_a.rr.pan_dec",
12025 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
12028 { &hf_gsm_a_rr_pan_inc
,
12029 { "PAN Inc", "gsm_a.rr.pan_inc",
12030 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
12033 { &hf_gsm_a_rr_pan_max
,
12034 { "PAN Max", "gsm_a.rr.pan_max",
12035 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_pan_max_vals
), 0x0,
12038 { &hf_gsm_a_rr_egprs_packet_channel_request
,
12039 { "EGPRS Packet Channel Request", "gsm_a.rr.egprs_packet_channel_request",
12040 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_egprs_packet_channel_request_value
), 0x0,
12043 { &hf_gsm_a_rr_bep_period
,
12044 { "BEP Period", "gsm_a.rr.bep_period",
12045 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_bep_period_vals
), 0x0,
12048 { &hf_gsm_a_rr_pfc_feature_mode
,
12049 { "PFC Feature Mode", "gsm_a.rr.pfc_feature_mode",
12050 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_pfc_feature_mode_value
), 0x0,
12051 "Packet Flow Context Feature Mode (PFC Feature Mode)", HFILL
}
12053 { &hf_gsm_a_rr_dtm_support
,
12054 { "DTM Support", "gsm_a.rr.dtm_support",
12055 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_dtm_support_value
), 0x0,
12056 "Dual Transfer Mode Support (DTM Support)", HFILL
}
12058 { &hf_gsm_a_rr_bss_paging_coordination
,
12059 { "BSS Paging Coordination", "gsm_a.rr.bss_paging_coordination",
12060 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_bss_paging_coordination_value
), 0x0,
12063 { &hf_gsm_a_rr_ccn_active
,
12064 { "CCN Active", "gsm_a.rr.ccn_active",
12065 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_ccn_active_value
), 0x0,
12068 { &hf_gsm_a_rr_nw_ext_utbf
,
12069 { "NW Ext UTBF", "gsm_a.rr.nw_ext_utbf",
12070 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_nw_ext_utbf_value
), 0x0,
12071 "Network Extended Uplink TBF (NW Ext UTBF)", HFILL
}
12073 { &hf_gsm_a_rr_multiple_tbf_capability
,
12074 { "Multiple TBF Capability", "gsm_a.rr.multiple_tbf_capability",
12075 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_multiple_tbf_capability_value
), 0x0,
12078 { &hf_gsm_a_rr_ext_utbf_no_data
,
12079 { "Ext UTBF No Data", "gsm_a.rr.ext_utbf_no_data",
12080 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_ext_utbf_no_data_value
), 0x0,
12083 { &hf_gsm_a_rr_dtm_enhancements_capability
,
12084 { "DTM Enhancements Capability", "gsm_a.rr.dtm_enhancements_capability",
12085 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_dtm_enhancements_capability_value
), 0x0,
12088 { &hf_gsm_a_rr_reduced_latency_access
,
12089 { "Reduced Latency Access", "gsm_a.rr.reduced_latency_access",
12090 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_reduced_latency_access_value
), 0x0,
12093 { &hf_gsm_a_rr_alpha
,
12094 { "Alpha", "gsm_a.rr.alpha",
12095 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_alpha_vals
), 0x0,
12096 "Alpha parameter for GPR MS output power control (Alpha)", HFILL
}
12098 { &hf_gsm_a_rr_t_avg_w
,
12099 { "T Avg W", "gsm_a.rr.t_avg_w",
12100 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_t_avg_x_vals
), 0x0,
12101 "Signal strength filter period for power control in packet idle mode", HFILL
}
12103 { &hf_gsm_a_rr_t_avg_t
,
12104 { "T Avg T", "gsm_a.rr.t_avg_t",
12105 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_t_avg_x_vals
), 0x0,
12106 "Signal strength filter period for power control in packet transfer mode", HFILL
}
12108 { &hf_gsm_a_rr_pc_meas_chan
,
12109 { "PC Meas Chan", "gsm_a.rr.pc_meas_chan",
12110 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_pc_meas_chan_value
), 0x0,
12111 "Channel used to measure the received power level on the downlink for the purpose of the uplink power control (PC Meas Chan)", HFILL
}
12113 { &hf_gsm_a_rr_n_avg_i
,
12114 { "N Avg I", "gsm_a.rr.n_avg_i",
12115 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_n_avg_i_vals
), 0x0,
12116 "Interfering signal strength filter constant for power control (N Avg I)", HFILL
}
12118 { &hf_gsm_a_rr_sgsnr
,
12119 { "SGSNR", "gsm_a.rr.sgsnr",
12120 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_sgsnr_value
), 0x0,
12121 "SGSN Release (SGSNR)", HFILL
}
12123 { &hf_gsm_a_rr_si_status_ind
,
12124 { "SI Status Ind", "gsm_a.rr.si_status_ind",
12125 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_si_status_ind_value
), 0x0,
12128 { &hf_gsm_a_rr_lb_ms_txpwr_max_cch
,
12129 { "LB MS TxPwr Max CCCH", "gsm_a.rr.lb_ms_txpwr_max_cch",
12130 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_lb_ms_txpwr_max_cch_vals
), 0x0,
12131 "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
}
12133 { &hf_gsm_a_rr_si2n_support
,
12134 { "SI2n Support", "gsm_a.rr.si2n_support",
12135 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_si2n_support_vals
), 0x0,
12138 { &hf_gsm_a_rr_mi_index
,
12139 { "Measurement Information Index", "gsm_a.rr.mi_index",
12140 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
12143 { &hf_gsm_a_rr_mi_count
,
12144 { "Measurement Information Count", "gsm_a.rr.mi_count",
12145 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
12148 { &hf_gsm_a_rr_3g_wait
,
12149 { "3G Wait", "gsm_a.rr.3g_wait",
12150 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_3g_wait_vals
), 0x0,
12153 { &hf_gsm_a_rr_qsearch_c
,
12154 { "Qsearch C", "gsm_a.rr.qsearch_c",
12155 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_qsearch_x_vals
), 0x00,
12156 "Search for 3G cells if signal level is below (0 7) or above (8 15) threshold (Qsearch C)", HFILL
}
12158 { &hf_gsm_a_rr_bsic_seen
,
12159 { "BSIC Seen", "gsm_a.rr.bsic_seen",
12160 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_bsic_seen_value
), 0x0,
12163 { &hf_gsm_a_rr_scale
,
12164 { "Scale", "gsm_a.rr.scale",
12165 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_scale_value
), 0x0,
12166 "Offset applied for the reported RXLEV values (Scale)", HFILL
}
12168 { &hf_gsm_a_rr_mean_bep_gmsk
,
12169 { "Mean BEP GMSK", "gsm_a.rr.mean_bep_gmsk",
12170 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_mean_bep_gmsk_vals
), 0x00,
12171 "Mean Bit Error Probability in GMSK (Mean BEP GMSK)", HFILL
}
12173 { &hf_gsm_a_rr_mean_cv_bep
,
12174 { "CV BEP", "gsm_a.rr.cv_bep",
12175 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_cv_bep_vals
), 0x00,
12176 "Coefficient of Variation of the Bit Error Probability (CV BEP)", HFILL
}
12178 { &hf_gsm_a_rr_nbr_rcvd_blocks
,
12179 { "Nb Rcvd Blocks", "gsm_a.rr.nbr_rcvd_blocks",
12180 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12181 "Number of correctly decoded blocks that were completed during the measurement report period (Nb Rcvd Blocks)", HFILL
}
12183 { &hf_gsm_a_rr_reporting_quantity
,
12184 { "Reporting Quantity", "gsm_a.rr.reporting_quantity",
12185 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12188 { &hf_gsm_a_rr_3g_priority_param_desc_utran_start
,
12189 { "UTRAN Start", "gsm_a.rr.3g_priority.utran_start",
12190 FT_BOOLEAN
, BASE_NONE
, TFS(&priority_utran_start
), 0x00,
12193 { &hf_gsm_a_rr_3g_priority_param_desc_utran_stop
,
12194 { "UTRAN Stop", "gsm_a.rr.3g_priority.utran_stop",
12195 FT_BOOLEAN
, BASE_NONE
, TFS(&priority_utran_stop
), 0x00,
12198 { &hf_gsm_a_rr_3g_priority_param_desc_default_utran_prio
,
12199 { "DEFAULT_UTRAN_PRIORITY", "gsm_a.rr.3g_priority.default_utran_prio",
12200 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12203 { &hf_gsm_a_rr_3g_priority_param_desc_default_threshold_utran
,
12204 { "DEFAULT_THRESH_UTRAN", "gsm_a.rr.3g_priority.default_threshold_utran",
12205 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_thresh_utran_eutran_high_low
), 0x00,
12208 { &hf_gsm_a_rr_3g_priority_param_desc_default_utran_qrxlevmin
,
12209 { "DEFAULT_UTRAN_QRXLEVMIN", "gsm_a.rr.3g_priority.default_utran_qrxlevmin",
12210 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_utran_qrxlevmin
), 0x00,
12213 { &hf_gsm_a_rr_utran_frequency_index
,
12214 { "UTRAN Frequency Index", "gsm_a.rr.3g_priority.utran_frequency_index",
12215 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12218 { &hf_gsm_a_rr_utran_priority
,
12219 { "UTRAN_PRIORITY", "gsm_a.rr.3g_priority.utran_priority",
12220 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12223 { &hf_gsm_a_rr_thresh_utran_high
,
12224 { "THRESH_UTRAN_high", "gsm_a.rr.3g_priority.thres_utran_high",
12225 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_thresh_utran_eutran_high_low
), 0x00,
12228 { &hf_gsm_a_rr_thresh_utran_low
,
12229 { "THRESH_UTRAN_low", "gsm_a.rr.3g_priority.thres_utran_low",
12230 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_thresh_utran_eutran_high_low
), 0x00,
12233 { &hf_gsm_a_rr_utran_qrxlevmin
,
12234 { "UTRAN_QRXLEVMIN", "gsm_a.rr.3g_priority.utran_qrxlevmin",
12235 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_utran_qrxlevmin
), 0x00,
12238 { &hf_gsm_a_rr_eutran_ccn_active
,
12239 { "E-UTRAN_CCN_ACTIVE", "gsm_a.rr.3g_priority.eutran_ccn_active",
12240 FT_BOOLEAN
, BASE_NONE
, TFS(&eutran_ccn_active
), 0x00,
12243 { &hf_gsm_a_rr_eutran_start
,
12244 { "E-UTRAN Start", "gsm_a.rr.3g_priority.eutran_start",
12245 FT_BOOLEAN
, BASE_NONE
, TFS(&priority_utran_start
), 0x00,
12248 { &hf_gsm_a_rr_eutran_stop
,
12249 { "E-UTRAN Stop", "gsm_a.rr.3g_priority.utran_stop",
12250 FT_BOOLEAN
, BASE_NONE
, TFS(&priority_utran_stop
), 0x00,
12253 { &hf_gsm_a_rr_qsearch_c_eutran_initial
,
12254 { "Qsearch_C_E-UTRAN_Initial", "gsm_a.rr.qsearch_c_eutran_initial",
12255 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_qsearch_c_eutran_initial
), 0x00,
12258 { &hf_gsm_a_rr_eutran_multirat_reporting
,
12259 { "E-UTRAN_MULTIRAT_REPORTING (nb of E-UTRAN cells to be included in measurement report)", "gsm_a.rr.eutran_multirat_reporting",
12260 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12263 { &hf_gsm_a_rr_eutran_fdd_reporting_threshold_rsrp
,
12264 { "E-UTRAN_FDD_REPORTING_THRESHOLD", "gsm_a.rr.eutran_fdd_reporting_threshold_rsrp",
12265 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_lte_rsrp_reporting_threshold_vals
), 0x00,
12268 { &hf_gsm_a_rr_eutran_fdd_reporting_threshold_rsrq
,
12269 { "E-UTRAN_FDD_REPORTING_THRESHOLD", "gsm_a.rr.eutran_fdd_reporting_threshold_rsrq",
12270 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_lte_rsrq_reporting_threshold_vals
), 0x00,
12273 { &hf_gsm_a_rr_eutran_fdd_reporting_threshold_2
,
12274 { "E-UTRAN_FDD_REPORTING_THRESHOLD_2", "gsm_a.rr.eutran_fdd_reporting_threshold_2",
12275 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12278 { &hf_gsm_a_rr_eutran_fdd_reporting_offset
,
12279 { "E-UTRAN_FDD_REPORTING_OFFSET", "gsm_a.rr.eutran_fdd_reporting_offset",
12280 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12283 { &hf_gsm_a_rr_eutran_tdd_reporting_threshold_rsrp
,
12284 { "E-UTRAN_TDD_REPORTING_THRESHOLD", "gsm_a.rr.eutran_tdd_reporting_threshold_rsrp",
12285 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_lte_rsrp_reporting_threshold_vals
), 0x00,
12288 { &hf_gsm_a_rr_eutran_tdd_reporting_threshold_rsrq
,
12289 { "E-UTRAN_TDD_REPORTING_THRESHOLD", "gsm_a.rr.eutran_tdd_reporting_threshold_rsrq",
12290 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_lte_rsrq_reporting_threshold_vals
), 0x00,
12293 { &hf_gsm_a_rr_eutran_tdd_reporting_threshold_2
,
12294 { "E-UTRAN_TDD_REPORTING_THRESHOLD_2", "gsm_a.rr.eutran_tdd_reporting_threshold_2",
12295 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12298 { &hf_gsm_a_rr_eutran_tdd_reporting_offset
,
12299 { "E-UTRAN_TDD_REPORTING_OFFSET", "gsm_a.rr.eutran_tdd_reporting_offset",
12300 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12303 { &hf_gsm_a_rr_eutran_fdd_measurement_report_offset
,
12304 { "E-UTRAN_FDD_MEASUREMENT_REPORT_OFFSET", "gsm_a.rr.eutran_fdd_measurement_report_offset",
12305 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12308 { &hf_gsm_a_rr_eutran_tdd_measurement_report_offset
,
12309 { "E-UTRAN_TDD_MEASUREMENT_REPORT_OFFSET", "gsm_a.rr.eutran_tdd_measurement_report_offset",
12310 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12313 { &hf_gsm_a_rr_reporting_granularity
,
12314 { "REPORTING_GRANULARITY", "gsm_a.rr.reporting_granularity",
12315 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12318 { &hf_gsm_a_rr_eutran_default_measurement_control_eutran
,
12319 { "DEFAULT_Measurement_Control_E-UTRAN", "gsm_a.rr.eutran_default_measurement_control_eutran",
12320 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12323 { &hf_gsm_a_rr_eutran_measurement_control_eutran
,
12324 { "Measurement_Control_E-UTRAN", "gsm_a.rr.eutran_measurement_control_eutran",
12325 FT_BOOLEAN
, BASE_NONE
, TFS(&measurement_control_eutran
), 0x00,
12328 { &hf_gsm_a_rr_qsearch_p_eutran
,
12329 { "Qsearch_P_E-UTRAN", "gsm_a.rr.qsearch_p_eutran",
12330 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12333 { &hf_gsm_a_rr_serving_cell_priority_param_geran_priority
,
12334 { "GERAN_PRIORITY", "gsm_a.rr.serving_cell_priority_param_geran_priority",
12335 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12338 { &hf_gsm_a_rr_serving_cell_priority_param_thresh_prio_search
,
12339 { "THRESH_Priority_Search", "gsm_a.rr.serving_cell_priority_param_thresh_prio_search",
12340 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_serving_cell_thresh_priority_search
), 0x00,
12343 { &hf_gsm_a_rr_serving_cell_priority_param_thresh_gsm_low
,
12344 { "THRESH_GSM_low", "gsm_a.rr.serving_cell_priority_param_thresh_gsm_low",
12345 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_serving_cell_thresh_gsm_low
), 0x00,
12348 { &hf_gsm_a_rr_serving_cell_priority_param_h_prio
,
12349 { "H_PRIO", "gsm_a.rr.serving_cell_priority_param_h_prio",
12350 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_serving_cell_priority_param_h_prio
), 0x00,
12353 { &hf_gsm_a_rr_serving_cell_priority_param_t_reselection
,
12354 { "T_Reselection", "gsm_a.rr.serving_cell_priority_param_t_reselection",
12355 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_serving_cell_priority_param_t_reselection
), 0x00,
12358 { &hf_gsm_a_rr_eutran_earfcn
,
12359 { "EARFCN", "gsm_a.rr.earfcn",
12360 FT_UINT16
, BASE_DEC
, NULL
, 0x00,
12363 { &hf_gsm_a_rr_eutran_measurement_bandwidth
,
12364 { "Measurement Bandwidth", "gsm_a.rr.eutran_measurement_bandwidth",
12365 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_eutran_measurement_bandwidth
), 0x00,
12368 { &hf_gsm_a_rr_eutran_priority
,
12369 { "E-UTRAN_PRIORITY", "gsm_a.rr.eutran_priority",
12370 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12373 { &hf_gsm_a_rr_thresh_eutran_high
,
12374 { "THRESH_EUTRAN_high", "gsm_a.rr.thresh_eutran_high",
12375 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_thresh_utran_eutran_high_low
), 0x00,
12378 { &hf_gsm_a_rr_thresh_eutran_low
,
12379 { "THRESH_EUTRAN_low", "gsm_a.rr.thresh_eutran_low",
12380 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_thresh_utran_eutran_high_low
), 0x00,
12383 { &hf_gsm_a_rr_eutran_qrxlevmin
,
12384 { "E-UTRAN_QRXLEVMIN", "gsm_a.rr.eutran_qrxlevmin",
12385 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_eutran_qrxlevmin
), 0x00,
12388 { &hf_gsm_a_rr_eutran_pcid
,
12389 { "PCID", "gsm_a.rr.pcid",
12390 FT_UINT16
, BASE_DEC
, NULL
, 0x00,
12393 { &hf_gsm_a_rr_eutran_pcid_bitmap_group
,
12394 { "PCID_BITMAP_GROUP", "gsm_a.rr.pcid_bitmap_group",
12395 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12398 { &hf_gsm_a_rr_eutran_pcid_pattern_length
,
12399 { "PCID_Pattern_length", "gsm_a.rr.pcid_pattern_length",
12400 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_pcid_psc_pattern_length
), 0x00,
12404 { &hf_gsm_a_rr_eutran_pcid_pattern
,
12405 { "PCID_Pattern", "gsm_a.rr.pcid_pattern",
12406 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12410 { &hf_gsm_a_rr_eutran_pcid_pattern_sense
,
12411 { "PCID_pattern_sense", "gsm_a.rr.pcid_pattern_sense",
12412 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rr_pcid_pattern_sense
), 0x00,
12415 { &hf_gsm_a_rr_eutran_frequency_index
,
12416 { "E-UTRAN_FREQUENCY_INDEX", "gsm_a.rr.eutran_frequency_index",
12417 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12420 { &hf_gsm_a_rr_psc
,
12421 { "PSC", "gsm_a.rr.psc",
12422 FT_UINT16
, BASE_DEC
, NULL
, 0x00,
12425 { &hf_gsm_a_rr_utran_psc_pattern_length
,
12426 { "PSC_Pattern_length", "gsm_a.rr.psc_pattern_length",
12427 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_pcid_psc_pattern_length
), 0x00,
12430 { &hf_gsm_a_rr_utran_psc_pattern_sense
,
12431 { "PSC_pattern_sense", "gsm_a.rr.psc_pattern_sense",
12432 FT_BOOLEAN
, BASE_NONE
, NULL
, 0x00,
12435 { &hf_gsm_a_rr_utran_csg_fdd_uarfcn
,
12436 { "CSG FDD UARFCN", "gsm_a.rr.utran_csg_fdd_uarfcn",
12437 FT_UINT16
, BASE_DEC
, NULL
, 0x0000,
12440 { &hf_gsm_a_rr_utran_csg_tdd_uarfcn
,
12441 { "CSG TDD UARFCN", "gsm_a.rr.utran_csg_tdd_uarfcn",
12442 FT_UINT16
, BASE_DEC
, NULL
, 0x0000,
12445 { &hf_gsm_a_rr_csg_earfcn
,
12446 { "CSG_EARFCN", "gsm_a.rr.csg_earfcn",
12447 FT_UINT16
, BASE_DEC
, NULL
, 0x00,
12450 { &hf_gsm_a_rr_3g_control_param_desc_meas_ctrl_utran
,
12451 { "PCID_pattern_sense", "gsm_a.rr.meas_ctrl_utran",
12452 FT_BOOLEAN
, BASE_NONE
, TFS(&measurement_control_utran
), 0x00,
12455 { &hf_gsm_a_rr_extended_ra
,
12456 { "Extended_RA", "gsm_a.rr.extended_ra",
12457 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12460 { &hf_gsm_a_rr_access_tech_type
,
12461 { "Access_Technology_Type", "gsm_a.rr.access_tech_type",
12462 FT_UINT8
, BASE_DEC
, VALS(gsm_a_access_tech_type_vals
), 0x00,
12465 { &hf_gsm_a_rr_tfi_assignment
,
12466 { "TFI_Assignment", "gsm_a.rr.tfi_assignment",
12467 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12470 { &hf_gsm_a_rr_polling
,
12471 { "Polling", "gsm_a.rr.polling",
12472 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_polling_vals
), 0x00,
12475 { &hf_gsm_a_rr_usf
,
12476 { "USF", "gsm_a.rr.usf",
12477 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12480 { &hf_gsm_a_rr_usf_granularity
,
12481 { "USF_granularity", "gsm_a.rr.usf_granularity",
12482 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_usf_granularity_vals
), 0x00,
12486 { "P0", "gsm_a.rr.p0",
12487 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12490 { &hf_gsm_a_rr_pr_mode
,
12491 { "pr_mode", "gsm_a.rr.pr_mode",
12492 FT_BOOLEAN
, BASE_NONE
, NULL
, 0x00,
12495 { &hf_gsm_a_rr_egprs_mcs
,
12496 { "Egprs_Modulation_and_Coding_Scheme", "gsm_a.rr.egprs_mcs",
12497 FT_UINT8
, BASE_DEC
, VALS(gsm_a_egprs_mcs_vals
), 0x00,
12500 { &hf_gsm_a_rr_tlli_block_channel_coding
,
12501 { "TLLI_Block_Channel_Coding", "gsm_a.rr.tlli_block_cs",
12502 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_tlli_block_channel_coding_vals
), 0x00,
12505 { &hf_gsm_a_rr_bep_period2
,
12506 { "Bep_Period2", "gsm_a.rr.bep_period2",
12507 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12510 { &hf_gsm_a_rr_resegment
,
12511 { "Resegment", "gsm_a.rr.resegment",
12512 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_resegment_vals
), 0x00,
12515 { &hf_gsm_a_rr_egprs_window_size
,
12516 { "Egprs_Windows_Size", "gsm_a.rr.egprs_win_size",
12517 FT_UINT8
, BASE_DEC
, VALS(gsm_a_egprs_windows_size_vals
), 0x00,
12520 { &hf_gsm_a_rr_gamma
,
12521 { "Gamma", "gsm_a.rr.gamma",
12522 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_gamma_vals
), 0x00,
12525 { &hf_gsm_a_rr_timing_adv_index
,
12526 { "Timing_Advance_Index", "gsm_a.rr.timing_adv_idx",
12527 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12530 { &hf_gsm_a_rr_tbf_starting_time
,
12531 { "TBF_Starting_Time", "gsm_a.rr.tvf_start_time",
12532 FT_UINT16
, BASE_DEC
, NULL
, 0x00,
12535 { &hf_gsm_a_rr_num_of_radio_block_allocated
,
12536 { "Number_of_Radio_Block_Allocated", "gsm_a.rr.num_of_radio_blk_allocated",
12537 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12540 { &hf_gsm_a_rr_pfi
,
12541 { "PFI", "gsm_a.rr.pfi",
12542 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12545 { &hf_gsm_a_rr_mbms_service_id
,
12546 { "MBMS_Service_ID", "gsm_a.rr.mbms_service_id",
12547 FT_UINT32
, BASE_DEC
, NULL
, 0x00,
12550 { &hf_gsm_a_rr_ms_id
,
12551 { "MS_ID", "gsm_a.rr.ms_id",
12552 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12555 { &hf_gsm_a_rr_timing_adv_timeslot_num
,
12556 { "Timing_Advance_Timeslot_Number", "gsm_a.rr.timing_adv_ts",
12557 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12560 { &hf_gsm_a_rr_gprs_cs
,
12561 { "Channel_Coding_Command", "gsm_a.rr.gprs_cs",
12562 FT_UINT8
, BASE_DEC
, VALS(gsm_a_gprs_cs_vals
), 0x00,
12565 { &hf_gsm_a_rr_rlc_mode
,
12566 { "RLC_Mode", "gsm_a.rr.rlc_mode",
12567 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_rlc_mode_vals
), 0x00,
12570 { &hf_gsm_a_rr_ta_valid
,
12571 { "TA_Valid", "gsm_a.rr.ta_valid",
12572 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_ta_valid_vals
), 0x00,
12575 { &hf_gsm_a_rr_link_quality_meas_mode
,
12576 { "Link_Quality_Measure_Mode", "gsm_a.rr.link_qual_meas_mode",
12577 FT_UINT8
, BASE_DEC
, VALS(gsm_a_link_quality_meas_mode_vals
), 0x00,
12580 { &hf_gsm_a_rr_emr_bitmap_length
,
12581 { "BITMAP_LENGTH", "gsm_a.rr.emr_bitmap_len",
12582 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12585 { &hf_gsm_a_rr_eutran_mr_n_eutran
,
12586 { "N_E-UTRAN", "gsm_a.rr.eutran_mr_n_eutran",
12587 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12590 { &hf_gsm_a_rr_eutran_mr_freq_idx
,
12591 { "E-UTRAN_FREQUENCY_INDEX", "gsm_a.rr.eutran_mr_freq_idx",
12592 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12595 { &hf_gsm_a_rr_eutran_mr_cell_id
,
12596 { "CELL IDENTITY", "gsm_a.rr.eutran_mr_cell_id",
12597 FT_UINT16
, BASE_DEC
, NULL
, 0x00,
12600 { &hf_gsm_a_rr_eutran_mr_rpt_quantity
,
12601 { "REPORTING_QUANTITY", "gsm_a.rr.eutran_mr_rpt_quantity",
12602 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
12605 { &hf_gsm_a_rr_ma_channel_set
,
12606 { "Channel Set", "gsm_a.rr.ma_channel_set",
12607 FT_UINT8
, BASE_HEX
, NULL
, 0x00,
12610 { &hf_n_range_orig_arfcn
,
12611 { "ORIG-ARFCN", "gsm_a.rr.orig_arfcn",
12612 FT_UINT16
, BASE_DEC
, NULL
, 0x00,
12617 static hf_register_info hf_rr_short_pd
[] =
12619 { &hf_gsm_a_rr_short_pd
,
12620 { "Radio Resources Short Protocol Discriminator", "gsm_a.rr.short_pd",
12621 FT_UINT8
, BASE_HEX
, NULL
, 0x0,
12624 { &hf_gsm_a_rr_short_pd_msg_type
,
12625 { "Radio Resources Short PD Message Type", "gsm_a.rr.short_pd_type",
12626 FT_UINT8
, BASE_HEX
, VALS(gsm_a_rr_short_pd_msg_strings
), 0x0,
12629 { &hf_gsm_a_rr_short_l2_header
,
12630 { "Radio Resources Short L2 Header", "gsm_a.rr.short_l2_header",
12631 FT_UINT8
, BASE_HEX
, NULL
, 0x0,
12636 /* Setup protocol subtree array */
12637 #define NUM_INDIVIDUAL_ELEMS 3
12638 gint
*ett
[NUM_INDIVIDUAL_ELEMS
+
12639 NUM_GSM_DTAP_MSG_RR
+
12641 NUM_GSM_RR_REST_OCTETS_ELEM
+
12642 NUM_GSM_SACCH_MSG_RR
];
12644 static ei_register_info ei
[] = {
12645 { &ei_gsm_a_rr_ie_overrun
, { "gsm_a.rr.ie_overrun", PI_MALFORMED
, PI_ERROR
, "IE over-runs stated length", EXPFILL
}},
12646 { &ei_gsm_a_rr_ie_underrun
, { "gsm_a.rr.ie_underrun", PI_COMMENTS_GROUP
, PI_NOTE
, "IE under-runs stated length", EXPFILL
}},
12649 expert_module_t
* expert_a_rr
;
12651 ett
[0] = &ett_ccch_msg
;
12652 ett
[1] = &ett_ccch_oct_1
;
12653 ett
[2] = &ett_sacch_msg
;
12655 last_offset
= NUM_INDIVIDUAL_ELEMS
;
12657 for (i
=0; i
< NUM_GSM_DTAP_MSG_RR
; i
++, last_offset
++)
12659 ett_gsm_dtap_msg_rr
[i
] = -1;
12660 ett
[last_offset
] = &ett_gsm_dtap_msg_rr
[i
];
12663 for (i
=0; i
< NUM_GSM_RR_ELEM
; i
++, last_offset
++)
12665 ett_gsm_rr_elem
[i
] = -1;
12666 ett
[last_offset
] = &ett_gsm_rr_elem
[i
];
12669 for (i
=0; i
< NUM_GSM_RR_REST_OCTETS_ELEM
; i
++, last_offset
++)
12671 ett_gsm_rr_rest_octets_elem
[i
] = -1;
12672 ett
[last_offset
] = &ett_gsm_rr_rest_octets_elem
[i
];
12675 for (i
=0; i
< NUM_GSM_SACCH_MSG_RR
; i
++, last_offset
++)
12677 ett_gsm_sacch_msg_rr
[i
] = -1;
12678 ett
[last_offset
] = &ett_gsm_sacch_msg_rr
[i
];
12681 /* Register the protocol name and description */
12683 proto_register_protocol("GSM A-I/F Radio Resource Management", "GSM RR", "gsm_a.rr");
12685 proto_register_field_array(proto_a_rr
, hf
, array_length(hf
));
12686 expert_a_rr
= expert_register_protocol(proto_a_rr
);
12687 expert_register_field_array(expert_a_rr
, ei
, array_length(ei
));
12689 /* Register the protocol name and description */
12691 proto_register_protocol("GSM CCCH", "GSM CCCH", "gsm_a.ccch");
12693 /* subdissector code */
12694 register_dissector("gsm_a_ccch", dissect_ccch
, proto_a_ccch
);
12696 /* Register the protocol name and description */
12698 proto_register_protocol("GSM SACCH", "GSM SACCH", "gsm_a.sacch");
12700 proto_register_field_array(proto_a_sacch
, hf_rr_short_pd
, array_length(hf_rr_short_pd
));
12702 /* subdissector code */
12703 register_dissector("gsm_a_sacch", dissect_sacch
, proto_a_sacch
);
12705 /* subtree array (for both sub-dissectors) */
12706 proto_register_subtree_array(ett
, array_length(ett
));
12710 proto_reg_handoff_gsm_a_rr(void)
12712 data_handle
= find_dissector("data");
12713 rrc_irat_ho_info_handle
= find_dissector("rrc.irat.irat_ho_info");
12714 rrc_irat_ho_to_utran_cmd_handle
= find_dissector("rrc.irat.ho_to_utran_cmd");
12715 rrlp_dissector
= find_dissector("rrlp");