2 * Routines for Radio Signalling Link (RSL) dissection.
4 * Copyright 2007, 2011, Anders Broman <anders.broman@ericsson.com>
8 * Wireshark - Network traffic analyzer
9 * By Gerald Combs <gerald@wireshark.org>
10 * Copyright 1998 Gerald Combs
12 * Copied from packet-cops.c
14 * This program is free software; you can redistribute it and/or
15 * modify it under the terms of the GNU General Public License
16 * as published by the Free Software Foundation; either version 2
17 * of the License, or (at your option) any later version.
19 * This program is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU General Public License for more details.
24 * You should have received a copy of the GNU General Public License
25 * along with this program; if not, write to the Free Software
26 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
28 * REF: 3GPP TS 48.058 version 6.1.0 Release 6
29 * http://www.3gpp.org/ftp/Specs/html-info/48058.htm
40 #include <epan/packet.h>
41 #include <epan/lapd_sapi.h>
43 #include "packet-gsm_a_common.h"
45 /* Initialize the protocol and registered fields */
46 static int proto_rsl = -1;
48 static int hf_rsl_msg_type = -1;
49 static int hf_rsl_T_bit = -1;
50 static int hf_rsl_msg_dsc = -1;
51 static int hf_rsl_ie_id = -1;
52 static int hf_rsl_ie_length = -1;
53 static int hf_rsl_ch_no_Cbits = -1;
54 static int hf_rsl_ch_no_TN = -1;
55 static int hf_rsl_acc_delay = -1;
56 static int hf_rsl_rach_slot_cnt = -1;
57 static int hf_rsl_rach_busy_cnt = -1;
58 static int hf_rsl_rach_acc_cnt = -1;
59 static int hf_rsl_req_ref_ra = -1;
60 static int hf_rsl_req_ref_T1prim = -1;
61 static int hf_rsl_req_ref_T3 = -1;
62 static int hf_rsl_req_ref_T2 = -1;
63 static int hf_rsl_timing_adv = -1;
64 static int hf_rsl_ho_ref = -1;
65 static int hf_rsl_l1inf_power_lev = -1;
66 static int hf_rsl_l1inf_fpc = -1;
67 static int hf_rsl_ms_power_lev = -1;
68 static int hf_rsl_ms_fpc = -1;
69 static int hf_rsl_act_timing_adv = -1;
70 static int hf_rsl_phy_ctx = -1;
71 static int hf_rsl_na = -1;
72 static int hf_rsl_ch_type = -1;
73 static int hf_rsl_prio = -1;
74 static int hf_rsl_sapi = -1;
75 static int hf_rsl_rbit = -1;
76 static int hf_rsl_a3a2 = -1;
77 static int hf_rsl_a1_0 = -1;
78 static int hf_rsl_a1_1 = -1;
79 static int hf_rsl_a1_2 = -1;
80 static int hf_rsl_epc_mode = -1;
81 static int hf_rsl_bs_fpc_epc_mode = -1;
82 static int hf_rsl_bs_power = -1;
83 static int hf_rsl_cm_dtxd = -1;
84 static int hf_rsl_cm_dtxu = -1;
85 static int hf_rsl_speech_or_data = -1;
86 static int hf_rsl_ch_rate_and_type = -1;
87 static int hf_rsl_speech_coding_alg = -1;
88 static int hf_rsl_t_nt_bit = -1;
89 static int hf_rsl_ra_if_data_rte = -1;
90 static int hf_rsl_data_rte = -1;
91 static int hf_rsl_alg_id = -1;
92 static int hf_rsl_key = -1;
93 static int hf_rsl_cause = -1;
94 static int hf_rsl_rel_mode = -1;
95 static int hf_rsl_interf_band = -1;
96 static int hf_rsl_interf_band_reserved = -1;
97 static int hf_rsl_meas_res_no = -1;
98 static int hf_rsl_extension_bit = -1;
99 static int hf_rsl_dtxd = -1;
100 static int hf_rsl_rxlev_full_up = -1;
101 static int hf_rsl_rxlev_sub_up = -1;
102 static int hf_rsl_rxqual_full_up = -1;
103 static int hf_rsl_rxqual_sub_up = -1;
104 static int hf_rsl_class = -1;
105 static int hf_rsl_paging_grp = -1;
106 static int hf_rsl_paging_load = -1;
107 static int hf_rsl_sys_info_type = -1;
108 static int hf_rsl_timing_offset = -1;
109 static int hf_rsl_ch_needed = -1;
110 static int hf_rsl_cbch_load_type = -1;
111 static int hf_rsl_msg_slt_cnt = -1;
112 static int hf_rsl_ch_ind = -1;
113 static int hf_rsl_command = -1;
114 static int hf_rsl_emlpp_prio = -1;
115 static int hf_rsl_rtd = -1;
116 static int hf_rsl_delay_ind = -1;
117 static int hf_rsl_tfo = -1;
119 /* Initialize the subtree pointers */
120 static int ett_rsl = -1;
121 static int ett_ie_link_id = -1;
122 static int ett_ie_act_type = -1;
123 static int ett_ie_bs_power = -1;
124 static int ett_ie_ch_id = -1;
125 static int ett_ie_ch_mode = -1;
126 static int ett_ie_enc_inf = -1;
127 static int ett_ie_ch_no = -1;
128 static int ett_ie_frame_no = -1;
129 static int ett_ie_ho_ref = -1;
130 static int ett_ie_l1_inf = -1;
131 static int ett_ie_L3_inf = -1;
132 static int ett_ie_ms_id = -1;
133 static int ett_ie_ms_pow = -1;
134 static int ett_ie_phy_ctx = -1;
135 static int ett_ie_paging_grp = -1;
136 static int ett_ie_paging_load = -1;
137 static int ett_ie_access_delay = -1;
138 static int ett_ie_rach_load = -1;
139 static int ett_ie_req_ref = -1;
140 static int ett_ie_rel_mode = -1;
141 static int ett_ie_resource_inf = -1;
142 static int ett_ie_rlm_cause =-1;
143 static int ett_ie_staring_time = -1;
144 static int ett_ie_timing_adv = -1;
145 static int ett_ie_uplink_meas = -1;
146 static int ett_ie_full_imm_ass_inf = -1;
147 static int ett_ie_smscb_inf = -1;
148 static int ett_ie_ms_timing_offset = -1;
149 static int ett_ie_err_msg = -1;
150 static int ett_ie_full_bcch_inf = -1;
151 static int ett_ie_ch_needed = -1;
152 static int ett_ie_cb_cmd_type = -1;
153 static int ett_ie_smscb_mess = -1;
154 static int ett_ie_cbch_load_inf = -1;
155 static int ett_ie_smscb_ch_ind = -1;
156 static int ett_ie_grp_call_ref = -1;
157 static int ett_ie_ch_desc = -1;
158 static int ett_ie_nch_drx = -1;
159 static int ett_ie_cmd_ind = -1;
160 static int ett_ie_emlpp_prio = -1;
161 static int ett_ie_uic = -1;
162 static int ett_ie_main_ch_ref = -1;
163 static int ett_ie_multirate_conf = -1;
164 static int ett_ie_multirate_cntrl = -1;
165 static int ett_ie_sup_codec_types = -1;
166 static int ett_ie_codec_conf = -1;
167 static int ett_ie_rtd = -1;
168 static int ett_ie_tfo_status = -1;
169 static int ett_ie_llp_apdu = -1;
170 static int ett_ie_tfo_transp_cont = -1;
171 static int ett_ie_cause = -1;
172 static int ett_ie_meas_res_no = -1;
173 static int ett_ie_message_id = -1;
174 static int ett_ie_sys_info_type = -1;
176 static proto_tree *top_tree;
177 static dissector_handle_t gsm_a_ccch_handle;
178 static dissector_handle_t gsm_a_dtap_handle;
180 static gboolean is_si2q = FALSE;
182 /* Forward declarations */
183 static int dissct_rsl_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset);
185 static const true_false_string rsl_t_bit_vals = {
186 "Considered transparent by BTS",
187 "Not considered transparent by BTS"
190 static const true_false_string rsl_na_vals = {
195 static const true_false_string rsl_extension_bit_value = {
201 * 9.1 Message discriminator
203 /* Radio link Layer Management Messages */
204 static const value_string rsl_msg_disc_vals[] = {
205 { 0x00, "Reserved" },
206 { 0x01, "Radio Link Layer Management messages" },
207 { 0x04, "Dedicated Channel Management messages" },
208 { 0x06, "Common Channel Management messages" },
209 { 0x08, "TRX Management messages" },
210 { 0x16, "Location Services messages" },
216 /* Radio link Layer Management Messages */
217 #define RSL_MSG_TYPE_DATA_REQ 1 /* 0x01 */
218 #define RSL_MSG_TYPE_DATA_IND 2 /* 0x02 */
219 #define RSL_MSG_TYPE_ERROR_IND 3 /* 0x03 */
220 #define RSL_MSG_TYPE_EST_REQ 4 /* 0x04 */
221 #define RSL_MSG_TYPE_EST_CONF 5 /* 0x05 */
222 #define RSL_MSG_EST_IND 6 /* 0x06 */
223 #define RSL_MSG_REL_REQ 7 /* 0x07 */
224 #define RSL_MSG_REL_CONF 8 /* 0x08 */
225 #define RSL_MSG_REL_IND 9 /* 0x09 */
226 #define RSL_MSG_UNIT_DATA_REQ 10 /* 0x0a */
227 /* Common Channel Management messages */
228 #define RSL_MSG_BCCH_INFO 17 /* 0x11 */
229 #define RSL_MSG_CCCH_LOAD_IND 18 /* 0x12 */
230 #define RSL_MSG_CHANRQD 19 /* 0x13 */
231 #define RSL_MSG_DELETE_IND 20 /* 0x14 */
232 #define RSL_MSG_PAGING_CMD 21 /* 0x15 */
233 #define RSL_MSG_IMM_ASS_CMD 22 /* 0x16 */
234 #define RSL_MSG_SMS_BC_REQ 23 /* 0x17 8.5.7 */
235 #define RSL_MSG_RF_RES_IND 25 /* 8.6.1 */
236 #define RSL_MSG_SACCH_FILL 26 /* 8.6.2 */
238 #define RSL_MSG_OVERLOAD 27 /* 8.6.3 */
239 #define RSL_MSG_ERROR_REPORT 28 /* 8.6.4 */
240 #define RSL_MSG_SMS_BC_CMD 29 /* 8.5.8 */
241 #define RSL_MSG_CBCH_LOAD_IND 30 /* 8.5.9 */
242 #define RSL_MSG_NOT_CMD 31 /* 8.5.10 */
244 /* 0 0 1 - - - - - Dedicated Channel Management messages: */
245 #define RSL_MSG_CHAN_ACTIV 33
246 #define RSL_MSG_CHAN_ACTIV_ACK 34
247 #define RSL_MSG_CHAN_ACTIV_N_ACK 35
248 #define RSL_MSG_CONN_FAIL 36
249 #define RSL_MSG_DEACTIVATE_SACCH 37
251 #define RSL_MSG_ENCR_CMD 38 /* 8.4.6 */
252 #define RSL_MSG_HANDODET 39 /* 8.4.7 */
253 #define RSL_MSG_MEAS_RES 40 /* 8.4.8 */
254 #define RSL_MSG_MODE_MODIFY_REQ 41 /* 8.4.9 */
255 #define RSL_MSG_MODE_MODIFY_ACK 42 /* 8.4.10 */
256 #define RSL_MSG_MODE_MODIFY_NACK 43 /* 8.4.11 */
257 #define RSL_MSG_PHY_CONTEXT_REQ 44 /* 8.4.12 */
258 #define RSL_MSG_PHY_CONTEXT_CONF 45 /* 8.4.13 */
259 #define RSL_MSG_RF_CHAN_REL 46 /* 8.4.14 */
260 #define RSL_MSG_MS_POWER_CONTROL 47 /* 8.4.15 */
261 #define RSL_MSG_BS_POWER_CONTROL 48 /* 8.4.16 */
262 #define RSL_MSG_PREPROC_CONFIG 49 /* 8.4.17 */
263 #define RSL_MSG_PREPROC_MEAS_RES 50 /* 8.4.18 */
264 #define RSL_MSG_RF_CHAN_REL_ACK 51 /* 8.4.19 */
265 #define RSL_MSG_SACCH_INFO_MODIFY 52 /* 8.4.20 */
266 #define RSL_MSG_TALKER_DET 53 /* 8.4.21 */
267 #define RSL_MSG_LISTENER_DET 54 /* 8.4.22 */
268 #define RSL_MSG_REMOTE_CODEC_CONF_REP 55 /* 8.4.23 */
269 #define RSL_MSG_R_T_D_REP 56 /* 8.4.24 */
270 #define RSL_MSG_PRE_HANDO_NOTIF 57 /* 8.4.25 */
271 #define RSL_MSG_MR_CODEC_MOD_REQ 58 /* 8.4.26 */
272 #define RSL_MSG_MR_CODEC_MOD_ACK 59 /* 8.4.27 */
273 #define RSL_MSG_MR_CODEC_MOD_NACK 60 /* 8.4.28 */
274 #define RSL_MSG_MR_CODEC_MOD_PER 61 /* 8.4.29 */
275 #define RSL_MSG_TFO_REP 62 /* 8.4.30 */
276 #define RSL_MSG_TFO_MOD_REQ 63 /* 8.4.31 */
277 /* 0 1 - - - - - - Location Services messages: */
278 #define RSL_MSG_LOC_INF 65 /* 8.7.1 */
281 static const value_string rsl_msg_type_vals[] = {
282 /* 0 0 0 0 - - - - Radio Link Layer Management messages: */
283 { 0x01, "DATA REQuest" }, /* 8.3.1 */
284 { 0x02, "DATA INDication" }, /* 8.3.2 */
285 { 0x03, "ERROR INDication" }, /* 8.3.3 */
286 { 0x04, "ESTablish REQuest" }, /* 8.3.4 */
287 { 0x05, "ESTablish CONFirm" }, /* 8.3.5 */
288 { 0x06, "ESTablish INDication" }, /* 8.3.6 */
289 { 0x07, "RELease REQuest" }, /* 8.3.7 */
290 { 0x08, "RELease CONFirm" }, /* 8.3.8 */
291 { 0x09, "RELease INDication" }, /* 8.3.9 */
292 { 0x0a, "UNIT DATA REQuest" }, /* 8.3.10 */
293 /* 0 0 0 1 - - - - Common Channel Management/TRX Management messages: */
294 { 0x11, "BCCH INFOrmation" }, /* 8.5.1 */
295 { 0x12, "CCCH LOAD INDication" }, /* 8.5.2 */
296 { 0x13, "CHANnel ReQuireD" }, /* 8.5.3 */
297 { 0x14, "DELETE INDication" }, /* 8.5.4 */
298 { 0x15, "PAGING CoMmanD" }, /* 8.5.5 */
299 { 0x16, "IMMEDIATE ASSIGN COMMAND" }, /* 8.5.6 */
300 { 0x17, "SMS BroadCast REQuest" }, /* 8.5.7 */
301 { 0x19, "RF RESource INDication" }, /* 8.6.1 */
302 { 0x1a, "SACCH FILLing" }, /* 8.6.2 */
303 { 0x1b, "OVERLOAD" }, /* 8.6.3 */
304 { 0x1c, "ERROR REPORT" }, /* 8.6.4 */
305 { 0x1d, "SMS BroadCast CoMmanD" }, /* 8.5.8 */
306 { 0x1e, "CBCH LOAD INDication" }, /* 8.5.9 */
307 { 0x1f, "NOTification CoMmanD" }, /* 8.5.10 */
308 /* 0 0 1 - - - - - Dedicated Channel Management messages: */
309 { 0x21, "CHANnel ACTIVation" }, /* 8.4.1 */
310 { 0x22, "CHANnel ACTIVation ACKnowledge" }, /* 8.4.2 */
311 { 0x23, "CHANnel ACTIVation Negative ACK" }, /* 8.4.3 */
312 { 0x24, "CONNection FAILure" }, /* 8.4.4 */
313 { 0x25, "DEACTIVATE SACCH" }, /* 8.4.5 */
314 { 0x26, "ENCRyption CoMmanD" }, /* 8.4.6 */
315 { 0x27, "HANDOver DETection" }, /* 8.4.7 */
316 { 0x28, "MEASurement RESult" }, /* 8.4.8 */
317 { 0x29, "MODE MODIFY REQuest" }, /* 8.4.9 */
318 { 0x2a, "MODE MODIFY ACKnowledge" }, /* 8.4.10 */
319 { 0x2b, "MODE MODIFY Negative ACKnowledge" }, /* 8.4.11 */
320 { 0x2c, "PHYsical CONTEXT REQuest" }, /* 8.4.12 */
321 { 0x2d, "PHYsical CONTEXT CONFirm" }, /* 8.4.13 */
322 { 0x2e, "RF CHANnel RELease" }, /* 8.4.14 */
323 { 0x2f, "MS POWER CONTROL" }, /* 8.4.15 */
324 { 0x30, "BS POWER CONTROL" }, /* 8.4.16 */
325 { 0x31, "PREPROCess CONFIGure" }, /* 8.4.17 */
326 { 0x32, "PREPROCessed MEASurement RESult" }, /* 8.4.18 */
327 { 0x33, "RF CHANnel RELease ACKnowledge" }, /* 8.4.19 */
328 { 0x34, "SACCH INFO MODIFY" }, /* 8.4.20 */
329 { 0x35, "TALKER DETection" }, /* 8.4.21 */
330 { 0x36, "LISTENER DETection" }, /* 8.4.22 */
331 { 0x37, "REMOTE CODEC CONFiguration REPort" }, /* 8.4.23 */
332 { 0x38, "Round Trip Delay REPort" }, /* 8.4.24 */
333 { 0x39, "PRE-HANDOver NOTIFication" }, /* 8.4.25 */
334 { 0x3a, "MultiRate CODEC MODification REQest" }, /* 8.4.26 */
335 { 0x3b, "MultiRate CODEC MOD ACKnowledge" }, /* 8.4.27 */
336 { 0x3c, "MultiRate CODEC MOD Negative ACKnowledge" }, /* 8.4.28 */
337 { 0x3d, "MultiRate CODEC MOD PERformed" }, /* 8.4.29 */
338 { 0x3e, "TFO REPort" }, /* 8.4.30 */
339 { 0x3f, "TFO MODification REQuest" }, /* 8.4.31 */
340 /* 0 1 - - - - - - Location Services messages: */
341 { 0x41, "Location Information" }, /* 8.7.1 */
345 #define RSL_IE_CH_NO 1
346 #define RSL_IE_LINK_ID 2
347 #define RSL_IE_ACT_TYPE 3
348 #define RSL_IE_BS_POW 4
349 #define RSL_IE_CH_ID 5
350 #define RSL_IE_CH_MODE 6
351 #define RSL_IE_ENC_INF 7
352 #define RSL_IE_FRAME_NO 8
353 #define RSL_IE_HO_REF 9
354 #define RSL_IE_L1_INF 10
355 #define RSL_IE_L3_INF 11
356 #define RSL_IE_MS_ID 12
357 #define RSL_IE_MS_POW 13
358 #define RSL_IE_PAGING_GRP 14
359 #define RSL_IE_PAGING_LOAD 15
360 #define RSL_IE_PHY_CTX 16
361 #define RSL_IE_ACCESS_DELAY 17
362 #define RSL_IE_RACH_LOAD 18
363 #define RSL_IE_REQ_REF 19
364 #define RSL_IE_REL_MODE 20
365 #define RSL_IE_RESOURCE_INF 21
366 #define RSL_IE_RLM_CAUSE 22
367 #define RSL_IE_STARTING_TIME 23
368 #define RSL_IE_TIMING_ADV 24
369 #define RSL_IE_UPLINK_MEAS 25
370 #define RSL_IE_CAUSE 26
371 #define RSL_IE_MEAS_RES_NO 27
372 #define RSL_IE_MESSAGE_ID 28
374 #define RSL_IE_SYS_INFO_TYPE 30
379 #define RSL_IE_FULL_IMM_ASS_INF 35
380 #define RSL_IE_SMSCB_INF 36
381 #define RSL_IE_FULL_MS_TIMING_OFFSET 37
382 #define RSL_IE_ERR_MSG 38
383 #define RSL_IE_FULL_BCCH_INF 39
384 #define RSL_IE_CH_NEEDED 40
385 #define RSL_IE_CB_CMD_TYPE 41
386 #define RSL_IE_SMSCB_MESS 42
387 #define RSL_IE_CBCH_LOAD_INF 43
390 #define RSL_IE_SMSCB_CH_IND 46
391 #define RSL_IE_GRP_CALL_REF 47
392 #define RSL_IE_CH_DESC 48
393 #define RSL_IE_NCH_DRX_INF 49
394 #define RSL_IE_CMD_IND 50
395 #define RSL_IE_EMLPP_PRIO 51
396 #define RSL_IE_UIC 52
397 #define RSL_IE_MAIN_CH_REF 53
398 #define RSL_IE_MULTIRATE_CONF 54
399 #define RSL_IE_MULTIRATE_CNTRL 55
400 #define RSL_IE_SUP_CODEC_TYPES 56
401 #define RSL_IE_CODEC_CONF 57
402 #define RSL_IE_RTD 58
403 #define RSL_IE_TFO_STATUS 59
404 #define RSL_IE_LLP_APDU 60
405 #define RSL_IE_TFO_TRANSP_CONT 61
407 static const value_string rsl_ie_type_vals[] = {
408 { 0x01, "Channel Number" }, /* 9.3.1 */
409 { 0x02, "Link Identifier" }, /* 9.3.2 */
410 { 0x03, "Activation Type" }, /* 9.3.3 */
411 { 0x04, "BS Power" }, /* 9.3.4 */
412 { 0x05, "Channel Identification" }, /* 9.3.5 */
413 { 0x06, "Channel Mode" }, /* 9.3.6 */
414 { 0x07, "Encryption Information" }, /* 9.3.7 */
415 { 0x08, "Frame Number" }, /* 9.3.8 */
416 { 0x09, "Handover Reference" }, /* 9.3.9 */
417 { 0x0a, "L1 Information" }, /* 9.3.10 */
418 { 0x0b, "L3 Information" }, /* 9.3.11 */
419 { 0x0c, "MS Identity" }, /* 9.3.12 */
420 { 0x0d, "MS Power" }, /* 9.3.13 */
421 { 0x0e, "Paging Group" }, /* 9.3.14 */
422 { 0x0f, "Paging Load" }, /* 9.3.15 */
423 { 0x10, "Physical Context" }, /* 9.3.16 */
424 { 0x11, "Access Delay" }, /* 9.3.17 */
425 { 0x12, "RACH Load" }, /* 9.3.18 */
426 { 0x13, "Request Reference" }, /* 9.3.19 */
427 { 0x14, "Release Mode" }, /* 9.3.20 */
428 { 0x15, "Resource Information" }, /* 9.3.21 */
429 { 0x16, "RLM Cause" }, /* 9.3.22 */
430 { 0x17, "Starting Time" }, /* 9.3.23 */
431 { 0x18, "Timing Advance" }, /* 9.3.24 */
432 { 0x19, "Uplink Measurements" }, /* 9.3.25 */
433 { 0x1a, "Cause" }, /* 9.3.26 */
434 { 0x1b, "Measurement Result Number" }, /* 9.3.27 */
435 { 0x1c, "Message Identifier" }, /* 9.3.28 */
436 { 0x1d, "reserved" }, /* */
437 { 0x1e, "System Info Type" }, /* 9.3.30 */
438 { 0x1f, "MS Power Parameters" }, /* 9.3.31 */
439 { 0x20, "BS Power Parameters" }, /* 9.3.32 */
440 { 0x21, "Pre-processing Parameters" }, /* 9.3.33 */
441 { 0x22, "Pre-processed Measurements" }, /* 9.3.34 */
442 { 0x23, "reserved" }, /* */
443 { 0x24, "SMSCB Information" }, /* 9.3.36 */
444 { 0x25, "MS Timing Offset" }, /* 9.3.37 */
445 { 0x26, "Erroneous Message" }, /* 9.3.38 */
446 { 0x27, "Full BCCH Information" }, /* 9.3.39 */
447 { 0x28, "Channel Needed" }, /* 9.3.40 */
448 { 0x29, "CB Command type" }, /* 9.3.41 */
449 { 0x2a, "SMSCB Message" }, /* 9.3.42 */
450 { 0x2b, "Full Immediate Assign Info" }, /* 9.3.35 */
451 { 0x2c, "SACCH Information" }, /* 9.3.29 */
452 { 0x2d, "CBCH Load Information" }, /* 9.3.43 */
453 { 0x2e, "SMSCB Channel Indicator" }, /* 9.3.44 */
454 { 0x2f, "Group Call Reference" }, /* 9.3.45 */
455 { 0x30, "Channel Description" }, /* 9.3.46 */
456 { 0x31, "NCH DRX Information" }, /* 9.3.47 */
457 { 0x32, "Command Indicator" }, /* 9.3.48 */
458 { 0x33, "eMLPP Priority" }, /* 9.3.49 */
459 { 0x34, "UIC" }, /* 9.3.50 */
460 { 0x35, "Main Channel Reference" }, /* 9.3.51 */
461 { 0x36, "MultiRate Configuration" }, /* 9.3.52 */
462 { 0x37, "MultiRate Control" }, /* 9.3.53 */
463 { 0x38, "Supported Codec Types" }, /* 9.3.54 */
464 { 0x39, "Codec Configuration" }, /* 9.3.55 */
465 { 0x3a, "Round Trip Delay" }, /* 9.3.56 */
466 { 0x3b, "TFO Status" }, /* 9.3.57 */
467 { 0x3c, "LLP APDU" }, /* 9.3.58 */
468 { 0x3d, "TFO Transparent Container" }, /* 9.3.59 */
473 Reserved for future use
487 0 0 0 0 1 Bm + ACCH's
488 0 0 0 1 T Lm + ACCH's
489 0 0 1 T T SDCCH/4 + ACCH
490 0 1 T T T SDCCH/8 + ACCH
492 1 0 0 0 1 Uplink CCCH (RACH)
493 1 0 0 1 0 Downlink CCCH (PCH + AGCH)
495 static const value_string rsl_ch_no_Cbits_vals[] = {
496 { 0x01, "Bm + ACCH" },
497 { 0x02, "Lm + ACCH (sub-chan 0)" },
498 { 0x03, "Lm + ACCH (sub-chan 1)" },
499 { 0x04, "SDCCH/4 + ACCH (sub-chan 0)" },
500 { 0x05, "SDCCH/4 + ACCH (sub-chan 1)" },
501 { 0x06, "SDCCH/4 + ACCH (sub-chan 2)" },
502 { 0x07, "SDCCH/4 + ACCH (sub-chan 3)" },
503 { 0x08, "SDCCH/8 + ACCH (sub-chan 0)" },
504 { 0x09, "SDCCH/8 + ACCH (sub-chan 1)" },
505 { 0x0a, "SDCCH/8 + ACCH (sub-chan 2)" },
506 { 0x0b, "SDCCH/8 + ACCH (sub-chan 3)" },
507 { 0x0c, "SDCCH/8 + ACCH (sub-chan 4)" },
508 { 0x0d, "SDCCH/8 + ACCH (sub-chan 5)" },
509 { 0x0e, "SDCCH/8 + ACCH (sub-chan 6)" },
510 { 0x0f, "SDCCH/8 + ACCH (sub-chan 7)" },
512 { 0x11, "Uplink CCCH (RACH)" },
513 { 0x12, "Downlink CCCH (PCH + AGCH)" },
517 /* 9.3.1 Channel number 9.3.1 M TV 2 */
519 dissect_rsl_ie_ch_no(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
525 if(is_mandatory == FALSE){
526 ie_id = tvb_get_guint8(tvb,offset);
527 if (ie_id != RSL_IE_CH_NO)
531 ti = proto_tree_add_text(tree, tvb,offset,2,"Channel number IE ");
532 ie_tree = proto_item_add_subtree(ti, ett_ie_ch_no);
535 /* Element identifier */
536 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
539 proto_tree_add_item(ie_tree, hf_rsl_ch_no_Cbits, tvb, offset, 1, ENC_BIG_ENDIAN);
540 /* TN is time slot number, binary represented as in 3GPP TS 45.002.
543 proto_tree_add_item(ie_tree, hf_rsl_ch_no_TN, tvb, offset, 1, ENC_BIG_ENDIAN);
548 static const value_string rsl_ch_type_vals[] = {
549 { 0x00, "Main signalling channel (FACCH or SDCCH)" },
554 static const value_string rsl_prio_vals[] = {
555 { 0x00, "Normal Priority" },
556 { 0x01, "High Priority" },
557 { 0x02, "Low Priority" },
562 * 9.3.2 Link Identifier M TV 2
565 dissect_rsl_ie_link_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
572 if(is_mandatory == FALSE){
573 ie_id = tvb_get_guint8(tvb,offset);
574 if (ie_id != RSL_IE_LINK_ID)
578 ti = proto_tree_add_text(tree, tvb,offset,2, "Link Identifier IE ");
579 ie_tree = proto_item_add_subtree(ti, ett_ie_link_id);
581 /* Element identifier */
582 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
585 octet = tvb_get_guint8(tvb,offset);
587 if((octet&0x20) == 0x20){
589 proto_tree_add_item(ie_tree, hf_rsl_na, tvb, offset, 1, ENC_BIG_ENDIAN);
593 proto_tree_add_item(ie_tree, hf_rsl_ch_type, tvb, offset, 1, ENC_BIG_ENDIAN);
594 /* NA - Not applicable */
595 proto_tree_add_item(ie_tree, hf_rsl_na, tvb, offset, 1, ENC_BIG_ENDIAN);
597 proto_tree_add_item(ie_tree, hf_rsl_prio, tvb, offset, 1, ENC_BIG_ENDIAN);
599 * The SAPI field contains the SAPI value as defined in 3GPP TS 44.005.
601 proto_tree_add_item(ie_tree, hf_rsl_sapi, tvb, offset, 1, ENC_BIG_ENDIAN);
608 * 9.3.3 Activation Type
610 static const true_false_string rsl_rbit_vals = {
615 static const value_string rsl_a3a2_vals[] = {
616 { 0x00, "Activation related to intra-cell channel change" },
617 { 0x01, "Activation related to inter-cell channel change (handover)" },
618 { 0x02, "Activation related to secondary channels" },
622 static const true_false_string rsl_a1_0_vals = {
623 "related to normal assignment procedure",
624 "related to immediate assignment procedure"
627 static const true_false_string rsl_a1_1_vals = {
628 "related to synchronous handover procedure",
629 "related to asynchronous handover procedure"
632 static const true_false_string rsl_a1_2_vals = {
633 "related to multislot configuration",
634 "related to additional assignment procedure"
638 dissect_rsl_ie_act_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
645 if(is_mandatory == FALSE){
646 ie_id = tvb_get_guint8(tvb,offset);
647 if (ie_id != RSL_IE_ACT_TYPE)
651 ti = proto_tree_add_text(tree, tvb,offset,2,"Activation Type IE ");
652 ie_tree = proto_item_add_subtree(ti, ett_ie_act_type);
655 /* Element identifier */
656 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
659 /* The R bit indicates if the procedure is an initial activation or a reactivation. */
660 proto_tree_add_item(ie_tree, hf_rsl_rbit, tvb, offset, 1, ENC_BIG_ENDIAN);
662 /* The A-bits indicate the type of activation, which defines the access procedure
663 * and the operation of the data link layer
665 octet = (tvb_get_guint8(tvb,offset) & 0x06)>>1;
666 proto_tree_add_item(ie_tree, hf_rsl_a3a2, tvb, offset, 1, ENC_BIG_ENDIAN);
669 /* Activation related to intra-cell channel change */
670 proto_tree_add_item(ie_tree, hf_rsl_a1_0, tvb, offset, 1, ENC_BIG_ENDIAN);
673 /* Activation related to inter-cell channel change (handover) */
674 proto_tree_add_item(ie_tree, hf_rsl_a1_1, tvb, offset, 1, ENC_BIG_ENDIAN);
677 /* Activation related to secondary channels */
678 proto_tree_add_item(ie_tree, hf_rsl_a1_2, tvb, offset, 1, ENC_BIG_ENDIAN);
691 static const true_false_string rsl_epc_mode_vals = {
692 "Channel in EPC mode",
693 "Channel not in EPC mode"
696 static const true_false_string rsl_fpc_epc_mode_vals = {
697 "Fast Power Control in use",
698 "Fast Power Control not in use"
701 static const value_string rsl_rlm_bs_power_vals[] = {
703 { 0x01, "Pn - 2 dB" },
704 { 0x02, "Pn - 4 dB" },
705 { 0x03, "Pn - 6 dB" },
706 { 0x04, "Pn - 8 dB" },
707 { 0x05, "Pn - 10 dB" },
708 { 0x06, "Pn - 12 dB" },
709 { 0x07, "Pn - 14 dB" },
710 { 0x08, "Pn - 16 dB" },
711 { 0x09, "Pn - 18 dB" },
712 { 0x0a, "Pn - 20 dB" },
713 { 0x0b, "Pn - 22 dB" },
714 { 0x0c, "Pn - 24 dB" },
715 { 0x0d, "Pn - 26 dB" },
716 { 0x0e, "Pn - 28 dB" },
717 { 0x0f, "Pn - 30 dB" },
722 dissect_rsl_ie_bs_power(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
728 if(is_mandatory == FALSE){
729 ie_id = tvb_get_guint8(tvb,offset);
730 if (ie_id != RSL_IE_BS_POW)
734 ti = proto_tree_add_text(tree, tvb,offset,2,"BS Power IE");
735 ie_tree = proto_item_add_subtree(ti, ett_ie_bs_power);
737 /* Element identifier */
738 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
742 proto_tree_add_item(ie_tree, hf_rsl_epc_mode, tvb, offset, 1, ENC_BIG_ENDIAN);
744 proto_tree_add_item(ie_tree, hf_rsl_bs_fpc_epc_mode, tvb, offset, 1, ENC_BIG_ENDIAN);
746 /* The Power Level field (octet 2) indicates the number of 2 dB steps by
747 * which the power shall be reduced from its nominal value, Pn,
748 * set by the network operator to adjust the coverage.
749 * Thus the Power Level values correspond to the following powers (relative to Pn):
751 proto_tree_add_item(ie_tree, hf_rsl_bs_power, tvb, offset, 1, ENC_BIG_ENDIAN);
757 * 9.3.5 Channel Identification
760 dissect_rsl_ie_ch_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
768 if(is_mandatory == FALSE){
769 ie_id = tvb_get_guint8(tvb,offset);
770 if (ie_id != RSL_IE_CH_ID)
774 ti = proto_tree_add_text(tree, tvb,offset,0,"Channel Identification IE");
775 ie_tree = proto_item_add_subtree(ti, ett_ie_ch_id);
777 /* Element identifier */
778 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
781 length = tvb_get_guint8(tvb, offset);
782 proto_item_set_len(ti, length+2);
783 proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, ENC_BIG_ENDIAN);
788 /* 3GPP TS 44.018 "Channel Description"
789 * the whole of the 3GPP TS 44.018 element including the element identifier and
790 * length should be included.
791 * XXX Hmm a type 3 IE (TV).
793 proto_tree_add_text(ie_tree, tvb,offset, 1, "Channel Description Tag");
794 de_rr_ch_dsc(tvb, ie_tree, pinfo, offset+1, length, NULL, 0);
797 * The 3GPP TS 24.008 "Mobile Allocation" shall for compatibility reasons be
798 * included but empty, i.e. the length shall be zero.
800 proto_tree_add_text(ie_tree, tvb,offset,2,"Mobile Allocation Tag+Length(0)");
801 return ie_offset + length;
807 static const true_false_string rsl_dtx_vals = {
811 static const value_string rsl_speech_or_data_vals[] = {
814 { 0x03, "Signalling" },
817 static const value_string rsl_ch_rate_and_type_vals[] = {
819 { 0x08, "Full rate TCH channel Bm" },
820 { 0x09, "Half rate TCH channel Lm" },
821 { 0x0a, "Full rate TCH channel bi-directional Bm, Multislot configuration" },
822 { 0x1a, "Full rate TCH channel uni-directional downlink Bm, Multislot configuration" },
823 { 0x18, "Full rate TCH channel Bm Group call channel" },
824 { 0x19, "Half rate TCH channel Lm Group call channel" },
825 { 0x28, "Full rate TCH channel Bm Broadcast call channel" },
826 { 0x29, "PHalf rate TCH channel Lm Broadcast call channel" },
830 static const value_string rsl_speech_coding_alg_vals[] = {
831 { 0x01, "GSM speech coding algorithm version 1: GSM FR or GSM HR" },
832 { 0x11, "GSM speech coding algorithm version 2: GSM EFR (half rate not defined in this version of the protocol)" },
833 { 0x21, "GSM speech coding algorithm version 3: FR AMR or HR AMR" },
834 { 0x31, "GSM speech coding algorithm version 4: OFR AMR-WB or OHR AMR-WB" },
835 { 0x09, "GSM speech coding algorithm version 5: FR AMR-WB" },
836 { 0x0d, "GSM speech coding algorithm version 6: OHR AMR" },
840 static const true_false_string t_nt_bit_vals = {
841 "Non-transparent service",
842 "Transparent service"
845 static const value_string rsl_ra_if_data_rte_vals[] = {
846 { 0x21, "asymmetric 43.5 kbit/s (downlink) + 14.5 kbit/s (uplink)" },
847 { 0x22, "asymmetric 29.0 kbit/s (downlink) + 14.5 kbit/s (uplink)" },
848 { 0x23, "asymmetric 43.5 kbit/s (downlink) + 29.0 kbit/s (uplink)" },
849 { 0x29, "asymmetric 14.5 kbit/s (downlink) + 43.5 kbit/s (uplink)" },
850 { 0x2a, "asymmetric 14.5 kbit/s (downlink) + 29.0 kbit/s (uplink)" },
851 { 0x2b, "asymmetric 29.0 kbit/s (downlink) + 43.5 kbit/s (uplink)" },
852 { 0x34, "43.5 kbit/s" },
853 { 0x31, "28.8 kbit/s" },
854 { 0x18, "14.5 kbit/s" },
855 { 0x10, "12 kbit/s" },
856 { 0x11, "6 kbit/s" },
860 static const value_string rsl_data_rte_vals[] = {
861 { 0x38, "32 kbit/s" },
862 { 0x22, "39 kbit/s" },
863 { 0x18, "14.4 kbit/s" },
864 { 0x10, "9.6 kbit/s" },
865 { 0x11, "4.8 kbit/s" },
866 { 0x12, "2.4 kbit/s" },
867 { 0x13, "1.2 kbit/s" },
868 { 0x14, "600 bit/s" },
869 { 0x15, "1 200/75 bit/s (1 200 network-to-MS, 75 MS-to-network)" },
874 dissect_rsl_ie_ch_mode(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
883 if(is_mandatory == FALSE){
884 ie_id = tvb_get_guint8(tvb,offset);
885 if (ie_id != RSL_IE_CH_MODE)
889 ti = proto_tree_add_text(tree, tvb,offset,0,"Channel Mode IE");
890 ie_tree = proto_item_add_subtree(ti, ett_ie_ch_mode);
892 /* Element identifier */
893 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
896 length = tvb_get_guint8(tvb, offset);
897 proto_item_set_len(ti, length+2);
898 proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, ENC_BIG_ENDIAN);
902 /* The DTX bits of octet 3 indicate whether DTX is applied
903 * DTXd indicates use of DTX in the downlink direction (BTS to MS) and
904 * DTXu indicates use of DTX in the uplink direction (MS to BTS).
906 proto_tree_add_item(ie_tree, hf_rsl_cm_dtxd, tvb, offset, 1, ENC_BIG_ENDIAN);
907 proto_tree_add_item(ie_tree, hf_rsl_cm_dtxu, tvb, offset, 1, ENC_BIG_ENDIAN);
909 /* The "Speech or data indicator" field (octet 4) */
910 proto_tree_add_item(ie_tree, hf_rsl_speech_or_data, tvb, offset, 1, ENC_BIG_ENDIAN);
911 octet = tvb_get_guint8(tvb,offset);
913 /* Channel rate and type */
914 proto_tree_add_item(ie_tree, hf_rsl_ch_rate_and_type, tvb, offset, 1, ENC_BIG_ENDIAN);
916 /* Speech coding algor./data rate + transp ind */
920 proto_tree_add_item(ie_tree, hf_rsl_speech_coding_alg, tvb, offset, 1, ENC_BIG_ENDIAN);
924 proto_tree_add_item(ie_tree, hf_rsl_extension_bit, tvb, offset, 1, ENC_BIG_ENDIAN);
925 proto_tree_add_item(ie_tree, hf_rsl_t_nt_bit, tvb, offset, 1, ENC_BIG_ENDIAN);
926 octet = tvb_get_guint8(tvb,offset);
927 if ((octet&0x40)==0x40){
928 /* Non-transparent service */
929 /* For the non-transparent service, bits 6 to 1 indicate the radio interface data rate:*/
930 proto_tree_add_item(ie_tree, hf_rsl_ra_if_data_rte, tvb, offset, 1, ENC_BIG_ENDIAN);
932 /* For the transparent service, bits 6-1 indicate the data rate: */
933 proto_tree_add_item(ie_tree, hf_rsl_data_rte, tvb, offset, 1, ENC_BIG_ENDIAN);
938 * If octet 4 indicates signalling then octet 6 is coded as follows:
939 * 0000 0000 No resources required
941 proto_tree_add_text(ie_tree, tvb,offset,1,"0 No resources required(All other values are reserved)");
944 /* Should not happen */
945 proto_tree_add_text(ie_tree, tvb,offset,1,"Speech or data indicator != 1,2 or 3");
951 return ie_offset + length;
955 * 9.3.7 Encryption information
958 /* The Algorithm Identifier field (octet 3) indicates the relevant ciphering algorithm. It is coded as: */
959 static const value_string rsl_algorithm_id_vals[] = {
960 { 0x00, "Reserved" },
961 { 0x01, "No encryption shall be used" },
962 { 0x02, "GSM encryption algorithm version 1 (A5/1)" },
963 { 0x03, "GSM A5/2" },
964 { 0x04, "GSM A5/3" },
965 { 0x05, "GSM A5/4" },
966 { 0x06, "GSM A5/5" },
967 { 0x07, "GSM A5/6" },
968 { 0x08, "GSM A5/7" },
973 dissect_rsl_ie_enc_inf(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
980 if(is_mandatory == FALSE){
981 ie_id = tvb_get_guint8(tvb,offset);
982 if (ie_id != RSL_IE_ENC_INF)
986 ti = proto_tree_add_text(tree, tvb,offset,0,"Encryption information IE");
987 ie_tree = proto_item_add_subtree(ti, ett_ie_enc_inf);
989 /* Element identifier */
990 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
993 length = tvb_get_guint8(tvb, offset);
994 proto_item_set_len(ti, length+2);
995 proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, ENC_BIG_ENDIAN);
998 /* Algorithm Identifier field (octet 3) */
999 proto_tree_add_item(ie_tree, hf_rsl_alg_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1002 proto_tree_add_item(ie_tree, hf_rsl_key, tvb, offset+1, length -1, ENC_NA);
1004 return offset + length;
1008 * 9.3.8 Frame Number
1011 dissect_rsl_ie_frame_no(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
1014 proto_tree *ie_tree;
1017 if(is_mandatory == FALSE){
1018 ie_id = tvb_get_guint8(tvb,offset);
1019 if (ie_id != RSL_IE_FRAME_NO)
1023 ti = proto_tree_add_text(tree, tvb,offset,3,"Frame Number IE");
1024 ie_tree = proto_item_add_subtree(ti, ett_ie_frame_no);
1026 /* Element identifier */
1027 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1030 proto_tree_add_item(ie_tree, hf_rsl_req_ref_T1prim, tvb, offset, 1, ENC_BIG_ENDIAN);
1031 proto_tree_add_item(ie_tree, hf_rsl_req_ref_T3, tvb, offset, 2, ENC_BIG_ENDIAN);
1033 proto_tree_add_item(ie_tree, hf_rsl_req_ref_T2, tvb, offset, 1, ENC_BIG_ENDIAN);
1040 * 9.3.9 Handover reference
1043 dissect_rsl_ie_ho_ref(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
1046 proto_tree *ie_tree;
1049 if(is_mandatory == FALSE){
1050 ie_id = tvb_get_guint8(tvb,offset);
1051 if (ie_id != RSL_IE_HO_REF)
1055 ti = proto_tree_add_text(tree, tvb,offset,2,"Handover reference IE");
1056 ie_tree = proto_item_add_subtree(ti, ett_ie_ho_ref);
1058 /* Element identifier */
1059 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1062 /* Hand-over reference */
1063 proto_tree_add_item(ie_tree, hf_rsl_ho_ref, tvb, offset, 1, ENC_BIG_ENDIAN);
1070 * 9.3.10 L1 Information
1074 dissect_rsl_ie_l1_inf(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
1077 proto_tree *ie_tree;
1080 if(is_mandatory == FALSE){
1081 ie_id = tvb_get_guint8(tvb,offset);
1082 if (ie_id != RSL_IE_L1_INF)
1086 ti = proto_tree_add_text(tree, tvb,offset, 3,"L1 Information IE");
1087 ie_tree = proto_item_add_subtree(ti, ett_ie_l1_inf);
1089 /* Element identifier */
1090 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1093 /* Octets 2-3 contain the L1 header information of SACCH blocks.
1094 * The information fields and codings are as defined in 3GPP TS 44.004.
1097 proto_tree_add_item(ie_tree, hf_rsl_l1inf_power_lev, tvb, offset, 1, ENC_BIG_ENDIAN);
1099 proto_tree_add_item(ie_tree, hf_rsl_l1inf_fpc, tvb, offset, 1, ENC_BIG_ENDIAN);
1101 /* Actual Timing Advance */
1102 proto_tree_add_item(ie_tree, hf_rsl_act_timing_adv, tvb, offset, 1, ENC_BIG_ENDIAN);
1109 * 9.3.11 L3 Information 9.3.11 M TLV >=3
1111 * This element contains a link layer service data unit (L3 message).
1112 * It is used to forward a complete L3 message as specified in
1113 * 3GPP TS 24.008 or 3GPP TS 44.018 between BTS and BSC.
1116 dissect_rsl_ie_L3_inf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, gboolean is_mandatory)
1119 proto_tree *ie_tree;
1124 if(is_mandatory == FALSE){
1125 ie_id = tvb_get_guint8(tvb,offset);
1126 if (ie_id != RSL_IE_L3_INF)
1130 ti = proto_tree_add_text(tree, tvb,offset,0,"L3 Information IE");
1131 ie_tree = proto_item_add_subtree(ti, ett_ie_L3_inf);
1133 /* Element identifier */
1134 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1137 length = tvb_get_ntohs(tvb, offset);
1138 proto_item_set_len(ti, length+3);
1139 proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 2, ENC_BIG_ENDIAN);
1142 /* Link Layer Service Data Unit (i.e. a layer 3 message
1143 * as defined in 3GPP TS 24.008 or 3GPP TS 44.018)
1145 proto_tree_add_text(ie_tree, tvb,offset,length,"Link Layer Service Data Unit ( L3 Message)");
1146 next_tvb = tvb_new_subset(tvb, offset, length, length);
1147 call_dissector(gsm_a_dtap_handle, next_tvb, pinfo, top_tree);
1149 offset = offset + length;
1155 * 9.3.12 MS Identity
1158 dissect_rsl_ie_ms_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, gboolean is_mandatory)
1161 proto_tree *ie_tree;
1165 if(is_mandatory == FALSE){
1166 ie_id = tvb_get_guint8(tvb,offset);
1167 if (ie_id != RSL_IE_MS_ID)
1170 ti = proto_tree_add_text(tree, tvb,offset,0,"MS Identity IE");
1171 ie_tree = proto_item_add_subtree(ti, ett_ie_ms_id);
1173 /* Element identifier */
1174 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1177 length = tvb_get_guint8(tvb,offset);
1178 proto_item_set_len(ti, length+2);
1179 proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1182 de_mid(tvb, ie_tree, pinfo, offset, length, NULL, 0);
1184 offset = offset + length;
1189 static const true_false_string rsl_ms_fpc_epc_mode_vals = {
1197 dissect_rsl_ie_ms_pow(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
1200 proto_tree *ie_tree;
1203 if(is_mandatory == FALSE){
1204 ie_id = tvb_get_guint8(tvb,offset);
1205 if (ie_id != RSL_IE_MS_POW)
1209 ti = proto_tree_add_text(tree, tvb,offset, 2,"MS Power IE");
1210 ie_tree = proto_item_add_subtree(ti, ett_ie_ms_pow);
1212 /* Element identifier */
1213 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1216 /* MS power level */
1217 proto_tree_add_item(ie_tree, hf_rsl_ms_power_lev, tvb, offset, 1, ENC_BIG_ENDIAN);
1219 proto_tree_add_item(ie_tree, hf_rsl_ms_fpc, tvb, offset, 1, ENC_BIG_ENDIAN);
1227 * 9.3.14 Paging Group M TV 2 2
1230 dissect_rsl_ie_paging_grp(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
1233 proto_tree *ie_tree;
1236 if(is_mandatory == FALSE){
1237 ie_id = tvb_get_guint8(tvb,offset);
1238 if (ie_id != RSL_IE_PAGING_GRP)
1241 ti = proto_tree_add_text(tree, tvb,offset,2,"Paging Group IE");
1242 ie_tree = proto_item_add_subtree(ti, ett_ie_paging_grp);
1244 /* Element identifier */
1245 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1248 /* The Paging Group field (octet 2) contains the binary representation of the paging
1249 * group as defined in 3GPP TS 45.002.
1251 proto_tree_add_item(ie_tree, hf_rsl_paging_grp, tvb, offset, 1, ENC_BIG_ENDIAN);
1259 * 9.3.15 Paging Load
1262 dissect_rsl_ie_paging_load(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
1265 proto_tree *ie_tree;
1268 if(is_mandatory == FALSE){
1269 ie_id = tvb_get_guint8(tvb,offset);
1270 if (ie_id != RSL_IE_PAGING_LOAD)
1273 ti = proto_tree_add_text(tree, tvb,offset,3,"Paging Load IE");
1274 ie_tree = proto_item_add_subtree(ti, ett_ie_paging_load);
1276 /* Element identifier */
1277 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1281 * Paging Buffer Space.
1283 proto_tree_add_item(ie_tree, hf_rsl_paging_load, tvb, offset, 2, ENC_BIG_ENDIAN);
1284 offset = offset + 2;
1290 * 9.3.16 Physical Context TLV
1293 dissect_rsl_ie_phy_ctx(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
1296 proto_tree *ie_tree;
1300 if(is_mandatory == FALSE){
1301 ie_id = tvb_get_guint8(tvb,offset);
1302 if (ie_id != RSL_IE_PHY_CTX)
1306 ti = proto_tree_add_text(tree, tvb,offset,0,"Physical Context IE ");
1307 ie_tree = proto_item_add_subtree(ti, ett_ie_phy_ctx);
1309 /* Element identifier */
1310 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1313 length = tvb_get_guint8(tvb,offset);
1314 proto_item_set_len(ti, length+2);
1315 proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1319 * Physical Context Information:
1320 * The Physical Context Information field is not specified.
1321 * This information should not be analysed by BSC, but merely
1322 * forwarded from one TRX/channel to another.
1324 proto_tree_add_item(ie_tree, hf_rsl_phy_ctx, tvb, offset, length, ENC_NA);
1325 offset = offset + length;
1330 * 9.3.17 Access Delay M TV 2
1333 dissect_rsl_ie_access_delay(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
1336 proto_tree *ie_tree;
1339 if(is_mandatory == FALSE){
1340 ie_id = tvb_get_guint8(tvb,offset);
1341 if (ie_id != RSL_IE_ACCESS_DELAY)
1345 ti = proto_tree_add_text(tree, tvb,offset,2,"Access Delay IE ");
1346 ie_tree = proto_item_add_subtree(ti, ett_ie_access_delay);
1348 /* Element identifier */
1349 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1351 proto_tree_add_item(ie_tree, hf_rsl_acc_delay, tvb, offset, 1, ENC_BIG_ENDIAN);
1361 dissect_rsl_ie_rach_load(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
1364 proto_tree *ie_tree;
1369 if(is_mandatory == FALSE){
1370 ie_id = tvb_get_guint8(tvb,offset);
1371 if (ie_id != RSL_IE_RACH_LOAD)
1375 ti = proto_tree_add_text(tree, tvb,offset,0,"RACH Load IE ");
1376 ie_tree = proto_item_add_subtree(ti, ett_ie_rach_load);
1378 /* Element identifier */
1379 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1382 length = tvb_get_guint8(tvb,offset);
1383 proto_item_set_len(ti, length+2);
1384 proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1389 * This element is used to carry information on the load of the RACH (Random Access Channel)
1390 * associated with this CCCH timeslot. It is of variable length.
1392 /* RACH Slot Count */
1393 proto_tree_add_item(ie_tree, hf_rsl_rach_slot_cnt, tvb, offset, 2, ENC_BIG_ENDIAN);
1396 /* RACH Busy Count */
1397 proto_tree_add_item(ie_tree, hf_rsl_rach_busy_cnt, tvb, offset, 2, ENC_BIG_ENDIAN);
1401 /* RACH Access Count */
1402 proto_tree_add_item(ie_tree, hf_rsl_rach_acc_cnt, tvb, offset, 2, ENC_BIG_ENDIAN);
1406 /* Supplementary Information */
1408 proto_tree_add_text(ie_tree, tvb, offset,length ,"Supplementary Information");
1410 offset = ie_offset + length;
1416 * 9.3.19 Request Reference M TV 4
1419 dissect_rsl_ie_req_ref(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
1422 proto_tree *ie_tree;
1425 if(is_mandatory == FALSE){
1426 ie_id = tvb_get_guint8(tvb,offset);
1427 if (ie_id != RSL_IE_REQ_REF)
1431 ti = proto_tree_add_text(tree, tvb,offset,4,"Request Reference IE ");
1432 ie_tree = proto_item_add_subtree(ti, ett_ie_req_ref);
1434 /* Element identifier */
1435 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1437 proto_tree_add_item(ie_tree, hf_rsl_req_ref_ra, tvb, offset, 1, ENC_BIG_ENDIAN);
1439 proto_tree_add_item(ie_tree, hf_rsl_req_ref_T1prim, tvb, offset, 1, ENC_BIG_ENDIAN);
1440 proto_tree_add_item(ie_tree, hf_rsl_req_ref_T3, tvb, offset, 2, ENC_BIG_ENDIAN);
1442 proto_tree_add_item(ie_tree, hf_rsl_req_ref_T2, tvb, offset, 1, ENC_BIG_ENDIAN);
1447 static const value_string rel_mode_vals[] = {
1448 { 0x00, "Normal Release" },
1449 { 0x01, "Local End Release" },
1454 * 9.3.20 Release Mode 9.3.20 M TV 2
1457 dissect_rsl_ie_rel_mode(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
1460 proto_tree *ie_tree;
1463 if(is_mandatory == FALSE){
1464 ie_id = tvb_get_guint8(tvb,offset);
1465 if (ie_id != RSL_IE_REL_MODE)
1469 ti = proto_tree_add_text(tree, tvb,offset,4,"Release Mode IE ");
1470 ie_tree = proto_item_add_subtree(ti, ett_ie_rel_mode);
1472 /* Element identifier */
1473 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1476 /* The M bit is coded as follows:
1478 * 1 local end release
1480 proto_tree_add_item(ie_tree, hf_rsl_rel_mode, tvb, offset, 1, ENC_BIG_ENDIAN);
1486 static const value_string rsl_rlm_cause_vals[] = {
1487 { 0x00, "reserved" },
1488 { 0x01, "timer T200 expired (N200+1) times" },
1489 { 0x02, "re-establishment request" },
1490 { 0x03, "unsolicited UA response" },
1491 { 0x04, "unsolicited DM response" },
1492 { 0x05, "unsolicited DM response, multiple frame established state" },
1493 { 0x06, "unsolicited supervisory response" },
1494 { 0x07, "sequence error" },
1495 { 0x08, "U-frame with incorrect parameters" },
1496 { 0x09, "S-frame with incorrect parameters" },
1497 { 0x0a, "I-frame with incorrect use of M bit" },
1498 { 0x0b, "I-frame with incorrect length" },
1499 { 0x0c, "frame not implemented" },
1500 { 0x0d, "SABM command, multiple frame established state" },
1501 { 0x0e, "SABM frame with information not allowed in this state" },
1506 * 9.3.21 Resource Information
1509 dissect_rsl_ie_resource_inf(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
1512 proto_tree *ie_tree;
1517 if(is_mandatory == FALSE){
1518 ie_id = tvb_get_guint8(tvb,offset);
1519 if (ie_id != RSL_IE_RESOURCE_INF)
1523 ti = proto_tree_add_text(tree, tvb,offset,0,"Resource Information IE");
1524 ie_tree = proto_item_add_subtree(ti, ett_ie_resource_inf);
1526 /* Element identifier */
1527 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1531 length = tvb_get_guint8(tvb,offset);
1532 proto_item_set_len(ti, length+2);
1534 proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1540 proto_tree_add_item(ie_tree, hf_rsl_ch_no_Cbits, tvb, offset, 1, ENC_BIG_ENDIAN);
1541 /* TN is time slot number, binary represented as in 3GPP TS 45.002.
1544 proto_tree_add_item(ie_tree, hf_rsl_ch_no_TN, tvb, offset, 1, ENC_BIG_ENDIAN);
1547 /* Interference level (1) */
1549 proto_tree_add_item(ie_tree, hf_rsl_interf_band, tvb, offset, 1, ENC_BIG_ENDIAN);
1550 /* Interf Band reserved bits */
1551 proto_tree_add_item(ie_tree, hf_rsl_interf_band_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
1553 length = length - 2;
1555 return ie_offset + length;
1559 * 9.3.22 RLM Cause 9.3.22 M TLV 2-4
1562 dissect_rsl_ie_rlm_cause(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
1565 proto_tree *ie_tree;
1571 if(is_mandatory == FALSE){
1572 ie_id = tvb_get_guint8(tvb,offset);
1573 if (ie_id != RSL_IE_RLM_CAUSE)
1577 ti = proto_tree_add_text(tree, tvb,offset,0,"RLM Cause IE ");
1578 ie_tree = proto_item_add_subtree(ti, ett_ie_rlm_cause);
1580 /* Element identifier */
1581 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1584 length = tvb_get_guint8(tvb,offset);
1585 proto_item_set_len(ti, length+2);
1587 proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1590 /* The Cause Value is a one octet field if the extension bit is set to 0.
1591 * If the extension bit is set to 1, the Cause Value is a two octet field.
1593 /* XXX: Code doesn't reflect the comment above ?? */
1594 /* octet = tvb_get_guint8(tvb,offset); */
1595 proto_tree_add_item(tree, hf_rsl_extension_bit, tvb, offset, 1, ENC_BIG_ENDIAN);
1596 proto_tree_add_item(ie_tree, hf_rsl_cause, tvb, offset, 1, ENC_BIG_ENDIAN);
1603 * 9.3.23 Starting Time
1606 dissect_rsl_ie_staring_time(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
1609 proto_tree *ie_tree;
1612 if(is_mandatory == FALSE){
1613 ie_id = tvb_get_guint8(tvb,offset);
1614 if (ie_id != RSL_IE_STARTING_TIME)
1618 ti = proto_tree_add_text(tree, tvb,offset,3,"Starting Time IE");
1619 ie_tree = proto_item_add_subtree(ti, ett_ie_staring_time);
1621 /* Element identifier */
1622 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1625 proto_tree_add_item(ie_tree, hf_rsl_req_ref_T1prim, tvb, offset, 1, ENC_BIG_ENDIAN);
1626 proto_tree_add_item(ie_tree, hf_rsl_req_ref_T3, tvb, offset, 2, ENC_BIG_ENDIAN);
1628 proto_tree_add_item(ie_tree, hf_rsl_req_ref_T2, tvb, offset, 1, ENC_BIG_ENDIAN);
1635 * 9.3.24 Timing Advance
1638 dissect_rsl_ie_timing_adv(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
1641 proto_tree *ie_tree;
1644 if(is_mandatory == FALSE){
1645 ie_id = tvb_get_guint8(tvb,offset);
1646 if (ie_id != RSL_IE_TIMING_ADV)
1650 ti = proto_tree_add_text(tree, tvb,offset,2,"Timing Advance IE");
1651 ie_tree = proto_item_add_subtree(ti, ett_ie_timing_adv);
1653 /* Element identifier */
1654 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1657 proto_tree_add_item(ie_tree, hf_rsl_timing_adv, tvb, offset, 1, ENC_BIG_ENDIAN);
1664 * 9.3.25 Uplink Measurements
1666 static const true_false_string rsl_dtxd_vals = {
1672 dissect_rsl_ie_uplik_meas(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
1675 proto_tree *ie_tree;
1680 if(is_mandatory == FALSE){
1681 ie_id = tvb_get_guint8(tvb,offset);
1682 if (ie_id != RSL_IE_UPLINK_MEAS)
1686 ti = proto_tree_add_text(tree, tvb,offset,0,"Uplink Measurements IE");
1687 ie_tree = proto_item_add_subtree(ti, ett_ie_uplink_meas);
1689 /* Element identifier */
1690 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1694 length = tvb_get_guint8(tvb,offset);
1695 proto_item_set_len(ti, length+2);
1697 proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1703 * rfu DTXd | RXLEV.FULL.up
1705 proto_tree_add_item(ie_tree, hf_rsl_dtxd, tvb, offset, 1, ENC_BIG_ENDIAN);
1706 proto_tree_add_item(ie_tree, hf_rsl_rxlev_full_up, tvb, offset, 1, ENC_BIG_ENDIAN);
1711 * Reserved | RXLEV.SUB.up 4
1713 proto_tree_add_item(ie_tree, hf_rsl_rxlev_sub_up, tvb, offset, 1, ENC_BIG_ENDIAN);
1717 * Reserved | RXQUAL.FULL.up | RXQUAL.SUB.up
1719 proto_tree_add_item(ie_tree, hf_rsl_rxqual_full_up, tvb, offset, 1, ENC_BIG_ENDIAN);
1720 proto_tree_add_item(ie_tree, hf_rsl_rxqual_sub_up, tvb, offset, 1, ENC_BIG_ENDIAN);
1723 * Supplementary Measurement Information
1725 return ie_offset+length;
1729 static const value_string rsl_class_vals[] = {
1730 { 0x00, "Normal event" },
1731 { 0x01, "Normal event" },
1732 { 0x02, "Resource unavailable" },
1733 { 0x03, "Service or option not available" },
1734 { 0x04, "Service or option not implemented" },
1735 { 0x05, "Invalid message (e.g. parameter out of range)" },
1736 { 0x06, "Protocol error" },
1737 { 0x07, "Interworking" },
1745 dissect_rsl_ie_cause(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
1748 proto_tree *ie_tree;
1754 if(is_mandatory == FALSE){
1755 ie_id = tvb_get_guint8(tvb,offset);
1756 if (ie_id != RSL_IE_CAUSE)
1760 ti = proto_tree_add_text(tree, tvb,offset,0,"Cause IE");
1761 ie_tree = proto_item_add_subtree(ti, ett_ie_cause);
1763 /* Element identifier */
1764 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1767 length = tvb_get_guint8(tvb,offset);
1768 proto_item_set_len(ti, length+2);
1769 proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1774 octet = tvb_get_guint8(tvb,offset);
1775 proto_tree_add_item(tree, hf_rsl_extension_bit, tvb, offset, 1, ENC_BIG_ENDIAN);
1776 proto_tree_add_item(tree, hf_rsl_class, tvb, offset, 1, ENC_BIG_ENDIAN);
1777 if ((octet & 0x80) == 0x80)
1778 /* Cause Extension*/
1781 /* Diagnostic(s) if any */
1782 return ie_offset+length;
1785 * 9.3.27 Measurement result number
1789 dissect_rsl_ie_meas_res_no(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
1792 proto_tree *ie_tree;
1795 if(is_mandatory == FALSE){
1796 ie_id = tvb_get_guint8(tvb,offset);
1797 if (ie_id != RSL_IE_MEAS_RES_NO)
1801 ti = proto_tree_add_text(tree, tvb,offset,2,"Measurement result number IE");
1802 ie_tree = proto_item_add_subtree(ti, ett_ie_meas_res_no);
1804 /* Element identifier */
1805 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1808 /* Measurement result number */
1809 proto_tree_add_item(ie_tree, hf_rsl_meas_res_no, tvb, offset, 1, ENC_BIG_ENDIAN);
1815 * 9.3.28 Message Identifier
1818 dissect_rsl_ie_message_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
1821 proto_tree *ie_tree;
1824 if(is_mandatory == FALSE){
1825 ie_id = tvb_get_guint8(tvb,offset);
1826 if (ie_id != RSL_IE_MESSAGE_ID)
1830 ti = proto_tree_add_text(tree, tvb,offset,0,"Message Identifier IE");
1831 ie_tree = proto_item_add_subtree(ti, ett_ie_message_id);
1833 /* Element identifier */
1834 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1837 proto_tree_add_item(tree, hf_rsl_msg_type, tvb, offset, 1, ENC_BIG_ENDIAN);
1842 * 9.3.30 System Info Type
1844 static const value_string rsl_sys_info_type_vals[] = {
1845 { 0x00, "SYSTEM INFORMATION 8" },
1846 { 0x01, "SYSTEM INFORMATION 1" },
1847 { 0x02, "SYSTEM INFORMATION 2" },
1848 { 0x03, "SYSTEM INFORMATION 3" },
1849 { 0x04, "SYSTEM INFORMATION 4" },
1850 { 0x05, "SYSTEM INFORMATION 5" },
1851 { 0x06, "SYSTEM INFORMATION 6" },
1852 { 0x07, "SYSTEM INFORMATION 7" },
1853 { 0x08, "SYSTEM INFORMATION 16" },
1854 { 0x09, "SYSTEM INFORMATION 17" },
1855 { 0x0a, "SYSTEM INFORMATION 2bis" },
1856 { 0x0b, "SYSTEM INFORMATION 2ter" },
1857 { 0x0d, "SYSTEM INFORMATION 5bis" },
1858 { 0x0e, "SYSTEM INFORMATION 5ter" },
1859 { 0x0f, "SYSTEM INFORMATION 10" },
1860 { 0x47, "EXTENDED MEASUREMENT ORDER" },
1861 { 0x48, "MEASUREMENT INFORMATION" },
1862 { 0x28, "SYSTEM INFORMATION 13" },
1863 { 0x29, "SYSTEM INFORMATION 2quater" },
1864 { 0x2a, "SYSTEM INFORMATION 9" },
1865 { 0x2b, "SYSTEM INFORMATION 18" },
1866 { 0x2c, "SYSTEM INFORMATION 19" },
1867 { 0x2d, "SYSTEM INFORMATION 20" },
1873 dissect_rsl_ie_sys_info_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
1876 proto_tree *ie_tree;
1877 guint8 ie_id, sitype;
1879 if(is_mandatory == FALSE){
1880 ie_id = tvb_get_guint8(tvb,offset);
1881 if (ie_id != RSL_IE_SYS_INFO_TYPE)
1885 ti = proto_tree_add_text(tree, tvb,offset,2,"System Info Type IE");
1886 ie_tree = proto_item_add_subtree(ti, ett_ie_sys_info_type);
1888 /* Element identifier */
1889 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1892 proto_tree_add_item(tree, hf_rsl_sys_info_type, tvb, offset, 1, ENC_BIG_ENDIAN);
1893 sitype = tvb_get_guint8(tvb, offset);
1896 /* Check if SI is 2q, if so set flag */
1904 * 9.3.35 Full Immediate Assign Info TLV 25
1907 dissect_rsl_ie_full_imm_ass_inf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, gboolean is_mandatory)
1910 proto_tree *ie_tree;
1916 if(is_mandatory == FALSE){
1917 ie_id = tvb_get_guint8(tvb,offset);
1918 if (ie_id != RSL_IE_FULL_IMM_ASS_INF)
1922 ti = proto_tree_add_text(tree, tvb,offset,0,"Full Immediate Assign Info IE ");
1923 ie_tree = proto_item_add_subtree(ti, ett_ie_full_imm_ass_inf);
1925 /* Element identifier */
1926 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1929 length = tvb_get_guint8(tvb,offset);
1930 proto_item_set_len(ti, length+2);
1932 proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1934 /* The Full Immediate Assign Info field (octets 3-25)
1935 * contains a complete immediate assign message (IMMEDIATE ASSIGNMENT or
1936 * IMMEDIATE ASSIGNMENT EXTENDED or IMMEDIATE ASSIGNMENT REJECT)
1937 * as defined in 3GPP TS 44.018.
1939 proto_tree_add_text(ie_tree, tvb,offset,length,"Full Immediate Assign Info field");
1940 next_tvb = tvb_new_subset(tvb, offset, length, length);
1941 call_dissector(gsm_a_ccch_handle, next_tvb, pinfo, top_tree);
1943 offset = offset + length;
1949 * 9.3.36 SMSCB Information
1951 * This element is used to convey a complete frame to be broadcast on the CBCH
1952 * including the Layer 2 header for the radio path.
1955 dissect_rsl_ie_smscb_inf(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
1958 proto_tree *ie_tree;
1963 if(is_mandatory == FALSE){
1964 ie_id = tvb_get_guint8(tvb,offset);
1965 if (ie_id != RSL_IE_SMSCB_INF)
1969 ti = proto_tree_add_text(tree, tvb,offset,0,"SMSCB Information IE ");
1970 ie_tree = proto_item_add_subtree(ti, ett_ie_smscb_inf);
1972 /* Element identifier */
1973 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1976 length = tvb_get_guint8(tvb,offset);
1977 proto_item_set_len(ti, length+2);
1979 proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1984 proto_tree_add_text(ie_tree, tvb,offset,length,"SMSCB frame");
1986 offset = offset + length;
1992 * 9.3.37 MS Timing Offset
1996 dissect_rsl_ie_ms_timing_offset(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
1999 proto_tree *ie_tree;
2002 if(is_mandatory == FALSE){
2003 ie_id = tvb_get_guint8(tvb,offset);
2004 if (ie_id != RSL_IE_FULL_MS_TIMING_OFFSET)
2008 ti = proto_tree_add_text(tree, tvb,offset,0,"MS Timing Offset IE");
2009 ie_tree = proto_item_add_subtree(ti, ett_ie_ms_timing_offset);
2011 /* Element identifier */
2012 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
2016 * The meaning of the MS Timing Offset is as defined in 3GPP TS 45.010.
2017 * The value of MS Timing Offset is the binary value of the 8-bit Timing Offset field (octet 2) - 63.
2018 * The range of MS Timing Offset is therefore -63 to 192.
2020 proto_tree_add_item(ie_tree, hf_rsl_timing_offset, tvb, offset, 1, ENC_BIG_ENDIAN);
2027 * 9.3.38 Erroneous Message
2028 * This information element is used to carry a complete A-bis interface message
2029 * which was considered erroneous at reception.
2032 dissect_rsl_ie_err_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, gboolean is_mandatory)
2035 proto_tree *ie_tree;
2039 if(is_mandatory == FALSE){
2040 ie_id = tvb_get_guint8(tvb,offset);
2041 if (ie_id != RSL_IE_ERR_MSG)
2045 ti = proto_tree_add_text(tree, tvb,offset,0,"Erroneous Message IE ");
2046 ie_tree = proto_item_add_subtree(ti, ett_ie_err_msg);
2048 /* Element identifier */
2049 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
2052 length = tvb_get_guint8(tvb,offset);
2053 proto_item_set_len(ti, length+2);
2055 proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, ENC_BIG_ENDIAN);
2058 /* Received Message */
2059 offset = dissct_rsl_msg(tvb, pinfo, ie_tree, offset);
2065 * 9.3.39 Full BCCH Information (message name)
2068 dissect_rsl_ie_full_bcch_inf(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
2071 proto_tree *ie_tree;
2076 if(is_mandatory == FALSE){
2077 ie_id = tvb_get_guint8(tvb,offset);
2078 if (ie_id != RSL_IE_FULL_BCCH_INF)
2082 ti = proto_tree_add_text(tree, tvb,offset,0,"Full BCCH Information IE");
2083 ie_tree = proto_item_add_subtree(ti, ett_ie_full_bcch_inf);
2085 /* Element identifier */
2086 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
2089 length = tvb_get_guint8(tvb, offset);
2090 proto_item_set_len(ti, length+2);
2091 proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, ENC_BIG_ENDIAN);
2095 * Octets 3-25 contain the complete L3 message as defined in 3GPP TS 44.018.
2098 proto_tree_add_text(ie_tree, tvb,offset,length,"Layer 3 message");
2099 next_tvb = tvb_new_subset(tvb, offset, length, length);
2100 call_dissector(gsm_a_ccch_handle, next_tvb, pinfo, top_tree);
2102 offset = offset + length;
2108 * 9.3.40 Channel Needed
2110 static const value_string rsl_ch_needed_vals[] = {
2111 { 0x00, "Any Channel" },
2113 { 0x02, "TCH/F (Full rate)" },
2114 { 0x03, "TCH/F or TCH/H (Dual rate)" },
2119 dissect_rsl_ie_ch_needed(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
2122 proto_tree *ie_tree;
2125 if(is_mandatory == FALSE){
2126 ie_id = tvb_get_guint8(tvb,offset);
2127 if (ie_id != RSL_IE_CH_NEEDED)
2132 ti = proto_tree_add_text(tree, tvb,offset,0,"Channel Needed IE");
2133 ie_tree = proto_item_add_subtree(ti, ett_ie_ch_needed);
2135 /* Element identifier */
2136 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
2140 proto_tree_add_item(ie_tree, hf_rsl_ch_needed, tvb, offset, 1, ENC_BIG_ENDIAN);
2146 * 9.3.41 CB Command type
2149 dissect_rsl_ie_cb_cmd_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
2152 proto_tree *ie_tree;
2155 if(is_mandatory == FALSE){
2156 ie_id = tvb_get_guint8(tvb,offset);
2157 if (ie_id != RSL_IE_CB_CMD_TYPE)
2162 ti = proto_tree_add_text(tree, tvb,offset,0,"CB Command type IE");
2163 ie_tree = proto_item_add_subtree(ti, ett_ie_cb_cmd_type);
2165 /* Element identifier */
2166 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
2170 proto_tree_add_item(ie_tree, hf_rsl_ch_needed, tvb, offset, 1, ENC_BIG_ENDIAN);
2177 * 9.3.42 SMSCB Message
2180 dissect_rsl_ie_smscb_mess(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
2183 proto_tree *ie_tree;
2188 if(is_mandatory == FALSE){
2189 ie_id = tvb_get_guint8(tvb,offset);
2190 if (ie_id != RSL_IE_SMSCB_MESS)
2193 ti = proto_tree_add_text(tree, tvb,offset,0,"SMSCB Message IE");
2194 ie_tree = proto_item_add_subtree(ti, ett_ie_smscb_mess);
2196 /* Element identifier */
2197 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
2200 length = tvb_get_guint8(tvb,offset);
2201 proto_item_set_len(ti, length+2);
2202 proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, ENC_BIG_ENDIAN);
2210 proto_tree_add_text(ie_tree, tvb,offset,length ,"SMSCB Message");
2212 offset = ie_offset + length;
2218 * 9.3.43 CBCH Load Information
2221 static const true_false_string rsl_cbch_load_type_vals = {
2227 dissect_rsl_ie_cbch_load_inf(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
2229 proto_item *ti, *item;
2230 proto_tree *ie_tree;
2234 if(is_mandatory == FALSE){
2235 ie_id = tvb_get_guint8(tvb,offset);
2236 if (ie_id != RSL_IE_CBCH_LOAD_INF)
2241 ti = proto_tree_add_text(tree, tvb,offset,0,"CBCH Load Information IE");
2242 ie_tree = proto_item_add_subtree(ti, ett_ie_cbch_load_inf);
2244 /* Element identifier */
2245 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
2248 octet = tvb_get_guint8(tvb,offset);
2249 /* CBCH Load Type */
2250 proto_tree_add_item(ie_tree, hf_rsl_cbch_load_type, tvb, offset, 1, ENC_BIG_ENDIAN);
2252 /* Message Slot Count */
2253 item = proto_tree_add_item(ie_tree, hf_rsl_msg_slt_cnt, tvb, offset, 1, ENC_BIG_ENDIAN);
2254 if ((octet & 0x80) == 0x80){
2255 proto_item_append_text(item,"The amount of SMSCB messages (1 to 15) that are needed immediately by BTS");
2257 proto_item_append_text(item,"The amount of delay in message slots (1 to 15) that is needed immediately by BTS");
2265 * 9.3.44 SMSCB Channel Indicator
2268 static const value_string rsl_ch_ind_vals[] = {
2269 { 0x00, "Basic CBCH" },
2270 { 0x01, "Extended CBCH (supporting the extended CBCH by the network or MSs is optional)" },
2275 dissect_rsl_ie_smscb_ch_ind(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
2278 proto_tree *ie_tree;
2281 if(is_mandatory == FALSE){
2282 ie_id = tvb_get_guint8(tvb,offset);
2283 if (ie_id != RSL_IE_SMSCB_CH_IND)
2288 ti = proto_tree_add_text(tree, tvb,offset,0,"SMSCB Channel Indicator IE");
2289 ie_tree = proto_item_add_subtree(ti, ett_ie_smscb_ch_ind);
2291 /* Element identifier */
2292 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
2296 proto_tree_add_item(ie_tree, hf_rsl_ch_ind, tvb, offset, 1, ENC_BIG_ENDIAN);
2303 * 9.3.45 Group call reference
2306 dissect_rsl_ie_grp_call_ref(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, gboolean is_mandatory)
2309 proto_tree *ie_tree;
2313 if(is_mandatory == FALSE){
2314 ie_id = tvb_get_guint8(tvb,offset);
2315 if (ie_id != RSL_IE_GRP_CALL_REF)
2318 ti = proto_tree_add_text(tree, tvb,offset,0,"Group call reference IE");
2319 ie_tree = proto_item_add_subtree(ti, ett_ie_grp_call_ref);
2321 /* Element identifier */
2322 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
2325 length = tvb_get_guint8(tvb,offset);
2326 proto_item_set_len(ti, length+2);
2327 proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, ENC_BIG_ENDIAN);
2330 proto_tree_add_text(ie_tree, tvb,offset,length,"Descriptive group or broadcast call reference");
2332 /* The octets 3 to 7 are coded in the same way as the octets 2 to 6
2333 * in the Descriptive group or broadcast call reference
2334 * information element as defined in 3GPP TS 24.008.
2336 de_d_gb_call_ref(tvb, ie_tree, pinfo, offset, length, NULL, 0);
2338 offset = offset + length;
2343 * 9.3.46 Channel description
2346 dissect_rsl_ie_ch_desc(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
2349 proto_tree *ie_tree;
2353 if(is_mandatory == FALSE){
2354 ie_id = tvb_get_guint8(tvb,offset);
2355 if (ie_id != RSL_IE_CH_DESC)
2358 ti = proto_tree_add_text(tree, tvb,offset,0,"Channel description IE");
2359 ie_tree = proto_item_add_subtree(ti, ett_ie_ch_desc);
2361 /* Element identifier */
2362 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
2365 length = tvb_get_guint8(tvb,offset);
2366 proto_item_set_len(ti, length+2);
2367 proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, ENC_BIG_ENDIAN);
2370 proto_tree_add_text(ie_tree, tvb,offset,length,"Group Channel Description");
2372 /* Octet j (j = 3, 4, ..., n) is the unchanged octet j-2 of a radio interface Group Channel description
2373 * information element as defined in 3GPP TS 44.018, n-2 is equal to the length of the radio interface
2374 * Group channel description information element
2377 offset = offset + length;
2382 * 9.3.47 NCH DRX information
2383 * This is a variable length element used to pass a radio interface information element
2387 dissect_rsl_ie_nch_drx(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
2390 proto_tree *ie_tree;
2393 if(is_mandatory == FALSE){
2394 ie_id = tvb_get_guint8(tvb,offset);
2395 if (ie_id != RSL_IE_NCH_DRX_INF)
2399 ti = proto_tree_add_text(tree, tvb,offset,2,"NCH DRX information IE");
2400 ie_tree = proto_item_add_subtree(ti, ett_ie_nch_drx);
2402 /* Element identifier */
2403 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
2405 /* NCH DRX information */
2406 /* Octet 3 bits 7 and 8 are spare and set to zero. */
2407 /* Octet 3 bit 6 is the NLN status parameter as defined in 3GPP TS 44.018.*/
2408 /* Octet 3 bits 3, 4 and 5 are bits 1, 2 and 3 of the radio interface
2409 * eMLPP priority as defined in 3GPP TS 44.018.
2411 /* Octet 3 bits 1 and 2 are bits 1 and 2 of the radio interface NLN
2412 * as defined in 3GPP TS 44.018.
2420 * 9.3.48 Command indicator
2424 dissect_rsl_ie_cmd_ind(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
2427 proto_tree *ie_tree;
2431 if(is_mandatory == FALSE){
2432 ie_id = tvb_get_guint8(tvb,offset);
2433 if (ie_id != RSL_IE_CMD_IND)
2438 /* TODO Length wrong if extended */
2439 ti = proto_tree_add_text(tree, tvb,offset,2,"Command indicator IE");
2440 ie_tree = proto_item_add_subtree(ti, ett_ie_cmd_ind);
2442 /* Element identifier */
2443 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
2447 proto_tree_add_item(ie_tree, hf_rsl_extension_bit, tvb, offset, 1, ENC_BIG_ENDIAN);
2450 /* TODO this should probably be add_uint instead!!! */
2451 octet = tvb_get_guint8(tvb,offset);
2452 if ((octet&0x80)==0x80){
2454 /* Command Extension */
2455 proto_tree_add_item(ie_tree, hf_rsl_command, tvb, offset, 2, ENC_BIG_ENDIAN);
2459 proto_tree_add_item(ie_tree, hf_rsl_command, tvb, offset, 1, ENC_BIG_ENDIAN);
2466 * 9.3.49 eMLPP Priority
2468 static const value_string rsl_emlpp_prio_vals[] = {
2469 { 0x00, "no priority applied" },
2470 { 0x01, "call priority level 4" },
2471 { 0x02, "call priority level 3" },
2472 { 0x03, "call priority level 2" },
2473 { 0x04, "call priority level 1" },
2474 { 0x05, "call priority level 0" },
2475 { 0x06, "call priority level B" },
2476 { 0x07, "call priority level A" },
2481 dissect_rsl_ie_emlpp_prio(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
2484 proto_tree *ie_tree;
2487 if(is_mandatory == FALSE){
2488 ie_id = tvb_get_guint8(tvb,offset);
2489 if (ie_id != RSL_IE_EMLPP_PRIO)
2493 ti = proto_tree_add_text(tree, tvb,offset,2,"eMLPP Priority IE");
2494 ie_tree = proto_item_add_subtree(ti, ett_ie_emlpp_prio);
2496 /* Element identifier */
2497 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
2500 /* The call priority field (bit 3 to 1 of octet 2) is coded in the same way
2501 * as the call priority field (bit 3 to 1 of octet 5) in the
2502 * Descriptive group or broadcast call reference information element
2503 * as defined in 3GPP TS 24.008.
2505 proto_tree_add_item(ie_tree, hf_rsl_emlpp_prio, tvb, offset, 1, ENC_BIG_ENDIAN);
2515 dissect_rsl_ie_uic(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
2518 proto_tree *ie_tree;
2521 if(is_mandatory == FALSE){
2522 ie_id = tvb_get_guint8(tvb,offset);
2523 if (ie_id != RSL_IE_UIC)
2527 ti = proto_tree_add_text(tree, tvb,offset,0,"UIC IE");
2528 ie_tree = proto_item_add_subtree(ti, ett_ie_uic);
2530 /* Element identifier */
2531 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
2534 /* Octet 3 bits 1 to 6 contain the radio interface octet 2 bits 3 to 8 of the
2535 * UIC information element as defined in 3GPP TS 44.018.
2537 proto_tree_add_text(ie_tree, tvb,offset,1,"UIC");
2544 * 9.3.51 Main channel reference
2548 dissect_rsl_ie_main_ch_ref(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
2551 proto_tree *ie_tree;
2554 if(is_mandatory == FALSE){
2555 ie_id = tvb_get_guint8(tvb,offset);
2556 if (ie_id != RSL_IE_MAIN_CH_REF)
2560 ti = proto_tree_add_text(tree, tvb,offset,0,"Main channel reference IE");
2561 ie_tree = proto_item_add_subtree(ti, ett_ie_main_ch_ref);
2563 /* Element identifier */
2564 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
2567 /* TN is time slot number, binary represented as in 3GPP TS 45.002.
2570 proto_tree_add_item(ie_tree, hf_rsl_ch_no_TN, tvb, offset, 1, ENC_BIG_ENDIAN);
2576 * 9.3.52 MultiRate configuration
2580 dissect_rsl_ie_multirate_conf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, gboolean is_mandatory)
2583 proto_tree *ie_tree;
2587 if(is_mandatory == FALSE){
2588 ie_id = tvb_get_guint8(tvb,offset);
2589 if (ie_id != RSL_IE_MULTIRATE_CONF)
2592 ti = proto_tree_add_text(tree, tvb,offset,0,"MultiRate configuration IE");
2593 ie_tree = proto_item_add_subtree(ti, ett_ie_multirate_conf);
2595 /* Element identifier */
2596 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
2599 length = tvb_get_guint8(tvb,offset);
2600 proto_item_set_len(ti, length+2);
2601 proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, ENC_BIG_ENDIAN);
2604 /* Rest of element coded as in 3GPP TS 44.018 not including
2605 * 3GPP TS 44.018 element identifier or 3GPP TS 44.018 octet length value
2608 de_rr_multirate_conf(tvb, ie_tree, pinfo, offset, length, NULL, 0);
2610 offset = offset + length;
2616 * 9.3.53 MultiRate Control
2619 dissect_rsl_ie_multirate_cntrl(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
2622 proto_tree *ie_tree;
2625 if(is_mandatory == FALSE){
2626 ie_id = tvb_get_guint8(tvb,offset);
2627 if (ie_id != RSL_IE_MULTIRATE_CNTRL)
2630 ti = proto_tree_add_text(tree, tvb,offset,2,"MultiRate Control IE");
2631 ie_tree = proto_item_add_subtree(ti, ett_ie_multirate_cntrl);
2633 /* Element identifier */
2634 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
2637 /* Bit 8 -5 Spare */
2638 /* The OD field (bit 5 of octet 3) indicates if the BSC expects distant parameters or
2639 * TFO Decision algorithm result from the BTS
2641 /* The PRE field (bit 4 of octet 3) indicates if an handover is to be expected soon or not. */
2642 /* The RAE field (bits 2-3, octet 3) defines whether the RATSCCH mechanism is enabled or not.*/
2649 * 9.3.54 Supported Codec Types
2650 * This element indicates the codec types supported by the BSS or remote BSS.
2653 dissect_rsl_ie_sup_codec_types(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
2656 proto_tree *ie_tree;
2660 if(is_mandatory == FALSE){
2661 ie_id = tvb_get_guint8(tvb,offset);
2662 if (ie_id != RSL_IE_SUP_CODEC_TYPES)
2665 ti = proto_tree_add_text(tree, tvb,offset,0,"Supported Codec Types IE");
2666 ie_tree = proto_item_add_subtree(ti, ett_ie_sup_codec_types);
2668 /* Element identifier */
2669 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
2672 length = tvb_get_guint8(tvb,offset);
2673 proto_item_set_len(ti, length+2);
2674 proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, ENC_BIG_ENDIAN);
2677 proto_tree_add_text(tree, tvb,offset,length,"Codec List");
2679 /* The Codec List field (octet 4) lists the codec types that are supported
2680 * by the BSS and Transcoder, and are therefore potential candidates for TFO
2683 /* The Codec List extension 1 field (octet 5) lists additional codec types
2684 * that are supported by the BSS and Transcoder, and are therefore potential
2685 * candidates for TFO establishment. When no codec from this list is supported,
2686 * then this field shall not be sent, and the extension bit of octet 4 shall
2689 /* If bit 4 of the Codec List field (octet 4) indicates that FR AMR is supported
2690 * or if bit 5 of the Codec List field (octet 4) indicates that HR AMR is supported
2691 * and bit 8 is set to 0, or if bit 6 of the Codec List field (octet 4) indicates
2692 * that UMTS AMR is supported, or if bit 7 of the Codec List field (octet 4)
2693 * indicates that UMTS AMR 2 is supported, or if bit 1, 3, 4 or 5 of the Codec List
2694 * extension 1 field (octet 5) indicates that AMR WB is supported, the following
2695 * two octets (after the Codec List field and its extensions) is present
2698 return offset + length;
2702 * 9.3.55 Codec Configuration
2704 /* The Active Codec Type field (bits 1-8, octet 3) indicates the type of codec in use. It is coded as follows: */
2706 0 0 0 0 . 0 0 0 0: Full Rate Codec in use
2707 0 0 0 0 . 0 0 0 1: Half Rate Codec in use
2708 0 0 0 0 . 0 0 1 0: Enhanced Full Rate Codec in use
2709 0 0 0 0 . 0 0 1 1: FR Adaptive Multi Rate Codec in use
2710 0 0 0 0 . 0 1 0 0: HR Adaptive Multi Rate Codec in use
2711 0 0 0 0 . 0 1 0 1: UMTS Adaptive Multi Rate Codec in use
2712 0 0 0 0 . 0 1 1 0: UMTS Adaptive Multi Rate 2 Codec in use
2713 0 0 0 0 . 1 0 0 1: Full Rate Adaptive Multi-Rate WideBand Codec in use
2714 0 0 0 0 1 0 1 0 UMTS Adaptive Multi-Rate WideBand Codec in use
2715 0 0 0 0 1 0 1 1 8PSK Half Rate Adaptive Multi-Rate Codec in use
2716 0 0 0 0 1 1 0 0 8PSK Full Rate Adaptive Multi-Rate WideBand Codec in use
2717 0 0 0 0 1 1 0 1 8PSK Half Rate Adaptive Multi-Rate WideBand Codec in use
2718 All other values are reserved for future use
2721 dissect_rsl_ie_codec_conf(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
2724 proto_tree *ie_tree;
2728 if(is_mandatory == FALSE){
2729 ie_id = tvb_get_guint8(tvb,offset);
2730 if (ie_id != RSL_IE_CODEC_CONF)
2733 ti = proto_tree_add_text(tree, tvb,offset,0,"Codec Configuration IE");
2734 ie_tree = proto_item_add_subtree(ti, ett_ie_codec_conf);
2736 /* Element identifier */
2737 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
2740 length = tvb_get_guint8(tvb,offset);
2741 proto_item_set_len(ti, length+2);
2742 proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, ENC_BIG_ENDIAN);
2745 /* Active Codec Type */
2747 return offset + length;
2751 * 9.3.56 Round Trip Delay
2752 * This element indicates the value of the calculated round trip delay between the BTS
2753 * and the transcoder, or between the BTS and the remote BTS, if TFO is established.
2756 static const value_string rsl_delay_ind_vals[] = {
2757 { 0x00, "The RTD field contains the BTS-Transcoder round trip delay" },
2758 { 0x01, "The RTD field contains the BTS-Remote BTS round trip delay" },
2762 dissect_rsl_ie_rtd(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
2764 proto_item *ti, *rtd_item;
2765 proto_tree *ie_tree;
2769 if(is_mandatory == FALSE){
2770 ie_id = tvb_get_guint8(tvb,offset);
2771 if (ie_id != RSL_IE_RTD)
2775 ti = proto_tree_add_text(tree, tvb,offset,0,"Round Trip Delay IE");
2776 ie_tree = proto_item_add_subtree(ti, ett_ie_rtd);
2778 /* Element identifier */
2779 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
2782 /* The RTD field is the binary representation of the value of the
2783 * round trip delay in 20 ms increments.
2785 rtd = (tvb_get_guint8(tvb,offset)>>1)*20;
2786 rtd_item = proto_tree_add_uint(tree, hf_rsl_rtd, tvb,offset,1,rtd);
2787 proto_item_append_text(rtd_item," ms");
2789 /* The Delay IND field indicates if the delay corresponds to a BTS
2790 * to transcoder delay or to a BTS to remote BTS delay.
2792 proto_tree_add_item(ie_tree, hf_rsl_delay_ind, tvb, offset, 1, ENC_BIG_ENDIAN);
2799 * This element indicates if TFO is established. It is coded in 2 octets
2802 static const true_false_string rsl_tfo_vals = {
2803 "TFO is established",
2804 "TFO is not established"
2808 dissect_rsl_ie_tfo_status(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
2811 proto_tree *ie_tree;
2814 if(is_mandatory == FALSE){
2815 ie_id = tvb_get_guint8(tvb,offset);
2816 if (ie_id != RSL_IE_TFO_STATUS)
2820 ti = proto_tree_add_text(tree, tvb,offset,0,"TFO Status IE");
2821 ie_tree = proto_item_add_subtree(ti, ett_ie_tfo_status);
2823 /* Element identifier */
2824 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
2827 proto_tree_add_item(ie_tree, hf_rsl_tfo, tvb, offset, 1, ENC_BIG_ENDIAN);
2836 dissect_rsl_ie_llp_apdu(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
2839 proto_tree *ie_tree;
2844 if(is_mandatory == FALSE){
2845 ie_id = tvb_get_guint8(tvb,offset);
2846 if (ie_id != RSL_IE_LLP_APDU)
2850 ti = proto_tree_add_text(tree, tvb,offset,0,"LLP APDU IE");
2851 ie_tree = proto_item_add_subtree(ti, ett_ie_llp_apdu);
2853 /* Element identifier */
2854 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
2857 length = tvb_get_guint8(tvb, offset);
2858 proto_item_set_len(ti, length+2);
2859 proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, ENC_BIG_ENDIAN);
2864 /* The rest of the information element contains the embedded message
2865 * that contains a Facility Information Element as defined in
2866 * 3GPP TS 44.071 excluding the Facility IEI and length of Facility IEI
2867 * octets defined in 3GPP TS 44.071.
2869 /* TODO: Given traces with LLP data this IE could be further dissected */
2870 proto_tree_add_text(tree, tvb,offset,length,
2871 "Facility Information Element as defined in 3GPP TS 44.071");
2872 return ie_offset + length;
2875 * 9.3.59 TFO transparent container
2876 * This is a variable length element that conveys a message associated with TFO protocol,
2877 * as defined in 3GPP TS 28.062. This element can be sent from the BSC to the BTS or
2878 * from the BTS to the BSC. The BTS shall retrieve the information it is able to understand,
2879 * and forward transparently the complete information to the BSC or to the TRAU.
2882 dissect_rsl_ie_tfo_transp_cont(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
2885 proto_tree *ie_tree;
2890 if(is_mandatory == FALSE){
2891 ie_id = tvb_get_guint8(tvb,offset);
2892 if (ie_id != RSL_IE_TFO_TRANSP_CONT)
2896 ti = proto_tree_add_text(tree, tvb,offset,0,"TFO transparent container IE");
2897 ie_tree = proto_item_add_subtree(ti, ett_ie_tfo_transp_cont);
2899 /* Element identifier */
2900 proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, ENC_BIG_ENDIAN);
2903 length = tvb_get_guint8(tvb, offset);
2904 proto_item_set_len(ti, length+2);
2905 proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, ENC_BIG_ENDIAN);
2910 /* The rest of the information element contains the embedded message
2911 * that contains a Facility Information Element as defined in
2912 * 3GPP TS 44.071 excluding the Facility IEI and length of Facility IEI
2913 * octets defined in 3GPP TS 44.071.
2915 proto_tree_add_text(tree, tvb,offset,length,
2916 "Embedded message that contains the TFO configuration");
2917 return ie_offset + length;
2921 dissct_rsl_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
2925 msg_type = tvb_get_guint8(tvb,offset)&0x7f;
2926 proto_tree_add_item(tree, hf_rsl_msg_type, tvb, offset, 1, ENC_BIG_ENDIAN);
2930 /* Radio Link Layer Management messages */
2931 /* 8.3.1 DATA REQUEST */
2932 case RSL_MSG_TYPE_DATA_REQ:
2933 /* Channel number 9.3.1 M TV 2 */
2934 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
2935 /* Link Identifier 9.3.2 M TV 2 */
2936 offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset, TRUE);
2937 /* L3 Information 9.3.11 M TLV >=3 */
2938 offset = dissect_rsl_ie_L3_inf(tvb, pinfo, tree, offset, TRUE);
2940 /* 8.3.2 DATA INDICATION */
2941 case RSL_MSG_TYPE_DATA_IND:
2942 /* Channel number 9.3.1 M TV 2 */
2943 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
2944 /* Link Identifier 9.3.2 M TV 2 */
2945 offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset, TRUE);
2946 /* L3 Information 9.3.11 M TLV >=3 */
2947 offset = dissect_rsl_ie_L3_inf(tvb, pinfo, tree, offset, TRUE);
2949 /* 8.3.3 ERROR INDICATION */
2950 case RSL_MSG_TYPE_ERROR_IND:
2951 /* Channel number 9.3.1 M TV 2 */
2952 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
2953 /* Link Identifier 9.3.2 M TV 2 */
2954 offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset, TRUE);
2955 /* RLM Cause 9.3.22 M TLV 2-4 */
2956 offset = dissect_rsl_ie_rlm_cause(tvb, pinfo, tree, offset, TRUE);
2958 /* 8.3.4 ESTABLISH REQUEST */
2959 case RSL_MSG_TYPE_EST_REQ:
2960 /* Channel number 9.3.1 M TV 2 */
2961 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
2962 /* Link Identifier 9.3.2 M TV 2 */
2963 offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset, TRUE);
2965 /* 8.3.5 ESTABLISH CONFIRM */
2966 case RSL_MSG_TYPE_EST_CONF:
2967 /* Channel number 9.3.1 M TV 2 */
2968 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
2969 /* Link Identifier 9.3.2 M TV 2 */
2970 offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset, TRUE);
2973 case RSL_MSG_EST_IND:
2974 /* Channel number 9.3.1 M TV 2 */
2975 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
2976 /* Link Identifier 9.3.2 M TV 2 */
2977 offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset, TRUE);
2978 /* L3 Information 9.3.11 O (note 1) TLV 3-23 */
2979 if(tvb_length_remaining(tvb,offset) >1)
2980 offset = dissect_rsl_ie_L3_inf(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
2982 /* 8.3.7 RELEASE REQUEST */
2983 case RSL_MSG_REL_REQ:
2984 /* Channel number 9.3.1 M TV 2 */
2985 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
2986 /* Link Identifier 9.3.2 M TV 2 */
2987 offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset, TRUE);
2988 /* Release Mode 9.3.20 M TV 2 */
2989 offset = dissect_rsl_ie_rel_mode(tvb, pinfo, tree, offset, TRUE);
2991 /* 8.3.8 RELEASE CONFIRM */
2992 case RSL_MSG_REL_CONF:
2993 /* Channel number 9.3.1 M TV 2 */
2994 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
2995 /* Link Identifier 9.3.2 M TV 2 */
2996 offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset, TRUE);
2998 /* 8.3.9 RELEASE INDICATION */
2999 case RSL_MSG_REL_IND:
3000 /* Channel number 9.3.1 M TV 2 */
3001 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3002 /* Link Identifier 9.3.2 M TV 2 */
3003 offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset, TRUE);
3005 /* 8.3.10 UNIT DATA REQUEST 10 */
3006 case RSL_MSG_UNIT_DATA_REQ:
3007 /* Channel number 9.3.1 M TV 2 */
3008 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3009 /* Link Identifier 9.3.2 M TV 2 */
3010 offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset, TRUE);
3011 /* L3 Information 9.3.11 O (note 1) TLV 3-23 */
3012 if(tvb_length_remaining(tvb,offset) > 0)
3013 offset = dissect_rsl_ie_L3_inf(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3015 /* Common Channel Management/TRX Management messages */
3016 /* 8.5.1 BCCH INFORMATION 17*/
3017 case RSL_MSG_BCCH_INFO:
3018 /* Channel number 9.3.1 M TV 2 */
3019 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3020 /* System Info Type 9.3.30 M TV 2 */
3021 offset = dissect_rsl_ie_sys_info_type(tvb, pinfo, tree, offset, TRUE);
3022 /* Full BCCH Info (SYS INFO) 9.3.39 O 1) TLV 25 */
3023 if(tvb_length_remaining(tvb,offset) > 0)
3024 offset = dissect_rsl_ie_full_bcch_inf(tvb, pinfo, tree, offset, TRUE);
3025 /* Starting Time 9.3.23 O 2) TV 3 */
3026 if(tvb_length_remaining(tvb,offset) > 0)
3027 offset = dissect_rsl_ie_staring_time(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3029 /* 8.5.2 CCCH LOAD INDICATION 18*/
3030 case RSL_MSG_CCCH_LOAD_IND:
3031 /* Channel number (note) 9.3.1 M TV 2 */
3032 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3033 /* Either RACH Load or Paging Load present */
3034 /* RACH Load 9.3.18 C 1) TLV >=8 */
3035 offset = dissect_rsl_ie_rach_load(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3036 /* Paging Load 9.3.15 C 2) TV 3 */
3037 if(tvb_length_remaining(tvb,offset) > 0)
3038 offset = dissect_rsl_ie_paging_load(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3041 case RSL_MSG_CHANRQD: /* 19 */
3042 /* Channel number 9.3.1 M TV 2 */
3043 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3044 /* Request Reference 9.3.19 M TV 4 */
3045 offset = dissect_rsl_ie_req_ref(tvb, pinfo, tree, offset, TRUE);
3046 /* Access Delay 9.3.17 M TV 2 */
3047 offset = dissect_rsl_ie_access_delay(tvb, pinfo, tree, offset, TRUE);
3048 /* Physical Context 9.3.16 O 1) TLV >=2 */
3049 if(tvb_length_remaining(tvb,offset) > 0)
3050 offset = dissect_rsl_ie_phy_ctx(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3052 /* 8.5.4 DELETE INDICATION */
3053 case RSL_MSG_DELETE_IND: /* 20 */
3054 /* Channel number 9.3.1 M TV 2 */
3055 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3056 /* Full Imm. Assign Info 9.3.35 M TLV 25 */
3057 offset = dissect_rsl_ie_full_imm_ass_inf(tvb, pinfo, tree, offset, TRUE);
3059 case RSL_MSG_PAGING_CMD: /* 21 */
3060 /* Channel number 9.3.1 M TV 2 */
3061 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3062 /* Paging Group 9.3.14 M TV 2 2 */
3063 offset = dissect_rsl_ie_paging_grp(tvb, pinfo, tree, offset, TRUE);
3064 /* MS Identity 9.3.12 M TLV 2-10 2 */
3065 offset = dissect_rsl_ie_ms_id(tvb, pinfo, tree, offset, TRUE);
3066 /* Channel Needed 9.3.40 O 1) TV 2 2 */
3067 if(tvb_length_remaining(tvb,offset) > 0)
3068 offset = dissect_rsl_ie_ch_needed(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3069 /* eMLPP Priority 9.3.49 O 2) TV 2 2 */
3070 if(tvb_length_remaining(tvb,offset) > 0)
3071 offset = dissect_rsl_ie_emlpp_prio(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3073 /* 8.5.6 IMMEDIATE ASSIGN COMMAND */
3074 case RSL_MSG_IMM_ASS_CMD: /* 22 */
3075 /* Channel number 9.3.1 M TV 2 */
3076 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3077 /* Full Imm. Assign Info 9.3.35 M TLV 25 */
3078 offset = dissect_rsl_ie_full_imm_ass_inf(tvb, pinfo, tree, offset, TRUE);
3080 /* 8.5.7 SMS BROADCAST REQUEST */
3081 case RSL_MSG_SMS_BC_REQ: /* 23 8.5.7 */
3082 /* Channel number 9.3.1 M TV 2 */
3083 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3084 /* SMSCB Information 9.3.36 M TV 24 */
3085 offset = dissect_rsl_ie_smscb_inf(tvb, pinfo, tree, offset, TRUE);
3086 /* SMSCB Channel Indicator 9.3.44 O 1) TV 2 */
3087 if(tvb_length_remaining(tvb,offset) > 0)
3088 offset = dissect_rsl_ie_smscb_ch_ind(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3090 /* 8.6 TRX MANAGEMENT MESSAGES */
3091 /* 8.6.1 RF RESOURCE INDICATION */
3092 case RSL_MSG_RF_RES_IND: /* 24 8.6.1 */
3093 /* Resource Information 9.3.21 M TLV >=2 */
3094 offset = dissect_rsl_ie_resource_inf(tvb, pinfo, tree, offset, TRUE);
3096 /* 8.6.2 SACCH FILLING */
3097 case RSL_MSG_SACCH_FILL: /* 25 8.6.2 */
3098 /* System Info Type 9.3.30 M TV 2 */
3099 offset = dissect_rsl_ie_sys_info_type(tvb, pinfo, tree, offset, TRUE);
3100 /* L3 Info (SYS INFO) 9.3.11 O 1) TLV 22 */
3101 if(tvb_length_remaining(tvb,offset) > 0)
3102 offset = dissect_rsl_ie_L3_inf(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3103 /* Starting Time 9.3.23 O 2) TV 3 */
3104 if(tvb_length_remaining(tvb,offset) > 0)
3105 offset = dissect_rsl_ie_staring_time(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3107 case RSL_MSG_OVERLOAD: /* 27 8.6.3 */
3108 /* Cause 9.3.26 M TLV >=3 */
3109 offset = dissect_rsl_ie_cause(tvb, pinfo, tree, offset, TRUE);
3111 case RSL_MSG_ERROR_REPORT: /* 28 8.6.4 */
3112 /* Cause 9.3.26 M TLV >=3 */
3113 offset = dissect_rsl_ie_cause(tvb, pinfo, tree, offset, TRUE);
3114 /* Message Identifier 9.3.28 O 1) TV 2 */
3115 if(tvb_length_remaining(tvb,offset) > 0)
3116 offset = dissect_rsl_ie_message_id(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3117 /* Channel Number 9.3.1 O 2) TV 2 */
3118 if(tvb_length_remaining(tvb,offset) > 0)
3119 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3120 /* Link identifier 9.3.2 O 3) TV 2 */
3121 if(tvb_length_remaining(tvb,offset) > 0)
3122 offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset, TRUE);
3123 /* Erroneous Message 9.3.38 O 4) TLV >=3 */
3124 if(tvb_length_remaining(tvb,offset) > 0)
3125 offset = dissect_rsl_ie_err_msg(tvb, pinfo, tree, offset, TRUE);
3127 /* 8.5.8 SMS BROADCAST COMMAND */
3128 case RSL_MSG_SMS_BC_CMD: /* 29 8.5.8 */
3129 /* Channel number 9.3.1 M TV 2 */
3130 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3131 /* CB Command type 9.3.41 M TV 2 */
3132 offset = dissect_rsl_ie_cb_cmd_type(tvb, pinfo, tree, offset, TRUE);
3133 /* SMSCB message 9.3.42 M TLV 2-90 */
3134 offset = dissect_rsl_ie_smscb_mess(tvb, pinfo, tree, offset, TRUE);
3135 /* SMSCB Channel Indicator 9.3.44 O 1) TV 2 */
3136 if(tvb_length_remaining(tvb,offset) > 0)
3137 offset = dissect_rsl_ie_smscb_ch_ind(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3139 case RSL_MSG_CBCH_LOAD_IND: /* 30 8.5.9 */
3140 /* Channel number 9.3.1 M TV 2 */
3141 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3142 /* CBCH Load Information 9.3.43 M TV 2 */
3143 offset = dissect_rsl_ie_cbch_load_inf(tvb, pinfo, tree, offset, TRUE);
3144 /* SMSCB Channel Indicator 9.3.44 O 1) TV 2 */
3145 if(tvb_length_remaining(tvb,offset) > 0)
3146 offset = dissect_rsl_ie_smscb_ch_ind(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3148 case RSL_MSG_NOT_CMD: /* 31 8.5.10 */
3149 /* Channel number 9.3.1 M TV 2 */
3150 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3151 /* Command indicator 9.3.48 M 1) TLV 3-4 */
3152 offset = dissect_rsl_ie_cmd_ind(tvb, pinfo, tree, offset, TRUE);
3153 /* Group call reference 9.3.45 O TLV 7 */
3154 if(tvb_length_remaining(tvb,offset) > 0)
3155 offset = dissect_rsl_ie_grp_call_ref(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3156 /* Channel Description 9.3.46 O TLV 3-n */
3157 if(tvb_length_remaining(tvb,offset) > 0)
3158 offset = dissect_rsl_ie_ch_desc(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3159 /* NCH DRX information 9.3.47 O TLV 3 */
3160 if(tvb_length_remaining(tvb,offset) > 0)
3161 offset = dissect_rsl_ie_nch_drx(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3164 /* Dedicated Channel Management messages: */
3165 /* 8.4.1 CHANNEL ACTIVATION 33*/
3166 case RSL_MSG_CHAN_ACTIV:
3167 /* Channel number 9.3.1 M TV 2 */
3168 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3169 /* Activation Type 9.3.3 M TV 2 */
3170 offset = dissect_rsl_ie_act_type(tvb, pinfo, tree, offset, TRUE);
3171 /* Channel Mode 9.3.6 M TLV 8-9 */
3172 offset = dissect_rsl_ie_ch_mode(tvb, pinfo, tree, offset, TRUE);
3173 /* Channel Identification 9.3.5 O 7) TLV 8 */
3174 if(tvb_length_remaining(tvb,offset) > 0)
3175 offset = dissect_rsl_ie_ch_id(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3176 /* Encryption information 9.3.7 O 1) TLV >=3 */
3177 if(tvb_length_remaining(tvb,offset) > 0)
3178 offset = dissect_rsl_ie_enc_inf(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3179 /* Handover Reference 9.3.9 C 2) TV 2 */
3180 if(tvb_length_remaining(tvb,offset) > 0)
3181 offset = dissect_rsl_ie_ho_ref(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3182 /* BS Power 9.3.4 O 3) TV 2 */
3183 if(tvb_length_remaining(tvb,offset) > 0)
3184 offset = dissect_rsl_ie_bs_power(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3185 /* MS Power 9.3.13 O 3) TV 2 */
3186 if(tvb_length_remaining(tvb,offset) > 0)
3187 offset = dissect_rsl_ie_ms_pow(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3188 /* Timing Advance 9.3.24 C 3) 4) TV 2 */
3189 if(tvb_length_remaining(tvb,offset) > 0)
3190 offset = dissect_rsl_ie_timing_adv(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3191 /* BS Power Parameters 9.3.32 O 5) TLV >=2 */
3192 /* MS Power Parameters 9.3.31 O 5) TLV >=2 */
3193 /* Physical Context 9.3.16 O 6) TLV >=2 */
3194 if(tvb_length_remaining(tvb,offset) > 0)
3195 offset = dissect_rsl_ie_phy_ctx(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3196 /* SACCH Information 9.3.29 O 8) TLV >=3 */
3197 /* UIC 9.3.50 O 9) TLV 3 */
3198 if(tvb_length_remaining(tvb,offset) > 0)
3199 offset = dissect_rsl_ie_uic(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3200 /* Main channel reference 9.3.51 O 10) TV 2 */
3201 if(tvb_length_remaining(tvb,offset) > 0)
3202 offset = dissect_rsl_ie_main_ch_ref(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3203 /* MultiRate configuration 9.3.52 O 11) TLV >=4 */
3204 if(tvb_length_remaining(tvb,offset) > 0)
3205 offset = dissect_rsl_ie_multirate_conf(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3206 /* MultiRate Control 9.3.53 O 12) TV 2 */
3207 if(tvb_length_remaining(tvb,offset) > 0)
3208 offset = dissect_rsl_ie_multirate_cntrl(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3209 /* Supported Codec Types 9.3.54 O 12) TLV >=5 */
3210 if(tvb_length_remaining(tvb,offset) > 0)
3211 offset = dissect_rsl_ie_sup_codec_types(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3212 /* TFO transparent container 9.3.59 O 12) TLV >=3 */
3213 if(tvb_length_remaining(tvb,offset) > 0)
3214 offset = dissect_rsl_ie_tfo_transp_cont(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3217 /* 8.4.2 CHANNEL ACTIVATION ACKNOWLEDGE 34*/
3218 case RSL_MSG_CHAN_ACTIV_ACK:
3219 /* Channel number 9.3.1 M TV 2 */
3220 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3221 /* Frame number 9.3.8 M TV 3 */
3222 offset = dissect_rsl_ie_frame_no(tvb, pinfo, tree, offset, TRUE);
3224 case RSL_MSG_CHAN_ACTIV_N_ACK:
3225 /* 8.4.3 CHANNEL ACTIVATION NEGATIVE ACKNOWLEDGE */
3226 /* Channel number 9.3.1 M TV 2 */
3227 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3228 /* Cause 9.3.26 M TLV >=3 */
3229 offset = dissect_rsl_ie_cause(tvb, pinfo, tree, offset, TRUE);
3231 /* 8.4.4 CONNECTION FAILURE INDICATION */
3232 case RSL_MSG_CONN_FAIL:
3233 /* Channel number 9.3.1 M TV 2 */
3234 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3235 /* Cause 9.3.26 M TLV >=3 */
3236 offset = dissect_rsl_ie_cause(tvb, pinfo, tree, offset, TRUE);
3238 /* 8.4.5 DEACTIVATE SACCH */
3239 case RSL_MSG_DEACTIVATE_SACCH:
3240 /* Channel number 9.3.1 M TV 2 */
3241 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3243 /* 8.4.6 ENCRYPTION COMMAND */
3244 case RSL_MSG_ENCR_CMD: /* 38 8.4.6 */
3245 /* Channel number 9.3.1 M TV 2 */
3246 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3247 /* Encryption information 9.3.7 M TLV >=3 */
3248 offset = dissect_rsl_ie_enc_inf(tvb, pinfo, tree, offset, TRUE);
3249 /* Link Identifier 9.3.2 M TV 2 */
3250 offset = dissect_rsl_ie_link_id(tvb, pinfo, tree, offset, TRUE);
3251 /* L3 Info (CIPH MOD CMD) 9.3.11 M TLV 6 */
3252 offset = dissect_rsl_ie_L3_inf(tvb, pinfo, tree, offset, TRUE);
3254 /* 8.4.7 HANDOVER DETECTION */
3255 case RSL_MSG_HANDODET: /* 39 8.4.7 */
3256 /* Channel number 9.3.1 M TV 2 */
3257 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3258 /* Access Delay 9.3.17 O 1) TV 2 */
3259 if(tvb_length_remaining(tvb,offset) > 0)
3260 offset = dissect_rsl_ie_access_delay(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3262 /* 8.4.8 MEASUREMENT RESULT 40 */
3263 case RSL_MSG_MEAS_RES:
3264 /* Channel number 9.3.1 M TV 2 */
3265 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3266 /* Measurement result number 9.3.27 M TV 2 */
3267 offset = dissect_rsl_ie_meas_res_no(tvb, pinfo, tree, offset, TRUE);
3268 /* Uplink Measurements 9.3.25 M TLV >=5 */
3269 offset = dissect_rsl_ie_uplik_meas(tvb, pinfo, tree, offset, TRUE);
3270 /* BS Power 9.3.4 M TV 2 */
3271 offset = dissect_rsl_ie_bs_power(tvb, pinfo, tree, offset, TRUE);
3272 /* L1 Information 9.3.10 O 1) TV 3 */
3273 if(tvb_length_remaining(tvb,offset) > 0)
3274 offset = dissect_rsl_ie_l1_inf(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3275 /* L3 Info (MEAS REP, EXT MEAS REP or ENH MEAS REP) 9.3.11 O 1) TLV 21 */
3276 if(tvb_length_remaining(tvb,offset) > 0)
3277 offset = dissect_rsl_ie_L3_inf(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3278 /* MS Timing Offset 9.3.37 O 2) TV 2 */
3279 if(tvb_length_remaining(tvb,offset) > 0)
3280 offset = dissect_rsl_ie_ms_timing_offset(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3282 /* 8.4.9 MODE MODIFY */
3283 case RSL_MSG_MODE_MODIFY_REQ: /* 41 8.4.9 */
3284 /* Channel number 9.3.1 M TV 2 */
3285 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3286 /* Channel Mode 9.3.6 M TLV 8-9 */
3287 offset = dissect_rsl_ie_ch_mode(tvb, pinfo, tree, offset, TRUE);
3288 /* Encryption information 9.3.7 O 1) TLV >=3 */
3289 if(tvb_length_remaining(tvb,offset) > 0)
3290 offset = dissect_rsl_ie_enc_inf(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3291 /* Main channel reference 9.3.45 O 2) TV 2 */
3292 if(tvb_length_remaining(tvb,offset) > 0)
3293 offset = dissect_rsl_ie_main_ch_ref(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3294 /* MultiRate configuration 9.3.52 O 3) TLV >=3 */
3295 if(tvb_length_remaining(tvb,offset) > 0)
3296 offset = dissect_rsl_ie_multirate_conf(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3297 /* Multirate Control 9.3.53 O 4) TV 2 */
3298 if(tvb_length_remaining(tvb,offset) > 0)
3299 offset = dissect_rsl_ie_multirate_cntrl(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3300 /* Supported Codec Types 9.3.54 O 4) TLV >=5 */
3301 if(tvb_length_remaining(tvb,offset) > 0)
3302 offset = dissect_rsl_ie_sup_codec_types(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3303 /* TFO transparent container 9.3.59 O 4) TLV */
3304 if(tvb_length_remaining(tvb,offset) > 0)
3305 offset = dissect_rsl_ie_tfo_transp_cont(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3307 /* 8.4.10 MODE MODIFY ACKNOWLEDGE */
3308 case RSL_MSG_MODE_MODIFY_ACK: /* 42 8.4.10 */
3309 /* Channel number 9.3.1 M TV 2 */
3310 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3312 /* 8.4.11 MODE MODIFY NEGATIVE ACKNOWLEDGE */
3313 case RSL_MSG_MODE_MODIFY_NACK: /* 43 8.4.11 */
3314 /* Channel number 9.3.1 M TV 2 */
3315 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3316 /* Cause 9.3.26 M TLV >=3 */
3317 offset = dissect_rsl_ie_cause(tvb, pinfo, tree, offset, TRUE);
3319 /* 8.4.12 PHYSICAL CONTEXT REQUEST */
3320 case RSL_MSG_PHY_CONTEXT_REQ: /* 44 8.4.12 */
3321 /* Channel number 9.3.1 M TV 2 */
3322 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3324 /* 8.4.13 PHYSICAL CONTEXT CONFIRM */
3325 case RSL_MSG_PHY_CONTEXT_CONF: /* 45 8.4.13 */
3326 /* Channel number 9.3.1 M TV 2 */
3327 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3328 /* BS Power 9.3.4 M TV 2 */
3329 offset = dissect_rsl_ie_bs_power(tvb, pinfo, tree, offset, TRUE);
3330 /* MS Power 9.3.13 M TV 2 */
3331 offset = dissect_rsl_ie_ms_pow(tvb, pinfo, tree, offset, TRUE);
3332 /* Timing Advance 9.3.24 M TV 2 */
3333 offset = dissect_rsl_ie_timing_adv(tvb, pinfo, tree, offset, TRUE);
3334 /* Physical Context 9.3.16 O 1) TLV */
3335 if(tvb_length_remaining(tvb,offset) > 0)
3336 offset = dissect_rsl_ie_phy_ctx(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3338 /* 8.4.14 RF CHANNEL RELEASE */
3339 case RSL_MSG_RF_CHAN_REL: /* 46 8.4.14 */
3340 /* Channel number 9.3.1 M TV 2 */
3341 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3343 /* 8.4.15 MS POWER CONTROL */
3344 case RSL_MSG_MS_POWER_CONTROL: /* 47 8.4.15 */
3345 /* Channel number 9.3.1 M TV 2 */
3346 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3347 /* MS Power 9.3.13 M TV 2 */
3348 if(tvb_length_remaining(tvb,offset) > 0)
3349 offset = dissect_rsl_ie_ms_pow(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3350 /* MS Power Parameters 9.3.31 O 1) TLV >=2 */
3352 /* 8.4.16 BS POWER CONTROL */
3353 case RSL_MSG_BS_POWER_CONTROL: /* 48 8.4.16 */
3354 /* Channel number 9.3.1 M TV 2 */
3355 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3356 /* BS Power 9.3.4 M TV 2 */
3357 offset = dissect_rsl_ie_bs_power(tvb, pinfo, tree, offset, TRUE);
3358 /* BS Power Parameters 9.3.32 O 1) TLV >=2 */
3360 /* 8.4.17 PREPROCESS CONFIGURE */
3361 case RSL_MSG_PREPROC_CONFIG: /* 49 8.4.17 */
3362 /* Channel number 9.3.1 M TV 2 */
3363 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3364 /* Preproc. Parameters 9.3.33 M TLV >=3 */
3366 /* 8.4.18 PREPROCESSED MEASUREMENT RESULT */
3367 case RSL_MSG_PREPROC_MEAS_RES: /* 50 8.4.18 */
3368 /* Channel number 9.3.1 M TV 2 */
3369 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3370 /* Preproc. Measurements 9.3.34 M TLV >=2 */
3372 /* 8.4.19 RF CHANNEL RELEASE ACKNOWLEDGE */
3373 case RSL_MSG_RF_CHAN_REL_ACK: /* 51 8.4.19 */
3374 /* Channel number 9.3.1 M TV 2 */
3375 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3377 /* 8.4.20 SACCH INFO MODIFY */
3378 case RSL_MSG_SACCH_INFO_MODIFY: /* 52 8.4.20 */
3379 /* Channel number 9.3.1 M TV 2 */
3380 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3381 /* System Info Type 9.3.30 M TV 2 */
3382 offset = dissect_rsl_ie_sys_info_type(tvb, pinfo, tree, offset, TRUE);
3383 /* L3 Info 9.3.11 O 1) TLV 22 */
3384 if(tvb_length_remaining(tvb,offset) > 0)
3385 offset = dissect_rsl_ie_L3_inf(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3386 /* Starting Time 9.3.23 O 2) TV 3 */
3387 if(tvb_length_remaining(tvb,offset) > 0)
3388 offset = dissect_rsl_ie_staring_time(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3390 /* 8.4.21 TALKER DETECTION */
3391 case RSL_MSG_TALKER_DET: /* 53 8.4.21 */
3392 /* Channel number 9.3.1 M TV 2 */
3393 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3394 /* Access Delay 9.3.17 O 1) TV 2 */
3395 if(tvb_length_remaining(tvb,offset) > 0)
3396 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3398 /* 8.4.22 LISTENER DETECTION */
3399 case RSL_MSG_LISTENER_DET: /* 54 8.4.22 */
3400 /* Channel number 9.3.1 M TV 2 */
3401 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3402 /* Access Delay 9.3.17 O 1) TV 2 */
3403 if(tvb_length_remaining(tvb,offset) > 0)
3404 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3406 /* 8.4.23 REMOTE CODEC CONFIGURATION REPORT */
3407 case RSL_MSG_REMOTE_CODEC_CONF_REP:/* 55 8.4.23 */
3408 /* Channel number 9.3.1 M TV 2 */
3409 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3410 /* Codec Configuration 9.3.55 M TLV >=3 */
3411 offset = dissect_rsl_ie_codec_conf(tvb, pinfo, tree, offset, TRUE);
3412 /* Supported Codec Types 9.3.54 M TLV >=5 */
3413 if(tvb_length_remaining(tvb,offset) > 0)
3414 offset = dissect_rsl_ie_sup_codec_types(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3415 /* TFO transparent container 9.3.59 O 4) TLV >=3 */
3416 if(tvb_length_remaining(tvb,offset) > 0)
3417 offset = dissect_rsl_ie_tfo_transp_cont(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3419 /* 8.4.24 ROUND TRIP DELAY REPORT */
3420 case RSL_MSG_R_T_D_REP: /* 56 8.4.24 */
3421 /* Channel number 9.3.1 M TV 2 */
3422 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3423 /* Round Trip Delay 9.3.56 M TV 2 */
3424 offset = dissect_rsl_ie_rtd(tvb, pinfo, tree, offset, TRUE);
3426 /* 8.4.25 PRE-HANDOVER NOTIFICATION */
3427 case RSL_MSG_PRE_HANDO_NOTIF: /* 57 8.4.25 */
3428 /* Channel number 9.3.1 M TV 2 */
3429 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3430 /* MultiRateControl 9.3.53 M TV 2 */
3431 offset = dissect_rsl_ie_multirate_cntrl(tvb, pinfo, tree, offset, TRUE);
3432 /* Codec Configuration 9.3.55 M TLV >=3 */
3433 offset = dissect_rsl_ie_codec_conf(tvb, pinfo, tree, offset, TRUE);
3434 /* TFO transparent container 9.3.59 O 4) TLV >=3 */
3435 if(tvb_length_remaining(tvb,offset) > 0)
3436 offset = dissect_rsl_ie_tfo_transp_cont(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3438 /* 8.4.26 MULTIRATE CODEC MODIFICATION REQUEST */
3439 case RSL_MSG_MR_CODEC_MOD_REQ: /* 58 8.4.26 */
3440 /* Channel number 9.3.1 M TV 2 */
3441 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3442 /* MultiRate Configuration 9.3.52 O 1) TLV >=4 */
3443 if(tvb_length_remaining(tvb,offset) > 0)
3444 offset = dissect_rsl_ie_multirate_conf(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3446 /* 8.4.27 MULTIRATE CODEC MODIFICATION ACKNOWLEDGE */
3447 case RSL_MSG_MR_CODEC_MOD_ACK: /* 59 8.4.27 */
3448 /* Channel number 9.3.1 M TV 2 */
3449 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3450 /* MultiRate Configuration 9.3.52 O 1) TLV >=4 */
3451 if(tvb_length_remaining(tvb,offset) > 0)
3452 offset = dissect_rsl_ie_multirate_conf(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3454 /* 8.4.28 MULTIRATE CODEC MODIFICATION NEGATIVE ACKNOWLEDGE */
3455 case RSL_MSG_MR_CODEC_MOD_NACK: /* 60 8.4.28 */
3456 /* Channel number 9.3.1 M TV 2 */
3457 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3458 /* Cause 9.3.26 M TLV >=3 */
3459 offset = dissect_rsl_ie_cause(tvb, pinfo, tree, offset, TRUE);
3461 /* 8.4.29 MULTIRATE CODEC MODIFICATION PERFORMED */
3462 case RSL_MSG_MR_CODEC_MOD_PER: /* 61 8.4.29 */
3463 /* Channel number 9.3.1 M TV 2 */
3464 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3465 /* MultiRate Configuration 9.3.52 M TLV >=4 */
3466 offset = dissect_rsl_ie_multirate_conf(tvb, pinfo, tree, offset, TRUE);
3468 /* 8.4.30 TFO REPORT */
3469 case RSL_MSG_TFO_REP: /* 62 8.4.30 */
3470 /* Channel number 9.3.1 M TV 2 */
3471 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3472 /* TFO Status 9.3.57 M TV 1 */
3473 offset = dissect_rsl_ie_tfo_status(tvb, pinfo, tree, offset, TRUE);
3475 /* 8.4.31 TFO MODIFICATION REQUEST */
3476 case RSL_MSG_TFO_MOD_REQ: /* 63 8.4.31 */
3477 /* Channel number 9.3.1 M TV 2 */
3478 offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
3479 /* MultiRateControl 9.3.53 M TV 2 */
3480 offset = dissect_rsl_ie_multirate_cntrl(tvb, pinfo, tree, offset, TRUE);
3481 /* Supported Codec Type 9.3.54 O 1) TLV >=5 */
3482 if(tvb_length_remaining(tvb,offset) > 0)
3483 offset = dissect_rsl_ie_sup_codec_types(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3484 /* TFO transparent container 9.3.59 O 4) TLV >=3 */
3485 if(tvb_length_remaining(tvb,offset) > 0)
3486 offset = dissect_rsl_ie_tfo_transp_cont(tvb, pinfo, tree, offset, ENC_BIG_ENDIAN);
3488 /* 0 1 - - - - - - Location Services messages: */
3489 /* 8.7.1 LOCATION INFORMATION */
3490 case RSL_MSG_LOC_INF: /* 65 8.7.1 */
3491 /* LLP APDU 9.3.58 M LV 2-N */
3492 offset = dissect_rsl_ie_llp_apdu(tvb, pinfo, tree, offset, TRUE);
3502 dissect_rsl(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
3505 proto_tree *rsl_tree;
3511 col_set_str(pinfo->cinfo, COL_PROTOCOL, "RSL");
3512 col_clear(pinfo->cinfo, COL_INFO);
3514 msg_type = tvb_get_guint8(tvb,offset+1)&0x7f;
3516 col_append_fstr(pinfo->cinfo, COL_INFO, "%s ",val_to_str(msg_type, rsl_msg_type_vals,"unknown %u"));
3520 ti = proto_tree_add_item(tree, proto_rsl, tvb, 0, -1, ENC_NA);
3521 rsl_tree = proto_item_add_subtree(ti, ett_rsl);
3523 /* 9.1 Message discriminator */
3524 proto_tree_add_item(rsl_tree, hf_rsl_msg_dsc, tvb, offset, 1, ENC_BIG_ENDIAN);
3525 proto_tree_add_item(rsl_tree, hf_rsl_T_bit, tvb, offset, 1, ENC_BIG_ENDIAN);
3528 offset = dissct_rsl_msg(tvb, pinfo, rsl_tree, offset);
3535 proto_reg_handoff_rsl(void)
3537 dissector_handle_t rsl_handle;
3539 rsl_handle = create_dissector_handle(dissect_rsl, proto_rsl);
3540 dissector_add_uint("lapd.gsm.sapi", LAPD_GSM_SAPI_RA_SIG_PROC, rsl_handle);
3542 gsm_a_ccch_handle = find_dissector("gsm_a_ccch");
3543 gsm_a_dtap_handle = find_dissector("gsm_a_dtap");
3546 /* Register the protocol with Wireshark */
3547 void proto_register_rsl(void)
3550 /* Setup list of header fields */
3551 static hf_register_info hf[] = {
3553 { "Message discriminator", "rsl.msg_dsc",
3554 FT_UINT8, BASE_DEC, VALS(rsl_msg_disc_vals), 0xfe,
3558 { "T bit", "rsl.T_bit",
3559 FT_BOOLEAN, 8, TFS(&rsl_t_bit_vals), 0x01,
3563 { "Message type", "rsl.msg_type",
3564 FT_UINT8, BASE_HEX_DEC, VALS(rsl_msg_type_vals), 0x7f,
3568 { "Element identifier", "rsl.ie_id",
3569 FT_UINT8, BASE_HEX_DEC, VALS(rsl_ie_type_vals), 0x0,
3572 { &hf_rsl_ie_length,
3573 { "Length", "rsl.ie_length",
3574 FT_UINT16, BASE_DEC, NULL, 0x0,
3577 { &hf_rsl_ch_no_Cbits,
3578 { "C-bits", "rsl.ch_no_Cbits",
3579 FT_UINT8, BASE_DEC, VALS(rsl_ch_no_Cbits_vals), 0xf8,
3583 { "Time slot number (TN)", "rsl.ch_no_TN",
3584 FT_UINT8, BASE_DEC, NULL, 0x07,
3588 { "Round Trip Delay (RTD)", "rsl.rtd",
3589 FT_UINT8, BASE_DEC, NULL, 0xfe,
3592 { &hf_rsl_delay_ind,
3593 { "Delay IND", "rsl.delay_ind",
3594 FT_UINT8, BASE_DEC, rsl_delay_ind_vals, 0x01,
3599 FT_BOOLEAN, 8, TFS(&rsl_tfo_vals), 0x01,
3602 { &hf_rsl_req_ref_ra,
3603 { "Random Access Information (RA)", "rsl.req_ref_ra",
3604 FT_UINT8, BASE_DEC, NULL, 0x0,
3607 { &hf_rsl_req_ref_T1prim,
3608 { "T1'", "rsl.req_ref_T1prim",
3609 FT_UINT8, BASE_DEC, NULL, 0xf8,
3612 { &hf_rsl_req_ref_T3,
3613 { "T3", "rsl.req_ref_T3",
3614 FT_UINT16, BASE_DEC, NULL, 0x07e0,
3617 { &hf_rsl_req_ref_T2,
3618 { "T2", "rsl.req_ref_T2",
3619 FT_UINT8, BASE_DEC, NULL, 0x1f,
3622 { &hf_rsl_timing_adv,
3623 { "Timing Advance", "rsl.timing_adv",
3624 FT_UINT8, BASE_DEC, NULL, 0x0,
3628 { "Hand-over reference", "rsl.ho_ref",
3629 FT_UINT8, BASE_DEC, NULL, 0x0,
3632 { &hf_rsl_l1inf_power_lev,
3633 { "MS power level", "rsl.ms_power_lev",
3634 FT_UINT8, BASE_DEC, NULL, 0xf8,
3637 { &hf_rsl_l1inf_fpc,
3638 { "FPC/EPC", "rsl.ms_fpc",
3639 FT_BOOLEAN, 8, TFS(&rsl_ms_fpc_epc_mode_vals), 0x04,
3642 { &hf_rsl_ms_power_lev,
3643 { "MS power level", "rsl.ms_power_lev",
3644 FT_UINT8, BASE_DEC, NULL, 0x1f,
3648 { "FPC/EPC", "rsl.ms_fpc",
3649 FT_BOOLEAN, 8, TFS(&rsl_ms_fpc_epc_mode_vals), 0x20,
3652 { &hf_rsl_act_timing_adv,
3653 { "Actual Timing Advance", "rsl.act_timing_adv",
3654 FT_UINT8, BASE_DEC, NULL, 0x0,
3658 { "DTXd", "rsl.dtxd",
3659 FT_BOOLEAN, 8, TFS(&rsl_dtxd_vals), 0x40,
3662 { &hf_rsl_rxlev_full_up,
3663 { "RXLEV.FULL.up", "rsl.rxlev_full_up",
3664 FT_UINT8, BASE_DEC, NULL, 0x3f,
3667 { &hf_rsl_rxlev_sub_up,
3668 { "RXLEV.SUB.up", "rsl.rxlev_sub_up",
3669 FT_UINT8, BASE_DEC, NULL, 0x3f,
3672 { &hf_rsl_rxqual_full_up,
3673 { "RXQUAL.FULL.up", "rsl.rxqual_full_up",
3674 FT_UINT8, BASE_DEC, NULL, 0x38,
3677 { &hf_rsl_rxqual_sub_up,
3678 { "RXQUAL.SUB.up", "rsl.rxqual_sub_up",
3679 FT_UINT8, BASE_DEC, NULL, 0x07,
3682 { &hf_rsl_acc_delay,
3683 { "Access Delay", "rsl.acc_del",
3684 FT_UINT8, BASE_DEC, NULL, 0x0,
3687 { &hf_rsl_rach_slot_cnt,
3688 { "RACH Slot Count", "rsl.rach_slot_cnt",
3689 FT_UINT16, BASE_DEC, NULL, 0x0,
3692 { &hf_rsl_rach_busy_cnt,
3693 { "RACH Busy Count", "rsl.rach_busy_cnt",
3694 FT_UINT16, BASE_DEC, NULL, 0x0,
3697 { &hf_rsl_rach_acc_cnt,
3698 { "RACH Access Count", "rsl.rach_acc_cnt",
3699 FT_UINT16, BASE_DEC, NULL, 0x0,
3703 { "Physical Context", "rsl.phy_ctx",
3704 FT_BYTES, BASE_NONE, NULL, 0x0,
3708 { "Not applicable (NA)", "rsl.na",
3709 FT_BOOLEAN, 8, TFS(&rsl_na_vals), 0x20,
3713 { "channel type", "rsl.ch_type",
3714 FT_UINT8, BASE_DEC, VALS(rsl_ch_type_vals), 0xc0,
3718 { "Priority", "rsl.prio",
3719 FT_UINT8, BASE_DEC, VALS(rsl_prio_vals), 0x18,
3723 { "SAPI", "rsl.sapi",
3724 FT_UINT8, BASE_DEC, NULL, 0x07,
3729 FT_BOOLEAN, 8, TFS(&rsl_rbit_vals), 0x80,
3733 { "A3A2", "rsl.a3a2",
3734 FT_UINT8, BASE_DEC, VALS(rsl_a3a2_vals), 0x06,
3739 FT_BOOLEAN, 8, TFS(&rsl_a1_0_vals), 0x01,
3744 FT_BOOLEAN, 8, TFS(&rsl_a1_1_vals), 0x01,
3749 FT_BOOLEAN, 8, TFS(&rsl_a1_2_vals), 0x01,
3753 { "EPC mode", "rsl.epc_mode",
3754 FT_BOOLEAN, 8, TFS(&rsl_epc_mode_vals), 0x20,
3757 { &hf_rsl_bs_fpc_epc_mode,
3758 { "FPC-EPC mode", "rsl.fpc_epc_mode",
3759 FT_BOOLEAN, 8, TFS(&rsl_fpc_epc_mode_vals), 0x10,
3763 { "Power Level", "rsl.bs_power",
3764 FT_UINT8, BASE_DEC, VALS(rsl_rlm_bs_power_vals), 0x0f,
3768 { "DTXd", "rsl.cm_dtxd",
3769 FT_BOOLEAN, 8, TFS(&rsl_dtx_vals), 0x02,
3773 { "DTXu", "rsl.cm_dtxu",
3774 FT_BOOLEAN, 8, TFS(&rsl_dtx_vals), 0x01,
3777 { &hf_rsl_speech_or_data,
3778 { "Speech or data indicator", "rsl.speech_or_data",
3779 FT_UINT8, BASE_DEC, VALS(rsl_speech_or_data_vals), 0x0,
3782 { &hf_rsl_ch_rate_and_type,
3783 { "Channel rate and type", "rsl.ch_rate_and_type",
3784 FT_UINT8, BASE_DEC, VALS(rsl_ch_rate_and_type_vals), 0x0,
3787 { &hf_rsl_speech_coding_alg,
3788 { "Speech coding algorithm", "rsl.speech_coding_alg",
3789 FT_UINT8, BASE_DEC, VALS(rsl_speech_coding_alg_vals), 0x0,
3793 { "Transparent indication", "rsl.t_nt_bit",
3794 FT_BOOLEAN, 8, TFS(&t_nt_bit_vals), 0x40,
3797 { &hf_rsl_ra_if_data_rte,
3798 { "Radio interface data rate", "rsl.ra_if_data_rte",
3799 FT_UINT8, BASE_DEC, VALS(rsl_ra_if_data_rte_vals), 0x3f,
3803 { "Data rate", "rsl.data_rte",
3804 FT_UINT8, BASE_DEC, VALS(rsl_ra_if_data_rte_vals), 0x3f,
3808 { "Algorithm Identifier", "rsl.alg_id",
3809 FT_UINT8, BASE_DEC, VALS(rsl_algorithm_id_vals), 0x0,
3814 FT_BYTES, BASE_NONE, NULL, 0x0,
3818 { "Cause", "rsl.cause",
3819 FT_UINT8, BASE_DEC, VALS(rsl_rlm_cause_vals), 0x7f,
3823 { "Release Mode", "rsl.rel_mode",
3824 FT_UINT8, BASE_DEC, VALS(rel_mode_vals), 0x01,
3827 { &hf_rsl_interf_band,
3828 { "Interf Band", "rsl.interf_band",
3829 FT_UINT8, BASE_DEC, NULL, 0xe0,
3832 { &hf_rsl_interf_band_reserved,
3833 { "Interf Band reserved bits", "rsl.interf_band_reserved",
3834 FT_UINT8, BASE_DEC, NULL, 0x1f,
3837 { &hf_rsl_meas_res_no,
3838 { "Measurement result number", "rsl.meas_res_no",
3839 FT_UINT8, BASE_DEC, NULL, 0x0,
3842 { &hf_rsl_extension_bit,
3843 { "Extension", "rsl.extension_bit",
3844 FT_BOOLEAN, 8, TFS(&rsl_extension_bit_value), 0x80,
3847 { "Class", "rsl.class",
3848 FT_UINT8, BASE_DEC, VALS(rsl_class_vals), 0x70,
3851 { &hf_rsl_paging_grp,
3852 { "Paging Group", "rsl.paging_grp",
3853 FT_UINT8, BASE_DEC, NULL, 0x0,
3856 { &hf_rsl_paging_load,
3857 { "Paging Buffer Space", "rsl.paging_load",
3858 FT_UINT16, BASE_DEC, NULL, 0x0,
3861 { &hf_rsl_sys_info_type,
3862 { "System Info Type", "rsl.sys_info_type",
3863 FT_UINT8, BASE_DEC, VALS(rsl_sys_info_type_vals), 0x0,
3866 { &hf_rsl_timing_offset,
3867 { "Timing Offset", "rsl.timing_offset",
3868 FT_UINT8, BASE_DEC, NULL, 0x0,
3871 { &hf_rsl_ch_needed,
3872 { "Channel Needed", "rsl.ch_needed",
3873 FT_UINT8, BASE_DEC, VALS(rsl_ch_needed_vals), 0x03,
3876 { &hf_rsl_cbch_load_type,
3877 { "CBCH Load Type", "rsl.cbch_load_type",
3878 FT_BOOLEAN, 8, TFS(&rsl_cbch_load_type_vals), 0x80,
3881 { &hf_rsl_msg_slt_cnt,
3882 { "Message Slot Count", "rsl.sg_slt_cnt",
3883 FT_UINT8, BASE_DEC, NULL, 0x0f,
3887 { "Channel Ind", "rsl.ch_ind",
3888 FT_UINT8, BASE_DEC, VALS(rsl_ch_ind_vals), 0x0f,
3892 { "Command", "rsl.cmd",
3893 FT_UINT16, BASE_DEC, NULL, 0x0,
3896 { &hf_rsl_emlpp_prio,
3897 { "eMLPP Priority", "rsl.emlpp_prio",
3898 FT_UINT8, BASE_DEC, VALS(rsl_emlpp_prio_vals), 0x03,
3902 static gint *ett[] = {
3919 &ett_ie_paging_load,
3920 &ett_ie_access_delay,
3924 &ett_ie_resource_inf,
3926 &ett_ie_staring_time,
3928 &ett_ie_uplink_meas,
3929 &ett_ie_full_imm_ass_inf,
3931 &ett_ie_ms_timing_offset,
3933 &ett_ie_full_bcch_inf,
3935 &ett_ie_cb_cmd_type,
3937 &ett_ie_cbch_load_inf,
3938 &ett_ie_smscb_ch_ind,
3939 &ett_ie_grp_call_ref,
3945 &ett_ie_main_ch_ref,
3946 &ett_ie_multirate_conf,
3947 &ett_ie_multirate_cntrl,
3948 &ett_ie_sup_codec_types,
3953 &ett_ie_tfo_transp_cont,
3955 &ett_ie_meas_res_no,
3957 &ett_ie_sys_info_type,
3960 /* Register the protocol name and description */
3961 proto_rsl = proto_register_protocol("Radio Signalling Link (RSL)",
3964 proto_register_field_array(proto_rsl, hf, array_length(hf));
3965 proto_register_subtree_array(ett, array_length(ett));
3967 register_dissector("gsm_abis_rsl", dissect_rsl, proto_rsl);