Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / epan / dissectors / packet-bssgp.c
blob34b86eb7619715a2caef9bd93d83daa7356a53f3
1 /* packet-bssgp.c
2 * Routines for Base Station Subsystem GPRS Protocol dissection
3 * Copyright 2000, Susanne Edlund <susanne.edlund@ericsson.com>
4 * Copyright 2017, Anders Broman <anders.broman@ericsson.com>
6 * Wireshark - Network traffic analyzer
7 * By Gerald Combs <gerald@wireshark.org>
8 * Copyright 1998 Gerald Combs
10 * SPDX-License-Identifier: GPL-2.0-or-later
13 /* 3GPP TS 48.018 V 6.5.0 (2004-07) Release 6 */
15 #include "config.h"
17 #include <epan/packet.h>
18 #include <epan/expert.h>
19 #include <epan/prefs.h>
20 #include <epan/asn1.h>
21 #include <epan/tfs.h>
22 #include <wsutil/array.h>
24 #include "packet-bssgp.h"
25 #include "packet-e212.h"
26 #include "packet-gsm_a_common.h"
27 #include "packet-ranap.h"
28 #include "packet-rrc.h"
29 #include "packet-lte-rrc.h"
30 #include "packet-s1ap.h"
32 /* #define BSSGP_DEBUG */
34 * TS 48.018 V6.6.0 (2004-11) says, of information elements:
36 * Refer to General Structure Of The Information Elements/3GPP TS 48.016.
38 * TS 48.016 V9.0.0 (2010-02), in that section, says, of information elements:
40 * When a field extends over more than one octet, the order of bit
41 * values progressively decreases as the octet number increases.
42 * The least significant bit of the field is represented by the
43 * lowest numbered bit of the highest numbered octet of the field.
45 * which sure sounds little-endian.
47 * [
48 * Later comment:
49 * Actually: To me. the above reads as being BIG_ENDIAN.
50 * IOW: if bytes are numbered from 0 to n, then the n'th byte
51 * ("highest numbered octet") has the least significant bit.
52 * ]
54 * However, for some not-entirely-obvious reason, BSSGP_LITTLE_ENDIAN, which
55 * was passed to proto_tree_add_item() as the byte-order argument, was
56 * defined as false - which meant big-endian.
58 * For now, we'll use ENC_BIG_ENDIAN, now that we have ENC_BIG_ENDIAN and
59 * REP_LITTLE_ENDIAN definitions.
62 #define BSSGP_SEP ", "
64 void proto_register_bssgp(void);
65 void proto_reg_handoff_bssgp(void);
67 static uint8_t g_pdu_type, g_rim_application_identity;
68 static uint32_t g_bssgp_ran_inf_pdu_t_ext_c;
69 static proto_tree *gparent_tree;
70 static dissector_handle_t llc_handle;
71 static dissector_handle_t rrlp_handle;
72 static dissector_handle_t rrc_sys_info_cont_handle;
74 static module_t *bssgp_module;
75 static dissector_table_t diameter_3gpp_avp_dissector_table;
77 /* Initialize the protocol and registered fields */
78 static int proto_bssgp;
79 static int hf_bssgp_msg_type;
80 int hf_bssgp_elem_id;
81 static int hf_bssgp_ci;
82 static int hf_bssgp_flush_action;
83 static int hf_bssgp_llc_frames_disc;
84 static int hf_bssgp_ra_discriminator;
85 static int hf_bssgp_rim_app_id;
86 static int hf_bssgp_rim_seq_no;
87 static int hf_bssgp_rat_discriminator;
88 static int hf_bssgp_nacc_cause;
89 static int hf_bssgp_si3_cause;
90 static int hf_bssgp_mbms_data_ch_cause;
91 static int hf_bssgp_utra_si_cause;
92 static int hf_bssgp_num_si_psi;
93 static int hf_bssgp_si_psi_type;
94 static int hf_bssgp_ran_inf_req_pdu_t_ext_c;
95 static int hf_bssgp_ran_inf_pdu_t_ext_c;
96 static int hf_bssgp_rim_pdu_ind_ack;
97 static int hf_bssgp_rim_proto_ver_no;
98 static int hf_bssgp_bss_area_ind;
99 static int hf_bssgp_bvci;
100 static int hf_bssgp_bmax;
101 static int hf_bssgp_r;
102 static int hf_bssgp_r_pfc;
103 static int hf_bssgp_bucket_size;
104 static int hf_bssgp_bmax_pfc;
105 static int hf_bssgp_omc_id;
106 static int hf_bssgp_nsei;
107 static int hf_bssgp_rrlp_flag1;
109 static int hf_bssgp_delay_val;
110 static int hf_bssgp_cause;
111 static int hf_bssgp_peak_rate_gran;
112 static int hf_bssgp_cr_bit;
113 static int hf_bssgp_t_bit;
114 static int hf_bssgp_a_bit;
115 static int hf_bssgp_ra_cause;
116 static int hf_bssgp_ra_cap_upd_cause;
117 static int hf_bssgp_r_default_ms;
118 static int hf_bssgp_suspend_ref_no;
119 static int hf_bssgp_tag;
120 static int hf_bssgp_trace_ref;
121 static int hf_bssgp_trigger_id;
122 static int hf_bssgp_transaction_id;
123 static int hf_bssgp_no_of_oct;
124 static int hf_bssgp_unit_val;
125 static int hf_bssgp_gprs_timer;
126 static int hf_bssgp_mbms;
127 static int hf_bssgp_EnhancedRadioStatus;
128 static int hf_bssgp_pfcfc;
129 static int hf_bssgp_rim;
130 static int hf_bssgp_lcs;
131 static int hf_bssgp_inr;
132 static int hf_bssgp_cbl;
133 static int hf_bssgp_pfc;
134 static int hf_bssgp_bucket_full_ratio;
135 static int hf_bssgp_b_pfc;
137 static int hf_bssgp_precedence;
138 static int hf_bssgp_serv_utran_cco;
139 static int hf_bssgp_mbms_session_id;
140 static int hf_bssgp_mbms_cause;
141 static int hf_bssgp_mbms_stop_cause;
142 static int hf_bssgp_mbms_num_ra_ids;
143 static int hf_bssgp_session_inf;
144 static int hf_bssgp_ec_gsm_iot;
145 static int hf_bssgp_mocn;
146 static int hf_bssgp_csps_coord;
147 static int hf_bssgp_eDRX;
148 static int hf_bssgp_dcn;
149 static int hf_bssgp_gb_if;
150 static int hf_bssgp_ps_ho;
151 static int hf_bssgp_src_to_trg_transp_cont;
152 static int hf_bssgp_trg_to_src_transp_cont;
153 static int hf_bssgp_rnc_id;
154 static int hf_bssgp_page_mode;
155 static int hf_bssgp_container_id;
156 static int hf_bssgp_global_tfi;
157 static int hf_bssgp_ul_tfi;
158 static int hf_bssgp_dl_tfi;
159 static int hf_bssgp_time_to_MBMS_data_tran;
160 static int hf_bssgp_mbms_session_rep_no;
161 static int hf_bssgp_ps_ho_cmd;
162 static int hf_bssgp_sipsi;
163 static int hf_bssgp_type;
164 static int hf_bssgp_cs_indication;
165 static int hf_bssgp_flow_control_gran;
166 static int hf_bssgp_serv_eutran_cco;
167 static int hf_bssgp_sub_prof_id_f_rat_freq_prio;
168 static int hf_bssgp_eutran_irat_ho_inf_req;
169 static int hf_bssgp_irat_ho_inf_req;
171 static int hf_bssgp_rel_int_rat_ho_inf_ind;
172 static int hf_bssgp_csg_id;
173 static int hf_bssgp_cell_acc_mode;
174 static int hf_bssgp_redir_complete_outcome;
175 static int hf_bssgp_redir_indication_reroute_reject_cause;
176 static int hf_bssgp_unconfirm_send_state_var;
177 static int hf_bssgp_Global_ENB_ID_PDU;
178 static int hf_bssgp_SONtransferRequestContainer_PDU;
179 static int hf_bssgp_plmn_id;
180 static int hf_bssgp_num_pfc;
181 static int hf_bssgp_llc_data;
182 static int hf_bssgp_pdu_data;
183 static int hf_bssgp_rrlp_apdu;
184 static int hf_bssgp_dtm_handover_command_data;
185 static int hf_bssgp_message_elements;
186 static int hf_bssgp_spare;
187 static int hf_bssgp_si;
188 static int hf_bssgp_psi;
189 static int hf_bssgp_peak_bit_rate;
190 static int hf_bssgp_sys_info_type3_msg;
191 static int hf_bssgp_trace_type_data;
192 static int hf_bssgp_si_item;
193 static int hf_bssgp_sci;
194 static int hf_bssgp_ggsn_pgw_location;
195 static int hf_bssgp_edrx_cycle_value;
196 static int hf_bssgp_tunpo_minutes;
197 static int hf_bssgp_tunpo_seconds;
198 static int hf_bssgp_ec_dl_coverage_class;
199 static int hf_bssgp_ec_ul_coverage_class;
200 static int hf_bssgp_pei;
201 static int hf_bssgp_paging_attempt_count;
202 static int hf_bssgp_intended_num_of_pag_attempts;
203 static int hf_bssgp_extended_feature_bitmap;
204 static int hf_bssgp_prio_class_ind;
205 static int hf_bssgp_prio_class_flag_b0;
207 /* Initialize the subtree pointers */
208 static int ett_bssgp;
209 static int ett_bssgp_new;
210 static int ett_bssgp_pfcs_to_be_set_up_list;
211 static int ett_bssgp_pfcs_to_be_set_up_list_pft;
212 static int ett_bssgp_pfcs_to_be_set_up_list_abqp;
213 static int ett_bssgp_pfcs_to_be_set_up_list_arp;
214 static int ett_bssgp_pfcs_to_be_set_up_list_t10;
215 static int ett_bssgp_list_of_setup_pfcs;
216 static int ett_bssgp_pfc_flow_control_parameters_pfc;
217 static int ett_bssgp_ra_id;
218 static int ett_bssgp_extended_feature_bitmap;
219 static int ett_bssgp_prio_class_ind;
221 static expert_field ei_bssgp_extraneous_data;
222 static expert_field ei_bssgp_missing_mandatory_element;
223 static expert_field ei_bssgp_not_dissected_yet;
224 static expert_field ei_bssgp_erroneous_app_container;
225 static expert_field ei_bssgp_si_item;
226 static expert_field ei_bssgp_unknown_rim_app_id_data;
227 static expert_field ei_bssgp_unknown_app_container;
228 static expert_field ei_bssgp_ra_discriminator;
229 static expert_field ei_bssgp_unknown_rim_app_id;
230 static expert_field ei_bssgp_msg_type;
231 static expert_field ei_bssgp_ran_inf_app_cont_utra_si;
233 /* PDU type coding, v6.5.0, table 11.3.26, p 80 */
234 #define BSSGP_PDU_DL_UNITDATA 0x00
235 #define BSSGP_PDU_UL_UNITDATA 0x01
236 #define BSSGP_PDU_RA_CAPABILITY 0x02
237 #define BSSGP_PDU_PTM_UNITDATA 0x03
238 #define BSSGP_PDU_DL_MBMS_UNITDATA 0x04
239 #define BSSGP_PDU_UL_MBMS_UNITDATA 0x05
240 #define BSSGP_PDU_PAGING_PS 0x06
241 #define BSSGP_PDU_PAGING_CS 0x07
242 #define BSSGP_PDU_RA_CAPABILITY_UPDATE 0x08
243 #define BSSGP_PDU_RA_CAPABILITY_UPDATE_ACK 0x09
244 #define BSSGP_PDU_RADIO_STATUS 0x0a
245 #define BSSGP_PDU_SUSPEND 0x0b
246 #define BSSGP_PDU_SUSPEND_ACK 0x0c
247 #define BSSGP_PDU_SUSPEND_NACK 0x0d
248 #define BSSGP_PDU_RESUME 0x0e
249 #define BSSGP_PDU_RESUME_ACK 0x0f
250 #define BSSGP_PDU_RESUME_NACK 0x10
251 #define BSSGP_PDU_PAGING_PS_REJECT 0x11
252 #define BSSGP_PDU_DUMMY_PAGING_PS 0x12
253 #define BSSGP_PDU_DUMMY_PAGING_PS_RESPONSE 0x13
255 #define BSSGP_PDU_MS_REG_ENQ 0x14
256 #define BSSGP_PDU_MS_REG_ENQ_RESP 0x15
257 #define BSSGP_PDU_RESERVED_0X16 0x16
258 #define BSSGP_PDU_RESERVED_0X17 0x17
259 #define BSSGP_PDU_RESERVED_0X18 0x18
260 #define BSSGP_PDU_RESERVED_0X19 0x19
261 #define BSSGP_PDU_RESERVED_0X1A 0x1a
262 #define BSSGP_PDU_RESERVED_0X1B 0x1b
263 #define BSSGP_PDU_RESERVED_0X1C 0x1c
264 #define BSSGP_PDU_RESERVED_0X1D 0x1d
265 #define BSSGP_PDU_RESERVED_0X1E 0x1e
266 #define BSSGP_PDU_RESERVED_0X1F 0x1f
268 #define BSSGP_PDU_BVC_BLOCK 0x20
269 #define BSSGP_PDU_BVC_BLOCK_ACK 0x21
270 #define BSSGP_PDU_BVC_RESET 0x22
271 #define BSSGP_PDU_BVC_RESET_ACK 0x23
272 #define BSSGP_PDU_BVC_UNBLOCK 0x24
273 #define BSSGP_PDU_BVC_UNBLOCK_ACK 0x25
274 #define BSSGP_PDU_FLOW_CONTROL_BVC 0x26
275 #define BSSGP_PDU_FLOW_CONTROL_BVC_ACK 0x27
276 #define BSSGP_PDU_FLOW_CONTROL_MS 0x28
277 #define BSSGP_PDU_FLOW_CONTROL_MS_ACK 0x29
278 #define BSSGP_PDU_FLUSH_LL 0x2a
279 #define BSSGP_PDU_FLUSH_LL_ACK 0x2b
280 #define BSSGP_PDU_LLC_DISCARDED 0x2c
281 #define BSSGP_PDU_FLOW_CONTROL_PFC 0x2d
282 #define BSSGP_PDU_FLOW_CONTROL_PFC_ACK 0x2e
284 #define BSSGP_PDU_RESERVED_0X2F 0x2f
285 #define BSSGP_PDU_RESERVED_0X30 0x30
286 #define BSSGP_PDU_RESERVED_0X31 0x31
287 #define BSSGP_PDU_RESERVED_0X32 0x32
288 #define BSSGP_PDU_RESERVED_0X33 0x33
289 #define BSSGP_PDU_RESERVED_0X34 0x34
290 #define BSSGP_PDU_RESERVED_0X35 0x35
291 #define BSSGP_PDU_RESERVED_0X36 0x36
292 #define BSSGP_PDU_RESERVED_0X37 0x37
293 #define BSSGP_PDU_RESERVED_0X38 0x38
294 #define BSSGP_PDU_RESERVED_0X39 0x39
295 #define BSSGP_PDU_RESERVED_0X3A 0x3a
296 #define BSSGP_PDU_RESERVED_0X3B 0x3b
297 #define BSSGP_PDU_RESERVED_0X3C 0x3c
298 #define BSSGP_PDU_RESERVED_0X3D 0x3d
299 #define BSSGP_PDU_RESERVED_0X3E 0x3e
300 #define BSSGP_PDU_RESERVED_0X3F 0x3f
302 #define BSSGP_PDU_SGSN_INVOKE_TRACE 0x40
303 #define BSSGP_PDU_STATUS 0x41
304 #define BSSGP_PDU_OVERLOAD 0x42
306 #define BSSGP_PDU_RESERVED_0X43 0x43
307 #define BSSGP_PDU_RESERVED_0X44 0x44
308 #define BSSGP_PDU_RESERVED_0X45 0x45
309 #define BSSGP_PDU_RESERVED_0X46 0x46
310 #define BSSGP_PDU_RESERVED_0X47 0x47
311 #define BSSGP_PDU_RESERVED_0X48 0x48
312 #define BSSGP_PDU_RESERVED_0X49 0x49
313 #define BSSGP_PDU_RESERVED_0X4A 0x4a
314 #define BSSGP_PDU_RESERVED_0X4B 0x4b
315 #define BSSGP_PDU_RESERVED_0X4C 0x4c
316 #define BSSGP_PDU_RESERVED_0X4D 0x4d
317 #define BSSGP_PDU_RESERVED_0X4E 0x4e
318 #define BSSGP_PDU_RESERVED_0X4F 0x4f
320 #define BSSGP_PDU_DOWNLOAD_BSS_PFC 0x50
321 #define BSSGP_PDU_CREATE_BSS_PFC 0x51
322 #define BSSGP_PDU_CREATE_BSS_PFC_ACK 0x52
323 #define BSSGP_PDU_CREATE_BSS_PFC_NACK 0x53
324 #define BSSGP_PDU_MODIFY_BSS_PFC 0x54
325 #define BSSGP_PDU_MODIFY_BSS_PFC_ACK 0x55
326 #define BSSGP_PDU_DELETE_BSS_PFC 0x56
327 #define BSSGP_PDU_DELETE_BSS_PFC_ACK 0x57
328 #define BSSGP_PDU_DELETE_BSS_PFC_REQ 0x58
329 #define BSSGP_PDU_PS_HANDOVER_REQUIRED 0x59
330 #define BSSGP_PDU_PS_HANDOVER_REQUIRED_ACK 0x5a
331 #define BSSGP_PDU_PS_HANDOVER_REQUIRED_NACK 0x5b
332 #define BSSGP_PDU_PS_HANDOVER_REQUEST 0x5c
333 #define BSSGP_PDU_PS_HANDOVER_REQUEST_ACK 0x5d
334 #define BSSGP_PDU_PS_HANDOVER_REQUEST_NACK 0x5e
336 #define BSSGP_PDU_RESERVED_0X5F 0x5f
338 #define BSSGP_PDU_PERFORM_LOCATION_REQUEST 0x60
339 #define BSSGP_PDU_PERFORM_LOCATION_RESPONSE 0x61
340 #define BSSGP_PDU_PERFORM_LOCATION_ABORT 0x62
341 #define BSSGP_PDU_POSITION_COMMAND 0x63
342 #define BSSGP_PDU_POSITION_RESPONSE 0x64
344 #define BSSGP_PDU_RESERVED_0X65 0x65
345 #define BSSGP_PDU_RESERVED_0X66 0x66
346 #define BSSGP_PDU_RESERVED_0X67 0x67
347 #define BSSGP_PDU_RESERVED_0X68 0x68
348 #define BSSGP_PDU_RESERVED_0X69 0x69
349 #define BSSGP_PDU_RESERVED_0X6A 0x6a
350 #define BSSGP_PDU_RESERVED_0X6B 0x6b
351 #define BSSGP_PDU_RESERVED_0X6C 0x6c
352 #define BSSGP_PDU_RESERVED_0X6D 0x6d
353 #define BSSGP_PDU_RESERVED_0X6E 0x6e
354 #define BSSGP_PDU_RESERVED_0X6F 0x6f
356 #define BSSGP_PDU_RAN_INFORMATION 0x70
357 #define BSSGP_PDU_RAN_INFORMATION_REQUEST 0x71
358 #define BSSGP_PDU_RAN_INFORMATION_ACK 0x72
359 #define BSSGP_PDU_RAN_INFORMATION_ERROR 0x73
360 #define BSSGP_PDU_RAN_INFORMATION_APP_ERROR 0x74
362 #define BSSGP_PDU_RESERVED_0X75 0x75
363 #define BSSGP_PDU_RESERVED_0X76 0x76
364 #define BSSGP_PDU_RESERVED_0X77 0x77
365 #define BSSGP_PDU_RESERVED_0X78 0x78
366 #define BSSGP_PDU_RESERVED_0X79 0x79
367 #define BSSGP_PDU_RESERVED_0X7A 0x7a
368 #define BSSGP_PDU_RESERVED_0X7B 0x7b
369 #define BSSGP_PDU_RESERVED_0X7C 0x7c
370 #define BSSGP_PDU_RESERVED_0X7D 0x7d
371 #define BSSGP_PDU_RESERVED_0X7E 0x7e
372 #define BSSGP_PDU_RESERVED_0X7F 0x7f
374 #define BSSGP_PDU_MBMS_SESSION_START_REQ 0x80
375 #define BSSGP_PDU_MBMS_SESSION_START_RESP 0x81
376 #define BSSGP_PDU_MBMS_SESSION_STOP_REQ 0x82
377 #define BSSGP_PDU_MBMS_SESSION_STOP_RESP 0x83
378 #define BSSGP_PDU_MBMS_SESSION_UPDATE_REQ 0x84
379 #define BSSGP_PDU_MBMS_SESSION_UPDATE_RESP 0x85
381 #define BSSGP_PDU_RESERVED_0X86 0x86
382 #define BSSGP_PDU_RESERVED_0X87 0x87
383 #define BSSGP_PDU_RESERVED_0X88 0x88
384 #define BSSGP_PDU_RESERVED_0X89 0x89
385 #define BSSGP_PDU_RESERVED_0X8A 0x8a
386 #define BSSGP_PDU_RESERVED_0X8B 0x8b
387 #define BSSGP_PDU_RESERVED_0X8C 0x8c
388 #define BSSGP_PDU_RESERVED_0X8D 0x8d
389 #define BSSGP_PDU_RESERVED_0X8E 0x8e
390 #define BSSGP_PDU_RESERVED_0X8F 0x8f
392 #define BSSGP_PDU_RESERVED_0X90 0x90
393 #define BSSGP_PDU_PS_HANDOVER_COMPLETE 0x91
394 #define BSSGP_PDU_PS_HANDOVER_CANCEL 0x92
395 #define BSSGP_PDU_PS_HANDOVER_COMPLETE_ACK 0x93
397 /* Information element coding, v 6.5.0, table 11.3, p 72 */
398 #define BSSGP_IEI_ALIGNMENT_OCTETS 0x00
399 #define BSSGP_IEI_BMAX_DEFAULT_MS 0x01
400 #define BSSGP_IEI_BSS_AREA_INDICATION 0x02
401 #define BSSGP_IEI_BUCKET_LEAK_RATE 0x03
402 #define BSSGP_IEI_BVCI 0x04
403 #define BSSGP_IEI_BVC_BUCKET_SIZE 0x05
404 #define BSSGP_IEI_BVC_MEASUREMENT 0x06
405 #define BSSGP_IEI_CAUSE 0x07
406 #define BSSGP_IEI_CELL_IDENTIFIER 0x08
407 #define BSSGP_IEI_CHANNEL_NEEDED 0x09
408 #define BSSGP_IEI_DRX_PARAMETERS 0x0a
409 #define BSSGP_IEI_EMLPP_PRIORITY 0x0b
410 #define BSSGP_IEI_FLUSH_ACTION 0x0c
411 #define BSSGP_IEI_IMSI 0x0d
412 #define BSSGP_IEI_LLC_PDU 0x0e
413 #define BSSGP_IEI_LLC_FRAMES_DISCARDED 0x0f
414 #define BSSGP_IEI_LOCATION_AREA 0x10
415 #define BSSGP_IEI_MOBILE_ID 0x11
416 #define BSSGP_IEI_MS_BUCKET_SIZE 0x12
417 #define BSSGP_IEI_MS_RADIO_ACCESS_CAPABILITY 0x13
418 #define BSSGP_IEI_OMC_ID 0x14
419 #define BSSGP_IEI_PDU_IN_ERROR 0x15
420 #define BSSGP_IEI_PDU_LIFETIME 0x16
421 #define BSSGP_IEI_PRIORITY 0x17
422 #define BSSGP_IEI_QOS_PROFILE 0x18
423 #define BSSGP_IEI_RADIO_CAUSE 0x19
424 #define BSSGP_IEI_RA_CAP_UPD_CAUSE 0x1a
425 #define BSSGP_IEI_ROUTING_AREA 0x1b
426 #define BSSGP_IEI_R_DEFAULT_MS 0x1c
427 #define BSSGP_IEI_SUSPEND_REFERENCE_NUMBER 0x1d
428 #define BSSGP_IEI_TAG 0x1e
429 #define BSSGP_IEI_TLLI 0x1f
430 #define BSSGP_IEI_TMSI 0x20
431 #define BSSGP_IEI_TRACE_REFERENCE 0x21
432 #define BSSGP_IEI_TRACE_TYPE 0x22
433 #define BSSGP_IEI_TRANSACTION_ID 0x23
434 #define BSSGP_IEI_TRIGGER_ID 0x24
435 #define BSSGP_IEI_NUMBER_OF_OCTETS_AFFECTED 0x25
436 #define BSSGP_IEI_LSA_IDENTIFIER_LIST 0x26
437 #define BSSGP_IEI_LSA_INFORMATION 0x27
438 #define BSSGP_IEI_PFI 0x28
439 #define BSSGP_IEI_GPRS_TIMER 0x29
440 #define BSSGP_IEI_ABQP 0x3a
441 #define BSSGP_IEI_FEATURE_BITMAP 0x3b
442 #define BSSGP_IEI_BUCKET_FULL_RATIO 0x3c
443 #define BSSGP_IEI_SERVICE_UTRAN_CCO 0x3d
444 #define BSSGP_IEI_NSEI 0x3e
445 #define BSSGP_IEI_RRLP_APDU 0x3f
446 #define BSSGP_IEI_LCS_QOS 0x40
447 #define BSSGP_IEI_LCS_CLIENT_TYPE 0x41
448 #define BSSGP_IEI_REQUESTED_GPS_ASSISTANCE_DATA 0x42
449 #define BSSGP_IEI_LOCATION_TYPE 0x43
450 #define BSSGP_IEI_LOCATION_ESTIMATE 0x44
451 #define BSSGP_IEI_POSITIONING_DATA 0x45
452 #define BSSGP_IEI_DECIPHERING_KEYS 0x46
453 #define BSSGP_IEI_LCS_PRIORITY 0x47
454 #define BSSGP_IEI_LCS_CAUSE 0x48
455 #define BSSGP_IEI_LCS_CAPABILITY 0x49
456 #define BSSGP_IEI_RRLP_FLAGS 0x4a
457 #define BSSGP_IEI_RIM_APP_ID 0x4b
458 #define BSSGP_IEI_RIM_SEQUENCE_NUMBER 0x4c
459 #define BSSGP_IEI_RAN_INF_REQUEST_APP_CONTAINER 0x4d
460 #define BSSGP_IEI_RAN_INF_APP_CONTAINER 0x4e
461 #define BSSGP_IEI_RIM_PDU_INDICATIONS 0x4f
462 #define BSSGP_IEI_NUMBER_OF_CONTAINER_UNITS 0x50
463 /* x51 This value should not be used, as it has been used in earlier versions of
464 this protocol. */
465 #define BSSGP_IEI_PFC_FLOW_CONTROL_PARAMETERS 0x52
466 #define BSSGP_IEI_GLOBAL_CN_ID 0x53
467 #define BSSGP_IEI_RIM_ROUTING_INFORMATION 0x54
468 #define BSSGP_IEI_RIM_PROTOCOL_VERSION 0x55
469 #define BSSGP_IEI_APPLICATION_ERROR_CONTAINER 0x56
470 #define BSSGP_IEI_RAN_INF_REQUEST_RIM_CONTAINER 0x57
471 #define BSSGP_IEI_RAN_INF_RIM_CONTAINER 0x58
472 #define BSSGP_IEI_RAN_INF_APP_ERROR_RIM_CONTAINER 0x59
473 #define BSSGP_IEI_RAN_INF_ACK_RIM_CONTAINER 0x5a
474 #define BSSGP_IEI_RAN_INF_ERROR_RIM_CONTAINER 0x5b
477 x5c TMGI
478 x5d MBMS Session Identity
479 x5e MBMS Session Duration
480 x5f MBMS Service Area Identity List
481 x60 MBMS Response
482 x61 MBMS Routing Area List
483 x62 MBMS Session Information
484 x63 MBMS Stop Cause
485 x64 Source BSS to Target BSS Transparent Container
486 x65 Target BSS to Source BSS Transparent Container
487 x66 NAS container for PS Handover
488 x67 PFCs to be set-up list
489 x68 List of set-up PFCs
490 x69 Extended Feature Bitmap
491 x6a Source RNC to Target RNC Transparent Container
492 x6b Target RNC to Source RNC Transparent Container
493 x6c RNC Identifier
494 x6d Page Mode
495 x6e Container ID
496 x6f Global TFI
497 x70 IMEI
498 x71 Time to MBMS Data Transfer
499 x72 MBMS Session Repetition Number
500 x73 Inter RAT Handover Info
501 x74 PS Handover Command
502 x75 PS Handover Indications
503 x76 SI/PSI Container
504 x77 Active PFCs List
505 x78 Velocity Data
506 x79 DTM Handover Command
507 x7a CS Indication
508 x7b Requested GANSS Assistance Data
509 x7c GANSS Location Type
510 x7d GANSS Positioning Data
511 x7e Flow Control Granularity
512 x7f eNB Identifier
513 x80 E-UTRAN Inter RAT Handover Info
514 x81 Subscriber Profile ID for RAT/Frequency priority
515 x82 Request for Inter RAT Handover Info
516 x83 Reliable Inter RAT Handover Info
517 x84 SON Transfer Application Identity
518 x85 CSG Identifier
519 x86 TAC
522 #define BSSGP_IEI_REDIR_ATTEMP_FLG 0x87
523 #define BSSGP_IEI_REDIR_INDICATION 0x88
524 #define BSSGP_IEI_REDIR_COMPLETE 0x89
525 #define BSSGP_IEI_UNCONFIRM_SEND_STATE_VAR 0x8a
526 #define BSSGP_IEI_SCI 0x8c
527 #define BSSGP_IEI_GGSN_PGW_LOCATION 0x8d
528 #define BSSGP_IEI_SELECTED_PLMN_ID 0x8e
529 #define BSSGP_IEI_PRIORITY_CLASS_INDICATOR 0x8f
532 x90 Source Cell ID
533 x91 IRAT Measurement Configuration (extended E-ARFCNs)
535 #define BSSGP_IEI_EDRX_PARAMETERS 0x92
536 #define BSSGP_IEI_TUNPO 0x93
537 #define BSSGP_IEI_COVERAGE_CLASS 0x98
538 #define BSSGP_IEI_PAG_ATTEMPT_INFO 0x99
539 #define BSSGP_IEI_EXCEPTION_REPORT_FLAG 0x9a
540 #define BSSGP_IEI_OLD_RA_IDENTIFICATION 0x9b
541 #define BSSGP_IEI_ATTACH_INDIC 0x9c
542 #define BSSGP_IEI_PLMN_ID 0x9d
544 x9e MME Query
545 x9f SGSN Group Identity
546 xa0 Additional P-TMSI
547 xa1 UE Usage Type
548 xa2 Multilateration Timer
549 xa3 Multilateration Timing Advance
550 xa4 MS Sync Accuracy
551 xa5 BTS Reception Accuracy Level
552 xa6 Timing Advance Request
556 /* Macros */
557 /* Defined locally here without the check of curr_len wrapping, that will be taken care of when this IEI dissection finishes */
558 #define ELEM_IN_ELEM_MAND_TELV(EMT_iei, EMT_pdu_type, EMT_elem_idx, EMT_elem_name_addition) \
560 if ((consumed = elem_telv(tvb, tree, pinfo, (uint8_t) EMT_iei, EMT_pdu_type, EMT_elem_idx, curr_offset, curr_len, EMT_elem_name_addition)) > 0) \
562 curr_offset += consumed; \
563 curr_len -= consumed; \
565 else \
567 proto_tree_add_expert_format(tree, pinfo, &ei_bssgp_missing_mandatory_element,\
568 tvb, curr_offset, 0, \
569 "Missing Mandatory element (0x%02x) %s%s, rest of dissection is suspect", \
570 EMT_iei, \
571 get_gsm_a_msg_string(EMT_pdu_type, EMT_elem_idx), \
572 (EMT_elem_name_addition == NULL) ? "" : EMT_elem_name_addition \
573 ); \
577 #define ELEM_IN_ELEM_OPT_TELV(EOT_iei, EOT_pdu_type, EOT_elem_idx, EOT_elem_name_addition) \
579 if (curr_len != 0){\
580 if ((consumed = elem_telv(tvb, tree, pinfo, (uint8_t) EOT_iei, EOT_pdu_type, EOT_elem_idx, curr_offset, curr_len, EOT_elem_name_addition)) > 0) \
582 curr_offset += consumed; \
583 curr_len -= consumed; \
588 /* Forward declarations */
589 static uint16_t de_bssgp_ran_inf_request_rim_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_);
590 static uint16_t de_bssgp_ran_inf_rim_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_);
591 static uint16_t de_bssgp_ran_inf_ack_rim_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_);
592 static uint16_t de_bssgp_ran_inf_error_rim_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_);
593 static uint16_t de_bssgp_ran_inf_app_error_rim_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_);
596 #if 0
597 static const value_string tab_nacc_cause[]={
598 { 0x00, "Other unspecified error" },
599 { 0x01, "Syntax error in the Application Container" },
600 { 0x02, "Reporting Cell Identifier does not match with the Destination Cell Identifier or with the Source Cell Identifier" },
601 { 0x03, "SI/PSI type error" },
602 { 0x04, "Inconsistent length of a SI/PSI message" },
603 { 0x05, "Inconsistent set of messages" },
604 { 0, NULL },
607 #endif
611 * 11.3 Information Element Identifier (IEI)
615 * 11.3.1 Alignment octets
617 static uint16_t
618 de_bssgp_aligment_octets(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
620 uint32_t curr_offset;
622 curr_offset = offset;
624 proto_tree_add_item(tree, hf_bssgp_spare, tvb, curr_offset, len, ENC_NA);
626 return len;
630 * 11.3.2 Bmax default MS
632 static uint16_t
633 de_bssgp_bmax_default_ms(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
635 uint32_t curr_offset;
637 curr_offset = offset;
639 proto_tree_add_item(tree, hf_bssgp_bmax, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
640 curr_offset+=2;
642 return curr_offset-offset;
645 * 11.3.3 BSS Area Indication
647 static uint16_t
648 de_bssgp_bss_area_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
650 uint32_t curr_offset;
652 curr_offset = offset;
654 proto_tree_add_item(tree, hf_bssgp_bss_area_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
655 curr_offset++;
657 return curr_offset-offset;
660 * 11.3.4 Bucket Leak Rate (R)
662 static uint16_t
663 de_bssgp_bucket_leak_rate(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
665 uint32_t curr_offset;
667 curr_offset = offset;
669 proto_tree_add_item(tree, hf_bssgp_r, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
670 curr_offset+=2;
672 return curr_offset-offset;
675 * 11.3.5 BVC Bucket Size
677 static uint16_t
678 de_bssgp_bvc_bucket_size(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
680 uint32_t curr_offset;
682 curr_offset = offset;
684 proto_tree_add_item(tree, hf_bssgp_bucket_size, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
685 curr_offset+=2;
687 return curr_offset-offset;
690 * 11.3.6 BVCI (BSSGP Virtual Connection Identifier)
692 static uint16_t
693 de_bssgp_bvci(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string, int string_len)
695 uint32_t curr_offset;
696 uint16_t bvci;
698 curr_offset = offset;
700 /* octet 3-4 Unstructured value */
701 bvci = tvb_get_ntohs(tvb,curr_offset);
702 proto_tree_add_item(tree, hf_bssgp_bvci, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
703 curr_offset+=2;
705 if (add_string)
706 snprintf(add_string, string_len, " - 0x%x", bvci);
709 return curr_offset-offset;
712 * 11.3.7 BVC Measurement
714 static uint16_t
715 de_bssgp_bvc_meas(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
717 uint32_t curr_offset;
719 curr_offset = offset;
721 /* The Delay Value field is coded as a 16-bit integer value in units of centi-seconds (one hundredth of a second). This
722 * coding provides a range of over 10 minutes in increments of 10 ms. As a special case, the hexadecimal value 0xFFFF
723 *(decimal 65 535) shall be interpreted as "infinite delay".
725 proto_tree_add_item(tree, hf_bssgp_delay_val, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
726 curr_offset+=2;
728 return curr_offset-offset;
731 * 11.3.8 Cause
733 static const value_string bssgp_cause_vals[] = {
734 { 0x00, "Processor overload" },
735 { 0x01, "Equipment failure" },
736 { 0x02, "Transit network service failure" },
737 { 0x03, "Network service transmission capacity modified from zero kbps to greater than zero kbps" },
738 { 0x04, "Unknown MS" },
739 { 0x05, "BVCI unknown" },
740 { 0x06, "Cell traffic congestion" },
741 { 0x07, "SGSN congestion" },
742 { 0x08, "O&M intervention" },
743 { 0x09, "BVCI blocked" },
744 { 0x0a, "PFC create failure" },
745 { 0x0b, "PFC preempted" },
746 { 0x0c, "ABQP no more supported" },
748 { 0x0d, "Undefined - protocol error - unspecified" },
749 { 0x0e, "Undefined - protocol error - unspecified" },
750 { 0x0f, "Undefined - protocol error - unspecified" },
751 { 0x10, "Undefined - protocol error - unspecified" },
752 { 0x11, "Undefined - protocol error - unspecified" },
753 { 0x12, "Undefined - protocol error - unspecified" },
754 { 0x13, "Undefined - protocol error - unspecified" },
755 { 0x14, "Undefined - protocol error - unspecified" },
756 { 0x15, "Undefined - protocol error - unspecified" },
757 { 0x16, "Undefined - protocol error - unspecified" },
758 { 0x17, "Undefined - protocol error - unspecified" },
759 { 0x18, "Undefined - protocol error - unspecified" },
760 { 0x19, "Undefined - protocol error - unspecified" },
761 { 0x1a, "Undefined - protocol error - unspecified" },
762 { 0x1b, "Undefined - protocol error - unspecified" },
763 { 0x1c, "Undefined - protocol error - unspecified" },
764 { 0x1d, "Undefined - protocol error - unspecified" },
765 { 0x1e, "Undefined - protocol error - unspecified" },
766 { 0x1f, "Undefined - protocol error - unspecified" },
768 { 0x20, "Semantically incorrect PDU" },
769 { 0x21, "Invalid mandatory information" },
770 { 0x22, "Missing mandatory IE" },
771 { 0x23, "Missing conditional IE" },
772 { 0x24, "Unexpected conditional IE" },
773 { 0x25, "Conditional IE error" },
774 { 0x26, "PDU not compatible with the protocol state" },
775 { 0x27, "Protocol error - unspecified" },
776 { 0x28, "PDU not compatible with the feature set" },
777 { 0x29, "Requested information not available" },
778 { 0x2a, "Unknown destination address" },
779 { 0x2b, "Unknown RIM application identity" },
780 { 0x2c, "Invalid container unit information" },
781 { 0x2d, "PFC queuing" },
782 { 0x2e, "PFC created successfully" },
783 { 0x2f, "T12 expiry" },
784 { 0x30, "MS under PS Handover treatment" },
785 { 0x31, "Uplink quality" },
786 { 0x32, "Uplink strength" },
787 { 0x33, "Downlink quality" },
788 { 0x34, "Downlink strength" },
789 { 0x35, "Distance" },
790 { 0x36, "Better cell" },
791 { 0x37, "Traffic" },
792 { 0x38, "Radio contact lost with MS" },
793 { 0x39, "MS back on old channel" },
794 { 0x3a, "T13 expiry" },
795 { 0x3b, "T14 expiry" },
796 { 0x3c, "Not all requested PFCs created" },
797 { 0x3d, "CS cause" },
798 { 0x3e, "Requested ciphering and/or integrity protection algorithms not supported" },
799 { 0x3f, "Relocation failure in target system" },
800 { 0x40, "Directed Retry" },
801 { 0x41, "Time critical relocation" },
802 { 0x42, "PS Handover Target not allowed" },
803 { 0x43, "PS Handover not Supported in Target BSS or Target System" },
804 { 0x44, "Incoming relocation not supported due to PUESBINE feature" },
805 { 0x45, "DTM Handover - No CS resource" },
806 { 0x46, "DTM Handover - PS Allocation failure" },
807 { 0x47, "DTM Handover - T24 expiry" },
808 { 0x48, "DTM Handover - Invalid CS Indication IE" },
809 { 0x49, "DTM Handover - T23 expiry" },
810 { 0x4a, "DTM Handover - MSC Error" },
811 { 0x4b, "Invalid CSG cell" },
812 { 0, NULL },
815 value_string_ext bssgp_cause_vals_ext = VALUE_STRING_EXT_INIT(bssgp_cause_vals);
817 static uint16_t
818 de_bssgp_cause(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
820 uint32_t curr_offset;
822 curr_offset = offset;
824 /* The Delay Value field is coded as a 16-bit integer value in units of centi-seconds (one hundredth of a second). This
825 * coding provides a range of over 10 minutes in increments of 10 ms. As a special case, the hexadecimal value 0xFFFF
826 *(decimal 65 535) shall be interpreted as "infinite delay".
828 proto_tree_add_item(tree, hf_bssgp_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
829 curr_offset+=1;
831 return curr_offset-offset;
834 * 11.3.9 Cell Identifier
837 * octets 3-8 Octets 3 to 8 contain the value part (starting with octet 2) of the
838 * Routing Area Identification IE defined in 3GPP TS 24.008, not
839 * including 3GPP TS 24.008 IEI
840 * Octets 9 and 10 contain the value part (starting with octet 2) of the
841 * Cell Identity IE defined in 3GPP TS 24.008, not including
842 * 3GPP TS 24.008 IEI (10.5.1.1)
845 uint16_t
846 de_bssgp_cell_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len _U_, char *add_string, int string_len)
848 uint32_t curr_offset;
849 uint16_t ci;
851 curr_offset = offset;
853 curr_offset = curr_offset + de_gmm_rai(tvb, tree, pinfo, curr_offset, 6, add_string, string_len);
854 /*Why doesn't this work? ( add_string will not contain RAI + CI )
855 * curr_offset = curr_offset + de_cell_id(tvb, tree, curr_offset , 2, add_string, string_len);
857 ci = tvb_get_ntohs(tvb, curr_offset);
858 proto_tree_add_item(tree, hf_bssgp_ci, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
859 curr_offset+=2;
860 if (add_string) {
861 char *str = ws_strdup_printf("%s, CI %u", add_string, ci);
862 g_strlcpy(add_string, str, string_len);
863 g_free(str);
866 return curr_offset-offset;
869 * 11.3.10 Channel needed
871 /* Rest of element coded as the value part of the Channel Needed
872 * PDU defined in 3GPP TS 29.018, not including 3GPP TS 29.018
873 * IEI and 3GPP TS 29.018 length indicator
874 * TS 29.018
875 * The rest of the information element is coded as the IEI part and the
876 * value part of the Channel Needed IE defined in 3GPP TS 44.018.
878 static uint16_t
879 de_bssgp_chnl_needed(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
881 uint32_t curr_offset;
883 curr_offset = offset;
885 curr_offset = de_rr_chnl_needed(tvb, tree, pinfo, curr_offset, len , NULL, 0);
887 return curr_offset-offset;
891 * 11.3.11 DRX Parameters
894 * Rest of element coded as the value part defined in
895 * 3GPP TS 24.008, not including 3GPP TS 24.008 IEI and
896 * 3GPP TS 24.008 octet length indicator
899 * 11.3.12 eMLPP-Priority
902 * Rest of element coded as the value part of the eMLPP-Priority IE
903 * defined in 3GPP TS 48.008, not including 3GPP TS 48.008 IEI and
904 * 3GPP TS 48.008 length indicator
907 * 11.3.13 Flush Action
909 static const value_string bssgp_flush_action_vals[] = {
910 { 0x00, "LLC-PDU(s) deleted" },
911 { 0x01, "LLC-PDU(s) transferred" },
912 { 0, NULL },
913 /* Otherwise "Reserved" */
916 static uint16_t
917 de_bssgp_flush_action(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string, int string_len)
919 uint32_t curr_offset;
920 uint8_t oct;
922 curr_offset = offset;
924 /* Action value */
925 oct = tvb_get_uint8(tvb,curr_offset);
926 proto_tree_add_item(tree, hf_bssgp_flush_action, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
927 curr_offset+=1;
928 if (add_string)
929 snprintf(add_string, string_len, " - %s", val_to_str_const(oct, bssgp_flush_action_vals, "Reserved"));
932 return curr_offset-offset;
935 * 11.3.14 IMSI
937 /* Octets 3-n contain an IMSI coded as the value part of the Mobile
938 * Identity IE defined in 3GPP TS 24.008
939 * (NOTE 1)
940 * NOTE 1: The Type of identity field in the Mobile Identity IE shall be ignored by
941 * the receiver.
944 * 11.3.15 LLC-PDU
947 static uint16_t
948 de_bssgp_llc_pdu(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
950 tvbuff_t *next_tvb=NULL;
951 uint32_t curr_offset;
953 curr_offset = offset;
955 if(len > 0){
956 next_tvb = tvb_new_subset_length(tvb, curr_offset, len);
957 proto_tree_add_bytes_format(tree, hf_bssgp_llc_data, tvb, curr_offset, len, NULL, "LLC Data");
960 if(next_tvb){
961 if (llc_handle) {
962 call_dissector(llc_handle, next_tvb, pinfo, gparent_tree);
963 } else {
964 call_data_dissector(next_tvb, pinfo, gparent_tree);
968 return len;
971 * 11.3.16 LLC Frames Discarded
973 static uint16_t
974 de_bssgp_llc_frames_disc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string, int string_len)
976 uint32_t curr_offset;
977 uint8_t oct;
979 curr_offset = offset;
981 /* Action value */
982 oct = tvb_get_uint8(tvb,curr_offset);
983 proto_tree_add_item(tree, hf_bssgp_llc_frames_disc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
984 curr_offset+=1;
986 if (add_string)
987 snprintf(add_string, string_len, " - %u Frames", oct);
989 return curr_offset-offset;
992 * 11.3.17 Location Area
994 /* Octets 3 to 7 contain the value part (starting with octet 2) of the
995 * Location Area Identification IE defined in 3GPP TS 24.008, not
996 * including 3GPP TS 24.008 IEI
1000 * 11.3.18 LSA Identifier List
1002 /* Rest of element coded as in 3GPP TS 48.008, not including
1003 * 3GPP TS 48.008 IEI and 3GPP TS 48.008 length indicator
1006 * 11.3.19 LSA Information
1008 /* Rest of element coded as in 3GPP TS 48.008, not including
1009 * 3GPP TS 48.008 IEI and 3GPP TS 48.008 length indicator
1012 * 11.3.20 Mobile Id
1014 /* Octets 3-n contain either the IMSI, IMEISV or IMEI coded as the
1015 * value part (starting with octet 3) of the Mobile Identity IE defined in
1016 * 3GPP TS 24.008, not including 3GPP TS 24.008 IEI and
1017 * 3GPP TS 24.008 length indicator
1020 * 11.3.21 MS Bucket Size
1023 static uint16_t
1024 de_bssgp_ms_bucket_size(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
1026 uint32_t curr_offset;
1028 curr_offset = offset;
1030 /* The Bmax field is coded as Bmax of BVC Bucket Size, see sub-clause 11.3.5. */
1031 proto_tree_add_item(tree, hf_bssgp_bucket_size, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
1032 curr_offset+=2;
1034 return curr_offset-offset;
1037 * 11.3.22 MS Radio Access Capability
1039 /* Rest of element coded as the value part defined in
1040 * 3GPP TS 24.008, not including 3GPP TS 24.008 IEI and
1041 * 3GPP TS 24.008 octet length indicator.
1044 * 11.3.23 OMC Id
1046 static uint16_t
1047 de_bssgp_omc_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
1049 uint32_t curr_offset;
1051 curr_offset = offset;
1053 /* octet 3-22 For the OMC identity, see 3GPP TS 12.20 */
1054 proto_tree_add_item(tree, hf_bssgp_omc_id, tvb, curr_offset, len, ENC_NA);
1056 return len;
1059 * 11.3.24 PDU In Error
1061 static uint16_t
1062 de_bssgp_pdu_in_error(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
1064 uint32_t curr_offset;
1066 curr_offset = offset;
1068 /* octet 3-? Erroneous BSSGP PDU */
1069 proto_tree_add_item(tree, hf_bssgp_msg_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1070 curr_offset++;
1072 proto_tree_add_item(tree, hf_bssgp_pdu_data, tvb, curr_offset, len-1, ENC_NA);
1074 return len;
1077 * 11.3.25 PDU Lifetime
1079 static uint16_t
1080 de_bssgp_pdu_lifetime(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
1082 uint32_t curr_offset;
1084 curr_offset = offset;
1086 proto_tree_add_item(tree, hf_bssgp_delay_val, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
1087 curr_offset+=2;
1089 return curr_offset-offset;
1093 The Delay Value field is coded as a 16-bit integer value in units of centi-seconds (one hundredth of a second). This
1094 coding provides a range of over 10 minutes in increments of 10 ms. As a special case, the hexadecimal value 0xFFFF
1095 (decimal 65 535) shall be interpreted as "infinite delay".
1098 * 11.3.26 PDU Type
1101 * 11.3.27 Priority
1103 /* Rest of element coded as the value part of the Priority IE defined in
1104 * 3GPP TS 48.008, not including 3GPP TS 48.008 IEI and
1105 * 3GPP TS 48.008 length indicator
1108 * 11.3.28 QoS Profile
1110 static const true_false_string bssgp_a_bit_vals = {
1111 "Radio interface uses RLC/MAC-UNITDATA functionality",
1112 "Radio interface uses RLC/MAC ARQ functionality"
1115 static const true_false_string bssgp_t_bit_vals = {
1116 "The SDU contains data",
1117 "The SDU contains signalling"
1120 static const true_false_string bssgp_cr_bit_vals = {
1121 "The SDU does not contain a LLC ACK or SACK command/response frame type",
1122 "The SDU contains a LLC ACK or SACK command/response frame type"
1125 #if 0
1126 static const value_string bssgp_peak_rate_gran_vals[] = {
1127 { 0x0, "100 bits/s increments" },
1128 { 0x1, "1000 bits/s increments" },
1129 { 0x2, "10000 bits/s increments" },
1130 { 0x3, "100000 bits/s increments" },
1131 { 0, NULL }
1133 #endif
1135 static const value_string bssgp_precedence_ul[] = {
1136 { 0, "High priority" },
1137 { 1, "Normal priority" },
1138 { 2, "Low priority" },
1139 { 0, NULL },
1142 static const value_string bssgp_precedence_dl[] = {
1143 { 0, "Radio priority 1" },
1144 { 1, "Radio priority 2" },
1145 { 2, "Radio priority 3" },
1146 { 3, "Radio priority 4" },
1147 { 4, "Radio priority unknown" },
1148 { 0, NULL },
1151 static uint16_t
1152 de_bssgp_qos_profile(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
1154 proto_item *pre_item;
1155 uint32_t curr_offset;
1156 uint16_t peak_bit_rate;
1157 uint8_t rate_gran, precedence;
1158 int link_dir;
1160 curr_offset = offset;
1162 /* octet 3-4 Peak bit rate provided by the network (note)
1163 * NOTE: The bit rate 0 (zero) shall mean "best effort" in this IE.
1165 link_dir = pinfo->link_dir;
1167 peak_bit_rate = tvb_get_ntohs(tvb, curr_offset);
1168 if (peak_bit_rate == 0) {
1169 proto_tree_add_uint_format_value(tree, hf_bssgp_peak_bit_rate, tvb, curr_offset, 2, peak_bit_rate, "Best effort");
1170 }else{
1171 rate_gran = tvb_get_uint8(tvb, curr_offset+2)&0xc0;
1172 switch(rate_gran){
1173 case 0:
1174 /* 100 bits/s increments */
1175 proto_tree_add_uint_format_value(tree, hf_bssgp_peak_bit_rate, tvb, curr_offset, 2, peak_bit_rate,
1176 "%u bits/s", peak_bit_rate * 100);
1177 break;
1178 case 1:
1179 /* 1000 bits/s increments */
1180 proto_tree_add_uint_format_value(tree, hf_bssgp_peak_bit_rate, tvb, curr_offset, 2, peak_bit_rate,
1181 "%u kbits/s", peak_bit_rate);
1182 break;
1183 case 2:
1184 /* 10000 bits/s increments */
1185 proto_tree_add_uint_format_value(tree, hf_bssgp_peak_bit_rate, tvb, curr_offset, 2, peak_bit_rate,
1186 "%u kbits/s", peak_bit_rate * 10);
1187 break;
1188 case 3:
1189 /* 100000 bits/s increments */
1190 proto_tree_add_uint_format_value(tree, hf_bssgp_peak_bit_rate, tvb, curr_offset, 2, peak_bit_rate,
1191 "%u kbits/s", peak_bit_rate * 100);
1192 break;
1193 default:
1194 break;
1197 curr_offset+=2;
1199 /* octet 5 Peak Bit Rate Granularity C/R T A Precedence */
1200 /* If the Gigabit Interface feature has not been negotiated, the "Peak bit rate"
1201 * field is the binary encoding of the peak bit rate information expressed in 100 bits/s
1202 * increments, starting from 0 x 100 bits/s until 65 535 x 100 bits/s (6 Mbps).
1204 * If the Gigabit Interface feature has been negotiated, the "Peak bit rate" field is the
1205 * binary encoding of the peak bit rate information expressed in increments as defined by
1206 * the Peak Bit Rate Granularity field.
1208 proto_tree_add_item(tree, hf_bssgp_peak_rate_gran, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1209 proto_tree_add_item(tree, hf_bssgp_cr_bit, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1210 proto_tree_add_item(tree, hf_bssgp_t_bit, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1211 proto_tree_add_item(tree, hf_bssgp_a_bit, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1212 precedence = tvb_get_uint8(tvb, curr_offset) & 0x7;
1213 pre_item = proto_tree_add_item(tree, hf_bssgp_precedence, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1214 if(link_dir == P2P_DIR_DL){
1215 proto_item_append_text(pre_item, " %s", val_to_str_const((uint32_t)precedence, bssgp_precedence_dl, "Radio Priority Unknown(Radio priority 3)"));
1216 }else{
1217 proto_item_append_text(pre_item, " %s", val_to_str_const((uint32_t)precedence, bssgp_precedence_ul, "Priority Unknown(Low priority)"));
1220 curr_offset++;
1222 return curr_offset-offset;
1225 * 11.3.29 Radio Cause
1227 static const value_string bssgp_radio_cause_vals[] = {
1228 { 0x00, "Radio contact lost with the MS" },
1229 { 0x01, "Radio link quality insufficient to continue communication" },
1230 { 0x02, "Cell reselection ordered" },
1231 { 0x03, "Cell reselection prepare" },
1232 { 0x04, "Cell reselection failure" },
1233 { 0, NULL },
1234 /* Otherwise "Reserved (Radio contact lost with the MS)" */
1237 static uint16_t
1238 de_bssgp_ra_cause(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
1240 uint32_t curr_offset;
1242 curr_offset = offset;
1244 proto_tree_add_item(tree, hf_bssgp_ra_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1245 curr_offset++;
1247 return curr_offset-offset;
1251 * 11.3.30 RA-Cap-UPD-Cause
1253 static const value_string bssgp_ra_cap_upd_cause_vals[] = {
1254 { 0x00, "OK, RA capability IE present" },
1255 { 0x01, "TLLI unknown in SGSN" },
1256 { 0x02, "No RA capabilities or IMSI available for this MS" },
1257 { 0, NULL },
1258 /* Otherwise "Reserved (TLLI unknown in SGSN)" */
1261 static uint16_t
1262 de_bssgp_ra_cap_upd_cause(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
1264 uint32_t curr_offset;
1266 curr_offset = offset;
1268 proto_tree_add_item(tree, hf_bssgp_ra_cap_upd_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1269 curr_offset++;
1271 return curr_offset-offset;
1275 * 11.3.31 Routeing Area
1277 /* Octets 3 to 8 contain the value part (starting with octet 2) of the
1278 * Routing Area Identification IE defined in 3GPP TS 24.008, not
1279 * including 3GPP TS 24.008 IEI
1282 * 11.3.32 R_default_MS
1284 static uint16_t
1285 de_bssgp_r_default_ms(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
1287 uint32_t curr_offset;
1289 curr_offset = offset;
1291 proto_tree_add_item(tree, hf_bssgp_r_default_ms, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
1292 curr_offset+=2;
1294 return curr_offset-offset;
1298 * 11.3.33 Suspend Reference Number
1300 static uint16_t
1301 de_bssgp_suspend_ref_no(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
1303 uint32_t curr_offset;
1305 curr_offset = offset;
1307 /* Unstructured value */
1308 proto_tree_add_item(tree, hf_bssgp_suspend_ref_no, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1310 curr_offset++;
1312 return curr_offset-offset;
1315 * 11.3.34 Tag
1318 static uint16_t
1319 de_bssgp_tag(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
1321 uint32_t curr_offset;
1323 curr_offset = offset;
1325 /* Unstructured value */
1326 proto_tree_add_item(tree, hf_bssgp_tag, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1328 curr_offset++;
1330 return curr_offset-offset;
1334 * 11.3.35 Temporary logical link Identity (TLLI)
1335 * Rest of element coded as the value part of the TLLI information
1336 * element in 3GPP TS 44.018, not including 3GPP TS 44.018 IEI.
1339 * 11.3.36 Temporary Mobile Subscriber Identity (TMSI)
1341 /* Rest of element coded as the value part of the TMSI/P-TMSI
1342 * information element in 3GPP TS 24.008, not including
1343 * 3GPP TS 24.008 IEI.
1346 * 11.3.37 Trace Reference
1348 static uint16_t
1349 de_bssgp_trace_ref(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
1351 uint32_t curr_offset;
1353 curr_offset = offset;
1355 /* octet 3-4 Trace Reference */
1356 proto_tree_add_item(tree, hf_bssgp_trace_ref, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
1358 curr_offset+=2;
1360 return curr_offset-offset;
1364 * 11.3.38 Trace Type
1366 /* This is coded as specified in Technical Specification
1367 * 3GPP TS 32.008
1368 * XXX: Coding unknown (Specification withdrawn) 3GPP TS 32.008
1370 static uint16_t
1371 de_bssgp_trace_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
1373 uint32_t curr_offset = offset;
1375 proto_tree_add_item(tree, hf_bssgp_trace_type_data, tvb, curr_offset, len, ENC_NA);
1377 return len;
1380 * 11.3.39 Transaction Id
1382 static uint16_t
1383 de_bssgp_transaction_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
1385 uint32_t curr_offset;
1387 curr_offset = offset;
1389 proto_tree_add_item(tree, hf_bssgp_transaction_id, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
1391 return curr_offset-offset;
1394 * 11.3.40 Trigger Id
1396 static uint16_t
1397 de_bssgp_trigger_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
1399 uint32_t curr_offset;
1401 curr_offset = offset;
1403 proto_tree_add_item(tree, hf_bssgp_trigger_id, tvb, curr_offset, len, ENC_NA);
1405 return len;
1408 * 11.3.41 Number of octets affected
1410 static uint16_t
1411 de_bssgp_no_of_oct_affected(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string, int string_len)
1413 uint32_t curr_offset;
1414 uint32_t no_of_oct;
1416 curr_offset = offset;
1418 /* octet 3-5 number of octets transferred or deleted */
1419 no_of_oct = tvb_get_ntoh24(tvb,curr_offset);
1420 proto_tree_add_item(tree, hf_bssgp_no_of_oct, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
1422 curr_offset+=3;
1424 if (add_string)
1425 snprintf(add_string, string_len, " - %u", no_of_oct);
1427 return curr_offset-offset;
1430 * 11.3.42 Packet Flow Identifier (PFI)
1432 /* Rest of element coded as the value part of the Packet Flow
1433 * Identifier information element in 3GPP TS 24.008, not including
1434 * 3GPP TS 24.008 IEI
1437 * 11.3.42a (void)
1440 * 11.3.43 Aggregate BSS QoS Profile
1442 /* Rest of element coded as the value part of the QoS information
1443 * element in 3GPP TS 24.008, not including 3GPP TS 24.008 IEI and
1444 * length indicator. The shorter 3-byte form of QoS information is not
1445 * allowed in BSSGP PDUs.
1446 * 10.5.6.5
1449 * 11.3.44 GPRS Timer
1451 static const value_string bssgp_unit_vals[] = {
1452 { 0, "incremented in multiples of 2 s" },
1453 { 1, "incremented in multiples of 1 minute" },
1454 { 2, "incremented in multiples of decihours" },
1455 { 3, "incremented in multiples of 500 msec" },
1456 { 4, "incremented in multiples of 1 minute(Undefined)" },
1457 { 5, "incremented in multiples of 1 minute(Undefined)" },
1458 { 6, "incremented in multiples of 1 minute(Undefined)" },
1459 { 7, "the timer does not expire" },
1460 { 0, NULL},
1461 /* Otherwise "incremented in multiples of 1 minute" */
1464 static uint16_t
1465 de_bssgp_gprs_timer(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
1467 uint32_t curr_offset;
1469 curr_offset = offset;
1471 /*octet 3 Unit Value Timer value */
1472 proto_tree_add_item(tree, hf_bssgp_unit_val, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1473 proto_tree_add_item(tree, hf_bssgp_gprs_timer, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1475 curr_offset++;
1477 return curr_offset-offset;
1480 * 11.3.45 Feature Bitmap
1482 static uint16_t
1483 de_bssgp_feature_bitmap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
1485 uint32_t curr_offset;
1487 curr_offset = offset;
1488 /* MBMS */
1489 proto_tree_add_item(tree, hf_bssgp_mbms, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1490 /* EnhancedRadioStatus */
1491 proto_tree_add_item(tree, hf_bssgp_EnhancedRadioStatus, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1492 /* PFCFC */
1493 proto_tree_add_item(tree, hf_bssgp_pfcfc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1494 /* RIM */
1495 proto_tree_add_item(tree, hf_bssgp_rim, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1496 /* LCS */
1497 proto_tree_add_item(tree, hf_bssgp_lcs, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1498 /* INR */
1499 proto_tree_add_item(tree, hf_bssgp_inr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1500 /* CBL */
1501 proto_tree_add_item(tree, hf_bssgp_cbl, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1502 /* PFC */
1503 proto_tree_add_item(tree, hf_bssgp_pfc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1505 curr_offset++;
1507 return curr_offset-offset;
1510 * 11.3.46 Bucket Full Ratio
1512 static uint16_t
1513 de_bssgp_bucket_full_ratio(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
1515 uint32_t curr_offset;
1517 curr_offset = offset;
1519 /* Ratio of the bucket that is filled up with data */
1520 proto_tree_add_item(tree, hf_bssgp_bucket_full_ratio, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1522 curr_offset++;
1524 return curr_offset-offset;
1527 * 11.3.47 Service UTRAN CCO
1529 static const value_string bssgp_service_utran_cco_vals[] = {
1530 { 0, "Network initiated cell change order procedure to UTRAN should be performed" },
1531 { 1, "Network initiated cell change order procedure to UTRAN should not be performed" },
1532 { 2, "Network initiated cell change order procedure to UTRAN shall not be performed" },
1533 { 3, "If received, shall be interpreted as no information available (bits 4-5 valid)" },
1534 { 0, NULL },
1535 /* Otherwise "No information available" */
1538 static const value_string bssgp_service_eutran_cco_vals[] = {
1539 { 0, "If received, shall be interpreted as no information available" },
1540 { 1, "Network initiated cell change order to E-UTRAN or PS handover to E-UTRAN procedure should be performed" },
1541 { 2, "Network initiated cell change order to E-UTRAN or PS handover to E-UTRAN procedure should not be performed" },
1542 { 3, "Network initiated cell change order to E-UTRAN or PS handover to E-UTRAN procedure shall not be performed" },
1543 { 0, NULL },
1544 /* Otherwise "No information available" */
1547 static uint16_t
1548 de_bssgp_serv_utran_cco(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
1550 uint32_t curr_offset;
1552 curr_offset = offset;
1554 /* Service EUTRAN CCO Value part */
1555 proto_tree_add_item(tree, hf_bssgp_serv_eutran_cco, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1556 /* Service UTRAN CCO Value part */
1557 proto_tree_add_item(tree, hf_bssgp_serv_utran_cco, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1558 curr_offset++;
1560 return curr_offset-offset;
1564 * 11.3.48 NSEI (Network Service Entity Identifier)
1566 static uint16_t
1567 de_bssgp_nsei(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
1569 uint32_t curr_offset;
1570 uint16_t nsei;
1572 curr_offset = offset;
1574 nsei = tvb_get_ntohs(tvb, curr_offset);
1575 proto_tree_add_item(tree, hf_bssgp_nsei, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
1576 curr_offset+=2;
1578 col_append_sep_fstr(pinfo->cinfo, COL_INFO, BSSGP_SEP, "NSEI %u", nsei);
1581 return curr_offset-offset;
1584 * 11.3.49 RRLP APDU
1586 static uint16_t
1587 de_bssgp_rrlp_apdu(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
1589 tvbuff_t *next_tvb=NULL;
1590 uint32_t curr_offset;
1592 curr_offset = offset;
1594 /* The rest of the information element contains an embedded RRLP
1595 * message whose content and encoding are defined according to the
1596 * 3GPP TS 44.031. The RRLP protocol is not octet aligned.
1597 * Therefore, the unused bits in the last octet are padded with zeroes
1600 if(len > 0){
1601 next_tvb = tvb_new_subset_remaining(tvb, curr_offset);
1602 proto_tree_add_bytes_format(tree, hf_bssgp_rrlp_apdu, tvb, curr_offset, len, NULL, "RRLP APDU");
1605 if(next_tvb){
1606 if (rrlp_handle) {
1607 call_dissector(rrlp_handle, next_tvb, pinfo, gparent_tree);
1608 } else {
1609 call_data_dissector(next_tvb, pinfo, gparent_tree);
1612 return len;
1616 * 11.3.50 LCS QoS
1618 /* Rest of element coded as the value part defined in
1619 * 3GPP TS 48.008, not including 3GPP TS 48.008 IEI and
1620 * 3GPP TS 48.008 octet length indicator
1623 * 11.3.51 LCS Client Type
1625 /* Rest of element coded as the value part defined in
1626 * 3GPP TS 49.031, not including 3GPP TS 49.031 IEI and
1627 * 3GPP TS 49.031 octet length indicator
1630 * 11.3.52 Requested GPS Assistance Data
1632 /* Rest of element coded as the value part defined in
1633 * 3GPP TS 49.031, not including 3GPP TS 49.031 IEI and
1634 * 3GPP TS 49.031 octet length indicator
1637 * 11.3.53 Location Type
1639 /* Rest of element coded as the value part defined in
1640 * 3GPP TS 49.031, not including 3GPP TS 49.031 IEI and
1641 * 3GPP TS 49.031 octet length indicator
1644 * 11.3.54 Location Estimate
1646 /* Rest of element coded as the value part defined in
1647 * 3GPP TS 48.008, not including 3GPP TS 48.008 IEI and
1648 * 3GPP TS 48.008 octet length indicator
1651 * 11.3.55 Positioning Data
1653 /* Rest of element coded as the value part defined in
1654 * 3GPP TS 49.031, not including 3GPP TS 49.031 IEI and
1655 * 3GPP TS 49.031 octet length indicator
1658 * 11.3.56 Deciphering Keys
1660 /* Rest of element coded as the value part defined in
1661 * 3GPP TS 49.031, not including 3GPP TS 49.031 IEI and
1662 * 3GPP TS 49.031 octet length indicator
1665 * 11.3.57 LCS Priority
1667 /* Rest of element coded as the value part defined in
1668 * 3GPP TS 49.031, not including 3GPP TS 49.031 IEI and
1669 * 3GPP TS 49.031 octet length indicator
1672 * 11.3.58 LCS Cause
1674 /* Rest of element coded as the value part defined in
1675 * 3GPP TS 49.031, not including 3GPP TS 49.031 IEI and
1676 * 3GPP TS 49.031 octet length indicator
1679 * 11.3.59 LCS Capability
1681 /* Rest of element coded as the value part of the PS LCS Capability
1682 * IE defined in 3GPP TS 24.008, not including 3GPP TS 24.008 IEI
1683 * and length indicator
1686 * 11.3.60 RRLP Flags
1689 static const true_false_string bssgp_rrlp_flg1_vals = {
1690 "Not a Positioning Command or final response",
1691 "Position Command (BSS to SGSN) or final response (SGSN to BSS)"
1694 static uint16_t
1695 de_bssgp_rrlp_flags(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
1697 uint32_t curr_offset;
1699 curr_offset = offset;
1701 /* Flag 1 (Octet 3, bit 1): */
1702 proto_tree_add_item(tree, hf_bssgp_rrlp_flag1, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
1704 return curr_offset-offset;
1708 * 11.3.61 RIM Application Identity
1711 static const value_string bssgp_rim_appid_vals[] = {
1712 { 0, "Reserved" },
1713 { 1, "Network Assisted Cell Change (NACC)" },
1714 { 2, "System Information 3 (SI3)" },
1715 { 3, "MBMS data channel" },
1716 { 4, "SON Transfer" },
1717 { 5, "UTRA System Information (UTRA SI)" },
1718 { 0, NULL },
1721 static uint16_t
1722 de_bssgp_rim_app_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
1724 uint32_t curr_offset;
1726 curr_offset = offset;
1728 /* RIM Application Identity */
1729 g_rim_application_identity = tvb_get_uint8(tvb, curr_offset);
1730 proto_tree_add_item(tree, hf_bssgp_rim_app_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1731 curr_offset++;
1733 return curr_offset-offset;
1737 * 11.3.62 RIM Sequence Number
1739 static uint16_t
1740 de_bssgp_rim_seq_no(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
1742 uint32_t curr_offset;
1744 curr_offset = offset;
1746 /* RIM Sequence Number */
1747 proto_tree_add_item(tree, hf_bssgp_rim_seq_no, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
1748 curr_offset+=4;
1750 return curr_offset-offset;
1753 * 11.3.62a RIM Container
1754 * 11.3.62a.0 General
1755 * 11.3.62a.1 RAN-INFORMATION-REQUEST RIM Container
1757 /* Dissection moved */
1759 * 11.3.62a.2 RAN-INFORMATION RIM Container
1760 * 11.3.62a.3 RAN-INFORMATION-ACK RIM Container
1761 * 11.3.62a.4 RAN-INFORMATION-ERROR RIM Container
1762 * 11.3.62a.5 RAN-INFORMATION-APPLICATION-ERROR RIM Container
1765 * 11.3.63 Application Container
1766 * 11.3.63.1 RAN-INFORMATION-REQUEST Application Container
1767 * 11.3.63.1.0 General
1772 static uint16_t
1773 de_bssgp_ran_information_request_app_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string, int string_len)
1775 tvbuff_t *new_tvb = NULL;
1776 int curr_offset, bit_offset;
1778 curr_offset = offset;
1780 switch(g_rim_application_identity){
1781 case 1:
1782 /* 11.3.63.1.1 RAN-INFORMATION-REQUEST Application Container for the NACC Application */
1783 /* Reporting Cell Identifier */
1784 curr_offset = curr_offset + de_bssgp_cell_id(tvb, tree, pinfo,curr_offset, len, add_string, string_len);
1785 break;
1786 case 2:
1787 /* 11.3.63.1.2 RAN-INFORMATION-REQUEST Application Container for the SI3 Application */
1788 /* Reporting Cell Identifier */
1789 curr_offset = curr_offset + de_bssgp_cell_id(tvb, tree, pinfo, curr_offset, len, add_string, string_len);
1790 break;
1791 case 3:
1792 /* 11.3.63.1.3 RAN-INFORMATION-REQUEST Application Container for the MBMS data channel Application */
1793 /* Reporting Cell Identifier */
1794 curr_offset = curr_offset + de_bssgp_cell_id(tvb, tree, pinfo, curr_offset, len, add_string, string_len);
1795 break;
1796 case 4:
1798 asn1_ctx_t asn1_ctx;
1800 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1801 /* 11.3.63.1.4 RAN-INFORMATION-REQUEST Application Container for the SON Transfer Application */
1802 /* Reporting Cell Identifier */
1803 /* convert to bit offset */
1804 bit_offset = curr_offset<<3;
1805 bit_offset = dissect_s1ap_Global_ENB_ID(tvb, bit_offset, &asn1_ctx, tree, hf_bssgp_Global_ENB_ID_PDU);
1806 /*bit_offset = */dissect_s1ap_SONtransferRequestContainer(tvb, bit_offset, &asn1_ctx, tree, hf_bssgp_SONtransferRequestContainer_PDU);
1807 curr_offset += 7; curr_offset >>= 3;
1809 break;
1810 case 5:
1811 /* 11.3.63.1.5 RAN-INFORMATION Application Container for the UTRA SI Application */
1812 /* Octet 3-m Reporting Cell Identifier
1813 * This field is encoded as the Source Cell Identifier IE (UTRAN Source Cell ID) as defined in
1814 * 3GPP TS 25.413
1816 new_tvb = tvb_new_subset_remaining(tvb, curr_offset);
1817 curr_offset = curr_offset + dissect_ranap_SourceCellID_PDU(new_tvb, pinfo, tree, NULL);
1818 break;
1819 default :
1820 proto_tree_add_expert(tree, pinfo, &ei_bssgp_unknown_rim_app_id, tvb, curr_offset, len);
1821 curr_offset+=len;
1822 break;
1826 return curr_offset-offset;
1830 * 11.3.63.2 RAN-INFORMATION Application Container Unit
1831 * 11.3.63.2.0 General
1833 static const true_false_string bssgp_si_psi_type_vals = {
1834 "PSI messages as specified for PBCCH (3GPP TS 44.060) follow",
1835 "SI messages as specified for BCCH (3GPP TS 44.018) follow"
1838 static const value_string bssgp_rat_discriminator_vals[] = {
1839 { 0, "The reporting RAT is GERAN" },
1840 { 1, "The reporting RAT is UTRAN" },
1841 { 2, "The reporting RAT is E-UTRAN" },
1842 { 0, NULL },
1844 static uint16_t
1845 de_bssgp_ran_information_app_cont_unit(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string, int string_len)
1847 tvbuff_t *new_tvb = NULL;
1848 uint32_t curr_offset;
1849 uint8_t type, num_items, rat_type, oct;
1850 int i;
1852 curr_offset = offset;
1854 switch(g_rim_application_identity){
1855 case 1:
1856 /* 11.3.63.2.1 RAN-INFORMATION Application Container for the NACC Application */
1857 /* Reporting Cell Identifier */
1858 curr_offset = curr_offset + de_bssgp_cell_id(tvb, tree, pinfo, curr_offset, len, add_string, string_len);
1859 /* Number of SI/PSI */
1860 num_items = tvb_get_uint8(tvb,curr_offset)>>1;
1861 proto_tree_add_item(tree, hf_bssgp_num_si_psi, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1862 /* Type */
1863 type = tvb_get_uint8(tvb,curr_offset)&0x01;
1864 proto_tree_add_item(tree, hf_bssgp_si_psi_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1865 curr_offset++;
1866 /* Octet 12-n SI/PSI */
1867 if(type==1){
1868 /* If the Type field indicates that "PSI messages as specified for PBCCH (3GPP TS 44.060) follow" then the SI/PSI
1869 * field contains Packet System Information message instances encoded for PBCCH as specified in
1870 * 3GPP TS 44.060. Each Packet System Information message contains the MESSAGE_TYPE field followed by the
1871 * PSI message content. Each message is 22 octets long.
1873 for (i=0; i < num_items; i++){
1874 proto_tree_add_expert_format(tree, pinfo, &ei_bssgp_not_dissected_yet, tvb, curr_offset, 22, "PSI item %u - not dissected yet",i+1);
1875 curr_offset+=22;
1877 }else{
1878 /* If the Type field indicates that "SI messages as specified for BCCH (3GPP TS 44.018) follow" then the SI/PSI
1879 * field contains System Information message instances encoded for BCCH as specified in 3GPP TS 44.018. Each
1880 * System Information message contains the Message type octet followed by all the IEs composing the message
1881 * payload. Each message is 21 octets long.
1883 void (*msg_fcn_p)(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len) = NULL;
1884 int ett_tree = -1;
1885 int hf_idx;
1886 const char *msg_str;
1887 proto_item *si_item, *si_item2;
1888 proto_tree *si_tree;
1890 for (i=0; i < num_items; i++){
1891 oct = tvb_get_uint8(tvb,curr_offset);
1892 get_rr_msg_params(oct, &msg_str, &ett_tree, &hf_idx, &msg_fcn_p);
1893 si_item2 = proto_tree_add_bytes_format(tree, hf_bssgp_si_item, tvb, curr_offset, 21, NULL, "SI item %u ",i+1);
1894 si_item = proto_tree_add_item(tree, hf_idx, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1895 si_tree = proto_item_add_subtree(si_item, ett_tree);
1896 if (msg_fcn_p == NULL){
1897 expert_add_info(pinfo, si_item2, &ei_bssgp_si_item);
1898 }else{
1899 (*msg_fcn_p)(tvb, si_tree, pinfo, curr_offset+1, 20);
1901 curr_offset+=21;
1904 break;
1905 case 2:
1906 /* 11.3.63.2.2 RAN-INFORMATION Application Container for the SI3 Application */
1907 /* Octet 3-10 Reporting Cell Identifier */
1908 /* Reporting Cell Identifier: The parameter is encoded as the value part of the Cell Identifier IE
1909 * defined in sub-clause 11.3.9, not including IEI and Length Indicator.
1911 curr_offset = curr_offset + de_bssgp_cell_id(tvb, tree, pinfo, curr_offset, len, add_string, string_len);
1912 /* Octet 11-31 SI3 */
1913 /* SI3: contains the SYSTEM INFORMATION type 3 message encoded for BCCH as specified in 3GPP TS 44.018 ch 9.1.35
1914 * It contains the Message type octet followed by all the IEs composing the message payload.
1915 * The message is 21 octets long.
1916 * dtap_rr_sys_info_3(tvb, tree, curr_offset, len-7)
1918 proto_tree_add_item(tree, hf_bssgp_sys_info_type3_msg, tvb, curr_offset, 1, ENC_NA);
1919 curr_offset++;
1920 break;
1921 case 3:
1922 /* 11.3.63.2.3 RAN-INFORMATION Application Container for the MBMS data channel Application */
1923 /* Octet 3-10 Reporting Cell Identifier */
1924 curr_offset = curr_offset + de_bssgp_cell_id(tvb, tree, pinfo, curr_offset, len, add_string, string_len);
1925 /* Octet 11-n MBMS data channel report */
1926 proto_tree_add_expert_format(tree, pinfo, &ei_bssgp_not_dissected_yet, tvb, curr_offset, len-6, "MBMS data channel report - not dissected yet");
1927 break;
1928 case 4:
1929 /* 11.3.63.2.4 RAN-INFORMATION Application Container for the SON Transfer Application */
1930 /* Octet 3 Spare RAT discriminator */
1931 rat_type = tvb_get_uint8(tvb,curr_offset) & 0x0f;
1932 proto_tree_add_item(tree, hf_bssgp_rat_discriminator, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1933 curr_offset++;
1934 /* Octet 4-m Reporting Cell Identifier */
1935 switch(rat_type){
1936 case 0:
1937 /* If the RAT discriminator field indicates GERAN, this field is encoded as the value part of the Cell Identifier IE
1938 * defined in sub-clause 11.3.9, not including IEI and Length Indicator.
1940 curr_offset = curr_offset + de_bssgp_cell_id(tvb, tree, pinfo, curr_offset, len, add_string, string_len);
1941 break;
1942 case 1:
1943 /* If the RAT discriminator field indicates UTRAN, this field is encoded as the Source Cell Identifier IE (UTRAN
1944 * Source Cell ID) as defined in 3GPP TS 25.413
1946 new_tvb = tvb_new_subset_remaining(tvb, curr_offset);
1947 curr_offset = curr_offset + dissect_ranap_SourceCellID_PDU(new_tvb, pinfo, tree, NULL);
1948 break;
1949 case 2:
1950 /* If the RAT discriminator field indicates E-UTRAN, this field is encoded as the E-UTRAN CGI IE as
1951 * defined in 3GPP TS 36.413
1953 new_tvb = tvb_new_subset_remaining(tvb, curr_offset);
1954 curr_offset = curr_offset + dissect_s1ap_Global_ENB_ID_PDU(new_tvb, pinfo, tree, NULL);
1955 break;
1956 default:
1957 break;
1960 break;
1961 case 5:
1962 /* 11.3.63.2.5 RAN-INFORMATION Application Container for the UTRA SI Application */
1963 /* Octet 3-m Reporting Cell Identifier
1964 * Reporting Cell Identifier: This field is encoded as the Source Cell Identifier IE
1965 * (UTRAN Source Cell ID) as defined in 3GPP TS 25.413
1967 new_tvb = tvb_new_subset_length(tvb, curr_offset, len);
1968 curr_offset = curr_offset + dissect_ranap_SourceCellID_PDU(new_tvb, pinfo, tree, NULL);
1969 /* Octet (m+1)-n UTRA SI Container
1970 * UTRA SI Container: This field contains System Information Container valid for the reporting cell
1971 * encoded as defined in TS 25.331
1972 * The Application Container IE included in the RIM container IE of a RAN-INFORMATION/End PDU or of a
1973 * RAN-INFORMATION/Stop PDU shall contain only the identity of the reporting cell.
1975 if (curr_offset >= len - 1) {
1976 switch (g_bssgp_ran_inf_pdu_t_ext_c) {
1977 case 0:
1978 /* RAN-INFORMATION/Stop PDU */
1979 /*Falltrough */
1980 case 4:
1981 /* RAN-INFORMATION/End PDU*/
1982 return curr_offset-offset;
1983 default:
1984 break;
1986 proto_tree_add_expert_format(tree, pinfo, &ei_bssgp_ran_inf_app_cont_utra_si, tvb, curr_offset-1, 1, "UTRA SI Container - not present");
1987 return curr_offset-offset;
1989 new_tvb = tvb_new_subset_length(tvb, curr_offset, (len - (curr_offset - offset)));
1990 call_dissector_only(rrc_sys_info_cont_handle, new_tvb, pinfo, tree, NULL);
1991 curr_offset = curr_offset + (len - (curr_offset - offset));
1992 break;
1994 default :
1995 proto_tree_add_expert(tree, pinfo, &ei_bssgp_unknown_rim_app_id_data, tvb, curr_offset, len);
1996 curr_offset+=len;
1997 break;
2001 return curr_offset-offset;
2004 * 11.3.64 Application Error Container
2006 static const value_string bssgp_nacc_cause_vals[] = {
2007 { 0, "Other unspecified error" },
2008 { 1, "Syntax error in the Application Container" },
2009 { 2, "Reporting Cell Identifier does not match with the Destination Cell Identifier or with the Source Cell Identifier" },
2010 { 3, "SI/PSI type error" },
2011 { 4, "Inconsistent length of a SI/PSI message" },
2012 { 5, "Inconsistent set of messages" },
2013 { 0, NULL },
2016 static const value_string bssgp_si3_cause_vals[] = {
2017 { 0, "Other unspecified error" },
2018 { 1, "Syntax error in the Application Container" },
2019 { 2, "Reporting Cell Identifier does not match with the Destination Cell Identifier or with the Source Cell Identifier" },
2020 { 3, "Inconsistent length of a SI3 message" },
2021 { 4, "Inconsistent set of messages" },
2022 { 0, NULL },
2025 static const value_string bssgp_mbms_data_ch_cause_vals[] = {
2026 { 0, "Other unspecified error" },
2027 { 1, "Syntax error in the Application Container" },
2028 { 2, "Reporting Cell Identifier does not match with the Destination Cell Identifier or with the Source Cell Identifier" },
2029 { 3, "RAN-INFORMATION/Initial Multiple Report or RANINFORMATION/Single Report PDU exceeds the maximum supported length" },
2030 { 4, "Inconsistent MBMS data channel description" },
2031 { 0, NULL },
2034 static const value_string bssgp_utra_si_cause_vals[] = {
2035 { 0, "Other unspecified error" },
2036 { 1, "Syntax error in the Application Container" },
2037 { 2, "Inconsistent Reporting Cell Identifier" },
2038 { 0, NULL },
2041 static uint16_t
2042 de_bssgp_ran_app_error_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
2044 tvbuff_t *new_tvb = NULL;
2045 uint32_t curr_offset;
2047 curr_offset = offset;
2049 switch(g_rim_application_identity){
2050 case 1:
2052 * 11.3.64.1 Application Error Container layout for the NACC application
2054 /* Octet 3 NACC Cause */
2055 proto_tree_add_item(tree, hf_bssgp_nacc_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2056 curr_offset++;
2057 /* Erroneous Application Container including IEI and LI */
2058 proto_tree_add_expert(tree, pinfo, &ei_bssgp_erroneous_app_container, tvb, curr_offset, len-(curr_offset-offset));
2059 break;
2060 case 2:
2062 * 11.3.64.2 Application Error Container for the SI3 application
2064 /* Octet 3 SI3 Cause */
2065 proto_tree_add_item(tree, hf_bssgp_si3_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2066 curr_offset++;
2067 /* Erroneous Application Container including IEI and LI */
2068 proto_tree_add_expert(tree, pinfo, &ei_bssgp_erroneous_app_container, tvb, curr_offset, len-(curr_offset-offset));
2069 break;
2070 case 3:
2072 * 11.3.64.3 Application Error Container for the MBMS data channel application
2074 /* Octet 3 MBMS data channel Cause */
2075 proto_tree_add_item(tree, hf_bssgp_mbms_data_ch_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2076 curr_offset++;
2077 /* Erroneous Application Container including IEI and LI */
2078 proto_tree_add_expert(tree, pinfo, &ei_bssgp_erroneous_app_container, tvb, curr_offset, len-(curr_offset-offset));
2079 break;
2080 case 4:
2082 * 11.3.64.4 Application Error Container for the SON Transfer Application
2084 /* SON Transfer Cause: This field indicates the cause why the Application Error Container IE is sent.
2085 * The "SON Transfer Cause" field is encoded as the SON Transfer Cause IE as defined in 3GPP TS 36.413
2087 new_tvb = tvb_new_subset_remaining(tvb, curr_offset);
2088 curr_offset = curr_offset + dissect_s1ap_SONtransferCause_PDU(new_tvb, pinfo, tree, NULL);
2089 /* Erroneous Application Container including IEI and LI */
2090 proto_tree_add_expert(tree, pinfo, &ei_bssgp_erroneous_app_container, tvb, curr_offset, len-(curr_offset-offset));
2091 break;
2092 case 5:
2093 /* 11.3.64.5 Application Error Container for the UTRA SI Application*/
2094 /* Octet 3 UTRA SI Cause */
2095 proto_tree_add_item(tree, hf_bssgp_utra_si_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2096 break;
2097 default :
2098 proto_tree_add_expert(tree, pinfo, &ei_bssgp_unknown_app_container, tvb, curr_offset, len);
2099 break;
2101 return len;
2105 * 11.3.65 RIM PDU Indications
2107 static const value_string bssgp_ran_inf_req_pdu_t_ext_c_vals[] = {
2108 { 0, "RAN-INFORMATION-REQUEST/Stop PDU" },
2109 { 1, "RAN-INFORMATION-REQUEST/Single Report PDU" },
2110 { 2, "RAN-INFORMATION-REQUEST/Multiple Report PDU" },
2111 { 3, "Reserved" },
2112 { 4, "Reserved" },
2113 { 5, "Reserved" },
2114 { 6, "Reserved" },
2115 { 7, "Reserved" },
2116 { 0, NULL },
2119 static const value_string bssgp_ran_inf_pdu_t_ext_c_vals[] = {
2120 { 0, "RAN-INFORMATION/Stop PDU" },
2121 { 1, "RAN-INFORMATION/Single Report PDU" },
2122 { 2, "RAN-INFORMATION/Initial Multiple Report PDU" },
2123 { 3, "RAN-INFORMATION/Multiple Report PDU" },
2124 { 4, "RAN-INFORMATION/End PDU" },
2125 { 5, "Reserved" },
2126 { 6, "Reserved" },
2127 { 7, "Reserved" },
2128 { 0, NULL },
2131 static const true_false_string bssgp_rim_pdu_ind_ack_vals = {
2132 "ACK requested",
2133 "No ACK requested"
2136 static uint16_t
2137 de_bssgp_rim_pdu_indications(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
2139 uint32_t curr_offset;
2141 curr_offset = offset;
2143 switch(g_pdu_type){
2144 case BSSGP_PDU_RAN_INFORMATION_REQUEST:
2145 /* 11.3.65.1 RAN-INFORMATION-REQUEST RIM PDU Indications */
2146 /* Table 11.3.65.1: RAN-INFORMATION-REQUEST PDU Type Extension coding */
2147 proto_tree_add_item(tree, hf_bssgp_ran_inf_req_pdu_t_ext_c, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2148 /* The ACK field is not used and shall be considered as spare */
2149 curr_offset++;
2150 break;
2151 case BSSGP_PDU_RAN_INFORMATION:
2152 /* 11.3.65.2 RAN-INFORMATION RIM PDU Indications */
2153 /* Table 11.3.65.2: RAN-INFORMATION PDU Type Extension coding */
2154 proto_tree_add_item_ret_uint(tree, hf_bssgp_ran_inf_pdu_t_ext_c, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &g_bssgp_ran_inf_pdu_t_ext_c);
2155 proto_tree_add_item(tree, hf_bssgp_rim_pdu_ind_ack, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2156 curr_offset++;
2157 break;
2158 case BSSGP_PDU_RAN_INFORMATION_APP_ERROR:
2159 /* 11.3.65.3 RAN-INFORMATION-APPLICATION-ERROR RIM PDU Indications */
2160 proto_tree_add_item(tree, hf_bssgp_rim_pdu_ind_ack, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2161 /* The PDU Type Extension field is not used and shall be considered as spare */
2162 curr_offset++;
2163 break;
2164 default:
2165 break;
2168 return curr_offset-offset;
2172 * 11.3.65.0 General
2173 * 11.3.65.1 RAN-INFORMATION-REQUEST RIM PDU Indications
2174 * 11.3.65.2 RAN-INFORMATION RIM PDU Indications
2175 * 11.3.65.3 RAN-INFORMATION-APPLICATION-ERROR RIM PDU Indications
2176 * 11.3.66 (void)
2179 * 11.3.67 RIM Protocol Version Number
2181 static const value_string bssgp_rim_proto_ver_no_vals[] = {
2182 { 0, "Reserved" },
2183 { 1, "Version 1" },
2184 { 0, NULL },
2187 static uint16_t
2188 de_bssgp_rim_proto_ver_no(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
2190 uint32_t curr_offset;
2192 curr_offset = offset;
2194 /* Octet 3 RIM Protocol Version Number */
2195 proto_tree_add_item(tree, hf_bssgp_rim_proto_ver_no, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2196 curr_offset++;
2198 return curr_offset-offset;
2202 * 11.3.68 PFC Flow Control parameters
2205 static uint16_t
2206 de_bssgp_pfc_flow_ctrl(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
2208 proto_tree *pfc_tree;
2210 uint32_t curr_offset;
2211 uint8_t num_pfc, i, pfc_len;
2212 bool b_pfc_included;
2214 curr_offset = offset;
2216 num_pfc = tvb_get_uint8(tvb, curr_offset);
2217 if (num_pfc < 12) {
2218 proto_tree_add_uint(tree, hf_bssgp_num_pfc, tvb, curr_offset, 1, num_pfc);
2219 }else {
2220 proto_tree_add_uint_format_value(tree, hf_bssgp_num_pfc, tvb, curr_offset, 1, num_pfc, "Reserved");
2221 return (curr_offset-offset);
2223 curr_offset++;
2224 if (num_pfc == 0)
2225 return (curr_offset-offset);
2227 pfc_len = (len - 1) / num_pfc;
2228 b_pfc_included = (pfc_len == 6);
2230 for (i = 0; i < num_pfc; i++) {
2231 pfc_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, pfc_len,
2232 ett_bssgp_pfc_flow_control_parameters_pfc, NULL, "PFC (%u)", i + 1);
2234 /* PFI: Packet Flow Identifier.
2235 * Coded as the value part of the Packet Flow Identifier information element in
2236 * 3GPP TS 24.008, not including 3GPP TS 24.008 IEI
2238 de_sm_pflow_id(tvb, pfc_tree, pinfo, curr_offset, 1, NULL, 0);
2239 curr_offset++;
2241 /* Bmax_PFC: Bucket size of the PFC. Coded like the value part of BVC Bucket Size, see sub-clause 11.3.5. */
2242 proto_tree_add_item(tree, hf_bssgp_bmax_pfc, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
2243 curr_offset += 2;
2245 /* R_PFC: Bucket Leak Rate of the PFC. Coded as the value part of Bucket Leak Rate (R), see sub-clause 11.3.4. */
2246 proto_tree_add_item(tree, hf_bssgp_r_pfc, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
2247 curr_offset += 2;
2249 if (b_pfc_included) {
2250 /* B_PFC: Bucket Full Ratio of the PFC. This field is only present if the Current Bucket Level (CBL) feature is
2251 * negotiated. Otherwise, the flow control parameters for the next PFC, if any, are provided instead. This field if coded as
2252 * the value part of the Bucket Full Ratio, see sub-clause 11.3.46.
2254 proto_tree_add_item(tree, hf_bssgp_b_pfc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2255 curr_offset++;
2258 return curr_offset-offset;
2261 * 11.3.69 Global CN-Id
2263 /* Coded as octets 3 to 7 of the Global CN-Id IE, defined in
2264 * 3GPP TS 29.018
2267 * 11.3.70 RIM Routing Information
2269 static const value_string bssgp_ra_discriminator_vals[] = {
2270 { 0, "A Cell Identifier is used to identify a GERAN cell" },
2271 { 1, "A Global RNC-ID is used to identify a UTRAN RNC" },
2272 { 2, "An eNB identifier is used to identify an E-UTRAN eNodeB or HeNB" },
2273 { 0, NULL },
2276 static uint16_t
2277 de_bssgp_rim_routing_inf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string, int string_len)
2279 uint8_t oct;
2280 uint16_t rnc_id;
2281 tvbuff_t *new_tvb = NULL;
2282 uint32_t curr_offset;
2283 proto_item* ti;
2285 curr_offset = offset;
2287 /* This information element uniquely identifies either a cell within a
2288 * GERAN BSS, a UTRAN RNC or an E-UTRAN eNodeB.
2291 /* RIM Routing Address discriminator */
2292 oct = tvb_get_uint8(tvb,curr_offset);
2293 ti = proto_tree_add_item(tree, hf_bssgp_ra_discriminator, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2294 curr_offset++;
2295 switch(oct){
2296 case 0:
2297 /* RIM Routing Address discriminator = 0000:
2298 * The RIM Routing Address field contains a Cell Identifier
2299 * and is coded as the value part (octet 3 to octet 10) of the
2300 * Cell Identifier information element specified in sub-clause 11.3.9.
2302 de_bssgp_cell_id(tvb, tree, pinfo, curr_offset, len, add_string, string_len);
2303 break;
2304 case 1:
2305 /* RIM Routing Address discriminator = 0001:
2306 * The RIM Routing Address field contains an RNC identifier and is coded as follows:
2307 * Octets 4 to 9 contain the value part (starting with octet 2) of the Routing Area Identification IE
2308 * defined in 3GPP TS 24.008, not including 3GPP TS 24.008 IEI
2310 curr_offset = curr_offset + de_gmm_rai(tvb, tree, pinfo, curr_offset , 6, add_string, string_len);
2311 /* Octet 10 - 11 RNC-ID (or Extended RNC-ID) */
2312 rnc_id = tvb_get_ntohs(tvb, curr_offset);
2313 proto_tree_add_item(tree, hf_bssgp_rnc_id, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
2315 if (add_string) {
2316 char *str = ws_strdup_printf(" %s, RNC-ID %u", add_string, rnc_id);
2317 g_strlcpy(add_string, str, string_len);
2318 g_free(str);
2320 break;
2321 case 2:
2322 /* RIM Routing Address discriminator = 0010:
2323 * The RIM Routing Address field contains an eNB identifier and is coded as follows:
2324 * Octets 4 to 8 contain the value part (starting with octet 2) of the
2325 * Tracking Area Identity IE defined in 3GPP TS 24.301 [37], not including 3GPP TS 24.301 IEI
2327 curr_offset = curr_offset+ de_emm_trac_area_id(tvb, tree, pinfo, curr_offset, 5, add_string, string_len);
2328 /* Octets 9-n contain the Global eNB ID (see 3GPP TS 36.413 [36]) of the eNodeB. */
2329 new_tvb = tvb_new_subset_remaining(tvb, curr_offset);
2330 dissect_s1ap_Global_ENB_ID_PDU(new_tvb, pinfo, tree, NULL);
2331 break;
2332 default:
2333 expert_add_info(pinfo, ti, &ei_bssgp_ra_discriminator);
2334 return len;
2338 return len;
2342 * 11.3.71 MBMS Session Identity
2344 /* MBMS-Session-Identity AVP encoded as in 3GPP TS 29.061 [31],
2345 * excluding AVP Header fields as defined in IETF RFC 3588 [33].
2346 * TS 29.061
2347 * 17.7.11 MBMS-Session-Identity AVP
2348 * The MBMS-Session-Identity AVP (AVP code 908) is of type OctetString. Its length is one octet. It is allocated by the
2349 * BM-SC. Together with TMGI it identifies a transmission of a specific MBMS session. The initial transmission and
2350 * subsequent retransmissions of the MBMS session will use the same values of these parameters. This AVP is optional
2351 * within the Gmb interface.
2353 static uint16_t
2354 de_bssgp_mbms_session_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
2356 uint32_t curr_offset;
2358 curr_offset = offset;
2360 /* MBMS Session Identity */
2361 proto_tree_add_item(tree, hf_bssgp_mbms_session_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2362 curr_offset++;
2364 return curr_offset-offset;
2367 * 11.3.72 MBMS Session Duration
2369 static uint16_t
2370 de_bssgp_mbms_session_dur(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
2372 tvbuff_t *new_tvb;
2373 uint32_t curr_offset;
2375 curr_offset = offset;
2377 /* AVP Code: 904 MBMS-Session-Duration Registered by packet-gtp.c */
2378 new_tvb =tvb_new_subset_length(tvb, offset, len);
2379 dissector_try_uint(diameter_3gpp_avp_dissector_table, 904, new_tvb, pinfo, tree);
2381 return curr_offset-offset;
2384 * 11.3.73 MBMS Service Area Identity List
2385 * octet 3 - 514
2386 * MBMS-Service-Area AVP encoded as in 3GPP TS 29.061,
2387 * excluding AVP Header fields (as defined in IETF RFC 3588 [33]).
2390 static uint16_t
2391 de_bssgp_mbms_sai_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
2393 tvbuff_t *new_tvb;
2394 uint32_t curr_offset;
2396 curr_offset = offset;
2398 /* AVP Code: 903 MBMS-Service-Area Registered by packet-gtp.c */
2399 new_tvb =tvb_new_subset_length(tvb, offset, len);
2400 dissector_try_uint(diameter_3gpp_avp_dissector_table, 903, new_tvb, pinfo, tree);
2402 return curr_offset-offset;
2405 * 11.3.74 MBMS Response
2408 static const value_string bssgp_mbms_cause_vals[] = {
2409 { 0, "Acknowledge" },
2410 { 1, "Acknowledge, initiate data transfer" },
2411 { 2, "Acknowledge, data transfer initiated from other SGSN" },
2412 { 3, "Reject - Congestion" },
2413 { 4, "Reject - None of the listed MBMS Service Areas are supported by BSS" },
2414 { 5, "Reject - MBMS Service Context is released due to interrupted data flow" },
2416 { 6, "Unspecified in this version of the protocol" },
2417 { 7, "Unspecified in this version of the protocol" },
2418 { 8, "Unspecified in this version of the protocol" },
2419 { 9, "Unspecified in this version of the protocol" },
2420 { 10, "Unspecified in this version of the protocol" },
2421 { 11, "Unspecified in this version of the protocol" },
2422 { 12, "Unspecified in this version of the protocol" },
2423 { 13, "Unspecified in this version of the protocol" },
2424 { 14, "Unspecified in this version of the protocol" },
2425 { 15, "Unspecified in this version of the protocol" },
2426 { 0, NULL },
2428 static value_string_ext bssgp_mbms_cause_vals_ext = VALUE_STRING_EXT_INIT(bssgp_mbms_cause_vals);
2430 static uint16_t
2431 de_bssgp_mbms_response(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
2433 uint32_t curr_offset;
2435 curr_offset = offset;
2437 /* MBMS Session Identity */
2438 proto_tree_add_item(tree, hf_bssgp_mbms_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2439 curr_offset++;
2441 return curr_offset-offset;
2444 * 11.3.75 MBMS Routing Area List
2446 /* Number of Routing Areas (octet 3) */
2447 static const value_string bssgp_mbms_num_ra_ids_vals[] = {
2448 { 0, "Notification shall not be sent to any Routing Areas in the BSS" },
2449 { 1, "'1' Routing Area Identities" },
2450 { 2, "'2' Routing Area Identities" },
2451 { 3, "'3' Routing Area Identities" },
2452 { 4, "'4' Routing Area Identities" },
2453 { 5, "'5' Routing Area Identities" },
2454 { 6, "'6' Routing Area Identities" },
2455 { 7, "'7' Routing Area Identities" },
2456 { 8, "'8' Routing Area Identities" },
2457 { 9, "'9' Routing Area Identities" },
2458 { 10, "'10' Routing Area Identities" },
2459 { 11, "'11' Routing Area Identities" },
2460 { 12, "'12' Routing Area Identities" },
2461 { 13, "'13' Routing Area Identities" },
2462 { 14, "'14' Routing Area Identities" },
2463 { 15, "Notification shall be sent in all Routing Areas in the BSS" },
2464 { 0, NULL },
2466 static value_string_ext bssgp_mbms_num_ra_ids_vals_ext = VALUE_STRING_EXT_INIT(bssgp_mbms_num_ra_ids_vals);
2468 static uint16_t
2469 de_bssgp_mbms_ra_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
2471 proto_tree *rai_tree;
2472 uint32_t curr_offset;
2473 uint8_t num_ra_ids;
2474 int i;
2476 curr_offset = offset;
2478 /* octet 3 Number of Routing Area Identifications Spare Spare Spare Spare */
2479 num_ra_ids = tvb_get_uint8(tvb,curr_offset) >> 4;
2480 proto_tree_add_item(tree, hf_bssgp_mbms_num_ra_ids, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2482 /* octet 4 - 11 Routing Area Identification 1 (etc)*/
2483 for (i = 0; i < num_ra_ids; i++) {
2484 rai_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, 8,
2485 ett_bssgp_ra_id, NULL, "Routing Area Identification (%u)", i + 1);
2487 /* The element is coded as the Routing Area Identification information element in
2488 * 3GPP TS 24.008, not including 3GPP TS 24.008 IEI and 3GPP TS 24.008 length indicator.
2490 de_gmm_rai(tvb, rai_tree, pinfo, curr_offset , 6, NULL, 0);
2492 curr_offset+=8;
2495 return curr_offset-offset;
2499 * 11.3.76 MBMS Session Information
2502 static const true_false_string tfs_bssgp_bc_mc = {
2503 "Multicast Session",
2504 "Broadcast Session"
2506 static uint16_t
2507 de_bssgp_mbms_session_inf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
2509 uint32_t curr_offset;
2511 curr_offset = offset;
2513 /* MBMS Session Identity */
2514 proto_tree_add_item(tree, hf_bssgp_session_inf, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2515 curr_offset++;
2517 return curr_offset-offset;
2520 * 11.3.77 TMGI (Temporary Mobile Group Identity)
2522 /* Rest of element coded as in 3GPP TS 24.008, not including 3GPP
2523 * TS 24.008 IEI and 3GPP TS 24.008 length indicator.
2526 * 11.3.78 MBMS Stop Cause
2528 static const value_string bssgp_mbms_stop_cause_vals[] = {
2529 { 0, "MBMS Session terminated by upstream node" },
2530 { 1, "MBMS Session terminated by SGSN" },
2532 { 2, "Unspecified in this version of the protocol" },
2533 { 3, "Unspecified in this version of the protocol" },
2534 { 4, "Unspecified in this version of the protocol" },
2535 { 5, "Unspecified in this version of the protocol" },
2536 { 6, "Unspecified in this version of the protocol" },
2537 { 7, "Unspecified in this version of the protocol" },
2538 { 8, "Unspecified in this version of the protocol" },
2539 { 9, "Unspecified in this version of the protocol" },
2540 { 10, "Unspecified in this version of the protocol" },
2541 { 11, "Unspecified in this version of the protocol" },
2542 { 12, "Unspecified in this version of the protocol" },
2543 { 13, "Unspecified in this version of the protocol" },
2544 { 14, "Unspecified in this version of the protocol" },
2545 { 15, "Unspecified in this version of the protocol" },
2546 { 0, NULL },
2548 static value_string_ext bssgp_mbms_stop_cause_vals_ext = VALUE_STRING_EXT_INIT(bssgp_mbms_stop_cause_vals);
2550 static uint16_t
2551 de_bssgp_mbms_stop_cause(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
2553 uint32_t curr_offset;
2555 curr_offset = offset;
2557 /* MBMS Session Identity */
2558 proto_tree_add_item(tree, hf_bssgp_mbms_stop_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2559 curr_offset++;
2561 return curr_offset-offset;
2564 * 11.3.79 Source BSS to Target BSS Transparent Container
2566 /* The actual function moved to after defining the enums */
2569 * 11.3.80 Target BSS to Source BSS Transparent Container
2572 * 11.3.81 NAS container for PS Handover
2575 * 11.3.82 PFCs to be set-up list
2577 static uint16_t
2578 de_bssgp_pfcs_to_be_set_up_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
2580 proto_tree *pfc_tree, *pft_tree, *abqp_tree, *arp_tree, *t10_tree;
2582 uint32_t curr_offset;
2583 uint8_t num_pfc, i, pfc_len;
2585 curr_offset = offset;
2587 num_pfc = tvb_get_uint8(tvb, curr_offset);
2588 if (num_pfc < 12) {
2589 proto_tree_add_uint(tree, hf_bssgp_num_pfc, tvb, curr_offset, 1, num_pfc);
2590 }else {
2591 proto_tree_add_uint_format_value(tree, hf_bssgp_num_pfc, tvb, curr_offset, 1, num_pfc, "Reserved");
2592 return (len);
2594 curr_offset++;
2595 if (num_pfc == 0)
2596 return (curr_offset-offset);
2598 pfc_len = (len - 1) / num_pfc;
2600 for (i = 0; i < num_pfc; i++) {
2601 pfc_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, pfc_len,
2602 ett_bssgp_pfcs_to_be_set_up_list, NULL, "PFC (%u)", i + 1);
2604 de_sm_pflow_id(tvb, pfc_tree, pinfo, curr_offset, 1, NULL, 0);
2605 curr_offset++;
2607 /* PFT: Packet Flow Timer. Coded as the GPRS Timer information element,
2608 * see sub-clause 11.3.44.
2610 pft_tree = proto_tree_add_subtree(pfc_tree, tvb, curr_offset, 3,
2611 ett_bssgp_pfcs_to_be_set_up_list_pft, NULL, "Packet Flow Timer(PFT)");
2612 proto_tree_add_item(pft_tree, hf_bssgp_unit_val, tvb, curr_offset+2, 1, ENC_BIG_ENDIAN);
2613 proto_tree_add_item(pft_tree, hf_bssgp_gprs_timer, tvb, curr_offset+2, 1, ENC_BIG_ENDIAN);
2614 curr_offset += 3;
2616 /* ABQP: Aggregate BSS QoS Profile.
2617 * Coded as the Aggregate BSS QoS Profile information element, see sub-clause 11.3.43.
2619 abqp_tree = proto_tree_add_subtree(pfc_tree, tvb, curr_offset, 3,
2620 ett_bssgp_pfcs_to_be_set_up_list_abqp, NULL, "Aggregate BSS QoS Profile(ABQP)");
2621 /* Unsure about length 16 */
2622 curr_offset = curr_offset + de_sm_qos(tvb, abqp_tree, pinfo, curr_offset, 16, NULL, 0);
2624 /* Allocation/Retention Priority: Allocation Retention Priority.
2625 * Coded as the Priority information element, see subclause 11.3.27.
2626 * This information element is optionally included.
2628 if(pfc_len>17){
2629 arp_tree = proto_tree_add_subtree(pfc_tree, tvb, curr_offset, 3,
2630 ett_bssgp_pfcs_to_be_set_up_list_arp, NULL, "Allocation/Retention Priority");
2631 curr_offset = curr_offset + be_prio(tvb, arp_tree, pinfo, curr_offset, 1, NULL, 0);
2633 /* T10: T10.
2634 * Coded as the GPRS Timer information element, see sub-clause 11.3.44.
2635 * This information element shall be present for a PFC if the Allocation/Retention Priority
2636 * is present and if queuing is allowed for the PFC.
2638 if(pfc_len>18){
2639 t10_tree = proto_tree_add_subtree(pfc_tree, tvb, curr_offset, 3,
2640 ett_bssgp_pfcs_to_be_set_up_list_t10, NULL, "T10");
2641 proto_tree_add_item(t10_tree, hf_bssgp_unit_val, tvb, curr_offset+2, 1, ENC_BIG_ENDIAN);
2642 proto_tree_add_item(t10_tree, hf_bssgp_gprs_timer, tvb, curr_offset+2, 1, ENC_BIG_ENDIAN);
2643 curr_offset += 3;
2646 return curr_offset-offset;
2649 * 11.3.83 List of set-up PFCs
2651 uint16_t
2652 de_bssgp_list_of_setup_pfcs(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
2654 proto_tree *pfc_tree;
2656 uint32_t curr_offset;
2657 uint8_t num_pfc, i;
2659 curr_offset = offset;
2661 num_pfc = tvb_get_uint8(tvb, curr_offset);
2662 if (num_pfc < 12) {
2663 proto_tree_add_uint(tree, hf_bssgp_num_pfc, tvb, curr_offset, 1, num_pfc);
2664 }else {
2665 proto_tree_add_uint_format_value(tree, hf_bssgp_num_pfc, tvb, curr_offset, 1, num_pfc, "Reserved");
2666 return (curr_offset-offset);
2668 curr_offset++;
2669 if (num_pfc == 0)
2670 return (curr_offset-offset);
2672 for (i = 0; i < num_pfc; i++) {
2673 pfc_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, 1,
2674 ett_bssgp_list_of_setup_pfcs, NULL, "PFC (%u)", i + 1);
2676 de_sm_pflow_id(tvb, pfc_tree, pinfo, curr_offset, 1, NULL, 0);
2677 curr_offset++;
2681 return curr_offset-offset;
2684 * 11.3.84 Extended Feature Bitmap
2686 static int * const bssgp_ext_feature_bitmap_fields[] = {
2687 &hf_bssgp_eDRX,
2688 &hf_bssgp_dcn,
2689 &hf_bssgp_ec_gsm_iot,
2690 &hf_bssgp_csps_coord,
2691 &hf_bssgp_mocn,
2692 &hf_bssgp_gb_if,
2693 &hf_bssgp_ps_ho,
2694 NULL
2696 static uint16_t
2697 de_bssgp_ext_feature_bitmap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
2699 uint32_t curr_offset;
2701 curr_offset = offset;
2703 proto_tree_add_item(tree, hf_bssgp_ps_ho, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2704 proto_tree_add_bitmask_with_flags(tree, tvb, curr_offset, hf_bssgp_extended_feature_bitmap,
2705 ett_bssgp_extended_feature_bitmap, bssgp_ext_feature_bitmap_fields, ENC_BIG_ENDIAN, BMT_NO_APPEND);
2706 curr_offset++;
2708 return curr_offset-offset;
2711 * 11.3.85 Source to Target Transparent Container
2713 static uint16_t
2714 de_bssgp_src_to_trg_transp_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
2716 uint32_t curr_offset;
2718 curr_offset = offset;
2720 /* Octets 3-? Source to Target Transparent Container content coded as
2721 * specified in 3GPP TS 25.413 or 3GPP TS 36.413.
2722 * In inter-RAT handovers ... RANAP specification 3GPP TS 25.413, excluding RANAP tag.
2723 * In inter-RAT handover to E-UTRAN ... encoding is defined in 3GPP TS 36.413
2725 proto_tree_add_item(tree, hf_bssgp_src_to_trg_transp_cont, tvb, curr_offset, len, ENC_NA);
2727 return len;
2731 * 11.3.86 Target to Source Transparent Container
2733 static uint16_t
2734 de_bssgp_trg_to_src_transp_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
2736 uint32_t curr_offset;
2738 curr_offset = offset;
2740 /* Rest of element coded as either a complete Handover to UTRAN
2741 * Command radio interface message (as defined in 3GPP TS
2742 * 25.331) or a complete Radio Bearer Reconfiguration radio
2743 * interface message (as defined in 3GPP TS 44.118) or a complete
2744 * DL-DCCH-Message including a complete
2745 * RRCConnectionReconfiguration radio interface message (as
2746 * defined in 3GPP TS 36.331)
2748 proto_tree_add_item(tree, hf_bssgp_trg_to_src_transp_cont, tvb, curr_offset, len, ENC_NA);
2750 return len;
2754 * 11.3.87 RNC Identifier
2756 uint16_t
2757 de_bssgp_rnc_identifier(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len _U_, char *add_string, int string_len)
2759 uint32_t curr_offset;
2760 uint16_t rnc_id;
2762 curr_offset = offset;
2763 /* Octets 3-8 Octets 3 to 8 contain the value part (starting with octet 2) of the
2764 * Routing Area Identification IE defined in 3GPP TS 24.008, not including 3GPP TS 24.008 IEI
2766 curr_offset = curr_offset + de_gmm_rai(tvb, tree, pinfo, curr_offset, 6, add_string, string_len);
2767 /* Octet 9 - 10 RNC ID (or Extended RNC-ID or Corresponding RNC-ID) */
2768 rnc_id = tvb_get_ntohs(tvb, curr_offset);
2769 proto_tree_add_item(tree, hf_bssgp_rnc_id, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
2770 curr_offset+=2;
2772 if (add_string) {
2773 char *str = ws_strdup_printf(" %s, RNC-ID %u", add_string, rnc_id);
2774 g_strlcpy(add_string, str, string_len);
2775 g_free(str);
2778 return curr_offset-offset;
2782 * 11.3.88 Page Mode
2784 /* PAGE_MODE (2 bit field) */
2786 static const value_string bssgp_page_mode_vals[] = {
2787 { 0, "Normal Paging" },
2788 { 1, "Extended Paging" },
2789 { 2, "Paging Reorganization" },
2790 { 3, "Same as before" },
2791 { 0, NULL },
2793 static uint16_t
2794 de_bssgp_page_mode(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
2796 uint32_t curr_offset;
2798 curr_offset = offset;
2800 proto_tree_add_item(tree, hf_bssgp_page_mode, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2801 curr_offset++;
2803 return curr_offset-offset;
2806 * 11.3.89 Container ID
2808 static uint16_t
2809 de_bssgp_container_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
2811 uint32_t curr_offset;
2813 curr_offset = offset;
2815 proto_tree_add_item(tree, hf_bssgp_container_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2816 curr_offset++;
2818 return curr_offset-offset;
2822 * 11.3.90 Global TFI
2824 static const value_string bssgp_global_tfi_vals[] = {
2825 { 0, "UPLINK_TFI" },
2826 { 1, "DOWNLINK_TFI" },
2827 { 0, NULL },
2830 static uint16_t
2831 de_bssgp_global_tfi(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
2833 uint32_t curr_offset;
2834 uint32_t bit_offset;
2835 uint8_t gtfi;
2837 curr_offset = offset;
2839 /* Bits 6 - 1 Global TFI coded as specified in 3GPP TS 44.060 */
2840 bit_offset = (curr_offset << 3) +3;
2841 gtfi = tvb_get_bits8(tvb,bit_offset,1);
2842 proto_tree_add_bits_item(tree, hf_bssgp_global_tfi, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2843 bit_offset++;
2844 /* < Global TFI IE > ::=
2845 * { 0 < UPLINK_TFI : bit (5) >
2846 * | 1 < DOWNLINK_TFI : bit (5) > } ;
2848 if(gtfi == 0){
2849 /* UPLINK_TFI (5 bit field)
2850 * This field identifies an uplink TBF. This field is coded the same as the
2851 * TFI field defined in sub-clause 12.15.
2852 * This field is encoded as a binary number. Range 0 to 31
2854 proto_tree_add_bits_item(tree, hf_bssgp_ul_tfi, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2855 }else{
2856 /* DOWNLINK_TFI (5 bit field)
2857 * This field identifies an uplink TBF. This field is coded the same as the
2858 * TFI field defined in sub-clause 12.15.
2859 * This field is encoded as a binary number. Range 0 to 31
2861 proto_tree_add_bits_item(tree, hf_bssgp_dl_tfi, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2863 curr_offset++;
2865 return curr_offset-offset;
2868 * 11.3.91 IMEI
2870 /* Octets 3-10 contain the IMEI coded as the value part of the Mobile
2871 * Identity IE defined in 3GPP TS 24.008
2872 * (NOTE 1)
2875 * 11.3.92 Time to MBMS Data Transfer
2877 static uint16_t
2878 de_bssgp_time_to_MBMS_data_tran(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
2880 uint32_t curr_offset;
2881 uint8_t value;
2883 curr_offset = offset;
2885 /* 0 = 1s etc */
2886 value = tvb_get_uint8(tvb,curr_offset) + 1;
2887 proto_tree_add_uint(tree, hf_bssgp_time_to_MBMS_data_tran, tvb, curr_offset, 1, value);
2889 return len;
2892 * 11.3.93 MBMS Session Repetition Number
2894 static uint16_t
2895 de_bssgp_mbms_session_rep_no(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
2897 uint32_t curr_offset;
2899 curr_offset = offset;
2901 proto_tree_add_item(tree, hf_bssgp_mbms_session_rep_no, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2902 curr_offset++;
2904 return len;
2907 * 11.3.94 Inter RAT Handover Info
2909 static uint16_t
2910 de_bssgp_inter_rat_ho_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
2912 tvbuff_t *new_tvb;
2913 uint32_t curr_offset;
2915 curr_offset = offset;
2917 new_tvb = tvb_new_subset_remaining(tvb, curr_offset);
2919 * Inter RAT Handover Information coded as specified in 3GPP
2920 * Technical Specification 25.331
2922 dissect_rrc_InterRATHandoverInfo_PDU(new_tvb, pinfo, tree, NULL);
2924 return len;
2927 * 11.3.95 PS Handover Command
2929 static uint16_t
2930 de_bssgp_ps_ho_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
2932 uint32_t curr_offset;
2934 curr_offset = offset;
2936 /* Octet 3-? Rest of element coded as a complete PS Handover Command
2937 * radio interface message as defined in 3GPP TS 44.060 (carrying
2938 * the PS Handover to A/Gb Mode Payload)
2940 proto_tree_add_item(tree, hf_bssgp_ps_ho_cmd, tvb, curr_offset, len, ENC_NA);
2943 return len;
2947 * 11.3.95a PS Handover Indications
2949 static uint16_t
2950 de_bssgp_ps_ho_indications(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
2952 uint32_t curr_offset;
2954 curr_offset = offset;
2956 /* SI/PSI */
2957 proto_tree_add_item(tree, hf_bssgp_sipsi, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2958 curr_offset++;
2960 return curr_offset-offset;
2964 * 11.3.95b SI/PSI Container
2967 static const value_string type_vals[] = {
2968 { 0, "SI messages as specified for BCCH (3GPP TS 44.018) follow" },
2969 { 1, "PSI messages as specified for PBCCH (3GPP TS 44.060) follow" },
2970 { 0, NULL },
2972 static uint16_t
2973 de_bssgp_sipsi_container(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
2975 uint32_t curr_offset;
2976 uint8_t oct,num, type, i;
2978 curr_offset = offset;
2980 oct = tvb_get_uint8(tvb, curr_offset);
2981 num = oct >>1;
2982 type = oct & 1;
2983 proto_tree_add_item(tree, hf_bssgp_num_si_psi, tvb, curr_offset, 1, ENC_NA);
2985 /* Type */
2986 proto_tree_add_item(tree, hf_bssgp_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2987 curr_offset++;
2988 if (type==0){
2989 /* BCCH (3GPP TS 44.018) */
2990 for (i = 0; i < num; i++) {
2991 proto_tree_add_bytes_format(tree, hf_bssgp_si, tvb, curr_offset, 21, NULL, "SI (%u)", i + 1);
2992 curr_offset+=21;
2994 }else{
2995 /* PBCCH (3GPP TS 44.060) */
2996 for (i = 0; i < num; i++) {
2997 proto_tree_add_bytes_format(tree, hf_bssgp_psi, tvb, curr_offset, 22, NULL, "PSI (%u)", i + 1);
2998 curr_offset+=22;
3002 return curr_offset-offset;
3005 * 11.3.95c Active PFCs List
3007 static uint16_t
3008 de_bssgp_active_pfcs_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
3010 proto_tree *pfc_tree;
3012 uint32_t curr_offset;
3013 uint8_t num_pfc, i;
3015 curr_offset = offset;
3017 num_pfc = tvb_get_uint8(tvb, curr_offset);
3018 if (num_pfc < 12) {
3019 proto_tree_add_uint(tree, hf_bssgp_num_pfc, tvb, curr_offset, 1, num_pfc);
3020 }else {
3021 proto_tree_add_uint_format_value(tree, hf_bssgp_num_pfc, tvb, curr_offset, 1, num_pfc, "Reserved");
3022 return (curr_offset-offset);
3024 curr_offset++;
3025 if (num_pfc == 0)
3026 return (curr_offset-offset);
3028 for (i = 0; i < num_pfc; i++) {
3029 pfc_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, 1,
3030 ett_bssgp_pfc_flow_control_parameters_pfc, NULL, "PFC (%u)", i + 1);
3032 de_sm_pflow_id(tvb, pfc_tree, pinfo, curr_offset, 1, NULL, 0);
3033 curr_offset++;
3037 return curr_offset-offset;
3040 * 11.3.96 Velocity Data
3042 static uint16_t
3043 de_bssgp_velocity_data(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string, int string_len)
3045 uint32_t curr_offset;
3047 curr_offset = offset;
3049 /* The rest of the information element contains an octet sequence
3050 * identical to that for Description of Velocity defined in 3GPP TS
3051 * 23.032.
3053 curr_offset = dissect_description_of_velocity(tvb, tree, pinfo, curr_offset, len, add_string, string_len);
3055 return curr_offset-offset;
3058 * 11.3.97 DTM Handover Command
3060 static uint16_t
3061 de_bssgp_dtm_ho_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
3063 uint32_t curr_offset;
3065 curr_offset = offset;
3067 /* Rest of element coded as a complete DTM Handover Command
3068 * radio interface message as defined in 3GPP TS 44.060 (carrying
3069 * the DTM Handover to A/Gb Mode Payload)
3071 proto_tree_add_item(tree, hf_bssgp_dtm_handover_command_data, tvb, curr_offset, len, ENC_NA);
3073 return len;
3076 * 11.3.98 CS Indication
3078 static uint16_t
3079 de_bssgp_cs_indication(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
3081 uint32_t curr_offset;
3083 curr_offset = offset;
3085 /* CS Indication Contents
3086 * CS Indication Contents: This identifies a particular handover attempt for this MS. This shall be identical to the PS
3087 * Indication Contents value in the corresponding PS Indication IE included in the Old BSS to New BSS Information IE
3088 * (see 3GPP TS 48.008). The choice of the value of this field is implementation specific, with the requirement that
3089 * consecutive handover attempts for the same mobile station shall not have the same CS Indication Contents value.
3091 proto_tree_add_item(tree, hf_bssgp_cs_indication, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3092 curr_offset++;
3094 return curr_offset-offset;
3097 * 11.3.99 Requested GANSS Assistance Data
3099 /* Rest of element coded as the value part defined in
3100 * 3GPP TS 49.031, not including 3GPP TS 49.031 IEI and
3101 * 3GPP TS 49.031 octet length indicator
3104 * 11.3.100 GANSS Location Type
3106 /* Rest of element coded as the value part defined in
3107 * 3GPP TS 49.031, not including 3GPP TS 49.031 IEI and
3108 * 3GPP TS 49.031 octet length indicator
3111 * 11.3.101 GANSS Positioning Data
3113 /* Rest of element coded as the value part defined in
3114 * 3GPP TS 49.031, not including 3GPP TS 49.031 IEI and
3115 * 3GPP TS 49.031 octet length indicator
3118 * 11.3.102 Flow Control Granularity
3120 static const value_string bssgp_flow_control_gran_vals[] = {
3121 { 0, "100 octets or bits/s increments" },
3122 { 1, "1000 octets or bits/s increments" },
3123 { 2, "10000 octets or bits/s increments" },
3124 { 3, "100000 octets or bits/s increments" },
3125 { 0, NULL },
3129 static uint16_t
3130 de_bssgp_flow_control_gran(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
3132 uint32_t curr_offset;
3134 curr_offset = offset;
3136 /* Granularity */
3137 proto_tree_add_item(tree, hf_bssgp_flow_control_gran, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3138 curr_offset++;
3140 return curr_offset-offset;
3143 * 11.3.103 eNB Identifier
3145 uint16_t
3146 de_bssgp_enb_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string, int string_len)
3148 tvbuff_t *new_tvb;
3149 uint32_t curr_offset;
3151 curr_offset = offset;
3153 /* Octets 3 to 7 contain the value part (starting with octet 2) of the
3154 * Tracking Area Identity IE defined in 3GPP TS 24.301 [37], not
3155 * including 3GPP TS 24.301 IEI [37]
3157 curr_offset = curr_offset+ de_emm_trac_area_id(tvb, tree, pinfo, curr_offset, 5, add_string, string_len);
3159 /* Octets 8-n contain the Global eNB ID (see 3GPP TS 36.413) of the eNodeB. */
3160 new_tvb = tvb_new_subset_remaining(tvb, curr_offset);
3161 dissect_s1ap_Global_ENB_ID_PDU(new_tvb, pinfo, tree, NULL);
3163 return len;
3166 * 11.3.104 E-UTRAN Inter RAT Handover Info
3168 static uint16_t
3169 de_bssgp_e_utran_inter_rat_ho_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
3171 tvbuff_t *new_tvb;
3172 uint32_t curr_offset;
3174 curr_offset = offset;
3176 new_tvb = tvb_new_subset_remaining(tvb, curr_offset);
3178 * Formatted and coded according to the UE-EUTRA-Capability IE
3179 * defined in 3GPP Technical Specification 36.331. The most
3180 * significant bit of the first octet of the octet string contains bit 8 of
3181 * the first octet of the IE.
3183 dissect_lte_rrc_UE_EUTRA_Capability_PDU(new_tvb, pinfo, tree, NULL);
3185 return len;
3188 * 11.3.105 Subscriber Profile ID for RAT/Frequency priority
3191 static uint16_t
3192 de_bssgp_sub_prof_id_f_rat_freq_prio(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
3194 uint32_t curr_offset;
3195 uint8_t value;
3197 curr_offset = offset;
3199 /* Octet 3 contains a number in binary representation ranging from 0 to 255.
3200 * The Subscriber Profile ID for RAT/Frequency priority is given by
3201 * the indicated value +1.
3203 value = tvb_get_uint8(tvb,curr_offset) + 1;
3204 proto_tree_add_uint(tree, hf_bssgp_sub_prof_id_f_rat_freq_prio, tvb, curr_offset, 1, value);
3205 curr_offset++;
3207 return curr_offset-offset;
3210 * 11.3.106 Request for Inter-RAT Handover Info
3212 static uint16_t
3213 de_bssgp_req_for_inter_rat_ho_inf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
3215 uint32_t curr_offset;
3217 curr_offset = offset;
3219 /*octet 3 Spare E-UTRAN Inter RAT Handover Info Req Inter RAT Handover Info Req */
3220 proto_tree_add_item(tree, hf_bssgp_eutran_irat_ho_inf_req, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3221 proto_tree_add_item(tree, hf_bssgp_irat_ho_inf_req, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3222 curr_offset++;
3224 return curr_offset-offset;
3227 * 11.3.107 Reliable Inter-RAT Handover Info
3229 static uint16_t
3230 de_bssgp_reliable_inter_rat_ho_inf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
3232 uint32_t curr_offset;
3234 curr_offset = offset;
3236 /* Reliable Inter RAT Handover Info Indicator */
3237 proto_tree_add_item(tree, hf_bssgp_rel_int_rat_ho_inf_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3238 curr_offset++;
3240 return curr_offset-offset;
3243 * 11.3.108 SON Transfer Application Identity
3245 static uint16_t
3246 de_bssgp_son_transfer_app_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
3248 tvbuff_t *next_tvb;
3250 /* SON Transfer Application Identity: This field is encoded as the SON Transfer Application Identity IE
3251 * as defined in 3GPP TS 36.413
3253 if(len > 0){
3254 next_tvb = tvb_new_subset_length(tvb, offset, len);
3255 dissect_s1ap_SONtransferApplicationIdentity_PDU(next_tvb, pinfo, tree, NULL);
3258 return len;
3261 * 11.3.109 CSG Identifier
3264 /* Cell Access Mode (bit 1 of octet 7) */
3265 static const value_string bssgp_cell_access_mode_vals[] = {
3266 { 0, "CSG cell" },
3267 { 1, "Hybrid cell" },
3268 { 0, NULL },
3271 static uint16_t
3272 de_bssgp_csg_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
3274 uint32_t curr_offset;
3276 curr_offset = offset;
3278 /* Octets 3 to 6 contain the CSG Identity (CSG-ID) of the cell (defined in
3279 * 3GPP TS 23.003) as reported by the mobile station (see 3GPP TS
3280 * 44.060). Bits 4 to 8 of octet 6 are spare and set to zero.
3282 proto_tree_add_item(tree, hf_bssgp_csg_id, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
3283 curr_offset+=4;
3284 /* Cell Access Mode */
3285 proto_tree_add_item(tree, hf_bssgp_cell_acc_mode, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3286 curr_offset++;
3288 return curr_offset-offset;
3291 * 11.3.110 Tracking Area Code
3294 * Octets 3 to 5 contain the value part (starting with octet 2) of the TAC
3295 * IE defined in 3GPP TS 24.301.
3299 * 11.3.111 Redirect Attempt Flag
3301 static uint16_t
3302 de_bssgp_redir_attempt_flg(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
3304 uint32_t curr_offset;
3306 curr_offset = offset;
3308 proto_tree_add_item(tree, hf_bssgp_spare, tvb, curr_offset, 1, ENC_NA);
3309 curr_offset += 1;
3311 return curr_offset-offset;
3315 * 11.3.112 Redirection Indication
3317 static const value_string bssgp_redir_indication_reroute_reject_cause_vals[] = {
3318 {0x00, "Reserved"},
3319 {0x01, "Reserved"},
3320 {0x02, "Reserved"},
3321 {0x03, "Reserved"},
3322 {0x04, "Reserved"},
3323 {0x05, "Reserved"},
3324 {0x06, "Reserved"},
3325 {0x07, "Reserved"},
3326 {0x08, "Reserved"},
3327 {0x09, "Reserved"},
3328 {0x0A, "Reserved"},
3329 {0x0B, "PLMN not allowed"},
3330 {0x0C, "Location area not allowed"},
3331 {0x0D, "Roaming not allowed in this location area"},
3332 {0x0E, "GPRS services not allowed in this PLMN"},
3333 {0x0F, "No suitable cell in location area"},
3334 {0x10, "CS/PS domain registration coordination required"},
3335 {0x11, "Network failure" },
3336 {0x12, "Rerouting to a DCN required" },
3337 /* {0x13~0xFF, "Reserved"} */
3338 { 0, NULL },
3341 static uint16_t
3342 de_bssgp_redir_indication(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
3344 uint32_t curr_offset;
3346 curr_offset = offset;
3348 proto_tree_add_item(tree, hf_bssgp_redir_indication_reroute_reject_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3349 curr_offset += 1;
3351 return curr_offset-offset;
3355 * 11.3.113 Redirection Completed
3357 static const value_string bssgp_redir_complete_outcome_vals[] = {
3358 {0x00, "Reserved"},
3359 {0x01, "MS is accepted"},
3360 {0x02, "MS is not accepted"},
3361 {0x03, "MS is already registered"},
3362 /* {0x04~0xFF, "Reserved"} */
3363 { 0, NULL },
3366 static uint16_t
3367 de_bssgp_redir_complete(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
3369 uint32_t curr_offset;
3371 curr_offset = offset;
3373 proto_tree_add_item(tree, hf_bssgp_redir_complete_outcome, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3374 curr_offset += 1;
3376 return curr_offset-offset;
3380 * 11.3.114 Unconfirmed send state variable
3382 static uint16_t
3383 de_bssgp_unconfirm_send_state_var(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
3385 proto_tree_add_item(tree, hf_bssgp_unconfirm_send_state_var, tvb, offset, 2, ENC_BIG_ENDIAN);
3386 return 2;
3390 * 11.3.15 LLC-PDU
3393 * 11.3.116 SCI
3395 static uint16_t
3396 de_bssgp_sci(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
3398 uint32_t curr_offset;
3400 curr_offset = offset;
3402 proto_tree_add_item(tree, hf_bssgp_sci, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3403 curr_offset++;
3405 return curr_offset-offset;
3409 * 11.3.117 GGSN/P-GW location
3411 static const value_string bssgp_ggsn_pgw_location_vals[] = {
3412 { 0x0, "HPLMN" },
3413 { 0x1, "VPLMN" },
3414 { 0x2, "Operator Group GGSN" },
3415 { 0x3, "Unknown" },
3416 { 0x4, "For future use(treat as VPLMN)" },
3417 { 0x5, "For future use(treat as VPLMN)" },
3418 { 0x6, "For future use(treat as VPLMN)" },
3419 { 0x7, "For future use(treat as VPLMN)" },
3420 { 0, NULL }
3423 static uint16_t
3424 de_bssgp_ggsn_pgw_location(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
3426 uint32_t curr_offset;
3428 curr_offset = offset;
3430 proto_tree_add_item(tree, hf_bssgp_ggsn_pgw_location, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3431 curr_offset++;
3433 return curr_offset-offset;
3437 * 11.3.118 Selected PLMN ID
3439 /* See PLMN ID */
3442 * 11.3.119 Priority Class Indicator
3444 static uint16_t
3445 de_bssgp_pri_class_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
3447 uint32_t curr_offset;
3448 static int* const bssgp_prio_class_flags[] = {
3449 &hf_bssgp_prio_class_flag_b0,
3450 NULL
3452 curr_offset = offset;
3454 proto_tree_add_bitmask(tree, tvb, curr_offset, hf_bssgp_prio_class_ind, ett_bssgp_prio_class_ind, bssgp_prio_class_flags, ENC_BIG_ENDIAN);
3455 curr_offset++;
3457 return curr_offset-offset;
3460 * 11.3.122 Extended DRX parameters
3462 static const value_string bssgp_edrx_cycle_vals[] = {
3463 { 0x0, "GERAN: 1.88 s / UTRAN: 10.24 s / E-UTRAN: 5.12 s" },
3464 { 0x1, "GERAN: 3.76 s / UTRAN: 20.48 s / E-UTRAN: 10.24 s" },
3465 { 0x2, "GERAN: 7.53 s / UTRAN: 40.96 s / E-UTRAN: 20.48 s" },
3466 { 0x3, "GERAN: 12.24 s / UTRAN: 81.92 s / E-UTRAN: 40.96 s" },
3467 { 0x4, "GERAN: 24.48 s / UTRAN: 163.84 s / E-UTRAN: 81.92 s" },
3468 { 0x5, "GERAN: 48.96 s / UTRAN: 327.68 s / E-UTRAN: 163.84 s" },
3469 { 0x6, "GERAN: 97.92 s / UTRAN: 655.36 s / E-UTRAN: 327.68 s" },
3470 { 0x7, "GERAN: 195.84 s / UTRAN: 1310.72 s / E-UTRAN: 655.36 s" },
3471 { 0x8, "GERAN: 391.68 s / UTRAN: 1966.08 s / E-UTRAN: 1310.72 s" },
3472 { 0x9, "GERAN: 783.36 s / UTRAN: 2621.44 s / E-UTRAN: 2621.44 s" },
3473 { 0xa, "GERAN: 1566.72 s / UTRAN: reserved / E-UTRAN: reserved" },
3474 { 0xb, "GERAN: 3133.44 s / UTRAN: reserved / E-UTRAN: reserved" },
3475 { 0, NULL }
3478 static uint16_t
3479 de_bssgp_edrx_params(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
3481 uint32_t curr_offset;
3483 curr_offset = offset;
3485 proto_tree_add_item(tree, hf_bssgp_edrx_cycle_value, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3486 curr_offset++;
3488 return curr_offset-offset;
3492 * 11.3.123 Time Until Next Paging Occasion
3494 static uint16_t
3495 de_bssgp_tunpo(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
3497 uint32_t curr_offset;
3499 curr_offset = offset;
3501 proto_tree_add_item(tree, hf_bssgp_tunpo_minutes, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3502 curr_offset++;
3503 proto_tree_add_item(tree, hf_bssgp_tunpo_seconds, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3504 curr_offset++;
3506 return curr_offset-offset;
3510 * 11.3.124 Coverage Class
3512 static const value_string bssgp_ec_dl_coverage_class_vals[] = {
3513 { 0x0, "reserved" },
3514 { 0x1, "DL Coverage Class 1" },
3515 { 0x2, "DL Coverage Class 2" },
3516 { 0x3, "DL Coverage Class 3" },
3517 { 0x4, "DL Coverage Class 4" },
3518 { 0, NULL }
3521 static const value_string bssgp_ec_ul_coverage_class_vals[] = {
3522 { 0x0, "reserved" },
3523 { 0x1, "UL Coverage Class 1" },
3524 { 0x2, "UL Coverage Class 2" },
3525 { 0x3, "UL Coverage Class 3" },
3526 { 0x4, "UL Coverage Class 4" },
3527 { 0, NULL }
3530 static uint16_t
3531 de_bssgp_coverage_class(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
3533 uint32_t curr_offset;
3535 curr_offset = offset;
3537 proto_tree_add_item(tree, hf_bssgp_ec_dl_coverage_class, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3538 proto_tree_add_item(tree, hf_bssgp_ec_ul_coverage_class, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3539 curr_offset++;
3541 return curr_offset-offset;
3546 * 11.3.125 Paging Attempt Information
3548 static const value_string bssgp_pei_vals[] = {
3549 { 0x0, "Positioning event not triggered" },
3550 { 0x1, "Positioning event triggered" },
3551 { 0, NULL }
3554 static const value_string bssgp_paging_attempt_count_vals[] = {
3555 { 0x0, "1st paging attempt" },
3556 { 0x1, "2nd paging attempt" },
3557 { 0x2, "3rd paging attempt" },
3558 { 0x3, "4th paging attempt" },
3559 { 0x4, "5th paging attempt" },
3560 { 0x5, "6th paging attempt" },
3561 { 0x6, "7th paging attempt" },
3562 { 0x7, "8th paging attempt" },
3563 { 0, NULL }
3567 static const value_string bssgp_intended_num_of_pag_attempts_vals[] = {
3568 { 0x0, "Information not available" },
3569 { 0x1, "1 page attempt" },
3570 { 0x2, "2 page attempts" },
3571 { 0x3, "3 page attempts" },
3572 { 0x4, "4 page attempts" },
3573 { 0x5, "5 page attempts" },
3574 { 0x6, "6 page attempts" },
3575 { 0x7, "7 page attempts" },
3576 { 0x8, "8 page attempts" },
3577 { 0, NULL }
3581 static uint16_t
3582 de_bssgp_pag_attempt_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
3584 uint32_t curr_offset;
3586 curr_offset = offset;
3588 proto_tree_add_item(tree, hf_bssgp_pei, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3589 proto_tree_add_item(tree, hf_bssgp_intended_num_of_pag_attempts, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3590 proto_tree_add_item(tree, hf_bssgp_paging_attempt_count, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3591 curr_offset++;
3593 return curr_offset-offset;
3597 * 11.3.129 PLMN ID
3599 static uint16_t
3600 de_bssgp_plmn_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_)
3602 proto_tree_add_string(tree, hf_bssgp_plmn_id, tvb, offset, 3, dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, offset, E212_NONE, true));
3603 return 3;
3606 typedef enum
3608 DE_BSSGP_ALIGNMENT_OCTETS, /* 11.3.1 0x00 Alignment octets */
3609 DE_BSSGP_BMAX_DEFAULT_MS, /* 11.3.2 0x01 Bmax default MS */
3610 DE_BSSGP_BSS_AREA_IND, /* 11.3.3 0x02 BSS Area Indication */
3611 DE_BSSGP_BUCKET_LEAK_RATE, /* 11.3.4 0x03 Bucket Leak Rate (R) */
3612 DE_BSSGP_BVCI, /* 11.3.6 0x04 BVCI (BSSGP Virtual Connection Identifier) */
3613 DE_BSSGP_BVC_BUCKET_SIZE, /* 11.3.5 0x05 BVC Bucket Size */
3614 DE_BSSGP_BVC_MEAS, /* 11.3.7 0x06 BVC Measurement */
3615 DE_BSSGP_CAUSE, /* 11.3.8 0x07 Cause */
3616 DE_BSSGP_CELL_ID, /* 11.3.9 0x08 Cell Identifier */
3617 DE_BSSGP_CHLN_NEEDED, /* 11.3.10 0x09 Channel needed */
3618 DE_BSSGP_DRX_PARAM, /* 11.3.11 0x0a DRX Parameters GSM_A_PDU_TYPE_GM, DE_DRX_PARAM */
3619 DE_BSSGP_EMLPP_PRIO, /* 11.3.12 0x0b eMLPP-Priority GSM_A_PDU_TYPE_BSSMAP, BE_EMLPP_PRIO*/
3620 DE_BSSGP_FLUSH_ACTION, /* 11.3.13 0x0c Flush Action */
3621 DE_BSSGP_IMSI, /* 11.3.14 0x0d IMSI */
3622 DE_BSSGP_LLC_PDU, /* 11.3.15 0x0e LLC-PDU */
3623 DE_BSSGP_LLC_FRAMES_DISC, /* 11.3.16 0x0f LLC Frames Discarded */
3624 DE_BSSGP_LAI , /* 11.3.17 0x10 Location Area GSM_A_PDU_TYPE_COMMON, DE_LAI*/
3625 DE_BSSGP_MID, /* 11.3.20 0x11 Mobile Id GSM_A_PDU_TYPE_COMMON, DE_MID*/
3626 DE_BSSGP_MS_BUCKET_SIZE, /* 11.3.21 0x12 MS Bucket Size */
3627 DE_BSSGP_MS_RAD_ACC_CAP, /* 11.3.22 0x13 MS Radio Access Capability GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP*/
3628 DE_BSSGP_OMC_ID, /* 11.3.23 0x14 OMC Id */
3629 DE_BSSGP_PDU_IN_ERROR, /* 11.3.24 0x15 PDU In Error */
3630 DE_BSSGP_PDU_LIFETIME, /* 11.3.25 0x16 PDU Lifetime */
3631 DE_BSSP_PRIORITY, /* 11.3.27 0x17 Priority */
3632 DE_BSSGP_QOS_PROFILE, /* 11.3.28 0x18 QoS Profile */
3633 DE_BSSGP_RA_CAUSE, /* 11.3.29 0x19 Radio Cause */
3634 DE_BSSGP_RA_CAP_UPD_CAUSE, /* 11.3.30 0x1a RA-Cap-UPD-Cause */
3635 DE_BSSGP_RAI, /* 11.3.31 0x1b Routeing Area GSM_A_PDU_TYPE_GM, DE_RAI*/
3636 DE_BSSGP_R_DEFAULT_MS, /* 11.3.32 0x1c R_default_MS */
3637 DE_BSSGP_SUSPEND_REF_NO, /* 11.3.33 0x1d Suspend Reference Number */
3638 DE_BSSGP_TAG, /* 11.3.34 0x1e Tag */
3639 DE_BSSGP_TLLI, /* 11.3.35 0x1f Temporary logical link Identity (TLLI) GSM_A_PDU_TYPE_RR, DE_RR_TLLI*/
3640 DE_BSSGP_TMSI_PTMSI, /* 11.3.36 0x20 Temporary Mobile Subscriber Identity (TMSI) GSM_A_PDU_TYPE_RR, DE_RR_TMSI_PTMSI*/
3641 DE_BSSGP_TRACE_REF, /* 11.3.37 0x21 Trace Reference */
3642 DE_BSSGP_TRACE_TYPE, /* 11.3.38 0x22 Trace Type */
3643 DE_BSSGP_TRANSACTION_ID, /* 11.3.39 0x23 Transaction Id */
3644 DE_BSSGP_TRIGGER_ID, /* 11.3.40 0x24 Trigger Id */
3645 DE_BSSGP_NO_OF_OCT_AFFECTED, /* 11.3.41 0x25 Number of octets affected */
3646 DE_BSSGP_LSA_ID_LIST, /* 11.3.18 0x26 LSA Identifier List GSM_A_PDU_TYPE_BSSMAP, BE_LSA_ID_LIST*/
3647 DE_BSSGP_LSA_INFO, /* 11.3.19 0x27 LSA Information GSM_A_PDU_TYPE_BSSMAP, BE_LSA_INFO */
3648 DE_BSSGP_ACKET_FLOW_ID, /* 11.3.42 0x28 Packet Flow Identifier (PFI) GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID*/
3649 DE_BSSGP_GPRS_TIMER, /* 11.3.44 0x29 GPRS Timer */
3650 DE_BSSGP_QOS, /* 11.3.43 0x3a Aggregate BSS QoS Profile GSM_A_PDU_TYPE_GM, DE_QOS*/
3651 DE_BSSGP_FEATURE_BITMAP, /* 11.3.45 0x3b Feature Bitmap */
3652 DE_BSSGP_BUCKET_FULL_RATIO, /* 11.3.46 0x3c Bucket Full Ratio */
3653 DE_BSSGP_SERV_UTRAN_CCO, /* 11.3.47 0x3d Service UTRAN CCO */
3654 DE_BSSGP_NSEI, /* 11.3.48 0x3e NSEI (Network Service Entity Identifier) */
3655 DE_BSSGP_RRLP_APDU, /* 11.3.49 0x3f RRLP APDU */
3657 DE_BSSGP_RRLP_FLAGS, /* 11.3.60 0x4a RRLP Flags */
3658 DE_BSSGP_RIM_APP_ID, /* 11.3.61 0x4b RIM Application Identity */
3659 DE_BSSGP_RIM_SEQ_NO, /* 11.3.62 0x4c RIM Sequence Number */
3661 DE_BSSGP_RAN_INF_REQUEST_RIM_CONT, /* 11.3.62a.1 0x57 RAN-INFORMATION-REQUEST RIM Container */
3662 DE_BSSGP_RAN_INF_RIM_CONT, /* 11.3.62a.2 RAN-INFORMATION RIM Container */
3663 DE_BSSGP_RAN_INFORMATION_ACK_RIM_CONT, /* 11.3.62a.3 RAN-INFORMATION-ACK RIM Container */
3664 DE_BSSGP_RAN_INFORMATION_ERROR_RIM_CONT, /* 11.3.62a.4 RAN-INFORMATION-ERROR RIM Container */
3665 DE_BSSGP_RAN_INF_APP_ERROR_RIM_CONT, /* 11.3.62a.5 RAN-INFORMATION-APPLICATION-ERROR RIM Container */
3666 DE_BSSGP_RAN_INFORMATION_REQUEST_APP_CONT, /* 11.3.63.1 RAN-INFORMATION-REQUEST Application Container */
3667 DE_BSSGP_RAN_INFORMATION_APP_CONT_UNIT, /* 11.3.63.2 RAN-INFORMATION Application Container Unit */
3668 DE_BSSGP_RAN_APP_ERROR_CONT, /* 11.3.64 Application Error Container */
3669 DE_BSSGP_RIM_PDU_INDICATIONS, /* 11.3.65 RIM PDU Indications */
3670 DE_BSSGP_RIM_PROTO_VER_NO, /* 11.3.67 RIM Protocol Version Number */
3672 DE_BSSGP_PFC_FLOW_CTRL, /* 11.3.68 PFC Flow Control parameters */
3673 DE_BSSGP_RIM_ROUTING_INF, /* 11.3.70 RIM Routing Information */
3675 DE_BSSGP_MBMS_SESSION_ID, /* 11.3.71 MBMS Session Identity */
3676 DE_BSSGP_MBMS_SESSION_DUR, /* 11.3.72 MBMS Session Duration */
3677 DE_BSSGP_MBMS_SAI_LIST, /* 11.3.73 MBMS Service Area Identity List */
3678 DE_BSSGP_MBMS_RESPONSE, /* 11.3.74 MBMS Response */
3679 DE_BSSGP_MBMS_RA_LIST, /* 11.3.75 MBMS Routing Area List */
3680 DE_BSSGP_MBMS_SESSION_INF, /* 11.3.76 MBMS Session Information */
3681 DE_BSSGP_TMGI, /* 11.3.77 TMGI (Temporary Mobile Group Identity) GSM_A_PDU_TYPE_GM, DE_TMGI*/
3683 DE_BSSGP_MBMS_STOP_CAUSE, /* 11.3.78 MBMS Stop Cause */
3684 DE_BSSGP_SOURCE_BSS_TO_TARGET_BSS_TRANSP_CONT, /* 11.3.79 Source BSS to Target BSS Transparent Container */
3685 DE_BSSGP_TARGET_BSS_TO_SOURCE_BSS_TRANSP_CONT, /* 11.3.80 Target BSS to Source BSS Transparent Container */
3686 DE_BSSGP_PFCS_TO_BE_SET_UP_LIST, /* 11.3.82 PFCs to be set-up list */
3687 DE_BSSGP_LIST_OF_SETUP_PFCS, /* 11.3.83 List of set-up PFCs */
3688 DE_BSSGP_EXT_FEATURE_BITMAP, /* 11.3.84 Extended Feature Bitmap */
3689 DE_BSSGP_SRC_TO_TRG_TRANSP_CONT, /* 11.3.85 Source to Target Transparent Container */
3690 DE_BSSGP_TRG_TO_SRC_TRANSP_CONT, /* 11.3.86 Target to Source Transparent Container */
3691 BE_BSSGP_RNC_ID, /* 11.3.87 RNC Identifier */
3692 DE_BSSGP_PAGE_MODE, /* 11.3.88 Page Mode */
3693 DE_BSSGP_CONTAINER_ID, /* 11.3.89 Container ID */
3694 DE_BSSGP_GLOBAL_TFI, /* 11.3.90 Global TFI */
3695 DE_BSSGP_TIME_TO_MBMS_DATA_TRAN, /* 11.3.92 Time to MBMS Data Transfer */
3696 DE_BSSGP_MBMS_SESSION_REP_NO, /* 11.3.93 MBMS Session Repetition Number */
3698 DE_BSSGP_INTER_RAT_HO_INFO, /* 11.3.94 Inter RAT Handover Info */
3699 DE_BSSGP_PS_HO_CMD, /* 11.3.95 PS Handover Command */
3700 DE_BSSGP_PS_HO_INDICATIONS, /* 11.3.95a PS Handover Indications */
3701 DE_BSSGP_SIPSI_CONTAINER, /* 11.3.95b SI/PSI Container */
3702 DE_BSSGP_ACTIVE_PFCS_LIST, /* 11.3.95c Active PFCs List */
3703 DE_BSSGP_VELOCITY_DATA, /* 11.3.96 Velocity Data */
3704 DE_BSSGP_DTM_HO_CMD, /* 11.3.97 DTM Handover Command */
3705 DE_BSSGP_CS_INDICATION, /* 11.3.98 CS Indication */
3706 DE_BSSGP_FLOW_CONTROL_GRAN, /* 11.3.102 Flow Control Granularity */
3707 DE_BSSGP_ENB_ID, /* 11.3.103 eNB Identifier */
3708 DE_BSSGP_E_UTRAN_INTER_RAT_HO_INFO, /* 11.3.104 E-UTRAN Inter RAT Handover Info */
3709 DE_BSSGP_SUB_PROF_ID_F_RAT_FRQ_PRIO, /* 11.3.105 Subscriber Profile ID for RAT/Frequency priority */
3710 DE_BSSGP_REQ_FOR_INTER_RAT_HO_INFO, /* 11.3.106 Request for Inter-RAT Handover Info */
3711 DE_BSSGP_RELIABLE_INTER_RAT_HO_INF, /* 11.3.107 Reliable Inter-RAT Handover Info */
3712 DE_BSSGP_SON_TRANSFER_APP_ID, /* 11.3.108 SON Transfer Application Identity */
3713 DE_BSSGP_CSG_ID, /* 11.3.109 CSG Identifier */
3714 DE_BSSGP_REDIR_ATTEMPT_FLG, /* 11.3.111 Redirect Attempt Flag */
3715 DE_BSSGP_REDIR_INDICATION, /* 11.3.112 Redirection Indication */
3716 DE_BSSGP_REDIR_COMPLETE, /* 11.3.113 Redirection Completed */
3717 DE_BSSGP_UNCONFIRM_SEND_STATE_VAR, /* 11.3.114 Unconfirmed send state variable */
3718 DE_BSSGP_SCI, /* 11.3.116 SCI */
3719 DE_BSSGP_GGSN_PGW_LOCATION, /* 11.3.117 GGSN/P-GW location */
3720 DE_BSSGP_PRIORITY_CLASS_IND, /* 11.3.119 Priority Class Indicator */
3721 DE_BSSGP_EDRX_PARAMS, /* 11.3.122 eDRX Parameters */
3722 DE_BSSGP_TUNPO, /* 11.3.123 Time Until Next Paging Occasion */
3723 DE_BSSGP_COVERAGE_CLASS, /* 11.3.124 Coverage Class */
3724 DE_BSSGP_PAG_ATTEMPT_INFO, /* 11.3.125 Paging Attempt Information */
3725 DE_BSSGP_EXCEPTION_REPORT_FLAG, /* 11.3.126 Exception Report Flag */
3726 DE_BSSGP_OLD_RA_IDENTIFICATION, /* 11.3.127 Old Routing Area Identification */
3727 DE_BSSGP_ATTACH_INDIC, /* 11.3.128 Attach Indicator */
3728 DE_BSSGP_PLMN_ID, /* 11.3.129 PLMN Identity */
3730 x9e MME Query
3731 x9f SGSN Group Identity
3732 xa0 Additional P-TMSI
3733 xa1 UE Usage Type */
3735 DE_BSSGP_NONE /* NONE */
3737 bssgp_elem_idx_t;
3739 static const value_string bssgp_elem_strings[] = {
3740 { DE_BSSGP_ALIGNMENT_OCTETS, "Alignment Octets" }, /* 11.3.1 Alignment octets */
3741 { DE_BSSGP_BMAX_DEFAULT_MS, "Bmax default MS" }, /* 11.3.2 Bmax default MS */
3742 { DE_BSSGP_BSS_AREA_IND, "BSS Area Indication" }, /* 11.3.3 BSS Area Indication */
3743 { DE_BSSGP_BUCKET_LEAK_RATE, "Bucket Leak Rate (R)" }, /* 11.3.4 Bucket Leak Rate (R) */
3744 { DE_BSSGP_BVCI, "BVCI (BSSGP Virtual Connection Identifier)" }, /* 11.3.6 BVCI (BSSGP Virtual Connection Identifier) */
3745 { DE_BSSGP_BVC_BUCKET_SIZE, "BVC Bucket size" }, /* 11.3.5 BVC Bucket Size */
3746 { DE_BSSGP_BVC_MEAS, "BVC Measurement" }, /* 11.3.7 BVC Measurement */
3747 { DE_BSSGP_CAUSE, "Cause" }, /* 11.3.8 Cause */
3748 { DE_BSSGP_CELL_ID, "Cell Identifier" }, /* 11.3.9 Cell Identifier */
3749 { DE_BSSGP_CHLN_NEEDED, "Channel needed" }, /* 11.3.10 Channel needed */
3750 { DE_BSSGP_DRX_PARAM, "DRX Parameters" }, /* 11.3.11 DRX Parameters */
3751 { DE_BSSGP_EMLPP_PRIO, "eMLPP-Priority" }, /* 11.3.12 eMLPP-Priority */
3752 { DE_BSSGP_FLUSH_ACTION, "Flush Action" }, /* 11.3.13 Flush Action */
3753 { DE_BSSGP_IMSI, "IMSI" }, /* 11.3.14 IMSI */
3754 { DE_BSSGP_LLC_PDU, "LLC-PDU" }, /* 11.3.15 LLC-PDU */
3755 { DE_BSSGP_LLC_FRAMES_DISC, "LLC Frames Discarded" }, /* 11.3.16 LLC Frames Discarded */
3756 { DE_BSSGP_LAI, "Location Area" }, /* 11.3.17 Location Area */
3757 { DE_BSSGP_MID, "Mobile Id" }, /* 11.3.20 Mobile Id */
3758 { DE_BSSGP_MS_BUCKET_SIZE, "MS Bucket Size" }, /* 11.3.21 MS Bucket Size */
3759 { DE_BSSGP_MS_RAD_ACC_CAP, "MS Radio Access Capability" }, /* 11.3.22 MS Radio Access Capability GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP */
3760 { DE_BSSGP_OMC_ID, "OMC Id" }, /* 11.3.23 OMC Id */
3761 { DE_BSSGP_PDU_IN_ERROR, "PDU In Error" }, /* 11.3.24 PDU In Error */
3762 { DE_BSSGP_PDU_LIFETIME, "PDU Lifetime" }, /* 11.3.25 PDU Lifetime */
3763 { DE_BSSP_PRIORITY, "Priority" }, /* 11.3.27 Priority */
3764 { DE_BSSGP_QOS_PROFILE, "QoS Profile" }, /* 11.3.28 QoS Profile */
3765 { DE_BSSGP_RA_CAUSE, "Radio Cause" }, /* 11.3.29 Radio Cause */
3766 { DE_BSSGP_RA_CAP_UPD_CAUSE, "RA-Cap-UPD-Cause" }, /* 11.3.30 RA-Cap-UPD-Cause */
3767 { DE_BSSGP_RAI, "Routeing Area" }, /* 11.3.31 Routeing Area */
3768 { DE_BSSGP_R_DEFAULT_MS, "R_default_MS" }, /* 11.3.32 R_default_MS */
3769 { DE_BSSGP_SUSPEND_REF_NO, "Suspend Reference Number" }, /* 11.3.33 Suspend Reference Number */
3770 { DE_BSSGP_TAG, "Tag" }, /* 11.3.34 Tag */
3771 { DE_BSSGP_TLLI, "Temporary logical link Identity (TLLI)" }, /* 11.3.35 Temporary logical link Identity (TLLI) GSM_A_PDU_TYPE_RR, DE_RR_TLLI*/
3772 { DE_BSSGP_TMSI_PTMSI, "Temporary Mobile Subscriber Identity (TMSI)" }, /* 11.3.36 Temporary Mobile Subscriber Identity (TMSI)GSM_A_PDU_TYPE_RR, DE_RR_TMSI_PTMSI */
3773 { DE_BSSGP_TRACE_REF, "Trace Reference" }, /* 11.3.37 Trace Reference */
3774 { DE_BSSGP_TRACE_TYPE, "Trace Type" }, /* 11.3.38 Trace Type */
3775 { DE_BSSGP_TRANSACTION_ID, "Transaction Id" }, /* 11.3.39 Transaction Id */
3776 { DE_BSSGP_TRIGGER_ID, "Trigger Id" }, /* 11.3.40 Trigger Id */
3777 { DE_BSSGP_NO_OF_OCT_AFFECTED, "Number of octets affected" }, /* 11.3.41 Number of octets affected */
3778 { DE_BSSGP_LSA_ID_LIST, "LSA Identifier List" }, /* 11.3.18 LSA Identifier List */
3779 { DE_BSSGP_LSA_INFO, "LSA Information" }, /* 11.3.19 LSA Information */
3780 { DE_BSSGP_ACKET_FLOW_ID, "Packet Flow Identifier (PFI)" }, /* 11.3.42 Packet Flow Identifier (PFI) GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID*/
3781 /* 11.3.42a (void) */
3782 { DE_BSSGP_GPRS_TIMER, "GPRS Timer" }, /* 11.3.44 GPRS Timer */
3783 { DE_BSSGP_QOS, "Aggregate BSS QoS Profile" }, /* 11.3.43 Aggregate BSS QoS Profile GSM_A_PDU_TYPE_GM, DE_QOS*/
3784 { DE_BSSGP_FEATURE_BITMAP, "Feature Bitmap" }, /* 11.3.45 Feature Bitmap */
3785 { DE_BSSGP_BUCKET_FULL_RATIO, "Bucket Full Ratio" }, /* 11.3.46 Bucket Full Ratio */
3786 { DE_BSSGP_SERV_UTRAN_CCO, "Service UTRAN CCO" }, /* 11.3.47 Service UTRAN CCO */
3787 { DE_BSSGP_NSEI, "NSEI (Network Service Entity Identifier)" }, /* 11.3.48 NSEI (Network Service Entity Identifier) */
3788 { DE_BSSGP_RRLP_APDU, "RRLP APDU" }, /* 11.3.49 RRLP APDU */
3789 /* 11.3.50 LCS QoS BSSGP_IEI_LCS_QOS, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCSQOS*/
3790 /* 11.3.51 LCS Client Type BSSGP_IEI_LCS_CLIENT_TYPE, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CLIENT_TYPE*/
3791 /* 11.3.52 Requested GPS Assistance Data BSSGP_IEI_REQUESTED_GPS_ASSISTANCE_DATA, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_REQ_GPS_ASSIST_D*/
3792 /* 11.3.53 Location Type BSSGP_IEI_LOCATION_TYPE, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_GANSS_LOC_TYPE*/
3793 /* 11.3.54 Location Estimate BSSGP_IEI_LOCATION_ESTIMATE, GSM_A_PDU_TYPE_BSSMAP, BE_LOC_EST*/
3794 /* 11.3.55 Positioning Data 0x7d, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_POS_DATA*/
3795 /* 11.3.56 Deciphering Keys BSSGP_IEI_DECIPHERING_KEYS, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_DECIPH_KEYS */
3796 /* 11.3.57 LCS Priority BSSGP_IEI_LCS_PRIORITY, GSM_A_PDU_TYPE_BSSMAP, BE_LCS_PRIO;*/
3797 /* 11.3.58 LCS Cause BSSGP_IEI_LCS_CAUSE, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CAUSE */
3798 /* 11.3.59 LCS Capability 0x49 , GSM_A_PDU_TYPE_GM, DE_PS_LCS_CAP*/
3799 { DE_BSSGP_RRLP_FLAGS, "RRLP Flags" }, /* 11.3.60 RRLP Flags */
3800 { DE_BSSGP_RIM_APP_ID, "RIM Application Identity" }, /* 11.3.61 RIM Application Identity */
3801 { DE_BSSGP_RIM_SEQ_NO, "RIM Sequence Number" }, /* 11.3.62 RIM Sequence Number */
3802 /* 11.3.62a RIM Container */
3803 /* 11.3.62a.0 General */
3804 { DE_BSSGP_RAN_INF_REQUEST_RIM_CONT, "RAN-INFORMATION-REQUEST RIM Container" }, /* 11.3.62a.1 RAN-INFORMATION-REQUEST RIM Container */
3805 { DE_BSSGP_RAN_INF_RIM_CONT, "RAN-INFORMATION RIM Container" }, /* 11.3.62a.2 RAN-INFORMATION RIM Container */
3806 { DE_BSSGP_RAN_INFORMATION_ACK_RIM_CONT, "RAN-INFORMATION-ACK RIM Container" }, /* 11.3.62a.3 RAN-INFORMATION-ACK RIM Container */
3807 { DE_BSSGP_RAN_INFORMATION_ERROR_RIM_CONT, "RAN-INFORMATION-ERROR RIM Container" }, /* 11.3.62a.4 RAN-INFORMATION-ERROR RIM Container */
3808 { DE_BSSGP_RAN_INF_APP_ERROR_RIM_CONT, "RAN-INFORMATION-APPLICATION-ERROR RIM Container" }, /* 11.3.62a.5 RAN-INFORMATION-APPLICATION-ERROR RIM Container */
3809 /* 11.3.63 Application Container */
3810 { DE_BSSGP_RAN_INFORMATION_REQUEST_APP_CONT, "RAN-INFORMATION-REQUEST Application Container" }, /* 11.3.63.1 RAN-INFORMATION-REQUEST Application Container */
3811 /* 11.3.63.1.0 General */
3812 /* 11.3.63.1.1 RAN-INFORMATION-REQUEST Application Container for the NACC Application */
3813 /* 11.3.63.1.2 RAN-INFORMATION-REQUEST Application Container for the SI3 Application */
3814 /* 11.3.63.1.3 RAN-INFORMATION-REQUEST Application Container for the MBMS data channel Application */
3815 /* 11.3.63.1.4 RAN-INFORMATION-REQUEST Application Container for the SON Transfer Application */
3816 { DE_BSSGP_RAN_INFORMATION_APP_CONT_UNIT, "RAN-INFORMATION Application Container Unit" }, /* 11.3.63.2 RAN-INFORMATION Application Container Unit */
3817 /* 11.3.63.2.0 General */
3818 /* 11.3.63.2.1 RAN-INFORMATION Application Container for the NACC Application */
3819 /* 11.3.63.2.2 RAN-INFORMATION Application Container for the SI3 Application */
3820 /* 11.3.63.2.3 RAN-INFORMATION Application Container for the MBMS data channel Application */
3821 /* 11.3.63.2.4 RAN-INFORMATION Application Container for the SON Transfer Application */
3822 { DE_BSSGP_RAN_APP_ERROR_CONT, "Application Error Container" }, /* 11.3.64 Application Error Container */
3823 /* 11.3.64.1 Application Error Container layout for the NACC application */
3824 /* 11.3.64.2 Application Error Container for the SI3 application */
3825 /* 11.3.64.3 Application Error Container for the MBMS data channel application */
3826 /* 11.3.64.4 Application Error Container for the SON Transfer Application */
3827 { DE_BSSGP_RIM_PDU_INDICATIONS, "RIM PDU Indications" }, /* 11.3.65 RIM PDU Indications */
3828 /* 11.3.65.0 General */
3829 /* 11.3.65.1 RAN-INFORMATION-REQUEST RIM PDU Indications */
3830 /* 11.3.65.2 RAN-INFORMATION RIM PDU Indications */
3831 /* 11.3.65.3 RAN-INFORMATION-APPLICATION-ERROR RIM PDU Indications */
3832 /* 11.3.66 (void) */
3833 { DE_BSSGP_RIM_PROTO_VER_NO, "RIM Protocol Version Number" }, /* 11.3.67 RIM Protocol Version Number */
3834 { DE_BSSGP_PFC_FLOW_CTRL, "PFC Flow Control parameters" }, /* 11.3.68 PFC Flow Control parameters */
3835 /* 0x53, SGSAP_PDU_TYPE, DE_SGSAP_GLOBAL_CN_ID */ /* 11.3.69 Global CN-Id */
3836 { DE_BSSGP_RIM_ROUTING_INF, "RIM Routing Information" }, /* 11.3.70 RIM Routing Information */
3837 { DE_BSSGP_MBMS_SESSION_ID, "MBMS Session Identity" }, /* 11.3.71 MBMS Session Identity */
3838 { DE_BSSGP_MBMS_SESSION_DUR, "MBMS Session Duration" }, /* 11.3.72 MBMS Session Duration */
3839 { DE_BSSGP_MBMS_SAI_LIST, "MBMS Service Area Identity List" }, /* 11.3.73 MBMS Service Area Identity List */
3840 { DE_BSSGP_MBMS_RESPONSE, "MBMS Response" }, /* 11.3.74 MBMS Response */
3841 { DE_BSSGP_MBMS_RA_LIST, "MBMS Routing Area List" }, /* 11.3.75 MBMS Routing Area List */
3842 { DE_BSSGP_MBMS_SESSION_INF, "MBMS Session Information" }, /* 11.3.76 MBMS Session Information */
3843 { DE_BSSGP_TMGI, "TMGI" }, /* 11.3.77 TMGI (Temporary Mobile Group Identity) */
3844 { DE_BSSGP_MBMS_STOP_CAUSE, "MBMS Stop Cause" }, /* 11.3.78 MBMS Stop Cause */
3845 { DE_BSSGP_SOURCE_BSS_TO_TARGET_BSS_TRANSP_CONT, "Source BSS to Target BSS Transparent Container" }, /* 11.3.79 Source BSS to Target BSS Transparent Container */
3846 { DE_BSSGP_TARGET_BSS_TO_SOURCE_BSS_TRANSP_CONT, "Target BSS to Source BSS Transparent Container" }, /* 11.3.80 Target BSS to Source BSS Transparent Container */
3847 /* 11.3.81 NAS container for PS Handover */
3848 { DE_BSSGP_PFCS_TO_BE_SET_UP_LIST, "PFCs to be set-up list" }, /* 11.3.82 PFCs to be set-up list */
3849 { DE_BSSGP_LIST_OF_SETUP_PFCS, "List of set-up PFCs" }, /* 11.3.83 List of set-up PFCs */
3850 { DE_BSSGP_EXT_FEATURE_BITMAP, "Extended Feature Bitmap" }, /* 11.3.84 Extended Feature Bitmap */
3851 { DE_BSSGP_SRC_TO_TRG_TRANSP_CONT, "Source to Target Transparent Container" }, /* 11.3.85 Source to Target Transparent Container */
3852 { DE_BSSGP_TRG_TO_SRC_TRANSP_CONT, "Target to Source Transparent Container" }, /* 11.3.86 Target to Source Transparent Container */
3853 { BE_BSSGP_RNC_ID, "RNC Identifier" }, /* 11.3.87 RNC Identifier */
3854 { DE_BSSGP_PAGE_MODE, "Page Mode" }, /* 11.3.88 Page Mode */
3855 { DE_BSSGP_CONTAINER_ID, "Container ID" }, /* 11.3.89 Container ID */
3856 { DE_BSSGP_GLOBAL_TFI, "Global TFI" }, /* 11.3.90 Global TFI */
3857 /* 11.3.91 IMEI */
3858 { DE_BSSGP_TIME_TO_MBMS_DATA_TRAN, "Time to MBMS Data Transfer" }, /* 11.3.92 Time to MBMS Data Transfer */
3859 { DE_BSSGP_MBMS_SESSION_REP_NO, "MBMS Session Repetition Number" }, /* 11.3.93 MBMS Session Repetition Number */
3860 { DE_BSSGP_INTER_RAT_HO_INFO, "Inter RAT Handover Info" }, /* 11.3.94 Inter RAT Handover Info */
3861 { DE_BSSGP_PS_HO_CMD, "PS Handover Command" }, /* 11.3.95 PS Handover Command */
3862 { DE_BSSGP_PS_HO_INDICATIONS, "PS Handover Indications" }, /* 11.3.95a PS Handover Indications */
3863 { DE_BSSGP_SIPSI_CONTAINER, "SI/PSI Container" }, /* 11.3.95b SI/PSI Container */
3864 { DE_BSSGP_ACTIVE_PFCS_LIST, "Active PFCs List" }, /* 11.3.95c Active PFCs List */
3865 { DE_BSSGP_VELOCITY_DATA, "Velocity Data" }, /* 11.3.96 Velocity Data */
3866 { DE_BSSGP_DTM_HO_CMD, "DTM Handover Command" }, /* 11.3.97 DTM Handover Command */
3867 { DE_BSSGP_CS_INDICATION, "CS Indication" }, /* 11.3.98 CS Indication */
3868 /* 11.3.99 Requested GANSS Assistance Data 0x7b, GSM_A_PDU_TYPE_BSSMAP, BE_GANSS_ASS_DTA*/
3869 /* 11.3.100 GANSS Location Type 0x7c, GSM_A_PDU_TYPE_BSSMAP, BE_GANSS_LOC_TYP*/
3870 /* 11.3.101 GANSS Positioning Data ENC_BIG_ENDIAN);*/
3871 { DE_BSSGP_FLOW_CONTROL_GRAN, "Flow Control Granularity" }, /* 11.3.102 Flow Control Granularity */
3872 { DE_BSSGP_ENB_ID, "eNB Identifier" }, /* 11.3.103 eNB Identifier */
3873 { DE_BSSGP_E_UTRAN_INTER_RAT_HO_INFO, "E-UTRAN Inter RAT Handover Info" }, /* 11.3.104 E-UTRAN Inter RAT Handover Info */
3874 { DE_BSSGP_SUB_PROF_ID_F_RAT_FRQ_PRIO, "Subscriber Profile ID for RAT/Frequency priority" }, /* 11.3.105 Subscriber Profile ID for RAT/Frequency priority */
3875 { DE_BSSGP_REQ_FOR_INTER_RAT_HO_INFO, "Request for Inter-RAT Handover Info" }, /* 11.3.106 Request for Inter-RAT Handover Info */
3876 { DE_BSSGP_RELIABLE_INTER_RAT_HO_INF, "Reliable Inter-RAT Handover Info" }, /* 11.3.107 Reliable Inter-RAT Handover Info */
3877 { DE_BSSGP_SON_TRANSFER_APP_ID, "Son transfer application identity" }, /* 11.3.108 SON Transfer Application Identity */
3878 { DE_BSSGP_CSG_ID, "CSG Identifier" }, /* 11.3.109 CSG Identifier */
3879 /* 11.3.110 Tracking Area Code */
3880 { DE_BSSGP_REDIR_ATTEMPT_FLG, "Redirect Attempt Flag"}, /* 11.3.111 Redirect Attempt Flag */
3881 { DE_BSSGP_REDIR_INDICATION, "Redirection Indication"}, /* 11.3.112 Redirection Indication */
3882 { DE_BSSGP_REDIR_COMPLETE, "Redirection Completed"}, /* 11.3.113 Redirection Completed */
3883 { DE_BSSGP_UNCONFIRM_SEND_STATE_VAR, "Unconfirmed Send State Variable"}, /* 11.3.114 Unconfirmed send state variable */
3884 { DE_BSSGP_SCI, "SCI" }, /* 11.3.116 SCI */
3885 { DE_BSSGP_GGSN_PGW_LOCATION, "GGSN / P - GW location"}, /* 11.3.117 GGSN/P-GW location */
3886 /* 11.3.118 Selected PLMN ID */
3887 { DE_BSSGP_PRIORITY_CLASS_IND, "Priority Class Indicator" }, /* 11.3.119 Priority Class Indicator */
3888 { DE_BSSGP_EDRX_PARAMS, "eDRX Parameters" }, /* 11.3.122 eDRX Parameters */
3889 { DE_BSSGP_TUNPO, "Time Until Next Paging Occasion" }, /* 11.3.123 Time Until Next Paging Occasion */
3890 { DE_BSSGP_COVERAGE_CLASS, "Coverage Class" }, /* 11.3.124 Coverage Class */
3891 { DE_BSSGP_PAG_ATTEMPT_INFO, "Paging Attempt Information" }, /* 11.3.125 Paging Attempt Information */
3892 { DE_BSSGP_EXCEPTION_REPORT_FLAG, "Exception Report Flag" }, /* 11.3.126 Exception Report Flag */
3893 { DE_BSSGP_OLD_RA_IDENTIFICATION, "Old Routing Area Identification" }, /* 11.3.127 Old Routing Area Identification */
3894 { DE_BSSGP_ATTACH_INDIC, "Attach Indicator" }, /* 11.3.128 Attach Indicator */
3895 { DE_BSSGP_PLMN_ID, "PLMN Identity" }, /* 11.3.129 PLMN Identity */
3896 { 0, NULL }
3898 value_string_ext bssgp_elem_strings_ext = VALUE_STRING_EXT_INIT(bssgp_elem_strings);
3900 #define NUM_BSSGP_ELEM array_length(bssgp_elem_strings)
3901 int ett_bssgp_elem[NUM_BSSGP_ELEM];
3904 uint16_t (*bssgp_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string, int string_len) = {
3905 de_bssgp_aligment_octets, /* 11.3.1 0x00 Alignment octets */
3906 de_bssgp_bmax_default_ms, /* 11.3.2 0x01 Bmax default MS */
3907 de_bssgp_bss_area_ind, /* 11.3.3 0x02 BSS Area Indication */
3908 de_bssgp_bucket_leak_rate, /* 11.3.4 0x03 Bucket Leak Rate (R) */
3909 de_bssgp_bvci, /* 11.3.6 0x04 BVCI (BSSGP Virtual Connection Identifier) */
3910 de_bssgp_bvc_bucket_size, /* 11.3.5 0x05 BVC Bucket Size */
3911 de_bssgp_bvc_meas, /* 11.3.7 0x06 BVC Measurement */
3912 de_bssgp_cause, /* 11.3.8 0x07 Cause */
3913 de_bssgp_cell_id, /* 11.3.9 0x08 Cell Identifier */
3914 de_bssgp_chnl_needed, /* 11.3.10 0x09 Channel needed */
3915 NULL, /* 11.3.11 0x0a DRX Parameters */
3916 NULL, /* 11.3.12 0x0b eMLPP-Priority */
3917 de_bssgp_flush_action, /* 11.3.13 0x0c Flush Action */
3918 de_mid, /* 11.3.14 0x0d IMSI */
3919 de_bssgp_llc_pdu, /* 11.3.15 0x0e LLC-PDU */
3920 de_bssgp_llc_frames_disc, /* 11.3.16 0x0f LLC Frames Discarded */
3921 NULL, /* 11.3.17 0x10 Location Area */
3922 NULL, /* 11.3.20 0x11 Mobile Id */
3923 de_bssgp_ms_bucket_size, /* 11.3.21 0x12 MS Bucket Size */
3924 NULL, /* 11.3.22 0x13 MS Radio Access Capability */
3925 de_bssgp_omc_id, /* 11.3.23 0x14 OMC Id */
3926 de_bssgp_pdu_in_error, /* 11.3.24 0x15 PDU In Error */
3927 de_bssgp_pdu_lifetime, /* 11.3.25 0x16 PDU Lifetime */
3928 NULL, /* 11.3.27 0x17 Priority */
3929 de_bssgp_qos_profile, /* 11.3.28 0x18 QoS Profile */
3930 de_bssgp_ra_cause, /* 11.3.29 0x19 Radio Cause */
3931 de_bssgp_ra_cap_upd_cause, /* 11.3.30 0x1a RA-Cap-UPD-Cause */
3932 NULL, /* 11.3.31 0x1b Routeing Area */
3933 de_bssgp_r_default_ms, /* 11.3.32 0x1c R_default_MS */
3934 de_bssgp_suspend_ref_no, /* 11.3.33 0x1d Suspend Reference Number */
3935 de_bssgp_tag, /* 11.3.34 0x1e Tag */
3936 NULL, /* 11.3.35 0x1f Temporary logical link Identity (TLLI) */
3937 NULL, /* 11.3.36 0x20 Temporary Mobile Subscriber Identity (TMSI) */
3938 de_bssgp_trace_ref, /* 11.3.37 0x21 Trace Reference */
3939 de_bssgp_trace_type, /* 11.3.38 0x22 Trace Type */
3940 de_bssgp_transaction_id, /* 11.3.39 0x23 Transaction Id */
3941 de_bssgp_trigger_id, /* 11.3.40 0x24 Trigger Id */
3942 de_bssgp_no_of_oct_affected, /* 11.3.41 0x25 Number of octets affected */
3943 NULL, /* 11.3.18 0x26 LSA Identifier List GSM_A_PDU_TYPE_BSSMAP, BE_LSA_ID_LIST*/
3944 NULL, /* 11.3.19 0x27 LSA Information */
3945 NULL, /* 11.3.42 0x28 Packet Flow Identifier (PFI) */
3946 de_bssgp_gprs_timer, /* 11.3.44 0x29 GPRS Timer */
3947 NULL, /* 11.3.43 0x3a Aggregate BSS QoS Profile */
3948 de_bssgp_feature_bitmap, /* 11.3.45 0x3b Feature Bitmap */
3949 de_bssgp_bucket_full_ratio, /* 11.3.46 0x3c Bucket Full Ratio */
3950 de_bssgp_serv_utran_cco, /* 11.3.47 0x3d Service UTRAN CCO */
3951 de_bssgp_nsei, /* 11.3.48 0x3e NSEI (Network Service Entity Identifier) */
3952 de_bssgp_rrlp_apdu, /* 11.3.49 RRLP APDU */
3953 de_bssgp_rrlp_flags, /* 11.3.60 RRLP Flags */
3954 de_bssgp_rim_app_id, /* 11.3.61 RIM Application Identity */
3955 de_bssgp_rim_seq_no, /* 11.3.62 RIM Sequence Number */
3956 de_bssgp_ran_inf_request_rim_cont, /* 11.3.62a.1 RAN-INFORMATION-REQUEST RIM Container */
3957 de_bssgp_ran_inf_rim_cont, /* 11.3.62a.2 RAN-INFORMATION RIM Container */
3958 de_bssgp_ran_inf_ack_rim_cont, /* 11.3.62a.3 RAN-INFORMATION-ACK RIM Container */
3959 de_bssgp_ran_inf_error_rim_cont, /* 11.3.62a.4 RAN-INFORMATION-ERROR RIM Container */
3960 de_bssgp_ran_inf_app_error_rim_cont, /* 11.3.62a.5 RAN-INFORMATION-APPLICATION-ERROR RIM Container */
3962 de_bssgp_ran_information_request_app_cont, /* 11.3.63.1 RAN-INFORMATION-REQUEST Application Container */
3963 de_bssgp_ran_information_app_cont_unit, /* 11.3.63.2 RAN-INFORMATION Application Container Unit */
3964 de_bssgp_ran_app_error_cont, /* 11.3.64 Application Error Container */
3965 de_bssgp_rim_pdu_indications, /* 11.3.65 RIM PDU Indications */
3966 de_bssgp_rim_proto_ver_no, /* 11.3.67 RIM Protocol Version Number */
3968 de_bssgp_pfc_flow_ctrl, /* 11.3.68 PFC Flow Control parameters */
3969 de_bssgp_rim_routing_inf, /* 11.3.70 RIM Routing Information */
3970 de_bssgp_mbms_session_id, /* 11.3.71 MBMS Session Identity */
3971 de_bssgp_mbms_session_dur, /* 11.3.72 MBMS Session Duration */
3972 de_bssgp_mbms_sai_list, /* 11.3.73 MBMS Service Area Identity List */
3973 de_bssgp_mbms_response, /* 11.3.74 MBMS Response */
3974 de_bssgp_mbms_ra_list, /* 11.3.75 MBMS Routing Area List */
3975 de_bssgp_mbms_session_inf, /* 11.3.76 MBMS Session Information */
3976 NULL, /* 11.3.77 TMGI (Temporary Mobile Group Identity) */
3977 de_bssgp_mbms_stop_cause, /* 11.3.78 MBMS Stop Cause */
3978 de_bssgp_source_BSS_to_target_BSS_transp_cont, /* 11.3.79 Source BSS to Target BSS Transparent Container */
3979 de_bssgp_target_BSS_to_source_BSS_transp_cont, /* 11.3.80 Target BSS to Source BSS Transparent Container */
3980 de_bssgp_pfcs_to_be_set_up_list, /* 11.3.82 PFCs to be set-up list */
3981 de_bssgp_list_of_setup_pfcs, /* 11.3.83 List of set-up PFCs */
3982 de_bssgp_ext_feature_bitmap, /* 11.3.84 Extended Feature Bitmap */
3983 de_bssgp_src_to_trg_transp_cont, /* 11.3.85 Source to Target Transparent Container */
3984 de_bssgp_trg_to_src_transp_cont, /* 11.3.86 Target to Source Transparent Container */
3985 de_bssgp_rnc_identifier, /* 11.3.87 RNC Identifier */
3986 de_bssgp_page_mode, /* 11.3.88 Page Mode */
3987 de_bssgp_container_id, /* 11.3.89 Container ID */
3988 de_bssgp_global_tfi, /* 11.3.90 Global TFI */
3989 de_bssgp_time_to_MBMS_data_tran, /* 11.3.92 Time to MBMS Data Transfer */
3990 de_bssgp_mbms_session_rep_no, /* 11.3.93 MBMS Session Repetition Number */
3991 de_bssgp_inter_rat_ho_info, /* 11.3.94 Inter RAT Handover Info */
3992 de_bssgp_ps_ho_cmd, /* 11.3.95 PS Handover Command */
3993 de_bssgp_ps_ho_indications, /* 11.3.95a PS Handover Indications */
3994 de_bssgp_sipsi_container, /* 11.3.95b SI/PSI Container */
3995 de_bssgp_active_pfcs_list, /* 11.3.95c Active PFCs List */
3996 de_bssgp_velocity_data, /* 11.3.96 Velocity Data */
3997 de_bssgp_dtm_ho_cmd, /* 11.3.97 DTM Handover Command */
3998 de_bssgp_cs_indication, /* 11.3.98 CS Indication */
3999 de_bssgp_flow_control_gran, /* 11.3.102 Flow Control Granularity */
4000 de_bssgp_enb_id, /* 11.3.103 eNB Identifier */
4001 de_bssgp_e_utran_inter_rat_ho_info, /* 11.3.104 E-UTRAN Inter RAT Handover Info */
4002 de_bssgp_sub_prof_id_f_rat_freq_prio, /* 11.3.105 Subscriber Profile ID for RAT/Frequency priority */
4003 de_bssgp_req_for_inter_rat_ho_inf, /* 11.3.106 Request for Inter-RAT Handover Info */
4004 de_bssgp_reliable_inter_rat_ho_inf, /* 11.3.107 Reliable Inter-RAT Handover Info */
4005 de_bssgp_son_transfer_app_id, /* 11.3.108 SON Transfer Application Identity */
4006 de_bssgp_csg_id, /* 11.3.109 CSG Identifier */
4007 de_bssgp_redir_attempt_flg, /* 11.3.111 Redirect Attempt Flag */
4008 de_bssgp_redir_indication, /* 11.3.112 Redirection Indication */
4009 de_bssgp_redir_complete, /* 11.3.113 Redirection Completed */
4010 de_bssgp_unconfirm_send_state_var, /* 11.3.114 Unconfirmed send state variable */
4011 de_bssgp_sci, /* 11.3.116 SCI */
4012 de_bssgp_ggsn_pgw_location, /* 11.3.117 GGSN/P-GW location */
4013 de_bssgp_pri_class_ind, /* 11.3.119 Priority Class Indicator */
4014 de_bssgp_edrx_params, /* 11.3.122 eDRX Parameters */
4015 de_bssgp_tunpo, /* 11.3.122 Time Until Next Paging Occasion */
4016 de_bssgp_coverage_class, /* 11.3.124 Coverage Class */
4017 de_bssgp_pag_attempt_info, /* 11.3.125 Paging Attempt Information */
4018 NULL, /* 11.3.126 Exception Report Flag */
4019 NULL, /* 11.3.127 Old Routing Area Identification */
4020 NULL, /* 11.3.128 Attach Indicator */
4021 de_bssgp_plmn_id, /* 11.3.129 PLMN Identity */
4022 NULL, /* NONE */
4026 * 11.3.62a RIM Container
4027 * 11.3.62a.0 General
4028 * 11.3.62a.1 RAN-INFORMATION-REQUEST RIM Container
4030 static uint16_t
4031 de_bssgp_ran_inf_request_rim_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
4033 uint32_t curr_offset;
4034 uint32_t consumed;
4035 unsigned curr_len;
4037 curr_offset = offset;
4038 curr_len = len;
4040 /* RAN-INFORMATION-REQUEST RIM Container Contents coded as
4041 * defined in table 11.3.62a.1b
4043 /* RIM Application Identity RIM Application Identity/11.3.61 M TLV 3 */
4044 ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_APP_ID, BSSGP_PDU_TYPE, DE_BSSGP_RIM_APP_ID, NULL);
4045 /* RIM Sequence Number RIM Sequence Number/11.3.62 M TLV 6 */
4046 ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_SEQUENCE_NUMBER, BSSGP_PDU_TYPE, DE_BSSGP_RIM_SEQ_NO, NULL);
4047 /* RIM PDU Indications RIM PDU Indications/11.3.65 M TLV 3 */
4048 ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_PDU_INDICATIONS, BSSGP_PDU_TYPE, DE_BSSGP_RIM_PDU_INDICATIONS, NULL);
4049 /* RIM Protocol Version Number RIM Protocol Version Number/11.3.67 O TLV 3 */
4050 ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_RIM_PROTOCOL_VERSION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_PROTO_VER_NO, NULL);
4051 /* Application Container (note 1) RAN-INFORMATION-REQUEST Application Container/11.3.63.1 C TLV 4-? */
4052 ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_RAN_INF_REQUEST_APP_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_INFORMATION_REQUEST_APP_CONT, NULL);
4053 /* SON Transfer Application Identity (note 2) SON Transfer Application Identity/11.3.108 C TLV 3-m */
4054 ELEM_IN_ELEM_OPT_TELV(0x84, BSSGP_PDU_TYPE, DE_BSSGP_SON_TRANSFER_APP_ID, NULL);
4056 return curr_offset-offset;
4059 * 11.3.62a.2 RAN-INFORMATION RIM Container
4061 static uint16_t
4062 de_bssgp_ran_inf_rim_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
4064 uint32_t curr_offset;
4065 uint32_t consumed;
4066 unsigned curr_len;
4068 curr_offset = offset;
4069 curr_len = len;
4071 /* RAN-INFORMATION RIM Container Contents coded as
4072 * defined in table 11.3.62a.2b
4074 /* RIM Application Identity RIM Application Identity /11.3.61 M TLV 3 */
4075 ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_APP_ID, BSSGP_PDU_TYPE, DE_BSSGP_RIM_APP_ID, NULL);
4076 /* RIM Sequence Number RIM Sequence Number /11.3.62 M TLV 6 */
4077 ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_SEQUENCE_NUMBER, BSSGP_PDU_TYPE, DE_BSSGP_RIM_SEQ_NO, NULL);
4078 /* RIM PDU Indications RIM PDU Indications /11.3.65. M TLV 3 */
4079 ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_PDU_INDICATIONS, BSSGP_PDU_TYPE, DE_BSSGP_RIM_PDU_INDICATIONS, NULL);
4080 /* RIM Protocol Version Number RIM Protocol Version Number/11.3.67 O TLV 3 */
4081 ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_RIM_PROTOCOL_VERSION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_PROTO_VER_NO, NULL);
4082 /* Application Container (NOTE 1) RAN-INFORMATION Application Container /11.3.63.2 C (Note 1) TLV 4-? */
4083 ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_RAN_INF_APP_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_INFORMATION_APP_CONT_UNIT, NULL);
4084 /* Application Error Container (NOTE 1) Application Error Container/11.3.64 C (Note 1) TLV n */
4085 ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_APPLICATION_ERROR_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_APP_ERROR_CONT, NULL);
4086 /* SON Transfer Application Identity (note 2) SON Transfer Application Identity/11.3.108 C TLV 3-m */
4087 ELEM_IN_ELEM_OPT_TELV(0x84, BSSGP_PDU_TYPE, DE_BSSGP_SON_TRANSFER_APP_ID, NULL);
4089 return curr_offset-offset;
4093 * 11.3.62a.3 RAN-INFORMATION-ACK RIM Container
4095 static uint16_t
4096 de_bssgp_ran_inf_ack_rim_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
4098 uint32_t curr_offset;
4099 uint32_t consumed;
4100 unsigned curr_len;
4102 curr_offset = offset;
4103 curr_len = len;
4105 /* RAN-INFORMATION-ACK RIM Container Contents coded as
4106 * defined in table 11.3.62a.3b
4108 /* RIM Application Identity RIM Application Identity /11.3.61 M TLV 3 */
4109 ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_APP_ID, BSSGP_PDU_TYPE, DE_BSSGP_RIM_APP_ID, NULL);
4110 /* RIM Sequence Number RIM Sequence Number /11.3.62 M TLV 6 */
4111 ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_SEQUENCE_NUMBER, BSSGP_PDU_TYPE, DE_BSSGP_RIM_SEQ_NO, NULL);
4112 /* RIM Protocol Version Number RIM Protocol Version Number/11.3.67 O TLV 4 */
4113 ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_RIM_PROTOCOL_VERSION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_PROTO_VER_NO, NULL);
4114 /* SON Transfer Application Identity (note 1) SON Transfer Application Identity/11.3.108 C TLV 3-m */
4115 ELEM_IN_ELEM_OPT_TELV(0x84, BSSGP_PDU_TYPE, DE_BSSGP_SON_TRANSFER_APP_ID, NULL);
4117 return curr_offset-offset;
4120 * 11.3.62a.4 RAN-INFORMATION-ERROR RIM Container
4122 static uint16_t
4123 de_bssgp_ran_inf_error_rim_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
4125 uint32_t curr_offset;
4126 uint32_t consumed;
4127 unsigned curr_len;
4129 curr_offset = offset;
4130 curr_len = len;
4132 /* RAN-INFORMATION-ERROR RIM Container Contents coded as
4133 * defined in table 11.3.62a.4b
4135 /* RIM Application Identity RIM Application Identity /11.3.61 M TLV 3 */
4136 ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_APP_ID, BSSGP_PDU_TYPE, DE_BSSGP_RIM_APP_ID, NULL);
4137 /* RIM Cause Cause/11.3.8 M TLV 3 */
4138 ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, " - RIM");
4139 /* RIM Protocol Version Number RIM Protocol Version Number/11.3.67 O TLV 3 */
4140 ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_RIM_PROTOCOL_VERSION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_PROTO_VER_NO, NULL);
4141 /* PDU in Error PDU in Error/11.3.24 M TLV 3-? */
4142 ELEM_IN_ELEM_MAND_TELV(0x15, BSSGP_PDU_TYPE, DE_BSSGP_PDU_IN_ERROR , NULL);
4143 /* SON Transfer Application Identity (note 1) SON Transfer Application Identity/11.3.108 C TLV 3-m */
4144 ELEM_IN_ELEM_OPT_TELV(0x84, BSSGP_PDU_TYPE, DE_BSSGP_SON_TRANSFER_APP_ID, NULL);
4146 return curr_offset-offset;
4149 * 11.3.62a.5 RAN-INFORMATION-APPLICATION-ERROR RIM Container
4151 static uint16_t
4152 de_bssgp_ran_inf_app_error_rim_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
4154 uint32_t curr_offset;
4155 uint32_t consumed;
4156 unsigned curr_len;
4158 curr_offset = offset;
4159 curr_len = len;
4161 /* RRAN-INFORMATION-APPLICATION-ERROR RIM Container
4162 * Contents coded as defined in table 11.3.62a.5b
4164 /* RIM Application Identity RIM Application Identity /11.3.61 M TLV 3 */
4165 ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_APP_ID, BSSGP_PDU_TYPE, DE_BSSGP_RIM_APP_ID, NULL);
4166 /* RIM Sequence Number RIM Sequence Number /11.3.62 M TLV 6 */
4167 ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_SEQUENCE_NUMBER, BSSGP_PDU_TYPE, DE_BSSGP_RIM_SEQ_NO, NULL);
4168 /* RIM PDU Indications RIM PDU Indications /11.3.65. M TLV 3 */
4169 ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_PDU_INDICATIONS, BSSGP_PDU_TYPE, DE_BSSGP_RIM_PDU_INDICATIONS, NULL);
4170 /* RIM Protocol Version Number RIM Protocol Version Number/11.3.67 O TLV 3 */
4171 ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_RIM_PROTOCOL_VERSION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_PROTO_VER_NO, NULL);
4172 /* Application Error Container Application Error Container/11.3.64 M TLV n */
4173 ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_APPLICATION_ERROR_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_APP_ERROR_CONT, NULL);
4174 /* SON Transfer Application Identity (note 1) SON Transfer Application Identity/11.3.108 C TLV 3-m */
4175 ELEM_IN_ELEM_OPT_TELV(0x84, BSSGP_PDU_TYPE, DE_BSSGP_SON_TRANSFER_APP_ID, NULL);
4177 return curr_offset-offset;
4181 * 11.3.79 Source BSS to Target BSS Transparent Container
4183 uint16_t
4184 de_bssgp_source_BSS_to_target_BSS_transp_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
4186 uint32_t curr_offset;
4187 uint32_t consumed;
4188 unsigned curr_len;
4190 curr_offset = offset;
4191 curr_len = len;
4194 /* Octet 3-? Source BSS to Target BSS Transparent Container Contents coded
4195 * as defined in table 11.3.79.b
4197 /* MS Radio Access Capability MS Radio Access Capability/11.3.22 M TLV 7-? */
4198 ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_MS_RADIO_ACCESS_CAPABILITY, GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP , NULL);
4199 /* Inter RAT Handover Info Inter RAT Handover Info/11.3.94 O (note 1) TLV 3-? */
4200 ELEM_IN_ELEM_OPT_TELV(0x73, BSSGP_PDU_TYPE, DE_BSSGP_INTER_RAT_HO_INFO, NULL);
4201 /* Page Mode Page Mode/11.3.88 O (note 2, note 3) TLV 3 */
4202 ELEM_IN_ELEM_OPT_TELV(0x6d, BSSGP_PDU_TYPE, DE_BSSGP_PAGE_MODE, NULL);
4203 /* Container ID Container ID/11.3.89 O (note 2) TLV 3 */
4204 ELEM_IN_ELEM_OPT_TELV(0x6e, BSSGP_PDU_TYPE, DE_BSSGP_CONTAINER_ID, NULL);
4205 /* Global TFI Global TFI/11.3.90 O (note 2, note 3) TLV 3 */
4206 ELEM_IN_ELEM_OPT_TELV(0x6f, BSSGP_PDU_TYPE, DE_BSSGP_GLOBAL_TFI, NULL);
4207 /* PS Handover Indications PS Handover Indications/11.3.95a O TLV 3 */
4208 ELEM_IN_ELEM_OPT_TELV(0x75, BSSGP_PDU_TYPE, DE_BSSGP_PS_HO_INDICATIONS, NULL);
4209 /* CS Indication CS Indication/11.3.98 O (note 3) TLV 3 */
4210 ELEM_IN_ELEM_OPT_TELV(0x7a, BSSGP_PDU_TYPE, DE_BSSGP_CS_INDICATION, NULL);
4211 /* E-UTRAN Inter RAT Handover Info E-UTRAN Inter RAT HandoverInfo/11.3.104 O (note 1) TLV 3-? */
4212 ELEM_IN_ELEM_OPT_TELV(0x80, BSSGP_PDU_TYPE, DE_BSSGP_E_UTRAN_INTER_RAT_HO_INFO, NULL);
4214 return curr_offset-offset;
4218 * 11.3.80 Target BSS to Source BSS Transparent Container
4220 uint16_t
4221 de_bssgp_target_BSS_to_source_BSS_transp_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_)
4223 uint32_t curr_offset;
4224 uint32_t consumed;
4225 unsigned curr_len;
4227 curr_offset = offset;
4228 curr_len = len;
4231 /* Octet 3-? Target BSS to Source BSS Transparent Container Contents coded
4232 * as defined in table 11.3.80.b
4235 /* PS Handover Command PS Handover Command/11.3.95 O (Note 2) TLV 4-? */
4236 ELEM_IN_ELEM_OPT_TELV(0x74, BSSGP_PDU_TYPE, DE_BSSGP_PS_HO_CMD, NULL);
4237 /* SI/PSI Container SI/PSI Container/11.3.95b O (Note 1) TLV 3-? */
4238 ELEM_IN_ELEM_OPT_TELV(0x76, BSSGP_PDU_TYPE, DE_BSSGP_SIPSI_CONTAINER, NULL);
4239 /* DTM Handover Command DTM Handover Command/11.3.97 O (Note 2) TLV 22-? */
4240 ELEM_IN_ELEM_OPT_TELV(0x79, BSSGP_PDU_TYPE, DE_BSSGP_DTM_HO_CMD, NULL);
4242 return curr_offset-offset;
4245 /* MESSAGE FUNCTIONS */
4248 * 10.2 PDU functional definitions and contents at RL and BSSGP SAPs
4249 * 10.2.1 DL-UNITDATA
4251 static void
4252 bssgp_dl_unitdata(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
4254 uint32_t curr_offset;
4255 uint32_t consumed;
4256 unsigned curr_len;
4258 curr_offset = offset;
4259 curr_len = len;
4261 /* This PDU is sent to the BSS to transfer an LLC-PDU across the radio interface to an MS. */
4262 pinfo->link_dir = P2P_DIR_DL;
4264 /* TLLI (current) TLLI/11.3.35 M V 4 */
4265 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_TLLI, " - current", ei_bssgp_missing_mandatory_element);
4266 /* QoS Profile (note 1) QoS Profile/11.3.28 M V 3 */
4267 ELEM_MAND_V(BSSGP_PDU_TYPE, DE_BSSGP_QOS_PROFILE, NULL, ei_bssgp_missing_mandatory_element);
4269 /* PDU Lifetime PDU Lifetime/11.3.25 M TLV 4 */
4270 ELEM_MAND_TELV(0x16, BSSGP_PDU_TYPE, DE_BSSGP_PDU_LIFETIME, NULL, ei_bssgp_missing_mandatory_element);
4271 /* MS Radio Access Capability (note 2) MS Radio Access Capability/11.3.22 O TLV 7-? */
4272 ELEM_OPT_TELV(BSSGP_IEI_MS_RADIO_ACCESS_CAPABILITY, GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP , NULL);
4273 /* Priority (note 3) Priority/11.3.27 O TLV 3 */
4274 ELEM_OPT_TELV(0x17, GSM_A_PDU_TYPE_BSSMAP, BE_PRIO, NULL);
4275 /* DRX Parameters DRX Parameters/11.3.11 O TLV 4 */
4276 ELEM_OPT_TELV(0x0a , GSM_A_PDU_TYPE_GM, DE_DRX_PARAM , NULL);
4277 /* IMSI IMSI/11.3.14 O TLV 5-10 */
4278 ELEM_OPT_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI , NULL);
4279 /* TLLI (old) TLLI/11.3.35 O TLV 6 */
4280 ELEM_OPT_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , " - old");
4281 /* PFI PFI/11.3.42 O TLV 3 */
4282 ELEM_OPT_TELV( BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL);
4283 /* LSA Information LSA Information/11.3.19 O TLV 7-? */
4284 ELEM_OPT_TELV(0x27, GSM_A_PDU_TYPE_BSSMAP, BE_LSA_INFO, NULL);
4285 /* Service UTRAN CCO Service UTRAN CCO/11.3.47 O TLV 3 */
4286 ELEM_OPT_TELV(BSSGP_IEI_SERVICE_UTRAN_CCO, BSSGP_PDU_TYPE, DE_BSSGP_SERV_UTRAN_CCO, NULL);
4288 /* Subscriber Profile ID for RAT/Frequency priority (note 5)
4289 * Subscriber Profile ID for RAT/Frequency priority/11.3.105 O TLV 3
4291 ELEM_OPT_TELV(0x81, BSSGP_PDU_TYPE, DE_BSSGP_SUB_PROF_ID_F_RAT_FRQ_PRIO, NULL);
4292 /* Redirection Indication (note 6) Redirection Indication/11.3.112 O TLV 3 */
4293 ELEM_OPT_TELV(BSSGP_IEI_REDIR_INDICATION, BSSGP_PDU_TYPE, DE_BSSGP_REDIR_INDICATION, NULL);
4294 /* Redirection Completed (note 7) Redirection Completed/ 11.3.113 O TLV 3 */
4295 ELEM_OPT_TELV(BSSGP_IEI_REDIR_COMPLETE, BSSGP_PDU_TYPE, DE_BSSGP_REDIR_COMPLETE, NULL);
4296 /* Unconfirmed send state variable (note 9) Unconfirmed send state variable/11.3.114 C TLV 4 */
4297 ELEM_OPT_TELV(BSSGP_IEI_UNCONFIRM_SEND_STATE_VAR, BSSGP_PDU_TYPE, DE_BSSGP_UNCONFIRM_SEND_STATE_VAR, NULL);
4298 /* SCI (note 10) SCI/ 11.3.116 O TLV 3 */
4299 ELEM_OPT_TELV(BSSGP_IEI_SCI, BSSGP_PDU_TYPE, DE_BSSGP_SCI, NULL);
4300 /* GGSN/P-GW location (note 10) GGSN/P-GW location/11.3.117 O TLV 3 */
4301 ELEM_OPT_TELV(BSSGP_IEI_GGSN_PGW_LOCATION, BSSGP_PDU_TYPE, DE_BSSGP_GGSN_PGW_LOCATION, NULL);
4302 /* eDRX Parameters (note 11) eDRX Parameters/11.3.122 O TLV 3 */
4303 ELEM_OPT_TELV(BSSGP_IEI_EDRX_PARAMETERS, BSSGP_PDU_TYPE, DE_BSSGP_EDRX_PARAMS, NULL);
4304 /* Coverage Class Coverage Class/11.3.124 O TLV 3 */
4305 ELEM_OPT_TELV(BSSGP_IEI_COVERAGE_CLASS, BSSGP_PDU_TYPE, DE_BSSGP_COVERAGE_CLASS, NULL);
4306 /* Old Routing Area Identification (note 12) Old Routing Area Identification/11.3.127 O TLV 8 */
4307 ELEM_OPT_TELV(BSSGP_IEI_OLD_RA_IDENTIFICATION, GSM_A_PDU_TYPE_GM, DE_RAI, " - Old routing area identification");
4308 /* Attach Indicator(note 13) Attach Indicator / 11.3.128 O TLV 3 */
4309 ELEM_OPT_TELV(BSSGP_IEI_ATTACH_INDIC, BSSGP_PDU_TYPE, DE_BSSGP_ATTACH_INDIC, NULL);
4311 /* SGSN Group Identity (note 15) SGSN Group Identity/11.3.131 C TLV 5 */
4312 /* Additional P-TMSI (note 15) Additional P-TMSI/11.3.132 C TLV 6 */
4313 /* UE Usage Type (note 15) UE Usage Type/11.3.133 C TLV 3 */
4315 /* Alignment octets Alignment octets/11.3.1 O TLV 2-5 */
4316 ELEM_OPT_TELV(0x00, BSSGP_PDU_TYPE, DE_BSSGP_ALIGNMENT_OCTETS, NULL);
4317 /* LLC-PDU (note 4) LLC-PDU/11.3.15 M TLV 2-? */
4318 ELEM_MAND_TELV(0x0e, BSSGP_PDU_TYPE, DE_BSSGP_LLC_PDU, NULL, ei_bssgp_missing_mandatory_element);
4319 /* Initial LLC-PDU (note 8) LLC-PDU/11.3.15 O TLV 2-? */
4320 ELEM_OPT_TELV(0x0e, BSSGP_PDU_TYPE, DE_BSSGP_LLC_PDU, " - initial");
4321 /* Timing Advance Request Timing Advance Request/11.3.140 O TLV 3 */
4322 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
4325 * 10.2.2 UL-UNITDATA
4326 * Updated to 3GPP TS 48.018 version 11.3.0 Release 11
4328 static void
4329 bssgp_ul_unitdata(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
4331 uint32_t curr_offset;
4332 uint32_t consumed;
4333 unsigned curr_len;
4335 curr_offset = offset;
4336 curr_len = len;
4338 /* This PDU transfers an MS's LLC-PDU and its associated radio interface information across the Gb-interface.
4339 * Direction: BSS to SGSN
4341 pinfo->link_dir = P2P_DIR_UL;
4342 /* TLLI TLLI/11.3.35 M V 4 */
4343 ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
4344 /* QoS Profile QoS Profile/11.3.28 M V 3 */
4345 ELEM_MAND_V(BSSGP_PDU_TYPE, DE_BSSGP_QOS_PROFILE, NULL, ei_bssgp_missing_mandatory_element);
4346 /* Cell Identifier Cell Identifier/11.3.9 M TLV 10 */
4347 ELEM_OPT_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , NULL);
4348 /* PFI PFI/11.3.42 O TLV 3 */
4349 ELEM_OPT_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL);
4350 /* LSA Identifier List LSA Identifier List/11.3.18 O TLV 3-? */
4351 ELEM_OPT_TELV(0x26, GSM_A_PDU_TYPE_BSSMAP, BE_LSA_ID_LIST, NULL);
4352 /* Redirect Attempt Flag (Note 3) Redirect Attempt Flag/11.3.111 O TLV 3 */
4353 ELEM_OPT_TELV(BSSGP_IEI_REDIR_ATTEMP_FLG, BSSGP_PDU_TYPE, DE_BSSGP_REDIR_ATTEMPT_FLG, NULL);
4354 /* IMSI (note 2) IMSI/11.3.14 O TLV 5-10 */
4355 ELEM_OPT_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI , NULL);
4356 /* Unconfirmed send state variable (note 4) Unconfirmed send state variable/11.3.114 O TLV 4 */
4357 ELEM_OPT_TELV(BSSGP_IEI_UNCONFIRM_SEND_STATE_VAR, BSSGP_PDU_TYPE, DE_BSSGP_UNCONFIRM_SEND_STATE_VAR, NULL);
4358 /* Selected PLMN ID (note 5) Selected PLMN ID/11.3.118 O TLV 5 */
4359 ELEM_OPT_TELV(BSSGP_IEI_SELECTED_PLMN_ID, BSSGP_PDU_TYPE, DE_BSSGP_PLMN_ID, " - Selected PLMN ID");
4360 /* Coverage Class Coverage Class/11.3.124 O TLV 3 */
4361 ELEM_OPT_TELV(BSSGP_IEI_COVERAGE_CLASS, BSSGP_PDU_TYPE, DE_BSSGP_COVERAGE_CLASS, NULL);
4362 /* Exception Report Flag(note 6) Exception Report Flag / 11.3.126 O TLV 3 */
4363 ELEM_OPT_TELV(BSSGP_IEI_EXCEPTION_REPORT_FLAG, BSSGP_PDU_TYPE, DE_BSSGP_EXCEPTION_REPORT_FLAG, NULL);
4364 /* Selected Operator(note 8, 9) PLMN Identity / 11.3.129 O TLV 5 */
4365 ELEM_OPT_TELV(BSSGP_IEI_PLMN_ID, BSSGP_PDU_TYPE, DE_BSSGP_PLMN_ID, " - Selected Operator");
4366 /* CS Registered Operator(note 8, 10) PLMN Identity / 11.3.129 O TLV 5 */
4367 ELEM_OPT_TELV(BSSGP_IEI_PLMN_ID, BSSGP_PDU_TYPE, DE_BSSGP_PLMN_ID, " - CS Registered Operator");
4369 /* SGSN Group Identity (note 11) SGSN Group Identity /11.3.131 O TLV 5 */
4370 /* UE Usage Type (note 11) UE Usage Type/11.3.133 O TLV 3 */
4372 /* Alignment octets Alignment octets/11.3.1 O TLV 2-5 */
4373 ELEM_OPT_TELV(0x00, BSSGP_PDU_TYPE, DE_BSSGP_ALIGNMENT_OCTETS, NULL);
4374 /* LLC-PDU (note) LLC-PDU/11.3.15 M TLV 2-? */
4375 ELEM_MAND_TELV(0x0e, BSSGP_PDU_TYPE, DE_BSSGP_LLC_PDU, NULL, ei_bssgp_missing_mandatory_element);
4376 /* MultilaterationTiming Advance (note 13) MultilaterationTiming Advance/11.3.137 O TLV 4 */
4377 /* MS Sync Accuracy (note 13) MS Sync Accuracy/11.3.138 O TLV 3 */
4378 /* BTS Reception Accuracy Level (note 13) BTS Reception Accuracy Level/11.3.139 O TLV 3 */
4379 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
4382 * 10.2.3 RA-CAPABILITY
4384 static void
4385 bssgp_ra_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
4387 uint32_t curr_offset;
4388 uint32_t consumed;
4389 unsigned curr_len;
4391 curr_offset = offset;
4392 curr_len = len;
4394 /* This PDU informs the BSS of the new Radio Access Capability of an MS. */
4395 pinfo->link_dir = P2P_DIR_UL;
4397 /* TLLI TLLI/11.3.35 M TLV 6 */
4398 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
4399 /* MS Radio Access Capability MS Radio Access Capability/11.3.22 M TLV 7-? */
4400 ELEM_MAND_TELV(BSSGP_IEI_MS_RADIO_ACCESS_CAPABILITY, GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP, NULL, ei_bssgp_missing_mandatory_element);
4402 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
4406 * 10.2.4 (void)
4409 * 10.2.5 DL-MBMS-UNITDATA
4411 static void
4412 bssgp_dl_mbms_unitdata(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
4414 uint32_t curr_offset;
4415 uint32_t consumed;
4416 unsigned curr_len;
4418 curr_offset = offset;
4419 curr_len = len;
4421 /* This PDU is sent to the BSS to transfer an LLC-PDU across the radio interface.
4422 * Direction: SGSN to BSS
4424 pinfo->link_dir = P2P_DIR_DL;
4426 /* PDU Lifetime PDU Lifetime/11.3.25 M TLV 4 */
4427 ELEM_MAND_TELV(0x16, BSSGP_PDU_TYPE, DE_BSSGP_PDU_LIFETIME, NULL, ei_bssgp_missing_mandatory_element);
4428 /* TMGI TMGI/ 11.3.77 M TLV 3-8 */
4429 ELEM_MAND_TELV(0x5c, GSM_A_PDU_TYPE_GM, DE_TMGI, NULL, ei_bssgp_missing_mandatory_element);
4430 /* MBMS Session Identity MBMS Session Identity/ 11.3.71 O TLV 3 */
4431 ELEM_OPT_TELV(0x5d, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_ID, NULL);
4432 /* Alignment octets Alignment octets/11.3.1 O TLV 2-5 */
4433 ELEM_OPT_TELV(0x00, BSSGP_PDU_TYPE, DE_BSSGP_ALIGNMENT_OCTETS, NULL);
4434 /* LLC-PDU LLC-PDU/11.3.15 M TLV 3-? */
4435 ELEM_MAND_TELV(0x0e, BSSGP_PDU_TYPE, DE_BSSGP_LLC_PDU, NULL, ei_bssgp_missing_mandatory_element);
4438 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
4442 * 10.2.6 UL-MBMS-UNITDATA
4444 static void
4445 bssgp_ul_mbms_unitdata(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
4447 uint32_t curr_offset;
4448 uint32_t consumed;
4449 unsigned curr_len;
4451 curr_offset = offset;
4452 curr_len = len;
4454 /* This PDU transfers an LLC-PDU for an MBMS session across the Gb-interface.
4455 * Direction: BSS to SGSN */
4456 pinfo->link_dir = P2P_DIR_UL;
4458 /* TMGI TMGI/ 11.3.77 M TLV 3-8 */
4459 ELEM_MAND_TELV(0x5c, GSM_A_PDU_TYPE_GM, DE_TMGI, NULL, ei_bssgp_missing_mandatory_element);
4460 /* MBMS Session Identity MBMS Session Identity/ 11.3.71 O TLV 3 */
4461 ELEM_OPT_TELV(0x5d, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_ID, NULL);
4462 /* Alignment octets Alignment octets/11.3.1 O TLV 2-5 */
4463 ELEM_OPT_TELV(0x00, BSSGP_PDU_TYPE, DE_BSSGP_ALIGNMENT_OCTETS, NULL);
4464 /* LLC-PDU (note 1) LLC-PDU/11.3.15 M TLV 2-? */
4465 ELEM_MAND_TELV(0x0e, BSSGP_PDU_TYPE, DE_BSSGP_LLC_PDU, NULL, ei_bssgp_missing_mandatory_element);
4467 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
4471 * 10.3 PDU functional definitions and contents at GMM SAP
4472 * 10.3.1 PAGING PS
4475 static void
4476 bssgp_paging_ps(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
4478 uint32_t curr_offset;
4479 uint32_t consumed;
4480 unsigned curr_len;
4482 curr_offset = offset;
4483 curr_len = len;
4484 /* This PDU indicates that a BSS shall initiate the packet paging procedure for an MS within a group of cells.
4485 * Direction: SGSN to BSS */
4486 pinfo->link_dir = P2P_DIR_DL;
4488 /* IMSI IMSI/11.3.14 M TLV 5 -10 */
4489 ELEM_MAND_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI, NULL, ei_bssgp_missing_mandatory_element);
4490 /* DRX Parameters DRX Parameters/11.3.11 O TLV 4 */
4491 ELEM_OPT_TELV(0x0a , GSM_A_PDU_TYPE_GM, DE_DRX_PARAM , NULL);
4492 /* BVCI a) BVCI/11.3.6 C TLV 4 */
4493 ELEM_OPT_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , NULL);
4494 /* Location Area (note) Location Area/11.3.17 C TLV 7 */
4495 ELEM_OPT_TELV(0x10,GSM_A_PDU_TYPE_COMMON, DE_LAI, NULL);
4496 /* Routeing Area (note) Routeing Area/11.3.31 C TLV 8 */
4497 ELEM_OPT_TELV(0x1b,GSM_A_PDU_TYPE_GM, DE_RAI, NULL);
4498 /* BSS Area Indication (note) BSS Area Indication/11.3.3 C TLV 3 */
4499 ELEM_OPT_TELV(0x02,BSSGP_PDU_TYPE, DE_BSSGP_BSS_AREA_IND, NULL);
4500 /* PFI PFI/11.3.42 O TLV 3 */
4501 ELEM_OPT_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL);
4502 /* ABQP ABQP/11.3.43 O TLV 13-? */
4503 ELEM_OPT_TELV(0x3a , GSM_A_PDU_TYPE_GM, DE_QOS , NULL);
4504 /* QoS Profile QoS Profile/11.3.28 M TLV 5 */
4505 ELEM_MAND_TELV(0x18,BSSGP_PDU_TYPE, DE_BSSGP_QOS_PROFILE, NULL, ei_bssgp_missing_mandatory_element);
4506 /* P-TMSI TMSI/11.3.36 O TLV 6 */
4507 ELEM_OPT_TELV(BSSGP_IEI_TMSI,GSM_A_PDU_TYPE_RR, DE_RR_TMSI_PTMSI, NULL);
4508 /* eDRX Parameters (note 11) eDRX Parameters/11.3.122 O TLV 3 */
4509 ELEM_OPT_TELV(BSSGP_IEI_EDRX_PARAMETERS, BSSGP_PDU_TYPE, DE_BSSGP_EDRX_PARAMS, NULL);
4510 /* Coverage Class Coverage Class/11.3.124 O TLV 3 */
4511 ELEM_OPT_TELV(BSSGP_IEI_COVERAGE_CLASS, BSSGP_PDU_TYPE, DE_BSSGP_COVERAGE_CLASS, NULL);
4512 /* Cell Identifier (note 4) Cell Identifier/11.3.9 O TLV 10 */
4513 ELEM_OPT_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID, NULL);
4514 /* MS Radio Access Capability (note 5) MS Radio Access Capability/11.3.22 O TLV 7-? */
4515 ELEM_OPT_TELV(BSSGP_IEI_MS_RADIO_ACCESS_CAPABILITY, GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP, NULL);
4516 /* Paging Attempt Information (note 6) Paging Attempt Information/11.3.125 O TLV 3 */
4517 ELEM_OPT_TELV(BSSGP_IEI_PAG_ATTEMPT_INFO, BSSGP_PDU_TYPE, DE_BSSGP_PAG_ATTEMPT_INFO, NULL);
4519 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
4523 * 10.3.2 PAGING CS
4525 static void
4526 bssgp_paging_cs(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
4528 uint32_t curr_offset;
4529 uint32_t consumed;
4530 unsigned curr_len;
4532 curr_offset = offset;
4533 curr_len = len;
4534 /* This PDU indicates that a BSS shall initiate a circuit-switched paging procedure for an MS within a group of cells.
4535 * Direction: SGSN to BSS
4537 pinfo->link_dir = P2P_DIR_DL;
4538 /* IMSI IMSI/11.3.14 M TLV 5 -10 */
4539 ELEM_MAND_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI, NULL, ei_bssgp_missing_mandatory_element);
4540 /* DRX Parameters DRX Parameters/11.3.11 M TLV 4 */
4541 ELEM_MAND_TELV(0x0a , GSM_A_PDU_TYPE_GM, DE_DRX_PARAM, NULL, ei_bssgp_missing_mandatory_element);
4542 /* BVCI a) BVCI/11.3.6 C TLV 4 */
4543 ELEM_OPT_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , NULL);
4544 /* Location Area (note 1) Location Area/11.3.17 C TLV 7 */
4545 ELEM_OPT_TELV(0x10,GSM_A_PDU_TYPE_COMMON, DE_LAI, NULL);
4546 /* Routeing Area (note 1) Routeing Area/11.3.31 C TLV 8 */
4547 ELEM_OPT_TELV(0x1b,GSM_A_PDU_TYPE_GM, DE_RAI, NULL);
4548 /* BSS Area Indication (note 1) BSS Area Indication/11.3.3 C TLV 3 */
4549 ELEM_OPT_TELV(0x02,BSSGP_PDU_TYPE, DE_BSSGP_BSS_AREA_IND, NULL);
4550 /* TLLI TLLI/11.3.35 O TLV 6 */
4551 ELEM_OPT_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL);
4552 /* Channel needed (note 2) Channel needed/11.3.10 O TLV 3 */
4553 ELEM_OPT_TELV(0x09, BSSGP_PDU_TYPE, DE_BSSGP_CHLN_NEEDED , NULL);
4554 /* eMLPP-Priority (note 2) eMLPP-Priority/11.3.12 O TLV 3 */
4555 ELEM_OPT_TELV(0x0b, GSM_A_PDU_TYPE_BSSMAP, BE_EMLPP_PRIO, NULL);
4556 /* TMSI (note 2) TMSI/11.3.36 O TLV 6 */
4557 ELEM_OPT_TELV(BSSGP_IEI_TMSI,GSM_A_PDU_TYPE_RR, DE_RR_TMSI_PTMSI, NULL);
4558 /* Global CN-Id (note 2) Global CN-Id/11.3.69 O TLV 7 */
4559 ELEM_OPT_TELV(0x53, SGSAP_PDU_TYPE, DE_SGSAP_GLOBAL_CN_ID, NULL);
4561 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
4565 * 10.3.3 RA-CAPABILITY-UPDATE
4567 static void
4568 bssgp_ra_cap_upd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
4570 uint32_t curr_offset;
4571 uint32_t consumed;
4572 unsigned curr_len;
4574 curr_offset = offset;
4575 curr_len = len;
4576 /* This PDU requests that the SGSN send an MS's current Radio Access capability or IMSI to the BSS. */
4577 /* Direction: BSS to SGSN */
4578 pinfo->link_dir = P2P_DIR_UL;
4580 /* TLLI TLLI/11.3.35 M TLV 6 */
4581 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
4582 /* Tag Tag/11.3.34 M TLV 3 */
4583 ELEM_MAND_TELV(BSSGP_IEI_TAG, BSSGP_PDU_TYPE, DE_BSSGP_TAG, NULL, ei_bssgp_missing_mandatory_element);
4585 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
4589 * 10.3.4 RA-CAPABILITY-UPDATE-ACK
4592 static void
4593 bssgp_ra_cap_upd_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
4595 uint32_t curr_offset;
4596 uint32_t consumed;
4597 unsigned curr_len;
4599 curr_offset = offset;
4600 curr_len = len;
4601 /* This PDU provides the BSS with an MS's current Radio Access capability and IMSI */
4602 /* Direction: SGSN to BSS */
4603 pinfo->link_dir = P2P_DIR_DL;
4605 /* TLLI TLLI/11.3.35 M TLV 6 */
4606 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
4607 /* Tag Tag/11.3.34 M TLV 3 */
4608 ELEM_MAND_TELV(BSSGP_IEI_TAG, BSSGP_PDU_TYPE, DE_BSSGP_TAG, NULL, ei_bssgp_missing_mandatory_element);
4609 /* IMSI (note) IMSI/11.3.14 C TLV 5 -10 */
4610 ELEM_OPT_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI , NULL);
4611 /* RA-Cap-UPD-CAUSE RA-Cap-UPDCAUSE/11.3.30 M TLV 3 */
4612 ELEM_OPT_TELV(BSSGP_IEI_RA_CAP_UPD_CAUSE, BSSGP_PDU_TYPE, DE_BSSGP_RA_CAP_UPD_CAUSE , NULL);
4613 /* MS Radio Access Capability MS Radio Access Capability/11.3.22 C TLV 7-? */
4614 ELEM_OPT_TELV(BSSGP_IEI_MS_RADIO_ACCESS_CAPABILITY, GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP , NULL);
4616 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
4620 * 10.3.5 RADIO-STATUS
4622 static void
4623 bssgp_ra_status(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
4625 uint32_t curr_offset;
4626 uint32_t consumed;
4627 unsigned curr_len;
4629 curr_offset = offset;
4630 curr_len = len;
4632 /* This PDU indicates that an exception condition related to the radio interface has occurred. */
4633 /* BSS to SGSN */
4634 pinfo->link_dir = P2P_DIR_UL;
4636 /* TLLI (note) TLLI/11.3.35 C TLV 6 */
4637 ELEM_OPT_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI , NULL);
4638 /* TMSI (note) TMSI/11.3.36 C TLV 6 */
4639 ELEM_OPT_TELV(BSSGP_IEI_TMSI,GSM_A_PDU_TYPE_RR, DE_RR_TMSI_PTMSI, NULL);
4640 /* IMSI (note) IMSI/11.3.14 C TLV 5-10 */
4641 ELEM_OPT_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI , NULL);
4642 /* Radio Cause Radio Cause/11.3.29 M TLV 3 */
4643 ELEM_MAND_TELV(BSSGP_IEI_RADIO_CAUSE, BSSGP_PDU_TYPE, DE_BSSGP_RA_CAUSE, NULL, ei_bssgp_missing_mandatory_element);
4645 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
4648 * 10.3.6 SUSPEND
4650 static void
4651 bssgp_suspend(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
4653 uint32_t curr_offset;
4654 uint32_t consumed;
4655 unsigned curr_len;
4657 curr_offset = offset;
4658 curr_len = len;
4660 /* This PDU indicates that an MS wishes to suspend its GPRS service. */
4661 /* Direction: BSS to SGSN */
4662 pinfo->link_dir = P2P_DIR_UL;
4664 /* TLLI TLLI/11.3.35 M TLV 6 */
4665 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
4666 /* Routeing Area Routeing Area/11.3.31 M TLV 8 */
4667 ELEM_MAND_TELV(0x1b,GSM_A_PDU_TYPE_GM, DE_RAI, NULL, ei_bssgp_missing_mandatory_element);
4669 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
4672 * 10.3.7 SUSPEND-ACK
4674 void
4675 bssgp_suspend_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
4677 uint32_t curr_offset;
4678 uint32_t consumed;
4679 unsigned curr_len;
4681 curr_offset = offset;
4682 curr_len = len;
4684 /* This PDU positively acknowledges the reception of a SUSPEND PDU for an MS. */
4685 /* Direction: SGSN to BSS */
4686 pinfo->link_dir = P2P_DIR_DL;
4688 /* TLLI TLLI/11.3.35 M TLV 6 */
4689 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
4690 /* Routeing Area Routeing Area/11.3.31 M TLV 8 */
4691 ELEM_MAND_TELV(0x1b,GSM_A_PDU_TYPE_GM, DE_RAI, NULL, ei_bssgp_missing_mandatory_element);
4692 /* Suspend Reference Number Suspend Reference Number/11.3.33 M TLV 3 */
4693 ELEM_MAND_TELV(0x1d,BSSGP_PDU_TYPE, DE_BSSGP_SUSPEND_REF_NO, NULL, ei_bssgp_missing_mandatory_element);
4696 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
4699 * 10.3.8 SUSPEND-NACK
4701 static void
4702 bssgp_suspend_nack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
4704 uint32_t curr_offset;
4705 uint32_t consumed;
4706 unsigned curr_len;
4708 curr_offset = offset;
4709 curr_len = len;
4712 /* This PDU negatively acknowledges the reception of a SUSPEND PDU for an MS. */
4713 /* Direction: SGSN to BSS */
4714 pinfo->link_dir = P2P_DIR_DL;
4716 /* TLLI TLLI/11.3.35 M TLV 6 */
4717 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
4718 /* Routeing Area Routeing Area/11.3.31 M TLV 8 */
4719 ELEM_MAND_TELV(0x1b,GSM_A_PDU_TYPE_GM, DE_RAI, NULL, ei_bssgp_missing_mandatory_element);
4720 /* Cause Cause/11.3.8 O TLV 3 */
4721 ELEM_OPT_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL);
4723 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
4726 * 10.3.9 RESUME
4728 static void
4729 bssgp_resume(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
4731 uint32_t curr_offset;
4732 uint32_t consumed;
4733 unsigned curr_len;
4735 curr_offset = offset;
4736 curr_len = len;
4738 /* This PDU indicates that an MS wishes to RESUME its GPRS service. */
4739 /* Direction: BSS to SGSN */
4740 pinfo->link_dir = P2P_DIR_UL;
4742 /* TLLI TLLI/11.3.35 M TLV 6 */
4743 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
4744 /* Routeing Area Routeing Area/11.3.31 M TLV 8 */
4745 ELEM_MAND_TELV(0x1b,GSM_A_PDU_TYPE_GM, DE_RAI, NULL, ei_bssgp_missing_mandatory_element);
4746 /* Suspend Reference Number Suspend Reference Number/11.3.33 M TLV 3 */
4747 ELEM_MAND_TELV(0x1d,BSSGP_PDU_TYPE, DE_BSSGP_SUSPEND_REF_NO, NULL, ei_bssgp_missing_mandatory_element);
4749 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
4752 * 10.3.10 RESUME-ACK
4755 static void
4756 bssgp_resume_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
4758 uint32_t curr_offset;
4759 uint32_t consumed;
4760 unsigned curr_len;
4762 curr_offset = offset;
4763 curr_len = len;
4765 /* This PDU positively acknowledges the reception of a RESUME PDU for an MS. */
4766 /* Direction: SGSN to BSS */
4767 pinfo->link_dir = P2P_DIR_DL;
4769 /* TLLI TLLI/11.3.35 M TLV 6 */
4770 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
4771 /* Routeing Area Routeing Area/11.3.31 M TLV 8 */
4772 ELEM_MAND_TELV(0x1b,GSM_A_PDU_TYPE_GM, DE_RAI, NULL, ei_bssgp_missing_mandatory_element);
4774 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
4777 * 10.3.11 RESUME-NACK
4780 static void
4781 bssgp_resume_nack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
4783 uint32_t curr_offset;
4784 uint32_t consumed;
4785 unsigned curr_len;
4787 curr_offset = offset;
4788 curr_len = len;
4790 /* This PDU negatively acknowledges the reception of a RESUME PDU for an MS. */
4791 /* Direction: SGSN to BSS */
4792 pinfo->link_dir = P2P_DIR_DL;
4794 /* TLLI TLLI/11.3.35 M TLV 6 */
4795 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
4796 /* Routeing Area Routeing Area/11.3.31 M TLV 8 */
4797 ELEM_MAND_TELV(0x1b,GSM_A_PDU_TYPE_GM, DE_RAI, NULL, ei_bssgp_missing_mandatory_element);
4798 /* Cause Cause/11.3.8 O TLV 3 */
4799 ELEM_OPT_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL);
4801 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
4806 * 10.3.12 DUMMY PAGING PS
4809 static void
4810 bssgp_dummy_paging_ps(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
4812 uint32_t curr_offset;
4813 uint32_t consumed;
4814 unsigned curr_len;
4816 curr_offset = offset;
4817 curr_len = len;
4818 /* This PDU indicates that a BSS shall calculate the time until the next paging occasion for the MS indicated in the message.
4819 * Direction: SGSN to BSS
4821 pinfo->link_dir = P2P_DIR_DL;
4823 /* IMSI IMSI/11.3.14 M TLV 5 -10 */
4824 ELEM_MAND_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI, NULL, ei_bssgp_missing_mandatory_element);
4825 /* Routeing Area (note) Routeing Area/11.3.31 C TLV 8 */
4826 ELEM_OPT_TELV(0x1b, GSM_A_PDU_TYPE_GM, DE_RAI, NULL);
4827 /* eDRX Parameters (note 11) eDRX Parameters/11.3.122 O TLV 3 */
4828 ELEM_OPT_TELV(BSSGP_IEI_EDRX_PARAMETERS, BSSGP_PDU_TYPE, DE_BSSGP_EDRX_PARAMS, NULL);
4830 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
4834 * 10.3.13 DUMMY PAGING PS RESPONSE
4837 static void
4838 bssgp_dummy_paging_ps_response(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
4840 uint32_t curr_offset;
4841 uint32_t consumed;
4842 unsigned curr_len;
4844 curr_offset = offset;
4845 curr_len = len;
4846 /* This PDU provides the SGSNwith the time until the next paging occasion for the MS indicated in the message.
4847 * Direction: BSS to SGSN
4849 pinfo->link_dir = P2P_DIR_UL;
4851 /* IMSI IMSI/11.3.14 M TLV 5-10 */
4852 ELEM_MAND_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI, NULL, ei_bssgp_missing_mandatory_element);
4853 /* Time Until Next Paging Occasion Time Until Next Paging Occasion/11.3.123 M TLV 3 */
4854 ELEM_MAND_TELV(BSSGP_IEI_TUNPO, BSSGP_PDU_TYPE, DE_BSSGP_TUNPO, NULL, ei_bssgp_missing_mandatory_element);
4856 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
4860 * 10.3.14 PAGING PS REJECT
4863 static void
4864 bssgp_paging_ps_reject(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
4866 uint32_t curr_offset;
4867 uint32_t consumed;
4868 unsigned curr_len;
4870 curr_offset = offset;
4871 curr_len = len;
4872 /* This PDU indicates that a BSS has determined the nominal paging group of the MS occurs too far into the future.
4873 * Direction: BSS to SGSN
4876 pinfo->link_dir = P2P_DIR_UL;
4878 /* IMSI IMSI/11.3.14 M TLV 5 -10 */
4879 ELEM_MAND_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI, NULL, ei_bssgp_missing_mandatory_element);
4880 /* P-TMSI (note 1) TMSI/11.3.36 O TLV 6 */
4881 ELEM_OPT_TELV(BSSGP_IEI_TMSI, GSM_A_PDU_TYPE_RR, DE_RR_TMSI_PTMSI, NULL);
4882 /* Time Until Next Paging Occasion Time Until Next Paging Occasion/11.3.123 M TLV 3 */
4883 ELEM_MAND_TELV(BSSGP_IEI_TUNPO, BSSGP_PDU_TYPE, DE_BSSGP_TUNPO, NULL, ei_bssgp_missing_mandatory_element);
4885 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
4889 * 10.3.15 MS REGISTRATION ENQUIRY
4892 /* IMSI IMSI/11.3.14 M TLV 5-10 */
4893 /* MME Query MME Query/11.3.130 O TLV 3 */
4896 *10.3.16 MS REGISTRATION ENQUIRY RESPONSE
4899 /* IMSI IMSI/11.3.14 M TLV 5-10 */
4900 /* PS Registered Operator (note 1) PLMN Identity/11.3.129 O TLV 5 */
4902 * 10.4 PDU functional definitions and contents at NM SAP
4903 * 10.4.1 FLUSH-LL
4905 static void
4906 bssgp_flush_ll(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
4908 uint32_t curr_offset;
4909 uint32_t consumed;
4910 unsigned curr_len;
4912 curr_offset = offset;
4913 curr_len = len;
4915 /* This PDU informs a BSS that an MS has moved from one cell to another. */
4916 /* Direction: SGSN to BSS */
4917 pinfo->link_dir = P2P_DIR_DL;
4919 /* TLLI TLLI/11.3.35 M TLV 6 */
4920 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
4921 /* BVCI (old) BVCI/11.3.6 M TLV 4 */
4922 ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI, " - Old", ei_bssgp_missing_mandatory_element);
4923 /* BVCI (new) BVCI/11.3.6 O TLV 4 */
4924 ELEM_OPT_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , " - New");
4925 /* NSEI (new) NSEI/11.3.48 O (note) TLV 4 */
4926 ELEM_OPT_TELV(0x3e, GSM_A_PDU_TYPE_RR, DE_BSSGP_NSEI , " - New");
4928 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
4931 * 10.4.2 FLUSH-LL-ACK
4933 static void
4934 bssgp_flush_ll_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
4936 uint32_t curr_offset;
4937 uint32_t consumed;
4938 unsigned curr_len;
4940 curr_offset = offset;
4941 curr_len = len;
4943 /* This PDU indicates that LLC-PDU(s) buffered for an MS in the old cell
4944 * have been either deleted or transferred to the new cell within the routing area. */
4945 /* Direction: BSS to SGSN */
4946 pinfo->link_dir = P2P_DIR_UL;
4948 /* TLLI TLLI/11.3.35 M TLV 6 */
4949 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
4950 /* Flush Action Flush Action/11.3.13 M TLV 3 */
4951 ELEM_MAND_TELV(0x0c, BSSGP_PDU_TYPE, DE_BSSGP_FLUSH_ACTION, NULL, ei_bssgp_missing_mandatory_element);
4952 /* BVCI (new) BVCI/11.3.13 C (note 1) TLV 4 */
4953 ELEM_OPT_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , " - New");
4954 /* Number of octets affected Number of octets affected/11.3.41 M TLV 5 */
4955 ELEM_MAND_TELV(BSSGP_IEI_NUMBER_OF_OCTETS_AFFECTED, BSSGP_PDU_TYPE, DE_BSSGP_NO_OF_OCT_AFFECTED, NULL, ei_bssgp_missing_mandatory_element);
4956 /* NSEI (new) NSEI/11.3.48 C (note 2) TLV 4 */
4957 ELEM_OPT_TELV(0x3e, GSM_A_PDU_TYPE_RR, DE_BSSGP_NSEI , " - New");
4960 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
4963 * 10.4.3 LLC-DISCARDED
4965 static void
4966 bssgp_llc_discarded(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
4968 uint32_t curr_offset;
4969 uint32_t consumed;
4970 unsigned curr_len;
4972 curr_offset = offset;
4973 curr_len = len;
4975 /* Direction: BSS to SGSN */
4976 pinfo->link_dir = P2P_DIR_UL;
4978 /* TLLI TLLI/11.3.35 M TLV 6 */
4979 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
4980 /* LLC Frames Discarded LLC Frames Discarded/11.3.16 M TLV 3 */
4981 ELEM_MAND_TELV(BSSGP_IEI_LLC_FRAMES_DISCARDED, BSSGP_PDU_TYPE, DE_BSSGP_LLC_FRAMES_DISC, NULL, ei_bssgp_missing_mandatory_element);
4982 /* BVCI BVCI/11.3.6 M TLV 4 */
4983 ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI, NULL, ei_bssgp_missing_mandatory_element);
4984 /* Number of octets deleted Number of octets affected/11.3.41 M TLV 5 */
4985 ELEM_MAND_TELV(BSSGP_IEI_NUMBER_OF_OCTETS_AFFECTED, BSSGP_PDU_TYPE, DE_BSSGP_NO_OF_OCT_AFFECTED, NULL, ei_bssgp_missing_mandatory_element);
4986 /* PFI (note) PFI/11.3.42 O TLV 3 */
4987 ELEM_OPT_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL);
4989 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
4993 * 10.4.4 FLOW-CONTROL-BVC
4995 static void
4996 bssgp_flow_control_bvc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
4998 uint32_t curr_offset;
4999 uint32_t consumed;
5000 unsigned curr_len;
5002 curr_offset = offset;
5003 curr_len = len;
5005 /* This PDU informs the flow control mechanism at an SGSN of the status of a
5006 * BVC's maximum acceptable SGSN to BSS throughput on the Gb interface.
5008 /* Direction: BSS to SGSN */
5009 pinfo->link_dir = P2P_DIR_UL;
5011 /* Tag Tag/11.3.34 M TLV 3 */
5012 ELEM_MAND_TELV(BSSGP_IEI_TAG, BSSGP_PDU_TYPE, DE_BSSGP_TAG, NULL, ei_bssgp_missing_mandatory_element);
5013 /* BVC Bucket Size BVC Bucket Size/11.3.5 M TLV 4 */
5014 ELEM_MAND_TELV(0x05, BSSGP_PDU_TYPE, DE_BSSGP_BVC_BUCKET_SIZE, NULL, ei_bssgp_missing_mandatory_element);
5015 /* Bucket Leak Rate Bucket Leak Rate/11.3.4 M TLV 4 */
5016 ELEM_MAND_TELV(BSSGP_IEI_BUCKET_LEAK_RATE, BSSGP_PDU_TYPE, DE_BSSGP_BUCKET_LEAK_RATE, NULL, ei_bssgp_missing_mandatory_element);
5017 /* Bmax default MS Bmax default MS/11.3.2 M TLV 4 */
5018 ELEM_MAND_TELV(0x01, BSSGP_PDU_TYPE, DE_BSSGP_BMAX_DEFAULT_MS, NULL, ei_bssgp_missing_mandatory_element);
5019 /* R_default_MS R_default_MS/11.3.32 M TLV 4 */
5020 ELEM_MAND_TELV(0x1c, BSSGP_PDU_TYPE, DE_BSSGP_R_DEFAULT_MS, NULL, ei_bssgp_missing_mandatory_element);
5021 /* Bucket_Full Ratio Bucket_Full Ratio/11.3.46 C TLV 3 */
5022 ELEM_OPT_TELV(BSSGP_IEI_BUCKET_FULL_RATIO, BSSGP_PDU_TYPE, DE_BSSGP_BUCKET_FULL_RATIO , NULL);
5023 /* BVC Measurement BVC Measurement/11.3.7 O TLV 4 */
5024 ELEM_OPT_TELV(0x06, BSSGP_PDU_TYPE, DE_BSSGP_BVC_MEAS , NULL);
5025 /* Flow Control Granularity (note) Flow Control Granularity/11.3.102 O TLV 3 */
5026 ELEM_OPT_TELV(0x7e, BSSGP_PDU_TYPE, DE_BSSGP_FLOW_CONTROL_GRAN , NULL);
5028 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5032 * 10.4.5 FLOW-CONTROL-BVC-ACK
5034 static void
5035 bssgp_flow_control_bvc_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5037 uint32_t curr_offset;
5038 uint32_t consumed;
5039 unsigned curr_len;
5041 curr_offset = offset;
5042 curr_len = len;
5044 /* This PDU informs the flow control mechanism at the BSS that the SGSN has received
5045 * the FLOW-CONTROL-BVC PDU indicated by the Tag.
5048 /* Direction: SGSN to BSS */
5049 pinfo->link_dir = P2P_DIR_DL;
5051 /* Tag Tag/11.3.34 M TLV 3 */
5052 ELEM_MAND_TELV(BSSGP_IEI_TAG, BSSGP_PDU_TYPE, DE_BSSGP_TAG, NULL, ei_bssgp_missing_mandatory_element);
5054 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5058 * 10.4.6 FLOW-CONTROL-MS
5060 static void
5061 bssgp_flow_control_ms(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5063 uint32_t curr_offset;
5064 uint32_t consumed;
5065 unsigned curr_len;
5067 curr_offset = offset;
5068 curr_len = len;
5070 /* This PDU informs the flow control mechanism at an SGSN of the status of an MS's
5071 * maximum acceptable SGSN to BSS throughput on the Gb interface.
5074 /* Direction: BSS to SGSN */
5075 pinfo->link_dir = P2P_DIR_UL;
5077 /* TLLI TLLI/11.3.35 M TLV 6 */
5078 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
5079 /* Tag Tag/11.3.34 M TLV 3 */
5080 ELEM_MAND_TELV(BSSGP_IEI_TAG, BSSGP_PDU_TYPE, DE_BSSGP_TAG, NULL, ei_bssgp_missing_mandatory_element);
5081 /* MS Bucket Size MS Bucket Size/11.3.21 M TLV 4 */
5082 ELEM_MAND_TELV(BSSGP_IEI_MS_BUCKET_SIZE, BSSGP_PDU_TYPE, DE_BSSGP_MS_BUCKET_SIZE, NULL, ei_bssgp_missing_mandatory_element);
5083 /* Bucket Leak rate Bucket Leak rate/11.3.4 M TLV 4 */
5084 ELEM_MAND_TELV(BSSGP_IEI_BUCKET_LEAK_RATE, BSSGP_PDU_TYPE, DE_BSSGP_BUCKET_LEAK_RATE, NULL, ei_bssgp_missing_mandatory_element);
5085 /* Bucket_Full Ratio Bucket_Full Ratio/11.3.46 C TLV 3 */
5086 ELEM_OPT_TELV(BSSGP_IEI_BUCKET_FULL_RATIO, BSSGP_PDU_TYPE, DE_BSSGP_BUCKET_FULL_RATIO , NULL);
5087 /* Flow Control Granularity (note) Flow Control Granularity/11.3.102 O TLV 3 */
5088 ELEM_OPT_TELV(0x7e, BSSGP_PDU_TYPE, DE_BSSGP_FLOW_CONTROL_GRAN , NULL);
5090 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5093 * 10.4.7 FLOW-CONTROL-MS-ACK
5095 static void
5096 bssgp_flow_control_ms_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5098 uint32_t curr_offset;
5099 uint32_t consumed;
5100 unsigned curr_len;
5102 curr_offset = offset;
5103 curr_len = len;
5105 /* This PDU informs the flow control mechanism at the BSS that the SGSN has received
5106 * the FLOW-CONTROL-MS PDU indicated by the TLLI and the Tag. */
5107 /* Direction: SGSN to BSS */
5108 pinfo->link_dir = P2P_DIR_DL;
5110 /* TLLI TLLI/11.3.35 M TLV 6 */
5111 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
5112 /* Tag Tag/11.3.34 M TLV 3 */
5113 ELEM_MAND_TELV(BSSGP_IEI_TAG, BSSGP_PDU_TYPE, DE_BSSGP_TAG, NULL, ei_bssgp_missing_mandatory_element);
5115 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5118 * 10.4.8 BVC-BLOCK
5121 static void
5122 bssgp_bvc_block(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5124 uint32_t curr_offset;
5125 uint32_t consumed;
5126 unsigned curr_len;
5128 curr_offset = offset;
5129 curr_len = len;
5131 /* This PDU indicates that the contained BVC shall be blocked at the recipient entity. */
5132 /* BSS to SGSN */
5133 pinfo->link_dir = P2P_DIR_UL;
5135 /* BVCI BVCI/11.3.6 M TLV 4 */
5136 ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI, NULL, ei_bssgp_missing_mandatory_element);
5137 /* Cause Cause/11.3.8 M TLV 3 */
5138 ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL, ei_bssgp_missing_mandatory_element);
5140 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5144 * 10.4.9 BVC-BLOCK-ACK
5146 static void
5147 bssgp_bvc_block_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5149 uint32_t curr_offset;
5150 uint32_t consumed;
5151 unsigned curr_len;
5153 curr_offset = offset;
5154 curr_len = len;
5156 /* This PDU acknowledges that a BVC has been blocked. */
5157 /* SGSN to BSS */
5158 pinfo->link_dir = P2P_DIR_DL;
5160 /* BVCI BVCI/11.3.6 M TLV 4 */
5161 ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI, NULL, ei_bssgp_missing_mandatory_element);
5163 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5167 * 10.4.10 BVC-UNBLOCK
5169 static void
5170 bssgp_bvc_un_block(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5172 uint32_t curr_offset;
5173 uint32_t consumed;
5174 unsigned curr_len;
5176 curr_offset = offset;
5177 curr_len = len;
5179 /* This PDU indicates that the identified BVC shall be unblocked at the recipient entity. */
5180 /* Direction: BSS to SGSN */
5181 pinfo->link_dir = P2P_DIR_UL;
5183 /* BVCI BVCI/11.3.6 M TLV 4 */
5184 ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI, NULL, ei_bssgp_missing_mandatory_element);
5186 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5189 * 10.4.11 BVC-UNBLOCK-ACK
5192 static void
5193 bssgp_bvc_un_block_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5195 uint32_t curr_offset;
5196 uint32_t consumed;
5197 unsigned curr_len;
5199 curr_offset = offset;
5200 curr_len = len;
5202 /* This PDU acknowledges that a BVC has been unblocked. */
5203 /* Direction: SGSN to BSS */
5204 pinfo->link_dir = P2P_DIR_DL;
5206 /* BVCI BVCI/11.3.6 M TLV 4 */
5207 ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI, NULL, ei_bssgp_missing_mandatory_element);
5209 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5213 * 10.4.12 BVC-RESET
5216 static void
5217 bssgp_bvc_reset(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5219 uint32_t curr_offset;
5220 uint32_t consumed;
5221 unsigned curr_len;
5223 curr_offset = offset;
5224 curr_len = len;
5226 /* This PDU indicates that BVC initialisation is required, e.g. because of a BVC failure. */
5227 /* Direction: SGSN to BSS, BSS to SGSN */
5229 /* BVCI BVCI/11.3.6 M TLV 4 */
5230 ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI, NULL, ei_bssgp_missing_mandatory_element);
5231 /* Cause Cause/11.3.8 M TLV 3 */
5232 ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL, ei_bssgp_missing_mandatory_element);
5233 /* Cell Identifier (note 1) C TLV 10 */
5234 ELEM_OPT_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , NULL);
5235 /* Feature bitmap (note 2) Feature bitmap/11.3.45 O TLV 3 */
5236 ELEM_OPT_TELV(0x3b, BSSGP_PDU_TYPE, DE_BSSGP_FEATURE_BITMAP , NULL);
5237 /* Extended Feature Bitmap (note 3) Extended Feature Bitmap/11.3.84 O TLV 3 */
5238 ELEM_OPT_TELV(0x69, BSSGP_PDU_TYPE, DE_BSSGP_EXT_FEATURE_BITMAP , NULL);
5240 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5244 * 10.4.13 BVC-RESET-ACK
5247 static void
5248 bssgp_bvc_reset_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5250 uint32_t curr_offset;
5251 uint32_t consumed;
5252 unsigned curr_len;
5254 curr_offset = offset;
5255 curr_len = len;
5257 /* This PDU indicates that BVC initialisation has been executed */
5258 /* BSS to SGSN, SGSN to BSS */
5260 /* BVCI BVCI/11.3.6 M TLV 4 */
5261 ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI, NULL, ei_bssgp_missing_mandatory_element);
5262 /* Cell Identifier (note 1) C TLV 10 */
5263 ELEM_OPT_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , NULL);
5264 /* Feature bitmap (note 2) Feature bitmap/11.3.45 O TLV 3 */
5265 ELEM_OPT_TELV(0x3b, BSSGP_PDU_TYPE, DE_BSSGP_FEATURE_BITMAP , NULL);
5266 /* Extended Feature Bitmap (note 3) Extended Feature Bitmap/11.3.84 O TLV 3 */
5267 ELEM_OPT_TELV(0x69, BSSGP_PDU_TYPE, DE_BSSGP_EXT_FEATURE_BITMAP , NULL);
5269 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5273 * 10.4.14 STATUS
5275 static void
5276 bssgp_status(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5278 uint32_t curr_offset;
5279 uint32_t consumed;
5280 unsigned curr_len;
5282 curr_offset = offset;
5283 curr_len = len;
5285 /* This PDU indicates that an exception condition occurred. */
5286 /* Direction: SGSN to BSS, BSS to SGSN */
5288 pinfo->flags.in_error_pkt = true;
5290 /* Cause Cause/11.3.8 M TLV 3 */
5291 ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL, ei_bssgp_missing_mandatory_element);
5292 /* BVCI BVCI/11.3.6 C TLV 4 */
5293 ELEM_OPT_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI, NULL);
5294 /* PDU In Error (note) PDU In Error/11.3.24 O TLV 3-? */
5295 ELEM_OPT_TELV(0x15, BSSGP_PDU_TYPE, DE_BSSGP_PDU_IN_ERROR, NULL);
5297 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5300 * 10.4.15 SGSN-INVOKE-TRACE
5302 static void
5303 bssgp_sgsn_invoke_trace(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5305 uint32_t curr_offset;
5306 uint32_t consumed;
5307 unsigned curr_len;
5309 curr_offset = offset;
5310 curr_len = len;
5312 /* This PDU indicates that the BSS shall begin the production of a trace record for an MS. */
5313 /* Direction: SGSN to BSS */
5315 pinfo->link_dir = P2P_DIR_UL;
5317 /* Trace Type Trace Type/11.3.38 M TLV 3 */
5318 ELEM_MAND_TELV(0x22, BSSGP_PDU_TYPE, DE_BSSGP_TRACE_TYPE, NULL, ei_bssgp_missing_mandatory_element);
5319 /* Trace Reference Trace Reference/11.3.37 M TLV 4 */
5320 ELEM_MAND_TELV(0x21, BSSGP_PDU_TYPE, DE_BSSGP_TRACE_REF, NULL, ei_bssgp_missing_mandatory_element);
5321 /* Trigger Id Trigger Id/11.3.40 O TLV 4-24 */
5322 ELEM_OPT_TELV(0x24, BSSGP_PDU_TYPE, DE_BSSGP_TRIGGER_ID , NULL);
5323 /* Mobile Id Mobile Id/11.3.20 O TLV 3-10 */
5324 ELEM_OPT_TELV(0x11,GSM_A_PDU_TYPE_COMMON, DE_MID, NULL);
5325 /* OMC Id OMC Id/11.3.23 O TLV 4-24 */
5326 ELEM_OPT_TELV(0x14,GSM_A_PDU_TYPE_COMMON, DE_BSSGP_OMC_ID, NULL);
5327 /* TransactionId TransactionId/11.3.39 O TLV 4 */
5328 ELEM_OPT_TELV(0x23, BSSGP_PDU_TYPE, DE_BSSGP_TRANSACTION_ID , NULL);
5330 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5334 * 10.4.16 DOWNLOAD-BSS-PFC
5336 static void
5337 bssgp_download_bss_pfc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5339 uint32_t curr_offset;
5340 uint32_t consumed;
5341 unsigned curr_len;
5343 curr_offset = offset;
5344 curr_len = len;
5346 /* This PDU requests a SGSN to initiate a CREATE-BSS-PFC procedure. */
5347 /* Direction: BSS to SGSN */
5348 pinfo->link_dir = P2P_DIR_UL;
5350 /* TLLI TLLI/11.3.35 M TLV 6 */
5351 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
5352 /* PFI PFI/11.3.42 M TLV 3 */
5353 ELEM_MAND_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID, NULL, ei_bssgp_missing_mandatory_element);
5355 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5359 * 10.4.17 CREATE-BSS-PFC
5361 static void
5362 bssgp_create_bss_pfc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5364 uint32_t curr_offset;
5365 uint32_t consumed;
5366 unsigned curr_len;
5368 curr_offset = offset;
5369 curr_len = len;
5371 /* This PDU allows the SGSN to request that a BSS create or modify a BSS Packet Flow Context. */
5372 /* Direction: SGSN to BSS */
5373 pinfo->link_dir = P2P_DIR_DL;
5375 /* TLLI TLLI/11.3.35 M TLV 6 */
5376 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
5377 /* IMSI IMSI/11.3.14 O (note 4) TLV 5 -10 */
5378 ELEM_OPT_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI , NULL);
5379 /* PFI PFI/11.3.42 M TLV 3 */
5380 ELEM_MAND_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID, NULL, ei_bssgp_missing_mandatory_element);
5381 /* PFT GPRS Timer/11.3.44 M TLV 3 */
5382 ELEM_MAND_TELV(0x29, BSSGP_PDU_TYPE, DE_BSSGP_GPRS_TIMER, " - PFT", ei_bssgp_missing_mandatory_element);
5383 /* ABQP ABQP/11.3.43 M TLV 13-? */
5384 ELEM_MAND_TELV(0x3a , GSM_A_PDU_TYPE_GM, DE_QOS, NULL, ei_bssgp_missing_mandatory_element);
5385 /* Service UTRAN CCO Service UTRAN CCO/11.3.47 O TLV 3 */
5386 ELEM_OPT_TELV(BSSGP_IEI_SERVICE_UTRAN_CCO, BSSGP_PDU_TYPE, DE_BSSGP_SERV_UTRAN_CCO, NULL);
5387 /* MS Radio Access Capability MS Radio Access Capability/11.3.22 O (note 1) TLV 7-? */
5388 ELEM_OPT_TELV(BSSGP_IEI_MS_RADIO_ACCESS_CAPABILITY, GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP , NULL);
5389 /* Allocation/Retention Priority Priority/11.3.27 O TLV 3 */
5390 ELEM_OPT_TELV(0x17, GSM_A_PDU_TYPE_BSSMAP, BE_PRIO, NULL);
5391 /* T10 GPRS Timer/11.3.44 C (note 2) TLV 3 */
5392 ELEM_OPT_TELV(BSSGP_IEI_GPRS_TIMER, BSSGP_PDU_TYPE, DE_BSSGP_GPRS_TIMER, " - T10");
5393 /* Inter RAT Handover Info Inter RAT Handover Info/11.3.94 O (note 3) TLV 3-? */
5394 ELEM_OPT_TELV(0x73, BSSGP_PDU_TYPE, DE_BSSGP_INTER_RAT_HO_INFO, NULL);
5395 /* E-UTRAN Inter RAT Handover Info E-UTRAN Inter RAT Handover Info/11.3.104 O (note 3) TLV 3-? */
5396 ELEM_OPT_TELV(0x80, BSSGP_PDU_TYPE, DE_BSSGP_E_UTRAN_INTER_RAT_HO_INFO, NULL);
5397 /* Subscriber Profile ID for RAT/Frequency priority (note 5)
5398 * Subscriber Profile ID for RAT/Frequency priority/11.3.105 O TLV 3
5400 ELEM_OPT_TELV(0x81, BSSGP_PDU_TYPE, DE_BSSGP_SUB_PROF_ID_F_RAT_FRQ_PRIO, NULL);
5402 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5406 * 10.4.18 CREATE-BSS-PFC-ACK
5408 static void
5409 bssgp_create_bss_pfc_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5411 uint32_t curr_offset;
5412 uint32_t consumed;
5413 unsigned curr_len;
5415 curr_offset = offset;
5416 curr_len = len;
5418 /* This PDU allows the BSS to acknowledge a request from the SGSN for the creation
5419 * or modification of a BSS Packet Flow Context.
5421 /* Direction: BSS to SGSN */
5422 pinfo->link_dir = P2P_DIR_UL;
5424 /* TLLI TLLI/11.3.35 M TLV 6 */
5425 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
5426 /* PFI PFI/11.3.42 M TLV 3 */
5427 ELEM_MAND_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID, NULL, ei_bssgp_missing_mandatory_element);
5428 /* ABQP ABQP/11.3.43 M TLV 13-? */
5429 ELEM_MAND_TELV(0x3a , GSM_A_PDU_TYPE_GM, DE_QOS, NULL, ei_bssgp_missing_mandatory_element);
5430 /* Cause Cause/11.3.8 O TLV 3 */
5431 ELEM_OPT_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL);
5433 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5436 * 10.4.19 CREATE-BSS-PFC-NACK
5438 static void
5439 bssgp_create_bss_pfc_nack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5441 uint32_t curr_offset;
5442 uint32_t consumed;
5443 unsigned curr_len;
5445 curr_offset = offset;
5446 curr_len = len;
5448 /* This PDU allows the BSS to Nack a request from the SGSN for the
5449 * creation of a BSS Packet Flow Context
5451 /* Direction: BSS to SGSN */
5452 pinfo->link_dir = P2P_DIR_UL;
5454 /* TLLI TLLI/11.3.35 M TLV 6 */
5455 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
5456 /* PFI PFI/11.3.42 M TLV 3 */
5457 ELEM_MAND_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID, NULL, ei_bssgp_missing_mandatory_element);
5458 /* Cause Cause/11.3.8 M TLV 3 */
5459 ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL, ei_bssgp_missing_mandatory_element);
5461 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5464 * 10.4.20 MODIFY-BSS-PFC
5466 static void
5467 bssgp_modify_bss_pfc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5469 uint32_t curr_offset;
5470 uint32_t consumed;
5471 unsigned curr_len;
5473 curr_offset = offset;
5474 curr_len = len;
5476 /* This PDU allows the BSS to request a modification of a BSS Packet Flow Context. */
5477 /* Direction: BSS to SGSN */
5478 pinfo->link_dir = P2P_DIR_UL;
5480 /* TLLI TLLI/11.3.35 M TLV 6 */
5481 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
5482 /* PFI PFI/11.3.42 M TLV 3 */
5483 ELEM_MAND_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID, NULL, ei_bssgp_missing_mandatory_element);
5484 /* ABQP ABQP/11.3.43 M TLV 13-? */
5485 ELEM_MAND_TELV(0x3a , GSM_A_PDU_TYPE_GM, DE_QOS, NULL, ei_bssgp_missing_mandatory_element);
5487 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5491 * 10.4.21 MODIFY-BSS-PFC-ACK
5493 static void
5494 bssgp_modify_bss_pfc_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5496 uint32_t curr_offset;
5497 uint32_t consumed;
5498 unsigned curr_len;
5500 curr_offset = offset;
5501 curr_len = len;
5503 /* This PDU allows the SGSN to acknowledge a modification to a BSS Packet Flow Context. */
5504 /* Direction: SGSN to BSS */
5505 pinfo->link_dir = P2P_DIR_DL;
5507 /* TLLI TLLI/11.3.35 M TLV 6 */
5508 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
5509 /* PFI PFI/11.3.42 M TLV 3 */
5510 ELEM_MAND_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID, NULL, ei_bssgp_missing_mandatory_element);
5511 /* PFT GPRS Timer/11.3.44 M TLV 3 */
5512 ELEM_MAND_TELV(BSSGP_IEI_GPRS_TIMER, BSSGP_PDU_TYPE, DE_BSSGP_GPRS_TIMER, " - PFT", ei_bssgp_missing_mandatory_element);
5513 /* ABQP ABQP/11.3.43 M TLV 13-? */
5514 ELEM_MAND_TELV(0x3a , GSM_A_PDU_TYPE_GM, DE_QOS, NULL, ei_bssgp_missing_mandatory_element);
5517 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5520 * 10.4.22 DELETE-BSS-PFC
5522 static void
5523 bssgp_delete_bss_pfc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5525 uint32_t curr_offset;
5526 uint32_t consumed;
5527 unsigned curr_len;
5529 curr_offset = offset;
5530 curr_len = len;
5532 /* This PDU allows the SGSN to request that a BSS delete a BSS Packet Flow Context. */
5533 /* Direction: SGSN to BSS */
5534 pinfo->link_dir = P2P_DIR_DL;
5536 /* TLLI TLLI/11.3.35 M TLV 6 */
5537 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
5538 /* PFI PFI/11.3.42 M TLV 3 */
5539 ELEM_MAND_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID, NULL, ei_bssgp_missing_mandatory_element);
5541 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5544 * 10.4.23 DELETE-BSS-PFC-ACK
5546 static void
5547 bssgp_delete_bss_pfc_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5549 uint32_t curr_offset;
5550 uint32_t consumed;
5551 unsigned curr_len;
5553 curr_offset = offset;
5554 curr_len = len;
5556 /* This PDU allows the BSS to acknowledge a request for the deletion of a BSS Packet Flow Context. */
5557 /* Direction: BSS to SGSN */
5558 pinfo->link_dir = P2P_DIR_UL;
5560 /* TLLI TLLI/11.3.35 M TLV 6 */
5561 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
5562 /* PFI PFI/11.3.42 M TLV 3 */
5563 ELEM_MAND_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID, NULL, ei_bssgp_missing_mandatory_element);
5565 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5568 * 10.4.24 FLOW-CONTROL-PFC
5570 static void
5571 bssgp_flow_cntrl_pfc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5573 uint32_t curr_offset;
5574 uint32_t consumed;
5575 unsigned curr_len;
5577 curr_offset = offset;
5578 curr_len = len;
5580 /* This PDU provides the SGSN with flow control information regarding one or more PFC(s) of a given Mobile Station. */
5581 /* Direction: BSS to SGSN */
5582 pinfo->link_dir = P2P_DIR_UL;
5584 /* TLLI TLLI/11.3.35 M TLV 6 */
5585 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
5586 /* Tag Tag/11.3.34 M TLV 3 */
5587 ELEM_MAND_TELV(BSSGP_IEI_TAG, BSSGP_PDU_TYPE, DE_BSSGP_TAG, NULL, ei_bssgp_missing_mandatory_element);
5588 /* MS Bucket Size MS Bucket Size/11.3.21 O TLV 4 */
5589 ELEM_OPT_TELV(BSSGP_IEI_MS_BUCKET_SIZE, BSSGP_PDU_TYPE, DE_BSSGP_MS_BUCKET_SIZE , NULL);
5590 /* Bucket Leak rate Bucket Leak rate/11.3.4 O TLV 4 */
5591 ELEM_OPT_TELV(0x3b, BSSGP_PDU_TYPE, DE_BSSGP_FEATURE_BITMAP , NULL);
5592 /* Bucket_Full Ratio Bucket_Full Ratio/11.3.46 O TLV 3 */
5593 ELEM_OPT_TELV(BSSGP_IEI_BUCKET_FULL_RATIO, BSSGP_PDU_TYPE, DE_BSSGP_BUCKET_FULL_RATIO , NULL);
5594 /* PFC flow control parameters PFC flow control parameters/11.3.68 M TLV */
5595 ELEM_MAND_TELV(0x52, BSSGP_PDU_TYPE, DE_BSSGP_PFC_FLOW_CTRL, NULL, ei_bssgp_missing_mandatory_element);
5596 /* Flow Control Granularity (note) Flow Control Granularity/11.3.102 O TLV 3 */
5597 ELEM_OPT_TELV(0x7e, BSSGP_PDU_TYPE, DE_BSSGP_FLOW_CONTROL_GRAN , NULL);
5599 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5602 * 10.4.25 FLOW-CONTROL-PFC-ACK
5604 static void
5605 bssgp_flow_cntrl_pfc_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5607 uint32_t curr_offset;
5608 uint32_t consumed;
5609 unsigned curr_len;
5611 curr_offset = offset;
5612 curr_len = len;
5614 /* This PDU informs the flow control mechanism at the BSS that the SGSN has received the FLOW-CONTROL-PFC
5615 * PDU indicated by the TLLI and the Tag.
5617 /* Direction: SGSN to BSS */
5618 pinfo->link_dir = P2P_DIR_DL;
5620 /* TLLI TLLI/11.3.35 M TLV 6 */
5621 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
5622 /* Tag Tag/11.3.34 M TLV 3 */
5623 ELEM_MAND_TELV(BSSGP_IEI_TAG, BSSGP_PDU_TYPE, DE_BSSGP_TAG, NULL, ei_bssgp_missing_mandatory_element);
5625 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5628 * 10.4.26 DELETE-BSS-PFC-REQ
5630 static void
5631 bssgp_delete_bss_pfc_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5633 uint32_t curr_offset;
5634 uint32_t consumed;
5635 unsigned curr_len;
5637 curr_offset = offset;
5638 curr_len = len;
5640 /* This PDU allows the BSS to inform the SGSN that the BSS Packet Flow Context cannot be supported anymore */
5641 /* Direction: BSS to SGSN */
5642 pinfo->link_dir = P2P_DIR_UL;
5644 /* TLLI TLLI/11.3.35 M TLV 6 */
5645 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
5646 /* PFI PFI/11.3.42 M TLV 3 */
5647 ELEM_MAND_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID, NULL, ei_bssgp_missing_mandatory_element);
5648 /* Cause Cause/11.3.8 M TLV 3 */
5649 ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL, ei_bssgp_missing_mandatory_element);
5651 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5654 * 10.4.27 PS-HANDOVER-REQUIRED
5656 static void
5657 bssgp_ps_ho_required(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5659 uint32_t curr_offset;
5660 uint32_t consumed;
5661 unsigned curr_len;
5663 curr_offset = offset;
5664 curr_len = len;
5666 /* This PDU initiates the allocation of resources in the target system for an MS. */
5667 /* Direction: BSS to SGSN */
5668 pinfo->link_dir = P2P_DIR_UL;
5670 /* TLLI TLLI/11.3.35 M TLV 6 */
5671 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
5672 /* Cause Cause/11.3.8 M TLV 3 */
5673 ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL, ei_bssgp_missing_mandatory_element);
5674 /* Source Cell Identifier Cell Identifier/11.3.9 M TLV 10 */
5675 ELEM_MAND_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID, " - Source", ei_bssgp_missing_mandatory_element);
5676 /* Target Cell Identifier (note 2) Cell Identifier/11.3.9 C TLV 10 */
5677 ELEM_OPT_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , " - Target");
5678 /* Source BSS to Target BSS Transparent Container (note 1)
5679 * Source BSS to Target BSS Transparent Container/11.3.79 C TLV 10-?
5681 ELEM_OPT_TELV(0x64,BSSGP_PDU_TYPE, DE_BSSGP_SOURCE_BSS_TO_TARGET_BSS_TRANSP_CONT, NULL);
5682 /* Target RNC Identifier (note 2) (note 3) RNC Identifier/11.3.87 C TLV 10 */
5683 ELEM_OPT_TELV(0x6c,BSSGP_PDU_TYPE, BE_BSSGP_RNC_ID, " - Target");
5684 /* Source to Target Transparent Container (note 1)
5685 * Source to Target Transparent Container/11.3.85 C TLV 3-?
5687 ELEM_OPT_TELV(0x6a,BSSGP_PDU_TYPE, DE_BSSGP_SRC_TO_TRG_TRANSP_CONT, NULL);
5688 /* Active PFCs List Active PFCs List/11.3.95c M TLV 3-? */
5689 ELEM_OPT_TELV(0x77,BSSGP_PDU_TYPE, DE_BSSGP_ACTIVE_PFCS_LIST, NULL);
5690 /* Target eNB identifier (note 2) (note 3) eNB Identifier/11.3.103 C TLV 3-n */
5691 ELEM_OPT_TELV(0x7f,BSSGP_PDU_TYPE, DE_BSSGP_ENB_ID, " - Target");
5692 /* Reliable Inter RAT Handover Info (note 4)
5693 * Reliable Inter RAT Handover Info/11.3.107 C TLV 3
5695 ELEM_OPT_TELV(0x83,BSSGP_PDU_TYPE, DE_BSSGP_RELIABLE_INTER_RAT_HO_INF, NULL);
5696 /* CSG Identifier (note 5) CSG Identifier/11.3.109 C TLV 7 */
5697 ELEM_OPT_TELV(0x85,BSSGP_PDU_TYPE, DE_BSSGP_CSG_ID, NULL);
5698 /* TAC (note 6) Tracking Area Code/11.3.110 C TLV 5 */
5699 ELEM_OPT_TELV(0x86, NAS_PDU_TYPE_EMM, DE_EMM_TRAC_AREA_ID, NULL);
5701 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5704 * 10.4.28 PS-HANDOVER-REQUIRED-ACK
5706 static void
5707 bssgp_ps_ho_required_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5709 uint32_t curr_offset;
5710 uint32_t consumed;
5711 unsigned curr_len;
5713 curr_offset = offset;
5714 curr_len = len;
5716 /* This PDU indicates that resources have been allocated in the target system and
5717 * that the BSS may initiate the channel change attempt for the corresponding MS.
5719 /* Direction: SGSN to BSS */
5720 pinfo->link_dir = P2P_DIR_DL;
5722 /* TLLI TLLI/11.3.35 M TLV 6 */
5723 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
5724 /* List of set-up PFCs List of set-up PFCs/11.3.83 M TLV 3-?S */
5725 ELEM_MAND_TELV(0x68,BSSGP_PDU_TYPE, DE_BSSGP_LIST_OF_SETUP_PFCS, NULL, ei_bssgp_missing_mandatory_element);
5726 /* Target BSS to Source BSS Transparent Container (note)
5727 * Target BSS to Source BSS Transparent Container/11.3.80 C TLV 3-?
5729 ELEM_OPT_TELV(0x65,BSSGP_PDU_TYPE, DE_BSSGP_TARGET_BSS_TO_SOURCE_BSS_TRANSP_CONT, NULL);
5730 /* Target to Source Transparent Container (note)
5731 * Target to Source Transparent Container/11.3.86 C TLV 3-?
5733 ELEM_OPT_TELV(0x6b,BSSGP_PDU_TYPE, DE_BSSGP_TRG_TO_SRC_TRANSP_CONT, NULL);
5735 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5739 * 10.4.29 PS-HANDOVER-REQUIRED-NACK
5741 static void
5742 bssgp_ps_ho_required_nack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5744 uint32_t curr_offset;
5745 uint32_t consumed;
5746 unsigned curr_len;
5748 curr_offset = offset;
5749 curr_len = len;
5751 /* This PDU informs the source BSS about failed resource allocation in the target system. */
5752 /* Direction: SGSN to BSS */
5753 pinfo->link_dir = P2P_DIR_DL;
5755 /* TLLI TLLI/11.3.35 M TLV 6 */
5756 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
5757 /* Cause Cause/11.3.8 M TLV 3 */
5758 ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL, ei_bssgp_missing_mandatory_element);
5760 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5763 * 10.4.30 PS-HANDOVER-REQUEST
5765 static void
5766 bssgp_ps_ho_request(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5768 uint32_t curr_offset;
5769 uint32_t consumed;
5770 unsigned curr_len;
5772 curr_offset = offset;
5773 curr_len = len;
5775 /* This PDU initiates the allocation of resources for one or more PFCs in the target BSS for an MS. */
5776 /* Direction: SGSN to BSS */
5777 pinfo->link_dir = P2P_DIR_DL;
5779 /* TLLI TLLI/11.3.35 M TLV 6 */
5780 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
5781 /* IMSI IMSI/11.3.14 M TLV 5-10 */
5782 ELEM_MAND_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI, NULL, ei_bssgp_missing_mandatory_element);
5783 /* Cause Cause/11.3.8 M TLV 3 */
5784 ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL, ei_bssgp_missing_mandatory_element);
5785 /* Source Cell Identifier (note 1) Cell Identifier/11.3.9 C TLV 10 */
5786 ELEM_OPT_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , " - Source");
5787 /* Source RNC Identifier (note 1) RNC Identifier/11.3.87 C TLV 10 */
5788 ELEM_OPT_TELV(0x6c,BSSGP_PDU_TYPE, BE_BSSGP_RNC_ID, " - Source");
5789 /* Target Cell Identifier Cell Identifier/11.3.9 M TLV 10 */
5790 ELEM_OPT_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , " - Target");
5791 /* Source BSS to Target BSS Transparent Container Source BSS to Target BSS Transparent Container/11.3.79 M TLV 7-? */
5792 ELEM_OPT_TELV(0x64,BSSGP_PDU_TYPE, DE_BSSGP_SOURCE_BSS_TO_TARGET_BSS_TRANSP_CONT, NULL);
5793 /* PFCs to be set-up list PFCs to be set-up list/11.3.82 M TLV 22-? */
5794 ELEM_OPT_TELV(0x67,BSSGP_PDU_TYPE, DE_BSSGP_PFCS_TO_BE_SET_UP_LIST, NULL);
5795 /* NAS container for PS Handover NAS container for PS Handover/11.3.81 O TLV 3-? */
5796 ELEM_OPT_TELV(0x66,GSM_A_PDU_TYPE_COMMON, DE_NAS_CONT_FOR_PS_HO, NULL);
5797 /* Service UTRAN CCO Service UTRAN CCO/11.3.47 O TLV 3 */
5798 ELEM_OPT_TELV(BSSGP_IEI_SERVICE_UTRAN_CCO, BSSGP_PDU_TYPE, DE_BSSGP_SERV_UTRAN_CCO, NULL);
5799 /* Subscriber Profile ID for RAT/Frequency priority (note 2) Subscriber Profile ID for RAT/Frequency priority/11.3.105 O TLV 3 */
5800 ELEM_OPT_TELV(0x81, BSSGP_PDU_TYPE, DE_BSSGP_SUB_PROF_ID_F_RAT_FRQ_PRIO, NULL);
5801 /* Reliable Inter RAT Handover Info (note 3) Reliable Inter RAT Handover Info/11.3.107 C TLV 3 */
5802 ELEM_OPT_TELV(0x83,BSSGP_PDU_TYPE, DE_BSSGP_RELIABLE_INTER_RAT_HO_INF, NULL);
5804 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5808 * 10.4.31 PS-HANDOVER-REQUEST-ACK
5810 static void
5811 bssgp_ps_ho_request_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5813 uint32_t curr_offset;
5814 uint32_t consumed;
5815 unsigned curr_len;
5817 curr_offset = offset;
5818 curr_len = len;
5820 /* This PDU acknowledges the successful allocation of resources in the target BSS. */
5821 /* Direction: BSS to SGSN */
5822 pinfo->link_dir = P2P_DIR_UL;
5824 /* TLLI TLLI/11.3.35 M TLV 6 */
5825 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
5826 /* List of set-up PFCs List of set-up PFCs/11.3.83 M TLV 3-? */
5827 ELEM_MAND_TELV(0x68,BSSGP_PDU_TYPE, DE_BSSGP_LIST_OF_SETUP_PFCS, NULL, ei_bssgp_missing_mandatory_element);
5828 /* Target BSS to Source BSS Transparent Container Target BSS to Source BSS Transparent Container/11.3.80 M TLV 3-? */
5829 ELEM_MAND_TELV(0x65,BSSGP_PDU_TYPE, DE_BSSGP_TARGET_BSS_TO_SOURCE_BSS_TRANSP_CONT, NULL, ei_bssgp_missing_mandatory_element);
5831 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5834 * 10.4.32 PS-HANDOVER-REQUEST-NACK
5836 static void
5837 bssgp_ps_ho_request_nack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5839 uint32_t curr_offset;
5840 uint32_t consumed;
5841 unsigned curr_len;
5843 curr_offset = offset;
5844 curr_len = len;
5846 /* This PDU informs the SGSN about failed resource allocation in the target BSS. */
5847 /* BSS to SGSN */
5848 pinfo->link_dir = P2P_DIR_UL;
5850 /* TLLI TLLI/11.3.35 M TLV 6 */
5851 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
5852 /* Cause Cause/11.3.8 M TLV 3 */
5853 ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL, ei_bssgp_missing_mandatory_element);
5855 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5859 * 10.4.33 PS-HANDOVER-COMPLETE
5861 static void
5862 bssgp_ps_ho_complete(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5864 uint32_t curr_offset;
5865 uint32_t consumed;
5866 unsigned curr_len;
5868 curr_offset = offset;
5869 curr_len = len;
5871 /* This PDU informs the SGSN about successful channel change for an MS. */
5872 /* BSS to SGSN */
5873 pinfo->link_dir = P2P_DIR_UL;
5875 /* TLLI TLLI/11.3.35 M TLV 6 */
5876 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
5877 /* IMSI IMSI/11.3.14 M TLV 5-10 */
5878 ELEM_MAND_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI, NULL, ei_bssgp_missing_mandatory_element);
5879 /* Target Cell Identifier (note 1) Cell Identifier/11.3.9 O TLV 10 */
5880 ELEM_OPT_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , " - Target");
5881 /* Request for Inter RAT Handover Info (note 2) Request for Inter RAT Handover Info/11.3.106 C TLV 3 */
5882 ELEM_OPT_TELV(0x82, BSSGP_PDU_TYPE, DE_BSSGP_REQ_FOR_INTER_RAT_HO_INFO , NULL);
5884 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5887 * 10.4.34 PS-HANDOVER-CANCEL
5889 static void
5890 bssgp_ps_ho_cancel(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5892 uint32_t curr_offset;
5893 uint32_t consumed;
5894 unsigned curr_len;
5896 curr_offset = offset;
5897 curr_len = len;
5899 /* This PDU cancels the handover for an MS. */
5900 /* BSS to SGSN */
5901 pinfo->link_dir = P2P_DIR_UL;
5903 /* TLLI TLLI/11.3.35 M TLV 6 */
5904 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
5905 /* Cause Cause/11.3.8 M TLV 3 */
5906 ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL);
5907 /* Source Cell Identifier Cell Identifier/11.3.9 M TLV 10 */
5908 ELEM_OPT_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , " - Source");
5909 /* Target Cell Identifier (note 1) Cell Identifier/11.3.9 O TLV 10 */
5910 ELEM_OPT_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , " - Target");
5911 /* Target RNC Identifier (note 1) (note 2) RNC Identifier/11.3.87 C TLV 10 */
5912 ELEM_OPT_TELV(0x6c,BSSGP_PDU_TYPE, BE_BSSGP_RNC_ID, " - Target");
5913 /* Target eNB Identifier (note 1) (note 2) eNB Identifier/11.3.103 C TLV 3-n */
5914 ELEM_OPT_TELV(0x7f,BSSGP_PDU_TYPE, DE_BSSGP_ENB_ID, " - Target");
5916 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5920 * 10.4.35 PS-HANDOVER-COMPLETE-ACK
5922 static void
5923 bssgp_ps_ho_complete_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5925 uint32_t curr_offset;
5926 uint32_t consumed;
5927 unsigned curr_len;
5929 curr_offset = offset;
5930 curr_len = len;
5932 /* This PDU provides to the BSS the Inter RAT Handover Info IE or
5933 * E-UTRAN Inter RAT Handover Info IE or both. It is sent only if
5934 * requested by the BSS and it shall contain at least one of the
5935 * inter-RAT capabilities.
5938 /* SGSN to BSS */
5939 pinfo->link_dir = P2P_DIR_DL;
5941 /* TLLI TLLI/11.3.35 M TLV 6 */
5942 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
5943 /* Inter RAT Handover Info Inter RAT Handover Info/11.3.94 C (note 1) TLV 3-? */
5944 ELEM_OPT_TELV(0x73, BSSGP_PDU_TYPE, DE_BSSGP_INTER_RAT_HO_INFO, NULL);
5945 /* E-UTRAN Inter RAT Handover Info E-UTRAN Inter RAT Handover Info/11.3.104 C (note 1) TLV 3-? */
5946 ELEM_OPT_TELV(0x80, BSSGP_PDU_TYPE, DE_BSSGP_E_UTRAN_INTER_RAT_HO_INFO, NULL);
5948 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5952 * 10.4.36 OVERLOAD
5954 static void
5955 bssgp_overload(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5957 uint32_t curr_offset;
5958 uint32_t consumed;
5959 unsigned curr_len;
5961 curr_offset = offset;
5962 curr_len = len;
5964 /* Priority Class Indicator Priority Class Indicator/11.3.118 M TLV 3 */
5965 ELEM_OPT_TELV(BSSGP_IEI_PRIORITY_CLASS_INDICATOR, BSSGP_PDU_TYPE, DE_BSSGP_PRIORITY_CLASS_IND, NULL);
5967 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
5970 * 10.5 PDU functional definitions and contents at LCS SAP
5971 * 10.5.1 PERFORM-LOCATION-REQUEST
5973 static void
5974 bssgp_perform_loc_request(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
5976 uint32_t curr_offset;
5977 uint32_t consumed;
5978 unsigned curr_len;
5980 curr_offset = offset;
5981 curr_len = len;
5983 /* This PDU informs the SGSN about failed resource allocation in the target BSS. */
5984 /* BSS to SGSN */
5985 pinfo->link_dir = P2P_DIR_UL;
5987 /* TLLI TLLI/11.3.35 M TLV 6 */
5988 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
5989 /* IMSI IMSI/11.3.14 M TLV 5-10 */
5990 ELEM_MAND_TELV(BSSGP_IEI_IMSI, BSSGP_PDU_TYPE, DE_BSSGP_IMSI, NULL, ei_bssgp_missing_mandatory_element);
5991 /* DRX Parameters (note 1) DRX Parameters/11.3.11 O TLV 4 */
5992 ELEM_OPT_TELV(0x0a, GSM_A_PDU_TYPE_GM, DE_DRX_PARAM, NULL);
5993 /* BVCI (PCU-PTP) BVCI/11.3.6 M TLV 4 */
5994 ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI, " - (PCU-PTP)", ei_bssgp_missing_mandatory_element);
5995 /* NSEI (PCU-PTP) NSEI/11.3.48 M TLV 4-? */
5996 ELEM_MAND_TELV(BSSGP_IEI_NSEI, BSSGP_PDU_TYPE, DE_BSSGP_NSEI , " - (PCU-PTP)", ei_bssgp_missing_mandatory_element);
5997 /* Location Type Location Type/11.3.53 M TLV 3-? */
5998 ELEM_MAND_TELV(BSSGP_IEI_LOCATION_TYPE, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LOC_TYPE, NULL, ei_bssgp_missing_mandatory_element);
5999 /* Cell Identifier Cell Identifier/11.3.9 M TLV 10 */
6000 ELEM_OPT_TELV(BSSGP_IEI_CELL_IDENTIFIER, BSSGP_PDU_TYPE, DE_BSSGP_CELL_ID , NULL);
6001 /* LCS Capability (note 2) LCS Capability/11.3.59 O TLV 3-? */
6002 ELEM_OPT_TELV( BSSGP_IEI_LCS_CAPABILITY , GSM_A_PDU_TYPE_GM, DE_PS_LCS_CAP , NULL);
6003 /* LCS Priority LCS Priority/11.3.57 O TLV 3-? */
6004 ELEM_OPT_TELV(BSSGP_IEI_LCS_PRIORITY, GSM_A_PDU_TYPE_BSSMAP, BE_LCS_PRIO, NULL);
6005 /* LCS QoS LCS QoS/11.3.50 O TLV 3-? */
6006 ELEM_OPT_TELV(BSSGP_IEI_LCS_QOS, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCSQOS, NULL);
6007 /* LCS Client Type (note 3) LCS Client Type/11.3.51 C TLV 3-? */
6008 ELEM_OPT_TELV(BSSGP_IEI_LCS_CLIENT_TYPE, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CLIENT_TYPE, NULL);
6009 /* Requested GPS Assistance Data (note 4) Requested GPS Assistance Data/11.3.52 O TLV 3-? */
6010 ELEM_OPT_TELV(BSSGP_IEI_REQUESTED_GPS_ASSISTANCE_DATA, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_REQ_GPS_ASSIST_D, NULL);
6011 /* IMEI (note 5) IMEI/11.3.91 O TLV 10 */
6012 ELEM_OPT_TELV(0x70,GSM_A_PDU_TYPE_COMMON, DE_MID, NULL);
6013 /* GANSS Location Type GANSS Location Type / 11.3.100 C TLV 3 */
6014 ELEM_OPT_TELV(0x7c, GSM_A_PDU_TYPE_BSSMAP, BE_GANSS_LOC_TYP, NULL);
6015 /* Requested GANSS Assistance Data (note 6) Requested GANSS Assistance Data/11.3.99 O TLV 3-? */
6016 ELEM_OPT_TLV(0x7b, GSM_A_PDU_TYPE_BSSMAP, BE_GANSS_ASS_DTA, NULL);
6017 /* eDRX Parameters (note 7) eDRX Parameters/11.3.122 O TLV 3 */
6018 ELEM_OPT_TELV(BSSGP_IEI_EDRX_PARAMETERS, BSSGP_PDU_TYPE, DE_BSSGP_EDRX_PARAMS, NULL);
6019 /* Coverage Class Coverage Class/11.3.124 O TLV 3 */
6020 ELEM_OPT_TELV(BSSGP_IEI_COVERAGE_CLASS, BSSGP_PDU_TYPE, DE_BSSGP_COVERAGE_CLASS, NULL);
6021 /* MS Radio Access Capability (note 8) MS Radio Access Capability/11.3.22 O TLV 7 ? */
6022 ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_MS_RADIO_ACCESS_CAPABILITY, GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP, NULL);
6023 /* MultilaterationTiming Advance (note 9) MultilaterationTiming Advance/11.3.137 O TLV 4 */
6024 /* MS Sync Accuracy (note 9) MS Sync Accuracy/11.3.138 O TLV 3 */
6025 /* BTS Reception Accuracy Level (note 9) BTS Reception Accuracy Level/11.3.139 O TLV 3 */
6027 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
6031 * 10.5.2 PERFORM-LOCATION-RESPONSE
6033 static void
6034 bssgp_perform_loc_response(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
6036 uint32_t curr_offset;
6037 uint32_t consumed;
6038 unsigned curr_len;
6040 curr_offset = offset;
6041 curr_len = len;
6043 /*This PDU allows the BSS to respond to the SGSN after the completion of the location procedure. */
6044 /* Direction: BSS to SGSN */
6045 pinfo->link_dir = P2P_DIR_UL;
6047 /* TLLI TLLI/11.3.35 M TLV 6 */
6048 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
6049 /* BVCI (PCU-PTP) BVCI/11.3.6 M TLV 4 */
6050 ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI, " - (PCU-PTP)", ei_bssgp_missing_mandatory_element);
6051 /* Location Estimate (note 1) Location Estimate/11.3.54 C TLV 3-? */
6052 ELEM_OPT_TELV(BSSGP_IEI_LOCATION_ESTIMATE, GSM_A_PDU_TYPE_BSSMAP, BE_LOC_EST, NULL);
6053 /* Positioning Data Positioning Data/11.3.55 O TLV 3-? */
6054 ELEM_OPT_TELV(BSSGP_IEI_POSITIONING_DATA, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_POS_DATA, NULL);
6055 /* Deciphering Keys (note 2) Deciphering Keys/11.3.56 C TLV 3-? */
6056 ELEM_OPT_TELV(BSSGP_IEI_DECIPHERING_KEYS, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_DECIPH_KEYS, NULL);
6057 /* LCS Cause (note 3) LCS Cause/11.3.58 O TLV 3-? */
6058 ELEM_OPT_TELV(BSSGP_IEI_LCS_CAUSE, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CAUSE, NULL);
6059 /* Velocity Data Velocity Data/11.3.96 O TLV 3-? */
6060 ELEM_OPT_TELV(0x78, BSSGP_PDU_TYPE, DE_BSSGP_VELOCITY_DATA, NULL);
6061 /* GANSS Positioning Data GANSS Positioning Data /11.3.101 O TLV 3-? */
6062 ELEM_OPT_TELV(0x7d, GSM_A_PDU_TYPE_BSSMAP, BE_GANSS_POS_DTA, NULL);
6064 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
6068 * 10.5.3 PERFORM-LOCATION-ABORT
6070 static void
6071 bssgp_perform_loc_response_abort(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
6073 uint32_t curr_offset;
6074 uint32_t consumed;
6075 unsigned curr_len;
6077 curr_offset = offset;
6078 curr_len = len;
6080 /*This PDU allows the SGSN to request the BSS to ABORT the LCS procedure */
6081 /* Direction: SGSN to BSS */
6082 pinfo->link_dir = P2P_DIR_DL;
6084 /* TLLI TLLI/11.3.35 M TLV 6 */
6085 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
6086 /* BVCI (PCU-PTP) BVCI/11.3.6 M TLV 4 */
6087 ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI, " - (PCU-PTP)", ei_bssgp_missing_mandatory_element);
6088 /* LCS Cause LCS Cause/11.3.58 M TLV 3-? */
6089 ELEM_MAND_TELV(BSSGP_IEI_LCS_CAUSE, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CAUSE, NULL, ei_bssgp_missing_mandatory_element);
6091 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
6095 * 10.5.4 POSITION-COMMAND
6097 static void
6098 bssgp_pos_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
6100 uint32_t curr_offset;
6101 uint32_t consumed;
6102 unsigned curr_len;
6104 curr_offset = offset;
6105 curr_len = len;
6107 /* This PDU allows the BSS to request the SGSN to perform the position command procedure. */
6108 /* Direction: BSS to SGSN */
6109 pinfo->link_dir = P2P_DIR_UL;
6111 /* TLLI TLLI/11.3.35 M TLV 6 */
6112 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
6113 /* BVCI (PCU-PTP) BVCI/11.3.6 M TLV 4 */
6114 ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI, " - (PCU-PTP)", ei_bssgp_missing_mandatory_element);
6115 /* RRLP Flags RRLP Flags/11.3.60 M TLV 3 */
6116 ELEM_MAND_TELV(BSSGP_IEI_RRLP_FLAGS, BSSGP_PDU_TYPE, DE_BSSGP_RRLP_FLAGS, NULL, ei_bssgp_missing_mandatory_element);
6117 /* RRLP APDU RRLP APDU/11.3.49 M TLV 3-? */
6118 ELEM_MAND_TELV(BSSGP_IEI_RRLP_APDU, BSSGP_PDU_TYPE, DE_BSSGP_RRLP_APDU, NULL, ei_bssgp_missing_mandatory_element);
6119 /* Multilateration Timer Multilateration Timer/11.3.136 O TLV 3 */
6120 /* Timing Advance Request Timing Advance Request/11.3.140 O TLV 3 */
6122 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
6126 * 10.5.5 POSITION-RESPONSE
6128 static void
6129 bssgp_pos_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
6131 uint32_t curr_offset;
6132 uint32_t consumed;
6133 unsigned curr_len;
6135 curr_offset = offset;
6136 curr_len = len;
6138 /* This PDU allows the SGSN to respond to the position command request procedure. */
6139 /* Direction: SGSN to BSS */
6140 pinfo->link_dir = P2P_DIR_DL;
6142 /* TLLI TLLI/11.3.35 M TLV 6 */
6143 ELEM_MAND_TELV(BSSGP_IEI_TLLI, GSM_A_PDU_TYPE_RR, DE_RR_TLLI, NULL, ei_bssgp_missing_mandatory_element);
6144 /* BVCI (PCU-PTP) BVCI/11.3.6 M TLV 4 */
6145 ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI, " - (PCU-PTP)", ei_bssgp_missing_mandatory_element);
6146 /* RRLP Flags a) RRLP Flags/11.3.60 C TLV 3 */
6147 ELEM_OPT_TELV(BSSGP_IEI_RRLP_FLAGS, BSSGP_PDU_TYPE, DE_BSSGP_RRLP_FLAGS , NULL);
6148 /* RRLP APDU a) RRLP APDU/11.3.49 C TLV 3-? */
6149 ELEM_OPT_TELV(BSSGP_IEI_RRLP_APDU, BSSGP_PDU_TYPE, DE_BSSGP_RRLP_APDU , NULL);
6150 /* LCS Cause b) LCS Cause/11.3.58 O TLV 3-? */
6151 ELEM_OPT_TELV(BSSGP_IEI_LCS_CAUSE, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CAUSE, NULL);
6153 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
6157 * 10.6 PDU functional definitions and contents at RIM SAP
6158 * 10.6.1 RAN-INFORMATION-REQUEST
6160 static void
6161 bssgp_ran_inf_request(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
6163 uint32_t curr_offset;
6164 uint32_t consumed;
6165 unsigned curr_len;
6167 curr_offset = offset;
6168 curr_len = len;
6170 /* The RAN-INFORMATION-REQUEST PDU allows a controlling BSS to request information from another BSS. */
6171 /* Direction: BSS to SGSN - SGSN to BSS */
6173 /* Destination Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */
6174 ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF, " - Destination Cell Identifier", ei_bssgp_missing_mandatory_element);
6175 /* Source Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */
6176 ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF, " - Source Cell Identifier", ei_bssgp_missing_mandatory_element);
6177 /* RIM Container RAN-INFORMATION-REQUEST RIM Container/11.3.62a.1 M TLV 3-? */
6178 ELEM_OPT_TELV(BSSGP_IEI_RAN_INF_REQUEST_RIM_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_INF_REQUEST_RIM_CONT, NULL);
6180 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
6184 * 10.6.2 RAN-INFORMATION
6186 static void
6187 bssgp_ran_inf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
6189 uint32_t curr_offset;
6190 uint32_t consumed;
6191 unsigned curr_len;
6193 curr_offset = offset;
6194 curr_len = len;
6196 /* The RAN-INFORMATION PDU allows a serving BSS to send information to a controlling BSS. */
6197 /* Direction: BSS to SGSN SGSN to BSS */
6199 /* Destination Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */
6200 ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF, " - Destination Cell Identifier", ei_bssgp_missing_mandatory_element);
6201 /* Source Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */
6202 ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF, " - Source Cell Identifier", ei_bssgp_missing_mandatory_element);
6203 /* RIM Container RAN-INFORMATION RIM Container/11.3.62a.2 M TLV 3-? */
6204 ELEM_MAND_TELV(BSSGP_IEI_RAN_INF_RIM_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_INF_RIM_CONT, " - Source Cell Identifier", ei_bssgp_missing_mandatory_element);
6207 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
6211 * 10.6.3 RAN-INFORMATION-ACK
6213 static void
6214 bssgp_ran_inf_request_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
6216 uint32_t curr_offset;
6217 uint32_t consumed;
6218 unsigned curr_len;
6220 curr_offset = offset;
6221 curr_len = len;
6223 /* The RAN-INFORMATION-ACK PDU allows a controlling BSS to acknowledge the reception of a RANINFORMATION
6224 * PDU and a serving BSS to acknowledge the reception of a RAN-INFORMATION-APPLICATIONERROR PDU.
6227 /* Direction: BSS to SGSN SGSN to BSS */
6229 /* Destination Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */
6230 ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF, " - Destination Cell Identifier", ei_bssgp_missing_mandatory_element);
6231 /* Source Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */
6232 ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF, " - Source Cell Identifier", ei_bssgp_missing_mandatory_element);
6233 /* RIM Container RAN-INFORMATION-ACK RIM Container/11.3.62a.3 M TLV 3-? */
6234 ELEM_MAND_TELV(BSSGP_IEI_RAN_INF_ACK_RIM_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_INFORMATION_ACK_RIM_CONT, NULL, ei_bssgp_missing_mandatory_element);
6236 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
6240 * 10.6.4 RAN-INFORMATION-ERROR
6243 static void
6244 bssgp_ran_inf_err(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
6246 uint32_t curr_offset;
6247 uint32_t consumed;
6248 unsigned curr_len;
6250 curr_offset = offset;
6251 curr_len = len;
6253 /* The RAN-INFORMATION-ERROR PDU allows a BSS to send an error PDU back to an originating BSS as a response
6254 * to a RAN-INFORMATION, a RAN-INFORMATION-REQUEST, a RAN-INFORMATION-ACK or a RANINFORMATION-APPLICATION-ERROR PDU.
6256 /* Direction: BSS to SGSN SGSN to BSS */
6258 pinfo->flags.in_error_pkt = true;
6260 /* Destination Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */
6261 ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF, " - Destination Cell Identifier", ei_bssgp_missing_mandatory_element);
6262 /* Source Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */
6263 ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF, " - Source Cell Identifier", ei_bssgp_missing_mandatory_element);
6264 /* RIM Container RAN-INFORMATION-ERROR RIM Container/11.3.62a.4 M TLV 3-? */
6265 ELEM_MAND_TELV(BSSGP_IEI_RAN_INF_ERROR_RIM_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_INFORMATION_ERROR_RIM_CONT, NULL, ei_bssgp_missing_mandatory_element);
6267 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
6270 * 10.6.5 RAN-INFORMATION-APPLICATION-ERROR
6272 static void
6273 bssgp_ran_inf_app_err(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
6275 uint32_t curr_offset;
6276 uint32_t consumed;
6277 unsigned curr_len;
6279 curr_offset = offset;
6280 curr_len = len;
6282 /* The RAN-INFORMATION-APPLICATION-ERROR PDU allows a controlling BSS to inform the serving BSS about
6283 * erroneous application information in a previously received RAN-INFORMATION PDU.
6286 /* Direction: BSS to SGSN SGSN to BSS */
6288 pinfo->flags.in_error_pkt = true;
6290 /* Destination Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */
6291 ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF, " - Destination Cell Identifier", ei_bssgp_missing_mandatory_element);
6292 /* Source Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */
6293 ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF, " - Source Cell Identifier", ei_bssgp_missing_mandatory_element);
6294 /* RIM Container RAN-INFORMATION-APPLICATION ERROR RIM Container/11.3.62a.5 M TLV 3-? */
6295 ELEM_MAND_TELV(BSSGP_IEI_RAN_INF_APP_ERROR_RIM_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_INF_APP_ERROR_RIM_CONT, NULL, ei_bssgp_missing_mandatory_element);
6297 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
6301 * 10.7 PDU functional definitions and contents at MBMS SAP
6302 * 10.7.1 MBMS-SESSION-START-REQUEST
6304 static void
6305 bssgp_mbms_session_start_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
6307 uint32_t curr_offset;
6308 uint32_t consumed;
6309 unsigned curr_len;
6311 curr_offset = offset;
6312 curr_len = len;
6314 /* This PDU allows a SGSN to request BSS to start an MBMS session. */
6316 /* Direction: SGSN to BSS */
6317 pinfo->link_dir = P2P_DIR_DL;
6319 /* TMGI TMGI/11.3.77 M TLV 3-8 */
6320 ELEM_MAND_TELV(0x5c, GSM_A_PDU_TYPE_GM, DE_TMGI, NULL, ei_bssgp_missing_mandatory_element);
6321 /* MBMS Session Identity MBMS Session Identity/11.3.71 O TLV 3 */
6322 ELEM_OPT_TELV(0x5d, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_ID, NULL);
6323 /* ABQP ABQP/11.3.43 M TLV 13-? */
6324 ELEM_MAND_TELV(0x3a , GSM_A_PDU_TYPE_GM, DE_QOS, NULL, ei_bssgp_missing_mandatory_element);
6325 /* MBMS Service Area Identity List MBMS Service Area Identity List/11.3.73 M TLV 4-? */
6326 ELEM_MAND_TELV(0x5f, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SAI_LIST, NULL, ei_bssgp_missing_mandatory_element);
6327 /* MBMS Routing Area List MBMS Routing Area List/11.3.75 M TLV 3-? */
6328 ELEM_MAND_TELV(0x61, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_RA_LIST, NULL, ei_bssgp_missing_mandatory_element);
6329 /* MBMS Session Duration MBMS Session Duration/11.3.72 M TLV 3-? */
6330 ELEM_MAND_TELV(0x5e, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_DUR, NULL, ei_bssgp_missing_mandatory_element);
6331 /* MBMS Session Information MBMS Session Information/11.3.76 M TLV 3 */
6332 ELEM_MAND_TELV(0x62, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_INF, NULL, ei_bssgp_missing_mandatory_element);
6333 /* Time to MBMS Data Transfer Time to MBMS Data Transfer/11.3.92 M TLV 3 */
6334 ELEM_MAND_TELV(0x71, BSSGP_PDU_TYPE, DE_BSSGP_TIME_TO_MBMS_DATA_TRAN, NULL, ei_bssgp_missing_mandatory_element);
6335 /* Allocation/Retention Priority Priority/11.3.27 O TLV 3 */
6336 ELEM_OPT_TELV(0x17, GSM_A_PDU_TYPE_BSSMAP, BE_PRIO, NULL);
6337 /* MBMS Session Repetition Number MBMS Session Repetition Number/11.3.93 O TLV 3 */
6338 ELEM_OPT_TELV(0x72, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_REP_NO, NULL);
6341 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
6344 * 10.7.2 MBMS-SESSION-START-RESPONSE
6346 static void
6347 bssgp_mbms_session_start_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
6349 uint32_t curr_offset;
6350 uint32_t consumed;
6351 unsigned curr_len;
6353 curr_offset = offset;
6354 curr_len = len;
6356 /* This PDU allows a BSS to acknowledge to SGSN that it will start an MBMS session or to indicate to SGSN why the
6357 * MBMS Service Context cannot be created or is released by the BSS.
6360 /* Direction: BSS to SGSN */
6361 pinfo->link_dir = P2P_DIR_UL;
6363 /* TMGI TMGI/ 11.3.77 M TLV 3-8 */
6364 ELEM_MAND_TELV(0x5c, GSM_A_PDU_TYPE_GM, DE_TMGI, NULL, ei_bssgp_missing_mandatory_element);
6365 /* MBMS Session Identity MBMS Session Identity/ 11.3.71 O TLV 3 */
6366 ELEM_OPT_TELV(0x5d, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_ID, NULL);
6367 /* MBMS Response MBMS Response/ 11.3.74 M TLV 3 */
6368 ELEM_OPT_TELV(0x60, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_RESPONSE, NULL);
6370 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
6374 * 10.7.3 MBMS-SESSION-STOP-REQUEST
6376 static void
6377 bssgp_mbms_session_stop_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
6379 uint32_t curr_offset;
6380 uint32_t consumed;
6381 unsigned curr_len;
6383 curr_offset = offset;
6384 curr_len = len;
6386 /* This PDU allows a SGSN to request BSS to stop an MBMS session. */
6388 /* Direction: SGSN to BSS */
6389 pinfo->link_dir = P2P_DIR_DL;
6391 /* TMGI TMGI/ 11.3.77 M TLV 3-8 */
6392 ELEM_MAND_TELV(0x5c, GSM_A_PDU_TYPE_GM, DE_TMGI, NULL, ei_bssgp_missing_mandatory_element);
6393 /* MBMS Session Identity MBMS Session Identity/ 11.3.71 O TLV 3 */
6394 ELEM_OPT_TELV(0x5d, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_ID, NULL);
6395 /* MBMS Stop Cause MBMS Stop Cause/11.3.78 M TLV 3 */
6396 ELEM_OPT_TELV(0x63, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_STOP_CAUSE, NULL);
6398 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
6401 * 10.7.4 MBMS-SESSION-STOP-RESPONSE
6403 static void
6404 bssgp_mbms_session_stop_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
6406 uint32_t curr_offset;
6407 uint32_t consumed;
6408 unsigned curr_len;
6410 curr_offset = offset;
6411 curr_len = len;
6413 /* This PDU allows a BSS to acknowledge to SGSN that it will stop an MBMS session. */
6415 /* Direction: BSS to SGSN */
6416 pinfo->link_dir = P2P_DIR_UL;
6418 /* TMGI TMGI/ 11.3.77 M TLV 3-8 */
6419 ELEM_MAND_TELV(0x5c, GSM_A_PDU_TYPE_GM, DE_TMGI, NULL, ei_bssgp_missing_mandatory_element);
6420 /* MBMS Session Identity MBMS Session Identity/ 11.3.71 O TLV 3 */
6421 ELEM_OPT_TELV(0x5d, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_ID, NULL);
6422 /* MBMS Response MBMS Response/ 11.3.74 M TLV 3 */
6423 ELEM_OPT_TELV(0x60, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_RESPONSE, NULL);
6425 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
6428 * 10.7.5 MBMS-SESSION-UPDATE-REQUEST
6430 static void
6431 bssgp_mbms_session_update_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
6433 uint32_t curr_offset;
6434 uint32_t consumed;
6435 unsigned curr_len;
6437 curr_offset = offset;
6438 curr_len = len;
6440 /* This PDU allows an SGSN to request BSS to update the MBMS service area list
6441 * of an ongoing MBMS broadcast service session.
6444 /* Direction: BSS to SGSN */
6445 pinfo->link_dir = P2P_DIR_UL;
6447 /* TMGI TMGI/ 11.3.77 M TLV 3-8 */
6448 ELEM_MAND_TELV(0x5c, GSM_A_PDU_TYPE_GM, DE_TMGI, NULL, ei_bssgp_missing_mandatory_element);
6449 /* MBMS Session Identity MBMS Session Identity/ 11.3.71 O TLV 3 */
6450 ELEM_OPT_TELV(0x5d, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_ID, NULL);
6451 /* ABQP ABQP/11.3.43 M TLV 13-? */
6452 ELEM_MAND_TELV(0x3a , GSM_A_PDU_TYPE_GM, DE_QOS, NULL, ei_bssgp_missing_mandatory_element);
6453 /* MBMS Service Area Identity List MBMS Service Area Identity List/11.3.73 M TLV 4-? */
6454 ELEM_MAND_TELV(0x5f, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SAI_LIST, NULL, ei_bssgp_missing_mandatory_element);
6455 /* MBMS Routing Area List MBMS Routing Area List/11.3.75 M TLV 3-? */
6456 ELEM_MAND_TELV(0x61, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_RA_LIST, NULL, ei_bssgp_missing_mandatory_element);
6457 /* MBMS Session Duration MBMS Session Duration/11.3.72 M TLV 3-? */
6458 ELEM_MAND_TELV(0x5e, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_DUR, NULL, ei_bssgp_missing_mandatory_element);
6459 /* MBMS Session Information MBMS Session Information/11.3.76 M TLV 3 */
6460 ELEM_MAND_TELV(0x62, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_INF, NULL, ei_bssgp_missing_mandatory_element);
6461 /* Time to MBMS Data Transfer Time to MBMS Data Transfer/11.3.92 M TLV 3 */
6462 ELEM_MAND_TELV(0x71, BSSGP_PDU_TYPE, DE_BSSGP_TIME_TO_MBMS_DATA_TRAN, NULL, ei_bssgp_missing_mandatory_element);
6463 /* Allocation/Retention Priority Priority/11.3.27 O TLV 3 */
6464 ELEM_OPT_TELV(0x17, GSM_A_PDU_TYPE_BSSMAP, BE_PRIO, NULL);
6465 /* MBMS Session Repetition Number MBMS Session Repetition Number/11.3.93 O TLV 3 */
6466 ELEM_OPT_TELV(0x72, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_REP_NO, NULL);
6468 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
6471 * 10.7.6 MBMS-SESSION-UPDATE-RESPONSE
6473 static void
6474 bssgp_mbms_session_uptate_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
6476 uint32_t curr_offset;
6477 uint32_t consumed;
6478 unsigned curr_len;
6480 curr_offset = offset;
6481 curr_len = len;
6483 /* This PDU allows a BSS to acknowledge to SGSN that it will update the MBMS service area list of an ongoing MBMS
6484 * broadcast service session or to indicate to SGSN why the MBMS Service Context cannot be created or is released by the BSS.
6487 /* Direction: BSS to SGSN */
6488 pinfo->link_dir = P2P_DIR_UL;
6490 /* TMGI TMGI/ 11.3.77 M TLV 3-8 */
6491 ELEM_MAND_TELV(0x5c, GSM_A_PDU_TYPE_GM, DE_TMGI, NULL, ei_bssgp_missing_mandatory_element);
6492 /* MBMS Session Identity MBMS Session Identity/ 11.3.71 O TLV 3 */
6493 ELEM_OPT_TELV(0x5d, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_ID, NULL);
6494 /* MBMS Response MBMS Response/ 11.3.74 M TLV 3 */
6495 ELEM_OPT_TELV(0x60, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_RESPONSE, NULL);
6497 EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_bssgp_extraneous_data);
6500 static const value_string bssgp_msg_strings[] = {
6501 /* 0x00 */ { BSSGP_PDU_DL_UNITDATA, "DL-UNITDATA" }, /* 10.2.1 DL-UNITDATA */
6502 /* 0x01 */ { BSSGP_PDU_UL_UNITDATA, "UL-UNITDATA" }, /* 10.2.2 UL-UNITDATA */
6503 /* 0x02 */ { BSSGP_PDU_RA_CAPABILITY, "RA-CAPABILITY" }, /* 10.2.3 RA-CAPABILITY */
6504 /* NOTE 1: This value was allocated in an earlier version of the protocol and shall not be used */
6505 /* 0x03 */ { BSSGP_PDU_PTM_UNITDATA, "Reserved" }, /* 10.2.4 (void) */
6506 /* 0x04 */ { BSSGP_PDU_DL_MBMS_UNITDATA, "DL-MBMS-UNITDATA" }, /* 10.2.5 DL-MBMS-UNITDATA */
6507 /* 0x05 */ { BSSGP_PDU_UL_MBMS_UNITDATA, "UL-MBMS-UNITDATA" }, /* 10.2.6 UL-MBMS-UNITDATA */
6508 /* 0x06 */ { BSSGP_PDU_PAGING_PS, "PAGING-PS" }, /* 10.3.1 PAGING PS */
6509 /* 0x07 */ { BSSGP_PDU_PAGING_CS, "PAGING-CS" }, /* 10.3.2 PAGING CS */
6510 /* 0x08 */ { BSSGP_PDU_RA_CAPABILITY_UPDATE, "RA-CAPABILITY-UPDATE" }, /* 10.3.3 RA-CAPABILITY-UPDATE */
6511 /* 0x09 */ { BSSGP_PDU_RA_CAPABILITY_UPDATE_ACK, "RA-CAPABILITY-UPDATE-ACK" }, /* 10.3.4 RA-CAPABILITY-UPDATE-ACK */
6512 /* 0x0a */ { BSSGP_PDU_RADIO_STATUS, "RADIO-STATUS" }, /* 10.3.5 RADIO-STATUS */
6513 /* 0x0b */ { BSSGP_PDU_SUSPEND, "SUSPEND" }, /* 10.3.6 SUSPEND */
6514 /* 0x0c */ { BSSGP_PDU_SUSPEND_ACK, "SUSPEND-ACK" }, /* 10.3.7 SUSPEND-ACK */
6515 /* 0x0d */ { BSSGP_PDU_SUSPEND_NACK, "SUSPEND-NACK" }, /* 10.3.8 SUSPEND-NACK */
6516 /* 0x0e */ { BSSGP_PDU_RESUME, "RESUME" }, /* 10.3.9 RESUME */
6517 /* 0x0f */ { BSSGP_PDU_RESUME_ACK, "RESUME-ACK" }, /* 10.3.10 RESUME-ACK */
6518 /* 0x10 */ { BSSGP_PDU_RESUME_NACK, "RESUME-NACK" }, /* 10.3.11 RESUME-NACK */
6519 /* 0x11 */ { BSSGP_PDU_PAGING_PS_REJECT, "PAGING-PS-REJECT" }, /* 10.3.14 PAGING PS REJECT */
6520 /* 0x12 */ { BSSGP_PDU_DUMMY_PAGING_PS, "DUMMY-PAGING-PS" }, /* 10.3.12 DUMMY PAGING PS */
6521 /* 0x13 */ { BSSGP_PDU_DUMMY_PAGING_PS_RESPONSE, "DUMMY-PAGING-PS-RESPONSE" }, /* 10.3.13 DUMMY PAGING PS RESPONSE */
6523 /* 0x14 to 0x1f Reserved */
6524 /* 0x14 */ { BSSGP_PDU_MS_REG_ENQ, "MS-REGISTRATION-ENQUIRY" }, /* 10.3.15 MS REGISTRATION ENQUIRY */
6525 /* 0x15 */ { BSSGP_PDU_MS_REG_ENQ_RESP, "MS-REGISTRATION-ENQUIRY-RESPONSE" }, /* 10.3.16 MS REGISTRATION ENQUIRY RESPONSE */
6526 /* 0x16 */ { BSSGP_PDU_RESERVED_0X16, "Reserved" }, /* */
6527 /* 0x17 */ { BSSGP_PDU_RESERVED_0X17, "Reserved" }, /* */
6528 /* 0x18 */ { BSSGP_PDU_RESERVED_0X18, "Reserved" }, /* */
6529 /* 0x19 */ { BSSGP_PDU_RESERVED_0X19, "Reserved" }, /* */
6530 /* 0x1a */ { BSSGP_PDU_RESERVED_0X1A, "Reserved" }, /* */
6531 /* 0x1b */ { BSSGP_PDU_RESERVED_0X1B, "Reserved" }, /* */
6532 /* 0x1c */ { BSSGP_PDU_RESERVED_0X1C, "Reserved" }, /* */
6533 /* 0x1d */ { BSSGP_PDU_RESERVED_0X1D, "Reserved" }, /* */
6534 /* 0x1e */ { BSSGP_PDU_RESERVED_0X1E, "Reserved" }, /* */
6535 /* 0x1f */ { BSSGP_PDU_RESERVED_0X1F, "Reserved" }, /* */
6537 /* 0x20 */ { BSSGP_PDU_BVC_BLOCK, "BVC-BLOCK" }, /* 10.4.8 BVC-BLOCK */
6538 /* 0x21 */ { BSSGP_PDU_BVC_BLOCK_ACK, "BVC-BLOCK-ACK" }, /* 10.4.9 BVC-BLOCK-ACK */
6539 /* 0x22 */ { BSSGP_PDU_BVC_RESET, "BVC-RESET" }, /* 10.4.12 BVC-RESET */
6540 /* 0x23 */ { BSSGP_PDU_BVC_RESET_ACK, "BVC-RESET-ACK" }, /* 10.4.13 BVC-RESET-ACK */
6541 /* 0x24 */ { BSSGP_PDU_BVC_UNBLOCK, "UNBLOCK" }, /* 10.4.10 BVC-UNBLOCK */
6542 /* 0x25 */ { BSSGP_PDU_BVC_UNBLOCK_ACK, "UNBLOCK-ACK" }, /* 10.4.11 BVC-UNBLOCK-ACK */
6543 /* 0x26 */ { BSSGP_PDU_FLOW_CONTROL_BVC, "FLOW-CONTROL-BVC" }, /* 10.4.4 FLOW-CONTROL-BVC */
6544 /* 0x27 */ { BSSGP_PDU_FLOW_CONTROL_BVC_ACK, "FLOW-CONTROL-BVC-ACK" }, /* 10.4.5 FLOW-CONTROL-BVC-ACK */
6545 /* 0x28 */ { BSSGP_PDU_FLOW_CONTROL_MS, "FLOW-CONTROL-MS" }, /* 10.4.6 FLOW-CONTROL-MS */
6546 /* 0x29 */ { BSSGP_PDU_FLOW_CONTROL_MS_ACK, "FLOW-CONTROL-MS-ACK" }, /* 10.4.7 FLOW-CONTROL-MS-ACK */
6547 /* 0x2a */ { BSSGP_PDU_FLUSH_LL, "FLUSH-LL" }, /* 10.4.1 FLUSH-LL */
6548 /* 0x2b */ { BSSGP_PDU_FLUSH_LL_ACK, "FLUSH_LL_ACK" }, /* 10.4.2 FLUSH-LL-ACK */
6549 /* 0x2c */ { BSSGP_PDU_LLC_DISCARDED, "LLC-DISCARDED" }, /* 10.4.3 LLC-DISCARDED */
6550 /* 0x2d */ { BSSGP_PDU_FLOW_CONTROL_PFC, "FLOW-CONTROL-PFC" }, /* 10.4.24 FLOW-CONTROL-PFC */
6551 /* 0x2e */ { BSSGP_PDU_FLOW_CONTROL_PFC_ACK, "FLOW-CONTROL-PFC-ACK" }, /* 10.4.25 FLOW-CONTROL-PFC-ACK */
6552 /* 0x2f to 0x3f Reserved */
6553 /* 0x2f */ { BSSGP_PDU_RESERVED_0X2F, "Reserved" }, /* */
6554 /* 0x30 */ { BSSGP_PDU_RESERVED_0X30, "Reserved" }, /* */
6555 /* 0x31 */ { BSSGP_PDU_RESERVED_0X31, "Reserved" }, /* */
6556 /* 0x32 */ { BSSGP_PDU_RESERVED_0X32, "Reserved" }, /* */
6557 /* 0x33 */ { BSSGP_PDU_RESERVED_0X33, "Reserved" }, /* */
6558 /* 0x34 */ { BSSGP_PDU_RESERVED_0X34, "Reserved" }, /* */
6559 /* 0x35 */ { BSSGP_PDU_RESERVED_0X35, "Reserved" }, /* */
6560 /* 0x36 */ { BSSGP_PDU_RESERVED_0X36, "Reserved" }, /* */
6561 /* 0x37 */ { BSSGP_PDU_RESERVED_0X37, "Reserved" }, /* */
6562 /* 0x38 */ { BSSGP_PDU_RESERVED_0X38, "Reserved" }, /* */
6563 /* 0x39 */ { BSSGP_PDU_RESERVED_0X39, "Reserved" }, /* */
6564 /* 0x3a */ { BSSGP_PDU_RESERVED_0X3A, "Reserved" }, /* */
6565 /* 0x3b */ { BSSGP_PDU_RESERVED_0X3B, "Reserved" }, /* */
6566 /* 0x3c */ { BSSGP_PDU_RESERVED_0X3C, "Reserved" }, /* */
6567 /* 0x3d */ { BSSGP_PDU_RESERVED_0X3D, "Reserved" }, /* */
6568 /* 0x3e */ { BSSGP_PDU_RESERVED_0X3E, "Reserved" }, /* */
6569 /* 0x3f */ { BSSGP_PDU_RESERVED_0X3F, "Reserved" }, /* */
6571 /* 0x40 */ { BSSGP_PDU_SGSN_INVOKE_TRACE, "SGSN-INVOKE-TRACE" }, /* 10.4.15 SGSN-INVOKE-TRACE */
6572 /* 0x41 */ { BSSGP_PDU_STATUS, "STATUS" }, /* 10.4.14 STATUS */
6573 /* 0x42 */ { BSSGP_PDU_OVERLOAD, "OVERLOAD" }, /* 10.4.36 OVERLOAD */
6574 /* 0x43 to 0x4f Reserved */
6575 /* 0x43 */ { BSSGP_PDU_RESERVED_0X43, "Reserved" }, /* */
6576 /* 0x44 */ { BSSGP_PDU_RESERVED_0X44, "Reserved" }, /* */
6577 /* 0x45 */ { BSSGP_PDU_RESERVED_0X45, "Reserved" }, /* */
6578 /* 0x46 */ { BSSGP_PDU_RESERVED_0X46, "Reserved" }, /* */
6579 /* 0x47 */ { BSSGP_PDU_RESERVED_0X47, "Reserved" }, /* */
6580 /* 0x48 */ { BSSGP_PDU_RESERVED_0X48, "Reserved" }, /* */
6581 /* 0x49 */ { BSSGP_PDU_RESERVED_0X49, "Reserved" }, /* */
6582 /* 0x4a */ { BSSGP_PDU_RESERVED_0X4A, "Reserved" }, /* */
6583 /* 0x4b */ { BSSGP_PDU_RESERVED_0X4B, "Reserved" }, /* */
6584 /* 0x4c */ { BSSGP_PDU_RESERVED_0X4C, "Reserved" }, /* */
6585 /* 0x4d */ { BSSGP_PDU_RESERVED_0X4D, "Reserved" }, /* */
6586 /* 0x4e */ { BSSGP_PDU_RESERVED_0X4E, "Reserved" }, /* */
6587 /* 0x4f */ { BSSGP_PDU_RESERVED_0X4F, "Reserved" }, /* */
6588 /* 0x50 */ { BSSGP_PDU_DOWNLOAD_BSS_PFC, "DOWNLOAD-BSS-PFC" }, /* 10.4.16 DOWNLOAD-BSS-PFC */
6589 /* 0x51 */ { BSSGP_PDU_CREATE_BSS_PFC, "CREATE-BSS-PFC" }, /* 10.4.17 CREATE-BSS-PFC */
6590 /* 0x52 */ { BSSGP_PDU_CREATE_BSS_PFC_ACK, "CREATE-BSS-PFC-ACK" }, /* 10.4.18 CREATE-BSS-PFC-ACK */
6591 /* 0x53 */ { BSSGP_PDU_CREATE_BSS_PFC_NACK, "CREATE-BSS-PFC-NACK" }, /* 10.4.19 CREATE-BSS-PFC-NACK */
6592 /* 0x54 */ { BSSGP_PDU_MODIFY_BSS_PFC, "MODIFY-BSS-PFC" }, /* 10.4.20 MODIFY-BSS-PFC */
6593 /* 0x55 */ { BSSGP_PDU_MODIFY_BSS_PFC_ACK, "MODIFY-BSS-PFC-ACK" }, /* 10.4.21 MODIFY-BSS-PFC-ACK */
6594 /* 0x56 */ { BSSGP_PDU_DELETE_BSS_PFC, "DELETE-BSS-PFC" }, /* 10.4.22 DELETE-BSS-PFC */
6595 /* 0x57 */ { BSSGP_PDU_DELETE_BSS_PFC_ACK, "DELETE-BSS-PFC-ACK" }, /* 10.4.23 DELETE-BSS-PFC-ACK */
6596 /* 0x58 */ { BSSGP_PDU_DELETE_BSS_PFC_REQ, "DELETE-BSS-PFC-REQ" }, /* 10.4.26 DELETE-BSS-PFC-REQ */
6597 /* 0x59 */ { BSSGP_PDU_PS_HANDOVER_REQUIRED, "PS-HANDOVER-REQUIRED" }, /* 10.4.27 PS-HANDOVER-REQUIRED */
6598 /* 0x5a */ { BSSGP_PDU_PS_HANDOVER_REQUIRED_ACK, "PS-HANDOVER-REQUIRED-ACK" }, /* 10.4.28 PS-HANDOVER-REQUIRED-ACK */
6599 /* 0x5b */ { BSSGP_PDU_PS_HANDOVER_REQUIRED_NACK, "PS-HANDOVER-REQUIRED-NACK" }, /* 10.4.29 PS-HANDOVER-REQUIRED-NACK */
6600 /* 0x5c */ { BSSGP_PDU_PS_HANDOVER_REQUEST, "PS-HANDOVER-REQUEST" }, /* 10.4.30 PS-HANDOVER-REQUEST */
6601 /* 0x5d */ { BSSGP_PDU_PS_HANDOVER_REQUEST_ACK, "PS-HANDOVER-REQUEST-ACK" }, /* 10.4.31 PS-HANDOVER-REQUEST-ACK */
6602 /* 0x5e */ { BSSGP_PDU_PS_HANDOVER_REQUEST_NACK, "PS-HANDOVER-REQUEST-NACK" }, /* 10.4.31 10.4.32 PS-HANDOVER-REQUEST-NACK */
6604 /* 0x5f */ { BSSGP_PDU_RESERVED_0X5F, "Reserved" }, /* */
6606 /* 0x60 */ { BSSGP_PDU_PERFORM_LOCATION_REQUEST, "PERFORM-LOCATION-REQUEST" }, /* 10.5.1 PERFORM-LOCATION-REQUEST */
6607 /* 0x61 */ { BSSGP_PDU_PERFORM_LOCATION_RESPONSE, "PERFORM-LOCATION-RESPONSE" }, /* 10.5.2 PERFORM-LOCATION-RESPONSE */
6608 /* 0x62 */ { BSSGP_PDU_PERFORM_LOCATION_ABORT, "PERFORM-LOCATION-ABORT" }, /* 10.5.3 PERFORM-LOCATION-ABORT */
6609 /* 0x63 */ { BSSGP_PDU_POSITION_COMMAND, "POSITION-COMMAND" }, /* 10.5.4 POSITION-COMMAND */
6610 /* 0x64 */ { BSSGP_PDU_POSITION_RESPONSE, "POSITION-RESPONSE" }, /* 10.5.5 POSITION-RESPONSE */
6612 /* 0x65 */ { BSSGP_PDU_RESERVED_0X65, "Reserved" }, /* */
6613 /* 0x66 */ { BSSGP_PDU_RESERVED_0X66, "Reserved" }, /* */
6614 /* 0x67 */ { BSSGP_PDU_RESERVED_0X67, "Reserved" }, /* */
6615 /* 0x68 */ { BSSGP_PDU_RESERVED_0X68, "Reserved" }, /* */
6616 /* 0x69 */ { BSSGP_PDU_RESERVED_0X69, "Reserved" }, /* */
6617 /* 0x6a */ { BSSGP_PDU_RESERVED_0X6A, "Reserved" }, /* */
6618 /* 0x6b */ { BSSGP_PDU_RESERVED_0X6B, "Reserved" }, /* */
6619 /* 0x6b */ { BSSGP_PDU_RESERVED_0X6C, "Reserved" }, /* */
6620 /* 0x6d */ { BSSGP_PDU_RESERVED_0X6D, "Reserved" }, /* */
6621 /* 0x6e */ { BSSGP_PDU_RESERVED_0X6E, "Reserved" }, /* */
6622 /* 0x6f */ { BSSGP_PDU_RESERVED_0X6F, "Reserved" }, /* */
6624 /* 0x70 */ { BSSGP_PDU_RAN_INFORMATION, "RAN-INFORMATION" }, /* 10.6.2 RAN-INFORMATION */
6625 /* 0x71 */ { BSSGP_PDU_RAN_INFORMATION_REQUEST, "RAN-INFORMATION-REQUEST" }, /* 10.6.1 RAN-INFORMATION-REQUEST */
6626 /* 0x72 */ { BSSGP_PDU_RAN_INFORMATION_ACK, "RAN-INFORMATION-ACK" }, /* 10.6.3 RAN-INFORMATION-ACK */
6627 /* 0x73 */ { BSSGP_PDU_RAN_INFORMATION_ERROR, "RAN-INFORMATION-ERROR" }, /* 10.6.4 RAN-INFORMATION-ERROR */
6628 /* 0x74 */ { BSSGP_PDU_RAN_INFORMATION_APP_ERROR, "RAN-INFORMATION-APPLICATION-ERROR" }, /* 10.6.5 RAN-INFORMATION-APPLICATION-ERROR */
6629 /* 0x75 */ { BSSGP_PDU_RESERVED_0X75, "Reserved" }, /* */
6630 /* 0x76 */ { BSSGP_PDU_RESERVED_0X76, "Reserved" }, /* */
6631 /* 0x77 */ { BSSGP_PDU_RESERVED_0X77, "Reserved" }, /* */
6632 /* 0x78 */ { BSSGP_PDU_RESERVED_0X78, "Reserved" }, /* */
6633 /* 0x79 */ { BSSGP_PDU_RESERVED_0X79, "Reserved" }, /* */
6634 /* 0x7a */ { BSSGP_PDU_RESERVED_0X7A, "Reserved" }, /* */
6635 /* 0x7b */ { BSSGP_PDU_RESERVED_0X7B, "Reserved" }, /* */
6636 /* 0x7c */ { BSSGP_PDU_RESERVED_0X7C, "Reserved" }, /* */
6637 /* 0x7d */ { BSSGP_PDU_RESERVED_0X7D, "Reserved" }, /* */
6638 /* 0x7e */ { BSSGP_PDU_RESERVED_0X7E, "Reserved" }, /* */
6639 /* 0x7f */ { BSSGP_PDU_RESERVED_0X7F, "Reserved" }, /* */
6640 /* 0x80 */ { BSSGP_PDU_MBMS_SESSION_START_REQ, "MBMS-SESSION-START-REQUEST" }, /* 10.7.1 MBMS-SESSION-START-REQUEST */
6641 /* 0x81 */ { BSSGP_PDU_MBMS_SESSION_START_RESP, "MBMS-SESSION-START-RESPONSE" }, /* 10.7.2 MBMS-SESSION-START-RESPONSE */
6642 /* 0x82 */ { BSSGP_PDU_MBMS_SESSION_STOP_REQ, "MBMS-SESSION-STOP-REQUEST" }, /* 10.7.3 MBMS-SESSION-STOP-REQUEST */
6643 /* 0x83 */ { BSSGP_PDU_MBMS_SESSION_STOP_RESP, "MBMS-SESSION-STOP-RESPONSE" }, /* 10.7.4 MBMS-SESSION-STOP-RESPONSE */
6644 /* 0x84 */ { BSSGP_PDU_MBMS_SESSION_UPDATE_REQ, "MBMS-SESSION-UPDATE-REQUEST" }, /* 10.7.5 MBMS-SESSION-UPDATE-REQUEST */
6645 /* 0x85 */ { BSSGP_PDU_MBMS_SESSION_UPDATE_RESP, "MBMS-SESSION-UPDATE-RESPONSE" },/* 10.7.6 MBMS-SESSION-UPDATE-RESPONSE */
6647 /* 0x86 */ { BSSGP_PDU_RESERVED_0X86, "Reserved" }, /* */
6648 /* 0x87 */ { BSSGP_PDU_RESERVED_0X87, "Reserved" }, /* */
6649 /* 0x88 */ { BSSGP_PDU_RESERVED_0X88, "Reserved" }, /* */
6650 /* 0x89 */ { BSSGP_PDU_RESERVED_0X89, "Reserved" }, /* */
6651 /* 0x8a */ { BSSGP_PDU_RESERVED_0X8A, "Reserved" }, /* */
6652 /* 0x8b */ { BSSGP_PDU_RESERVED_0X8B, "Reserved" }, /* */
6653 /* 0x8c */ { BSSGP_PDU_RESERVED_0X8C, "Reserved" }, /* */
6654 /* 0x8d */ { BSSGP_PDU_RESERVED_0X8D, "Reserved" }, /* */
6655 /* 0x8e */ { BSSGP_PDU_RESERVED_0X8E, "Reserved" }, /* */
6656 /* 0x8f */ { BSSGP_PDU_RESERVED_0X8F, "Reserved" }, /* */
6657 /* 0x90 */ { BSSGP_PDU_RESERVED_0X90, "Reserved" }, /* */
6659 /* 0x91 */ {BSSGP_PDU_PS_HANDOVER_COMPLETE, "PS-HANDOVER-COMPLETE" }, /* 10.4.33 PS-HANDOVER-COMPLETE */
6660 /* 0x92 */ {BSSGP_PDU_PS_HANDOVER_CANCEL, "PS-HANDOVER-CANCEL" }, /* 10.4.34 PS-HANDOVER-CANCEL */
6661 /* 0x93 */ {BSSGP_PDU_PS_HANDOVER_COMPLETE_ACK, "PS-HANDOVER-COMPLETE-ACK" }, /* 10.4.35 PS-HANDOVER-COMPLETE-ACK*/
6663 { 0, NULL }
6665 static value_string_ext bssgp_msg_strings_ext = VALUE_STRING_EXT_INIT(bssgp_msg_strings);
6667 #define NUM_BSSGP_MSG array_length(bssgp_msg_strings)
6668 static int ett_bssgp_msg[NUM_BSSGP_MSG];
6669 static void (*bssgp_msg_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len) = {
6670 /* 0x00 to 0x10 */
6671 bssgp_dl_unitdata, /* 10.2.1 DL-UNITDATA */
6672 bssgp_ul_unitdata, /* 10.2.2 UL-UNITDATA */
6673 bssgp_ra_cap, /* 10.2.3 RA-CAPABILITY */
6674 NULL, /* 10.2.4 (void) */
6675 bssgp_dl_mbms_unitdata, /* 10.2.5 DL-MBMS-UNITDATA */
6676 bssgp_ul_mbms_unitdata, /* 10.2.6 UL-MBMS-UNITDATA */
6677 bssgp_paging_ps, /* 10.3.1 PAGING PS */
6678 bssgp_paging_cs, /* 10.3.2 PAGING CS */
6679 bssgp_ra_cap_upd, /* 10.3.3 RA-CAPABILITY-UPDATE */
6680 bssgp_ra_cap_upd_ack, /* 10.3.3 RA-CAPABILITY-UPDATE */
6681 bssgp_ra_status, /* 10.3.5 RADIO-STATUS */
6682 bssgp_suspend, /* 10.3.6 SUSPEND */
6683 bssgp_suspend_ack, /* 10.3.7 SUSPEND-ACK */
6684 bssgp_suspend_nack, /* 10.3.8 SUSPEND-NACK */
6685 bssgp_resume, /* 10.3.9 RESUME */
6686 bssgp_resume_ack, /* 10.3.10 RESUME-ACK */
6687 bssgp_resume_nack, /* 10.3.11 RESUME-NACK */
6688 bssgp_paging_ps_reject, /* 10.3.12 PAGING PS REJECT */
6689 bssgp_dummy_paging_ps, /* 10.3.13 DUMMY PAGING PS */
6690 bssgp_dummy_paging_ps_response, /* 10.3.13 DUMMY PAGING PS RESPONSE */
6692 /* 0x14 to 0x1f Reserved */
6693 NULL, /* 0x14 */
6694 NULL, /* 0x15 */
6695 NULL, /* 0x16 */
6696 NULL, /* 0x17 */
6697 NULL, /* 0x18 */
6698 NULL, /* 0x19 */
6699 NULL, /* 0x1A */
6700 NULL, /* 0x1B */
6701 NULL, /* 0x1C */
6702 NULL, /* 0x1D */
6703 NULL, /* 0x1E */
6704 NULL, /* 0x1F */
6706 /* 0x20 to 0x2e */
6707 bssgp_bvc_block, /* 10.4.8 BVC-BLOCK */
6708 bssgp_bvc_block_ack, /* 10.4.9 BVC-BLOCK-ACK */
6709 bssgp_bvc_reset, /* 10.4.12 BVC-RESET */
6710 bssgp_bvc_reset_ack, /* 10.4.13 BVC-RESET-ACK */
6711 bssgp_bvc_un_block, /* 10.4.10 BVC-UNBLOCK */
6712 bssgp_bvc_un_block_ack, /* 10.4.11 BVC-UNBLOCK-ACK */
6713 bssgp_flow_control_bvc, /* 10.4.4 FLOW-CONTROL-BVC */
6714 bssgp_flow_control_bvc_ack, /* 10.4.5 FLOW-CONTROL-BVC-ACK */
6715 bssgp_flow_control_ms, /* 10.4.6 FLOW-CONTROL-MS */
6716 bssgp_flow_control_ms_ack, /* 10.4.7 FLOW-CONTROL-MS-ACK */
6717 bssgp_flush_ll, /* 10.4.1 FLUSH-LL */
6718 bssgp_flush_ll_ack, /* 10.4.2 FLUSH-LL-ACK */
6719 bssgp_llc_discarded, /* 10.4.3 LLC-DISCARDED */
6720 bssgp_flow_cntrl_pfc, /* 10.4.24 FLOW-CONTROL-PFC */
6721 bssgp_flow_cntrl_pfc_ack, /* 10.4.25 FLOW-CONTROL-PFC-ACK */
6723 /* 0x2f to 0x3f Reserved */
6724 NULL, /* 0x2f */
6725 NULL, /* 0x30 */
6726 NULL, /* 0x31 */
6727 NULL, /* 0x32 */
6728 NULL, /* 0x33 */
6729 NULL, /* 0x34 */
6730 NULL, /* 0x35 */
6731 NULL, /* 0x36 */
6732 NULL, /* 0x37 */
6733 NULL, /* 0x38 */
6734 NULL, /* 0x39 */
6735 NULL, /* 0x3A */
6736 NULL, /* 0x3B */
6737 NULL, /* 0x3C */
6738 NULL, /* 0x3D */
6739 NULL, /* 0x3E */
6740 NULL, /* 0x3F */
6742 /* 0x40 to 0x41 */
6743 bssgp_sgsn_invoke_trace, /* 10.4.15 SGSN-INVOKE-TRACE */
6744 bssgp_status, /* 10.4.14 STATUS */
6745 bssgp_overload, /* 10.4.36 OVERLOAD 0x42 */
6747 /* 0x43 to 0x4f Reserved */
6748 NULL, /* 0x43 */
6749 NULL, /* 0x44 */
6750 NULL, /* 0x45 */
6751 NULL, /* 0x46 */
6752 NULL, /* 0x47 */
6753 NULL, /* 0x48 */
6754 NULL, /* 0x49 */
6755 NULL, /* 0x4A */
6756 NULL, /* 0x4B */
6757 NULL, /* 0x4C */
6758 NULL, /* 0x4D */
6759 NULL, /* 0x4E */
6760 NULL, /* 0x4F */
6762 /* 0x50 to 0x5e */
6763 bssgp_download_bss_pfc, /* 10.4.16 DOWNLOAD-BSS-PFC */
6764 bssgp_create_bss_pfc, /* 10.4.17 CREATE-BSS-PFC */
6765 bssgp_create_bss_pfc_ack, /* 10.4.18 CREATE-BSS-PFC-ACK */
6766 bssgp_create_bss_pfc_nack, /* 10.4.19 CREATE-BSS-PFC-NACK */
6767 bssgp_modify_bss_pfc, /* 10.4.20 MODIFY-BSS-PFC */
6768 bssgp_modify_bss_pfc_ack, /* 10.4.21 MODIFY-BSS-PFC-ACK */
6769 bssgp_delete_bss_pfc, /* 10.4.22 DELETE-BSS-PFC */
6770 bssgp_delete_bss_pfc_ack, /* 10.4.23 DELETE-BSS-PFC-ACK */
6771 bssgp_delete_bss_pfc_req, /* 10.4.26 DELETE-BSS-PFC-REQ */
6772 bssgp_ps_ho_required, /* 10.4.27 PS-HANDOVER-REQUIRED */
6773 bssgp_ps_ho_required_ack, /* 10.4.28 PS-HANDOVER-REQUIRED-ACK */
6774 bssgp_ps_ho_required_nack, /* 10.4.29 PS-HANDOVER-REQUIRED-NACK */
6775 bssgp_ps_ho_request, /* 10.4.30 PS-HANDOVER-REQUEST */
6776 bssgp_ps_ho_request_ack, /* 10.4.31 PS-HANDOVER-REQUEST-ACK */
6777 bssgp_ps_ho_request_nack, /* 10.4.31 10.4.32 PS-HANDOVER-REQUEST-NACK */
6779 /* 0x5f Reserved */
6780 NULL, /* 0x5F */
6782 /* 0x60 */
6783 bssgp_perform_loc_request, /* 10.5.1 PERFORM-LOCATION-REQUEST */
6784 bssgp_perform_loc_response, /* 10.5.2 PERFORM-LOCATION-RESPONSE */
6785 bssgp_perform_loc_response_abort, /* 10.5.3 PERFORM-LOCATION-ABORT */
6786 bssgp_pos_cmd, /* 10.5.4 POSITION-COMMAND */
6787 bssgp_pos_resp, /* 10.5.5 POSITION-RESPONSE */
6789 /* 0x65 to 0x6f Reserved */
6790 NULL, /* 0x65 */
6791 NULL, /* 0x66 */
6792 NULL, /* 0x67 */
6793 NULL, /* 0x68 */
6794 NULL, /* 0x69 */
6795 NULL, /* 0x6a */
6796 NULL, /* 0x6b */
6797 NULL, /* 0x6c */
6798 NULL, /* 0x6d */
6799 NULL, /* 0x6e */
6800 NULL, /* 0x6f */
6801 bssgp_ran_inf, /* 10.6.2 RAN-INFORMATION */
6802 bssgp_ran_inf_request, /* 10.6.1 RAN-INFORMATION-REQUEST */
6803 bssgp_ran_inf_request_ack, /* 10.6.3 RAN-INFORMATION-ACK */
6804 bssgp_ran_inf_err, /* 10.6.4 RAN-INFORMATION-ERROR */
6805 bssgp_ran_inf_app_err, /* 10.6.5 RAN-INFORMATION-APPLICATION-ERROR */
6806 NULL, /* 0x75 */
6807 NULL, /* 0x76 */
6808 NULL, /* 0x77 */
6809 NULL, /* 0x78 */
6810 NULL, /* 0x79 */
6811 NULL, /* 0x7a */
6812 NULL, /* 0x7b */
6813 NULL, /* 0x7c */
6814 NULL, /* 0x7d */
6815 NULL, /* 0x7e */
6816 NULL, /* 0x7f */
6817 bssgp_mbms_session_start_req, /* 10.7.1 MBMS-SESSION-START-REQUEST */
6818 bssgp_mbms_session_start_resp, /* 10.7.2 MBMS-SESSION-START-RESPONSE */
6819 bssgp_mbms_session_stop_req, /* 10.7.3 MBMS-SESSION-STOP-REQUEST */
6820 bssgp_mbms_session_stop_resp, /* 10.7.4 MBMS-SESSION-STOP-RESPONSE */
6821 bssgp_mbms_session_update_req, /* 10.7.5 MBMS-SESSION-UPDATE-REQUEST */
6822 bssgp_mbms_session_uptate_resp, /* 10.7.6 MBMS-SESSION-UPDATE-RESPONSE */
6823 NULL, /* 0x86 */
6824 NULL, /* 0x87 */
6825 NULL, /* 0x88 */
6826 NULL, /* 0x89 */
6827 NULL, /* 0x8a */
6828 NULL, /* 0x8b */
6829 NULL, /* 0x8c */
6830 NULL, /* 0x8d */
6831 NULL, /* 0x8e */
6832 NULL, /* 0x8f */
6833 NULL, /* 0x90 */
6834 bssgp_ps_ho_complete, /* 0x91 10.4.33 PS-HANDOVER-COMPLETE */
6835 bssgp_ps_ho_cancel, /* 0x92 10.4.34 PS-HANDOVER-CANCEL */
6836 bssgp_ps_ho_complete_ack, /* 0x93 10.4.35 PS-HANDOVER-COMPLETE-ACK*/
6837 NULL, /* NONE */
6840 static void get_bssgp_msg_params(uint8_t oct, const char **msg_str, int *ett_tree, int *hf_idx, msg_fcn *msg_fcn_p)
6842 int idx;
6844 *msg_str = try_val_to_str_idx_ext((uint32_t) (oct & 0xff), &bssgp_msg_strings_ext, &idx);
6845 *hf_idx = hf_bssgp_msg_type;
6846 if (*msg_str != NULL) {
6847 *ett_tree = ett_bssgp_msg[idx];
6848 *msg_fcn_p = bssgp_msg_fcn[idx];
6851 return;
6854 static int
6855 dissect_bssgp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
6858 proto_item *ti;
6859 proto_tree *bssgp_tree = NULL;
6860 int offset = 0;
6861 uint32_t len;
6862 const char *msg_str = NULL;
6863 int ett_tree;
6864 int hf_idx;
6865 void (*msg_fcn_p)(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len);
6867 /* Save pinfo */
6868 g_rim_application_identity = 0;
6869 g_bssgp_ran_inf_pdu_t_ext_c = 0xfffffff;
6870 gparent_tree = tree;
6871 len = tvb_reported_length(tvb);
6873 col_set_str(pinfo->cinfo, COL_PROTOCOL, "BSSGP");
6875 col_clear(pinfo->cinfo, COL_INFO);
6878 g_pdu_type = tvb_get_uint8(tvb,offset);
6879 ti = proto_tree_add_item(tree, proto_bssgp, tvb, 0, -1, ENC_NA);
6880 bssgp_tree = proto_item_add_subtree(ti, ett_bssgp);
6882 /* Messge type IE*/
6883 msg_fcn_p = NULL;
6884 ett_tree = -1;
6885 hf_idx = -1;
6886 msg_str = NULL;
6888 get_bssgp_msg_params(g_pdu_type, &msg_str, &ett_tree, &hf_idx, &msg_fcn_p);
6890 if(msg_str){
6891 col_add_str(pinfo->cinfo, COL_INFO, msg_str);
6892 }else{
6893 expert_add_info_format(pinfo, ti, &ei_bssgp_msg_type, "Unknown message 0x%x", g_pdu_type);
6894 return 1;
6898 * Add BSSGP message name
6900 proto_tree_add_item(bssgp_tree, hf_idx, tvb, offset, 1, ENC_BIG_ENDIAN);
6901 offset++;
6905 * decode elements
6907 if (msg_fcn_p == NULL)
6909 proto_tree_add_item(bssgp_tree, hf_bssgp_message_elements, tvb, offset, len - offset, ENC_NA);
6911 else
6913 (*msg_fcn_p)(tvb, bssgp_tree, pinfo, offset, len - offset);
6915 return tvb_captured_length(tvb);
6918 void
6919 proto_register_bssgp(void)
6921 unsigned i;
6922 unsigned last_offset;
6924 static hf_register_info hf[] = {
6925 { &hf_bssgp_msg_type,
6926 { "PDU Type", "bssgp.pdu_type",
6927 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &bssgp_msg_strings_ext, 0x0,
6928 NULL, HFILL }
6930 { &hf_bssgp_elem_id,
6931 { "Element ID", "bssgp.elem_id",
6932 FT_UINT8, BASE_HEX, NULL, 0,
6933 NULL, HFILL }
6935 { &hf_bssgp_bss_area_ind,
6936 { "BSS indicator", "bssgp.bss_ind",
6937 FT_UINT8, BASE_HEX, NULL, 0x0,
6938 NULL, HFILL }
6940 { &hf_bssgp_bvci,
6941 { "BVCI", "bssgp.bvci",
6942 FT_UINT16, BASE_HEX, NULL, 0x0,
6943 NULL, HFILL }
6945 { &hf_bssgp_bmax,
6946 { "Bmax(x 100 or in increments as defined by the Flow Control Granularity IE)", "bssgp.bmax",
6947 FT_UINT16, BASE_DEC, NULL, 0x0,
6948 NULL, HFILL }
6950 { &hf_bssgp_r,
6951 { "R(x 100 or in increments as defined by the Flow Control Granularity IE)", "bssgp.r",
6952 FT_UINT16, BASE_DEC, NULL, 0x0,
6953 NULL, HFILL }
6955 { &hf_bssgp_r_pfc,
6956 { "R_PFC(x 100 or in increments as defined by the Flow Control Granularity IE)", "bssgp.r_pfc",
6957 FT_UINT16, BASE_DEC, NULL, 0x0,
6958 NULL, HFILL }
6960 { &hf_bssgp_bucket_size,
6961 { "Bmax(x 100 or in increments as defined by the Flow Control Granularity IE)", "bssgp.bucket_size",
6962 FT_UINT16, BASE_DEC, NULL, 0x0,
6963 NULL, HFILL }
6965 { &hf_bssgp_bmax_pfc,
6966 { "Bmax_PFC(x 100 or in increments as defined by the Flow Control Granularity IE)", "bssgp.bmax_pfc",
6967 FT_UINT16, BASE_DEC, NULL, 0x0,
6968 NULL, HFILL }
6970 { &hf_bssgp_omc_id,
6971 { "OMC identity", "bssgp.omc_id",
6972 FT_BYTES, BASE_NONE, NULL, 0x0,
6973 NULL, HFILL }
6975 { &hf_bssgp_nsei,
6976 { "NSEI", "bssgp.nsei",
6977 FT_UINT16, BASE_HEX, NULL, 0x0,
6978 NULL, HFILL }
6980 { &hf_bssgp_rrlp_flag1,
6981 { "Flag 1", "bssgp.rrlp_flag1",
6982 FT_BOOLEAN, 8, TFS(&bssgp_rrlp_flg1_vals), 0x01,
6983 NULL, HFILL }
6985 { &hf_bssgp_ci,
6986 { "CI", "bssgp.ci",
6987 FT_UINT16, BASE_HEX, NULL, 0x0,
6988 "Cell Identity", HFILL }
6990 { &hf_bssgp_flush_action,
6991 { "Action", "bssgp.flush_action",
6992 FT_UINT8, BASE_DEC, VALS(bssgp_flush_action_vals), 0x0,
6993 NULL, HFILL }
6995 { &hf_bssgp_llc_frames_disc,
6996 { "Number of frames discarded", "bssgp.llc_frames_disc",
6997 FT_UINT8, BASE_DEC, NULL, 0x0,
6998 NULL, HFILL }
7000 { &hf_bssgp_ra_discriminator,
7001 { "Routing Address Discriminator", "bssgp.rad",
7002 FT_UINT8, BASE_DEC, VALS(bssgp_ra_discriminator_vals), 0x0f,
7003 NULL, HFILL }
7005 { &hf_bssgp_rim_app_id,
7006 { "RIM Application Identity", "bssgp.rim_app_id",
7007 FT_UINT8, BASE_DEC, VALS(bssgp_rim_appid_vals), 0x0,
7008 NULL, HFILL }
7010 { &hf_bssgp_rim_seq_no,
7011 { "RIM Sequence Number", "bssgp.rim_seq_no",
7012 FT_UINT32, BASE_DEC, NULL, 0x0,
7013 NULL, HFILL }
7015 { &hf_bssgp_rat_discriminator,
7016 { "RAT discriminator", "bssgp.rat_discriminator",
7017 FT_UINT8, BASE_DEC, VALS(bssgp_rat_discriminator_vals), 0x0f,
7018 NULL, HFILL }
7020 { &hf_bssgp_nacc_cause,
7021 { "NACC Cause", "bssgp.nacc_cause",
7022 FT_UINT8, BASE_DEC, VALS(bssgp_nacc_cause_vals), 0x0,
7023 NULL, HFILL }
7025 { &hf_bssgp_si3_cause,
7026 { "SI3 Cause", "bssgp.si3_cause",
7027 FT_UINT8, BASE_DEC, VALS(bssgp_si3_cause_vals), 0x0,
7028 NULL, HFILL }
7030 { &hf_bssgp_mbms_data_ch_cause,
7031 { "MBMS data channel Cause", "bssgp.mbms_data_ch_cause",
7032 FT_UINT8, BASE_DEC, VALS(bssgp_mbms_data_ch_cause_vals), 0x0,
7033 NULL, HFILL }
7035 { &hf_bssgp_utra_si_cause,
7036 { "UTRA SI Cause", "bssgp.utra_si_cause",
7037 FT_UINT8, BASE_DEC, VALS(bssgp_utra_si_cause_vals), 0x0,
7038 NULL, HFILL }
7040 { &hf_bssgp_num_si_psi,
7041 { "Number of SI/PSI", "bssgp.num_si_psi",
7042 FT_UINT8, BASE_DEC, NULL, 0xfe,
7043 NULL, HFILL }
7045 {&hf_bssgp_si_psi_type,
7046 { "Type", "bssgp.si_psi_type",
7047 FT_BOOLEAN, 8, TFS(&bssgp_si_psi_type_vals), 0x01,
7048 NULL, HFILL }
7050 { &hf_bssgp_ran_inf_req_pdu_t_ext_c,
7051 { "PDU Type Extension", "bssgp.ran_inf_req_pdu_t_ext_c",
7052 FT_UINT8, BASE_DEC, VALS(bssgp_ran_inf_req_pdu_t_ext_c_vals), 0x0e,
7053 NULL, HFILL }
7055 { &hf_bssgp_ran_inf_pdu_t_ext_c,
7056 { "PDU Type Extension", "bssgp.ran_inf_pdu_t_ext_c",
7057 FT_UINT8, BASE_DEC, VALS(bssgp_ran_inf_pdu_t_ext_c_vals), 0x0e,
7058 NULL, HFILL }
7060 {&hf_bssgp_rim_pdu_ind_ack,
7061 { "ACK", "bssgp.rim_pdu_ind_ack",
7062 FT_BOOLEAN, 8, TFS(&bssgp_rim_pdu_ind_ack_vals), 0x01,
7063 NULL, HFILL }
7065 { &hf_bssgp_rim_proto_ver_no,
7066 { "RIM Protocol Version Number", "bssgp.rim_proto_ver_no",
7067 FT_UINT8, BASE_DEC, VALS(bssgp_rim_proto_ver_no_vals), 0x0,
7068 NULL, HFILL }
7070 { &hf_bssgp_delay_val,
7071 { "Delay Value (in centi-seconds)", "bssgp.delay_val",
7072 FT_UINT16, BASE_DEC, NULL, 0x0,
7073 NULL, HFILL }
7075 { &hf_bssgp_cause,
7076 { "Cause", "bssgp.cause",
7077 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &bssgp_cause_vals_ext, 0x0,
7078 NULL, HFILL }
7080 { &hf_bssgp_peak_rate_gran,
7081 { "Peak Bit Rate Granularity", "bssgp.peak_rate_gran",
7082 FT_UINT8, BASE_DEC, NULL, 0xc0,
7083 NULL, HFILL }
7085 { &hf_bssgp_cr_bit,
7086 { "C/R", "bssgp.cr_bit",
7087 FT_BOOLEAN, 8, TFS(&bssgp_cr_bit_vals), 0x20,
7088 NULL, HFILL }
7090 { &hf_bssgp_t_bit,
7091 { "T", "bssgp.t_bit",
7092 FT_BOOLEAN, 8, TFS(&bssgp_t_bit_vals), 0x10,
7093 NULL, HFILL }
7095 { &hf_bssgp_a_bit,
7096 { "A", "bssgp.a_bit",
7097 FT_BOOLEAN, 8, TFS(&bssgp_a_bit_vals), 0x08,
7098 NULL, HFILL }
7100 { &hf_bssgp_ra_cause,
7101 { "Radio Cause", "bssgp.ra_cause",
7102 FT_UINT8, BASE_DEC, VALS(bssgp_radio_cause_vals), 0x00,
7103 NULL, HFILL }
7105 { &hf_bssgp_ra_cap_upd_cause,
7106 { "RA-Cap-UPD Cause", "bssgp.ra_cap_upd_cause",
7107 FT_UINT8, BASE_DEC, VALS(bssgp_ra_cap_upd_cause_vals), 0x00,
7108 NULL, HFILL }
7110 { &hf_bssgp_r_default_ms,
7111 { "R_default_MS(x 100 or in increments as defined by the Flow Control Granularity IE)", "bssgp.r_default_ms",
7112 FT_UINT16, BASE_DEC, NULL, 0x0,
7113 NULL, HFILL }
7116 { &hf_bssgp_suspend_ref_no,
7117 { "Suspend Reference Number", "bssgp.suspend_ref_no",
7118 FT_UINT8, BASE_DEC, NULL, 0x00,
7119 NULL, HFILL }
7121 { &hf_bssgp_tag,
7122 { "Tag", "bssgp.tag",
7123 FT_UINT8, BASE_DEC, NULL, 0x00,
7124 NULL, HFILL }
7126 { &hf_bssgp_trace_ref,
7127 { "Trace Reference", "bssgp.trace_ref",
7128 FT_UINT16, BASE_DEC, NULL, 0x00,
7129 NULL, HFILL }
7131 { &hf_bssgp_trigger_id,
7132 { "Entity Identity", "bssgp.entity_id",
7133 FT_BYTES, BASE_NONE, NULL, 0x00,
7134 NULL, HFILL }
7136 { &hf_bssgp_transaction_id,
7137 { "Transaction Id", "bssgp.transaction_id",
7138 FT_UINT16, BASE_DEC, NULL, 0x00,
7139 NULL, HFILL }
7141 { &hf_bssgp_no_of_oct,
7142 { "Number of octets transferred or deleted", "bssgp.no_of_oct",
7143 FT_UINT24, BASE_DEC, NULL, 0x00,
7144 NULL, HFILL }
7146 { &hf_bssgp_unit_val,
7147 { "Unit Value", "bssgp.unit_val",
7148 FT_UINT8, BASE_DEC, VALS(bssgp_unit_vals), 0xe0,
7149 NULL, HFILL }
7151 { &hf_bssgp_gprs_timer,
7152 { "Unit Value", "bssgp.gprs_timer",
7153 FT_UINT8, BASE_DEC, NULL, 0x1f,
7154 NULL, HFILL }
7157 { &hf_bssgp_mbms,
7158 { "MBMS Procedures", "bssgp.mbms",
7159 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
7160 NULL, HFILL }
7162 { &hf_bssgp_EnhancedRadioStatus,
7163 { "Enhanced Radio Status Procedures", "bssgp.enhancedradiostatus",
7164 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
7165 NULL, HFILL }
7167 { &hf_bssgp_pfcfc,
7168 { "PFC Flow Control Procedures", "bssgp.pfcfc",
7169 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
7170 NULL, HFILL }
7172 { &hf_bssgp_rim,
7173 { "RAN Information Management (RIM) procedures", "bssgp.rim",
7174 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
7175 NULL, HFILL }
7177 { &hf_bssgp_lcs,
7178 { "LCS Procedures", "bssgp.lcs",
7179 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
7180 NULL, HFILL }
7182 { &hf_bssgp_inr,
7183 { "Inter-NSE re-routing(INR)", "bssgp.inr",
7184 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
7185 NULL, HFILL }
7187 { &hf_bssgp_cbl,
7188 { "Current Bucket Level(CBL) Procedures", "bssgp.cbl",
7189 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
7190 NULL, HFILL }
7192 { &hf_bssgp_pfc,
7193 { "Packet Flow Context(PFC) Procedures", "bssgp.pfc",
7194 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
7195 NULL, HFILL }
7197 { &hf_bssgp_bucket_full_ratio,
7198 { "Ratio of the bucket that is filled up with data", "bssgp.bucket_full_ratio",
7199 FT_UINT8, BASE_DEC, NULL, 0x0,
7200 "B current x (100 / Bmax)", HFILL }
7202 { &hf_bssgp_b_pfc,
7203 { "B_PFC: Bucket Full Ratio of the PFC", "bssgp.b_pfc",
7204 FT_UINT8, BASE_DEC, NULL, 0x0,
7205 "B current x (100 / Bmax)", HFILL }
7208 { &hf_bssgp_precedence,
7209 { "Precedence", "bssgp.precedence",
7210 FT_UINT8, BASE_DEC, NULL, 0x07,
7211 NULL, HFILL }
7213 { &hf_bssgp_serv_utran_cco,
7214 { "Service UTRAN CCO", "bssgp.serv_utran_cco",
7215 FT_UINT8, BASE_DEC, VALS(bssgp_service_utran_cco_vals), 0x07,
7216 NULL, HFILL }
7218 { &hf_bssgp_mbms_session_id,
7219 { "MBMS Session ID", "bssgp.mbms_session_id",
7220 FT_UINT8, BASE_DEC, NULL, 0x0,
7221 NULL, HFILL }
7223 { &hf_bssgp_mbms_cause,
7224 { "Cause", "bssgp.mbms_cause",
7225 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &bssgp_mbms_cause_vals_ext, 0x0f,
7226 NULL, HFILL }
7228 { &hf_bssgp_mbms_stop_cause,
7229 { "Stop Cause", "bssgp.mbms_stop_cause",
7230 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &bssgp_mbms_stop_cause_vals_ext, 0x0f,
7231 NULL, HFILL }
7233 { &hf_bssgp_session_inf,
7234 { "BC/MC", "bssgp.session_inf",
7235 FT_BOOLEAN, 8, TFS(&tfs_bssgp_bc_mc), 0x01,
7236 NULL, HFILL }
7238 { &hf_bssgp_mbms_num_ra_ids,
7239 { "Number of Routing Area Identifications", "bssgp.mbms_num_ra_ids",
7240 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &bssgp_mbms_num_ra_ids_vals_ext, 0xf0,
7241 NULL, HFILL }
7243 { &hf_bssgp_eDRX,
7244 { "eDRX", "bssgp.edrx",
7245 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
7246 NULL, HFILL }
7248 { &hf_bssgp_dcn,
7249 { "DCN(Dedicated Core Network)", "bssgp.dcn",
7250 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
7251 NULL, HFILL }
7253 { &hf_bssgp_ec_gsm_iot,
7254 { "EC-GSM-IoT", "bssgp.ec_gsm_iot",
7255 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
7256 NULL, HFILL }
7258 { &hf_bssgp_csps_coord,
7259 { "CS/PS COORD", "bssgp.csps_coord",
7260 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
7261 NULL, HFILL }
7263 { &hf_bssgp_mocn,
7264 { "MOCN", "bssgp.mocn",
7265 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
7266 NULL, HFILL }
7268 { &hf_bssgp_gb_if,
7269 { "Gigabit Interface", "bssgp.gb_if",
7270 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
7271 NULL, HFILL }
7273 { &hf_bssgp_ps_ho,
7274 { "PS Handover", "bssgp.ps_ho",
7275 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
7276 NULL, HFILL }
7278 { &hf_bssgp_src_to_trg_transp_cont,
7279 { "Source to Target Transparent Container", "bssgp.src_to_trg_transp_cont",
7280 FT_BYTES, FT_NONE, NULL, 0x0,
7281 NULL, HFILL }
7283 { &hf_bssgp_trg_to_src_transp_cont,
7284 { "Target to Source Transparent Container", "bssgp.trg_to_src_transp_cont",
7285 FT_BYTES, FT_NONE, NULL, 0x0,
7286 NULL, HFILL }
7288 { &hf_bssgp_rnc_id,
7289 { "RNC ID", "bssgp.rnc_id",
7290 FT_UINT16, BASE_DEC, NULL, 0x0,
7291 NULL, HFILL }
7293 { &hf_bssgp_page_mode,
7294 { "PAGE_MODE", "bssgp.page_mode",
7295 FT_UINT8, BASE_DEC, VALS(bssgp_page_mode_vals), 0x03,
7296 NULL, HFILL }
7298 { &hf_bssgp_container_id,
7299 { "Container ID", "bssgp.container_id",
7300 FT_UINT8, BASE_DEC, NULL, 0x03,
7301 NULL, HFILL }
7303 { &hf_bssgp_global_tfi,
7304 { "Global TFI", "bssgp.global_tfi",
7305 FT_UINT8, BASE_DEC, VALS(bssgp_global_tfi_vals), 0x0,
7306 NULL, HFILL }
7308 { &hf_bssgp_ul_tfi,
7309 { "UPLINK_TFI", "bssgp.ul_tfi",
7310 FT_UINT8, BASE_DEC, NULL, 0x0,
7311 NULL, HFILL }
7313 { &hf_bssgp_dl_tfi,
7314 { "DOWNLINK_TFI", "bssgp.dl_tfi",
7315 FT_UINT8, BASE_DEC, NULL, 0x0,
7316 NULL, HFILL }
7318 { &hf_bssgp_time_to_MBMS_data_tran,
7319 { "Time to MBMS Data Transfer", "bssgp.time_to_mbms_data_tran",
7320 FT_UINT8, BASE_DEC, NULL, 0x0,
7321 NULL, HFILL }
7323 { &hf_bssgp_mbms_session_rep_no,
7324 { "MBMS-Session-Repetition-Number", "bssgp.mbms_session_rep_no",
7325 FT_UINT8, BASE_DEC, NULL, 0x0,
7326 NULL, HFILL }
7328 { &hf_bssgp_ps_ho_cmd,
7329 { "PS Handover Command", "bssgp.ps_ho_cmd",
7330 FT_BYTES, BASE_NONE, NULL, 0x0,
7331 NULL, HFILL }
7333 { &hf_bssgp_sipsi,
7334 { "SI/PSI", "bssgp.sipsi",
7335 FT_BOOLEAN, 8, TFS(&tfs_requested_not_requested), 0x01,
7336 NULL, HFILL }
7338 { &hf_bssgp_type,
7339 { "Type", "bssgp.type",
7340 FT_UINT8, BASE_DEC, VALS(type_vals), 0x01,
7341 NULL, HFILL }
7343 { &hf_bssgp_cs_indication,
7344 { "CS Indication Contents", "bssgp.cs_indication",
7345 FT_UINT8, BASE_HEX, NULL, 0x0,
7346 NULL, HFILL }
7349 { &hf_bssgp_flow_control_gran,
7350 { "Granularity", "bssgp.flow_control_gran",
7351 FT_UINT8, BASE_DEC, VALS(bssgp_flow_control_gran_vals), 0x03,
7352 NULL, HFILL }
7354 { &hf_bssgp_serv_eutran_cco,
7355 { "Service EUTRAN CCO", "bssgp.serv_eutran_cco",
7356 FT_UINT8, BASE_DEC, VALS(bssgp_service_eutran_cco_vals), 0x18,
7357 NULL, HFILL }
7359 { &hf_bssgp_sub_prof_id_f_rat_freq_prio,
7360 { "Subscriber Profile ID for RAT/Frequency priority", "bssgp.sub_prof_id_f_rat_freq_prio",
7361 FT_UINT8, BASE_DEC, NULL, 0x0,
7362 NULL, HFILL }
7364 { &hf_bssgp_eutran_irat_ho_inf_req,
7365 { "E-UTRAN Inter RAT Handover Info", "bssgp.eutran_irat_ho_inf_req",
7366 FT_BOOLEAN, 8, TFS(&tfs_requested_not_requested), 0x02,
7367 NULL, HFILL }
7369 { &hf_bssgp_irat_ho_inf_req,
7370 { "Inter RAT Handover Info", "bssgp.irat_ho_inf_req",
7371 FT_BOOLEAN, 8, TFS(&tfs_requested_not_requested), 0x01,
7372 NULL, HFILL }
7375 { &hf_bssgp_rel_int_rat_ho_inf_ind,
7376 { "Inter RAT Handover Info", "bssgp.rel_int_rat_ho_inf_ind",
7377 FT_BOOLEAN, 8, TFS(&tfs_reliable_not_reliable), 0x01,
7378 NULL, HFILL }
7380 { &hf_bssgp_csg_id,
7381 { "CSG Identity (CSG-ID)", "bssgp.csg_id",
7382 FT_UINT32, BASE_HEX, NULL, 0xffffff0f,
7383 NULL, HFILL }
7385 { &hf_bssgp_cell_acc_mode,
7386 { "Cell Access Mode", "bssgp.cell_acc_mode",
7387 FT_UINT8, BASE_DEC, VALS(bssgp_cell_access_mode_vals), 0x01,
7388 NULL, HFILL }
7390 { &hf_bssgp_redir_complete_outcome,
7391 { "Outcome Value", "bssgp.redir_complete_outcome",
7392 FT_UINT8, BASE_HEX, VALS(bssgp_redir_complete_outcome_vals), 0x0,
7393 NULL, HFILL }
7395 { &hf_bssgp_redir_indication_reroute_reject_cause,
7396 { "Reroute Reject Cause Value", "bssgp.redir_indication_reroute_reject_cause",
7397 FT_UINT8, BASE_HEX, VALS(bssgp_redir_indication_reroute_reject_cause_vals), 0x0,
7398 NULL, HFILL }
7400 { &hf_bssgp_unconfirm_send_state_var,
7401 { "Unconfirmed Send State Variable V(U)", "bssgp.unconfirm_send_state_var",
7402 FT_UINT16, BASE_DEC, NULL, 0x01ff,
7403 NULL, HFILL }
7405 { &hf_bssgp_Global_ENB_ID_PDU,
7406 { "Global-ENB-ID", "bssgp.Global_ENB_ID",
7407 FT_NONE, BASE_NONE, NULL, 0,
7408 NULL, HFILL }
7410 { &hf_bssgp_SONtransferRequestContainer_PDU,
7411 { "SONtransferRequestContainer", "bssgp.SONtransferRequestContainer",
7412 FT_UINT32, BASE_DEC, VALS(s1ap_SONtransferRequestContainer_vals), 0,
7413 NULL, HFILL }},
7415 { &hf_bssgp_plmn_id,
7416 { "PLMN ID", "bssgp.plmn_id",
7417 FT_STRING, BASE_NONE, NULL, 0,
7418 NULL, HFILL }},
7420 { &hf_bssgp_num_pfc,
7421 { "Number of PFCs", "bssgp.num_pfc",
7422 FT_UINT16, BASE_DEC, NULL, 0x01ff,
7423 NULL, HFILL }
7426 { &hf_bssgp_llc_data,
7427 { "LLC DATA", "bssgp.llc_data",
7428 FT_BYTES, BASE_NONE, NULL, 0,
7429 NULL, HFILL }},
7431 { &hf_bssgp_pdu_data,
7432 { "PDU DATA", "bssgp.pdu_data",
7433 FT_BYTES, BASE_NONE, NULL, 0,
7434 NULL, HFILL }},
7436 { &hf_bssgp_rrlp_apdu,
7437 { "RRLP APDU", "bssgp.rrlp_apdu",
7438 FT_BYTES, BASE_NONE, NULL, 0,
7439 NULL, HFILL }},
7441 { &hf_bssgp_dtm_handover_command_data,
7442 { "DTM Handover Command data", "bssgp.dtm_handover_command_data",
7443 FT_BYTES, BASE_NONE, NULL, 0,
7444 NULL, HFILL }},
7446 { &hf_bssgp_message_elements,
7447 { "Message Elements", "bssgp.message_elements",
7448 FT_BYTES, BASE_NONE, NULL, 0,
7449 NULL, HFILL }},
7451 { &hf_bssgp_spare,
7452 { "Spare octet(s)", "bssgp.spare",
7453 FT_BYTES, BASE_NONE, NULL, 0,
7454 NULL, HFILL }},
7456 { &hf_bssgp_si,
7457 { "SI", "bssgp.si",
7458 FT_BYTES, BASE_NONE, NULL, 0,
7459 NULL, HFILL }},
7461 { &hf_bssgp_psi,
7462 { "PSI", "bssgp.psi",
7463 FT_BYTES, BASE_NONE, NULL, 0,
7464 NULL, HFILL }},
7466 { &hf_bssgp_peak_bit_rate,
7467 { "Peak bit rate", "bssgp.peak_bit_rate",
7468 FT_UINT16, BASE_DEC, NULL, 0,
7469 NULL, HFILL }},
7471 { &hf_bssgp_sys_info_type3_msg,
7472 { "SYSTEM INFORMATION type 3 message", "bssgp.sys_info_type3_msg",
7473 FT_BYTES, BASE_NONE, NULL, 0,
7474 NULL, HFILL }},
7476 { &hf_bssgp_trace_type_data,
7477 { "Trace Type data ( Coding unknown (Specification withdrawn) 3GPP TS 32.008)", "bssgp.trace_type_data",
7478 FT_BYTES, BASE_NONE, NULL, 0,
7479 NULL, HFILL }},
7481 { &hf_bssgp_si_item,
7482 { "SI item", "bssgp.si_item",
7483 FT_BYTES, BASE_NONE, NULL, 0,
7484 NULL, HFILL }},
7485 { &hf_bssgp_edrx_cycle_value,
7486 { "eDRX Cycle Value", "bssgp.edrx_cycle_value",
7487 FT_UINT8, BASE_HEX, VALS(bssgp_edrx_cycle_vals), 0x0f,
7488 NULL, HFILL }},
7490 { &hf_bssgp_tunpo_minutes,
7491 { "Minutes", "bssgp.tunpo_minutes",
7492 FT_UINT8, BASE_DEC, NULL, 0x3F,
7493 NULL, HFILL } },
7495 { &hf_bssgp_tunpo_seconds,
7496 { "Seconds", "bssgp.tunpo_seconds",
7497 FT_UINT8, BASE_DEC, NULL, 0x3F,
7498 NULL, HFILL } },
7500 { &hf_bssgp_ec_dl_coverage_class,
7501 { "DL Coverage Class", "bssgp.ec_dl_coverage_class",
7502 FT_UINT8, BASE_DEC, VALS(bssgp_ec_dl_coverage_class_vals), 0x38,
7503 NULL, HFILL } },
7505 { &hf_bssgp_ec_ul_coverage_class,
7506 { "UL Coverage Class", "bssgp.ec_ul_coverage_class",
7507 FT_UINT8, BASE_DEC, VALS(bssgp_ec_ul_coverage_class_vals), 0x07,
7508 NULL, HFILL } },
7510 { &hf_bssgp_sci,
7511 { "SCI", "bssgp.sci",
7512 FT_UINT8, BASE_DEC, NULL, 0,
7513 NULL, HFILL } },
7515 { &hf_bssgp_ggsn_pgw_location,
7516 { "GGSN/P-GW location", "bssgp.ggsn_pgw_location",
7517 FT_UINT8, BASE_DEC, VALS(bssgp_ggsn_pgw_location_vals), 0x0,
7518 NULL, HFILL } },
7520 { &hf_bssgp_pei,
7521 { "Positioning Event Indicator(PEI)", "bssgp.pei",
7522 FT_UINT8, BASE_DEC, VALS(bssgp_pei_vals), 0x80,
7523 NULL, HFILL } },
7525 { &hf_bssgp_paging_attempt_count,
7526 { "Paging Attempt Count", "bssgp.paging_attempt_count",
7527 FT_UINT8, BASE_HEX, VALS(bssgp_paging_attempt_count_vals), 0x7,
7528 NULL, HFILL } },
7530 { &hf_bssgp_intended_num_of_pag_attempts,
7531 { "Intended Number of Paging Attempts", "bssgp.intended_num_of_pag_attempts",
7532 FT_UINT8, BASE_HEX, VALS(bssgp_intended_num_of_pag_attempts_vals), 0x78,
7533 NULL, HFILL } },
7535 { &hf_bssgp_extended_feature_bitmap,
7536 { "Extended Feature Bitmap", "bssgp.extended_feature_bitmap",
7537 FT_UINT8, BASE_HEX, NULL, 0x0,
7538 NULL, HFILL }
7540 { &hf_bssgp_prio_class_ind,
7541 { "Priority Class Indicator", "bssgp.prio_class_ind",
7542 FT_UINT8, BASE_HEX, NULL, 0x0,
7543 NULL, HFILL }
7545 { &hf_bssgp_prio_class_flag_b0,
7546 { "A mobile station configured for 'low access priority'", "bssgp.prio_class_ind.b0",
7547 FT_BOOLEAN, 8, NULL, 0x01,
7548 NULL, HFILL }
7553 /* Setup protocol subtree array */
7554 #define NUM_INDIVIDUAL_ELEMS 12
7555 int *ett[NUM_INDIVIDUAL_ELEMS +
7556 NUM_BSSGP_ELEM +
7557 NUM_BSSGP_MSG];
7559 static ei_register_info ei[] = {
7560 { &ei_bssgp_extraneous_data, { "bssgp.extraneous_data", PI_PROTOCOL, PI_NOTE, "Extraneous Data, dissector bug or later version spec(report to wireshark.org)", EXPFILL }},
7561 { &ei_bssgp_missing_mandatory_element, { "bssgp.missing_mandatory_element", PI_PROTOCOL, PI_ERROR, "Missing Mandatory element, rest of dissection is suspect", EXPFILL }},
7562 { &ei_bssgp_not_dissected_yet, { "bssgp.not_dissected_yet", PI_UNDECODED, PI_WARN, "Not dissected yet", EXPFILL }},
7563 { &ei_bssgp_erroneous_app_container, { "bssgp.erroneous_app_container", PI_PROTOCOL, PI_WARN, "Erroneous Application Container including IEI and LI", EXPFILL }},
7564 { &ei_bssgp_si_item, { "bssgp.erroneous_app_container", PI_PROTOCOL, PI_WARN, "Unknown SI message", EXPFILL }},
7565 { &ei_bssgp_unknown_rim_app_id_data, { "bssgp.rim_app_id_data.unknown", PI_PROTOCOL, PI_WARN, "Unknown RIM Application Identity Data", EXPFILL }},
7566 { &ei_bssgp_unknown_app_container, { "bssgp.unknown_app_container", PI_PROTOCOL, PI_WARN, "Unknown Application Error Container", EXPFILL }},
7567 { &ei_bssgp_ra_discriminator, { "bssgp.ra_discriminator.unknown", PI_PROTOCOL, PI_WARN, "Unknown RIM Routing Address discriminator", EXPFILL }},
7568 { &ei_bssgp_unknown_rim_app_id, { "bssgp.rim_app_id.unknown", PI_PROTOCOL, PI_WARN, "Unknown RIM Application Identity", EXPFILL }},
7569 { &ei_bssgp_msg_type, { "bssgp.msg_type.unknown", PI_PROTOCOL, PI_WARN, "Unknown message", EXPFILL }},
7570 { &ei_bssgp_ran_inf_app_cont_utra_si,{ "bssgp.ran_inf_app_cont_utra_si", PI_PROTOCOL, PI_WARN, "UTRA SI Container missing", EXPFILL } },
7573 expert_module_t* expert_bssgp;
7575 ett[0] = &ett_bssgp;
7576 ett[1] = &ett_bssgp_list_of_setup_pfcs;
7577 ett[2] = &ett_bssgp_pfcs_to_be_set_up_list_t10;
7578 ett[3] = &ett_bssgp_pfcs_to_be_set_up_list_arp;
7579 ett[4] = &ett_bssgp_pfcs_to_be_set_up_list_abqp;
7580 ett[5] = &ett_bssgp_pfcs_to_be_set_up_list_pft;
7581 ett[6] = &ett_bssgp_pfcs_to_be_set_up_list;
7582 ett[7] = &ett_bssgp_new;
7583 ett[8] = &ett_bssgp_pfc_flow_control_parameters_pfc;
7584 ett[9] = &ett_bssgp_ra_id;
7585 ett[10] = &ett_bssgp_extended_feature_bitmap;
7586 ett[11] = &ett_bssgp_prio_class_ind;
7588 last_offset = NUM_INDIVIDUAL_ELEMS;
7590 for (i=0; i < NUM_BSSGP_ELEM; i++, last_offset++)
7592 ett[last_offset] = &ett_bssgp_elem[i];
7595 for (i=0; i < NUM_BSSGP_MSG; i++, last_offset++)
7597 ett[last_offset] = &ett_bssgp_msg[i];
7600 /* Register the protocol name and description */
7601 proto_bssgp = proto_register_protocol("Base Station Subsystem GPRS Protocol", "BSSGP", "bssgp");
7603 /* Required function calls to register the header fields and subtrees used */
7604 proto_register_field_array(proto_bssgp, hf, array_length(hf));
7605 proto_register_subtree_array(ett, array_length(ett));
7606 expert_bssgp = expert_register_protocol(proto_bssgp);
7607 expert_register_field_array(expert_bssgp, ei, array_length(ei));
7608 register_dissector("bssgp", dissect_bssgp, proto_bssgp);
7610 /* Register configuration options */
7611 bssgp_module = prefs_register_protocol(proto_bssgp, NULL);
7612 prefs_register_obsolete_preference(bssgp_module, "decode_nri");
7613 prefs_register_obsolete_preference(bssgp_module, "nri_length");
7616 /* If this dissector uses sub-dissector registration add a registration routine.
7618 void
7619 proto_reg_handoff_bssgp(void)
7621 llc_handle = find_dissector("llcgprs");
7622 rrlp_handle = find_dissector("rrlp");
7623 rrc_sys_info_cont_handle = find_dissector("rrc.sysinfo.cont");
7625 diameter_3gpp_avp_dissector_table = find_dissector_table("diameter.3gpp");
7629 * Editor modelines - https://www.wireshark.org/tools/modelines.html
7631 * Local variables:
7632 * c-basic-offset: 4
7633 * tab-width: 8
7634 * indent-tabs-mode: nil
7635 * End:
7637 * vi: set shiftwidth=4 tabstop=8 expandtab:
7638 * :indentSize=4:tabSize=8:noTabs=true: