2 * Routines for Radio Signalling Link (RSL) dissection.
4 * Copyright 2007, 2011, Anders Broman <anders.broman@ericsson.com>
5 * Copyright 2009-2011, Harald Welte <laforge@gnumonks.org>
7 * Wireshark - Network traffic analyzer
8 * By Gerald Combs <gerald@wireshark.org>
9 * Copyright 1998 Gerald Combs
11 * Copied from packet-cops.c
13 * SPDX-License-Identifier: GPL-2.0-or-later
15 * REF: 3GPP TS 48.058 version 6.1.0 Release 6
16 * http://www.3gpp.org/ftp/Specs/html-info/48058.htm
18 * Huawei paging encapsulation in RSL from:
19 * https://patents.google.com/patent/EP2192796B1/en
24 #include <epan/packet.h>
26 #include "packet-gsm_a_common.h"
27 #include "lapd_sapi.h"
28 #include <epan/prefs.h>
29 #include <epan/expert.h>
30 #include <epan/conversation.h>
32 #include <epan/unit_strings.h>
34 #include <wsutil/array.h>
36 #include "packet-rtp.h"
37 #include "packet-rtcp.h"
39 void proto_register_rsl(void);
40 void proto_reg_handoff_rsl(void);
42 uint16_t parse_reduced_frame_number(tvbuff_t
*tvb
, const int offset
);
44 /* Initialize the protocol and registered fields */
47 static int hf_rsl_msg_type
;
48 static int hf_rsl_T_bit
;
49 static int hf_rsl_msg_dsc
;
50 static int hf_rsl_ie_id
;
51 static int hf_rsl_ie_length
;
52 static int hf_rsl_ch_no_Cbits
;
53 static int hf_rsl_ch_no_TN
;
54 static int hf_rsl_acc_delay
;
55 static int hf_rsl_rach_slot_cnt
;
56 static int hf_rsl_rach_busy_cnt
;
57 static int hf_rsl_rach_acc_cnt
;
58 static int hf_rsl_req_ref_ra
;
59 static int hf_rsl_req_ref_ra_est_cause
;
60 static int hf_rsl_req_ref_T1prim
;
61 static int hf_rsl_req_ref_T3
;
62 static int hf_rsl_req_ref_T2
;
63 static int hf_rsl_req_ref_rfn
;
64 static int hf_rsl_timing_adv
;
65 static int hf_rsl_ho_ref
;
66 static int hf_rsl_l1inf_power_lev
;
67 static int hf_rsl_l1inf_fpc
;
68 static int hf_rsl_l1inf_srr
;
69 static int hf_rsl_ms_power_lev
;
70 static int hf_rsl_ms_fpc
;
71 static int hf_rsl_act_timing_adv
;
72 static int hf_rsl_phy_ctx
;
74 static int hf_rsl_ch_type
;
75 static int hf_rsl_prio
;
76 static int hf_rsl_sapi
;
77 static int hf_rsl_rbit
;
78 static int hf_rsl_a3a2
;
79 static int hf_rsl_a1_0
;
80 static int hf_rsl_a1_1
;
81 static int hf_rsl_a1_2
;
82 static int hf_rsl_epc_mode
;
83 static int hf_rsl_bs_fpc_epc_mode
;
84 static int hf_rsl_bs_power
;
85 static int hf_rsl_cm_dtxd
;
86 static int hf_rsl_cm_dtxu
;
87 static int hf_rsl_speech_or_data
;
88 static int hf_rsl_ch_rate_and_type
;
89 static int hf_rsl_speech_coding_alg
;
90 static int hf_rsl_t_nt_bit
;
91 static int hf_rsl_ra_if_data_rte
;
92 static int hf_rsl_data_rte
;
93 static int hf_rsl_alg_id
;
94 static int hf_rsl_key
;
95 static int hf_rsl_cause
;
96 static int hf_rsl_rel_mode
;
97 static int hf_rsl_interf_band
;
98 static int hf_rsl_interf_band_reserved
;
99 static int hf_rsl_meas_res_no
;
100 static int hf_rsl_extension_bit
;
101 static int hf_rsl_dtxd
;
102 static int hf_rsl_rxlev_full_up
;
103 static int hf_rsl_rxlev_sub_up
;
104 static int hf_rsl_rxqual_full_up
;
105 static int hf_rsl_rxqual_sub_up
;
106 static int hf_rsl_class
;
107 static int hf_rsl_cause_value
;
108 static int hf_rsl_paging_grp
;
109 static int hf_rsl_paging_load
;
110 static int hf_rsl_sys_info_type
;
111 static int hf_rsl_timing_offset
;
112 static int hf_rsl_ch_needed
;
113 static int hf_rsl_cbch_load_type
;
114 static int hf_rsl_msg_slt_cnt
;
115 static int hf_rsl_ch_ind
;
116 static int hf_rsl_command
;
117 static int hf_rsl_command_ext
;
118 static int hf_rsl_emlpp_prio
;
119 static int hf_rsl_rtd
;
120 static int hf_rsl_delay_ind
;
121 static int hf_rsl_tfo
;
122 static int hf_rsl_speech_mode_s
;
123 static int hf_rsl_speech_mode_m
;
124 static int hf_rsl_conn_id
;
125 static int hf_rsl_rtp_payload
;
126 static int hf_rsl_rtp_csd_fmt_d
;
127 static int hf_rsl_rtp_csd_fmt_ir
;
128 static int hf_rsl_local_port
;
129 static int hf_rsl_remote_port
;
130 static int hf_rsl_local_ip
;
131 static int hf_rsl_remote_ip
;
132 static int hf_rsl_cstat_tx_pkts
;
133 static int hf_rsl_cstat_tx_octs
;
134 static int hf_rsl_cstat_rx_pkts
;
135 static int hf_rsl_cstat_rx_octs
;
136 static int hf_rsl_cstat_lost_pkts
;
137 static int hf_rsl_cstat_ia_jitter
;
138 static int hf_rsl_cstat_avg_tx_dly
;
139 /* Generated from convert_proto_tree_add_text.pl */
140 static int hf_rsl_channel_description_tag
;
141 static int hf_rsl_mobile_allocation_tag
;
142 static int hf_rsl_mobile_allocation_len
;
143 static int hf_rsl_no_resources_required
;
144 static int hf_rsl_llsdu_ccch
;
145 static int hf_rsl_llsdu_sacch
;
146 static int hf_rsl_llsdu
;
147 static int hf_rsl_rach_supplementary_information
;
148 static int hf_rsl_full_immediate_assign_info_field
;
149 static int hf_rsl_layer_3_message
;
150 static int hf_rsl_descriptive_group_or_broadcast_call_reference
;
151 static int hf_rsl_group_channel_description
;
152 static int hf_rsl_uic
;
153 static int hf_rsl_codec_list
;
154 static int hf_rsl_cb_cmd_type
;
155 static int hf_rsl_cb_def_bcast
;
156 static int hf_rsl_cb_last_block
;
157 static int hf_rsl_etws_pn
;
159 /* Encapsulating paging messages into a packet REF: EP2192796 - proprietor Huawei */
160 static int hf_rsl_paging_spare
;
161 static int hf_rsl_paging_msg_no
;
162 static int hf_rsl_paging_package_ch_no
;
163 static int hf_rsl_paging_package_ch_needed
;
164 static int hf_rsl_paging_emlpp_prio
;
165 static int hf_rsl_paging_type
;
166 static int hf_rsl_paging_group_cs
;
167 static int hf_rsl_paging_group_empty_package
;
168 static int hf_rsl_paging_group_ps_spare
;
170 /* Physical Context dissection */
171 static int hf_rsl_phy_ctx_ie_id
;
172 static int hf_rsl_phy_ctx_ext_rand_access
;
173 static int hf_rsl_phy_ctx_ab_rx_lvl
;
174 static int hf_rsl_phy_ctx_ab_err_bits
;
175 static int hf_rsl_phy_ctx_rx_lvl_ext
;
177 /* Osmocom specific IEs */
178 static int hf_rsl_osmo_rep_acch_rxqual
;
179 static int hf_rsl_osmo_rep_acch_ul_sacch
;
180 static int hf_rsl_osmo_rep_acch_dl_sacch
;
181 static int hf_rsl_osmo_rep_acch_dl_facch_all
;
182 static int hf_rsl_osmo_rep_acch_dl_facch_cmd
;
183 static int hf_rsl_osmo_top_acch_val
;
184 static int hf_rsl_osmo_top_acch_sacch
;
185 static int hf_rsl_osmo_top_acch_facch
;
186 static int hf_rsl_osmo_top_acch_rxqual
;
187 static int hf_rsl_osmo_tsc_set
;
188 static int hf_rsl_osmo_tsc_val
;
189 static int hf_rsl_osmo_osmux_cid
;
191 /* Initialize the subtree pointers */
193 static int ett_ie_link_id
;
194 static int ett_ie_act_type
;
195 static int ett_ie_bs_power
;
196 static int ett_ie_bs_power_params
;
197 static int ett_ie_ch_id
;
198 static int ett_ie_ch_mode
;
199 static int ett_ie_enc_inf
;
200 static int ett_ie_ch_no
;
201 static int ett_ie_frame_no
;
202 static int ett_ie_ho_ref
;
203 static int ett_ie_l1_inf
;
204 static int ett_ie_L3_inf
;
205 static int ett_ie_ms_id
;
206 static int ett_ie_ms_pow
;
207 static int ett_ie_ms_pow_params
;
208 static int ett_ie_phy_ctx
;
209 static int ett_ie_paging_grp
;
210 static int ett_ie_paging_load
;
211 static int ett_ie_access_delay
;
212 static int ett_ie_rach_load
;
213 static int ett_ie_req_ref
;
214 static int ett_ie_req_ref_ra
;
215 static int ett_ie_rel_mode
;
216 static int ett_ie_resource_inf
;
217 static int ett_ie_rlm_cause
;
218 static int ett_ie_staring_time
;
219 static int ett_ie_timing_adv
;
220 static int ett_ie_uplink_meas
;
221 static int ett_ie_full_imm_ass_inf
;
222 static int ett_ie_smscb_inf
;
223 static int ett_ie_ms_timing_offset
;
224 static int ett_ie_err_msg
;
225 static int ett_ie_full_bcch_inf
;
226 static int ett_ie_ch_needed
;
227 static int ett_ie_cb_cmd_type
;
228 static int ett_ie_smscb_mess
;
229 static int ett_ie_cbch_load_inf
;
230 static int ett_ie_smscb_ch_ind
;
231 static int ett_ie_grp_call_ref
;
232 static int ett_ie_ch_desc
;
233 static int ett_ie_nch_drx
;
234 static int ett_ie_cmd_ind
;
235 static int ett_ie_emlpp_prio
;
236 static int ett_ie_uic
;
237 static int ett_ie_main_ch_ref
;
238 static int ett_ie_multirate_conf
;
239 static int ett_ie_multirate_cntrl
;
240 static int ett_ie_sup_codec_types
;
241 static int ett_ie_codec_conf
;
242 static int ett_ie_rtd
;
243 static int ett_ie_tfo_status
;
244 static int ett_ie_llp_apdu
;
245 static int ett_ie_tfo_transp_cont
;
246 static int ett_ie_cause
;
247 static int ett_ie_meas_res_no
;
248 static int ett_ie_message_id
;
249 static int ett_ie_sys_info_type
;
250 static int ett_ie_speech_mode
;
251 static int ett_ie_conn_id
;
252 static int ett_ie_remote_ip
;
253 static int ett_ie_remote_port
;
254 static int ett_ie_local_port
;
255 static int ett_ie_local_ip
;
256 static int ett_ie_rtp_payload
;
257 static int ett_ie_etws_pn
;
258 static int ett_ie_osmo_rep_acch_cap
;
259 static int ett_ie_osmo_top_acch_cap
;
260 static int ett_ie_osmo_training_seq
;
262 /* Encapsulating paging messages into a packet REF: EP2192796 - proprietor Huawei */
263 static int ett_ie_paging_package
;
264 static int ett_ie_paging_package_number
;
265 static int ett_ie_paging_package_info
;
266 static int ett_ie_paging_package_ch_a_emlpp
;
267 static int ett_ie_paging_group_paras
;
269 /* Physical Context dissection */
270 static int ett_phy_ctx_ie
;
271 static int ett_phy_ctx_ie_ext_rand_access
;
272 static int ett_phy_ctx_ab_rx_lvl_err_bits
;
273 static int ett_phy_ctx_rxlvl_ext
;
275 /* Generated from convert_proto_tree_add_text.pl */
276 static expert_field ei_rsl_speech_or_data_indicator
;
277 static expert_field ei_rsl_facility_information_element_3gpp_ts_44071
;
278 static expert_field ei_rsl_embedded_message_tfo_configuration
;
279 static expert_field ei_rsl_mobile_allocation_deprecated
;
281 static proto_tree
*top_tree
;
282 static dissector_handle_t rsl_handle
;
283 static dissector_handle_t gsm_cbch_handle
;
284 static dissector_handle_t gsm_cbs_handle
;
285 static dissector_handle_t gsm_a_ccch_handle
;
286 static dissector_handle_t gsm_a_dtap_handle
;
287 static dissector_handle_t gsm_a_sacch_handle
;
289 /* Decode things as nanoBTS traces */
290 static bool global_rsl_use_nano_bts
;
292 /* Decode Osmocom specific messages and IEs */
293 static bool global_rsl_use_osmo_bts
;
295 /* Decode things in Physical Context Information field. */
296 static bool global_rsl_dissect_phy_ctx_inf
= true;
298 /* Forward declarations */
299 static int dissct_rsl_msg(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, int offset
);
301 static const true_false_string rsl_t_bit_vals
= {
302 "Considered transparent by BTS",
303 "Not considered transparent by BTS"
306 static const true_false_string rsl_na_vals
= {
311 static const true_false_string rsl_extension_bit_value
= {
317 * 9.1 Message discriminator
319 /* Radio link Layer Management Messages */
320 static const value_string rsl_msg_disc_vals
[] = {
321 { 0x00, "Reserved" },
322 { 0x01, "Radio Link Layer Management messages" },
323 { 0x04, "Dedicated Channel Management messages" },
324 { 0x06, "Common Channel Management messages" },
325 { 0x08, "TRX Management messages" },
326 { 0x10, "Location Services messages" },
327 { 0x3f, "ip.access Vendor Specific messages" },
328 { 0x55, "HUAWEI Paging Extension" },
331 #define RSL_MSGDISC_IPACCESS 0x3f
335 /* Radio link Layer Management Messages */
336 #define RSL_MSG_TYPE_DATA_REQ 1 /* 0x01 */
337 #define RSL_MSG_TYPE_DATA_IND 2 /* 0x02 */
338 #define RSL_MSG_TYPE_ERROR_IND 3 /* 0x03 */
339 #define RSL_MSG_TYPE_EST_REQ 4 /* 0x04 */
340 #define RSL_MSG_TYPE_EST_CONF 5 /* 0x05 */
341 #define RSL_MSG_EST_IND 6 /* 0x06 */
342 #define RSL_MSG_REL_REQ 7 /* 0x07 */
343 #define RSL_MSG_REL_CONF 8 /* 0x08 */
344 #define RSL_MSG_REL_IND 9 /* 0x09 */
345 #define RSL_MSG_UNIT_DATA_REQ 10 /* 0x0a */
346 #define RSL_MSG_UNIT_DATA_IND 11 /* 0x0b */
347 /* Common Channel Management messages */
348 #define RSL_MSG_BCCH_INFO 17 /* 0x11 */
349 #define RSL_MSG_CCCH_LOAD_IND 18 /* 0x12 */
350 #define RSL_MSG_CHANRQD 19 /* 0x13 */
351 #define RSL_MSG_DELETE_IND 20 /* 0x14 */
352 #define RSL_MSG_PAGING_CMD 21 /* 0x15 */
353 #define RSL_MSG_IMM_ASS_CMD 22 /* 0x16 */
354 #define RSL_MSG_SMS_BC_REQ 23 /* 0x17 8.5.7 */
356 /* Encapsulating paging messages into a packet REF: EP2192796 - proprietor Huawei */
357 #define RSL_MSG_TYPE_PAGING 24 /* 0x18 */
359 /* TRX Management messages */
360 #define RSL_MSG_RF_RES_IND 25 /* 8.6.1 */
361 #define RSL_MSG_SACCH_FILL 26 /* 8.6.2 */
362 #define RSL_MSG_OVERLOAD 27 /* 8.6.3 */
363 #define RSL_MSG_ERROR_REPORT 28 /* 8.6.4 */
364 #define RSL_MSG_SMS_BC_CMD 29 /* 8.5.8 */
365 #define RSL_MSG_CBCH_LOAD_IND 30 /* 8.5.9 */
366 #define RSL_MSG_NOT_CMD 31 /* 8.5.10 */
368 /* 0 0 1 - - - - - Dedicated Channel Management messages: */
369 #define RSL_MSG_CHAN_ACTIV 33
370 #define RSL_MSG_CHAN_ACTIV_ACK 34
371 #define RSL_MSG_CHAN_ACTIV_N_ACK 35
372 #define RSL_MSG_CONN_FAIL 36
373 #define RSL_MSG_DEACTIVATE_SACCH 37
375 #define RSL_MSG_ENCR_CMD 38 /* 8.4.6 */
376 #define RSL_MSG_HANDODET 39 /* 8.4.7 */
377 #define RSL_MSG_MEAS_RES 40 /* 8.4.8 */
378 #define RSL_MSG_MODE_MODIFY_REQ 41 /* 8.4.9 */
379 #define RSL_MSG_MODE_MODIFY_ACK 42 /* 8.4.10 */
380 #define RSL_MSG_MODE_MODIFY_NACK 43 /* 8.4.11 */
381 #define RSL_MSG_PHY_CONTEXT_REQ 44 /* 8.4.12 */
382 #define RSL_MSG_PHY_CONTEXT_CONF 45 /* 8.4.13 */
383 #define RSL_MSG_RF_CHAN_REL 46 /* 8.4.14 */
384 #define RSL_MSG_MS_POWER_CONTROL 47 /* 8.4.15 */
385 #define RSL_MSG_BS_POWER_CONTROL 48 /* 8.4.16 */
386 #define RSL_MSG_PREPROC_CONFIG 49 /* 8.4.17 */
387 #define RSL_MSG_PREPROC_MEAS_RES 50 /* 8.4.18 */
388 #define RSL_MSG_RF_CHAN_REL_ACK 51 /* 8.4.19 */
389 #define RSL_MSG_SACCH_INFO_MODIFY 52 /* 8.4.20 */
390 #define RSL_MSG_TALKER_DET 53 /* 8.4.21 */
391 #define RSL_MSG_LISTENER_DET 54 /* 8.4.22 */
392 #define RSL_MSG_REMOTE_CODEC_CONF_REP 55 /* 8.4.23 */
393 #define RSL_MSG_R_T_D_REP 56 /* 8.4.24 */
394 #define RSL_MSG_PRE_HANDO_NOTIF 57 /* 8.4.25 */
395 #define RSL_MSG_MR_CODEC_MOD_REQ 58 /* 8.4.26 */
396 #define RSL_MSG_MR_CODEC_MOD_ACK 59 /* 8.4.27 */
397 #define RSL_MSG_MR_CODEC_MOD_NACK 60 /* 8.4.28 */
398 #define RSL_MSG_MR_CODEC_MOD_PER 61 /* 8.4.29 */
399 #define RSL_MSG_TFO_REP 62 /* 8.4.30 */
400 #define RSL_MSG_TFO_MOD_REQ 63 /* 8.4.31 */
401 /* 0 1 - - - - - - Location Services messages: */
402 #define RSL_MSG_LOC_INF 65 /* 8.7.1 */
404 /* Vendor-Specific messages of ip.access nanoBTS. There is no public documentation
405 * about those extensions, all information in this dissector is based on lawful
406 * protocol reverse enginering by Harald Welte <laforge@gnumonks.org> */
407 #define RSL_MSG_TYPE_IPAC_MEAS_PP_DEF 0x60
408 #define RSL_MSG_TYPE_IPAC_HO_CAND_INQ 0x61
409 #define RSL_MSG_TYPE_IPAC_HO_CAND_RESP 0x62
411 #define RSL_MSG_TYPE_IPAC_PDCH_ACT 0x48
412 #define RSL_MSG_TYPE_IPAC_PDCH_ACT_ACK 0x49
413 #define RSL_MSG_TYPE_IPAC_PDCH_ACT_NACK 0x4a
414 #define RSL_MSG_TYPE_IPAC_PDCH_DEACT 0x4b
415 #define RSL_MSG_TYPE_IPAC_PDCH_DEACT_ACK 0x4c
416 #define RSL_MSG_TYPE_IPAC_PDCH_DEACT_NACK 0x4d
418 #define RSL_MSG_TYPE_IPAC_CRCX 0x70
419 #define RSL_MSG_TYPE_IPAC_CRCX_ACK 0x71
420 #define RSL_MSG_TYPE_IPAC_CRCX_NACK 0x72
421 #define RSL_MSG_TYPE_IPAC_MDCX 0x73
422 #define RSL_MSG_TYPE_IPAC_MDCX_ACK 0x74
423 #define RSL_MSG_TYPE_IPAC_MDCX_NACK 0x75
424 #define RSL_MSG_TYPE_IPAC_DLCX_IND 0x76
425 #define RSL_MSG_TYPE_IPAC_DLCX 0x77
426 #define RSL_MSG_TYPE_IPAC_DLCX_ACK 0x78
427 #define RSL_MSG_TYPE_IPAC_DLCX_NACK 0x79
428 #define RSL_MSG_TYPE_OSMO_ETWS_CMD 0x7f
430 #define RSL_IE_IPAC_SRTP_CONFIG 0xe0
431 #define RSL_IE_IPAC_PROXY_UDP 0xe1
432 #define RSL_IE_IPAC_BSCMPL_TOUT 0xe2
433 #define RSL_IE_IPAC_REMOTE_IP 0xf0
434 #define RSL_IE_IPAC_REMOTE_PORT 0xf1
435 #define RSL_IE_IPAC_RTP_PAYLOAD 0xf2
436 #define RSL_IE_IPAC_LOCAL_PORT 0xf3
437 #define RSL_IE_IPAC_SPEECH_MODE 0xf4
438 #define RSL_IE_IPAC_LOCAL_IP 0xf5
439 #define RSL_IE_IPAC_CONN_STAT 0xf6
440 #define RSL_IE_IPAC_HO_C_PARMS 0xf7
441 #define RSL_IE_IPAC_CONN_ID 0xf8
442 #define RSL_IE_IPAC_RTP_CSD_FMT 0xf9
443 #define RSL_IE_IPAC_RTP_JIT_BUF 0xfa
444 #define RSL_IE_IPAC_RTP_COMPR 0xfb
445 #define RSL_IE_IPAC_RTP_PAYLOAD2 0xfc
446 #define RSL_IE_IPAC_RTP_MPLEX 0xfd
447 #define RSL_IE_IPAC_RTP_MPLEX_ID 0xfe
449 /* Osmocom specific RSL IEs */
450 #define RSL_IE_OSMO_REP_ACCH_CAP 0x60
451 #define RSL_IE_OSMO_TRAINING_SEQUENCE 0x61
452 #define RSL_IE_OSMO_TOP_ACCH_CAP 0x62
453 #define RSL_IE_OSMO_OSMUX_CID 0x63
455 static const value_string rsl_msg_type_vals
[] = {
456 /* 0 0 0 0 - - - - Radio Link Layer Management messages: */
457 /* 0x01 */ { RSL_MSG_TYPE_DATA_REQ
, "DATA REQuest" }, /* 8.3.1 */
458 /* 0x02 */ { RSL_MSG_TYPE_DATA_IND
, "DATA INDication" }, /* 8.3.2 */
459 /* 0x03 */ { RSL_MSG_TYPE_ERROR_IND
, "ERROR INDication" }, /* 8.3.3 */
460 /* 0x04 */ { RSL_MSG_TYPE_EST_REQ
, "ESTablish REQuest" }, /* 8.3.4 */
461 /* 0x05 */ { RSL_MSG_TYPE_EST_CONF
, "ESTablish CONFirm" }, /* 8.3.5 */
462 /* 0x06 */ { RSL_MSG_EST_IND
, "ESTablish INDication" }, /* 8.3.6 */
463 /* 0x07 */ { RSL_MSG_REL_REQ
, "RELease REQuest" }, /* 8.3.7 */
464 /* 0x08 */ { RSL_MSG_REL_CONF
, "RELease CONFirm" }, /* 8.3.8 */
465 /* 0x09 */ { RSL_MSG_REL_IND
, "RELease INDication" }, /* 8.3.9 */
466 /* 0x0a */ { RSL_MSG_UNIT_DATA_REQ
, "UNIT DATA REQuest" }, /* 8.3.10 */
467 /* 0x0b */ { RSL_MSG_UNIT_DATA_IND
, "UNIT DATA INDication" }, /* 8.3.11 */
468 /* 0 0 0 1 - - - - Common Channel Management/TRX Management messages: */
469 /* 0x11 */ { RSL_MSG_BCCH_INFO
, "BCCH INFOrmation" }, /* 8.5.1 */
470 /* 0x12 */ { RSL_MSG_CCCH_LOAD_IND
, "CCCH LOAD INDication" }, /* 8.5.2 */
471 /* 0x13 */ { RSL_MSG_CHANRQD
, "CHANnel ReQuireD" }, /* 8.5.3 */
472 /* 0x14 */ { RSL_MSG_DELETE_IND
, "DELETE INDication" }, /* 8.5.4 */
473 /* 0x15 */ { RSL_MSG_PAGING_CMD
, "PAGING CoMmanD" }, /* 8.5.5 */
474 /* 0x16 */ { RSL_MSG_IMM_ASS_CMD
, "IMMEDIATE ASSIGN COMMAND" }, /* 8.5.6 */
475 /* 0x17 */ { RSL_MSG_SMS_BC_REQ
, "SMS BroadCast REQuest" }, /* 8.5.7 */
477 /* Encapsulating paging messages into a packet EP2192796 - proprietor Huawei */
478 /* 0x18 */ { RSL_MSG_TYPE_PAGING
, "PAGING Huawei extension" },
480 /* 0x19 */ { RSL_MSG_RF_RES_IND
, "RF RESource INDication" }, /* 8.6.1 */
481 /* 0x1a */ { RSL_MSG_SACCH_FILL
, "SACCH FILLing" }, /* 8.6.2 */
482 /* 0x1b */ { RSL_MSG_OVERLOAD
, "OVERLOAD" }, /* 8.6.3 */
483 /* 0x1c */ { RSL_MSG_ERROR_REPORT
, "ERROR REPORT" }, /* 8.6.4 */
484 /* 0x1d */ { RSL_MSG_SMS_BC_CMD
, "SMS BroadCast CoMmanD" }, /* 8.5.8 */
485 /* 0x1e */ { RSL_MSG_CBCH_LOAD_IND
, "CBCH LOAD INDication" }, /* 8.5.9 */
486 /* 0x1f */ { RSL_MSG_NOT_CMD
, "NOTification CoMmanD" }, /* 8.5.10 */
488 /* 0 0 1 - - - - - Dedicated Channel Management messages: */
489 /* 0x21 */ { RSL_MSG_CHAN_ACTIV
, "CHANnel ACTIVation" }, /* 8.4.1 */
490 /* 0x22 */ { RSL_MSG_CHAN_ACTIV_ACK
, "CHANnel ACTIVation ACKnowledge" }, /* 8.4.2 */
491 /* 0x23 */ { RSL_MSG_CHAN_ACTIV_N_ACK
, "CHANnel ACTIVation Negative ACK" }, /* 8.4.3 */
492 /* 0x24 */ { RSL_MSG_CONN_FAIL
, "CONNection FAILure" }, /* 8.4.4 */
493 /* 0x25 */ { RSL_MSG_DEACTIVATE_SACCH
, "DEACTIVATE SACCH" }, /* 8.4.5 */
494 /* 0x26 */ { RSL_MSG_ENCR_CMD
, "ENCRyption CoMmanD" }, /* 8.4.6 */
495 /* 0x27 */ { RSL_MSG_HANDODET
, "HANDOver DETection" }, /* 8.4.7 */
496 /* 0x28 */ { RSL_MSG_MEAS_RES
, "MEASurement RESult" }, /* 8.4.8 */
497 /* 0x29 */ { RSL_MSG_MODE_MODIFY_REQ
, "MODE MODIFY REQuest" }, /* 8.4.9 */
498 /* 0x2a */ { RSL_MSG_MODE_MODIFY_ACK
, "MODE MODIFY ACKnowledge" }, /* 8.4.10 */
499 /* 0x2v */ { RSL_MSG_MODE_MODIFY_NACK
, "MODE MODIFY Negative ACKnowledge" }, /* 8.4.11 */
500 /* 0x2b */ { RSL_MSG_PHY_CONTEXT_REQ
, "PHYsical CONTEXT REQuest" }, /* 8.4.12 */
501 /* 0x2d */ { RSL_MSG_PHY_CONTEXT_CONF
, "PHYsical CONTEXT CONFirm" }, /* 8.4.13 */
502 /* 0x2e */ { RSL_MSG_RF_CHAN_REL
, "RF CHANnel RELease" }, /* 8.4.14 */
503 /* 0x2f */ { RSL_MSG_MS_POWER_CONTROL
, "MS POWER CONTROL" }, /* 8.4.15 */
504 /* 0x30 */ { RSL_MSG_BS_POWER_CONTROL
, "BS POWER CONTROL" }, /* 8.4.16 */
505 /* 0x31 */ { RSL_MSG_PREPROC_CONFIG
, "PREPROCess CONFIGure" }, /* 8.4.17 */
506 /* 0x32 */ { RSL_MSG_PREPROC_MEAS_RES
, "PREPROCessed MEASurement RESult" }, /* 8.4.18 */
507 /* 0x33 */ { RSL_MSG_RF_CHAN_REL_ACK
, "RF CHANnel RELease ACKnowledge" }, /* 8.4.19 */
508 /* 0x34 */ { RSL_MSG_SACCH_INFO_MODIFY
, "SACCH INFO MODIFY" }, /* 8.4.20 */
509 /* 0x35 */ { RSL_MSG_TALKER_DET
, "TALKER DETection" }, /* 8.4.21 */
510 /* 0x36 */ { RSL_MSG_LISTENER_DET
, "LISTENER DETection" }, /* 8.4.22 */
511 /* 0x37 */ { RSL_MSG_REMOTE_CODEC_CONF_REP
, "REMOTE CODEC CONFiguration REPort" }, /* 8.4.23 */
512 /* 0x38 */ { RSL_MSG_R_T_D_REP
, "Round Trip Delay REPort" }, /* 8.4.24 */
513 /* 0x39 */ { RSL_MSG_PRE_HANDO_NOTIF
, "PRE-HANDOver NOTIFication" }, /* 8.4.25 */
514 /* 0x3a */ { RSL_MSG_MR_CODEC_MOD_REQ
, "MultiRate CODEC MODification REQuest" }, /* 8.4.26 */
515 /* 0x3b */ { RSL_MSG_MR_CODEC_MOD_ACK
, "MultiRate CODEC MOD ACKnowledge" }, /* 8.4.27 */
516 /* 0x3c */ { RSL_MSG_MR_CODEC_MOD_NACK
, "MultiRate CODEC MOD Negative ACKnowledge" }, /* 8.4.28 */
517 /* 0x3d */ { RSL_MSG_MR_CODEC_MOD_PER
, "MultiRate CODEC MOD PERformed" }, /* 8.4.29 */
518 /* 0x3e */ { RSL_MSG_TFO_REP
, "TFO REPort" }, /* 8.4.30 */
519 /* 0x3f */ { RSL_MSG_TFO_MOD_REQ
, "TFO MODification REQuest" }, /* 8.4.31 */
520 /* 0 1 - - - - - - Location Services messages: */
521 /* 0x41 */ { 0x41, "Location Information" }, /* 8.7.1 */
523 /* 0x48 */ { RSL_MSG_TYPE_IPAC_PDCH_ACT
, "ip.access PDCH ACTIVATION" },
524 /* 0x49 */ { RSL_MSG_TYPE_IPAC_PDCH_ACT_ACK
, "ip.access PDCH ACTIVATION ACK" },
525 /* 0x4a */ { RSL_MSG_TYPE_IPAC_PDCH_ACT_NACK
, "ip.access PDCH ACTIVATION NACK" },
526 /* 0x4b */ { RSL_MSG_TYPE_IPAC_PDCH_DEACT
, "ip.access PDCH DEACTIVATION" },
527 /* 0x4c */ { RSL_MSG_TYPE_IPAC_PDCH_DEACT_ACK
, "ip.access PDCH DEACTIVATION ACK" },
528 /* 0x4d */ { RSL_MSG_TYPE_IPAC_PDCH_DEACT_NACK
,"ip.access PDCH DEACTIVATION NACK" },
529 /* 0x60 */ { RSL_MSG_TYPE_IPAC_MEAS_PP_DEF
, "ip.access MEASurement PREPROCessing DeFauLT" },
530 /* 0x61 */ { RSL_MSG_TYPE_IPAC_HO_CAND_INQ
, "ip.access HANDOover CANDidate ENQuiry" },
531 /* 0x62 */ { RSL_MSG_TYPE_IPAC_HO_CAND_RESP
, "ip.access HANDOover CANDidate RESPonse" },
532 /* 0x70 */ { RSL_MSG_TYPE_IPAC_CRCX
, "ip.access CRCX" },
533 /* 0x71 */ { RSL_MSG_TYPE_IPAC_CRCX_ACK
, "ip.access CRCX ACK" },
534 /* 0x72 */ { RSL_MSG_TYPE_IPAC_CRCX_NACK
, "ip.access CRCX NACK" },
535 /* 0x73 */ { RSL_MSG_TYPE_IPAC_MDCX
, "ip.access MDCX" },
536 /* 0x74 */ { RSL_MSG_TYPE_IPAC_MDCX_ACK
, "ip.access MDCX ACK" },
537 /* 0x75 */ { RSL_MSG_TYPE_IPAC_MDCX_NACK
, "ip.access MDCX NACK" },
538 /* 0x76 */ { RSL_MSG_TYPE_IPAC_DLCX_IND
, "ip.access DLCX INDication" },
539 /* 0x77 */ { RSL_MSG_TYPE_IPAC_DLCX
, "ip.access DLCX" },
540 /* 0x78 */ { RSL_MSG_TYPE_IPAC_DLCX_ACK
, "ip.access DLCX ACK" },
541 /* 0x79 */ { RSL_MSG_TYPE_IPAC_DLCX_NACK
, "ip.access DLCX NACK" },
542 /* 0x7f */ { RSL_MSG_TYPE_OSMO_ETWS_CMD
, "Osmocom PRIMARY ETWS CMD" },
543 /* 0x48 */ { 0, NULL
}
545 static value_string_ext rsl_msg_type_vals_ext
= VALUE_STRING_EXT_INIT(rsl_msg_type_vals
);
547 #define RSL_IE_CH_NO 1
548 #define RSL_IE_LINK_ID 2
549 #define RSL_IE_ACT_TYPE 3
550 #define RSL_IE_BS_POW 4
551 #define RSL_IE_CH_ID 5
553 #define RSL_IE_CH_MODE 6
554 #define RSL_IE_ENC_INF 7
555 #define RSL_IE_FRAME_NO 8
556 #define RSL_IE_HO_REF 9
557 #define RSL_IE_L1_INF 10
559 #define RSL_IE_L3_INF 11
560 #define RSL_IE_MS_ID 12
561 #define RSL_IE_MS_POW 13
562 #define RSL_IE_PAGING_GRP 14
563 #define RSL_IE_PAGING_LOAD 15
565 #define RSL_IE_PHY_CTX 16
566 #define RSL_IE_ACCESS_DELAY 17
567 #define RSL_IE_RACH_LOAD 18
568 #define RSL_IE_REQ_REF 19
569 #define RSL_IE_REL_MODE 20
571 #define RSL_IE_RESOURCE_INF 21
572 #define RSL_IE_RLM_CAUSE 22
573 #define RSL_IE_STARTING_TIME 23
574 #define RSL_IE_TIMING_ADV 24
576 #define RSL_IE_UPLINK_MEAS 25
577 #define RSL_IE_CAUSE 26
578 #define RSL_IE_MEAS_RES_NO 27
579 #define RSL_IE_MESSAGE_ID 28
581 #define RSL_IE_SYS_INFO_TYPE 30
582 #define RSL_IE_MS_POWER_PARAM 31
583 #define RSL_IE_BS_POWER_PARAM 32
584 #define RSL_IE_PREPROC_PARAM 33
585 #define RSL_IE_PREPROC_MEAS 34
587 #define RSL_IE_FULL_IMM_ASS_INF 35
588 #define RSL_IE_SMSCB_INF 36
589 #define RSL_IE_FULL_MS_TIMING_OFFSET 37
590 #define RSL_IE_ERR_MSG 38
591 #define RSL_IE_FULL_BCCH_INF 39
593 #define RSL_IE_CH_NEEDED 40
594 #define RSL_IE_CB_CMD_TYPE 41
595 #define RSL_IE_SMSCB_MESS 42
596 #define RSL_IE_CBCH_LOAD_INF 43
599 #define RSL_IE_SMSCB_CH_IND 46
600 #define RSL_IE_GRP_CALL_REF 47
601 #define RSL_IE_CH_DESC 48
602 #define RSL_IE_NCH_DRX_INF 49
604 #define RSL_IE_CMD_IND 50
605 #define RSL_IE_EMLPP_PRIO 51
606 #define RSL_IE_UIC 52
607 #define RSL_IE_MAIN_CH_REF 53
608 #define RSL_IE_MULTIRATE_CONF 54
610 #define RSL_IE_MULTIRATE_CNTRL 55
611 #define RSL_IE_SUP_CODEC_TYPES 56
612 #define RSL_IE_CODEC_CONF 57
613 #define RSL_IE_RTD 58
614 #define RSL_IE_TFO_STATUS 59
616 #define RSL_IE_LLP_APDU 60
617 #define RSL_IE_TFO_TRANSP_CONT 61
619 static const value_string rsl_ie_type_vals
[] = {
620 /* 0x01 */ { RSL_IE_CH_NO
, "Channel Number" }, /* 9.3.1 */
621 /* 0x02 */ { RSL_IE_LINK_ID
, "Link Identifier" }, /* 9.3.2 */
622 /* 0x03 */ { RSL_IE_ACT_TYPE
, "Activation Type" }, /* 9.3.3 */
623 /* 0x04 */ { RSL_IE_BS_POW
, "BS Power" }, /* 9.3.4 */
624 /* 0x05 */ { RSL_IE_CH_ID
, "Channel Identification" }, /* 9.3.5 */
625 /* 0x06 */ { RSL_IE_CH_MODE
, "Channel Mode" }, /* 9.3.6 */
626 /* 0x07 */ { RSL_IE_ENC_INF
, "Encryption Information" }, /* 9.3.7 */
627 /* 0x08 */ { RSL_IE_FRAME_NO
, "Frame Number" }, /* 9.3.8 */
628 /* 0x09 */ { RSL_IE_HO_REF
, "Handover Reference" }, /* 9.3.9 */
629 /* 0x0a */ { RSL_IE_L1_INF
, "L1 Information" }, /* 9.3.10 */
630 /* 0x0b */ { RSL_IE_L3_INF
, "L3 Information" }, /* 9.3.11 */
631 /* 0x0c */ { RSL_IE_MS_ID
, "MS Identity" }, /* 9.3.12 */
632 /* 0x0d */ { RSL_IE_MS_POW
, "MS Power" }, /* 9.3.13 */
633 /* 0x0e */ { RSL_IE_PAGING_GRP
, "Paging Group" }, /* 9.3.14 */
634 /* 0x0f */ { RSL_IE_PAGING_LOAD
, "Paging Load" }, /* 9.3.15 */
635 /* 0x10 */ { RSL_IE_PHY_CTX
, "Physical Context" }, /* 9.3.16 */
636 /* 0x11 */ { RSL_IE_ACCESS_DELAY
, "Access Delay" }, /* 9.3.17 */
637 /* 0x12 */ { RSL_IE_RACH_LOAD
, "RACH Load" }, /* 9.3.18 */
638 /* 0x12 */ { RSL_IE_REQ_REF
, "Request Reference" }, /* 9.3.19 */
639 /* 0x14 */ { RSL_IE_REL_MODE
, "Release Mode" }, /* 9.3.20 */
640 /* 0x15 */ { RSL_IE_RESOURCE_INF
, "Resource Information" }, /* 9.3.21 */
641 /* 0x16 */ { RSL_IE_RLM_CAUSE
, "RLM Cause" }, /* 9.3.22 */
642 /* 0x17 */ { RSL_IE_STARTING_TIME
, "Starting Time" }, /* 9.3.23 */
643 /* 0x18 */ { RSL_IE_TIMING_ADV
, "Timing Advance" }, /* 9.3.24 */
644 /* 0x19 */ { RSL_IE_UPLINK_MEAS
, "Uplink Measurements" }, /* 9.3.25 */
645 /* 0x1a */ { RSL_IE_CAUSE
, "Cause" }, /* 9.3.26 */
646 /* 0x1b */ { RSL_IE_MEAS_RES_NO
, "Measurement Result Number" }, /* 9.3.27 */
647 /* 0x1c */ { RSL_IE_MESSAGE_ID
, "Message Identifier" }, /* 9.3.28 */
648 /* 0x1d */ { 0x1d, "reserved" }, /* */
649 /* 0x1e */ { RSL_IE_SYS_INFO_TYPE
, "System Info Type" }, /* 9.3.30 */
650 /* 0x1f */ { RSL_IE_MS_POWER_PARAM
, "MS Power Parameters" }, /* 9.3.31 */
651 /* 0x20 */ { RSL_IE_BS_POWER_PARAM
, "BS Power Parameters" }, /* 9.3.32 */
652 /* 0x21 */ { RSL_IE_PREPROC_PARAM
, "Pre-processing Parameters" }, /* 9.3.33 */
653 /* 0x22 */ { RSL_IE_PREPROC_MEAS
, "Pre-processed Measurements" }, /* 9.3.34 */
654 /* 0x23 */ { 0x23, "reserved" }, /* */
655 /* 0x24 */ { RSL_IE_SMSCB_INF
, "SMSCB Information" }, /* 9.3.36 */
656 /* 0x25 */ { RSL_IE_FULL_MS_TIMING_OFFSET
, "MS Timing Offset" }, /* 9.3.37 */
657 /* 0x26 */ { RSL_IE_ERR_MSG
, "Erroneous Message" }, /* 9.3.38 */
658 /* 0x27 */ { RSL_IE_FULL_BCCH_INF
, "Full BCCH Information" }, /* 9.3.39 */
659 /* 0x28 */ { RSL_IE_CH_NEEDED
, "Channel Needed" }, /* 9.3.40 */
660 /* 0x29 */ { RSL_IE_CB_CMD_TYPE
, "CB Command type" }, /* 9.3.41 */
661 /* 0x2a */ { RSL_IE_SMSCB_MESS
, "SMSCB Message" }, /* 9.3.42 */
662 /* 0x2b */ { RSL_IE_CBCH_LOAD_INF
, "Full Immediate Assign Info" }, /* 9.3.35 */
663 /* 0x2c */ { 0x2c, "SACCH Information" }, /* 9.3.29 */
664 /* 0x2d */ { 0x2d, "CBCH Load Information" }, /* 9.3.43 */
665 /* 0x2e */ { RSL_IE_SMSCB_CH_IND
, "SMSCB Channel Indicator" }, /* 9.3.44 */
666 /* 0x2f */ { RSL_IE_GRP_CALL_REF
, "Group Call Reference" }, /* 9.3.45 */
667 /* 0x30 */ { RSL_IE_CH_DESC
, "Channel Description" }, /* 9.3.46 */
668 /* 0x31 */ { RSL_IE_NCH_DRX_INF
, "NCH DRX Information" }, /* 9.3.47 */
669 /* 0x32 */ { RSL_IE_CMD_IND
, "Command Indicator" }, /* 9.3.48 */
670 /* 0x33 */ { RSL_IE_EMLPP_PRIO
, "eMLPP Priority" }, /* 9.3.49 */
671 /* 0x34 */ { RSL_IE_UIC
, "UIC" }, /* 9.3.50 */
672 /* 0x35 */ { RSL_IE_MAIN_CH_REF
, "Main Channel Reference" }, /* 9.3.51 */
673 /* 0x36 */ { RSL_IE_MULTIRATE_CONF
, "MultiRate Configuration" }, /* 9.3.52 */
674 /* 0x37 */ { RSL_IE_MULTIRATE_CNTRL
, "MultiRate Control" }, /* 9.3.53 */
675 /* 0x38 */ { RSL_IE_SUP_CODEC_TYPES
, "Supported Codec Types" }, /* 9.3.54 */
676 /* 0x39 */ { RSL_IE_CODEC_CONF
, "Codec Configuration" }, /* 9.3.55 */
677 /* 0x3a */ { RSL_IE_RTD
, "Round Trip Delay" }, /* 9.3.56 */
678 /* 0x3b */ { RSL_IE_TFO_STATUS
, "TFO Status" }, /* 9.3.57 */
679 /* 0x3c */ { RSL_IE_LLP_APDU
, "LLP APDU" }, /* 9.3.58 */
680 /* 0x3d */ { RSL_IE_TFO_TRANSP_CONT
, "TFO Transparent Container" }, /* 9.3.59 */
685 Reserved for future use
693 /* 0x60 */ { RSL_IE_OSMO_REP_ACCH_CAP
, "Repeated ACCH Capabilities" },
694 /* 0x61 */ { RSL_IE_OSMO_TRAINING_SEQUENCE
, "Training Sequence Code/Set" },
695 /* 0x62 */ { RSL_IE_OSMO_TOP_ACCH_CAP
, "Temporary ACCH Overpower Capabilities" },
696 /* 0x63 */ { RSL_IE_OSMO_OSMUX_CID
, "Osmux CID" },
697 /* 0xe0 */ { RSL_IE_IPAC_SRTP_CONFIG
,"SRTP Configuration" },
698 /* 0xe1 */ { RSL_IE_IPAC_PROXY_UDP
, "BSC Proxy UDP Port" },
699 /* 0xe2 */ { RSL_IE_IPAC_BSCMPL_TOUT
,"BSC Multiplex Timeout" },
700 /* 0xf0 */ { RSL_IE_IPAC_REMOTE_IP
, "Remote IP Address" },
701 /* 0xf1 */ { RSL_IE_IPAC_REMOTE_PORT
,"Remote RTP Port" },
702 /* 0xf2 */ { RSL_IE_IPAC_RTP_PAYLOAD
,"RTP Payload Type" },
703 /* 0xf3 */ { RSL_IE_IPAC_LOCAL_PORT
, "Local RTP Port" },
704 /* 0xf4 */ { RSL_IE_IPAC_SPEECH_MODE
,"Speech Mode" },
705 /* 0xf5 */ { RSL_IE_IPAC_LOCAL_IP
, "Local IP Address" },
706 /* 0xf6 */ { RSL_IE_IPAC_CONN_STAT
, "Connection Statistics" },
707 /* 0xf7 */ { RSL_IE_IPAC_HO_C_PARMS
, "Handover C Parameters" },
708 /* 0xf8 */ { RSL_IE_IPAC_CONN_ID
, "Connection Identifier" },
709 /* 0xf9 */ { RSL_IE_IPAC_RTP_CSD_FMT
,"RTP CSD Format" },
710 /* 0xfa */ { RSL_IE_IPAC_RTP_JIT_BUF
,"RTP Jitter Buffer" },
711 /* 0xfb */ { RSL_IE_IPAC_RTP_COMPR
, "RTP Compression" },
712 /* 0xfc */ { RSL_IE_IPAC_RTP_PAYLOAD2
,"RTP Payload Type 2" },
713 /* 0xfd */ { RSL_IE_IPAC_RTP_MPLEX
, "RTP Multiplex" },
714 /* 0xfe */ { RSL_IE_IPAC_RTP_MPLEX_ID
,"RTP Multiplex Identifier" },
717 static value_string_ext rsl_ie_type_vals_ext
= VALUE_STRING_EXT_INIT(rsl_ie_type_vals
);
722 0 0 0 0 1 Bm + ACCH's
723 0 0 0 1 T Lm + ACCH's
724 0 0 1 T T SDCCH/4 + ACCH
725 0 1 T T T SDCCH/8 + ACCH
727 1 0 0 0 1 Uplink CCCH (RACH)
728 1 0 0 1 0 Downlink CCCH (PCH + AGCH)
730 static const value_string rsl_ch_no_Cbits_vals
[] = {
731 { 0x01, "Bm + ACCH" },
732 { 0x02, "Lm + ACCH (sub-chan 0)" },
733 { 0x03, "Lm + ACCH (sub-chan 1)" },
734 { 0x04, "SDCCH/4 + ACCH (sub-chan 0)" },
735 { 0x05, "SDCCH/4 + ACCH (sub-chan 1)" },
736 { 0x06, "SDCCH/4 + ACCH (sub-chan 2)" },
737 { 0x07, "SDCCH/4 + ACCH (sub-chan 3)" },
738 { 0x08, "SDCCH/8 + ACCH (sub-chan 0)" },
739 { 0x09, "SDCCH/8 + ACCH (sub-chan 1)" },
740 { 0x0a, "SDCCH/8 + ACCH (sub-chan 2)" },
741 { 0x0b, "SDCCH/8 + ACCH (sub-chan 3)" },
742 { 0x0c, "SDCCH/8 + ACCH (sub-chan 4)" },
743 { 0x0d, "SDCCH/8 + ACCH (sub-chan 5)" },
744 { 0x0e, "SDCCH/8 + ACCH (sub-chan 6)" },
745 { 0x0f, "SDCCH/8 + ACCH (sub-chan 7)" },
747 { 0x11, "Uplink CCCH (RACH)" },
748 { 0x12, "Downlink CCCH (PCH + AGCH)" },
749 /* used by Osmocom and Ericsson */
753 static value_string_ext rsl_ch_no_Cbits_vals_ext
= VALUE_STRING_EXT_INIT(rsl_ch_no_Cbits_vals
);
755 #define RSL_PHY_CTX_IE_EXT_RAND_ACCES 0x42
756 #define RSL_PHY_CTX_IE_AB_RX_LEVEL_ERR_BITS 0x43
757 #define RSL_PHY_CTX_IE_RX_LEVEL_EXT 0x45
759 /* Physical Context IE vals*/
760 static const value_string rsl_phy_con_ie_vals
[] = {
761 { RSL_PHY_CTX_IE_EXT_RAND_ACCES
, "Ext RandAccess" },
762 { RSL_PHY_CTX_IE_AB_RX_LEVEL_ERR_BITS
, "AB RxLevel&ErrBits" },
763 { RSL_PHY_CTX_IE_RX_LEVEL_EXT
, "RxLevel Ext" },
766 static value_string_ext rsl_phy_con_ie_vals_ext
= VALUE_STRING_EXT_INIT(rsl_phy_con_ie_vals
);
768 /* Section 9.3.41 CB Command Type; bits 5 to 8 */
769 static const value_string rsl_cb_cmd_type_vals
[] = {
770 { 0x0, "Normal Message Broadcast" },
771 { 0x8, "Schedule Message Broadcast" },
772 { 0xE, "Default Message Broadcast" },
773 { 0xF, "Null Message Broadcast" },
777 /* Section 9.3.41 CB Command Type; bit 4 */
778 static const value_string rsl_cb_cmd_type_def_bcast_vals
[] = {
779 { 0x0, "Normal Message" },
780 { 0x1, "Null Message" },
784 /* Section 9.3.41 CB Command Type; bits 1 and 2 */
785 static const value_string rsl_cb_cmd_type_last_block_vals
[] = {
786 { 0x0, "Block 4/4" },
787 { 0x1, "Block 1/4" },
788 { 0x2, "Block 2/4" },
789 { 0x3, "Block 3/4" },
794 /* From openbsc/include/openbsc/tlv.h */
809 struct tlv_definition
{
810 struct tlv_def def
[0x100];
813 /* This structure is initialized in proto_register_rsl() */
814 static struct tlv_definition rsl_att_tlvdef
;
816 /* 9.3.1 Channel number 9.3.1 M TV 2 */
818 dissect_rsl_ie_ch_no(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
823 if (is_mandatory
== false) {
824 ie_id
= tvb_get_uint8(tvb
, offset
);
825 if (ie_id
!= RSL_IE_CH_NO
)
829 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 2, ett_ie_ch_no
, NULL
, "Channel number IE ");
831 /* Element identifier */
832 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
835 proto_tree_add_item(ie_tree
, hf_rsl_ch_no_Cbits
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
836 /* TN is time slot number, binary represented as in 3GPP TS 45.002.
839 proto_tree_add_item(ie_tree
, hf_rsl_ch_no_TN
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
844 static const value_string rsl_ch_type_vals
[] = {
845 { 0x00, "Main signalling channel (FACCH or SDCCH)" },
850 static const value_string rsl_prio_vals
[] = {
851 { 0x00, "Normal Priority" },
852 { 0x01, "High Priority" },
853 { 0x02, "Low Priority" },
858 * 9.3.2 Link Identifier M TV 2
861 dissect_rsl_ie_link_id(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
867 if (is_mandatory
== false) {
868 ie_id
= tvb_get_uint8(tvb
, offset
);
869 if (ie_id
!= RSL_IE_LINK_ID
)
873 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 2, ett_ie_link_id
, NULL
, "Link Identifier IE ");
875 /* Element identifier */
876 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
879 octet
= tvb_get_uint8(tvb
, offset
);
881 if ((octet
& 0x20) == 0x20) {
883 proto_tree_add_item(ie_tree
, hf_rsl_na
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
888 proto_tree_add_item(ie_tree
, hf_rsl_ch_type
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
889 /* NA - Not applicable */
890 proto_tree_add_item(ie_tree
, hf_rsl_na
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
892 proto_tree_add_item(ie_tree
, hf_rsl_prio
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
894 * The SAPI field contains the SAPI value as defined in 3GPP TS 44.005.
896 proto_tree_add_item(ie_tree
, hf_rsl_sapi
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
903 * 9.3.3 Activation Type
905 static const true_false_string rsl_rbit_vals
= {
910 static const value_string rsl_a3a2_vals
[] = {
911 { 0x00, "Activation related to intra-cell channel change" },
912 { 0x01, "Activation related to inter-cell channel change (handover)" },
913 { 0x02, "Activation related to secondary channels" },
914 /* non-standard value used by Ericsson */
915 { 0x03, "Activation related to packet data channel" },
919 static const true_false_string rsl_a1_0_vals
= {
920 "related to normal assignment procedure",
921 "related to immediate assignment procedure"
924 static const true_false_string rsl_a1_1_vals
= {
925 "related to synchronous handover procedure",
926 "related to asynchronous handover procedure"
929 static const true_false_string rsl_a1_2_vals
= {
930 "related to multislot configuration",
931 "related to additional assignment procedure"
935 dissect_rsl_ie_act_type(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
941 if (is_mandatory
== false) {
942 ie_id
= tvb_get_uint8(tvb
, offset
);
943 if (ie_id
!= RSL_IE_ACT_TYPE
)
947 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 2, ett_ie_act_type
, NULL
, "Activation Type IE ");
949 /* Element identifier */
950 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
953 /* The R bit indicates if the procedure is an initial activation or a reactivation. */
954 proto_tree_add_item(ie_tree
, hf_rsl_rbit
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
956 /* The A-bits indicate the type of activation, which defines the access procedure
957 * and the operation of the data link layer
959 octet
= (tvb_get_uint8(tvb
, offset
) & 0x06) >> 1;
960 proto_tree_add_item(ie_tree
, hf_rsl_a3a2
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
963 /* Activation related to intra-cell channel change */
964 proto_tree_add_item(ie_tree
, hf_rsl_a1_0
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
967 /* Activation related to inter-cell channel change (handover) */
968 proto_tree_add_item(ie_tree
, hf_rsl_a1_1
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
971 /* Activation related to secondary channels */
972 proto_tree_add_item(ie_tree
, hf_rsl_a1_2
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
985 static const true_false_string rsl_epc_mode_vals
= {
986 "Channel in EPC mode",
987 "Channel not in EPC mode"
990 static const true_false_string rsl_fpc_epc_mode_vals
= {
991 "Fast Power Control in use",
992 "Fast Power Control not in use"
995 static const value_string rsl_rlm_bs_power_vals
[] = {
997 { 0x01, "Pn - 2 dB" },
998 { 0x02, "Pn - 4 dB" },
999 { 0x03, "Pn - 6 dB" },
1000 { 0x04, "Pn - 8 dB" },
1001 { 0x05, "Pn - 10 dB" },
1002 { 0x06, "Pn - 12 dB" },
1003 { 0x07, "Pn - 14 dB" },
1004 { 0x08, "Pn - 16 dB" },
1005 { 0x09, "Pn - 18 dB" },
1006 { 0x0a, "Pn - 20 dB" },
1007 { 0x0b, "Pn - 22 dB" },
1008 { 0x0c, "Pn - 24 dB" },
1009 { 0x0d, "Pn - 26 dB" },
1010 { 0x0e, "Pn - 28 dB" },
1011 { 0x0f, "Pn - 30 dB" },
1014 static value_string_ext rsl_rlm_bs_power_vals_ext
= VALUE_STRING_EXT_INIT(rsl_rlm_bs_power_vals
);
1017 dissect_rsl_ie_bs_power(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
1019 proto_tree
*ie_tree
;
1022 if (is_mandatory
== false) {
1023 ie_id
= tvb_get_uint8(tvb
, offset
);
1024 if (ie_id
!= RSL_IE_BS_POW
)
1028 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 2, ett_ie_bs_power
, NULL
, "BS Power IE");
1030 /* Element identifier */
1031 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1035 proto_tree_add_item(ie_tree
, hf_rsl_epc_mode
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1037 proto_tree_add_item(ie_tree
, hf_rsl_bs_fpc_epc_mode
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1039 /* The Power Level field (octet 2) indicates the number of 2 dB steps by
1040 * which the power shall be reduced from its nominal value, Pn,
1041 * set by the network operator to adjust the coverage.
1042 * Thus the Power Level values correspond to the following powers (relative to Pn):
1044 proto_tree_add_item(ie_tree
, hf_rsl_bs_power
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1050 * 9.3.5 Channel Identification
1053 dissect_rsl_ie_ch_id(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
1056 proto_tree
*ie_tree
;
1062 if (is_mandatory
== false) {
1063 ie_id
= tvb_get_uint8(tvb
, offset
);
1064 if (ie_id
!= RSL_IE_CH_ID
)
1068 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_ch_id
, &ti
, "Channel Identification IE");
1070 /* Element identifier */
1071 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1074 length
= tvb_get_uint8(tvb
, offset
);
1075 proto_item_set_len(ti
, length
+2);
1076 proto_tree_add_item(ie_tree
, hf_rsl_ie_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1081 /* 3GPP TS 44.018 "Channel Description"
1082 * the whole of the 3GPP TS 44.018 element including the element identifier and
1083 * length should be included.
1084 * XXX Hmm a type 3 IE (TV).
1086 proto_tree_add_item(ie_tree
, hf_rsl_channel_description_tag
, tvb
, offset
, 1, ENC_NA
);
1087 de_rr_ch_dsc(tvb
, ie_tree
, pinfo
, offset
+1, length
, NULL
, 0);
1090 /* 3GPP TS 48.058 (version 15.0.0), section 9.3.5 "Channel Identification" states
1091 * that the 3GPP TS 44.018 "Mobile Allocation" IE shall for compatibility reasons
1092 * be included but empty, i.e. the length shall be zero. Decode it anyway. */
1093 proto_tree_add_item(ie_tree
, hf_rsl_mobile_allocation_tag
, tvb
, offset
++, 1, ENC_NA
);
1094 proto_tree_add_item_ret_uint(ie_tree
, hf_rsl_mobile_allocation_len
,
1095 tvb
, offset
++, 1, ENC_NA
, &ma_length
);
1096 if (ma_length
> 0) {
1097 de_rr_mob_all(tvb
, ie_tree
, pinfo
, offset
, ma_length
, NULL
, 0);
1098 proto_tree_add_expert(ie_tree
, pinfo
, &ei_rsl_mobile_allocation_deprecated
,
1099 tvb
, offset
, ma_length
);
1102 return ie_offset
+ length
;
1105 * 9.3.6 Channel Mode
1108 static const true_false_string rsl_dtx_vals
= {
1110 "DTX is not applied"
1112 static const value_string rsl_speech_or_data_vals
[] = {
1115 { 0x03, "Signalling" },
1118 static const value_string rsl_ch_rate_and_type_vals
[] = {
1120 { 0x08, "Full rate TCH channel Bm" },
1121 { 0x09, "Half rate TCH channel Lm" },
1122 { 0x0a, "Full rate TCH channel bi-directional Bm, Multislot configuration" },
1123 { 0x18, "Full rate TCH channel Bm Group call channel" },
1124 { 0x19, "Half rate TCH channel Lm Group call channel" },
1125 { 0x1a, "Full rate TCH channel uni-directional downlink Bm, Multislot configuration" },
1126 { 0x28, "Full rate TCH channel Bm Broadcast call channel" },
1127 { 0x29, "PHalf rate TCH channel Lm Broadcast call channel" },
1128 /* Osmocom specific extensions: */
1129 { 0x88, "Full rate TCH channel Bm in VAMOS mode" },
1130 { 0x89, "Half rate TCH channel Lm in VAMOS mode" },
1133 static value_string_ext rsl_ch_rate_and_type_vals_ext
= VALUE_STRING_EXT_INIT(rsl_ch_rate_and_type_vals
);
1135 static const value_string rsl_speech_coding_alg_vals
[] = {
1136 { 0x01, "GSM speech coding algorithm version 1: GSM FR or GSM HR" },
1137 { 0x11, "GSM speech coding algorithm version 2: GSM EFR (half rate not defined in this version of the protocol)" },
1138 { 0x21, "GSM speech coding algorithm version 3: FR AMR or HR AMR" },
1139 { 0x31, "GSM speech coding algorithm version 4: OFR AMR-WB or OHR AMR-WB" },
1140 { 0x09, "GSM speech coding algorithm version 5: FR AMR-WB" },
1141 { 0x0d, "GSM speech coding algorithm version 6: OHR AMR" },
1145 static const true_false_string t_nt_bit_vals
= {
1146 "Non-transparent service",
1147 "Transparent service"
1150 static const value_string rsl_ra_if_data_rte_vals
[] = {
1151 { 0x21, "asymmetric 43.5 kbit/s (downlink) + 14.5 kbit/s (uplink)" },
1152 { 0x22, "asymmetric 29.0 kbit/s (downlink) + 14.5 kbit/s (uplink)" },
1153 { 0x23, "asymmetric 43.5 kbit/s (downlink) + 29.0 kbit/s (uplink)" },
1154 { 0x29, "asymmetric 14.5 kbit/s (downlink) + 43.5 kbit/s (uplink)" },
1155 { 0x2a, "asymmetric 14.5 kbit/s (downlink) + 29.0 kbit/s (uplink)" },
1156 { 0x2b, "asymmetric 29.0 kbit/s (downlink) + 43.5 kbit/s (uplink)" },
1157 { 0x34, "43.5 kbit/s" },
1158 { 0x31, "28.8 kbit/s" },
1159 { 0x18, "14.5 kbit/s" },
1160 { 0x10, "12 kbit/s" },
1161 { 0x11, "6 kbit/s" },
1165 static const value_string rsl_data_rte_vals
[] = {
1166 { 0x38, "32 kbit/s" },
1167 { 0x39, "29 kbit/s" },
1168 { 0x18, "14.4 kbit/s" },
1169 { 0x10, "9.6 kbit/s" },
1170 { 0x11, "4.8 kbit/s" },
1171 { 0x12, "2.4 kbit/s" },
1172 { 0x13, "1.2 kbit/s" },
1173 { 0x14, "600 bit/s" },
1174 { 0x15, "1 200/75 bit/s (1 200 network-to-MS, 75 MS-to-network)" },
1179 dissect_rsl_ie_ch_mode(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
1182 proto_tree
*ie_tree
;
1188 if (is_mandatory
== false) {
1189 ie_id
= tvb_get_uint8(tvb
, offset
);
1190 if (ie_id
!= RSL_IE_CH_MODE
)
1194 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_ch_mode
, &ti
, "Channel Mode IE");
1196 /* Element identifier */
1197 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1200 length
= tvb_get_uint8(tvb
, offset
);
1201 proto_item_set_len(ti
, length
+2);
1202 proto_tree_add_item(ie_tree
, hf_rsl_ie_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1206 /* The DTX bits of octet 3 indicate whether DTX is applied
1207 * DTXd indicates use of DTX in the downlink direction (BTS to MS) and
1208 * DTXu indicates use of DTX in the uplink direction (MS to BTS).
1210 proto_tree_add_item(ie_tree
, hf_rsl_cm_dtxd
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1211 proto_tree_add_item(ie_tree
, hf_rsl_cm_dtxu
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1213 /* The "Speech or data indicator" field (octet 4) */
1214 proto_tree_add_item(ie_tree
, hf_rsl_speech_or_data
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1215 octet
= tvb_get_uint8(tvb
, offset
);
1217 /* Channel rate and type */
1218 proto_tree_add_item(ie_tree
, hf_rsl_ch_rate_and_type
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1220 /* Speech coding algor./data rate + transp ind */
1224 proto_tree_add_item(ie_tree
, hf_rsl_speech_coding_alg
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1228 proto_tree_add_item(ie_tree
, hf_rsl_extension_bit
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1229 proto_tree_add_item(ie_tree
, hf_rsl_t_nt_bit
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1230 octet
= tvb_get_uint8(tvb
, offset
);
1231 if ((octet
& 0x40) == 0x40) {
1232 /* Non-transparent service */
1233 /* For the non-transparent service, bits 6 to 1 indicate the radio interface data rate:*/
1234 proto_tree_add_item(ie_tree
, hf_rsl_ra_if_data_rte
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1236 /* For the transparent service, bits 6-1 indicate the data rate: */
1237 proto_tree_add_item(ie_tree
, hf_rsl_data_rte
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1242 * If octet 4 indicates signalling then octet 6 is coded as follows:
1243 * 0000 0000 No resources required
1245 proto_tree_add_item(ie_tree
, hf_rsl_no_resources_required
, tvb
, offset
, 1, ENC_NA
);
1248 /* Should not happen */
1249 proto_tree_add_expert(ie_tree
, pinfo
, &ei_rsl_speech_or_data_indicator
, tvb
, offset
, 1);
1255 return ie_offset
+ length
;
1259 * 9.3.7 Encryption information
1262 /* The Algorithm Identifier field (octet 3) indicates the relevant ciphering algorithm. It is coded as: */
1263 static const value_string rsl_algorithm_id_vals
[] = {
1264 { 0x00, "Reserved" },
1265 { 0x01, "No encryption shall be used" },
1266 { 0x02, "GSM encryption algorithm version 1 (A5/1)" },
1267 { 0x03, "GSM A5/2" },
1268 { 0x04, "GSM A5/3" },
1269 { 0x05, "GSM A5/4" },
1270 { 0x06, "GSM A5/5" },
1271 { 0x07, "GSM A5/6" },
1272 { 0x08, "GSM A5/7" },
1277 dissect_rsl_ie_enc_inf(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
1280 proto_tree
*ie_tree
;
1284 if (is_mandatory
== false) {
1285 ie_id
= tvb_get_uint8(tvb
, offset
);
1286 if (ie_id
!= RSL_IE_ENC_INF
)
1290 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_enc_inf
, &ti
, "Encryption information IE");
1292 /* Element identifier */
1293 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1296 length
= tvb_get_uint8(tvb
, offset
);
1297 proto_item_set_len(ti
, length
+2);
1298 proto_tree_add_item(ie_tree
, hf_rsl_ie_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1301 /* Algorithm Identifier field (octet 3) */
1302 proto_tree_add_item(ie_tree
, hf_rsl_alg_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1305 proto_tree_add_item(ie_tree
, hf_rsl_key
, tvb
, offset
+1, length
-1, ENC_NA
);
1307 return offset
+ length
;
1311 * 9.3.8 Frame Number
1314 dissect_rsl_ie_frame_no(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
1316 proto_tree
*ie_tree
;
1321 if (is_mandatory
== false) {
1322 ie_id
= tvb_get_uint8(tvb
, offset
);
1323 if (ie_id
!= RSL_IE_FRAME_NO
)
1327 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 3, ett_ie_frame_no
, NULL
, "Frame Number IE");
1329 /* Element identifier */
1330 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1333 rfn
= parse_reduced_frame_number(tvb
, offset
);
1334 proto_tree_add_item(ie_tree
, hf_rsl_req_ref_T1prim
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1335 proto_tree_add_item(ie_tree
, hf_rsl_req_ref_T3
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1337 proto_tree_add_item(ie_tree
, hf_rsl_req_ref_T2
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1339 ti
= proto_tree_add_uint(ie_tree
, hf_rsl_req_ref_rfn
, tvb
, offset
- 2, 2, rfn
);
1340 proto_item_set_generated(ti
);
1346 * 9.3.9 Handover reference
1349 dissect_rsl_ie_ho_ref(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
1351 proto_tree
*ie_tree
;
1354 if (is_mandatory
== false) {
1355 ie_id
= tvb_get_uint8(tvb
, offset
);
1356 if (ie_id
!= RSL_IE_HO_REF
)
1360 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 2, ett_ie_ho_ref
, NULL
, "Handover reference IE");
1362 /* Element identifier */
1363 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1366 /* Hand-over reference */
1367 proto_tree_add_item(ie_tree
, hf_rsl_ho_ref
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1374 * 9.3.10 L1 Information
1378 dissect_rsl_ie_l1_inf(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
1380 proto_tree
*ie_tree
;
1383 if (is_mandatory
== false) {
1384 ie_id
= tvb_get_uint8(tvb
, offset
);
1385 if (ie_id
!= RSL_IE_L1_INF
)
1389 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 3, ett_ie_l1_inf
, NULL
, "L1 Information IE");
1391 /* Element identifier */
1392 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1395 /* Octets 2-3 contain the L1 header information of SACCH blocks.
1396 * The information fields and codings are as defined in 3GPP TS 44.004.
1399 proto_tree_add_item(ie_tree
, hf_rsl_l1inf_power_lev
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1401 proto_tree_add_item(ie_tree
, hf_rsl_l1inf_fpc
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1402 /* SRR (SACCH Repetition Request) bit */
1403 proto_tree_add_item(ie_tree
, hf_rsl_l1inf_srr
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1405 /* Actual Timing Advance */
1406 proto_tree_add_item(ie_tree
, hf_rsl_act_timing_adv
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1419 * 9.3.11 L3 Information 9.3.11 M TLV >=3
1421 * This element contains a link layer service data unit (L3 message).
1422 * It is used to forward a complete L3 message as specified in
1423 * 3GPP TS 24.008 or 3GPP TS 44.018 between BTS and BSC.
1426 dissect_rsl_ie_L3_inf(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, int offset
, bool is_mandatory
, l3_inf_t type
)
1429 proto_tree
*ie_tree
;
1434 if (is_mandatory
== false) {
1435 ie_id
= tvb_get_uint8(tvb
, offset
);
1436 if (ie_id
!= RSL_IE_L3_INF
)
1440 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_L3_inf
, &ti
, "L3 Information IE");
1442 /* Element identifier */
1443 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1446 length
= tvb_get_ntohs(tvb
, offset
);
1447 proto_item_set_len(ti
, length
+3);
1448 proto_tree_add_item(ie_tree
, hf_rsl_ie_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1451 if (type
== L3_INF_CCCH
)
1453 /* L3 PDUs carried on CCCH have L2 PSEUDO LENGTH octet or are RR Short PD format */
1454 proto_tree_add_item(ie_tree
, hf_rsl_llsdu_ccch
, tvb
, offset
, length
, ENC_NA
);
1455 next_tvb
= tvb_new_subset_length(tvb
, offset
, length
);
1456 /* The gsm_a_ccch dissector is the only one handling messages with L2 pseudo-length,
1457 * so we pass it also downlink SACCH (SI5/SI6 and related) */
1458 call_dissector(gsm_a_ccch_handle
, next_tvb
, pinfo
, top_tree
);
1460 else if (type
== L3_INF_SACCH
)
1462 /* L3 PDUs carried on SACCH are normal format or are RR Short PD format */
1463 proto_tree_add_item(ie_tree
, hf_rsl_llsdu_sacch
, tvb
, offset
, length
, ENC_NA
);
1464 next_tvb
= tvb_new_subset_length(tvb
, offset
, length
);
1465 call_dissector(gsm_a_sacch_handle
, next_tvb
, pinfo
, top_tree
);
1469 /* Link Layer Service Data Unit (i.e. a layer 3 message
1470 * as defined in 3GPP TS 24.008 or 3GPP TS 44.018)
1472 proto_tree_add_item(ie_tree
, hf_rsl_llsdu
, tvb
, offset
, length
, ENC_NA
);
1473 next_tvb
= tvb_new_subset_length(tvb
, offset
, length
);
1474 call_dissector(gsm_a_dtap_handle
, next_tvb
, pinfo
, top_tree
);
1477 offset
= offset
+ length
;
1483 * 9.3.12 MS Identity
1486 dissect_rsl_ie_ms_id(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, int offset
, bool is_mandatory
)
1489 proto_tree
*ie_tree
;
1493 if (is_mandatory
== false) {
1494 ie_id
= tvb_get_uint8(tvb
, offset
);
1495 if (ie_id
!= RSL_IE_MS_ID
)
1498 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_ms_id
, &ti
, "MS Identity IE");
1500 /* Element identifier */
1501 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1504 length
= tvb_get_uint8(tvb
, offset
);
1505 proto_item_set_len(ti
, length
+2);
1506 proto_tree_add_item(ie_tree
, hf_rsl_ie_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1509 de_mid(tvb
, ie_tree
, pinfo
, offset
, length
, NULL
, 0);
1511 offset
= offset
+ length
;
1521 dissect_rsl_ie_ms_pow(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
1523 proto_tree
*ie_tree
;
1526 if (is_mandatory
== false) {
1527 ie_id
= tvb_get_uint8(tvb
, offset
);
1528 if (ie_id
!= RSL_IE_MS_POW
)
1532 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 2, ett_ie_ms_pow
, NULL
, "MS Power IE");
1534 /* Element identifier */
1535 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1538 /* MS power level */
1539 proto_tree_add_item(ie_tree
, hf_rsl_ms_power_lev
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1541 proto_tree_add_item(ie_tree
, hf_rsl_ms_fpc
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1549 * 9.3.14 Paging Group M TV 2 2
1552 dissect_rsl_ie_paging_grp(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
1554 proto_tree
*ie_tree
;
1557 if (is_mandatory
== false) {
1558 ie_id
= tvb_get_uint8(tvb
, offset
);
1559 if (ie_id
!= RSL_IE_PAGING_GRP
)
1562 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 2, ett_ie_paging_grp
, NULL
, "Paging Group IE");
1564 /* Element identifier */
1565 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1568 /* The Paging Group field (octet 2) contains the binary representation of the paging
1569 * group as defined in 3GPP TS 45.002.
1571 proto_tree_add_item(ie_tree
, hf_rsl_paging_grp
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1579 * 9.3.15 Paging Load
1582 dissect_rsl_ie_paging_load(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
1584 proto_tree
*ie_tree
;
1587 if (is_mandatory
== false) {
1588 ie_id
= tvb_get_uint8(tvb
, offset
);
1589 if (ie_id
!= RSL_IE_PAGING_LOAD
)
1592 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 3, ett_ie_paging_load
, NULL
, "Paging Load IE");
1594 /* Element identifier */
1595 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1599 * Paging Buffer Space.
1601 proto_tree_add_item(ie_tree
, hf_rsl_paging_load
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1602 offset
= offset
+ 2;
1608 /* Physical Context dissection *
1613 dissect_rsl_phy_ctx_rx_lvl_ext(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
)
1615 proto_tree
*rxlvl_ext_tree
;
1619 rxlvl_ext_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_phy_ctx_rxlvl_ext
, &ti
, "RxLevel Rxt (called in Pre-processed Measurements)");
1621 /* Phy Ctx Element Identifier */
1622 proto_tree_add_item(rxlvl_ext_tree
, hf_rsl_phy_ctx_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1625 length
= tvb_get_uint8(tvb
, offset
);
1626 proto_item_set_len(ti
, length
+ 2);
1627 proto_tree_add_item(rxlvl_ext_tree
, hf_rsl_ie_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1630 proto_tree_add_item(rxlvl_ext_tree
, hf_rsl_phy_ctx_rx_lvl_ext
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1635 /* Physical Context dissection*
1636 * AB RxLevel&ErrBits *
1640 dissect_rsl_phy_ctx_ab_rx_lvl_err_bits(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
)
1642 proto_tree
*ab_tree
;
1646 ab_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_phy_ctx_ab_rx_lvl_err_bits
, &ti
, "AB RxLevel&ErrBits IE");
1648 /* Phy Ctx Element Identifier */
1649 proto_tree_add_item(ab_tree
, hf_rsl_phy_ctx_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1652 length
= tvb_get_uint8(tvb
, offset
);
1653 proto_item_set_len(ti
, length
+ 2);
1654 proto_tree_add_item(ab_tree
, hf_rsl_ie_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1657 proto_tree_add_item(ab_tree
, hf_rsl_phy_ctx_ab_rx_lvl
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1659 /* Traning Err Bits */
1660 proto_tree_add_item(ab_tree
, hf_rsl_phy_ctx_ab_err_bits
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1664 /* Physcial Context dissection*
1669 dissect_rsl_phy_ctx_ext_rand_access(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
)
1671 proto_tree
*ext_rand_access_tree
;
1675 ext_rand_access_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_phy_ctx_ie_ext_rand_access
, &ti
, "Ext RandAccess IE");
1676 /* Phy Ctx Element identifier */
1677 proto_tree_add_item(ext_rand_access_tree
, hf_rsl_phy_ctx_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1680 length
= tvb_get_uint8(tvb
, offset
);
1681 proto_item_set_len(ti
, length
+2);
1682 proto_tree_add_item(ext_rand_access_tree
, hf_rsl_ie_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1685 proto_tree_add_item(ext_rand_access_tree
, hf_rsl_phy_ctx_ext_rand_access
, tvb
, offset
, length
, ENC_NA
);
1686 offset
= offset
+ length
;
1689 /* Physical Context IE dissection
1693 dissect_phy_ctx_ie(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint8_t length
)
1695 proto_tree
*phy_ctx_tree
;
1696 uint8_t phy_ctx_ie_type
;
1698 phy_ctx_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, length
, ett_phy_ctx_ie
, NULL
, "Physical Context dissection");
1699 phy_ctx_ie_type
= tvb_get_uint8(tvb
, offset
);
1701 switch (phy_ctx_ie_type
) {
1702 /* Ext RandAccess */
1703 case RSL_PHY_CTX_IE_EXT_RAND_ACCES
:
1704 /* Ext RandAccess */
1705 offset
= dissect_rsl_phy_ctx_ext_rand_access(tvb
, pinfo
, phy_ctx_tree
, offset
);
1707 offset
= dissect_rsl_phy_ctx_ab_rx_lvl_err_bits(tvb
, pinfo
, phy_ctx_tree
, offset
);
1709 offset
= dissect_rsl_phy_ctx_rx_lvl_ext(tvb
, pinfo
, phy_ctx_tree
, offset
);
1711 /* AB RxLevel&ErrBits */
1712 case RSL_PHY_CTX_IE_AB_RX_LEVEL_ERR_BITS
:
1714 offset
= dissect_rsl_phy_ctx_ab_rx_lvl_err_bits(tvb
, pinfo
, phy_ctx_tree
, offset
);
1716 offset
= dissect_rsl_phy_ctx_rx_lvl_ext(tvb
, pinfo
, phy_ctx_tree
, offset
);
1719 case RSL_PHY_CTX_IE_RX_LEVEL_EXT
:
1721 offset
= dissect_rsl_phy_ctx_rx_lvl_ext(tvb
, pinfo
, phy_ctx_tree
, offset
);
1731 * 9.3.16 Physical Context TLV
1734 dissect_rsl_ie_phy_ctx(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
1737 proto_tree
*ie_tree
;
1741 if (is_mandatory
== false) {
1742 ie_id
= tvb_get_uint8(tvb
, offset
);
1743 if (ie_id
!= RSL_IE_PHY_CTX
)
1747 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_phy_ctx
, &ti
, "Physical Context IE ");
1749 /* Element identifier */
1750 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1753 length
= tvb_get_uint8(tvb
, offset
);
1754 proto_item_set_len(ti
, length
+2);
1755 proto_tree_add_item(ie_tree
, hf_rsl_ie_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1759 * Physical Context Information:
1760 * The Physical Context Information field is not specified.
1761 * This information should not be analysed by BSC, but merely
1762 * forwarded from one TRX/channel to another.
1764 if(global_rsl_dissect_phy_ctx_inf
){
1765 offset
= dissect_phy_ctx_ie(tvb
, pinfo
, ie_tree
, offset
, length
);
1767 proto_tree_add_item(ie_tree
, hf_rsl_phy_ctx
, tvb
, offset
, length
, ENC_NA
);
1768 offset
= offset
+ length
;
1774 * 9.3.17 Access Delay M TV 2
1777 dissect_rsl_ie_access_delay(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
1779 proto_tree
*ie_tree
;
1782 if (is_mandatory
== false) {
1783 ie_id
= tvb_get_uint8(tvb
, offset
);
1784 if (ie_id
!= RSL_IE_ACCESS_DELAY
)
1788 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 2, ett_ie_access_delay
, NULL
, "Access Delay IE ");
1790 /* Element identifier */
1791 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1793 proto_tree_add_item(ie_tree
, hf_rsl_acc_delay
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1803 dissect_rsl_ie_rach_load(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
1806 proto_tree
*ie_tree
;
1811 if (is_mandatory
== false) {
1812 ie_id
= tvb_get_uint8(tvb
, offset
);
1813 if (ie_id
!= RSL_IE_RACH_LOAD
)
1817 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_rach_load
, &ti
, "RACH Load IE ");
1819 /* Element identifier */
1820 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1823 length
= tvb_get_uint8(tvb
, offset
);
1824 proto_item_set_len(ti
, length
+2);
1825 proto_tree_add_item(ie_tree
, hf_rsl_ie_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1830 * This element is used to carry information on the load of the RACH (Random Access Channel)
1831 * associated with this CCCH timeslot. It is of variable length.
1833 /* RACH Slot Count */
1834 proto_tree_add_item(ie_tree
, hf_rsl_rach_slot_cnt
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1837 /* RACH Busy Count */
1838 proto_tree_add_item(ie_tree
, hf_rsl_rach_busy_cnt
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1842 /* RACH Access Count */
1843 proto_tree_add_item(ie_tree
, hf_rsl_rach_acc_cnt
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1847 /* Supplementary Information */
1849 proto_tree_add_item(ie_tree
, hf_rsl_rach_supplementary_information
, tvb
, offset
, length
, ENC_NA
);
1851 offset
= ie_offset
+ length
;
1857 * 9.3.19 Request Reference M TV 4
1860 dissect_rsl_ie_req_ref(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
1862 proto_tree
*ie_tree
, *ra_tree
;
1867 if (is_mandatory
== false) {
1868 ie_id
= tvb_get_uint8(tvb
, offset
);
1869 if (ie_id
!= RSL_IE_REQ_REF
)
1873 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 4, ett_ie_req_ref
, NULL
, "Request Reference IE ");
1875 /* Element identifier */
1876 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1878 ti
= proto_tree_add_item(ie_tree
, hf_rsl_req_ref_ra
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1879 ra_tree
= proto_item_add_subtree(ti
, ett_ie_req_ref_ra
);
1880 proto_tree_add_item(ra_tree
, hf_rsl_req_ref_ra_est_cause
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1882 rfn
= parse_reduced_frame_number(tvb
, offset
);
1883 proto_tree_add_item(ie_tree
, hf_rsl_req_ref_T1prim
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1884 proto_tree_add_item(ie_tree
, hf_rsl_req_ref_T3
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1886 proto_tree_add_item(ie_tree
, hf_rsl_req_ref_T2
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1888 ti
= proto_tree_add_uint(ie_tree
, hf_rsl_req_ref_rfn
, tvb
, offset
- 2, 2, rfn
);
1889 proto_item_set_generated(ti
);
1893 static const value_string rel_mode_vals
[] = {
1894 { 0x00, "Normal Release" },
1895 { 0x01, "Local End Release" },
1900 * 9.3.20 Release Mode 9.3.20 M TV 2
1903 dissect_rsl_ie_rel_mode(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
1905 proto_tree
*ie_tree
;
1908 if (is_mandatory
== false) {
1909 ie_id
= tvb_get_uint8(tvb
, offset
);
1910 if (ie_id
!= RSL_IE_REL_MODE
)
1914 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 2, ett_ie_rel_mode
, NULL
, "Release Mode IE ");
1916 /* Element identifier */
1917 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1920 /* The M bit is coded as follows:
1922 * 1 local end release
1924 proto_tree_add_item(ie_tree
, hf_rsl_rel_mode
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1930 static const value_string rsl_rlm_cause_vals
[] = {
1931 { 0x00, "reserved" },
1932 { 0x01, "timer T200 expired (N200+1) times" },
1933 { 0x02, "re-establishment request" },
1934 { 0x03, "unsolicited UA response" },
1935 { 0x04, "unsolicited DM response" },
1936 { 0x05, "unsolicited DM response, multiple frame established state" },
1937 { 0x06, "unsolicited supervisory response" },
1938 { 0x07, "sequence error" },
1939 { 0x08, "U-frame with incorrect parameters" },
1940 { 0x09, "S-frame with incorrect parameters" },
1941 { 0x0a, "I-frame with incorrect use of M bit" },
1942 { 0x0b, "I-frame with incorrect length" },
1943 { 0x0c, "frame not implemented" },
1944 { 0x0d, "SABM command, multiple frame established state" },
1945 { 0x0e, "SABM frame with information not allowed in this state" },
1948 static value_string_ext rsl_rlm_cause_vals_ext
= VALUE_STRING_EXT_INIT(rsl_rlm_cause_vals
);
1951 * 9.3.21 Resource Information
1954 dissect_rsl_ie_resource_inf(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
1957 proto_tree
*ie_tree
;
1962 if (is_mandatory
== false) {
1963 ie_id
= tvb_get_uint8(tvb
, offset
);
1964 if (ie_id
!= RSL_IE_RESOURCE_INF
)
1968 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_resource_inf
, &ti
, "Resource Information IE");
1970 /* Element identifier */
1971 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1975 length
= tvb_get_uint8(tvb
, offset
);
1976 proto_item_set_len(ti
, length
+2);
1978 proto_tree_add_item(ie_tree
, hf_rsl_ie_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1983 while (length
> 0) {
1984 proto_tree_add_item(ie_tree
, hf_rsl_ch_no_Cbits
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1985 /* TN is time slot number, binary represented as in 3GPP TS 45.002.
1988 proto_tree_add_item(ie_tree
, hf_rsl_ch_no_TN
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1991 /* Interference level (1) */
1993 proto_tree_add_item(ie_tree
, hf_rsl_interf_band
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1994 /* Interf Band reserved bits */
1995 proto_tree_add_item(ie_tree
, hf_rsl_interf_band_reserved
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1997 length
= length
- 2;
1999 return ie_offset
+ length
;
2003 * 9.3.22 RLM Cause 9.3.22 M TLV 2-4
2006 dissect_rsl_ie_rlm_cause(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
2009 proto_tree
*ie_tree
;
2012 /* uint8_t octet; */
2015 if (is_mandatory
== false) {
2016 ie_id
= tvb_get_uint8(tvb
, offset
);
2017 if (ie_id
!= RSL_IE_RLM_CAUSE
)
2021 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_rlm_cause
, &ti
, "RLM Cause IE ");
2023 /* Element identifier */
2024 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2027 length
= tvb_get_uint8(tvb
, offset
);
2028 proto_item_set_len(ti
, length
+2);
2030 proto_tree_add_item(ie_tree
, hf_rsl_ie_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2036 /* The Cause Value is a one octet field if the extension bit is set to 0.
2037 * If the extension bit is set to 1, the Cause Value is a two octet field.
2039 /* XXX: Code doesn't reflect the comment above ?? */
2040 /* octet = tvb_get_uint8(tvb, offset); */
2041 proto_tree_add_item(tree
, hf_rsl_extension_bit
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2042 proto_tree_add_item(ie_tree
, hf_rsl_cause
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2049 * 9.3.23 Starting Time
2052 dissect_rsl_ie_starting_time(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
2054 proto_tree
*ie_tree
;
2057 if (is_mandatory
== false) {
2058 ie_id
= tvb_get_uint8(tvb
, offset
);
2059 if (ie_id
!= RSL_IE_STARTING_TIME
)
2063 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 3, ett_ie_staring_time
, NULL
, "Starting Time IE");
2065 /* Element identifier */
2066 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2069 proto_tree_add_item(ie_tree
, hf_rsl_req_ref_T1prim
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2070 proto_tree_add_item(ie_tree
, hf_rsl_req_ref_T3
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2072 proto_tree_add_item(ie_tree
, hf_rsl_req_ref_T2
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2079 * 9.3.24 Timing Advance
2082 dissect_rsl_ie_timing_adv(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
2084 proto_tree
*ie_tree
;
2087 if (is_mandatory
== false) {
2088 ie_id
= tvb_get_uint8(tvb
, offset
);
2089 if (ie_id
!= RSL_IE_TIMING_ADV
)
2093 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 2, ett_ie_timing_adv
, NULL
, "Timing Advance IE");
2095 /* Element identifier */
2096 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2099 proto_tree_add_item(ie_tree
, hf_rsl_timing_adv
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2106 * 9.3.25 Uplink Measurements
2108 static const true_false_string rsl_dtxd_vals
= {
2114 dissect_rsl_ie_uplik_meas(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
2117 proto_tree
*ie_tree
;
2122 if (is_mandatory
== false) {
2123 ie_id
= tvb_get_uint8(tvb
, offset
);
2124 if (ie_id
!= RSL_IE_UPLINK_MEAS
)
2128 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_uplink_meas
, &ti
, "Uplink Measurements IE");
2130 /* Element identifier */
2131 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2135 length
= tvb_get_uint8(tvb
, offset
);
2136 proto_item_set_len(ti
, length
+2);
2138 proto_tree_add_item(ie_tree
, hf_rsl_ie_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2144 * rfu DTXd | RXLEV.FULL.up
2146 proto_tree_add_item(ie_tree
, hf_rsl_dtxd
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2147 proto_tree_add_item(ie_tree
, hf_rsl_rxlev_full_up
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2152 * Reserved | RXLEV.SUB.up 4
2154 proto_tree_add_item(ie_tree
, hf_rsl_rxlev_sub_up
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2158 * Reserved | RXQUAL.FULL.up | RXQUAL.SUB.up
2160 proto_tree_add_item(ie_tree
, hf_rsl_rxqual_full_up
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2161 proto_tree_add_item(ie_tree
, hf_rsl_rxqual_sub_up
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2164 * Supplementary Measurement Information
2166 return ie_offset
+length
;
2172 static const value_string rsl_class_vals
[] = {
2173 { 0x00, "Normal event" },
2174 { 0x01, "Normal event" },
2175 { 0x02, "Resource unavailable" },
2176 { 0x03, "Service or option not available" },
2177 { 0x04, "Service or option not implemented" },
2178 { 0x05, "Invalid message (e.g. parameter out of range)" },
2179 { 0x06, "Protocol error" },
2180 { 0x07, "Interworking" },
2184 static const value_string rsl_cause_value_vals
[] = {
2185 { 0x00, "radio interface failure" },
2186 { 0x01, "radio link failure" },
2187 { 0x02, "handover access failure" },
2188 /* 0x03..0x06: "reserved for international use" */
2189 { 0x07, "O&M intervention" },
2190 /* 0x08..0x0e: "reserved for international use" */
2191 { 0x0f, "normal event, unspecified" },
2192 /* 0x10..0x17: "reserved for international use" */
2193 /* 0x18..0x1f: "reserved for national use" */
2194 { 0x20, "equipment failure" },
2195 { 0x21, "radio resource not available" },
2196 { 0x22, "terrestrial channel failure" },
2197 { 0x23, "CCCH overload" },
2198 { 0x24, "ACCH overload" },
2199 { 0x25, "processor overload" },
2200 /* 0x26: "reserved for international use" */
2201 { 0x27, "BTS not equipped" },
2202 { 0x28, "remote transcoder issue" },
2203 /* 0x29..0x2b: "reserved for international use" */
2204 /* 0x2c..0x2e: "reserved for national use" */
2205 { 0x2f, "resource not available, unspecified" },
2206 { 0x30, "requested transcoding/rate adaption not available" },
2207 /* 0x31..0x37: "reserved for international use" */
2208 /* 0x38..0x3e: "reserved for national use" */
2209 { 0x3f, "service or option not implemented, unspecified" },
2210 { 0x40, "encryption algorithm not implemented" },
2211 /* 0x41..0x47: "reserved for international use" */
2212 /* 0x48..0x4e: "reserved for national use" */
2213 { 0x4f, "service or option not implemented, unspecified" },
2214 { 0x50, "radio channel already activated/allocated" },
2215 /* 0x51..0x57: "reserved for international use" */
2216 /* 0x58..0x5e: "reserved for national use" */
2217 { 0x5f, "invalid message, unspecified" },
2218 { 0x60, "message discriminator error" },
2219 { 0x61, "message type error" },
2220 { 0x62, "message sequence error" },
2221 { 0x63, "general information element error" },
2222 { 0x64, "mandatory information element error" },
2223 { 0x65, "optional information element error" },
2224 { 0x66, "information element non-existent" },
2225 { 0x67, "information element length error" },
2226 { 0x68, "invalid information element contents" },
2227 /* 0x69..0x6b: "reserved for international use" */
2228 /* 0x6c..0x6e: "reserved for national use" */
2229 { 0x6f, "protocol error, unspecified" },
2230 /* 0x70..0x77: "reserved for international use" */
2231 /* 0x78..0x7e: "reserved for international use" */
2232 { 0x7f, "interworking, unspecified" },
2235 static value_string_ext rsl_cause_value_vals_ext
= VALUE_STRING_EXT_INIT(rsl_cause_value_vals
);
2238 dissect_rsl_ie_cause(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
2241 proto_tree
*ie_tree
;
2247 if (is_mandatory
== false) {
2248 ie_id
= tvb_get_uint8(tvb
, offset
);
2249 if (ie_id
!= RSL_IE_CAUSE
)
2253 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_cause
, &ti
, "Cause IE");
2255 /* Element identifier */
2256 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2259 length
= tvb_get_uint8(tvb
, offset
);
2260 proto_item_set_len(ti
, length
+2);
2261 proto_tree_add_item(ie_tree
, hf_rsl_ie_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2266 octet
= tvb_get_uint8(tvb
, offset
);
2267 proto_tree_add_item(ie_tree
, hf_rsl_extension_bit
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2268 proto_tree_add_item(ie_tree
, hf_rsl_class
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2269 if ((octet
& 0x80) != 0x80) {
2270 proto_tree_add_item(ie_tree
, hf_rsl_cause_value
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2272 /* TODO: Cause Extension*/
2277 /* TODO: Diagnostic(s) if any */
2278 return ie_offset
+length
;
2281 * 9.3.27 Measurement result number
2285 dissect_rsl_ie_meas_res_no(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
2287 proto_tree
*ie_tree
;
2290 if (is_mandatory
== false) {
2291 ie_id
= tvb_get_uint8(tvb
, offset
);
2292 if (ie_id
!= RSL_IE_MEAS_RES_NO
)
2296 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 2, ett_ie_meas_res_no
, NULL
, "Measurement result number IE");
2298 /* Element identifier */
2299 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2302 /* Measurement result number */
2303 proto_tree_add_item(ie_tree
, hf_rsl_meas_res_no
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2309 * 9.3.28 Message Identifier
2312 dissect_rsl_ie_message_id(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
2314 proto_tree
*ie_tree
;
2317 if (is_mandatory
== false) {
2318 ie_id
= tvb_get_uint8(tvb
, offset
);
2319 if (ie_id
!= RSL_IE_MESSAGE_ID
)
2323 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 2, ett_ie_message_id
, NULL
, "Message Identifier IE");
2325 /* Element identifier */
2326 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2329 proto_tree_add_item(ie_tree
, hf_rsl_msg_type
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2334 * 9.3.30 System Info Type
2336 static const value_string rsl_sys_info_type_vals
[] = {
2337 { 0x00, "SYSTEM INFORMATION 8" },
2338 { 0x01, "SYSTEM INFORMATION 1" },
2339 { 0x02, "SYSTEM INFORMATION 2" },
2340 { 0x03, "SYSTEM INFORMATION 3" },
2341 { 0x04, "SYSTEM INFORMATION 4" },
2342 { 0x05, "SYSTEM INFORMATION 5" },
2343 { 0x06, "SYSTEM INFORMATION 6" },
2344 { 0x07, "SYSTEM INFORMATION 7" },
2345 { 0x08, "SYSTEM INFORMATION 16" },
2346 { 0x09, "SYSTEM INFORMATION 17" },
2347 { 0x0a, "SYSTEM INFORMATION 2bis" },
2348 { 0x0b, "SYSTEM INFORMATION 2ter" },
2349 { 0x0d, "SYSTEM INFORMATION 5bis" },
2350 { 0x0e, "SYSTEM INFORMATION 5ter" },
2351 { 0x0f, "SYSTEM INFORMATION 10" },
2352 { 0x28, "SYSTEM INFORMATION 13" },
2353 { 0x29, "SYSTEM INFORMATION 2quater" },
2354 { 0x2a, "SYSTEM INFORMATION 9" },
2355 { 0x2b, "SYSTEM INFORMATION 18" },
2356 { 0x2c, "SYSTEM INFORMATION 19" },
2357 { 0x2d, "SYSTEM INFORMATION 20" },
2358 { 0x47, "EXTENDED MEASUREMENT ORDER" },
2359 { 0x48, "MEASUREMENT INFORMATION" },
2362 static value_string_ext rsl_sys_info_type_vals_ext
= VALUE_STRING_EXT_INIT(rsl_sys_info_type_vals
);
2366 dissect_rsl_ie_sys_info_type(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
,
2367 bool is_mandatory
, uint8_t *sys_info_type
)
2369 proto_tree
*ie_tree
;
2372 if (is_mandatory
== false) {
2373 ie_id
= tvb_get_uint8(tvb
, offset
);
2374 if (ie_id
!= RSL_IE_SYS_INFO_TYPE
) {
2375 *sys_info_type
= 0xff;
2380 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 2, ett_ie_sys_info_type
, NULL
, "System Info Type IE");
2382 /* Element identifier */
2383 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2386 *sys_info_type
= tvb_get_uint8(tvb
, offset
);
2387 proto_tree_add_item(tree
, hf_rsl_sys_info_type
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2394 * 9.3.31 MS Power Parameters
2397 dissect_rsl_ie_ms_pow_params(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
2400 proto_tree
*ie_tree
;
2405 if (is_mandatory
== false) {
2406 ie_id
= tvb_get_uint8(tvb
, offset
);
2407 if (ie_id
!= RSL_IE_MS_POWER_PARAM
)
2411 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_ms_pow_params
, &ti
, "MS Power Parameters IE");
2413 /* Element identifier */
2414 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2417 length
= tvb_get_uint8(tvb
, offset
);
2418 proto_item_set_len(ti
, length
+2);
2419 proto_tree_add_item(ie_tree
, hf_rsl_ie_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2422 return offset
+length
;
2426 * 9.3.32 BS Power Parameters
2429 dissect_rsl_ie_bs_power_params(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
2432 proto_tree
*ie_tree
;
2437 if (is_mandatory
== false) {
2438 ie_id
= tvb_get_uint8(tvb
, offset
);
2439 if (ie_id
!= RSL_IE_BS_POWER_PARAM
)
2443 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_bs_power_params
, &ti
, "BS Power Parameters IE");
2445 /* Element identifier */
2446 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2449 length
= tvb_get_uint8(tvb
, offset
);
2450 proto_item_set_len(ti
, length
+2);
2451 proto_tree_add_item(ie_tree
, hf_rsl_ie_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2454 return offset
+length
;
2458 * 9.3.35 Full Immediate Assign Info TLV 25
2461 dissect_rsl_ie_full_imm_ass_inf(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, int offset
, bool is_mandatory
)
2464 proto_tree
*ie_tree
;
2470 if (is_mandatory
== false) {
2471 ie_id
= tvb_get_uint8(tvb
, offset
);
2472 if (ie_id
!= RSL_IE_FULL_IMM_ASS_INF
)
2476 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_full_imm_ass_inf
, &ti
, "Full Immediate Assign Info IE ");
2478 /* Element identifier */
2479 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2482 length
= tvb_get_uint8(tvb
, offset
);
2483 proto_item_set_len(ti
, length
+2);
2485 proto_tree_add_item(ie_tree
, hf_rsl_ie_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2487 /* The Full Immediate Assign Info field (octets 3-25)
2488 * contains a complete immediate assign message (IMMEDIATE ASSIGNMENT or
2489 * IMMEDIATE ASSIGNMENT EXTENDED or IMMEDIATE ASSIGNMENT REJECT)
2490 * as defined in 3GPP TS 44.018.
2492 proto_tree_add_item(ie_tree
, hf_rsl_full_immediate_assign_info_field
, tvb
, offset
, length
, ENC_NA
);
2493 next_tvb
= tvb_new_subset_length(tvb
, offset
, length
);
2494 call_dissector(gsm_a_ccch_handle
, next_tvb
, pinfo
, top_tree
);
2496 offset
= offset
+ length
;
2502 * 9.3.36 SMSCB Information
2504 * This element is used to convey a complete frame to be broadcast on the CBCH
2505 * including the Layer 2 header for the radio path.
2508 dissect_rsl_ie_smscb_inf(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
2511 proto_tree
*ie_tree
;
2517 if (is_mandatory
== false) {
2518 ie_id
= tvb_get_uint8(tvb
, offset
);
2519 if (ie_id
!= RSL_IE_SMSCB_INF
)
2523 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_smscb_inf
, &ti
, "SMSCB Information IE ");
2525 /* Element identifier */
2526 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2529 length
= tvb_get_uint8(tvb
, offset
);
2530 proto_item_set_len(ti
, length
+2);
2532 proto_tree_add_item(ie_tree
, hf_rsl_ie_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2537 next_tvb
= tvb_new_subset_length(tvb
, offset
, length
);
2538 call_dissector(gsm_cbch_handle
, next_tvb
, pinfo
, top_tree
);
2540 offset
= offset
+ length
;
2546 * 9.3.37 MS Timing Offset
2550 dissect_rsl_ie_ms_timing_offset(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
2552 proto_tree
*ie_tree
;
2555 if (is_mandatory
== false) {
2556 ie_id
= tvb_get_uint8(tvb
, offset
);
2557 if (ie_id
!= RSL_IE_FULL_MS_TIMING_OFFSET
)
2561 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 2, ett_ie_ms_timing_offset
, NULL
, "MS Timing Offset IE");
2563 /* Element identifier */
2564 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2568 * The meaning of the MS Timing Offset is as defined in 3GPP TS 45.010.
2569 * The value of MS Timing Offset is the binary value of the 8-bit Timing Offset field (octet 2) - 63.
2570 * The range of MS Timing Offset is therefore -63 to 192.
2572 proto_tree_add_item(ie_tree
, hf_rsl_timing_offset
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2579 * 9.3.38 Erroneous Message
2580 * This information element is used to carry a complete A-bis interface message
2581 * which was considered erroneous at reception.
2584 // NOLINTNEXTLINE(misc-no-recursion)
2585 dissect_rsl_ie_err_msg(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, int offset
, bool is_mandatory
)
2588 proto_tree
*ie_tree
;
2592 if (is_mandatory
== false) {
2593 ie_id
= tvb_get_uint8(tvb
, offset
);
2594 if (ie_id
!= RSL_IE_ERR_MSG
)
2598 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_err_msg
, &ti
, "Erroneous Message IE ");
2600 /* Element identifier */
2601 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2604 length
= tvb_get_uint8(tvb
, offset
);
2605 proto_item_set_len(ti
, length
+2);
2607 proto_tree_add_item(ie_tree
, hf_rsl_ie_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2610 /* Received Message */
2611 offset
= dissct_rsl_msg(tvb
, pinfo
, ie_tree
, offset
);
2617 * 9.3.39 Full BCCH Information (message name)
2620 dissect_rsl_ie_full_bcch_inf(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
2623 proto_tree
*ie_tree
;
2628 if (is_mandatory
== false) {
2629 ie_id
= tvb_get_uint8(tvb
, offset
);
2630 if (ie_id
!= RSL_IE_FULL_BCCH_INF
)
2634 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_full_bcch_inf
, &ti
, "Full BCCH Information IE");
2636 /* Element identifier */
2637 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2640 length
= tvb_get_uint8(tvb
, offset
);
2641 proto_item_set_len(ti
, length
+2);
2642 proto_tree_add_item(ie_tree
, hf_rsl_ie_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2646 * Octets 3-25 contain the complete L3 message as defined in 3GPP TS 44.018.
2649 proto_tree_add_item(ie_tree
, hf_rsl_layer_3_message
, tvb
, offset
, length
, ENC_NA
);
2650 next_tvb
= tvb_new_subset_length(tvb
, offset
, length
);
2651 call_dissector(gsm_a_ccch_handle
, next_tvb
, pinfo
, top_tree
);
2653 offset
= offset
+ length
;
2659 * 9.3.40 Channel Needed
2661 static const value_string rsl_ch_needed_vals
[] = {
2662 { 0x00, "Any Channel" },
2664 { 0x02, "TCH/F (Full rate)" },
2665 { 0x03, "TCH/F or TCH/H (Dual rate)" },
2670 dissect_rsl_ie_ch_needed(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
2672 proto_tree
*ie_tree
;
2675 if (is_mandatory
== false) {
2676 ie_id
= tvb_get_uint8(tvb
, offset
);
2677 if (ie_id
!= RSL_IE_CH_NEEDED
)
2682 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_ch_needed
, NULL
, "Channel Needed IE");
2684 /* Element identifier */
2685 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2689 proto_tree_add_item(ie_tree
, hf_rsl_ch_needed
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2695 * 9.3.41 CB Command type
2698 dissect_rsl_ie_cb_cmd_type(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
2700 proto_tree
*ie_tree
;
2703 if (is_mandatory
== false) {
2704 ie_id
= tvb_get_uint8(tvb
, offset
);
2705 if (ie_id
!= RSL_IE_CB_CMD_TYPE
)
2709 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_cb_cmd_type
, NULL
, "CB Command type IE");
2711 /* Element identifier */
2712 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2715 proto_tree_add_item(ie_tree
, hf_rsl_cb_cmd_type
, tvb
, offset
, 1, ENC_NA
);
2716 proto_tree_add_item(ie_tree
, hf_rsl_cb_def_bcast
, tvb
, offset
, 1, ENC_NA
);
2717 proto_tree_add_item(ie_tree
, hf_rsl_cb_last_block
, tvb
, offset
, 1, ENC_NA
);
2724 * 9.3.42 SMSCB Message
2727 dissect_rsl_ie_smscb_mess(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
2730 proto_tree
*ie_tree
;
2736 if (is_mandatory
== false) {
2737 ie_id
= tvb_get_uint8(tvb
, offset
);
2738 if (ie_id
!= RSL_IE_SMSCB_MESS
)
2741 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_smscb_mess
, &ti
, "SMSCB Message IE");
2743 /* Element identifier */
2744 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2747 length
= tvb_get_uint8(tvb
, offset
);
2748 proto_item_set_len(ti
, length
+2);
2749 proto_tree_add_item(ie_tree
, hf_rsl_ie_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2757 next_tvb
= tvb_new_subset_length(tvb
, offset
, length
);
2758 call_dissector(gsm_cbs_handle
, next_tvb
, pinfo
, top_tree
);
2760 offset
= ie_offset
+ length
;
2766 dissect_rsl_ie_etws_pn(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
)
2769 proto_tree
*ie_tree
;
2773 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_smscb_mess
, &ti
, "SMSCB Message IE");
2775 /* Element identifier */
2776 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2779 length
= tvb_get_uint8(tvb
, offset
);
2780 proto_item_set_len(ti
, length
+2);
2781 proto_tree_add_item(ie_tree
, hf_rsl_ie_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2786 * ETWS Primary Notification
2789 proto_tree_add_item(ie_tree
, hf_rsl_etws_pn
, tvb
, offset
, length
, ENC_NA
);
2791 offset
= ie_offset
+ length
;
2797 * 9.3.43 CBCH Load Information
2800 static const true_false_string rsl_cbch_load_type_vals
= {
2806 dissect_rsl_ie_cbch_load_inf(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
2809 proto_tree
*ie_tree
;
2813 if (is_mandatory
== false) {
2814 ie_id
= tvb_get_uint8(tvb
, offset
);
2815 if (ie_id
!= RSL_IE_CBCH_LOAD_INF
)
2819 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_cbch_load_inf
, NULL
, "CBCH Load Information IE");
2821 /* Element identifier */
2822 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2825 octet
= tvb_get_uint8(tvb
, offset
);
2826 /* CBCH Load Type */
2827 proto_tree_add_item(ie_tree
, hf_rsl_cbch_load_type
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2829 /* Message Slot Count */
2830 item
= proto_tree_add_item(ie_tree
, hf_rsl_msg_slt_cnt
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2831 if ((octet
& 0x80) == 0x80) {
2832 proto_item_append_text(item
, "The amount of SMSCB messages (1 to 15) that are needed immediately by BTS");
2834 proto_item_append_text(item
, "The amount of delay in message slots (1 to 15) that is needed immediately by BTS");
2842 * 9.3.44 SMSCB Channel Indicator
2845 static const value_string rsl_ch_ind_vals
[] = {
2846 { 0x00, "Basic CBCH" },
2847 { 0x01, "Extended CBCH (supporting the extended CBCH by the network or MSs is optional)" },
2852 dissect_rsl_ie_smscb_ch_ind(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
2854 proto_tree
*ie_tree
;
2857 if (is_mandatory
== false) {
2858 ie_id
= tvb_get_uint8(tvb
, offset
);
2859 if (ie_id
!= RSL_IE_SMSCB_CH_IND
)
2863 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_smscb_ch_ind
, NULL
, "SMSCB Channel Indicator IE");
2865 /* Element identifier */
2866 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2870 proto_tree_add_item(ie_tree
, hf_rsl_ch_ind
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2877 * 9.3.45 Group call reference
2880 dissect_rsl_ie_grp_call_ref(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, int offset
, bool is_mandatory
)
2883 proto_tree
*ie_tree
;
2887 if (is_mandatory
== false) {
2888 ie_id
= tvb_get_uint8(tvb
, offset
);
2889 if (ie_id
!= RSL_IE_GRP_CALL_REF
)
2892 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_grp_call_ref
, &ti
, "Group call reference IE");
2894 /* Element identifier */
2895 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2898 length
= tvb_get_uint8(tvb
, offset
);
2899 proto_item_set_len(ti
, length
+2);
2900 proto_tree_add_item(ie_tree
, hf_rsl_ie_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2903 proto_tree_add_item(ie_tree
, hf_rsl_descriptive_group_or_broadcast_call_reference
, tvb
, offset
, length
, ENC_NA
);
2905 /* The octets 3 to 7 are coded in the same way as the octets 2 to 6
2906 * in the Descriptive group or broadcast call reference
2907 * information element as defined in 3GPP TS 24.008.
2909 de_d_gb_call_ref(tvb
, ie_tree
, pinfo
, offset
, length
, NULL
, 0);
2911 offset
= offset
+ length
;
2916 * 9.3.46 Channel description
2919 dissect_rsl_ie_ch_desc(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
2922 proto_tree
*ie_tree
;
2926 if (is_mandatory
== false) {
2927 ie_id
= tvb_get_uint8(tvb
, offset
);
2928 if (ie_id
!= RSL_IE_CH_DESC
)
2931 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_ch_desc
, &ti
, "Channel description IE");
2933 /* Element identifier */
2934 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2937 length
= tvb_get_uint8(tvb
, offset
);
2938 proto_item_set_len(ti
, length
+2);
2939 proto_tree_add_item(ie_tree
, hf_rsl_ie_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2942 proto_tree_add_item(ie_tree
, hf_rsl_group_channel_description
, tvb
, offset
, length
, ENC_NA
);
2944 /* Octet j (j = 3, 4, ..., n) is the unchanged octet j-2 of a radio interface Group Channel description
2945 * information element as defined in 3GPP TS 44.018, n-2 is equal to the length of the radio interface
2946 * Group channel description information element
2949 offset
= offset
+ length
;
2954 * 9.3.47 NCH DRX information
2955 * This is a variable length element used to pass a radio interface information element
2959 dissect_rsl_ie_nch_drx(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
2961 proto_tree
*ie_tree
;
2964 if (is_mandatory
== false) {
2965 ie_id
= tvb_get_uint8(tvb
, offset
);
2966 if (ie_id
!= RSL_IE_NCH_DRX_INF
)
2970 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 2, ett_ie_nch_drx
, NULL
, "NCH DRX information IE");
2972 /* Element identifier */
2973 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2975 /* NCH DRX information */
2976 /* Octet 3 bits 7 and 8 are spare and set to zero. */
2977 /* Octet 3 bit 6 is the NLN status parameter as defined in 3GPP TS 44.018.*/
2978 /* Octet 3 bits 3, 4 and 5 are bits 1, 2 and 3 of the radio interface
2979 * eMLPP priority as defined in 3GPP TS 44.018.
2981 /* Octet 3 bits 1 and 2 are bits 1 and 2 of the radio interface NLN
2982 * as defined in 3GPP TS 44.018.
2990 * 9.3.48 Command indicator
2994 dissect_rsl_ie_cmd_ind(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
2997 proto_tree
*ie_tree
;
3002 if (is_mandatory
== false) {
3003 ie_id
= tvb_get_uint8(tvb
, offset
);
3004 if (ie_id
!= RSL_IE_CMD_IND
)
3008 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 1, ett_ie_cmd_ind
, &ti
, "Command indicator IE");
3010 /* Element identifier */
3011 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3014 length
= tvb_get_uint8(tvb
, offset
);
3015 proto_item_set_len(ti
, length
+ 2);
3016 proto_tree_add_item(ie_tree
, hf_rsl_ie_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3020 proto_tree_add_item_ret_boolean(ie_tree
, hf_rsl_extension_bit
, tvb
,
3021 offset
, 1, ENC_BIG_ENDIAN
, &ext
);
3023 /* If the extension bit E (bit 8) is set to 1 then the Command value
3024 * is a 2 octet field (octets 3 and 3a) */
3025 proto_tree_add_item(ie_tree
, hf_rsl_command_ext
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3031 pi
= proto_tree_add_item_ret_uint(ie_tree
, hf_rsl_command
, tvb
,
3032 offset
, 1, ENC_BIG_ENDIAN
, &value
);
3035 if (value
== 0x00) /* 0b0000000 */
3036 proto_item_append_text(pi
, " (Start)");
3037 else if (value
== 0x01) /* 0b0000001 */
3038 proto_item_append_text(pi
, " (Stop)");
3039 else if (value
<= 0x40) /* 0b0000010 .. 0b1000000 */
3040 proto_item_append_text(pi
, " (reserved for international use)");
3041 else /* 0b1000001 .. 0b1111111 */
3042 proto_item_append_text(pi
, " (reserved for national use)");
3048 * 9.3.49 eMLPP Priority
3050 static const value_string rsl_emlpp_prio_vals
[] = {
3051 { 0x00, "no priority applied" },
3052 { 0x01, "call priority level 4" },
3053 { 0x02, "call priority level 3" },
3054 { 0x03, "call priority level 2" },
3055 { 0x04, "call priority level 1" },
3056 { 0x05, "call priority level 0" },
3057 { 0x06, "call priority level B" },
3058 { 0x07, "call priority level A" },
3063 dissect_rsl_ie_emlpp_prio(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
3065 proto_tree
*ie_tree
;
3068 if (is_mandatory
== false) {
3069 ie_id
= tvb_get_uint8(tvb
, offset
);
3070 if (ie_id
!= RSL_IE_EMLPP_PRIO
)
3074 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 2, ett_ie_emlpp_prio
, NULL
, "eMLPP Priority IE");
3076 /* Element identifier */
3077 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3080 /* The call priority field (bit 3 to 1 of octet 2) is coded in the same way
3081 * as the call priority field (bit 3 to 1 of octet 5) in the
3082 * Descriptive group or broadcast call reference information element
3083 * as defined in 3GPP TS 24.008.
3085 proto_tree_add_item(ie_tree
, hf_rsl_emlpp_prio
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3095 dissect_rsl_ie_uic(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
3097 proto_tree
*ie_tree
;
3100 if (is_mandatory
== false) {
3101 ie_id
= tvb_get_uint8(tvb
, offset
);
3102 if (ie_id
!= RSL_IE_UIC
)
3106 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_uic
, NULL
, "UIC IE");
3108 /* Element identifier */
3109 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3112 /* Octet 3 bits 1 to 6 contain the radio interface octet 2 bits 3 to 8 of the
3113 * UIC information element as defined in 3GPP TS 44.018.
3115 proto_tree_add_item(ie_tree
, hf_rsl_uic
, tvb
, offset
, 1, ENC_NA
);
3122 * 9.3.51 Main channel reference
3126 dissect_rsl_ie_main_ch_ref(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
3128 proto_tree
*ie_tree
;
3131 if (is_mandatory
== false) {
3132 ie_id
= tvb_get_uint8(tvb
, offset
);
3133 if (ie_id
!= RSL_IE_MAIN_CH_REF
)
3137 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_main_ch_ref
, NULL
, "Main channel reference IE");
3139 /* Element identifier */
3140 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3143 /* TN is time slot number, binary represented as in 3GPP TS 45.002.
3146 proto_tree_add_item(ie_tree
, hf_rsl_ch_no_TN
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3152 * 9.3.52 MultiRate configuration
3156 dissect_rsl_ie_multirate_conf(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, int offset
, bool is_mandatory
)
3159 proto_tree
*ie_tree
;
3163 if (is_mandatory
== false) {
3164 ie_id
= tvb_get_uint8(tvb
, offset
);
3165 if (ie_id
!= RSL_IE_MULTIRATE_CONF
)
3168 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_multirate_conf
, &ti
, "MultiRate configuration IE");
3170 /* Element identifier */
3171 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3174 length
= tvb_get_uint8(tvb
, offset
);
3175 proto_item_set_len(ti
, length
+2);
3176 proto_tree_add_item(ie_tree
, hf_rsl_ie_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3179 /* Rest of element coded as in 3GPP TS 44.018 not including
3180 * 3GPP TS 44.018 element identifier or 3GPP TS 44.018 octet length value
3183 de_rr_multirate_conf(tvb
, ie_tree
, pinfo
, offset
, length
, NULL
, 0);
3185 offset
= offset
+ length
;
3191 * 9.3.53 MultiRate Control
3194 dissect_rsl_ie_multirate_cntrl(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
3196 proto_tree
*ie_tree
;
3199 if (is_mandatory
== false) {
3200 ie_id
= tvb_get_uint8(tvb
, offset
);
3201 if (ie_id
!= RSL_IE_MULTIRATE_CNTRL
)
3204 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 2, ett_ie_multirate_cntrl
, NULL
, "MultiRate Control IE");
3206 /* Element identifier */
3207 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3210 /* Bit 8 -5 Spare */
3211 /* The OD field (bit 5 of octet 3) indicates if the BSC expects distant parameters or
3212 * TFO Decision algorithm result from the BTS
3214 /* The PRE field (bit 4 of octet 3) indicates if an handover is to be expected soon or not. */
3215 /* The RAE field (bits 2-3, octet 3) defines whether the RATSCCH mechanism is enabled or not.*/
3222 * 9.3.54 Supported Codec Types
3223 * This element indicates the codec types supported by the BSS or remote BSS.
3226 dissect_rsl_ie_sup_codec_types(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
3229 proto_tree
*ie_tree
;
3233 if (is_mandatory
== false) {
3234 ie_id
= tvb_get_uint8(tvb
, offset
);
3235 if (ie_id
!= RSL_IE_SUP_CODEC_TYPES
)
3238 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_sup_codec_types
, &ti
, "Supported Codec Types IE");
3240 /* Element identifier */
3241 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3244 length
= tvb_get_uint8(tvb
, offset
);
3245 proto_item_set_len(ti
, length
+2);
3246 proto_tree_add_item(ie_tree
, hf_rsl_ie_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3249 proto_tree_add_item(tree
, hf_rsl_codec_list
, tvb
, offset
, length
, ENC_NA
);
3251 /* The Codec List field (octet 4) lists the codec types that are supported
3252 * by the BSS and Transcoder, and are therefore potential candidates for TFO
3255 /* The Codec List extension 1 field (octet 5) lists additional codec types
3256 * that are supported by the BSS and Transcoder, and are therefore potential
3257 * candidates for TFO establishment. When no codec from this list is supported,
3258 * then this field shall not be sent, and the extension bit of octet 4 shall
3261 /* If bit 4 of the Codec List field (octet 4) indicates that FR AMR is supported
3262 * or if bit 5 of the Codec List field (octet 4) indicates that HR AMR is supported
3263 * and bit 8 is set to 0, or if bit 6 of the Codec List field (octet 4) indicates
3264 * that UMTS AMR is supported, or if bit 7 of the Codec List field (octet 4)
3265 * indicates that UMTS AMR 2 is supported, or if bit 1, 3, 4 or 5 of the Codec List
3266 * extension 1 field (octet 5) indicates that AMR WB is supported, the following
3267 * two octets (after the Codec List field and its extensions) is present
3270 return offset
+ length
;
3274 * 9.3.55 Codec Configuration
3276 /* The Active Codec Type field (bits 1-8, octet 3) indicates the type of codec in use. It is coded as follows: */
3278 0 0 0 0 . 0 0 0 0: Full Rate Codec in use
3279 0 0 0 0 . 0 0 0 1: Half Rate Codec in use
3280 0 0 0 0 . 0 0 1 0: Enhanced Full Rate Codec in use
3281 0 0 0 0 . 0 0 1 1: FR Adaptive Multi Rate Codec in use
3282 0 0 0 0 . 0 1 0 0: HR Adaptive Multi Rate Codec in use
3283 0 0 0 0 . 0 1 0 1: UMTS Adaptive Multi Rate Codec in use
3284 0 0 0 0 . 0 1 1 0: UMTS Adaptive Multi Rate 2 Codec in use
3285 0 0 0 0 . 1 0 0 1: Full Rate Adaptive Multi-Rate WideBand Codec in use
3286 0 0 0 0 1 0 1 0 UMTS Adaptive Multi-Rate WideBand Codec in use
3287 0 0 0 0 1 0 1 1 8PSK Half Rate Adaptive Multi-Rate Codec in use
3288 0 0 0 0 1 1 0 0 8PSK Full Rate Adaptive Multi-Rate WideBand Codec in use
3289 0 0 0 0 1 1 0 1 8PSK Half Rate Adaptive Multi-Rate WideBand Codec in use
3290 All other values are reserved for future use
3293 dissect_rsl_ie_codec_conf(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
3296 proto_tree
*ie_tree
;
3300 if (is_mandatory
== false) {
3301 ie_id
= tvb_get_uint8(tvb
, offset
);
3302 if (ie_id
!= RSL_IE_CODEC_CONF
)
3305 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_codec_conf
, &ti
, "Codec Configuration IE");
3307 /* Element identifier */
3308 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3311 length
= tvb_get_uint8(tvb
, offset
);
3312 proto_item_set_len(ti
, length
+2);
3313 proto_tree_add_item(ie_tree
, hf_rsl_ie_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3316 /* Active Codec Type */
3318 return offset
+ length
;
3322 * 9.3.56 Round Trip Delay
3323 * This element indicates the value of the calculated round trip delay between the BTS
3324 * and the transcoder, or between the BTS and the remote BTS, if TFO is established.
3327 static const value_string rsl_delay_ind_vals
[] = {
3328 { 0x00, "The RTD field contains the BTS-Transcoder round trip delay" },
3329 { 0x01, "The RTD field contains the BTS-Remote BTS round trip delay" },
3333 dissect_rsl_ie_rtd(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
3335 proto_item
*rtd_item
;
3336 proto_tree
*ie_tree
;
3340 if (is_mandatory
== false) {
3341 ie_id
= tvb_get_uint8(tvb
, offset
);
3342 if (ie_id
!= RSL_IE_RTD
)
3346 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_rtd
, NULL
, "Round Trip Delay IE");
3348 /* Element identifier */
3349 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3352 /* The RTD field is the binary representation of the value of the
3353 * round trip delay in 20 ms increments.
3355 rtd
= (tvb_get_uint8(tvb
, offset
)>>1)*20;
3356 rtd_item
= proto_tree_add_uint(tree
, hf_rsl_rtd
, tvb
, offset
, 1, rtd
);
3357 proto_item_append_text(rtd_item
, " ms");
3359 /* The Delay IND field indicates if the delay corresponds to a BTS
3360 * to transcoder delay or to a BTS to remote BTS delay.
3362 proto_tree_add_item(ie_tree
, hf_rsl_delay_ind
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3369 * This element indicates if TFO is established. It is coded in 2 octets
3372 static const true_false_string rsl_tfo_vals
= {
3373 "TFO is established",
3374 "TFO is not established"
3378 dissect_rsl_ie_tfo_status(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
3380 proto_tree
*ie_tree
;
3383 if (is_mandatory
== false) {
3384 ie_id
= tvb_get_uint8(tvb
, offset
);
3385 if (ie_id
!= RSL_IE_TFO_STATUS
)
3389 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_tfo_status
, NULL
, "TFO Status IE");
3391 /* Element identifier */
3392 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3395 proto_tree_add_item(ie_tree
, hf_rsl_tfo
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3404 dissect_rsl_ie_llp_apdu(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
3407 proto_tree
*ie_tree
;
3412 if (is_mandatory
== false) {
3413 ie_id
= tvb_get_uint8(tvb
, offset
);
3414 if (ie_id
!= RSL_IE_LLP_APDU
)
3418 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_llp_apdu
, &ti
, "LLP APDU IE");
3420 /* Element identifier */
3421 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3424 length
= tvb_get_uint8(tvb
, offset
);
3425 proto_item_set_len(ti
, length
+2);
3426 proto_tree_add_item(ie_tree
, hf_rsl_ie_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3431 /* The rest of the information element contains the embedded message
3432 * that contains a Facility Information Element as defined in
3433 * 3GPP TS 44.071 excluding the Facility IEI and length of Facility IEI
3434 * octets defined in 3GPP TS 44.071.
3436 /* TODO: Given traces with LLP data this IE could be further dissected */
3437 proto_tree_add_expert(tree
, pinfo
, &ei_rsl_facility_information_element_3gpp_ts_44071
, tvb
, offset
, length
);
3438 return ie_offset
+ length
;
3441 * 9.3.59 TFO transparent container
3442 * This is a variable length element that conveys a message associated with TFO protocol,
3443 * as defined in 3GPP TS 28.062. This element can be sent from the BSC to the BTS or
3444 * from the BTS to the BSC. The BTS shall retrieve the information it is able to understand,
3445 * and forward transparently the complete information to the BSC or to the TRAU.
3448 dissect_rsl_ie_tfo_transp_cont(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, bool is_mandatory
)
3451 proto_tree
*ie_tree
;
3456 if (is_mandatory
== false) {
3457 ie_id
= tvb_get_uint8(tvb
, offset
);
3458 if (ie_id
!= RSL_IE_TFO_TRANSP_CONT
)
3462 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_ie_tfo_transp_cont
, &ti
, "TFO transparent container IE");
3464 /* Element identifier */
3465 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3468 length
= tvb_get_uint8(tvb
, offset
);
3469 proto_item_set_len(ti
, length
+2);
3470 proto_tree_add_item(ie_tree
, hf_rsl_ie_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3475 /* The rest of the information element contains the embedded message
3476 * that contains a Facility Information Element as defined in
3477 * 3GPP TS 44.071 excluding the Facility IEI and length of Facility IEI
3478 * octets defined in 3GPP TS 44.071.
3480 proto_tree_add_expert(tree
, pinfo
, &ei_rsl_embedded_message_tfo_configuration
, tvb
, offset
, length
);
3481 return ie_offset
+ length
;
3484 /* Encapsulating paging messages into a packet EP2192796 - proprietor Huawei */
3485 static const true_false_string rsl_paging_type_vals
= {
3486 "Packet Switched (PS)",
3487 "Circuit Switched (CS)"
3491 dissect_rsl_paging_group_paras(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
)
3493 proto_tree
*ie_tree
;
3494 uint8_t paging_type
, i
, length
;
3497 paging_type
= (tvb_get_uint8(tvb
, offset
) & 0x80) >> 7;
3498 /* Calculating whole length of Paging Package Info */
3499 if(paging_type
== 0){
3500 length
= 2; /* length of Paging Group Paras if it is CS type (2 byte Cs Paging Group Para) */
3502 length
= 5; /* length of Paging Group Paras if it is PS type (1 byte spare, 4x 1 byte of PS Paging Group Para */
3505 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, length
, ett_ie_paging_group_paras
, NULL
, "Paging Group Paras");
3508 proto_tree_add_item(ie_tree
, hf_rsl_paging_type
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3509 /* CS Paging Group */
3510 if(paging_type
== 0){
3511 proto_tree_add_item(ie_tree
, hf_rsl_paging_group_cs
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3513 proto_tree_add_item(ie_tree
, hf_rsl_paging_group_empty_package
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3514 offset
++; /* move over empty (0x00) packet */
3516 /* PS Paging Group */
3519 proto_tree_add_item(ie_tree
, hf_rsl_paging_group_ps_spare
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3521 for(i
= 1; i
<= 4; i
++){
3522 proto_tree_add_item(ie_tree
, hf_rsl_paging_grp
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3529 /* Paging Package Channel And eMLPP. REF: EP2192786B1 *
3531 * in REF values from 9.3.40 used but "Channel Needed" is optional, and 0 is filled when invalid. *
3533 * in REf values from 9.3.49 used but "eMLPP Priority" is optional, and 0 is filled when invalid. *
3535 static const value_string rsl_paging_ch_needed_vals
[] = {
3536 { 0x00, "Invalid Channel" },
3538 { 0x02, "TCH/F (Full rate)" },
3539 { 0x03, "TCH/F or TCH/H (Dual rate)" },
3543 static const value_string rsl_paging_emlpp_prio_vals
[] = {
3544 { 0x00, "invalid call priority" },
3545 { 0x01, "call priority level 4" },
3546 { 0x02, "call priority level 3" },
3547 { 0x03, "call priority level 2" },
3548 { 0x04, "call priority level 1" },
3549 { 0x05, "call priority level 0" },
3550 { 0x06, "call priority level B" },
3551 { 0x07, "call priority level A" },
3556 dissect_rsl_paging_package_channel_and_emlpp(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
)
3558 proto_tree
*ie_tree
;
3560 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 1, ett_ie_paging_package_ch_a_emlpp
, NULL
, "Channel and eMLPP");
3562 /* Channel Number */
3563 proto_tree_add_item(ie_tree
, hf_rsl_paging_package_ch_no
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3564 /* Channel Needed */
3565 proto_tree_add_item(ie_tree
, hf_rsl_paging_package_ch_needed
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3566 /* eMLPP Priority */
3567 proto_tree_add_item(ie_tree
, hf_rsl_paging_emlpp_prio
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3572 /* Paging Package dissection. REF: EP2192796B1
3576 dissect_rsl_paging_package(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint8_t package_number
)
3578 proto_tree
*ie_tree
;
3579 uint8_t i
, length
, paging_type
;
3581 for(i
= 1; i
<= package_number
; i
++){
3582 /* Calculating whole length of Paging Package Info */
3583 length
= (tvb_get_uint8(tvb
, offset
+2) + 3);
3584 paging_type
= (tvb_get_uint8(tvb
, offset
+ length
) & 0x80) >> 7;
3585 if(paging_type
== 0){
3586 length
= length
+ 2; /* length of Paging Group Paras if it is CS type (2 byte Cs Paging Group Para) */
3588 length
= length
+ 5; /* length of Paging Group Paras if it is PS type (1 byte spare, 4x 1 byte of PS Paging Group Para */
3591 ie_tree
= proto_tree_add_subtree_format(tree
, tvb
, offset
, length
, ett_ie_paging_package
, NULL
, "Paging Package Info %u", i
);
3593 offset
= dissect_rsl_paging_package_channel_and_emlpp(tvb
, pinfo
, ie_tree
, offset
);
3594 offset
= dissect_rsl_ie_ms_id(tvb
, pinfo
, ie_tree
, offset
, true);
3596 offset
= dissect_rsl_paging_group_paras(tvb
, pinfo
, ie_tree
, offset
);
3601 /* Paging Package Number dissection. REF: EP2192796B1
3605 dissect_rsl_paging_package_number(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int *offset
)
3607 proto_tree
*ie_tree
;
3608 uint8_t package_number
;
3610 ie_tree
= proto_tree_add_subtree(tree
, tvb
, *offset
, 1, ett_ie_paging_package_number
, NULL
, "Paging Package Number");
3613 proto_tree_add_item(ie_tree
, hf_rsl_paging_spare
, tvb
, *offset
, 1, ENC_BIG_ENDIAN
);
3614 /* Paging Msg Number */
3615 package_number
= tvb_get_uint8(tvb
, *offset
) & 0x0f;
3616 proto_tree_add_item(ie_tree
, hf_rsl_paging_msg_no
, tvb
, *offset
, 1, ENC_BIG_ENDIAN
);
3618 return package_number
;
3622 dissect_rsl_ie_osmo_rep_acch_cap(tvbuff_t
*tvb
, packet_info
*pinfo _U_
,
3623 proto_tree
*tree
, int offset
,
3627 proto_tree
*ie_tree
;
3631 if (is_mandatory
== false) {
3632 ie_id
= tvb_get_uint8(tvb
, offset
);
3633 if (ie_id
!= RSL_IE_OSMO_REP_ACCH_CAP
)
3636 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0,
3637 ett_ie_osmo_rep_acch_cap
, &ti
,
3638 "Osmocom Repeated ACCH Capabilities IE");
3640 /* Element identifier */
3641 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
++, 1, ENC_NA
);
3643 proto_tree_add_item_ret_uint(ie_tree
, hf_rsl_ie_length
, tvb
, offset
++, 1, ENC_NA
, &length
);
3644 proto_item_set_len(ti
, length
+ 2);
3646 proto_tree_add_item(ie_tree
, hf_rsl_osmo_rep_acch_rxqual
, tvb
, offset
, 1, ENC_NA
);
3647 proto_tree_add_item(ie_tree
, hf_rsl_osmo_rep_acch_ul_sacch
, tvb
, offset
, 1, ENC_NA
);
3648 proto_tree_add_item(ie_tree
, hf_rsl_osmo_rep_acch_dl_sacch
, tvb
, offset
, 1, ENC_NA
);
3649 proto_tree_add_item(ie_tree
, hf_rsl_osmo_rep_acch_dl_facch_all
, tvb
, offset
, 1, ENC_NA
);
3650 proto_tree_add_item(ie_tree
, hf_rsl_osmo_rep_acch_dl_facch_cmd
, tvb
, offset
, 1, ENC_NA
);
3657 dissect_rsl_ie_osmo_top_acch_cap(tvbuff_t
*tvb
, packet_info
*pinfo _U_
,
3658 proto_tree
*tree
, int offset
,
3662 proto_tree
*ie_tree
;
3666 if (is_mandatory
== false) {
3667 ie_id
= tvb_get_uint8(tvb
, offset
);
3668 if (ie_id
!= RSL_IE_OSMO_TOP_ACCH_CAP
)
3671 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0,
3672 ett_ie_osmo_top_acch_cap
, &ti
,
3673 "Osmocom Temporary ACCH Overpower Capabilities IE");
3675 /* Element identifier */
3676 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
++, 1, ENC_NA
);
3678 proto_tree_add_item_ret_uint(ie_tree
, hf_rsl_ie_length
, tvb
, offset
++, 1, ENC_NA
, &length
);
3679 proto_item_set_len(ti
, length
+ 2);
3681 proto_tree_add_item(ie_tree
, hf_rsl_osmo_top_acch_sacch
, tvb
, offset
, 1, ENC_NA
);
3682 proto_tree_add_item(ie_tree
, hf_rsl_osmo_top_acch_facch
, tvb
, offset
, 1, ENC_NA
);
3683 proto_tree_add_item(ie_tree
, hf_rsl_osmo_top_acch_rxqual
, tvb
, offset
, 1, ENC_NA
);
3684 proto_tree_add_item(ie_tree
, hf_rsl_osmo_top_acch_val
, tvb
, offset
, 1, ENC_NA
);
3690 static const value_string rsl_osmo_tsc_set_vals
[] = {
3699 dissect_rsl_ie_osmo_training_seq(tvbuff_t
*tvb
, packet_info
*pinfo _U_
,
3700 proto_tree
*tree
, int offset
,
3704 proto_tree
*ie_tree
;
3708 if (is_mandatory
== false) {
3709 ie_id
= tvb_get_uint8(tvb
, offset
);
3710 if (ie_id
!= RSL_IE_OSMO_TRAINING_SEQUENCE
)
3713 ie_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0,
3714 ett_ie_osmo_training_seq
, &ti
,
3715 "Osmocom Training Sequence IE");
3717 /* Element identifier */
3718 proto_tree_add_item(ie_tree
, hf_rsl_ie_id
, tvb
, offset
++, 1, ENC_NA
);
3720 proto_tree_add_item_ret_uint(ie_tree
, hf_rsl_ie_length
, tvb
, offset
++, 1, ENC_NA
, &length
);
3721 proto_item_set_len(ti
, length
+ 2);
3723 proto_tree_add_item(ie_tree
, hf_rsl_osmo_tsc_set
, tvb
, offset
++, 1, ENC_NA
);
3724 proto_tree_add_item(ie_tree
, hf_rsl_osmo_tsc_val
, tvb
, offset
++, 1, ENC_NA
);
3729 struct dyn_pl_info_t
{
3735 dissct_rsl_ipaccess_msg(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, int offset
)
3738 uint32_t local_addr
= 0;
3739 uint16_t local_port
= 0;
3740 uint32_t rtp_codec
= 255, rtp_pt
= 0;
3742 rtp_dyn_payload_t
*dyn_pl
= NULL
;
3743 struct dyn_pl_info_t
*dyn_pl_info
;
3744 conversation_t
*conv
;
3745 bool use_osmux
= false;
3747 msg_type
= tvb_get_uint8(tvb
, offset
) & 0x7f;
3750 /* parse TLV attributes */
3751 while (tvb_reported_length_remaining(tvb
, offset
) > 0) {
3753 unsigned int len
, hlen
;
3754 const struct tlv_def
*tdef
;
3756 proto_tree
*ie_tree
= NULL
;
3758 tag
= tvb_get_uint8(tvb
, offset
);
3759 tdef
= &rsl_att_tlvdef
.def
[tag
];
3761 switch (tdef
->type
) {
3762 case TLV_TYPE_FIXED
:
3764 len
= tdef
->fixed_len
;
3776 len
= tvb_get_uint8(tvb
, offset
+1);
3778 case TLV_TYPE_TL16V
:
3780 len
= tvb_get_uint8(tvb
, offset
+1) << 8 |
3781 tvb_get_uint8(tvb
, offset
+2);
3783 case TLV_TYPE_UNKNOWN
:
3785 return tvb_reported_length(tvb
);
3791 dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, false);
3793 case RSL_IE_FRAME_NO
:
3794 dissect_rsl_ie_frame_no(tvb
, pinfo
, tree
, offset
, false);
3797 dissect_rsl_ie_ms_pow(tvb
, pinfo
, tree
, offset
, false);
3800 dissect_rsl_ie_bs_power(tvb
, pinfo
, tree
, offset
, false);
3802 case RSL_IE_MS_POWER_PARAM
:
3803 dissect_rsl_ie_ms_pow_params(tvb
, pinfo
, tree
, offset
, false);
3805 case RSL_IE_BS_POWER_PARAM
:
3806 dissect_rsl_ie_bs_power_params(tvb
, pinfo
, tree
, offset
, false);
3809 dissect_rsl_ie_cause(tvb
, pinfo
, tree
, offset
, false);
3812 ti
= proto_tree_add_item(tree
, hf_rsl_ie_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3813 ie_tree
= proto_item_add_subtree(ti
, ett_ie_local_port
);
3819 case RSL_IE_IPAC_REMOTE_IP
:
3820 proto_tree_add_item(ie_tree
, hf_rsl_remote_ip
, tvb
,
3821 offset
, len
, ENC_BIG_ENDIAN
);
3823 case RSL_IE_IPAC_REMOTE_PORT
:
3824 proto_tree_add_item(ie_tree
, hf_rsl_remote_port
, tvb
,
3825 offset
, len
, ENC_BIG_ENDIAN
);
3827 case RSL_IE_IPAC_LOCAL_IP
:
3828 proto_tree_add_item(ie_tree
, hf_rsl_local_ip
, tvb
,
3829 offset
, len
, ENC_BIG_ENDIAN
);
3830 local_addr
= tvb_get_ipv4(tvb
, offset
);
3832 case RSL_IE_IPAC_LOCAL_PORT
:
3833 proto_tree_add_item(ie_tree
, hf_rsl_local_port
, tvb
,
3834 offset
, len
, ENC_BIG_ENDIAN
);
3835 local_port
= tvb_get_ntohs(tvb
, offset
);
3837 case RSL_IE_IPAC_SPEECH_MODE
:
3838 proto_tree_add_item_ret_uint(ie_tree
, hf_rsl_speech_mode_s
, tvb
,
3839 offset
, len
, ENC_BIG_ENDIAN
, &rtp_codec
);
3840 conv
= find_or_create_conversation(pinfo
);
3841 dyn_pl_info
= (struct dyn_pl_info_t
*)conversation_get_proto_data(conv
, proto_rsl
);
3843 dyn_pl_info
= (struct dyn_pl_info_t
*)wmem_alloc0(wmem_file_scope(), sizeof(*dyn_pl_info
));
3844 conversation_add_proto_data(conv
, proto_rsl
, (void *)dyn_pl_info
);
3846 dyn_pl_info
->rtp_codec
= rtp_codec
;
3848 proto_tree_add_item(ie_tree
, hf_rsl_speech_mode_m
, tvb
,
3849 offset
, len
, ENC_BIG_ENDIAN
);
3851 case RSL_IE_IPAC_RTP_PAYLOAD
:
3852 case RSL_IE_IPAC_RTP_PAYLOAD2
:
3853 /* Need to set pl here */
3854 proto_tree_add_item_ret_uint(ie_tree
, hf_rsl_rtp_payload
, tvb
,
3855 offset
, len
, ENC_BIG_ENDIAN
, &rtp_pt
);
3856 conv
= find_or_create_conversation(pinfo
);
3857 dyn_pl_info
= (struct dyn_pl_info_t
*)conversation_get_proto_data(conv
, proto_rsl
);
3859 dyn_pl_info
= (struct dyn_pl_info_t
*)wmem_alloc0(wmem_file_scope(), sizeof(*dyn_pl_info
));
3860 conversation_add_proto_data(conv
, proto_rsl
, (void *)dyn_pl_info
);
3861 dyn_pl_info
->rtp_codec
= rtp_codec
;
3863 dyn_pl_info
->rtp_pt
= rtp_pt
;
3866 case RSL_IE_IPAC_RTP_CSD_FMT
:
3867 proto_tree_add_item(ie_tree
, hf_rsl_rtp_csd_fmt_d
, tvb
,
3868 offset
, len
, ENC_BIG_ENDIAN
);
3869 proto_tree_add_item(ie_tree
, hf_rsl_rtp_csd_fmt_ir
, tvb
,
3870 offset
, len
, ENC_BIG_ENDIAN
);
3872 case RSL_IE_IPAC_CONN_ID
:
3873 proto_tree_add_item(ie_tree
, hf_rsl_conn_id
, tvb
,
3874 offset
, len
, ENC_BIG_ENDIAN
);
3876 case RSL_IE_IPAC_CONN_STAT
:
3877 proto_tree_add_item(ie_tree
, hf_rsl_cstat_tx_pkts
, tvb
,
3878 offset
, 4, ENC_BIG_ENDIAN
);
3879 proto_tree_add_item(ie_tree
, hf_rsl_cstat_tx_octs
, tvb
,
3880 offset
+4, 4, ENC_BIG_ENDIAN
);
3881 proto_tree_add_item(ie_tree
, hf_rsl_cstat_rx_pkts
, tvb
,
3882 offset
+8, 4, ENC_BIG_ENDIAN
);
3883 proto_tree_add_item(ie_tree
, hf_rsl_cstat_rx_octs
, tvb
,
3884 offset
+12, 4, ENC_BIG_ENDIAN
);
3885 proto_tree_add_item(ie_tree
, hf_rsl_cstat_lost_pkts
, tvb
,
3886 offset
+16, 4, ENC_BIG_ENDIAN
);
3887 proto_tree_add_item(ie_tree
, hf_rsl_cstat_ia_jitter
, tvb
,
3888 offset
+20, 4, ENC_BIG_ENDIAN
);
3889 proto_tree_add_item(ie_tree
, hf_rsl_cstat_avg_tx_dly
, tvb
,
3890 offset
+24, 4, ENC_BIG_ENDIAN
);
3892 case RSL_IE_OSMO_OSMUX_CID
:
3893 if (global_rsl_use_osmo_bts
) {
3894 proto_tree_add_item(ie_tree
, hf_rsl_osmo_osmux_cid
, tvb
,
3895 offset
, len
, ENC_BIG_ENDIAN
);
3904 case RSL_MSG_TYPE_IPAC_CRCX_ACK
:
3906 /* Notify the RTP and RTCP dissectors about a new RTP stream */
3907 src_addr
.type
= AT_IPv4
;
3909 src_addr
.data
= (uint8_t *)&local_addr
;
3911 conv
= find_or_create_conversation(pinfo
);
3912 dyn_pl_info
= (struct dyn_pl_info_t
*)conversation_get_proto_data(conv
, proto_rsl
);
3913 if (dyn_pl_info
&& (dyn_pl_info
->rtp_codec
== 2 || dyn_pl_info
->rtp_codec
== 5)) {
3914 dyn_pl
= rtp_dyn_payload_new();
3915 rtp_dyn_payload_insert(dyn_pl
, dyn_pl_info
->rtp_pt
, "AMR", 8000, 1);
3917 conversation_delete_proto_data(conv
, proto_rsl
);
3918 wmem_free(wmem_file_scope(), dyn_pl_info
);
3919 rtp_add_address(pinfo
, PT_UDP
, &src_addr
, local_port
, 0,
3920 "GSM A-bis/IP", pinfo
->num
, 0, dyn_pl
);
3921 rtcp_add_address(pinfo
, &src_addr
, local_port
+1, 0,
3922 "GSM A-bis/IP", pinfo
->num
);
3930 // NOLINTNEXTLINE(misc-no-recursion)
3931 dissct_rsl_msg(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, int offset
)
3933 uint8_t msg_disc
, msg_type
, sys_info_type
;
3934 uint8_t paging_package_number
;
3936 msg_disc
= tvb_get_uint8(tvb
, offset
++) >> 1;
3937 msg_type
= tvb_get_uint8(tvb
, offset
) & 0x7f;
3938 proto_tree_add_item(tree
, hf_rsl_msg_type
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3940 if (msg_disc
== RSL_MSGDISC_IPACCESS
) {
3941 offset
= dissct_rsl_ipaccess_msg(tvb
, pinfo
, tree
, offset
);
3946 increment_dissection_depth(pinfo
);
3948 /* Radio Link Layer Management messages */
3949 /* 8.3.1 DATA REQUEST */
3950 case RSL_MSG_TYPE_DATA_REQ
:
3951 /* Channel number 9.3.1 M TV 2 */
3952 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
3953 /* Link Identifier 9.3.2 M TV 2 */
3954 offset
= dissect_rsl_ie_link_id(tvb
, pinfo
, tree
, offset
, true);
3955 /* L3 Information 9.3.11 M TLV >=3 */
3956 offset
= dissect_rsl_ie_L3_inf(tvb
, pinfo
, tree
, offset
, true, L3_INF_OTHER
);
3958 /* 8.3.2 DATA INDICATION */
3959 case RSL_MSG_TYPE_DATA_IND
:
3960 /* Channel number 9.3.1 M TV 2 */
3961 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
3962 /* Link Identifier 9.3.2 M TV 2 */
3963 offset
= dissect_rsl_ie_link_id(tvb
, pinfo
, tree
, offset
, true);
3964 /* L3 Information 9.3.11 M TLV >=3 */
3965 offset
= dissect_rsl_ie_L3_inf(tvb
, pinfo
, tree
, offset
, true, L3_INF_OTHER
);
3967 /* 8.3.3 ERROR INDICATION */
3968 case RSL_MSG_TYPE_ERROR_IND
:
3969 /* Channel number 9.3.1 M TV 2 */
3970 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
3971 /* Link Identifier 9.3.2 M TV 2 */
3972 offset
= dissect_rsl_ie_link_id(tvb
, pinfo
, tree
, offset
, true);
3973 /* RLM Cause 9.3.22 M TLV 2-4 */
3974 offset
= dissect_rsl_ie_rlm_cause(tvb
, pinfo
, tree
, offset
, true);
3976 /* 8.3.4 ESTABLISH REQUEST */
3977 case RSL_MSG_TYPE_EST_REQ
:
3978 /* Channel number 9.3.1 M TV 2 */
3979 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
3980 /* Link Identifier 9.3.2 M TV 2 */
3981 offset
= dissect_rsl_ie_link_id(tvb
, pinfo
, tree
, offset
, true);
3983 /* 8.3.5 ESTABLISH CONFIRM */
3984 case RSL_MSG_TYPE_EST_CONF
:
3985 /* Channel number 9.3.1 M TV 2 */
3986 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
3987 /* Link Identifier 9.3.2 M TV 2 */
3988 offset
= dissect_rsl_ie_link_id(tvb
, pinfo
, tree
, offset
, true);
3991 case RSL_MSG_EST_IND
:
3992 /* Channel number 9.3.1 M TV 2 */
3993 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
3994 /* Link Identifier 9.3.2 M TV 2 */
3995 offset
= dissect_rsl_ie_link_id(tvb
, pinfo
, tree
, offset
, true);
3996 /* L3 Information 9.3.11 O (note 1) TLV 3-23 */
3997 if (tvb_reported_length_remaining(tvb
, offset
) >1)
3998 offset
= dissect_rsl_ie_L3_inf(tvb
, pinfo
, tree
, offset
, false, L3_INF_OTHER
);
4000 /* 8.3.7 RELEASE REQUEST */
4001 case RSL_MSG_REL_REQ
:
4002 /* Channel number 9.3.1 M TV 2 */
4003 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4004 /* Link Identifier 9.3.2 M TV 2 */
4005 offset
= dissect_rsl_ie_link_id(tvb
, pinfo
, tree
, offset
, true);
4006 /* Release Mode 9.3.20 M TV 2 */
4007 offset
= dissect_rsl_ie_rel_mode(tvb
, pinfo
, tree
, offset
, true);
4009 /* 8.3.8 RELEASE CONFIRM */
4010 case RSL_MSG_REL_CONF
:
4011 /* Channel number 9.3.1 M TV 2 */
4012 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4013 /* Link Identifier 9.3.2 M TV 2 */
4014 offset
= dissect_rsl_ie_link_id(tvb
, pinfo
, tree
, offset
, true);
4016 /* 8.3.9 RELEASE INDICATION */
4017 case RSL_MSG_REL_IND
:
4018 /* Channel number 9.3.1 M TV 2 */
4019 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4020 /* Link Identifier 9.3.2 M TV 2 */
4021 offset
= dissect_rsl_ie_link_id(tvb
, pinfo
, tree
, offset
, true);
4023 /* 8.3.10 UNIT DATA REQUEST 10 */
4024 case RSL_MSG_UNIT_DATA_REQ
:
4025 /* Channel number 9.3.1 M TV 2 */
4026 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4027 /* Link Identifier 9.3.2 M TV 2 */
4028 offset
= dissect_rsl_ie_link_id(tvb
, pinfo
, tree
, offset
, true);
4029 /* L3 Information 9.3.11 O (note 1) TLV 3-23 */
4030 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4031 offset
= dissect_rsl_ie_L3_inf(tvb
, pinfo
, tree
, offset
, false, L3_INF_OTHER
);
4033 /* 8.3.11 UNIT DATA INDICATION */
4034 case RSL_MSG_UNIT_DATA_IND
:
4035 /* Channel number 9.3.1 M TV 2 */
4036 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4037 /* Link Identifier 9.3.2 M TV 2 */
4038 offset
= dissect_rsl_ie_link_id(tvb
, pinfo
, tree
, offset
, true);
4039 /* L3 Information 9.3.11 M TLV 3-25 */
4040 offset
= dissect_rsl_ie_L3_inf(tvb
, pinfo
, tree
, offset
, true, L3_INF_OTHER
);
4042 /* Common Channel Management/TRX Management messages */
4043 /* 8.5.1 BCCH INFORMATION 17*/
4044 case RSL_MSG_BCCH_INFO
:
4045 /* Channel number 9.3.1 M TV 2 */
4046 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4047 /* System Info Type 9.3.30 M TV 2 */
4048 offset
= dissect_rsl_ie_sys_info_type(tvb
, pinfo
, tree
, offset
, true, &sys_info_type
);
4049 /* Full BCCH Info (SYS INFO) 9.3.39 O 1) TLV 25 */
4050 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4051 offset
= dissect_rsl_ie_full_bcch_inf(tvb
, pinfo
, tree
, offset
, false);
4052 /* Starting Time 9.3.23 O 2) TV 3 */
4053 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4054 offset
= dissect_rsl_ie_starting_time(tvb
, pinfo
, tree
, offset
, false);
4056 /* 8.5.2 CCCH LOAD INDICATION 18*/
4057 case RSL_MSG_CCCH_LOAD_IND
:
4058 /* Channel number (note) 9.3.1 M TV 2 */
4059 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4060 /* Either RACH Load or Paging Load present */
4061 /* RACH Load 9.3.18 C 1) TLV >=8 */
4062 offset
= dissect_rsl_ie_rach_load(tvb
, pinfo
, tree
, offset
, false);
4063 /* Paging Load 9.3.15 C 2) TV 3 */
4064 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4065 offset
= dissect_rsl_ie_paging_load(tvb
, pinfo
, tree
, offset
, false);
4068 case RSL_MSG_CHANRQD
: /* 19 */
4069 /* Channel number 9.3.1 M TV 2 */
4070 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4071 /* Request Reference 9.3.19 M TV 4 */
4072 offset
= dissect_rsl_ie_req_ref(tvb
, pinfo
, tree
, offset
, true);
4073 /* Access Delay 9.3.17 M TV 2 */
4074 offset
= dissect_rsl_ie_access_delay(tvb
, pinfo
, tree
, offset
, true);
4075 /* Physical Context 9.3.16 O 1) TLV >=2 */
4076 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4077 offset
= dissect_rsl_ie_phy_ctx(tvb
, pinfo
, tree
, offset
, false);
4079 /* 8.5.4 DELETE INDICATION */
4080 case RSL_MSG_DELETE_IND
: /* 20 */
4081 /* Channel number 9.3.1 M TV 2 */
4082 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4083 /* Full Imm. Assign Info 9.3.35 M TLV 25 */
4084 offset
= dissect_rsl_ie_full_imm_ass_inf(tvb
, pinfo
, tree
, offset
, true);
4086 case RSL_MSG_PAGING_CMD
: /* 21 */
4087 /* Channel number 9.3.1 M TV 2 */
4088 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4089 /* Paging Group 9.3.14 M TV 2 2 */
4090 offset
= dissect_rsl_ie_paging_grp(tvb
, pinfo
, tree
, offset
, true);
4091 /* MS Identity 9.3.12 M TLV 2-10 2 */
4092 offset
= dissect_rsl_ie_ms_id(tvb
, pinfo
, tree
, offset
, true);
4093 /* Channel Needed 9.3.40 O 1) TV 2 2 */
4094 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4095 offset
= dissect_rsl_ie_ch_needed(tvb
, pinfo
, tree
, offset
, false);
4096 /* eMLPP Priority 9.3.49 O 2) TV 2 2 */
4097 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4098 offset
= dissect_rsl_ie_emlpp_prio(tvb
, pinfo
, tree
, offset
, false);
4100 /* 8.5.6 IMMEDIATE ASSIGN COMMAND */
4101 case RSL_MSG_IMM_ASS_CMD
: /* 22 */
4102 /* Channel number 9.3.1 M TV 2 */
4103 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4104 /* Full Imm. Assign Info 9.3.35 M TLV 25 */
4105 offset
= dissect_rsl_ie_full_imm_ass_inf(tvb
, pinfo
, tree
, offset
, true);
4107 /* 8.5.7 SMS BROADCAST REQUEST */
4108 case RSL_MSG_SMS_BC_REQ
: /* 23 8.5.7 */
4109 /* Channel number 9.3.1 M TV 2 */
4110 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4111 /* SMSCB Information 9.3.36 M TV 24 */
4112 offset
= dissect_rsl_ie_smscb_inf(tvb
, pinfo
, tree
, offset
, true);
4113 /* SMSCB Channel Indicator 9.3.44 O 1) TV 2 */
4114 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4115 offset
= dissect_rsl_ie_smscb_ch_ind(tvb
, pinfo
, tree
, offset
, false);
4117 /* 8.6 TRX MANAGEMENT MESSAGES */
4118 /* 8.6.1 RF RESOURCE INDICATION */
4119 case RSL_MSG_RF_RES_IND
: /* 24 8.6.1 */
4120 /* Resource Information 9.3.21 M TLV >=2 */
4121 offset
= dissect_rsl_ie_resource_inf(tvb
, pinfo
, tree
, offset
, true);
4123 /* 8.6.2 SACCH FILLING */
4124 case RSL_MSG_SACCH_FILL
: /* 25 8.6.2 */
4125 /* System Info Type 9.3.30 M TV 2 */
4126 offset
= dissect_rsl_ie_sys_info_type(tvb
, pinfo
, tree
, offset
, true, &sys_info_type
);
4127 /* L3 Info (SYS INFO) 9.3.11 O 1) TLV 22 */
4128 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4129 offset
= dissect_rsl_ie_L3_inf(tvb
, pinfo
, tree
, offset
, false,
4130 (sys_info_type
== 0x48) ? L3_INF_SACCH
: L3_INF_CCCH
);
4131 /* Starting Time 9.3.23 O 2) TV 3 */
4132 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4133 offset
= dissect_rsl_ie_starting_time(tvb
, pinfo
, tree
, offset
, false);
4135 case RSL_MSG_OVERLOAD
: /* 27 8.6.3 */
4136 /* Cause 9.3.26 M TLV >=3 */
4137 offset
= dissect_rsl_ie_cause(tvb
, pinfo
, tree
, offset
, true);
4139 case RSL_MSG_ERROR_REPORT
: /* 28 8.6.4 */
4140 /* Cause 9.3.26 M TLV >=3 */
4141 offset
= dissect_rsl_ie_cause(tvb
, pinfo
, tree
, offset
, true);
4142 /* Message Identifier 9.3.28 O 1) TV 2 */
4143 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4144 offset
= dissect_rsl_ie_message_id(tvb
, pinfo
, tree
, offset
, false);
4145 /* Channel Number 9.3.1 O 2) TV 2 */
4146 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4147 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, false);
4148 /* Link identifier 9.3.2 O 3) TV 2 */
4149 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4150 offset
= dissect_rsl_ie_link_id(tvb
, pinfo
, tree
, offset
, false);
4151 /* Erroneous Message 9.3.38 O 4) TLV >=3 */
4152 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4153 offset
= dissect_rsl_ie_err_msg(tvb
, pinfo
, tree
, offset
, false);
4155 /* 8.5.8 SMS BROADCAST COMMAND */
4156 case RSL_MSG_SMS_BC_CMD
: /* 29 8.5.8 */
4157 /* Channel number 9.3.1 M TV 2 */
4158 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4159 /* CB Command type 9.3.41 M TV 2 */
4160 offset
= dissect_rsl_ie_cb_cmd_type(tvb
, pinfo
, tree
, offset
, true);
4161 /* SMSCB message 9.3.42 M TLV 2-90 */
4162 offset
= dissect_rsl_ie_smscb_mess(tvb
, pinfo
, tree
, offset
, true);
4163 /* SMSCB Channel Indicator 9.3.44 O 1) TV 2 */
4164 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4165 offset
= dissect_rsl_ie_smscb_ch_ind(tvb
, pinfo
, tree
, offset
, false);
4167 case RSL_MSG_CBCH_LOAD_IND
: /* 30 8.5.9 */
4168 /* Channel number 9.3.1 M TV 2 */
4169 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4170 /* CBCH Load Information 9.3.43 M TV 2 */
4171 offset
= dissect_rsl_ie_cbch_load_inf(tvb
, pinfo
, tree
, offset
, true);
4172 /* SMSCB Channel Indicator 9.3.44 O 1) TV 2 */
4173 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4174 offset
= dissect_rsl_ie_smscb_ch_ind(tvb
, pinfo
, tree
, offset
, false);
4176 case RSL_MSG_NOT_CMD
: /* 31 8.5.10 */
4177 /* Channel number 9.3.1 M TV 2 */
4178 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4179 /* Command indicator 9.3.48 M 1) TLV 3-4 */
4180 offset
= dissect_rsl_ie_cmd_ind(tvb
, pinfo
, tree
, offset
, true);
4181 /* Group call reference 9.3.45 O TLV 7 */
4182 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4183 offset
= dissect_rsl_ie_grp_call_ref(tvb
, pinfo
, tree
, offset
, false);
4184 /* Channel Description 9.3.46 O TLV 3-n */
4185 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4186 offset
= dissect_rsl_ie_ch_desc(tvb
, pinfo
, tree
, offset
, false);
4187 /* NCH DRX information 9.3.47 O TLV 3 */
4188 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4189 offset
= dissect_rsl_ie_nch_drx(tvb
, pinfo
, tree
, offset
, false);
4192 /* Dedicated Channel Management messages: */
4193 /* 8.4.1 CHANNEL ACTIVATION 33*/
4194 case RSL_MSG_CHAN_ACTIV
:
4195 /* Channel number 9.3.1 M TV 2 */
4196 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4197 /* Activation Type 9.3.3 M TV 2 */
4198 offset
= dissect_rsl_ie_act_type(tvb
, pinfo
, tree
, offset
, true);
4199 /* Channel Mode 9.3.6 M TLV 8-9 */
4200 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4201 /* mandatory in 48.008, but not in Ericsson + Osmocom */
4202 offset
= dissect_rsl_ie_ch_mode(tvb
, pinfo
, tree
, offset
, true);
4203 /* Channel Identification 9.3.5 O 7) TLV 8 */
4204 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4205 offset
= dissect_rsl_ie_ch_id(tvb
, pinfo
, tree
, offset
, false);
4206 /* Encryption information 9.3.7 O 1) TLV >=3 */
4207 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4208 offset
= dissect_rsl_ie_enc_inf(tvb
, pinfo
, tree
, offset
, false);
4209 /* Handover Reference 9.3.9 C 2) TV 2 */
4210 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4211 offset
= dissect_rsl_ie_ho_ref(tvb
, pinfo
, tree
, offset
, false);
4212 /* BS Power 9.3.4 O 3) TV 2 */
4213 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4214 offset
= dissect_rsl_ie_bs_power(tvb
, pinfo
, tree
, offset
, false);
4215 /* MS Power 9.3.13 O 3) TV 2 */
4216 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4217 offset
= dissect_rsl_ie_ms_pow(tvb
, pinfo
, tree
, offset
, false);
4218 /* Timing Advance 9.3.24 C 3) 4) TV 2 */
4219 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4220 offset
= dissect_rsl_ie_timing_adv(tvb
, pinfo
, tree
, offset
, false);
4221 /* BS Power Parameters 9.3.32 O 5) TLV >=2 */
4222 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4223 offset
= dissect_rsl_ie_bs_power_params(tvb
, pinfo
, tree
, offset
, false);
4224 /* MS Power Parameters 9.3.31 O 5) TLV >=2 */
4225 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4226 offset
= dissect_rsl_ie_ms_pow_params(tvb
, pinfo
, tree
, offset
, false);
4227 /* Physical Context 9.3.16 O 6) TLV >=2 */
4228 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4229 offset
= dissect_rsl_ie_phy_ctx(tvb
, pinfo
, tree
, offset
, false);
4230 /* SACCH Information 9.3.29 O 8) TLV >=3 */
4231 /* UIC 9.3.50 O 9) TLV 3 */
4232 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4233 offset
= dissect_rsl_ie_uic(tvb
, pinfo
, tree
, offset
, false);
4234 /* Main channel reference 9.3.51 O 10) TV 2 */
4235 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4236 offset
= dissect_rsl_ie_main_ch_ref(tvb
, pinfo
, tree
, offset
, false);
4237 /* MultiRate configuration 9.3.52 O 11) TLV >=4 */
4238 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4239 offset
= dissect_rsl_ie_multirate_conf(tvb
, pinfo
, tree
, offset
, false);
4240 /* MultiRate Control 9.3.53 O 12) TV 2 */
4241 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4242 offset
= dissect_rsl_ie_multirate_cntrl(tvb
, pinfo
, tree
, offset
, false);
4243 /* Supported Codec Types 9.3.54 O 12) TLV >=5 */
4244 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4245 offset
= dissect_rsl_ie_sup_codec_types(tvb
, pinfo
, tree
, offset
, false);
4246 /* TFO transparent container 9.3.59 O 12) TLV >=3 */
4247 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4248 offset
= dissect_rsl_ie_tfo_transp_cont(tvb
, pinfo
, tree
, offset
, false);
4249 /* Osmocom specific IEs */
4250 if (global_rsl_use_osmo_bts
) {
4251 /* Repeated ACCH Capabilities O TLV */
4252 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4253 offset
= dissect_rsl_ie_osmo_rep_acch_cap(tvb
, pinfo
, tree
, offset
, false);
4254 /* Temporary ACCH Overpower Capabilities O TLV */
4255 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4256 offset
= dissect_rsl_ie_osmo_top_acch_cap(tvb
, pinfo
, tree
, offset
, false);
4257 /* Training Sequence O TLV 2 */
4258 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4259 offset
= dissect_rsl_ie_osmo_training_seq(tvb
, pinfo
, tree
, offset
, false);
4263 /* 8.4.2 CHANNEL ACTIVATION ACKNOWLEDGE 34*/
4264 case RSL_MSG_CHAN_ACTIV_ACK
:
4265 /* Channel number 9.3.1 M TV 2 */
4266 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4267 /* Frame number 9.3.8 M TV 3 */
4268 offset
= dissect_rsl_ie_frame_no(tvb
, pinfo
, tree
, offset
, true);
4270 case RSL_MSG_CHAN_ACTIV_N_ACK
:
4271 /* 8.4.3 CHANNEL ACTIVATION NEGATIVE ACKNOWLEDGE */
4272 /* Channel number 9.3.1 M TV 2 */
4273 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4274 /* Cause 9.3.26 M TLV >=3 */
4275 offset
= dissect_rsl_ie_cause(tvb
, pinfo
, tree
, offset
, true);
4277 /* 8.4.4 CONNECTION FAILURE INDICATION */
4278 case RSL_MSG_CONN_FAIL
:
4279 /* Channel number 9.3.1 M TV 2 */
4280 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4281 /* Cause 9.3.26 M TLV >=3 */
4282 offset
= dissect_rsl_ie_cause(tvb
, pinfo
, tree
, offset
, true);
4284 /* 8.4.5 DEACTIVATE SACCH */
4285 case RSL_MSG_DEACTIVATE_SACCH
:
4286 /* Channel number 9.3.1 M TV 2 */
4287 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4289 /* 8.4.6 ENCRYPTION COMMAND */
4290 case RSL_MSG_ENCR_CMD
: /* 38 8.4.6 */
4291 /* Channel number 9.3.1 M TV 2 */
4292 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4293 /* Encryption information 9.3.7 M TLV >=3 */
4294 offset
= dissect_rsl_ie_enc_inf(tvb
, pinfo
, tree
, offset
, true);
4295 /* Link Identifier 9.3.2 M TV 2 */
4296 offset
= dissect_rsl_ie_link_id(tvb
, pinfo
, tree
, offset
, true);
4297 /* L3 Info (CIPH MOD CMD) 9.3.11 M TLV 6 */
4298 offset
= dissect_rsl_ie_L3_inf(tvb
, pinfo
, tree
, offset
, true, L3_INF_OTHER
);
4300 /* 8.4.7 HANDOVER DETECTION */
4301 case RSL_MSG_HANDODET
: /* 39 8.4.7 */
4302 /* Channel number 9.3.1 M TV 2 */
4303 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4304 /* Access Delay 9.3.17 O 1) TV 2 */
4305 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4306 offset
= dissect_rsl_ie_access_delay(tvb
, pinfo
, tree
, offset
, false);
4307 /* Osmocom specific IEs */
4308 if (global_rsl_use_osmo_bts
) {
4309 /* Training Sequence O TLV 2 */
4310 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4311 offset
= dissect_rsl_ie_osmo_training_seq(tvb
, pinfo
, tree
, offset
, false);
4314 /* 8.4.8 MEASUREMENT RESULT 40 */
4315 case RSL_MSG_MEAS_RES
:
4316 /* Channel number 9.3.1 M TV 2 */
4317 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4318 /* Measurement result number 9.3.27 M TV 2 */
4319 offset
= dissect_rsl_ie_meas_res_no(tvb
, pinfo
, tree
, offset
, true);
4320 /* Uplink Measurements 9.3.25 M TLV >=5 */
4321 offset
= dissect_rsl_ie_uplik_meas(tvb
, pinfo
, tree
, offset
, true);
4322 /* BS Power 9.3.4 M TV 2 */
4323 offset
= dissect_rsl_ie_bs_power(tvb
, pinfo
, tree
, offset
, true);
4324 /* L1 Information 9.3.10 O 1) TV 3 */
4325 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4326 offset
= dissect_rsl_ie_l1_inf(tvb
, pinfo
, tree
, offset
, false);
4327 /* L3 Info (MEAS REP, EXT MEAS REP or ENH MEAS REP) 9.3.11 O 1) TLV 21 */
4328 if (tvb_reported_length_remaining(tvb
, offset
) > 3){
4329 /* Try to figure out of we have (MEAS REP, EXT MEAS REP or ENH MEAS REP) */
4330 if ( ( tvb_get_uint8(tvb
, offset
+3) & 0xFE ) == 0x10 ) {
4332 offset
= dissect_rsl_ie_L3_inf(tvb
, pinfo
, tree
, offset
, false, L3_INF_SACCH
);
4334 offset
= dissect_rsl_ie_L3_inf(tvb
, pinfo
, tree
, offset
, false, L3_INF_OTHER
);
4337 /* MS Timing Offset 9.3.37 O 2) TV 2 */
4338 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4339 offset
= dissect_rsl_ie_ms_timing_offset(tvb
, pinfo
, tree
, offset
, false);
4341 /* 8.4.9 MODE MODIFY */
4342 case RSL_MSG_MODE_MODIFY_REQ
: /* 41 8.4.9 */
4343 /* Channel number 9.3.1 M TV 2 */
4344 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4345 /* Channel Mode 9.3.6 M TLV 8-9 */
4346 offset
= dissect_rsl_ie_ch_mode(tvb
, pinfo
, tree
, offset
, true);
4347 /* Encryption information 9.3.7 O 1) TLV >=3 */
4348 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4349 offset
= dissect_rsl_ie_enc_inf(tvb
, pinfo
, tree
, offset
, false);
4350 /* Main channel reference 9.3.45 O 2) TV 2 */
4351 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4352 offset
= dissect_rsl_ie_main_ch_ref(tvb
, pinfo
, tree
, offset
, false);
4353 /* MultiRate configuration 9.3.52 O 3) TLV >=3 */
4354 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4355 offset
= dissect_rsl_ie_multirate_conf(tvb
, pinfo
, tree
, offset
, false);
4356 /* Multirate Control 9.3.53 O 4) TV 2 */
4357 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4358 offset
= dissect_rsl_ie_multirate_cntrl(tvb
, pinfo
, tree
, offset
, false);
4359 /* Supported Codec Types 9.3.54 O 4) TLV >=5 */
4360 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4361 offset
= dissect_rsl_ie_sup_codec_types(tvb
, pinfo
, tree
, offset
, false);
4362 /* TFO transparent container 9.3.59 O 4) TLV */
4363 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4364 offset
= dissect_rsl_ie_tfo_transp_cont(tvb
, pinfo
, tree
, offset
, false);
4365 /* Osmocom specific IEs */
4366 if (global_rsl_use_osmo_bts
) {
4367 /* Repeated ACCH Capabilities O TLV */
4368 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4369 offset
= dissect_rsl_ie_osmo_rep_acch_cap(tvb
, pinfo
, tree
, offset
, false);
4370 /* Temporary ACCH Overpower Capabilities O TLV */
4371 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4372 offset
= dissect_rsl_ie_osmo_top_acch_cap(tvb
, pinfo
, tree
, offset
, false);
4373 /* Training Sequence O TLV 2 */
4374 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4375 offset
= dissect_rsl_ie_osmo_training_seq(tvb
, pinfo
, tree
, offset
, false);
4378 /* 8.4.10 MODE MODIFY ACKNOWLEDGE */
4379 case RSL_MSG_MODE_MODIFY_ACK
: /* 42 8.4.10 */
4380 /* Channel number 9.3.1 M TV 2 */
4381 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4383 /* 8.4.11 MODE MODIFY NEGATIVE ACKNOWLEDGE */
4384 case RSL_MSG_MODE_MODIFY_NACK
: /* 43 8.4.11 */
4385 /* Channel number 9.3.1 M TV 2 */
4386 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4387 /* Cause 9.3.26 M TLV >=3 */
4388 offset
= dissect_rsl_ie_cause(tvb
, pinfo
, tree
, offset
, true);
4390 /* 8.4.12 PHYSICAL CONTEXT REQUEST */
4391 case RSL_MSG_PHY_CONTEXT_REQ
: /* 44 8.4.12 */
4392 /* Channel number 9.3.1 M TV 2 */
4393 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4395 /* 8.4.13 PHYSICAL CONTEXT CONFIRM */
4396 case RSL_MSG_PHY_CONTEXT_CONF
: /* 45 8.4.13 */
4397 /* Channel number 9.3.1 M TV 2 */
4398 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4399 /* BS Power 9.3.4 M TV 2 */
4400 offset
= dissect_rsl_ie_bs_power(tvb
, pinfo
, tree
, offset
, true);
4401 /* MS Power 9.3.13 M TV 2 */
4402 offset
= dissect_rsl_ie_ms_pow(tvb
, pinfo
, tree
, offset
, true);
4403 /* Timing Advance 9.3.24 M TV 2 */
4404 offset
= dissect_rsl_ie_timing_adv(tvb
, pinfo
, tree
, offset
, true);
4405 /* Physical Context 9.3.16 O 1) TLV */
4406 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4407 offset
= dissect_rsl_ie_phy_ctx(tvb
, pinfo
, tree
, offset
, false);
4409 /* 8.4.14 RF CHANNEL RELEASE */
4410 case RSL_MSG_RF_CHAN_REL
: /* 46 8.4.14 */
4411 /* Channel number 9.3.1 M TV 2 */
4412 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4414 /* 8.4.15 MS POWER CONTROL */
4415 case RSL_MSG_MS_POWER_CONTROL
: /* 47 8.4.15 */
4416 /* Channel number 9.3.1 M TV 2 */
4417 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4418 /* MS Power 9.3.13 M TV 2 */
4419 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4420 offset
= dissect_rsl_ie_ms_pow(tvb
, pinfo
, tree
, offset
, false);
4421 /* MS Power Parameters 9.3.31 O 1) TLV >=2 */
4422 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4423 offset
= dissect_rsl_ie_ms_pow_params(tvb
, pinfo
, tree
, offset
, false);
4425 /* 8.4.16 BS POWER CONTROL */
4426 case RSL_MSG_BS_POWER_CONTROL
: /* 48 8.4.16 */
4427 /* Channel number 9.3.1 M TV 2 */
4428 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4429 /* BS Power 9.3.4 M TV 2 */
4430 offset
= dissect_rsl_ie_bs_power(tvb
, pinfo
, tree
, offset
, true);
4431 /* BS Power Parameters 9.3.32 O 1) TLV >=2 */
4432 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4433 offset
= dissect_rsl_ie_bs_power_params(tvb
, pinfo
, tree
, offset
, false);
4435 /* 8.4.17 PREPROCESS CONFIGURE */
4436 case RSL_MSG_PREPROC_CONFIG
: /* 49 8.4.17 */
4437 /* Channel number 9.3.1 M TV 2 */
4438 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4439 /* Preproc. Parameters 9.3.33 M TLV >=3 */
4441 /* 8.4.18 PREPROCESSED MEASUREMENT RESULT */
4442 case RSL_MSG_PREPROC_MEAS_RES
: /* 50 8.4.18 */
4443 /* Channel number 9.3.1 M TV 2 */
4444 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4445 /* Preproc. Measurements 9.3.34 M TLV >=2 */
4447 /* 8.4.19 RF CHANNEL RELEASE ACKNOWLEDGE */
4448 case RSL_MSG_RF_CHAN_REL_ACK
: /* 51 8.4.19 */
4449 /* Channel number 9.3.1 M TV 2 */
4450 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4452 /* 8.4.20 SACCH INFO MODIFY */
4453 case RSL_MSG_SACCH_INFO_MODIFY
: /* 52 8.4.20 */
4454 /* Channel number 9.3.1 M TV 2 */
4455 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4456 /* System Info Type 9.3.30 M TV 2 */
4457 offset
= dissect_rsl_ie_sys_info_type(tvb
, pinfo
, tree
, offset
, true, &sys_info_type
);
4458 /* L3 Info 9.3.11 O 1) TLV 22 */
4459 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4460 offset
= dissect_rsl_ie_L3_inf(tvb
, pinfo
, tree
, offset
, false,
4461 (sys_info_type
== 0x48) ? L3_INF_SACCH
: L3_INF_CCCH
);
4462 /* Starting Time 9.3.23 O 2) TV 3 */
4463 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4464 offset
= dissect_rsl_ie_starting_time(tvb
, pinfo
, tree
, offset
, false);
4466 /* 8.4.21 TALKER DETECTION */
4467 case RSL_MSG_TALKER_DET
: /* 53 8.4.21 */
4468 /* Channel number 9.3.1 M TV 2 */
4469 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4470 /* Access Delay 9.3.17 O 1) TV 2 */
4471 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4472 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, false);
4474 /* 8.4.22 LISTENER DETECTION */
4475 case RSL_MSG_LISTENER_DET
: /* 54 8.4.22 */
4476 /* Channel number 9.3.1 M TV 2 */
4477 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4478 /* Access Delay 9.3.17 O 1) TV 2 */
4479 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4480 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, false);
4482 /* 8.4.23 REMOTE CODEC CONFIGURATION REPORT */
4483 case RSL_MSG_REMOTE_CODEC_CONF_REP
:/* 55 8.4.23 */
4484 /* Channel number 9.3.1 M TV 2 */
4485 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4486 /* Codec Configuration 9.3.55 M TLV >=3 */
4487 offset
= dissect_rsl_ie_codec_conf(tvb
, pinfo
, tree
, offset
, true);
4488 /* Supported Codec Types 9.3.54 M TLV >=5 */
4489 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4490 offset
= dissect_rsl_ie_sup_codec_types(tvb
, pinfo
, tree
, offset
, false);
4491 /* TFO transparent container 9.3.59 O 4) TLV >=3 */
4492 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4493 offset
= dissect_rsl_ie_tfo_transp_cont(tvb
, pinfo
, tree
, offset
, false);
4495 /* 8.4.24 ROUND TRIP DELAY REPORT */
4496 case RSL_MSG_R_T_D_REP
: /* 56 8.4.24 */
4497 /* Channel number 9.3.1 M TV 2 */
4498 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4499 /* Round Trip Delay 9.3.56 M TV 2 */
4500 offset
= dissect_rsl_ie_rtd(tvb
, pinfo
, tree
, offset
, true);
4502 /* 8.4.25 PRE-HANDOVER NOTIFICATION */
4503 case RSL_MSG_PRE_HANDO_NOTIF
: /* 57 8.4.25 */
4504 /* Channel number 9.3.1 M TV 2 */
4505 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4506 /* MultiRateControl 9.3.53 M TV 2 */
4507 offset
= dissect_rsl_ie_multirate_cntrl(tvb
, pinfo
, tree
, offset
, true);
4508 /* Codec Configuration 9.3.55 M TLV >=3 */
4509 offset
= dissect_rsl_ie_codec_conf(tvb
, pinfo
, tree
, offset
, true);
4510 /* TFO transparent container 9.3.59 O 4) TLV >=3 */
4511 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4512 offset
= dissect_rsl_ie_tfo_transp_cont(tvb
, pinfo
, tree
, offset
, false);
4514 /* 8.4.26 MULTIRATE CODEC MODIFICATION REQUEST */
4515 case RSL_MSG_MR_CODEC_MOD_REQ
: /* 58 8.4.26 */
4516 /* Channel number 9.3.1 M TV 2 */
4517 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4518 /* MultiRate Configuration 9.3.52 O 1) TLV >=4 */
4519 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4520 offset
= dissect_rsl_ie_multirate_conf(tvb
, pinfo
, tree
, offset
, false);
4522 /* 8.4.27 MULTIRATE CODEC MODIFICATION ACKNOWLEDGE */
4523 case RSL_MSG_MR_CODEC_MOD_ACK
: /* 59 8.4.27 */
4524 /* Channel number 9.3.1 M TV 2 */
4525 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4526 /* MultiRate Configuration 9.3.52 O 1) TLV >=4 */
4527 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4528 offset
= dissect_rsl_ie_multirate_conf(tvb
, pinfo
, tree
, offset
, false);
4530 /* 8.4.28 MULTIRATE CODEC MODIFICATION NEGATIVE ACKNOWLEDGE */
4531 case RSL_MSG_MR_CODEC_MOD_NACK
: /* 60 8.4.28 */
4532 /* Channel number 9.3.1 M TV 2 */
4533 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4534 /* Cause 9.3.26 M TLV >=3 */
4535 offset
= dissect_rsl_ie_cause(tvb
, pinfo
, tree
, offset
, true);
4537 /* 8.4.29 MULTIRATE CODEC MODIFICATION PERFORMED */
4538 case RSL_MSG_MR_CODEC_MOD_PER
: /* 61 8.4.29 */
4539 /* Channel number 9.3.1 M TV 2 */
4540 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4541 /* MultiRate Configuration 9.3.52 M TLV >=4 */
4542 offset
= dissect_rsl_ie_multirate_conf(tvb
, pinfo
, tree
, offset
, true);
4544 /* 8.4.30 TFO REPORT */
4545 case RSL_MSG_TFO_REP
: /* 62 8.4.30 */
4546 /* Channel number 9.3.1 M TV 2 */
4547 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4548 /* TFO Status 9.3.57 M TV 1 */
4549 offset
= dissect_rsl_ie_tfo_status(tvb
, pinfo
, tree
, offset
, true);
4551 /* 8.4.31 TFO MODIFICATION REQUEST */
4552 case RSL_MSG_TFO_MOD_REQ
: /* 63 8.4.31 */
4553 /* Channel number 9.3.1 M TV 2 */
4554 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4555 /* MultiRateControl 9.3.53 M TV 2 */
4556 offset
= dissect_rsl_ie_multirate_cntrl(tvb
, pinfo
, tree
, offset
, true);
4557 /* Supported Codec Type 9.3.54 O 1) TLV >=5 */
4558 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4559 offset
= dissect_rsl_ie_sup_codec_types(tvb
, pinfo
, tree
, offset
, false);
4560 /* TFO transparent container 9.3.59 O 4) TLV >=3 */
4561 if (tvb_reported_length_remaining(tvb
, offset
) > 0)
4562 offset
= dissect_rsl_ie_tfo_transp_cont(tvb
, pinfo
, tree
, offset
, false);
4564 /* 0 1 - - - - - - Location Services messages: */
4565 /* 8.7.1 LOCATION INFORMATION */
4566 case RSL_MSG_LOC_INF
: /* 65 8.7.1 */
4567 /* LLP APDU 9.3.58 M LV 2-N */
4568 offset
= dissect_rsl_ie_llp_apdu(tvb
, pinfo
, tree
, offset
, true);
4570 /* Encapsulating paging messages into a packet EP2192796 - proprietor Huawei */
4571 case RSL_MSG_TYPE_PAGING
:
4572 paging_package_number
= dissect_rsl_paging_package_number(tvb
, pinfo
, tree
, &offset
);
4573 offset
= dissect_rsl_paging_package(tvb
, pinfo
, tree
, offset
, paging_package_number
);
4575 case RSL_MSG_TYPE_OSMO_ETWS_CMD
:
4576 /* See http://ftp.osmocom.org/docs/latest/osmobts-abis.pdf Section 5.5 on ETWS */
4577 /* Channel number 9.3.1 M TV 2 */
4578 offset
= dissect_rsl_ie_ch_no(tvb
, pinfo
, tree
, offset
, true);
4579 /* ETWS PN (Osmocom) Osmo 5.6.17 M TLV 2-58 */
4580 offset
= dissect_rsl_ie_etws_pn(tvb
, pinfo
, tree
, offset
);
4582 /* the following messages are ip.access specific but sent without
4583 * ip.access memssage discriminator */
4584 case RSL_MSG_TYPE_IPAC_MEAS_PP_DEF
:
4585 case RSL_MSG_TYPE_IPAC_HO_CAND_INQ
:
4586 case RSL_MSG_TYPE_IPAC_HO_CAND_RESP
:
4587 case RSL_MSG_TYPE_IPAC_PDCH_ACT
:
4588 case RSL_MSG_TYPE_IPAC_PDCH_ACT_ACK
:
4589 case RSL_MSG_TYPE_IPAC_PDCH_ACT_NACK
:
4590 case RSL_MSG_TYPE_IPAC_PDCH_DEACT
:
4591 case RSL_MSG_TYPE_IPAC_PDCH_DEACT_ACK
:
4592 case RSL_MSG_TYPE_IPAC_PDCH_DEACT_NACK
:
4593 if (global_rsl_use_nano_bts
)
4594 offset
= dissct_rsl_ipaccess_msg(tvb
, pinfo
, tree
, offset
-1);
4598 decrement_dissection_depth(pinfo
);
4604 static const value_string rsl_ipacc_spm_s_vals
[] = {
4605 { 0, "GSM FR codec (GSM type 1, FS)" },
4606 { 1, "GSM EFR codec (GSM type 2, FS)" },
4607 { 2, "GSM AMR/FR codec (GSM type 3, FS)" },
4608 { 3, "GSM HR codec (GSM type 1, HS)" },
4609 { 5, "GSM AMR/HR codec (GSM type 3, HS)" },
4610 { 0xf, "As specified by RTP Payload Type IE" },
4614 static const value_string rsl_ipacc_spm_m_vals
[] = {
4615 { 0, "Send and Receive" },
4616 { 1, "Receive Only" },
4621 static const value_string rsl_ipacc_rtp_csd_fmt_d_vals
[] = {
4622 { 0, "External TRAU format" },
4623 { 1, "Non-TRAU Packed format" },
4624 { 2, "TRAU within the BTS" },
4625 { 3, "IWF-Free BTS-BTS Data" },
4629 static const value_string rsl_ipacc_rtp_csd_fmt_ir_vals
[] = {
4637 /* GSM 04.08 9.1.8 Channel request, ESTABLISHMENT CAUSE */
4639 req_ref_ra_est_cause_convert(char *result
, uint32_t ra
)
4643 switch (ra
& 0xe0) { /* 3 bit Establishment Cause codes */
4645 str
= "Location updating and the network does not set NECI bit to 1";
4648 str
= "Answer to paging: 'Any Channel', or ('TCH/F' or 'TCH/H or TCH/F') if MS is 'Full rate only'";
4651 str
= "Emergency call";
4654 str
= "Call re-establishment; TCH/F was in use, or TCH/H was in use but the network does not set NECI bit to 1";
4657 str
= "Originating call and TCH/F is needed, or originating call and the network does not set NECI bit to 1,"
4658 " or procedures that can be completed with a SDCCH and the network does not set NECI bit to 1";
4662 switch (ra
& 0xf0) { /* 4 bit Establishment Cause codes */
4664 str
= "Location updating and the network sets NECI bit to 1";
4667 str
= "Answer to paging: 'SDCCH' / Other procedures which can be completed with an SDCCH and the network sets NECI bit to 1";
4670 str
= "Answer to paging: MS is dual rate capable and requests 'TCH/F' only";
4673 str
= "Answer to paging: MS is dual rate capable and requests 'TCH/H or TCH/F'";
4676 str
= "Originating speech call from dual-rate mobile station when TCH/H is sufficient and the network sets NECI bit to 1";
4679 str
= "Originating data call from dual-rate mobile station when TCH/H is sufficient and the network sets NECI bit to 1";
4682 str
= "Reserved for future use. An SDCCH may be allocated";
4686 switch (ra
& 0xf8) { /* 5 bit Establishment Cause codes */
4688 str
= "Reserved for future use. An SDCCH may be allocated";
4692 switch (ra
& 0xfc) { /* 6 bit Establishment Cause codes */
4694 str
= "Call re-establishment; TCH/H was in use and the network sets NECI bit to 1";
4697 str
= "Call re-establishment; TCH/H + TCH/H was in use and the network sets NECI bit to 1";
4701 snprintf(result
, ITEM_LABEL_LENGTH
, "unknown ra %u", ra
);
4705 snprintf(result
, ITEM_LABEL_LENGTH
, "%s", str
);
4709 dissect_rsl(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *data _U_
)
4712 proto_tree
*rsl_tree
;
4718 col_set_str(pinfo
->cinfo
, COL_PROTOCOL
, "RSL");
4719 col_clear(pinfo
->cinfo
, COL_INFO
);
4721 msg_type
= tvb_get_uint8(tvb
, offset
+1) & 0x7f;
4723 col_append_fstr(pinfo
->cinfo
, COL_INFO
, "%s ", val_to_str_ext(msg_type
, &rsl_msg_type_vals_ext
, "unknown %u"));
4726 ti
= proto_tree_add_item(tree
, proto_rsl
, tvb
, 0, -1, ENC_NA
);
4728 /* if nanoBTS specific vendor messages are not enabled, skip */
4729 if (!global_rsl_use_nano_bts
) {
4730 uint8_t msg_disc
= tvb_get_uint8(tvb
, offset
) >> 1;
4732 if (msg_disc
== RSL_MSGDISC_IPACCESS
)
4735 rsl_tree
= proto_item_add_subtree(ti
, ett_rsl
);
4737 /* 9.1 Message discriminator */
4738 proto_tree_add_item(rsl_tree
, hf_rsl_msg_dsc
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
4739 proto_tree_add_item(rsl_tree
, hf_rsl_T_bit
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
4741 offset
= dissct_rsl_msg(tvb
, pinfo
, rsl_tree
, offset
);
4746 /* Register the protocol with Wireshark */
4747 void proto_register_rsl(void)
4749 /* Setup list of header fields */
4750 static hf_register_info hf
[] = {
4752 { "Message discriminator", "gsm_abis_rsl.msg_dsc",
4753 FT_UINT8
, BASE_DEC
, VALS(rsl_msg_disc_vals
), 0xfe,
4757 { "T bit", "gsm_abis_rsl.T_bit",
4758 FT_BOOLEAN
, 8, TFS(&rsl_t_bit_vals
), 0x01,
4762 { "Message type", "gsm_abis_rsl.msg_type",
4763 FT_UINT8
, BASE_HEX_DEC
|BASE_EXT_STRING
, &rsl_msg_type_vals_ext
, 0x7f,
4767 { "Element identifier", "gsm_abis_rsl.ie_id",
4768 FT_UINT8
, BASE_HEX_DEC
|BASE_EXT_STRING
, &rsl_ie_type_vals_ext
, 0x0,
4771 { &hf_rsl_ie_length
,
4772 { "Length", "gsm_abis_rsl.ie_length",
4773 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
4776 { &hf_rsl_ch_no_Cbits
,
4777 { "C-bits", "gsm_abis_rsl.ch_no_Cbits",
4778 FT_UINT8
, BASE_DEC
|BASE_EXT_STRING
, &rsl_ch_no_Cbits_vals_ext
, 0xf8,
4782 { "Time slot number (TN)", "gsm_abis_rsl.ch_no_TN",
4783 FT_UINT8
, BASE_DEC
, NULL
, 0x07,
4787 { "Round Trip Delay (RTD)", "gsm_abis_rsl.rtd",
4788 FT_UINT8
, BASE_DEC
, NULL
, 0xfe,
4791 { &hf_rsl_delay_ind
,
4792 { "Delay IND", "gsm_abis_rsl.delay_ind",
4793 FT_UINT8
, BASE_DEC
, VALS(rsl_delay_ind_vals
), 0x01,
4797 { "TFO", "gsm_abis_rsl.tfo",
4798 FT_BOOLEAN
, 8, TFS(&rsl_tfo_vals
), 0x01,
4801 { &hf_rsl_req_ref_ra
,
4802 { "Random Access Information (RA)", "gsm_abis_rsl.req_ref_ra",
4803 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
4806 { &hf_rsl_req_ref_ra_est_cause
,
4807 { "Channel Request Establishment Cause", "gsm_abis_rsl.req_ref_ra.est_cause",
4808 FT_UINT8
, BASE_CUSTOM
, CF_FUNC(req_ref_ra_est_cause_convert
), 0x0,
4811 { &hf_rsl_req_ref_T1prim
,
4812 { "T1'", "gsm_abis_rsl.req_ref_T1prim",
4813 FT_UINT8
, BASE_DEC
, NULL
, 0xf8,
4816 { &hf_rsl_req_ref_T3
,
4817 { "T3", "gsm_abis_rsl.req_ref_T3",
4818 FT_UINT16
, BASE_DEC
, NULL
, 0x07e0,
4821 { &hf_rsl_req_ref_T2
,
4822 { "T2", "gsm_abis_rsl.req_ref_T2",
4823 FT_UINT8
, BASE_DEC
, NULL
, 0x1f,
4826 { &hf_rsl_req_ref_rfn
,
4827 { "RFN", "gsm_abis_rsl.req_ref_rfn",
4828 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
4829 "Reduced Frame Number", HFILL
}
4831 { &hf_rsl_timing_adv
,
4832 { "Timing Advance", "gsm_abis_rsl.timing_adv",
4833 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
4837 { "Hand-over reference", "gsm_abis_rsl.ho_ref",
4838 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
4841 { &hf_rsl_l1inf_power_lev
,
4842 { "MS power level", "gsm_abis_rsl.ms_power_lev",
4843 FT_UINT8
, BASE_DEC
, NULL
, 0xf8,
4846 { &hf_rsl_l1inf_fpc
,
4847 { "FPC/EPC", "gsm_abis_rsl.ms_fpc",
4848 FT_BOOLEAN
, 8, TFS(&tfs_inuse_not_inuse
), 0x04,
4851 { &hf_rsl_l1inf_srr
,
4852 { "SRR (SACCH Repetition)", "gsm_abis_rsl.srr",
4853 FT_BOOLEAN
, 8, TFS(&tfs_required_not_required
), 0x02,
4856 { &hf_rsl_ms_power_lev
,
4857 { "MS power level", "gsm_abis_rsl.ms_power_lev",
4858 FT_UINT8
, BASE_DEC
, NULL
, 0x1f,
4862 { "FPC/EPC", "gsm_abis_rsl.ms_fpc",
4863 FT_BOOLEAN
, 8, TFS(&tfs_inuse_not_inuse
), 0x20,
4866 { &hf_rsl_act_timing_adv
,
4867 { "Actual Timing Advance", "gsm_abis_rsl.act_timing_adv",
4868 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
4872 { "DTXd", "gsm_abis_rsl.dtxd",
4873 FT_BOOLEAN
, 8, TFS(&rsl_dtxd_vals
), 0x40,
4876 { &hf_rsl_rxlev_full_up
,
4877 { "RXLEV.FULL.up", "gsm_abis_rsl.rxlev_full_up",
4878 FT_UINT8
, BASE_DEC
|BASE_EXT_STRING
, &gsm_a_rr_rxlev_vals_ext
, 0x3f,
4881 { &hf_rsl_rxlev_sub_up
,
4882 { "RXLEV.SUB.up", "gsm_abis_rsl.rxlev_sub_up",
4883 FT_UINT8
, BASE_DEC
|BASE_EXT_STRING
, &gsm_a_rr_rxlev_vals_ext
, 0x3f,
4886 { &hf_rsl_rxqual_full_up
,
4887 { "RXQUAL.FULL.up", "gsm_abis_rsl.rxqual_full_up",
4888 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_rxqual_vals
), 0x38,
4891 { &hf_rsl_rxqual_sub_up
,
4892 { "RXQUAL.SUB.up", "gsm_abis_rsl.rxqual_sub_up",
4893 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_rxqual_vals
), 0x07,
4896 { &hf_rsl_acc_delay
,
4897 { "Access Delay", "gsm_abis_rsl.acc_del",
4898 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
4901 { &hf_rsl_rach_slot_cnt
,
4902 { "RACH Slot Count", "gsm_abis_rsl.rach_slot_cnt",
4903 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
4906 { &hf_rsl_rach_busy_cnt
,
4907 { "RACH Busy Count", "gsm_abis_rsl.rach_busy_cnt",
4908 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
4911 { &hf_rsl_rach_acc_cnt
,
4912 { "RACH Access Count", "gsm_abis_rsl.rach_acc_cnt",
4913 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
4917 { "Physical Context", "gsm_abis_rsl.phy_ctx",
4918 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4922 { "Not applicable (NA)", "gsm_abis_rsl.na",
4923 FT_BOOLEAN
, 8, TFS(&rsl_na_vals
), 0x20,
4927 { "channel type", "gsm_abis_rsl.ch_type",
4928 FT_UINT8
, BASE_DEC
, VALS(rsl_ch_type_vals
), 0xc0,
4932 { "Priority", "gsm_abis_rsl.prio",
4933 FT_UINT8
, BASE_DEC
, VALS(rsl_prio_vals
), 0x18,
4937 { "SAPI", "gsm_abis_rsl.sapi",
4938 FT_UINT8
, BASE_DEC
, NULL
, 0x07,
4942 { "R", "gsm_abis_rsl.rbit",
4943 FT_BOOLEAN
, 8, TFS(&rsl_rbit_vals
), 0x80,
4947 { "A3A2", "gsm_abis_rsl.a3a2",
4948 FT_UINT8
, BASE_DEC
, VALS(rsl_a3a2_vals
), 0x06,
4952 { "A1", "gsm_abis_rsl.a1_0",
4953 FT_BOOLEAN
, 8, TFS(&rsl_a1_0_vals
), 0x01,
4957 { "A1", "gsm_abis_rsl.a1_1",
4958 FT_BOOLEAN
, 8, TFS(&rsl_a1_1_vals
), 0x01,
4962 { "A1", "gsm_abis_rsl.a2_0",
4963 FT_BOOLEAN
, 8, TFS(&rsl_a1_2_vals
), 0x01,
4967 { "EPC mode", "gsm_abis_rsl.epc_mode",
4968 FT_BOOLEAN
, 8, TFS(&rsl_epc_mode_vals
), 0x20,
4971 { &hf_rsl_bs_fpc_epc_mode
,
4972 { "FPC-EPC mode", "gsm_abis_rsl.fpc_epc_mode",
4973 FT_BOOLEAN
, 8, TFS(&rsl_fpc_epc_mode_vals
), 0x10,
4977 { "Power Level", "gsm_abis_rsl.bs_power",
4978 FT_UINT8
, BASE_DEC
|BASE_EXT_STRING
, &rsl_rlm_bs_power_vals_ext
, 0x0f,
4982 { "DTXd", "gsm_abis_rsl.cm_dtxd",
4983 FT_BOOLEAN
, 8, TFS(&rsl_dtx_vals
), 0x02,
4987 { "DTXu", "gsm_abis_rsl.cm_dtxu",
4988 FT_BOOLEAN
, 8, TFS(&rsl_dtx_vals
), 0x01,
4991 { &hf_rsl_speech_or_data
,
4992 { "Speech or data indicator", "gsm_abis_rsl.speech_or_data",
4993 FT_UINT8
, BASE_DEC
, VALS(rsl_speech_or_data_vals
), 0x0,
4996 { &hf_rsl_ch_rate_and_type
,
4997 { "Channel rate and type", "gsm_abis_rsl.ch_rate_and_type",
4998 FT_UINT8
, BASE_DEC
|BASE_EXT_STRING
, &rsl_ch_rate_and_type_vals_ext
, 0x0,
5001 { &hf_rsl_speech_coding_alg
,
5002 { "Speech coding algorithm", "gsm_abis_rsl.speech_coding_alg",
5003 FT_UINT8
, BASE_DEC
, VALS(rsl_speech_coding_alg_vals
), 0x0,
5007 { "Transparent indication", "gsm_abis_rsl.t_nt_bit",
5008 FT_BOOLEAN
, 8, TFS(&t_nt_bit_vals
), 0x40,
5011 { &hf_rsl_ra_if_data_rte
,
5012 { "Radio interface data rate", "gsm_abis_rsl.ra_if_data_rte",
5013 FT_UINT8
, BASE_DEC
, VALS(rsl_ra_if_data_rte_vals
), 0x3f,
5017 { "Data rate", "gsm_abis_rsl.data_rte",
5018 FT_UINT8
, BASE_DEC
, VALS(rsl_data_rte_vals
), 0x3f,
5022 { "Algorithm Identifier", "gsm_abis_rsl.alg_id",
5023 FT_UINT8
, BASE_DEC
, VALS(rsl_algorithm_id_vals
), 0x0,
5027 { "KEY", "gsm_abis_rsl.key",
5028 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
5032 { "Cause", "gsm_abis_rsl.cause",
5033 FT_UINT8
, BASE_DEC
|BASE_EXT_STRING
, &rsl_rlm_cause_vals_ext
, 0x7f,
5037 { "Release Mode", "gsm_abis_rsl.rel_mode",
5038 FT_UINT8
, BASE_DEC
, VALS(rel_mode_vals
), 0x01,
5041 { &hf_rsl_interf_band
,
5042 { "Interf Band", "gsm_abis_rsl.interf_band",
5043 FT_UINT8
, BASE_DEC
, NULL
, 0xe0,
5046 { &hf_rsl_interf_band_reserved
,
5047 { "Interf Band reserved bits", "gsm_abis_rsl.interf_band_reserved",
5048 FT_UINT8
, BASE_DEC
, NULL
, 0x1f,
5051 { &hf_rsl_meas_res_no
,
5052 { "Measurement result number", "gsm_abis_rsl.meas_res_no",
5053 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
5056 { &hf_rsl_extension_bit
,
5057 { "Extension", "gsm_abis_rsl.extension_bit",
5058 FT_BOOLEAN
, 8, TFS(&rsl_extension_bit_value
), 0x80,
5061 { "Class", "gsm_abis_rsl.class",
5062 FT_UINT8
, BASE_DEC
, VALS(rsl_class_vals
), 0x70,
5065 { &hf_rsl_cause_value
,
5066 { "Cause Value", "gsm_abis_rsl.cause_value",
5067 FT_UINT8
, BASE_DEC
|BASE_EXT_STRING
, &rsl_cause_value_vals_ext
, 0x7f,
5070 { &hf_rsl_paging_grp
,
5071 { "Paging Group", "gsm_abis_rsl.paging_grp",
5072 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
5075 { &hf_rsl_paging_load
,
5076 { "Paging Buffer Space", "gsm_abis_rsl.paging_load",
5077 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
5080 { &hf_rsl_sys_info_type
,
5081 { "System Info Type", "gsm_abis_rsl.sys_info_type",
5082 FT_UINT8
, BASE_DEC
|BASE_EXT_STRING
, &rsl_sys_info_type_vals_ext
, 0x0,
5085 { &hf_rsl_timing_offset
,
5086 { "Timing Offset", "gsm_abis_rsl.timing_offset",
5087 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
5090 { &hf_rsl_ch_needed
,
5091 { "Channel Needed", "gsm_abis_rsl.ch_needed",
5092 FT_UINT8
, BASE_DEC
, VALS(rsl_ch_needed_vals
), 0x03,
5095 { &hf_rsl_cbch_load_type
,
5096 { "CBCH Load Type", "gsm_abis_rsl.cbch_load_type",
5097 FT_BOOLEAN
, 8, TFS(&rsl_cbch_load_type_vals
), 0x80,
5100 { &hf_rsl_msg_slt_cnt
,
5101 { "Message Slot Count", "gsm_abis_rsl.sg_slt_cnt",
5102 FT_UINT8
, BASE_DEC
, NULL
, 0x0f,
5106 { "Channel Ind", "gsm_abis_rsl.ch_ind",
5107 FT_UINT8
, BASE_DEC
, VALS(rsl_ch_ind_vals
), 0x0f,
5111 { "Command", "gsm_abis_rsl.cmd",
5112 FT_UINT8
, BASE_DEC
, NULL
, 0x7f,
5115 { &hf_rsl_command_ext
,
5116 { "Command (extended)", "gsm_abis_rsl.cmd_ext",
5117 FT_UINT16
, BASE_DEC
, NULL
, 0x7fff,
5120 { &hf_rsl_emlpp_prio
,
5121 { "eMLPP Priority", "gsm_abis_rsl.emlpp_prio",
5122 FT_UINT8
, BASE_DEC
, VALS(rsl_emlpp_prio_vals
), 0x07,
5125 { &hf_rsl_speech_mode_s
,
5126 { "ip.access Speech Mode S", "gsm_abis_rsl.ipacc.speech_mode_s",
5127 FT_UINT8
, BASE_HEX
, VALS(rsl_ipacc_spm_s_vals
),
5130 { &hf_rsl_speech_mode_m
,
5131 { "ip.access Speech Mode M", "gsm_abis_rsl.ipacc.speech_mode_m",
5132 FT_UINT8
, BASE_HEX
, VALS(rsl_ipacc_spm_m_vals
),
5136 { "ip.access Connection ID", "gsm_abis_rsl.ipacc.conn_id",
5137 FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
}
5139 { &hf_rsl_rtp_payload
,
5140 { "ip.access RTP Payload Type", "gsm_abis_rsl.ipacc.rtp_payload",
5141 FT_UINT8
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
}
5143 { &hf_rsl_rtp_csd_fmt_d
,
5144 { "ip.access RTP CSD Format D", "gsm_abis_rsl.ipacc.rtp_csd_fmt_d",
5145 FT_UINT8
, BASE_HEX
, VALS(rsl_ipacc_rtp_csd_fmt_d_vals
),
5146 0x0f, NULL
, HFILL
},
5148 { &hf_rsl_rtp_csd_fmt_ir
,
5149 { "ip.access RTP CSD Format IR", "gsm_abis_rsl.ipacc.rtp_csd_fmt_ir",
5150 FT_UINT8
, BASE_HEX
, VALS(rsl_ipacc_rtp_csd_fmt_ir_vals
),
5151 0xf0, NULL
, HFILL
},
5153 { &hf_rsl_local_port
,
5154 { "ip.access Local RTP Port", "gsm_abis_rsl.ipacc.local_port",
5155 FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
},
5157 { &hf_rsl_remote_port
,
5158 { "ip.access Remote RTP Port", "gsm_abis_rsl.ipacc.remote_port",
5159 FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
},
5162 { "ip.access Local IP Address", "gsm_abis_rsl.ipacc.local_ip",
5163 FT_IPv4
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
},
5165 { &hf_rsl_remote_ip
,
5166 { "ip.access Remote IP Address", "gsm_abis_rsl.ipacc.remote_ip",
5167 FT_IPv4
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
},
5169 { &hf_rsl_cstat_tx_pkts
,
5170 { "Packets Sent", "gsm_abis_rsl.ipacc.cstat.tx_pkts",
5171 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}
5173 { &hf_rsl_cstat_tx_octs
,
5174 { "Octets Sent", "gsm_abis_rsl.ipacc.cstat.tx_octets",
5175 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}
5177 { &hf_rsl_cstat_rx_pkts
,
5178 { "Packets Received", "gsm_abis_rsl.ipacc.cstat.rx_pkts",
5179 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}
5181 { &hf_rsl_cstat_rx_octs
,
5182 { "Octets Received", "gsm_abis_rsl.ipacc.cstat.rx_octets",
5183 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}
5185 { &hf_rsl_cstat_lost_pkts
,
5186 { "Packets Lost", "gsm_abis_rsl.ipacc.cstat.lost_pkts",
5187 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}
5189 { &hf_rsl_cstat_ia_jitter
,
5190 { "Inter-arrival Jitter", "gsm_abis_rsl.ipacc.cstat.ia_jitter",
5191 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}
5193 { &hf_rsl_cstat_avg_tx_dly
,
5194 { "Average Tx Delay", "gsm_abis_rsl.ipacc.cstat.avg_tx_delay",
5195 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
}
5197 /* Encapsulating paging messages into a packet EP2192796 - proprietor Huawei */
5198 { &hf_rsl_paging_spare
,
5199 { "SPARE", "gsm_abis_rsl.paging_spare",
5200 FT_UINT8
, BASE_DEC
, NULL
, 0xf0,
5203 { &hf_rsl_paging_msg_no
,
5204 { "Paging Msg Number", "gsm_abis_rsl.paging_msg_no",
5205 FT_UINT8
, BASE_DEC
, NULL
, 0x0f,
5208 { &hf_rsl_paging_package_ch_no
,
5209 { "Channel Number Downlink CCCH (PCH + AGCH)", "gsm_abis_rsl.paging_package_ch_no",
5210 FT_UINT8
, BASE_DEC
, NULL
, 0xe0,
5213 { &hf_rsl_paging_package_ch_needed
,
5214 { "Channel Needed", "gsm_abis_rsl.paging_package_ch_needed",
5215 FT_UINT8
, BASE_DEC
, VALS(rsl_paging_ch_needed_vals
), 0x18,
5218 { &hf_rsl_paging_emlpp_prio
,
5219 { "eMLPP Priority", "gsm_abis_rsl.paging_emlpp_prio",
5220 FT_UINT8
, BASE_DEC
, VALS(rsl_paging_emlpp_prio_vals
), 0x07,
5223 { &hf_rsl_paging_type
,
5224 { "Paging Type", "gsm_abis_rsl.paging_type",
5225 FT_BOOLEAN
, 8, TFS(&rsl_paging_type_vals
), 0x80,
5228 { &hf_rsl_paging_group_cs
,
5229 { "Paging Group", "gsm_abis_rsl.paging_group_cs",
5230 FT_UINT8
, BASE_DEC
, NULL
, 0x7f,
5233 { &hf_rsl_paging_group_empty_package
,
5234 { "Empty package Paging Group", "gsm_abis_rsl.paging_group_empty_package",
5235 FT_UINT8
, BASE_HEX
, NULL
, 0xff,
5238 { &hf_rsl_paging_group_ps_spare
,
5239 { "PS Paging Group SPARE", "gsm_abis_rsl.paging_group_ps_spare",
5240 FT_UINT8
, BASE_DEC
, NULL
, 0x7f,
5243 /* Physical Context */
5244 { &hf_rsl_phy_ctx_ie_id
,
5245 { "Element identifier", "gsm_abis_rsl.phy_ctx_ie_id",
5246 FT_UINT8
, BASE_HEX_DEC
|BASE_EXT_STRING
, &rsl_phy_con_ie_vals_ext
, 0x0,
5249 { &hf_rsl_phy_ctx_ext_rand_access
,
5250 { "RandRef11bit", "gsm_abis_rsl.phy_ctx_ext_rand_access",
5251 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
5254 { &hf_rsl_phy_ctx_ab_rx_lvl
,
5255 { "AB Rx Level", "gsm_abis_rsl.phy_ctx_ab_rx_lvl",
5256 FT_UINT8
, BASE_HEX_DEC
, NULL
, 0xff,
5259 { &hf_rsl_phy_ctx_ab_err_bits
,
5260 { "Training Err Bits", "gsm_abis_rsl.phy_ctx_ab_err_bits",
5261 FT_UINT8
, BASE_HEX
, NULL
, 0xff,
5264 { &hf_rsl_phy_ctx_rx_lvl_ext
,
5265 { "Rx Level Ext", "gsm_abis_rsl.phy_ctx_rx_lvl_ext",
5266 FT_UINT8
, BASE_HEX_DEC
, NULL
, 0xff,
5269 { &hf_rsl_cb_cmd_type
,
5270 { "CB Command", "gsm_abis_rsl.cb_cmd_type.command",
5271 FT_UINT8
, BASE_HEX
, VALS(rsl_cb_cmd_type_vals
), 0xf0,
5274 { &hf_rsl_cb_def_bcast
,
5275 { "CB Default Broadcast", "gsm_abis_rsl.cb_cmd_type.def_bcast",
5276 FT_UINT8
, BASE_HEX
, VALS(rsl_cb_cmd_type_def_bcast_vals
), 0x08,
5279 { &hf_rsl_cb_last_block
,
5280 { "CB Last Block", "gsm_abis_rsl.cb_cmd_type.last_block",
5281 FT_UINT8
, BASE_HEX
, VALS(rsl_cb_cmd_type_last_block_vals
), 0x03,
5285 { "ETWS Primary Notification", "gsm_abis_rsl.etws_pn",
5286 FT_BYTES
, BASE_NONE
, NULL
, 0,
5289 { &hf_rsl_osmo_rep_acch_rxqual
,
5290 { "RxQual Threshold", "gsm_abis_rsl.osmo_rep_acch.rxqual",
5291 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_rxqual_vals
), 0x70,
5294 { &hf_rsl_osmo_rep_acch_ul_sacch
,
5295 { "Uplink SACCH", "gsm_abis_rsl.osmo_rep_acch.ul_sacch",
5296 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x08,
5299 { &hf_rsl_osmo_rep_acch_dl_sacch
,
5300 { "Downlink SACCH", "gsm_abis_rsl.osmo_rep_acch.dl_sacch",
5301 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x04,
5304 { &hf_rsl_osmo_rep_acch_dl_facch_all
,
5305 { "Downlink FACCH (all LDPDm message types)",
5306 "gsm_abis_rsl.osmo_rep_acch.dl_facch_all",
5307 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x02,
5310 { &hf_rsl_osmo_rep_acch_dl_facch_cmd
,
5311 { "Downlink FACCH (LAPDm commands only)",
5312 "gsm_abis_rsl.osmo_rep_acch.dl_facch_cmd",
5313 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x01,
5316 { &hf_rsl_osmo_top_acch_val
,
5317 { "Overpower value", "gsm_abis_rsl.osmo_top_acch.val",
5318 FT_UINT8
, BASE_DEC
| BASE_UNIT_STRING
, UNS(&units_decibels
), 0x07,
5321 { &hf_rsl_osmo_top_acch_rxqual
,
5322 { "Uplink RxQual threshold", "gsm_abis_rsl.osmo_top_acch.rxqual",
5323 FT_UINT8
, BASE_DEC
, VALS(gsm_a_rr_rxqual_vals
), 0x38,
5326 { &hf_rsl_osmo_top_acch_facch
,
5327 { "FACCH Overpower", "gsm_abis_rsl.osmo_top_acch.facch",
5328 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x40,
5331 { &hf_rsl_osmo_top_acch_sacch
,
5332 { "SACCH Overpower", "gsm_abis_rsl.osmo_top_acch.sacch",
5333 FT_BOOLEAN
, 8, TFS(&tfs_enabled_disabled
), 0x80,
5336 { &hf_rsl_osmo_tsc_set
,
5337 { "Training Sequence Set", "gsm_abis_rsl.osmo_tsc_set",
5338 FT_UINT8
, BASE_DEC
, VALS(rsl_osmo_tsc_set_vals
), 0,
5341 { &hf_rsl_osmo_tsc_val
,
5342 { "Training Sequence Code", "gsm_abis_rsl.osmo_tsc_val",
5343 FT_UINT8
, BASE_DEC
, NULL
, 0,
5346 { &hf_rsl_osmo_osmux_cid
,
5347 { "Osmux CID", "gsm_abis_rsl.osmo_osmux_cid",
5348 FT_UINT8
, BASE_DEC
, NULL
, 0,
5351 /* Generated from convert_proto_tree_add_text.pl */
5352 { &hf_rsl_channel_description_tag
, { "Channel Description Tag", "gsm_abis_rsl.channel_description_tag", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
}},
5353 { &hf_rsl_mobile_allocation_tag
, { "Mobile Allocation Tag", "gsm_abis_rsl.mobile_allocation_tag", FT_UINT8
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
}},
5354 { &hf_rsl_mobile_allocation_len
, { "Mobile Allocation Length", "gsm_abis_rsl.mobile_allocation_len", FT_UINT8
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
}},
5355 { &hf_rsl_no_resources_required
, { "0 No resources required(All other values are reserved)", "gsm_abis_rsl.no_resources_required", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
}},
5356 { &hf_rsl_llsdu_ccch
, { "Link Layer Service Data Unit (L3 Message)(CCCH)", "gsm_abis_rsl.llsdu.ccch", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
}},
5357 { &hf_rsl_llsdu_sacch
, { "Link Layer Service Data Unit (L3 Message)(SACCH)", "gsm_abis_rsl.llsdu.sacch", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
}},
5358 { &hf_rsl_llsdu
, { "Link Layer Service Data Unit (L3 Message)", "gsm_abis_rsl.llsdu", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
}},
5359 { &hf_rsl_rach_supplementary_information
, { "Supplementary Information", "gsm_abis_rsl.supplementary_information", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
}},
5360 { &hf_rsl_full_immediate_assign_info_field
, { "Full Immediate Assign Info field", "gsm_abis_rsl.full_immediate_assign_info_field", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
}},
5361 { &hf_rsl_layer_3_message
, { "Layer 3 message", "gsm_abis_rsl.layer_3_message", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
}},
5362 { &hf_rsl_descriptive_group_or_broadcast_call_reference
, { "Descriptive group or broadcast call reference", "gsm_abis_rsl.descriptive_group_or_broadcast_call_reference", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
}},
5363 { &hf_rsl_group_channel_description
, { "Group Channel Description", "gsm_abis_rsl.group_channel_description", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
}},
5364 { &hf_rsl_uic
, { "UIC", "gsm_abis_rsl.uic", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
}},
5365 { &hf_rsl_codec_list
, { "Codec List", "gsm_abis_rsl.codec_list", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
}},
5367 static int *ett
[] = {
5372 &ett_ie_bs_power_params
,
5383 &ett_ie_ms_pow_params
,
5386 &ett_ie_paging_load
,
5387 &ett_ie_access_delay
,
5392 &ett_ie_resource_inf
,
5394 &ett_ie_staring_time
,
5396 &ett_ie_uplink_meas
,
5397 &ett_ie_full_imm_ass_inf
,
5399 &ett_ie_ms_timing_offset
,
5401 &ett_ie_full_bcch_inf
,
5403 &ett_ie_cb_cmd_type
,
5405 &ett_ie_cbch_load_inf
,
5406 &ett_ie_smscb_ch_ind
,
5407 &ett_ie_grp_call_ref
,
5413 &ett_ie_main_ch_ref
,
5414 &ett_ie_multirate_conf
,
5415 &ett_ie_multirate_cntrl
,
5416 &ett_ie_sup_codec_types
,
5421 &ett_ie_tfo_transp_cont
,
5423 &ett_ie_meas_res_no
,
5425 &ett_ie_sys_info_type
,
5426 &ett_ie_speech_mode
,
5429 &ett_ie_remote_port
,
5432 &ett_ie_rtp_payload
,
5433 &ett_ie_paging_package
,
5434 &ett_ie_paging_package_number
,
5435 &ett_ie_paging_package_info
,
5436 &ett_ie_paging_package_ch_a_emlpp
,
5437 &ett_ie_paging_group_paras
,
5439 &ett_phy_ctx_ie_ext_rand_access
,
5440 &ett_phy_ctx_ab_rx_lvl_err_bits
,
5441 &ett_phy_ctx_rxlvl_ext
,
5443 &ett_ie_osmo_rep_acch_cap
,
5444 &ett_ie_osmo_top_acch_cap
,
5445 &ett_ie_osmo_training_seq
,
5447 static ei_register_info ei
[] = {
5448 /* Generated from convert_proto_tree_add_text.pl */
5449 { &ei_rsl_speech_or_data_indicator
, { "gsm_abis_rsl.speech_or_data_indicator.bad", PI_PROTOCOL
, PI_WARN
, "Speech or data indicator != 1,2 or 3", EXPFILL
}},
5450 { &ei_rsl_facility_information_element_3gpp_ts_44071
, { "gsm_abis_rsl.facility_information_element_3gpp_ts_44071", PI_PROTOCOL
, PI_NOTE
, "Facility Information Element as defined in 3GPP TS 44.071", EXPFILL
}},
5451 { &ei_rsl_embedded_message_tfo_configuration
, { "gsm_abis_rsl.embedded_message_tfo_configuration", PI_PROTOCOL
, PI_NOTE
, "Embedded message that contains the TFO configuration", EXPFILL
}},
5452 { &ei_rsl_mobile_allocation_deprecated
, { "gsm_abis_rsl.mobile_allocation_deprecated", PI_PROTOCOL
, PI_NOTE
,
5453 "3GPP TS 24.008 Mobile Allocation IE shall for compatibility reasons "
5454 "be included but empty (see 3GPP TS 48.058, section 9.3.5)", EXPFILL
}},
5457 module_t
*rsl_module
;
5458 expert_module_t
*expert_rsl
;
5460 #define RSL_ATT_TLVDEF(_attr, _type, _fixed_len) \
5461 rsl_att_tlvdef.def[_attr].type = _type; \
5462 rsl_att_tlvdef.def[_attr].fixed_len = _fixed_len; \
5464 /* We register even the standard RSL IE TVLs here, not just the
5465 * ip.access vendor specific elements. This is due to the fact that we
5466 * don't have any formal specification for the ip.access RSL dialect,
5467 * and this way any standard elements will be 'known' to the TLV
5468 * parser, which can then gracefully skip over such elements and
5469 * continue decoding the message. This will work even if the switch
5470 * statement in dissct_rsl_ipaccess_msg() doesn't contain explicit code
5471 * to decode them (yet?).
5473 RSL_ATT_TLVDEF(RSL_IE_CH_NO
, TLV_TYPE_TV
, 0);
5474 RSL_ATT_TLVDEF(RSL_IE_LINK_ID
, TLV_TYPE_TV
, 0);
5475 RSL_ATT_TLVDEF(RSL_IE_ACT_TYPE
, TLV_TYPE_TV
, 0);
5476 RSL_ATT_TLVDEF(RSL_IE_BS_POW
, TLV_TYPE_TV
, 0);
5477 RSL_ATT_TLVDEF(RSL_IE_CH_ID
, TLV_TYPE_TLV
, 0);
5478 RSL_ATT_TLVDEF(RSL_IE_CH_MODE
, TLV_TYPE_TLV
, 0);
5479 RSL_ATT_TLVDEF(RSL_IE_ENC_INF
, TLV_TYPE_TLV
, 0);
5480 RSL_ATT_TLVDEF(RSL_IE_FRAME_NO
, TLV_TYPE_FIXED
, 2);
5481 RSL_ATT_TLVDEF(RSL_IE_HO_REF
, TLV_TYPE_TV
, 0);
5482 RSL_ATT_TLVDEF(RSL_IE_L1_INF
, TLV_TYPE_FIXED
, 2);
5483 RSL_ATT_TLVDEF(RSL_IE_L3_INF
, TLV_TYPE_TL16V
, 0);
5484 RSL_ATT_TLVDEF(RSL_IE_MS_ID
, TLV_TYPE_TLV
, 0);
5485 RSL_ATT_TLVDEF(RSL_IE_MS_POW
, TLV_TYPE_TV
, 0);
5486 RSL_ATT_TLVDEF(RSL_IE_PAGING_GRP
, TLV_TYPE_TV
, 0);
5487 RSL_ATT_TLVDEF(RSL_IE_PAGING_LOAD
, TLV_TYPE_FIXED
, 2);
5488 RSL_ATT_TLVDEF(RSL_IE_PHY_CTX
, TLV_TYPE_TLV
, 0);
5489 RSL_ATT_TLVDEF(RSL_IE_ACCESS_DELAY
, TLV_TYPE_TV
, 0);
5490 RSL_ATT_TLVDEF(RSL_IE_RACH_LOAD
, TLV_TYPE_TLV
, 0);
5491 RSL_ATT_TLVDEF(RSL_IE_REQ_REF
, TLV_TYPE_FIXED
, 3);
5492 RSL_ATT_TLVDEF(RSL_IE_REL_MODE
, TLV_TYPE_TV
, 0);
5493 RSL_ATT_TLVDEF(RSL_IE_RESOURCE_INF
, TLV_TYPE_TLV
, 0);
5494 RSL_ATT_TLVDEF(RSL_IE_RLM_CAUSE
, TLV_TYPE_TLV
, 0);
5495 RSL_ATT_TLVDEF(RSL_IE_STARTING_TIME
, TLV_TYPE_FIXED
, 2);
5496 RSL_ATT_TLVDEF(RSL_IE_TIMING_ADV
, TLV_TYPE_TV
, 0);
5497 RSL_ATT_TLVDEF(RSL_IE_UPLINK_MEAS
, TLV_TYPE_TLV
, 0);
5498 RSL_ATT_TLVDEF(RSL_IE_CAUSE
, TLV_TYPE_TLV
, 0);
5499 RSL_ATT_TLVDEF(RSL_IE_MEAS_RES_NO
, TLV_TYPE_TV
, 0);
5500 RSL_ATT_TLVDEF(RSL_IE_MESSAGE_ID
, TLV_TYPE_TV
, 0);
5501 RSL_ATT_TLVDEF(RSL_IE_SYS_INFO_TYPE
, TLV_TYPE_TV
, 0);
5502 RSL_ATT_TLVDEF(RSL_IE_MS_POWER_PARAM
, TLV_TYPE_TLV
, 0);
5503 RSL_ATT_TLVDEF(RSL_IE_BS_POWER_PARAM
, TLV_TYPE_TLV
, 0);
5504 RSL_ATT_TLVDEF(RSL_IE_PREPROC_PARAM
, TLV_TYPE_TLV
, 0);
5505 RSL_ATT_TLVDEF(RSL_IE_PREPROC_MEAS
, TLV_TYPE_TLV
, 0);
5506 RSL_ATT_TLVDEF(RSL_IE_ERR_MSG
, TLV_TYPE_TLV
, 0);
5507 RSL_ATT_TLVDEF(RSL_IE_FULL_BCCH_INF
, TLV_TYPE_TLV
, 0);
5508 RSL_ATT_TLVDEF(RSL_IE_CH_NEEDED
, TLV_TYPE_TV
, 0);
5509 RSL_ATT_TLVDEF(RSL_IE_CB_CMD_TYPE
, TLV_TYPE_TV
, 0);
5510 RSL_ATT_TLVDEF(RSL_IE_SMSCB_MESS
, TLV_TYPE_TLV
, 0);
5511 RSL_ATT_TLVDEF(RSL_IE_FULL_IMM_ASS_INF
, TLV_TYPE_TLV
, 0);
5512 RSL_ATT_TLVDEF(RSL_IE_CBCH_LOAD_INF
, TLV_TYPE_TV
, 0);
5513 RSL_ATT_TLVDEF(RSL_IE_SMSCB_CH_IND
, TLV_TYPE_TV
, 0);
5514 RSL_ATT_TLVDEF(RSL_IE_GRP_CALL_REF
, TLV_TYPE_TLV
, 0);
5515 RSL_ATT_TLVDEF(RSL_IE_CH_DESC
, TLV_TYPE_TLV
, 0);
5516 RSL_ATT_TLVDEF(RSL_IE_NCH_DRX_INF
, TLV_TYPE_TLV
, 0);
5517 RSL_ATT_TLVDEF(RSL_IE_CMD_IND
, TLV_TYPE_TLV
, 0);
5518 RSL_ATT_TLVDEF(RSL_IE_EMLPP_PRIO
, TLV_TYPE_TV
, 0);
5519 RSL_ATT_TLVDEF(RSL_IE_UIC
, TLV_TYPE_TLV
, 0);
5520 RSL_ATT_TLVDEF(RSL_IE_MAIN_CH_REF
, TLV_TYPE_TV
, 0);
5521 RSL_ATT_TLVDEF(RSL_IE_MULTIRATE_CONF
, TLV_TYPE_TLV
, 0);
5522 RSL_ATT_TLVDEF(RSL_IE_MULTIRATE_CNTRL
, TLV_TYPE_TV
, 0);
5523 RSL_ATT_TLVDEF(RSL_IE_SUP_CODEC_TYPES
, TLV_TYPE_TLV
, 0);
5524 RSL_ATT_TLVDEF(RSL_IE_CODEC_CONF
, TLV_TYPE_TLV
, 0);
5525 RSL_ATT_TLVDEF(RSL_IE_RTD
, TLV_TYPE_TV
, 0);
5526 RSL_ATT_TLVDEF(RSL_IE_TFO_STATUS
, TLV_TYPE_TV
, 0);
5527 RSL_ATT_TLVDEF(RSL_IE_LLP_APDU
, TLV_TYPE_TLV
, 0);
5528 RSL_ATT_TLVDEF(RSL_IE_IPAC_REMOTE_IP
, TLV_TYPE_FIXED
, 4);
5529 RSL_ATT_TLVDEF(RSL_IE_IPAC_REMOTE_PORT
, TLV_TYPE_FIXED
, 2);
5530 RSL_ATT_TLVDEF(RSL_IE_IPAC_LOCAL_IP
, TLV_TYPE_FIXED
, 4);
5531 RSL_ATT_TLVDEF(RSL_IE_IPAC_CONN_STAT
, TLV_TYPE_TLV
, 0);
5532 RSL_ATT_TLVDEF(RSL_IE_IPAC_LOCAL_PORT
, TLV_TYPE_FIXED
, 2);
5533 RSL_ATT_TLVDEF(RSL_IE_IPAC_SPEECH_MODE
, TLV_TYPE_TV
, 0);
5534 RSL_ATT_TLVDEF(RSL_IE_IPAC_CONN_ID
, TLV_TYPE_FIXED
, 2);
5535 RSL_ATT_TLVDEF(RSL_IE_IPAC_RTP_PAYLOAD2
, TLV_TYPE_TV
, 0);
5536 RSL_ATT_TLVDEF(RSL_IE_IPAC_RTP_PAYLOAD
, TLV_TYPE_TV
, 0);
5537 RSL_ATT_TLVDEF(RSL_IE_IPAC_RTP_CSD_FMT
, TLV_TYPE_TV
, 0);
5538 RSL_ATT_TLVDEF(RSL_IE_OSMO_TRAINING_SEQUENCE
, TLV_TYPE_TLV
, 0);
5539 RSL_ATT_TLVDEF(RSL_IE_OSMO_OSMUX_CID
, TLV_TYPE_TLV
, 0);
5541 /* Register the protocol name and description */
5542 proto_rsl
= proto_register_protocol("Radio Signalling Link (RSL)", "RSL", "gsm_abis_rsl");
5544 proto_register_field_array(proto_rsl
, hf
, array_length(hf
));
5545 proto_register_subtree_array(ett
, array_length(ett
));
5546 expert_rsl
= expert_register_protocol(proto_rsl
);
5547 expert_register_field_array(expert_rsl
, ei
, array_length(ei
));
5549 rsl_handle
= register_dissector("gsm_abis_rsl", dissect_rsl
, proto_rsl
);
5551 rsl_module
= prefs_register_protocol(proto_rsl
, NULL
);
5552 prefs_register_bool_preference(rsl_module
, "use_ipaccess_rsl",
5553 "Use nanoBTS definitions",
5554 "Use ipaccess nanoBTS specific definitions for RSL",
5555 &global_rsl_use_nano_bts
);
5556 prefs_register_bool_preference(rsl_module
, "use_osmocom_rsl",
5557 "Use Osmocom definitions",
5558 "Use Osmocom specific definitions for RSL",
5559 &global_rsl_use_osmo_bts
);
5560 prefs_register_bool_preference(rsl_module
, "dissect_phy_ctx_inf",
5561 "Decode Physical Context Information field",
5562 "The Physical Context Information field is not specified "
5563 "This information should be not be analysed by BSC, but merely "
5564 "forwarded from one TRX/channel to another.",
5565 &global_rsl_dissect_phy_ctx_inf
);
5569 proto_reg_handoff_rsl(void)
5571 dissector_add_uint("lapd.gsm.sapi", LAPD_GSM_SAPI_RA_SIG_PROC
, rsl_handle
);
5573 gsm_cbch_handle
= find_dissector_add_dependency("gsm_cbch", proto_rsl
);
5574 gsm_cbs_handle
= find_dissector_add_dependency("gsm_cbs", proto_rsl
);
5575 gsm_a_ccch_handle
= find_dissector_add_dependency("gsm_a_ccch", proto_rsl
);
5576 gsm_a_dtap_handle
= find_dissector_add_dependency("gsm_a_dtap", proto_rsl
);
5577 gsm_a_sacch_handle
= find_dissector_add_dependency("gsm_a_sacch", proto_rsl
);
5581 * Editor modelines - https://www.wireshark.org/tools/modelines.html
5586 * indent-tabs-mode: nil
5589 * vi: set shiftwidth=4 tabstop=8 expandtab:
5590 * :indentSize=4:tabSize=8:noTabs=true: