1 /* packet-gsm_a_bssmap.c
2 * Routines for GSM A Interface BSSMAP dissection
4 * Copyright 2003, Michael Lum <mlum [AT] telostech.com>
5 * In association with Telos Technology Inc.
7 * Updated to 3GPP TS 48.008 version 8.4.0 Release 8
8 * Copyright 2008, Anders Broman <anders.broman [at] ericsson.com
12 * Mobile-services Switching Centre - Base Station System
13 * (MSC - BSS) interface;
14 * Layer 3 specification
15 * (GSM 08.08 version 7.7.0 Release 1998) TS 100 590 v7.7.0
16 * 3GPP TS 48.008 version 8.4.0 Release 8
20 * Wireshark - Network traffic analyzer
21 * By Gerald Combs <gerald@wireshark.org>
22 * Copyright 1998 Gerald Combs
24 * This program is free software; you can redistribute it and/or
25 * modify it under the terms of the GNU General Public License
26 * as published by the Free Software Foundation; either version 2
27 * of the License, or (at your option) any later version.
29 * This program is distributed in the hope that it will be useful,
30 * but WITHOUT ANY WARRANTY; without even the implied warranty of
31 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
32 * GNU General Public License for more details.
34 * You should have received a copy of the GNU General Public License
35 * along with this program; if not, write to the Free Software
36 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
45 #include <epan/packet.h>
47 #include <epan/emem.h>
48 #include <epan/asn1.h>
50 #include "packet-bssap.h"
51 #include "packet-bssgp.h"
52 #include "packet-sccp.h"
53 #include "packet-gsm_a_common.h"
54 #include "packet-e212.h"
55 #include "packet-ranap.h"
56 #include "packet-rrc.h"
58 /* PROTOTYPES/FORWARDS */
60 /* TS 48.008 3.2.2.1 Message Type */
61 const value_string gsm_a_bssmap_msg_strings[] = {
62 { 0x01, "Assignment Request" },
63 { 0x02, "Assignment Complete" },
64 { 0x03, "Assignment Failure" },
65 { 0x04, "VGCS/VBS Setup" },
66 { 0x05, "VGCS/VBS Setup Ack" },
67 { 0x06, "VGCS/VBS Setup Refuse" },
68 { 0x07, "VGCS/VBS Assignment Request" },
69 { 0x08, "Channel Modify request" },
71 { 0x09, "Unallocated" },
72 { 0x0a, "Unallocated" },
73 { 0x0b, "Unallocated" },
74 { 0x0c, "Unallocated" },
75 { 0x0d, "Unallocated" },
76 { 0x0e, "Unallocated" },
77 { 0x0f, "Unallocated" },
79 { 0x10, "Handover Request" },
80 { 0x11, "Handover Required" },
81 { 0x12, "Handover Request Acknowledge" },
82 { 0x13, "Handover Command" },
83 { 0x14, "Handover Complete" },
84 { 0x15, "Handover Succeeded" },
85 { 0x16, "Handover Failure" },
86 { 0x17, "Handover Performed" },
87 { 0x18, "Handover Candidate Enquire" },
88 { 0x19, "Handover Candidate Response" },
89 { 0x1a, "Handover Required Reject" },
90 { 0x1b, "Handover Detect" },
91 { 0x1c, "VGCS/VBS Assignment Result" },
92 { 0x1d, "VGCS/VBS Assignment Failure" },
93 { 0x1e, "VGCS/VBS Queuing Indication" },
94 { 0x1f, "Uplink Request" },
95 { 0x20, "Clear Command" },
96 { 0x21, "Clear Complete" },
97 { 0x22, "Clear Request" },
100 { 0x25, "SAPI 'n' Reject" },
101 { 0x26, "Confusion" },
102 { 0x27, "Uplink Request Acknowledge" },
105 /* This value (2a) was allocated in an earlier phase of the protocol and shall not be used in the future. */
106 { 0x2a, "Connection Oriented Information(Obsolete)" },
107 { 0x2b, "Perform Location Request" },
108 { 0x2c, "LSA Information" },
109 { 0x2d, "Perform Location Response" },
110 { 0x2e, "Perform Location Abort" },
111 { 0x2f, "Common Id" },
113 { 0x31, "Reset Acknowledge" },
114 { 0x32, "Overload" },
115 { 0x33, "Reserved" },
116 { 0x34, "Reset Circuit" },
117 { 0x35, "Reset Circuit Acknowledge" },
118 { 0x36, "MSC Invoke Trace" },
119 { 0x37, "BSS Invoke Trace" },
121 { 0x38, "Unallocated" },
122 { 0x39, "Unallocated" },
124 { 0x3a, "Connectionless Information" },
125 { 0x3b, "VGCS/VBS Assignment Status" },
126 { 0x3c, "VGCS/VBS Area Cell Info" },
127 { 0x3d, "Reset IP Resource" },
128 { 0x3e, "Reset IP Resource Acknowledge" },
130 { 0x3f, "Unallocated" },
133 { 0x41, "Blocking Acknowledge" },
135 { 0x43, "Unblocking Acknowledge" },
136 { 0x44, "Circuit Group Block" },
137 { 0x45, "Circuit Group Blocking Acknowledge" },
138 { 0x46, "Circuit Group Unblock" },
139 { 0x47, "Circuit Group Unblocking Acknowledge" },
140 { 0x48, "Unequipped Circuit" },
141 { 0x49, "Uplink Request Confirmation" },
142 { 0x4a, "Uplink Release Indication" },
143 { 0x4b, "Uplink Reject Command" },
144 { 0x4c, "Uplink Release Command" },
145 { 0x4d, "Uplink Seized Command" },
146 { 0x4e, "Change Circuit" },
147 { 0x4f, "Change Circuit Acknowledge" },
148 { 0x50, "Resource Request" },
149 { 0x51, "Resource Indication" },
151 { 0x53, "Cipher Mode Command" },
152 { 0x54, "Classmark Update" },
153 { 0x55, "Cipher Mode Complete" },
154 { 0x56, "Queuing Indication" },
155 { 0x57, "Complete Layer 3 Information" },
156 { 0x58, "Classmark Request" },
157 { 0x59, "Cipher Mode Reject" },
158 { 0x5a, "Load Indication" },
160 { 0x5b, "Unallocated" },
161 { 0x5c, "Unallocated" },
162 { 0x5d, "Unallocated" },
163 { 0x5e, "Unallocated" },
164 { 0x5f, "Unallocated" },
166 { 0x60, "VGCS Additional Information" },
167 { 0x61, "VGCS SMS" },
168 { 0x62, "Notification Data" },
169 { 0x63, "Uplink Application Data" },
171 { 0x64, "Unallocated" },
172 { 0x65, "Unallocated" },
173 { 0x66, "Unallocated" },
174 { 0x67, "Unallocated" },
175 { 0x68, "Unallocated" },
176 { 0x69, "Unallocated" },
177 { 0x6a, "Unallocated" },
178 { 0x6b, "Unallocated" },
179 { 0x6c, "Unallocated" },
180 { 0x6d, "Unallocated" },
181 { 0x6e, "Unallocated" },
182 { 0x6f, "Unallocated" },
184 { 0x70, "Internal Handover Required" },
185 { 0x71, "Internal Handover Required Reject" },
186 { 0x72, "Internal Handover Command" },
187 { 0x73, "Internal Handover Enquiry" },
192 static value_string_ext gsm_a_bssmap_msg_strings_ext = VALUE_STRING_EXT_INIT(gsm_a_bssmap_msg_strings);
194 const value_string gsm_bssmap_elem_strings[] = {
195 { 0x01, "Circuit Identity Code" },
196 { 0x02, "Reserved" },
197 { 0x03, "Resource Available" },
199 { 0x05, "Cell Identifier" },
200 { 0x06, "Priority" },
201 { 0x07, "Layer 3 Header Information" },
204 { 0x0a, "Encryption Information" },
205 { 0x0b, "Channel Type" },
206 { 0x0c, "Periodicity" },
207 { 0x0d, "Extended Resource Indicator" },
208 { 0x0e, "Number Of MSs" },
209 { 0x0f, "Reserved" },
210 { 0x10, "Reserved" },
211 { 0x11, "Reserved" },
212 { 0x12, "Classmark Information Type 2" },
213 { 0x13, "Classmark Information Type 3" },
214 { 0x14, "Interference Band To Be Used" },
215 { 0x15, "RR Cause" },
216 { 0x16, "Reserved" },
217 { 0x17, "Layer 3 Information" },
219 { 0x19, "Downlink DTX Flag" },
220 { 0x1a, "Cell Identifier List" },
221 { 0x1b, "Response Request" },
222 { 0x1c, "Resource Indication Method" },
223 { 0x1d, "Classmark Information Type 1" },
224 { 0x1e, "Circuit Identity Code List" },
225 { 0x1f, "Diagnostic" },
226 { 0x20, "Layer 3 Message Contents" },
227 { 0x21, "Chosen Channel" },
228 { 0x22, "Total Resource Accessible" },
229 { 0x23, "Cipher Response Mode" },
230 { 0x24, "Channel Needed" },
231 { 0x25, "Trace Type" },
232 { 0x26, "TriggerID" },
233 { 0x27, "Trace Reference" },
234 { 0x28, "TransactionID" },
235 { 0x29, "Mobile Identity" },
237 { 0x2b, "Forward Indicator" },
238 { 0x2c, "Chosen Encryption Algorithm" },
239 { 0x2d, "Circuit Pool" },
240 { 0x2e, "Circuit Pool List" },
241 { 0x2f, "Time Indication" },
242 { 0x30, "Resource Situation" },
243 { 0x31, "Current Channel Type 1" },
244 { 0x32, "Queuing Indicator" },
245 { 0x40, "Speech Version" },
246 { 0x33, "Assignment Requirement" },
247 { 0x35, "Talker Flag" },
248 { 0x36, "Connection Release Requested" },
249 { 0x37, "Group Call Reference" },
250 { 0x38, "eMLPP Priority" },
251 { 0x39, "Configuration Evolution Indication" },
252 { 0x3a, "Old BSS to New BSS Information" },
253 { 0x3b, "LSA Identifier" },
254 { 0x3c, "LSA Identifier List" },
255 { 0x3d, "LSA Information" },
257 { 0x3f, "LSA access control suppression" },
258 { 0x43, "LCS Priority" },
259 { 0x44, "Location Type" },
260 { 0x45, "Location Estimate" },
261 { 0x46, "Positioning Data" },
262 { 0x47, "LCS Cause" },
263 { 0x48, "LCS Client Type" },
264 { GSM_BSSMAP_APDU_IE, "APDU" },
265 { 0x4a, "Network Element Identity" },
266 { 0x4b, "GPS Assistance Data" },
267 { 0x4c, "Deciphering Keys" },
268 { 0x4d, "Return Error Request" },
269 { 0x4e, "Return Error Cause" },
270 { 0x4f, "Segmentation" },
271 { 0x50, "Service Handover" },
272 { 0x51, "Source RNC to target RNC transparent information (UMTS)" },
273 { 0x52, "Source RNC to target RNC transparent information (cdma2000)" },
274 { 0x53, "GERAN Classmark" },
275 { 0x54, "GERAN BSC Container" },
276 { 0x61, "New BSS to Old BSS Information" },
277 { 0x63, "Inter-System Information" },
278 { 0x64, "SNA Access Information" },
279 { 0x65, "VSTK_RAND Information" },
280 { 0x66, "VSTK Information" },
281 { 0x67, "Paging Information" },
283 { 0x55, "Velocity Estimate" },
284 { 0x69, "VGCS Feature Flags" },
285 { 0x6a, "Talker Priority" },
286 { 0x6b, "Emergency Set Indication" },
287 { 0x6c, "Talker Identity" },
288 { 0x6d, "Cell Identifier List Segment" },
289 { 0x6e, "SMS to VGCS" },
290 { 0x6f, "VGCS Talker Mode" },
291 { 0x70, "VGCS/VBS Cell Status" },
292 { 0x71, "Cell Identifier List Segment for established cells" },
293 { 0x72, "Cell Identifier List Segment for cells to be established" },
294 { 0x73, "Cell Identifier List Segment for released cells - no user present" },
295 { 0x74, "Cell Identifier List Segment for not established cells - no establishment possible" },
296 { 0x75, "GANSS Assistance Data" },
297 { 0x76, "GANSS Positioning Data" },
298 { 0x77, "GANSS Location Type" },
299 { 0x78, "Application Data" },
300 { 0x79, "Data Identity" },
301 { 0x7a, "Application Data Information" },
303 { 0x7c, "AoIP Transport Layer Address" },
304 { 0x7d, "Speech Codec List" },
305 { 0x7e, "Speech Codec" },
306 { 0x7f, "Call Identifier" },
307 { 0x80, "Call Identifier List" },
311 /* 3.2.3 Signalling Field Element Coding */
312 static const value_string bssmap_field_element_ids[] = {
314 { 0x1, "BSSMAP Field Element: Extra information" }, /* 3.2.3.1 */
315 { 0x2, "BSSMAP Field Element: Current Channel Type 2" }, /* 3.2.2.2 */
316 { 0x3, "BSSMAP Field Element: Target cell radio information" }, /* 3.2.3.3 */
317 { 0x4, "BSSMAP Field Element: GPRS Suspend information" }, /* 3.2.3.4 */
318 { 0x5, "BSSMAP Field Element: MultiRate configuration information" }, /* 3.2.3.5 */
319 { 0x6, "BSSMAP Field Element: Dual Transfer Mode information" }, /* 3.2.3.6 */
320 { 0x7, "BSSMAP Field Element: Inter RAT Handover Info" }, /* 3.2.3.7 */
321 /*{ 0x7, "UE Capability information" },*/ /* 3.2.3.7 */
322 { 0x8, "BSSMAP Field Element: cdma2000 Capability Information" }, /* 3.2.3.8 */
323 { 0x9, "BSSMAP Field Element: Downlink Cell Load Information" }, /* 3.2.3.9 */
324 { 0xa, "BSSMAP Field Element: Uplink Cell Load Information" }, /* 3.2.3.10 */
325 { 0xb, "BSSMAP Field Element: Cell Load Information Group" }, /* 3.2.3.11 */
326 { 0xc, "BSSMAP Field Element: Cell Load Information" }, /* 3.2.3.12 */
327 { 0x0d, "BSSMAP Field Element: PS Indication" }, /* 3.2.3.13 */
328 { 0x0e, "BSSMAP Field Element: DTM Handover Command Indication" }, /* 3.2.3.14 */
329 { 0x6f, "VGCS talker mode" }, /* although technically not a Field Element,
330 this IE can appear in Old BSS to New BSS information */
334 static const value_string bssap_cc_values[] = {
335 { 0x00, "not further specified" },
336 { 0x80, "FACCH or SDCCH" },
340 static const value_string bssap_sapi_values[] = {
341 { 0x00, "RR/MM/CC" },
345 static const value_string gsm_a_be_cell_id_disc_vals[] = {
346 { 0, "The whole Cell Global Identification, CGI, is used to identify the cells."},
347 { 1, "Location Area Code, LAC, and Cell Identify, CI, is used to identify the cells."},
348 { 2, "Cell Identity, CI, is used to identify the cells."},
349 { 3, "No cell is associated with the transaction."},
350 { 4, "Location Area Identification, LAI, is used to identify all cells within a Location Area."},
351 { 5, "Location Area Code, LAC, is used to identify all cells within a location area."},
352 { 6, "All cells on the BSS are identified."},
354 { 8, "Intersystem Handover to UTRAN or cdma2000. PLMN-ID, LAC, and RNC-ID, are encoded to identify the target RNC."},
355 { 9, "Intersystem Handover to UTRAN or cdma2000. The RNC-ID is coded to identify the target RNC."},
356 { 10, "Intersystem Handover to UTRAN or cdma2000. LAC and RNC-ID are encoded to identify the target RNC."},
357 { 11, "Serving Area Identity, SAI, is used to identify the Serving Area of UE within UTRAN or cdma2000"},
358 { 12, "LAC, RNC-ID (or Extended RNC-ID) and Cell Identity, CI, is used to identify a UTRAN cell for cell load information"},
364 static value_string_ext gsm_a_be_cell_id_disc_vals_ext = VALUE_STRING_EXT_INIT(gsm_a_be_cell_id_disc_vals);
366 static const value_string gsm_a_rr_channel_needed_vals[] = {
367 { 0x00, "Any channel"},
369 { 0x02, "TCH/F (Full rate)"},
370 { 0x03, "TCH/H or TCH/F (Dual rate)"},
374 static const value_string bssmap_positioning_methods[] = {
375 { 0, "Timing Advance" },
376 { 1, "Reserved (Note)" },
377 { 2, "Reserved (Note)" },
378 { 3, "Mobile Assisted E-OTD" },
379 { 4, "Mobile Based E-OTD" },
380 { 5, "Mobile Assisted GPS" },
381 { 6, "Mobile Based GPS" },
382 { 7, "Conventional GPS" },
384 { 9, "Reserved for UTRAN use only" },
385 { 10, "Reserved for UTRAN use only" },
386 { 11, "Reserved for UTRAN use only" },
391 /* Positioning Method definitions */
392 static const value_string bssmap_positioning_method_vals[] = {
394 { 1, "Mobile Assisted E-OTD" },
395 { 2, "Mobile Based E-OTD" },
396 { 3, "Assisted GPS" },
397 { 4, "Assisted GANSS" },
398 { 5, "Assisted GPS and Assisted GANSS" },
402 static const value_string bssmap_positioning_methods_usage[] = {
403 { 0, "Attempted unsuccessfully due to failure or interruption" },
404 { 1, "Attempted successfully - results not used to generate location" },
405 { 2, "Attempted successfully - results used to verify but not generate location" },
406 { 3, "Attempted successfully - results used to generate location" },
407 { 4, "Attempted successfully - case where MS supports multiple mobile based positioning methods and the actual method or methods used by the MS cannot be determined" },
411 /* Location Information definitions */
412 static const value_string bssmap_location_information_vals[] = {
413 { 0, "current geographic location" },
414 { 1, "location assistance information for the target MS" },
415 { 2, "deciphering keys for broadcast assistance data for the target MS" },
419 static const true_false_string bssmap_chan_type_extension_value = {
424 static const true_false_string bssmap_cause_extension_value = {
429 /* Current Channel Type */
430 static const value_string chan_mode_vals[] = {
431 { 0, "signalling only" },
432 { 1, "speech (full rate or half rate)" },
433 { 6, "data, 14.5 kbit/s radio interface rate" },
434 { 3, "data, 12.0 kbit/s radio interface rate" },
435 { 4, "data, 6.0 kbit/s radio interface rate" },
436 { 5, "data, 3.6 kbit/s radio interface rate" },
437 { 0x0f, "reserved" },
441 static const value_string fe_cur_chan_type2_chan_field_vals[] = {
443 { 8, "1 Full rate TCH" },
444 { 9, "1 Half rate TCH" },
445 { 10, "2 Full Rate TCHs" },
446 { 11, "3 Full Rate TCHs" },
447 { 12, "4 Full Rate TCHs" },
448 { 13, "5 Full Rate TCHs" },
449 { 14, "6 Full Rate TCHs" },
450 { 15, "7 Full Rate TCHs" },
451 { 4, "8 Full Rate TCHs" },
456 /* Initialize the protocol and registered fields */
457 static int proto_a_bssmap = -1;
459 static int hf_gsm_a_bssmap_msg_type = -1;
460 int hf_gsm_a_length = -1;
461 int hf_gsm_a_bssmap_elem_id = -1;
462 static int hf_gsm_a_bssmap_field_elem_id = -1;
463 int hf_gsm_a_bssmap_cell_ci = -1;
464 static int hf_gsm_a_bssmap_cell_lac = -1;
465 static int hf_gsm_a_bssmap_sac = -1;
466 static int hf_gsm_a_bssmap_dlci_cc = -1;
467 static int hf_gsm_a_bssmap_dlci_spare = -1;
468 static int hf_gsm_a_bssmap_dlci_sapi = -1;
469 static int hf_gsm_a_bssmap_cause = -1;
470 static int hf_gsm_a_bssmap_be_cell_id_disc = -1;
471 static int hf_gsm_a_bssmap_pci = -1;
472 static int hf_gsm_a_bssmap_qa = -1;
473 static int hf_gsm_a_bssmap_pvi = -1;
474 static int hf_gsm_a_bssmap_lsa_only = -1;
475 static int hf_gsm_a_bssmap_act = -1;
476 static int hf_gsm_a_bssmap_pref = -1;
477 static int hf_gsm_a_bssmap_lsa_inf_prio = -1;
478 static int hf_gsm_a_bssmap_seq_len = -1;
479 static int hf_gsm_a_bssmap_seq_no = -1;
480 static int hf_gsm_a_bssap_cell_id_list_seg_cell_id_disc = -1;
481 static int hf_gsm_a_bssap_res_ind_method = -1;
482 static int hf_gsm_a_bssmap_ch_mode = -1;
483 static int hf_gsm_a_bssmap_cur_ch_mode = -1;
484 static int hf_gsm_a_bssmap_channel = -1;
485 static int hf_gsm_a_bssmap_trace_trigger_id = -1;
486 static int hf_gsm_a_bssmap_trace_priority_indication = -1;
487 static int hf_gsm_a_bssmap_trace_bss_record_type = -1;
488 static int hf_gsm_a_bssmap_trace_msc_record_type = -1;
489 static int hf_gsm_a_bssmap_trace_invoking_event = -1;
490 static int hf_gsm_a_bssmap_trace_reference = -1;
491 static int hf_gsm_a_bssmap_trace_omc_id = -1;
492 static int hf_gsm_a_bssmap_be_rnc_id = -1;
493 static int hf_gsm_a_bssmap_apdu_protocol_id = -1;
494 static int hf_gsm_a_bssmap_periodicity = -1;
495 static int hf_gsm_a_bssmap_sm = -1;
496 static int hf_gsm_a_bssmap_tarr = -1;
497 static int hf_gsm_a_bssmap_tot_no_of_fullr_ch = -1;
498 static int hf_gsm_a_bssmap_tot_no_of_hr_ch = -1;
499 static int hf_gsm_a_bssmap_smi = -1;
500 static int hf_gsm_a_bssmap_lsa_id = -1;
501 static int hf_gsm_a_bssmap_ep = -1;
502 static int hf_gsm_a_bssmap_lcs_pri = -1;
503 static int hf_gsm_a_bssmap_num_ms = -1;
504 static int hf_gsm_a_bssmap_talker_pri = -1;
505 static int hf_gsm_a_bssmap_paging_cause = -1;
506 static int hf_gsm_a_bssmap_paging_inf_flg = -1;
507 static int hf_gsm_a_bssmap_serv_ho_inf = -1;
508 static int hf_gsm_a_bssmap_spare_bits = -1;
509 static int hf_gsm_a_bssmap_tpind = -1;
510 static int hf_gsm_a_bssmap_asind_b2 = -1;
511 static int hf_gsm_a_bssmap_asind_b3 = -1;
512 static int hf_gsm_a_bssmap_bss_res = -1;
513 static int hf_gsm_a_bssmap_tcp = -1;
514 static int hf_gsm_a_bssmap_filler_bits = -1;
515 static int hf_gsm_a_bssmap_method = -1;
516 static int hf_gsm_a_bssmap_ganss_id = -1;
517 static int hf_gsm_a_bssmap_usage = -1;
518 static int hf_gsm_a_bssmap_aoip_trans_ipv4 = -1;
519 static int hf_gsm_a_bssmap_aoip_trans_ipv6 = -1;
520 static int hf_gsm_a_bssmap_aoip_trans_port = -1;
521 static int hf_gsm_a_bssmap_fi = -1;
522 static int hf_gsm_a_bssmap_tf = -1;
523 static int hf_gsm_a_bssmap_pi = -1;
524 static int hf_gsm_a_bssmap_pt = -1;
525 static int hf_gsm_a_bssap_speech_codec = -1;
526 static int hf_gsm_a_bssap_extended_codec = -1;
527 static int hf_gsm_a_bssap_extended_codec_r2 = -1;
528 static int hf_gsm_a_bssap_extended_codec_r3 = -1;
529 static int hf_gsm_a_bssmap_fi2 = -1;
530 static int hf_gsm_a_bssmap_tf2 = -1;
531 static int hf_gsm_a_bssmap_pi2 = -1;
532 static int hf_gsm_a_bssmap_pt2 = -1;
533 static int hf_gsm_a_bssmap_call_id = -1;
534 static int hf_gsm_a_bssmap_spare = -1;
535 static int hf_gsm_a_bssmap_positioning_data_discriminator = -1;
536 static int hf_gsm_a_bssmap_positioning_method = -1;
537 static int hf_gsm_a_bssmap_positioning_method_usage = -1;
538 static int hf_gsm_a_bssmap_location_type_location_information = -1;
539 static int hf_gsm_a_bssmap_location_type_positioning_method = -1;
540 static int hf_gsm_a_bssmap_chan_type_extension = -1;
541 static int hf_gsm_a_bssmap_cause_extension = -1;
542 static int hf_gsm_a_bssmap_emlpp_prio = -1;
543 static int hf_fe_extra_info_prec = -1;
544 static int hf_fe_extra_info_lcs = -1;
545 static int hf_fe_extra_info_ue_prob = -1;
546 static int hf_fe_extra_info_spare = -1;
547 static int hf_fe_cur_chan_type2_chan_mode = -1;
548 static int hf_fe_cur_chan_type2_chan_mode_spare = -1;
549 static int hf_fe_cur_chan_type2_chan_field = -1;
550 static int hf_fe_cur_chan_type2_chan_field_spare = -1;
551 static int hf_fe_target_radio_cell_info_rxlev_ncell = -1;
552 static int hf_fe_target_radio_cell_info_rxlev_ncell_spare = -1;
553 static int hf_fe_dtm_info_dtm_ind = -1;
554 static int hf_fe_dtm_info_sto_ind = -1;
555 static int hf_fe_dtm_info_egprs_ind = -1;
556 static int hf_fe_dtm_info_spare_bits = -1;
557 static int hf_fe_cell_load_info_cell_capacity_class = -1;
558 static int hf_fe_cell_load_info_load_value = -1;
559 static int hf_fe_cell_load_info_rt_load_value = -1;
560 static int hf_fe_cell_load_info_nrt_load_information_value = -1;
561 static int hf_fe_ps_indication = -1;
562 static int hf_fe_dtm_ho_command_ind_spare = -1;
564 /* Initialize the subtree pointers */
565 static gint ett_bssmap_msg = -1;
566 static gint ett_cell_list = -1;
567 static gint ett_dlci = -1;
568 static gint ett_codec_lst = -1;
569 static gint ett_bss_to_bss_info = -1;
571 static char a_bigbuf[1024];
573 static dissector_handle_t gsm_bsslap_handle = NULL;
574 static dissector_handle_t dtap_handle;
575 static dissector_handle_t bssgp_handle;
576 static dissector_handle_t rrc_handle;
578 static packet_info *g_pinfo;
579 static proto_tree *g_tree;
580 static guint8 cell_discriminator = 0x0f; /* tracks whether handover is to UMTS */
583 be_field_element_dissect(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_);
586 This enum has been moved to packet-gsm_a_common to
587 make it possible to use element dissecton from this dissector
589 It is left here as a comment for easier reference.
591 Note this enum must be of the same size as the element decoding list
595 BE_CIC, /. Circuit Identity Code ./
596 BE_RSVD_1, /. Reserved ./
597 BE_RES_AVAIL, /. Resource Available ./
598 BE_CAUSE, /. Cause ./
599 BE_CELL_ID, /. Cell Identifier ./
600 BE_PRIO, /. Priority ./
601 BE_L3_HEADER_INFO, /. Layer 3 Header Information ./
604 BE_ENC_INFO, /. Encryption Information ./
605 BE_CHAN_TYPE, /. Channel Type ./
606 BE_PERIODICITY, /. Periodicity ./
607 BE_EXT_RES_IND, /. Extended Resource Indicator ./
608 BE_NUM_MS, /. Number Of MSs ./
609 BE_RSVD_2, /. Reserved ./
610 BE_RSVD_3, /. Reserved ./
611 BE_RSVD_4, /. Reserved ./
612 BE_CM_INFO_2, /. Classmark Information Type 2 ./
613 BE_CM_INFO_3, /. Classmark Information Type 3 ./
614 BE_INT_BAND, /. Interference Band To Be Used ./
615 BE_RR_CAUSE, /. RR Cause ./
616 BE_RSVD_5, /. Reserved ./
617 BE_L3_INFO, /. Layer 3 Information ./
619 BE_DOWN_DTX_FLAG, /. Downlink DTX Flag ./
620 BE_CELL_ID_LIST, /. Cell Identifier List ./
621 BE_RESP_REQ, /. Response Request ./
622 BE_RES_IND_METHOD, /. Resource Indication Method ./
623 BE_CM_INFO_1, /. Classmark Information Type 1 ./
624 BE_CIC_LIST, /. Circuit Identity Code List ./
625 BE_DIAG, /. Diagnostic ./
626 BE_L3_MSG, /. Layer 3 Message Contents ./
627 BE_CHOSEN_CHAN, /. Chosen Channel ./
628 BE_TOT_RES_ACC, /. Total Resource Accessible ./
629 BE_CIPH_RESP_MODE, /. Cipher Response Mode ./
630 BE_CHAN_NEEDED, /. Channel Needed ./
631 BE_TRACE_TYPE, /. Trace Type ./
632 BE_TRIGGERID, /. TriggerID ./
633 BE_TRACE_REF, /. Trace Reference ./
634 BE_TRANSID, /. TransactionID ./
635 BE_MID, /. Mobile Identity ./
636 BE_OMCID, /. OMCID ./
637 BE_FOR_IND, /. Forward Indicator ./
638 BE_CHOSEN_ENC_ALG, /. Chosen Encryption Algorithm ./
639 BE_CCT_POOL, /. Circuit Pool ./
640 BE_CCT_POOL_LIST, /. Circuit Pool List ./
641 BE_TIME_IND, /. Time Indication ./
642 BE_RES_SIT, /. Resource Situation ./
643 BE_CURR_CHAN_1, /. Current Channel Type 1 ./
644 BE_QUE_IND, /. Queueing Indicator ./
645 BE_SPEECH_VER, /. Speech Version ./
646 BE_ASS_REQ, /. Assignment Requirement ./
647 BE_TALKER_FLAG, /. Talker Flag ./
648 BE_CONN_REL_REQ, /. Connection Release Requested ./
649 BE_GROUP_CALL_REF, /. Group Call Reference ./
650 BE_EMLPP_PRIO, /. eMLPP Priority ./
651 BE_CONF_EVO_IND, /. Configuration Evolution Indication ./
652 BE_OLD2NEW_INFO, /. Old BSS to New BSS Information ./
653 BE_LSA_ID, /. LSA Identifier ./
654 BE_LSA_ID_LIST, /. LSA Identifier List ./
655 BE_LSA_INFO, /. LSA Information ./
656 BE_LCS_QOS, /. LCS QoS ./
657 BE_LSA_ACC_CTRL, /. LSA access control suppression ./
658 BE_LCS_PRIO, /. LCS Priority ./
659 BE_LOC_TYPE, /. Location Type ./
660 BE_LOC_EST, /. Location Estimate ./
661 BE_POS_DATA, /. Positioning Data ./
662 BE_LCS_CAUSE, /. 3.2.2.66 LCS Cause ./
663 BE_LCS_CLIENT, /. LCS Client Type ./
665 BE_NE_ID, /. Network Element Identity ./
666 BE_GPS_ASSIST_DATA, /. GPS Assistance Data ./
667 BE_DECIPH_KEYS, /. Deciphering Keys ./
668 BE_RET_ERR_REQ, /. Return Error Request ./
669 BE_RET_ERR_CAUSE, /. Return Error Cause ./
670 BE_SEG, /. Segmentation ./
671 BE_SERV_HO, /. Service Handover ./
672 BE_SRC_RNC_TO_TAR_RNC_UMTS, /. Source RNC to target RNC transparent information (UMTS) ./
673 BE_SRC_RNC_TO_TAR_RNC_CDMA, /. Source RNC to target RNC transparent information (cdma2000) ./
674 BE_GERAN_CLS_M, /. GERAN Classmark ./
675 BE_GRAN_BSC_CONT, /. GERAN BSC Container ./
676 BE_NEW_BSS_TO_OLD_BSS_INF, /. New BSS to Old BSS Information ./
677 BE_INTER_SYS_INF, /. Inter-System Information ./
678 BE_SNA_ACC_INF, /. SNA Access Information ./
679 BE_VSTK_RAND_INF, /. VSTK_RAND Information ./
680 BE_VSTK_INF, /. VSTK Information ./
681 BE_PAGING_INF, /. Paging Information ./
683 BE_VEL_EST, /. Velocity Estimate ./
684 BE_VGCS_FEAT_FLG, /. VGCS Feature Flags ./
685 BE_TALKER_PRI, /. Talker Priority ./
686 BE_EMRG_SET_IND, /. Emergency Set Indication ./
687 BE_TALKER_ID, /. Talker Identity ./
688 BE_CELL_ID_LIST_SEG, /. Cell Identifier List Segment ./
689 BE_SMS_TO_VGCS, /. SMS to VGCS ./
690 BE_VGCS_TALKER_MOD, /. VGCS Talker Mode ./
691 BE_VGS_VBS_CELL_STAT, /. VGCS/VBS Cell Status ./
692 BE_CELL_ID_LST_SEG_F_EST_CELLS, /. Cell Identifier List Segment for established cells ./
693 BE_CELL_ID_LST_SEG_F_CELL_TB_EST, /. Cell Identifier List Segment for cells to be established ./
694 BE_CELL_ID_LST_SEG_F_REL_CELL, /. Cell Identifier List Segment for released cells - no user present ./
695 BE_CELL_ID_LST_SEG_F_NOT_EST_CELL, /. Cell Identifier List Segment for not established cells - no establishment possible ./
696 BE_GANSS_ASS_DTA, /. GANSS Assistance Data ./
697 BE_GANSS_POS_DTA, /. GANSS Positioning Data ./
698 BE_GANSS_LOC_TYP, /. GANSS Location Type ./
699 BE_APP_DATA, /. Application Data ./
700 BE_DATA_ID /. Data Identity ./
701 BE_APP_DATA_INF, /. Application Data Information ./
702 BE_MSISDN, /. MSISDN ./
703 BE_AOIP_TRANS_LAY_ADD, /. AoIP Transport Layer Address ./
704 BE_SPEECH_CODEC_LST, /. Speech Codec List ./
705 BE_SPEECH_CODEC, /. Speech Codec ./
706 BE_CALL_ID, /. Call Identifier ./
707 BE_CALL_ID_LST, /. Call Identifier List ./
713 #define NUM_GSM_BSSMAP_ELEM (sizeof(gsm_bssmap_elem_strings)/sizeof(value_string))
714 gint ett_gsm_bssmap_elem[NUM_GSM_BSSMAP_ELEM];
717 * [2] 3.2.2.2 Circuit Identity Code
720 be_cic(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string, int string_len)
725 curr_offset = offset;
727 value = tvb_get_ntohs(tvb, curr_offset);
729 other_decode_bitfield_value(a_bigbuf, value, 0xffe0, 16);
730 proto_tree_add_text(tree,
732 "%s = PCM Multiplexer: %u",
734 (value & 0xffe0) >> 5);
736 other_decode_bitfield_value(a_bigbuf, value, 0x001f, 16);
737 proto_tree_add_text(tree,
746 g_snprintf(add_string, string_len, " - (%u) (0x%04x)", value, value);
748 /* no length check possible */
750 return(curr_offset - offset);
753 * 3.2.2.3 Connection Release Requested
758 * 3.2.2.4 Resource Available
761 be_res_avail(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
767 curr_offset = offset;
769 for (i=0; i < 5; i++){
770 value = tvb_get_ntohl(tvb, curr_offset);
771 proto_tree_add_text(tree, tvb, curr_offset, len, "Number of full rate channels available in band %u %u",i+1,value);
773 proto_tree_add_text(tree, tvb, curr_offset, len, "Number of half rate channels available in band %u %u",i+1, value);
784 be_cause(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string, int string_len)
789 const gchar *str = NULL;
791 curr_offset = offset;
793 oct = tvb_get_guint8(tvb, curr_offset);
795 proto_tree_add_item(tree, hf_gsm_a_bssmap_cause_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
801 if ((oct & 0x0f) == 0x00)
804 switch ((oct & 0x70) >> 4)
806 case 0: str = "Normal Event"; break;
807 case 1: str = "Normal Event"; break;
808 case 2: str = "Resource Unavailable"; break;
809 case 3: str = "Service or option not available"; break;
810 case 4: str = "Service or option not implemented"; break;
811 case 5: str = "Invalid message (e.g., parameter out of range)"; break;
812 case 6: str = "Protocol error"; break;
814 str = "Interworking";
818 other_decode_bitfield_value(a_bigbuf, oct, 0x70, 8);
819 proto_tree_add_text(tree,
821 "%s = Cause Class: %s",
825 other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8);
826 proto_tree_add_text(tree,
828 "%s = National Cause",
833 proto_tree_add_text(tree, tvb, curr_offset, 1,
839 g_snprintf(add_string, string_len, " - (National Cause)");
843 value = tvb_get_guint8(tvb, curr_offset + 1);
845 other_decode_bitfield_value(a_bigbuf, oct, 0x7f, 8);
846 proto_tree_add_text(tree,
848 "%s = Cause (MSB): %u",
850 ((oct & 0x7f) << 8) | value);
854 other_decode_bitfield_value(a_bigbuf, value, 0xff, 8);
855 proto_tree_add_text(tree, tvb, curr_offset, 1,
866 case 0x00: str = "Radio interface message failure"; break;
867 case 0x01: str = "Radio interface failure"; break;
868 case 0x02: str = "Uplink quality"; break;
869 case 0x03: str = "Uplink strength"; break;
870 case 0x04: str = "Downlink quality"; break;
871 case 0x05: str = "Downlink strength"; break;
872 case 0x06: str = "Distance"; break;
873 case 0x07: str = "O and M intervention"; break;
874 case 0x08: str = "Response to MSC invocation"; break;
875 case 0x09: str = "Call control"; break;
876 case 0x0a: str = "Radio interface failure, reversion to old channel"; break;
877 case 0x0b: str = "Handover successful"; break;
878 case 0x0c: str = "Better Cell"; break;
879 case 0x0d: str = "Directed Retry"; break;
880 case 0x0e: str = "Joined group call channel"; break;
881 case 0x0f: str = "Traffic"; break;
883 case 0x10: str = "Reduce load in serving cell"; break;
884 case 0x11: str = "Traffic load in target cell higher than in source cell"; break;
885 case 0x12: str = "Relocation triggered"; break;
886 case 0x14: str = "Requested option not authorised"; break;
887 case 0x15: str = "Alternative channel configuration requested "; break;
888 case 0x16: str = "Call Identifier already allocated"; break;
889 case 0x17: str = "INTERNAL HANDOVER ENQUIRY reject"; break;
890 case 0x18: str = "Redundancy Level not adequate"; break;
892 case 0x20: str = "Equipment failure"; break;
893 case 0x21: str = "No radio resource available"; break;
894 case 0x22: str = "Requested terrestrial resource unavailable"; break;
895 case 0x23: str = "CCCH overload"; break;
896 case 0x24: str = "Processor overload"; break;
897 case 0x25: str = "BSS not equipped"; break;
898 case 0x26: str = "MS not equipped"; break;
899 case 0x27: str = "Invalid cell"; break;
900 case 0x28: str = "Traffic Load"; break;
901 case 0x29: str = "Preemption"; break;
902 case 0x2a: str = "DTM Handover - SGSN Failure"; break;
903 case 0x2b: str = "DTM Handover - PS Allocation failure"; break;
905 case 0x30: str = "Requested transcoding/rate adaption unavailable"; break;
906 case 0x31: str = "Circuit pool mismatch"; break;
907 case 0x32: str = "Switch circuit pool"; break;
908 case 0x33: str = "Requested speech version unavailable"; break;
909 case 0x34: str = "LSA not allowed"; break;
910 case 0x35: str = "Requested Codec Type or Codec Configuration unavailable"; break;
911 case 0x36: str = "Requested A-Interface Type unavailable"; break;
912 case 0x37: str = "Invalid CSG cell"; break;
914 case 0x3f: str = "Requested Redundancy Level not available"; break;
916 case 0x40: str = "Ciphering algorithm not supported"; break;
917 case 0x41: str = "GERAN Iu-mode failure"; break;
918 case 0x42: str = "Incoming Relocation Not Supported Due To PUESBINE Feature"; break;
919 case 0x43: str = "Access Restricted Due to Shared Networks"; break;
920 case 0x44: str = "Requested Codec Type or Codec Configuration not supported"; break;
921 case 0x45: str = "Requested A-Interface Type not supported"; break;
922 case 0x46: str = "Requested Redundancy Level not supported"; break;
923 case 0x47: str = "Reserved for international use"; break;
925 case 0x50: str = "Terrestrial circuit already allocated"; break;
926 case 0x51: str = "Invalid message contents"; break;
927 case 0x52: str = "Information element or field missing"; break;
928 case 0x53: str = "Incorrect value"; break;
929 case 0x54: str = "Unknown Message type"; break;
930 case 0x55: str = "Unknown Information Element"; break;
931 case 0x56: str = "DTM Handover - Invalid PS Indication"; break;
932 case 0x57: str = "Call Identifier already allocated"; break;
934 case 0x60: str = "Protocol Error between BSS and MSC"; break;
935 case 0x61: str = "VGCS/VBS call non existent"; break;
936 case 0x62: str = "DTM Handover - Timer Expiry"; break;
939 if ((oct >= 0x19) && (oct <= 0x1f)) { str = "Reserved for national use"; }
940 else if ((oct >= 0x2c) && (oct <= 0x2f)) { str = "Reserved for national use"; }
941 else if ((oct >= 0x38) && (oct <= 0x3e)) { str = "Reserved for international use"; }
942 else if ((oct >= 0x48) && (oct <= 0x4f)) { str = "Reserved for national use"; }
943 else if ((oct >= 0x58) && (oct <= 0x5f)) { str = "Reserved for national use"; }
944 else if ((oct >= 0x63) && (oct <= 0x67)) { str = "Reserved for international use"; }
945 else if ((oct >= 0x68) && (oct <= 0x6f)) { str = "Reserved for national use"; }
946 else if ((oct >= 0x70) && (oct <= 0x77)) { str = "Reserved for international use"; }
947 else if ((oct >= 0x78) && (oct <= 0x7f)) { str = "Reserved for national use"; }
948 else { str = "Unknown"; }
952 other_decode_bitfield_value(a_bigbuf, oct, 0x7f, 8);
953 proto_tree_add_uint_format(tree, hf_gsm_a_bssmap_cause,
954 tvb, curr_offset, 1, oct & 0x7f,
955 "%s = Cause: (%u) %s",
963 g_snprintf(add_string, string_len, " - (%u) %s", oct & 0x7f, str);
966 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
968 return(curr_offset - offset);
972 * IMSI coded as the value part of the Mobile Identity IE defined in 3GPP TS 24.008 (NOTE 1)
973 * NOTE 1: The Type of identity field in the Mobile Identity IE shall be ignored by the receiver.
974 * Dissected in packet-gsm_a_common.c (de_mid)
981 be_tmsi(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string, int string_len)
986 curr_offset = offset;
988 value = tvb_get_ntohl(tvb, curr_offset);
990 proto_tree_add_uint(tree, hf_gsm_a_tmsi,
995 g_snprintf(add_string, string_len, " - (0x%04x)", value);
999 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
1001 return(curr_offset - offset);
1005 * [2] 3.2.2.8 Number Of MSs
1008 be_num_ms(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
1010 guint32 curr_offset;
1012 curr_offset = offset;
1014 proto_tree_add_item(tree, hf_gsm_a_bssmap_num_ms, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1017 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
1019 return(curr_offset - offset);
1022 * [2] 3.2.2.9 Layer 3 Header Information
1026 be_l3_header_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
1029 guint32 curr_offset;
1031 curr_offset = offset;
1033 oct = tvb_get_guint8(tvb, curr_offset);
1035 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, ENC_BIG_ENDIAN);
1037 proto_tree_add_item(tree, hf_gsm_a_L3_protocol_discriminator, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1041 NO_MORE_DATA_CHECK(len);
1043 oct = tvb_get_guint8(tvb, curr_offset);
1045 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, ENC_BIG_ENDIAN);
1047 other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8);
1048 proto_tree_add_text(tree,
1049 tvb, curr_offset, 1,
1052 ((oct & 0x08) ? "allocated by receiver" : "allocated by sender"));
1054 other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
1055 proto_tree_add_text(tree,
1056 tvb, curr_offset, 1,
1063 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
1065 return(curr_offset - offset);
1069 * [2] 3.2.2.10 Encryption Information
1072 be_enc_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
1077 guint32 curr_offset;
1079 curr_offset = offset;
1081 oct = tvb_get_guint8(tvb, curr_offset);
1088 other_decode_bitfield_value(a_bigbuf, oct, mask, 8);
1089 proto_tree_add_text(tree,
1090 tvb, curr_offset, 1,
1091 "%s = GSM A5/%u: %spermitted",
1094 (mask & oct) ? "" : "not ");
1099 while (mask != 0x01);
1101 other_decode_bitfield_value(a_bigbuf, oct, mask, 8);
1102 proto_tree_add_text(tree,
1103 tvb, curr_offset, 1,
1104 "%s = No encryption: %spermitted",
1106 (mask & oct) ? "" : "not ");
1110 NO_MORE_DATA_CHECK(len);
1112 proto_tree_add_text(tree,
1113 tvb, curr_offset, len - (curr_offset - offset),
1115 tvb_bytes_to_str(tvb, curr_offset, len-(curr_offset-offset) ));
1117 curr_offset += len - (curr_offset - offset);
1119 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
1121 return(curr_offset - offset);
1125 * [2] 3.2.2.11 Channel Type
1128 be_chan_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string, int string_len)
1133 guint32 curr_offset;
1136 curr_offset = offset;
1138 oct = tvb_get_guint8(tvb, curr_offset);
1140 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, ENC_BIG_ENDIAN);
1145 case 1: str = "Speech"; break;
1146 case 2: str = "Data"; break;
1147 case 3: str = "Signalling"; break;
1148 case 4: str = "Speech + CTM Text Telephony"; break;
1154 other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8);
1155 proto_tree_add_text(tree,
1156 tvb, curr_offset, 1,
1157 "%s = Speech/Data Indicator: %s",
1162 g_snprintf(add_string, string_len, " - (%s)", str);
1166 NO_MORE_DATA_CHECK(len);
1168 oct = tvb_get_guint8(tvb, curr_offset);
1170 if ((sdi == 0x01)||(sdi == 0x04))
1176 case 0x08: str = "Full rate TCH channel Bm. Prefer full rate TCH"; break;
1177 case 0x09: str = "Half rate TCH channel Lm. Prefer half rate TCH"; break;
1178 case 0x0a: str = "Full or Half rate channel, Full rate preferred changes allowed after first allocation"; break;
1179 case 0x0b: str = "Full or Half rate channel, Half rate preferred changes allowed after first allocation"; break;
1180 case 0x1a: str = "Full or Half rate channel, Full rate preferred changes between full and half rate not allowed after first allocation"; break;
1181 case 0x1b: str = "Full or Half rate channel, Half rate preferred changes between full and half rate not allowed after first allocation"; break;
1182 case 0x0f: str = "Full or Half rate channel, changes allowed after first allocation"; break;
1183 case 0x1f: str = "Full or Half rate channel, changes between full and half rate not allowed after first allocation"; break;
1189 proto_tree_add_text(tree,
1190 tvb, curr_offset, 1,
1191 "Channel Rate and Type: %s",
1196 NO_MORE_DATA_CHECK(len);
1200 oct = tvb_get_guint8(tvb, curr_offset);
1202 proto_tree_add_item(tree, hf_gsm_a_bssmap_chan_type_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1206 case 0x01: str = "GSM speech full rate version 1"; break;
1207 case 0x11: str = "GSM speech full rate version 2"; break;
1208 case 0x21: str = "GSM speech full rate version 3 (FR AMR)"; break;
1209 case 0x31: str = "GSM speech full rate version 4 (OFR AMR-WB)"; break;
1210 case 0x32: str = "GSM speech full rate version 5 (FR AMR-WB)"; break;
1212 case 0x05: str = "GSM speech half rate version 1"; break;
1213 case 0x15: str = "GSM speech half rate version 2"; break;
1214 case 0x25: str = "GSM speech half rate version 3 (HR AMR)"; break;
1215 case 0x36: str = "GSM speech half rate version 4 (OHR AMR-WB)"; break;
1216 case 0x35: str = "GSM speech half rate version 6 (OHR AMR)"; break;
1223 other_decode_bitfield_value(a_bigbuf, oct, 0x7f, 8);
1224 proto_tree_add_text(tree,
1225 tvb, curr_offset, 1,
1226 "%s = Speech version identifier: %s",
1232 while ((len - (curr_offset - offset)) > 0);
1234 else if (sdi == 0x02)
1242 case 0x00: str = "SDCCH or Full rate TCH channel Bm or Half rate TCH channel Lm"; break;
1243 case 0x01: str = "SDCCH "; break;
1244 case 0x02: str = "SDCCH or Full rate TCH channel Bm"; break;
1245 case 0x03: str = "Half rate TCH channel Lm"; break;
1246 case 0x08: str = "Full rate TCH channel Bm"; break;
1247 case 0x09: str = "Half rate TCH channel Lm"; break;
1248 case 0x0a: str = "Full or Half rate TCH channel, Full rate preferred, changes allowed also after first channel allocation as a result of the request"; break;
1249 case 0x0b: str = "Full or Half rate TCH channel, Half rate preferred, changes allowed also after first channel allocation as a result of the request"; break;
1250 case 0x1a: str = "Full or Half rate TCH channel, Full rate preferred, changes not allowed after first channel allocation as a result of the request"; break;
1251 case 0x1b: str = "Full or Half rate TCH channel. Half rate preferred, changes not allowed after first channel allocation as a result of the request"; break;
1253 if ((oct >= 0x20) && (oct <= 0x27))
1255 str = "Full rate TCH channels in a multislot configuration, changes by the BSS of the the number of TCHs and if applicable the used radio interface rate per channel allowed after first channel allocation as a result of the request";
1256 num_chan = (oct - 0x20) + 1;
1258 else if ((oct >= 0x30) && (oct <= 0x37))
1260 str = "Full rate TCH channels in a multislot configuration, changes by the BSS of the number of TCHs or the used radio interface rate per channel not allowed after first channel allocation as a result of the request";
1261 num_chan = (oct - 0x30) + 1;
1272 proto_tree_add_text(tree,
1273 tvb, curr_offset, 1,
1274 "Channel Rate and Type: Max channels %u, %s",
1280 proto_tree_add_text(tree,
1281 tvb, curr_offset, 1,
1282 "Channel Rate and Type: %s",
1288 NO_MORE_DATA_CHECK(len);
1290 oct = tvb_get_guint8(tvb, curr_offset);
1292 proto_tree_add_item(tree, hf_gsm_a_bssmap_chan_type_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1294 other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8);
1295 proto_tree_add_text(tree,
1296 tvb, curr_offset, 1,
1297 "%s = %sTransparent service",
1299 (oct & 0x40) ? "Non-" : "");
1305 /* non-transparent */
1309 case 0x00: str = "12 kbit/s if the channel is a full rate TCH, or 6 kbit/s if the channel is a half rate TCH"; break;
1310 case 0x18: str = "14.5 kbit/s"; break;
1311 case 0x10: str = "12 kbits/s"; break;
1312 case 0x11: str = "6 kbits/s"; break;
1313 case 0x31: str = "29 kbit/s"; break;
1314 case 0x34: str = "43,5 kbit/s"; break;
1324 case 0x18: str = "14.4 kbit/s"; break;
1325 case 0x10: str = "9.6kbit/s"; break;
1326 case 0x11: str = "4.8kbit/s"; break;
1327 case 0x12: str = "2.4kbit/s"; break;
1328 case 0x13: str = "1.2Kbit/s"; break;
1329 case 0x14: str = "600 bit/s"; break;
1330 case 0x15: str = "1200/75 bit/s (1200 network-to-MS / 75 MS-to-network)"; break;
1331 case 0x39: str = "28,8 kbit/s"; break;
1332 case 0x3a: str = "32,0 kbit/s"; break;
1343 /* non-transparent */
1347 case 0x16: str = "58 kbit/s (4x14.5 kbit/s)"; break;
1348 case 0x14: str = "48.0 / 43.5 kbit/s (4x12 kbit/s or 3x14.5 kbit/s)"; break;
1349 case 0x13: str = "36.0 / 29.0 kbit/s (3x12 kbit/s or 2x14.5 kbit/s)"; break;
1350 case 0x12: str = "24.0 / 24.0 (4x6 kbit/s or 2x12 kbit/s)"; break;
1351 case 0x11: str = "18.0 / 14.5 kbit/s (3x6 kbit/s or 1x14.5 kbit/s)"; break;
1352 case 0x10: str = "12.0 / 12.0 kbit/s (2x6 kbit/s or 1x12 kbit/s)"; break;
1362 case 0x1f: str = "64 kbit/s, bit transparent"; break;
1363 case 0x1e: str = "56 kbit/s, bit transparent"; break;
1364 case 0x1d: str = "56 kbit/s"; break;
1365 case 0x1c: str = "48 kbit/s"; break;
1366 case 0x1b: str = "38.4 kbit/s"; break;
1367 case 0x1a: str = "28.8 kbit/s"; break;
1368 case 0x19: str = "19.2 kbit/s"; break;
1369 case 0x18: str = "14.4 kbit/s"; break;
1370 case 0x10: str = "9.6 kbit/s"; break;
1378 other_decode_bitfield_value(a_bigbuf, oct, 0x3f, 8);
1379 proto_tree_add_text(tree,
1380 tvb, curr_offset, 1,
1387 NO_MORE_DATA_CHECK(len);
1389 oct = tvb_get_guint8(tvb, curr_offset);
1391 proto_tree_add_item(tree, hf_gsm_a_bssmap_chan_type_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1393 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, (curr_offset<<3)+1, 3, ENC_BIG_ENDIAN);
1397 other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8);
1398 proto_tree_add_text(tree,
1399 tvb, curr_offset, 1,
1400 "%s = 14.5 kbit/s (TCH/F14.4) %sallowed",
1402 (oct & 0x08) ? "" : "not ");
1404 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, (curr_offset<<3)+6, 1, ENC_BIG_ENDIAN);
1406 other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8);
1407 proto_tree_add_text(tree,
1408 tvb, curr_offset, 1,
1409 "%s = 12.0 kbit/s (TCH F/9.6) %sallowed",
1411 (oct & 0x02) ? "" : "not ");
1413 other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
1414 proto_tree_add_text(tree,
1415 tvb, curr_offset, 1,
1416 "%s = 6.0 kbit/s (TCH F/4.8) %sallowed",
1418 (oct & 0x01) ? "" : "not ");
1422 other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8);
1423 proto_tree_add_text(tree,
1424 tvb, curr_offset, 1,
1425 "%s = 14.5/14.4 kbit/s (TCH/F14.4) %sallowed",
1427 (oct & 0x08) ? "" : "not ");
1429 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, (curr_offset<<3)+6, 1, ENC_BIG_ENDIAN);
1431 other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8);
1432 proto_tree_add_text(tree,
1433 tvb, curr_offset, 1,
1434 "%s = 12.0/9.6 kbit/s (TCH F/9.6) %sallowed",
1436 (oct & 0x02) ? "" : "not ");
1438 other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
1439 proto_tree_add_text(tree,
1440 tvb, curr_offset, 1,
1441 "%s = 6.0/4.8 kbit/s (TCH F/4.8) %sallowed",
1443 (oct & 0x01) ? "" : "not ");
1448 else if (sdi == 0x03)
1454 case 0x00: str = "SDCCH or Full rate TCH channel Bm or Half rate TCH channel Lm"; break;
1455 case 0x01: str = "SDCCH"; break;
1456 case 0x02: str = "SDCCH or Full rate TCH channel Bm"; break;
1457 case 0x03: str = "SDCCH or Half rate TCH channel Lm"; break;
1458 case 0x08: str = "Full rate TCH channel Bm"; break;
1459 case 0x09: str = "Half rate TCH channel Lm"; break;
1460 case 0x0a: str = "Full or Half rate TCH channel, Full rate preferred, changes allowed also after first channel allocation as a result of the request"; break;
1461 case 0x0b: str = "Full or Half rate TCH channel, Half rate preferred, changes allowed also after first channel allocation as a result of the request"; break;
1462 case 0x1a: str = "Full or Half rate TCH channel, Full rate preferred, changes not allowed after first channel allocation as a result of the request"; break;
1463 case 0x1b: str = "Full or Half rate TCH channel. Half rate preferred, changes not allowed after first channel allocation as a result of the request"; break;
1469 proto_tree_add_text(tree,
1470 tvb, curr_offset, 1,
1471 "Channel Rate and Type: %s",
1476 NO_MORE_DATA_CHECK(len);
1478 proto_tree_add_text(tree,
1479 tvb, curr_offset, len - (curr_offset - offset),
1482 curr_offset += len - (curr_offset - offset);
1486 /* unknown format */
1488 proto_tree_add_text(tree,
1489 tvb, curr_offset, len - (curr_offset - offset),
1492 curr_offset += len - (curr_offset - offset);
1495 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
1497 return(curr_offset - offset);
1500 * 3.2.2.12 Periodicity
1503 be_periodicity(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
1505 guint32 curr_offset;
1507 curr_offset = offset;
1508 proto_tree_add_item(tree, hf_gsm_a_bssmap_periodicity, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1511 return(curr_offset - offset);
1514 * 3.2.2.13 Extended Resource Indicator
1516 static const true_false_string bssmap_tarr_vals = {
1517 "The total number of accessible channels is requested",
1518 "No extra Resource Information is requested"
1521 be_ext_res_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
1523 guint32 curr_offset;
1525 curr_offset = offset;
1527 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 6, ENC_BIG_ENDIAN);
1528 /* the Subsequent Mode field */
1529 proto_tree_add_item(tree, hf_gsm_a_bssmap_sm, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1530 /* Total Accessible Resource Requested field */
1531 proto_tree_add_item(tree, hf_gsm_a_bssmap_tarr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1535 return(curr_offset - offset);
1538 * 3.2.2.14 Total Resource Accessible
1541 be_tot_res_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
1543 guint32 curr_offset;
1545 curr_offset = offset;
1547 /* Total number of accessible full rate channels */
1548 proto_tree_add_item(tree, hf_gsm_a_bssmap_tot_no_of_fullr_ch, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
1550 /* Total number of accessible half rate channels */
1551 proto_tree_add_item(tree, hf_gsm_a_bssmap_tot_no_of_hr_ch, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
1558 * 3.2.2.15 LSA Identifier
1559 * The octets 3-5 are coded as specified in 3GPP TS 23.003, 'Identification of Localised Service Area'. Bit 8 of octet 3 is the MSB.
1562 be_lsa_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
1564 guint32 curr_offset;
1566 curr_offset = offset;
1569 * The LSA ID consists of 24 bits, numbered from 0 to 23, with bit 0 being the LSB.
1570 * Bit 0 indicates whether the LSA is a PLMN significant number or a universal LSA.
1571 * If the bit is set to 0 the LSA is a PLMN significant number; if it is set to
1572 * 1 it is a universal LSA.
1574 proto_tree_add_item(tree, hf_gsm_a_bssmap_lsa_id, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
1583 * 3.2.2.16 LSA Identifier List
1586 be_lsa_id_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
1588 guint32 curr_offset;
1590 curr_offset = offset;
1592 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 7, ENC_BIG_ENDIAN);
1593 proto_tree_add_item(tree, hf_gsm_a_bssmap_ep, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1596 /* LSA identification 1 - n */
1598 while (curr_offset-offset < len){
1599 proto_tree_add_item(tree, hf_gsm_a_bssmap_lsa_id, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
1606 * [2] 3.2.2.17 Cell Identifier
1607 * Formats everything after the discriminator, shared function
1610 be_cell_id_aux(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string, int string_len, guint8 disc)
1613 guint32 curr_offset;
1616 add_string[0] = '\0';
1617 curr_offset = offset;
1627 case 0x08: /* For intersystem handover from GSM to UMTS or cdma2000: */
1630 /* Serving Area Identity, SAI, is used to identify the Serving Area of UE
1631 * within UTRAN or cdma2000.
1632 * Coding of Cell Identification for Cell identification discriminator = 1011
1633 * The coding of SAI is defined in 3GPP TS 25.413, without the protocol extension
1636 * SAI ::= SEQUENCE {
1637 * pLMNidentity PLMNidentity,
1640 * iE-Extensions ProtocolExtensionContainer { {SAI-ExtIEs} } OPTIONAL
1644 case 0x0c: /* For identification of a UTRAN cell for cell load information: */
1646 curr_offset = dissect_e212_mcc_mnc(tvb, g_pinfo, tree, curr_offset, TRUE);
1648 curr_offset = dissect_e212_mcc_mnc(tvb, g_pinfo, tree, curr_offset, ENC_BIG_ENDIAN);
1653 case 0x0a: /*For intersystem handover from GSM to UMTS or cdma2000: */
1655 value = tvb_get_ntohs(tvb, curr_offset);
1656 proto_tree_add_item(tree, hf_gsm_a_bssmap_cell_lac, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
1660 g_snprintf(add_string, string_len, " - LAC (0x%04x)", value);
1663 /* If SAI, SAC follows */
1664 proto_tree_add_item(tree, hf_gsm_a_bssmap_sac, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
1669 case 0x09: /* For intersystem handover from GSM to UMTS or cdma2000: */
1671 if ((disc == 0x08) ||(disc == 0x09) || (disc == 0x0a)|| (disc == 0x0c)){
1673 * The octets 9-10 are coded as the RNC-ID (0..4095) or the
1674 * Extended RNC-ID (4096..65535) specified in 3GPP TS 25.413 [31]:
1675 * XXX is this a PER encoded number?
1677 value = tvb_get_ntohs(tvb, curr_offset);
1678 proto_tree_add_item(tree, hf_gsm_a_bssmap_be_rnc_id, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
1683 if (add_string[0] == '\0')
1685 g_snprintf(add_string, string_len, " - RNC-ID (%u)", value);
1689 g_snprintf(add_string, string_len, "%s/RNC-ID (%u)", add_string, value);
1695 if ((disc == 0x04) || (disc == 0x05) || (disc == 0x08)) break;
1702 value = tvb_get_ntohs(tvb, curr_offset);
1703 proto_tree_add_uint(tree, hf_gsm_a_bssmap_cell_ci, tvb,
1704 curr_offset, 2, value);
1710 if (add_string[0] == '\0')
1712 g_snprintf(add_string, string_len, " - CI (%u)", value);
1716 g_snprintf(add_string, string_len, "%s/CI (%u)", add_string, value);
1721 proto_tree_add_text(tree, tvb, curr_offset, len,
1722 "Cell ID - Unknown format");
1724 curr_offset += (len);
1728 return(curr_offset - offset);
1732 be_cell_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string, int string_len)
1736 guint32 curr_offset;
1738 curr_offset = offset;
1740 oct = tvb_get_guint8(tvb, curr_offset);
1742 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, ENC_BIG_ENDIAN);
1743 proto_tree_add_item(tree, hf_gsm_a_bssmap_be_cell_id_disc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1745 cell_discriminator = disc; /* may be required later */
1748 NO_MORE_DATA_CHECK(len);
1751 be_cell_id_aux(tvb, tree, pinfo, curr_offset, len - (curr_offset - offset), add_string, string_len, disc);
1753 /* no length check possible */
1755 return(curr_offset - offset);
1759 * [2] 3.2.2.18 Priority
1761 static const true_false_string bssmap_pci_value = {
1762 "This allocation request may preempt an existing connection",
1763 "This allocation request shall not preempt an existing connection"
1766 static const true_false_string bssmap_pvi_value = {
1767 "This connection might be preempted by another allocation request",
1768 "This connection shall not be preempted by another allocation request"
1772 be_prio(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string, int string_len)
1775 guint32 curr_offset;
1778 curr_offset = offset;
1780 oct = tvb_get_guint8(tvb, curr_offset);
1782 proto_tree_add_item(tree, hf_gsm_a_b8spare, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1783 proto_tree_add_item(tree, hf_gsm_a_bssmap_pci, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1786 switch ((oct & 0x3c) >> 2)
1788 case 0x00: str = "Spare"; break;
1789 case 0x0f: str = "priority not used"; break;
1791 str = "1 is highest";
1795 other_decode_bitfield_value(a_bigbuf, oct, 0x3c, 8);
1796 proto_tree_add_text(tree,
1797 tvb, curr_offset, 1,
1798 "%s = Priority Level: (%u) %s",
1804 g_snprintf(add_string, string_len, " - (%u)", (oct & 0x3c) >> 2);
1806 proto_tree_add_item(tree, hf_gsm_a_bssmap_qa, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1807 proto_tree_add_item(tree, hf_gsm_a_bssmap_pvi, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1811 /* no length check possible */
1813 return(curr_offset - offset);
1816 * 3.2.2.19 Classmark Information Type 2
1817 * The classmark octets 3, 4 and 5 are coded in the same way as the
1818 * equivalent octets in the Mobile station classmark 2 element of
1820 * dissected in packet-gsm_a_common.c
1823 * 3.2.2.20 Classmark Information Type 3
1824 * The classmark octets 3 to 34 are coded in the same way as the
1825 * equivalent octets in the Mobile station classmark 3 element of
1827 * dissected in packet-gsm_a_common.c
1830 * 3.2.2.21 Interference Band To Be Used
1833 be_int_band(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
1835 guint32 curr_offset;
1837 curr_offset = offset;
1839 proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet");
1846 * Octet 2 is coded as the equivalent field from 3GPP TS 24.008
1847 * Dissected in packet-gsm_a_rr.c
1850 * 3.2.2.23 LSA Information
1853 static const true_false_string bssmap_lsa_only_value = {
1854 "Access to the LSAs that are defined ",
1855 "Allowing emergency call"
1859 be_lsa_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
1861 guint32 curr_offset;
1863 curr_offset = offset;
1865 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 7, ENC_BIG_ENDIAN);
1866 proto_tree_add_item(tree, hf_gsm_a_bssmap_lsa_only, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1869 while (curr_offset-offset < len){
1870 /* LSA identification and attributes */
1872 * spare act pref priority
1874 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 2, ENC_BIG_ENDIAN);
1875 proto_tree_add_item(tree, hf_gsm_a_bssmap_act, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1876 proto_tree_add_item(tree, hf_gsm_a_bssmap_pref, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1877 proto_tree_add_item(tree, hf_gsm_a_bssmap_lsa_inf_prio, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1879 proto_tree_add_item(tree, hf_gsm_a_bssmap_lsa_id, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
1886 * [2] 3.2.2.24 Layer 3 Information
1889 be_l3_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
1891 guint32 curr_offset;
1894 curr_offset = offset;
1896 proto_tree_add_text(tree, tvb, curr_offset, len,
1897 "Layer 3 Information value");
1900 * dissect the embedded DTAP message
1902 l3_tvb = tvb_new_subset(tvb, curr_offset, len, len);
1904 /* This information element carries a radio interface message.
1905 In the case of an Intersystem handover to UMTS,
1906 this information element contains a HANDOVER TO UTRAN COMMAND message
1907 as defined in 3GPP TS 25.331.
1908 In the case of an Inter BSC handover,
1909 it contains an RR HANDOVER COMMAND message as defined in 3GPP TS 44.018.
1910 In the case of an Intersystem handover to cdma2000,
1911 this information element contains the HANDOVER TO CDMA2000 COMMAND message,
1912 as defined in 3GPP TS 44.018. */
1914 /* note that we can't (from this PDU alone) determine whether a handover is to UMTS or cdma2000
1915 Maybe if cdma2000 support is added later, a preference option would select dissection of cdma2000 or UMTS.
1916 If SCCP trace is enabled (and the cell discriminator has correctly appeared in an earlier PDU)
1917 then we will have remembered the discriminator */
1918 if ( cell_discriminator == 0xFF)
1920 proto_tree_add_text(tree, l3_tvb, curr_offset, len, "Cell Discriminator not initialised, try enabling the SCCP protocol option [Trace Associations], \n or maybe the file does not contain the PDUs needed for SCCP trace");
1922 else if ((cell_discriminator & 0x0f) < 8) {
1924 call_dissector(dtap_handle, l3_tvb, g_pinfo, g_tree);
1926 else if ((cell_discriminator & 0x0f) < 13) {
1928 /* UMTS or CDMA 2000 */
1929 dissect_rrc_HandoverToUTRANCommand_PDU(l3_tvb, g_pinfo, g_tree);
1932 proto_tree_add_text(tree, l3_tvb, curr_offset, len, "Unrecognised Cell Discriminator %x",cell_discriminator);
1936 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
1938 return(curr_offset - offset);
1945 be_dlci(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
1948 guint32 curr_offset;
1949 proto_item *item = NULL;
1950 proto_tree *subtree = NULL;
1952 curr_offset = offset;
1955 proto_tree_add_text(tree, tvb, curr_offset, 1,
1956 "Data Link Connection Identifier");
1958 subtree = proto_item_add_subtree(item, ett_dlci);
1960 oct = tvb_get_guint8(tvb, curr_offset);
1962 proto_tree_add_uint(subtree, hf_gsm_a_bssmap_dlci_cc, tvb, curr_offset, 1, oct);
1963 proto_tree_add_uint(subtree, hf_gsm_a_bssmap_dlci_spare, tvb, curr_offset, 1, oct);
1964 proto_tree_add_uint(subtree, hf_gsm_a_bssmap_dlci_sapi, tvb, curr_offset, 1, oct);
1968 /* no length check possible */
1970 return(curr_offset - offset);
1974 * [2] 3.2.2.26 Downlink DTX Flag
1977 be_down_dtx_flag(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
1980 guint32 curr_offset;
1982 curr_offset = offset;
1984 oct = tvb_get_guint8(tvb, curr_offset);
1986 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 7, ENC_BIG_ENDIAN);
1987 other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
1988 proto_tree_add_text(tree,
1989 tvb, curr_offset, 1,
1990 "%s = BSS is %s to activate DTX in the downlink direction",
1992 (oct & 0x01) ? "forbidden" : "allowed");
1996 /* no length check possible */
1998 return(curr_offset - offset);
2002 * [2] 3.2.2.27 Cell Identifier List
2005 be_cell_id_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len)
2011 guint32 curr_offset;
2012 proto_item *item = NULL;
2013 proto_tree *subtree = NULL;
2015 curr_offset = offset;
2017 oct = tvb_get_guint8(tvb, curr_offset);
2019 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, ENC_BIG_ENDIAN);
2022 cell_discriminator = disc; /* may be required later */
2023 proto_tree_add_item(tree, hf_gsm_a_bssmap_be_cell_id_disc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2026 NO_MORE_DATA_CHECK(len);
2032 proto_tree_add_text(tree,
2033 tvb, curr_offset, -1,
2037 subtree = proto_item_add_subtree(item, ett_cell_list);
2040 add_string[0] = '\0';
2043 be_cell_id_aux(tvb, subtree, pinfo, curr_offset, len - (curr_offset - offset), add_string, string_len, disc);
2045 if (add_string && add_string[0] != '\0')
2047 proto_item_append_text(item, "%s", add_string ? add_string : "");
2050 proto_item_set_len(item, consumed);
2052 curr_offset += consumed;
2056 while ((len - (curr_offset - offset)) > 0 && consumed > 0);
2059 g_snprintf(add_string, string_len, " - %u cell%s",
2060 num_cells, plurality(num_cells, "", "s"));
2063 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
2065 return(curr_offset - offset);
2068 * 3.2.2.27a Cell Identifier List Segment
2071 static const value_string gsm_a_bssap_cell_id_list_seg_cell_id_disc_vals[] = {
2072 { 0x0, "The whole Cell Global Identification, CGI, is used to identify the cells"},
2073 { 0x1, "Location Area Code, LAC, and Cell Identify, CI, is used to identify the cells within a given MCC and MNC"},
2074 { 0x2, "Cell Identity, CI, is used to identify the cells within a given MCC and MNC and LAC"},
2075 { 0x3, "No cell is associated with the transaction"},
2076 { 0x4, "Location Area Identification, LAI, is used to identify all cells within a Location Area"},
2077 { 0x5, "Location Area Code, LAC, is used to identify all cells within a location area"},
2078 { 0x6, "All cells on the BSS are identified"},
2079 { 0x7, "MCC and MNC, is used to identify all cells within the given MCC and MNC"},
2084 be_cell_id_list_seg(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
2086 guint32 curr_offset;
2088 curr_offset = offset;
2090 /* Sequence Length */
2091 proto_tree_add_item(tree, hf_gsm_a_bssmap_seq_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2092 /* Sequence Number */
2093 proto_tree_add_item(tree, hf_gsm_a_bssmap_seq_no, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2096 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, ENC_BIG_ENDIAN);
2097 /* Cell identification discriminator */
2098 proto_tree_add_item(tree, hf_gsm_a_bssap_cell_id_list_seg_cell_id_disc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2100 proto_tree_add_text(tree, tvb, curr_offset, len-2, "Not decoded yet");
2107 * 3.2.2.27b Cell Identifier List Segment for established cells
2110 be_cell_id_lst_seg_f_est_cells(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
2112 guint32 curr_offset;
2114 curr_offset = offset;
2116 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, ENC_BIG_ENDIAN);
2117 /* Cell identification discriminator */
2118 proto_tree_add_item(tree, hf_gsm_a_bssap_cell_id_list_seg_cell_id_disc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2121 proto_tree_add_text(tree, tvb, curr_offset, len-1, "Not decoded yet");
2127 * 3.2.2.27c Cell Identifier List Segment for cells to be established
2130 be_cell_id_lst_seg_f_cell_tb_est(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
2132 guint32 curr_offset;
2134 curr_offset = offset;
2136 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, ENC_BIG_ENDIAN);
2137 /* Cell identification discriminator */
2138 proto_tree_add_item(tree, hf_gsm_a_bssap_cell_id_list_seg_cell_id_disc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2141 proto_tree_add_text(tree, tvb, curr_offset, len-1, "Not decoded yet");
2150 * 3.2.2.27e Cell Identifier List Segment for released cells - no user present
2153 be_cell_id_lst_seg_f_rel_cell(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
2155 guint32 curr_offset;
2157 curr_offset = offset;
2159 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, ENC_BIG_ENDIAN);
2160 /* Cell identification discriminator */
2161 proto_tree_add_item(tree, hf_gsm_a_bssap_cell_id_list_seg_cell_id_disc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2164 proto_tree_add_text(tree, tvb, curr_offset, len-1, "Not decoded yet");
2170 * 3.2.2.27f Cell Identifier List Segment for not established cells - no establishment possible
2173 be_cell_id_lst_seg_f_not_est_cell(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
2175 guint32 curr_offset;
2177 curr_offset = offset;
2179 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, ENC_BIG_ENDIAN);
2180 /* Cell identification discriminator */
2181 proto_tree_add_item(tree, hf_gsm_a_bssap_cell_id_list_seg_cell_id_disc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2184 proto_tree_add_text(tree, tvb, curr_offset, len-1, "Not decoded yet");
2190 * 3.2.2.28 Response Request
2194 * 3.2.2.29 Resource Indication Method
2196 static const value_string gsm_a_bssap_resource_indication_vals[] = {
2197 { 0x0, "Spontaneous resource information expected"},
2198 { 0x1, "One single resource information expected"},
2199 { 0x2, "Periodic resource information expected"},
2200 { 0x3, "No cell is associated with the transaction"},
2201 { 0x4, "No resource information expected"},
2205 be_res_ind_method(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
2207 guint32 curr_offset;
2209 curr_offset = offset;
2211 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, ENC_BIG_ENDIAN);
2212 proto_tree_add_item(tree, hf_gsm_a_bssap_res_ind_method, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2219 * 3.2.2.30 Classmark Information Type 1
2220 * coded in the same way as the equivalent octet in the classmark 1 element of 3GPP TS 24.008
2221 * dissected in packet-gsm_a_common.c
2224 * 3.2.2.31 Circuit Identity Code List
2227 be_cic_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
2229 guint32 curr_offset;
2231 curr_offset = offset;
2233 proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet");
2239 * 3.2.2.32 Diagnostics
2242 be_diag(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
2244 guint32 curr_offset;
2246 curr_offset = offset;
2248 proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet");
2254 * [2] 3.2.2.33 Chosen Channel
2256 static const value_string gsm_a_bssmap_ch_mode_vals[] = {
2257 { 0, "no channel mode indication" },
2258 { 9, "speech (full rate or half rate)" },
2259 { 14, "data, 14.5 kbit/s radio interface rate" },
2260 { 11, "data, 12.0 kbit/s radio interface rate" },
2261 { 12, "data, 6.0 kbit/s radio interface rate" },
2262 { 13, "data, 3.6 kbit/s radio interface rate" },
2263 { 8, "signalling only" },
2264 { 1, "data, 29.0 kbit/s radio interface rate" },
2265 { 2, "data, 32.0 kbit/s radio interface rate" },
2266 { 3, "data, 43.5 kbit/s radio interface rate" },
2267 { 4, "data, 43.5 kbit/s downlink and 14.5 kbit/s uplink" },
2268 { 5, "data, 29.0 kbit/s downlink and 14.5 kbit/s uplink" },
2269 { 6, "data, 43.5 kbit/s downlink and 29.0 kbit/s uplink" },
2270 { 7, "data, 14.5 kbit/s downlink and 43.5 kbit/s uplink" },
2271 { 10, "data, 14.5 kbit/s downlink and 29.0 kbit/s uplink" },
2272 { 15, "data, 29.0 kbit/s downlink and 43.5 kbit/s uplink" },
2275 static const value_string gsm_a_bssmap_channel_vals[] = {
2276 { 0, "None(Current Channel Type 1 - Reserved)" },
2283 { 8, "1 Full rate TCH" },
2284 { 9, "1 Half rate TCH" },
2285 { 10, "2 Full Rate TCHs" },
2286 { 11, "3 Full Rate TCHs" },
2287 { 12, "4 Full Rate TCHs" },
2288 { 13, "5 Full Rate TCHs" },
2289 { 14, "6 Full Rate TCHs" },
2290 { 15, "7 Full Rate TCHs" },
2291 { 4, "8 Full Rate TCHs" },
2294 static const value_string gsm_a_bssmap_trace_bss_record_type_vals[] = {
2298 { 3, "No BSS Trace" },
2301 static const value_string gsm_a_bssmap_trace_msc_record_type_vals[] = {
2303 { 1, "Detailed (optional)" },
2305 { 3, "No MSC Trace" },
2308 static const value_string gsm_a_bssmap_trace_invoking_event_vals[] = {
2309 { 0, "MOC, MTC, SMS MO, SMS MT, PDS MO, PDS MT, SS, Location Updates, IMSI attach, IMSI detach" },
2310 { 1, "MOC, MTC, SMS_MO, SMS_MT, PDS MO, PDS MT, SS only" },
2311 { 2, "Location updates, IMSI attach IMSI detach only" },
2312 { 3, "Operator definable" },
2316 be_chosen_chan(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
2319 guint32 curr_offset;
2321 curr_offset = offset;
2323 oct = tvb_get_guint8(tvb, curr_offset);
2326 proto_tree_add_item(tree, hf_gsm_a_bssmap_ch_mode, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2328 proto_tree_add_item(tree, hf_gsm_a_bssmap_channel, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2332 /* no length check possible */
2334 return(curr_offset - offset);
2338 * [2] 3.2.2.34 Cipher Response Mode
2341 be_ciph_resp_mode(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
2344 guint32 curr_offset;
2346 curr_offset = offset;
2348 oct = tvb_get_guint8(tvb, curr_offset);
2350 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 7, ENC_BIG_ENDIAN);
2352 other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
2353 proto_tree_add_text(tree,
2354 tvb, curr_offset, 1,
2355 "%s = IMEISV must %sbe included by the mobile station",
2357 (oct & 0x01) ? "" : "not ");
2361 /* no length check possible */
2363 return(curr_offset - offset);
2368 * [2] 3.2.2.35 Layer 3 Message Contents
2371 be_l3_msg(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
2373 guint32 curr_offset;
2376 curr_offset = offset;
2378 proto_tree_add_text(tree, tvb, curr_offset, len,
2379 "Layer 3 Message Contents");
2382 * dissect the embedded DTAP message
2384 l3_tvb = tvb_new_subset(tvb, curr_offset, len, len);
2386 /* Octet j (j = 3, 4, ..., n) is the unchanged octet j of a radio interface layer 3 message
2387 * as defined in 3GPP TS 24.008, n is equal to the length of that radio interface layer 3 message. */
2388 call_dissector(dtap_handle, l3_tvb, g_pinfo, g_tree);
2395 * [2] 3.2.2.36 Channel Needed
2398 be_cha_needed(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
2400 guint32 curr_offset;
2402 curr_offset = offset;
2404 /* no length check possible */
2405 proto_tree_add_bits_item(tree, hf_gsm_a_rr_chnl_needed_ch1, tvb, (curr_offset<<3)+6, 2, ENC_BIG_ENDIAN);
2409 return(curr_offset - offset);
2412 * 3.2.2.37 Trace Type
2413 * coded as the MSC/BSS Trace Type specified in 3GPP TS 52.008
2416 be_trace_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
2418 guint32 curr_offset;
2421 bit_offset = (offset<<3);
2422 curr_offset = offset;
2424 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_trace_priority_indication, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2426 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, bit_offset, 1, ENC_BIG_ENDIAN);
2428 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_trace_bss_record_type, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
2430 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_trace_msc_record_type, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
2432 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_trace_invoking_event, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
2436 /* no length check possible */
2438 return(curr_offset - offset);
2442 * [2] 3.2.2.38 TriggerID
2445 be_trace_trigger_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
2447 guint32 curr_offset;
2449 curr_offset = offset;
2451 proto_tree_add_item(tree, hf_gsm_a_bssmap_trace_trigger_id, tvb, curr_offset, len, ENC_BIG_ENDIAN);
2454 /* no length check possible */
2456 return(curr_offset - offset);
2459 /* 3.2.2.39 Trace Reference */
2461 be_trace_reference(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
2463 guint32 curr_offset;
2465 curr_offset = offset;
2468 proto_tree_add_item(tree, hf_gsm_a_bssmap_trace_reference, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
2471 /* no length check possible */
2473 return(curr_offset - offset);
2475 /* 3.2.2.40 TransactionID */
2477 be_trace_transaction_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
2479 guint32 curr_offset;
2481 curr_offset = offset;
2486 proto_tree_add_item(tree, hf_gsm_a_bssmap_trace_reference, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2491 proto_tree_add_item(tree, hf_gsm_a_bssmap_trace_reference, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
2495 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
2497 return(curr_offset - offset);
2500 * 3.2.2.41 Mobile Identity (IMSI, IMEISV or IMEI as coded in 3GPP TS 24.008)
2501 * Dissected in packet-gsm_a_common.c
2505 * For the OMC identity, see 3GPP TS 52.021
2508 be_trace_omc_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
2510 guint32 curr_offset;
2512 curr_offset = offset;
2514 proto_tree_add_item(tree, hf_gsm_a_bssmap_trace_omc_id, tvb, curr_offset, len, ENC_BIG_ENDIAN);
2517 /* no length check possible */
2519 return(curr_offset - offset);
2522 * [2] 3.2.2.43 Forward Indicator
2525 be_for_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
2528 guint32 curr_offset;
2529 const gchar *str = NULL;
2531 curr_offset = offset;
2533 oct = tvb_get_guint8(tvb, curr_offset);
2535 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, ENC_BIG_ENDIAN);
2539 case 1: str = "forward to subsequent BSS, no trace at MSC"; break;
2540 case 2: str = "forward to subsequent BSS, and trace at MSC"; break;
2546 other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8);
2547 proto_tree_add_text(tree,
2548 tvb, curr_offset, 1,
2555 /* no length check possible */
2557 return(curr_offset - offset);
2561 * [2] 3.2.2.44 Chosen Encryption Algorithm
2564 be_chosen_enc_alg(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string, int string_len)
2567 guint32 curr_offset;
2568 const gchar *str = NULL;
2570 curr_offset = offset;
2572 oct = tvb_get_guint8(tvb, curr_offset);
2576 case 0x01: str = "No encryption used"; break;
2577 case 0x02: str = "GSM A5/1"; break;
2578 case 0x03: str = "GSM A5/2"; break;
2579 case 0x04: str = "GSM A5/3"; break;
2580 case 0x05: str = "GSM A5/4"; break;
2581 case 0x06: str = "GSM A5/5"; break;
2582 case 0x07: str = "GSM A5/6"; break;
2583 case 0x08: str = "GSM A5/7"; break;
2589 proto_tree_add_text(tree,
2590 tvb, curr_offset, 1,
2591 "Algorithm Identifier: %s",
2597 g_snprintf(add_string, string_len, " - %s", str);
2599 /* no length check possible */
2601 return(curr_offset - offset);
2605 * [2] 3.2.2.45 Circuit Pool
2608 be_cct_pool(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string, int string_len)
2611 guint32 curr_offset;
2612 const gchar *str = NULL;
2614 curr_offset = offset;
2616 oct = tvb_get_guint8(tvb, curr_offset);
2622 else if ((oct >= 0x80) && (oct <= 0x8f))
2624 str = ", for national/local use";
2628 str = ", reserved for future international use";
2631 proto_tree_add_text(tree,
2632 tvb, curr_offset, 1,
2633 "Circuit pool number: %u%s",
2640 g_snprintf(add_string, string_len, " - (%u)", oct);
2642 /* no length check possible */
2644 return(curr_offset - offset);
2647 * 3.2.2.46 Circuit Pool List
2648 * 3.2.2.47 Time Indication
2649 * 3.2.2.48 Resource Situation
2652 * [2] 3.2.2.49 Current Channel Type 1
2655 be_curr_chan_1(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
2658 guint32 curr_offset;
2660 curr_offset = offset;
2662 oct = tvb_get_guint8(tvb, curr_offset);
2665 proto_tree_add_item(tree, hf_gsm_a_bssmap_cur_ch_mode, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2667 proto_tree_add_item(tree, hf_gsm_a_bssmap_channel, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2671 /* no length check possible */
2673 return(curr_offset - offset);
2677 * [2] 3.2.2.50 Queuing Indicator
2680 be_que_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
2683 guint32 curr_offset;
2685 curr_offset = offset;
2687 oct = tvb_get_guint8(tvb, curr_offset);
2689 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 6, ENC_BIG_ENDIAN);
2691 other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8);
2692 proto_tree_add_text(tree,
2693 tvb, curr_offset, 1,
2694 "%s = qri: it is recommended %sto allow queuing",
2696 (oct & 0x02) ? "" : "not ");
2698 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, (curr_offset<<3)+7, 1, ENC_BIG_ENDIAN);
2702 /* no length check possible */
2704 return(curr_offset - offset);
2708 * [2] 3.2.2.51 Speech Version
2711 be_speech_ver(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string, int string_len)
2714 guint32 curr_offset;
2715 const gchar *str = NULL;
2716 const gchar *short_str = NULL;
2718 curr_offset = offset;
2720 oct = tvb_get_guint8(tvb, curr_offset);
2722 proto_tree_add_item(tree, hf_gsm_a_b8spare, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2724 /* The bits 7-1 of octet 2 are coded in the same way as the permitted speech version identifier
2725 * in the Channel type information element.
2730 case 0x01: str = "GSM speech full rate version 1"; short_str = "FR1"; break;
2731 case 0x11: str = "GSM speech full rate version 2"; short_str = "FR2"; break;
2732 case 0x21: str = "GSM speech full rate version 3 (AMR)"; short_str = "FR3 (AMR)"; break;
2734 case 0x05: str = "GSM speech half rate version 1"; short_str = "HR1"; break;
2735 case 0x15: str = "GSM speech half rate version 2"; short_str = "HR2"; break;
2736 case 0x25: str = "GSM speech half rate version 3 (AMR)"; short_str = "HR3 (AMR)"; break;
2738 case 0x41: str = "GSM speech full rate version 4";short_str = "OFR AMR-WB"; break;
2739 case 0x42: str = "GSM speech full rate version 5";short_str = "FR AMR-WB"; break;
2740 case 0x46: str = "GSM speech half rate version 4";short_str = "OHR AMR-WB"; break;
2741 case 0x45: str = "GSM speech half rate version 6";short_str = "OHR AMR"; break;
2750 other_decode_bitfield_value(a_bigbuf, oct, 0x7f, 8);
2751 proto_tree_add_text(tree,
2752 tvb, curr_offset, 1,
2753 "%s = Speech version identifier: %s",
2760 g_snprintf(add_string, string_len, " - (%s)", short_str);
2762 /* no length check possible */
2764 return(curr_offset - offset);
2767 * 3.2.2.52 Assignment Requirement
2770 be_ass_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
2772 guint32 curr_offset;
2774 curr_offset = offset;
2776 proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet");
2784 * 3.2.2.54 Talker Flag
2788 * 3.2.2.55 Group Call Reference
2789 * The octets 3-7 are coded in the same way as the octets 2-6 in the
2790 * Descriptive group or broadcast call reference information element as defined in 3GPP TS 24.008.
2791 * dissected in packet-gsm_a_common.c (de_d_gb_call_ref)
2794 * 3.2.2.56 eMLPP Priority
2795 * The call priority field (bit 3 to 1 of octet 2) is coded in the same way as the call priority field
2796 * (bit 3 to 1 of octet 5) in the Descriptive group or broadcast call reference information element as
2797 * defined in 3GPP TS 24.008.
2799 static const value_string gsm_a_bssmap_call_priority_vals[] = {
2800 { 0x00, "No priority applied" },
2801 { 0x01, "Call priority level 4" },
2802 { 0x02, "Call priority level 3" },
2803 { 0x03, "Call priority level 2" },
2804 { 0x04, "Call priority level 1" },
2805 { 0x05, "Call priority level 0" },
2806 { 0x06, "Call priority level B" },
2807 { 0x07, "Call priority level A" },
2812 be_emlpp_prio(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
2814 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, offset << 3, 5, ENC_BIG_ENDIAN);
2815 proto_tree_add_item(tree, hf_gsm_a_bssmap_emlpp_prio, tvb, offset, 1, ENC_BIG_ENDIAN);
2821 * 3.2.2.57 Configuration Evolution Indication
2823 static const value_string gsm_a_bssmap_smi_vals[] = {
2824 { 0, "No Modification is allowed" },
2825 { 1, "Modification is allowed and maximum number of TCH/F is 1" },
2826 { 2, "Modification is allowed and maximum number of TCH/F is 2" },
2827 { 3, "Modification is allowed and maximum number of TCH/F is 3" },
2828 { 4, "Modification is allowed and maximum number of TCH/F is 4" },
2836 be_conf_evo_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
2838 guint32 curr_offset;
2840 curr_offset = offset;
2842 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, ENC_BIG_ENDIAN);
2843 /* Subsequent Modification Indication */
2844 proto_tree_add_item(tree, hf_gsm_a_bssmap_smi, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2847 return(curr_offset - offset);
2850 * 3.2.2.58 Old BSS to New BSS information
2852 /* This function is only called from other protocols (e.g. RANAP),
2853 internally, the Field Element dissector is called directly */
2855 bssmap_old_bss_to_new_bss_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo)
2865 len = tvb_length(tvb);
2866 be_field_element_dissect(tvb, tree, pinfo, 0, len, NULL, 0);
2874 * (The QoS octets 3 to n are coded in the same way as the equivalent octets
2875 * in the LCS QoS element of 3GPP TS 49.031.)
2879 * 3.2.2.61 LSA Access Control Suppression
2882 * 3.2.2.62 LCS Priority
2883 * The Priority octets 3 to n are coded in the same way as the equivalent octets
2884 * in the LCS Priority element of 3GPP TS 49.031.
2886 /* Location Information definitions */
2887 static const value_string lcs_priority_vals[] = {
2894 be_lcs_prio(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
2896 guint32 curr_offset;
2898 curr_offset = offset;
2900 /* This octet is coded as the LCS-Priority octet in 3GPP TS 29.002 */
2901 proto_tree_add_item(tree, hf_gsm_a_bssmap_lcs_pri, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2904 return(curr_offset - offset);
2908 * 3.2.2.63 Location Type (Location Type element of 3GPP TS 49.031 BSSAP-LE.)
2911 be_loc_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
2913 guint32 curr_offset;
2914 guint8 location_information;
2916 curr_offset = offset;
2918 /* Extract the location information and add to protocol tree */
2919 location_information = tvb_get_guint8(tvb, offset);
2920 proto_tree_add_item(tree, hf_gsm_a_bssmap_location_type_location_information, tvb, offset, 1, ENC_BIG_ENDIAN);
2923 if(location_information == 1 || location_information == 2)
2925 /* protocol method */
2926 proto_tree_add_item(tree, hf_gsm_a_bssmap_location_type_positioning_method, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2930 return(curr_offset - offset);
2934 * 3.2.2.64 Location Estimate
2935 * The Location Estimate field is composed of 1 or more octets with an internal structure
2936 * according to 3GPP TS 23.032.
2939 be_loc_est(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
2942 guint32 curr_offset;
2944 curr_offset = offset;
2946 data_tvb = tvb_new_subset(tvb, curr_offset, len, len);
2947 dissect_geographical_description(data_tvb, g_pinfo, tree);
2952 * 3.2.2.65 Positioning Data
2953 * Positioning Data element of 3GPP TS 49.031 BSSAP-LE.
2956 be_pos_data(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
2958 guint32 curr_offset;
2960 guint64 pos_data_disc;
2963 curr_offset = offset;
2966 bit_offset = (offset<<3);
2967 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare, tvb, bit_offset, 4, ENC_BIG_ENDIAN);
2970 /* Extract the positioning data discriminator and add to protocol tree */
2971 proto_tree_add_bits_ret_val(tree, hf_gsm_a_bssmap_positioning_data_discriminator, tvb, bit_offset, 4, &pos_data_disc, ENC_BIG_ENDIAN);
2975 if (pos_data_disc == 0)
2977 /* Extract the positioning methods and add to protocol tree */
2978 for (i = 0; i < len-1; i++)
2980 /* Extract the positioning method and add to protocol tree */
2981 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_positioning_method, tvb, bit_offset, 5, ENC_BIG_ENDIAN);
2983 /* Extract the usage and add to protocol tree */
2984 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_positioning_method_usage, tvb, bit_offset, 3, ENC_BIG_ENDIAN);
2990 return(curr_offset - offset);
2993 * 3.2.2.66 LCS Cause
2994 * LCS Cause element of 3GPP TS 49.031 BSSAP-LE.
2995 * Dissected in packet-gsm_bssap_le.c
2999 * 3.2.2.67 LCS Client Type
3000 * LCS Client Type element of 3GPP TS 49.031 BSSAP-LE.
3001 * Dissected in packet-gsm_bssap_le.c
3005 * 3.2.2.68 3GPP TS 48.008 version 6.9.0 Release 6
3008 /* BSSLAP the embedded message is as defined in 3GPP TS 48.071
3009 * LLP the embedded message contains a Facility Information Element as defined in 3GPP TS 44.071
3010 * excluding the Facility IEI and length of Facility IEI octets defined in 3GPP TS 44.071.
3011 * SMLCPP the embedded message is as defined in 3GPP TS 48.031
3013 static const value_string gsm_a_apdu_protocol_id_strings[] = {
3022 be_apdu(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
3024 guint32 curr_offset;
3025 guint8 apdu_protocol_id;
3028 curr_offset = offset;
3030 proto_tree_add_text(tree, tvb, curr_offset, len, "APDU");
3033 * dissect the embedded APDU message
3034 * if someone writes a TS 09.31 dissector
3036 * The APDU octets 4 to n are coded in the same way as the
3037 * equivalent octet in the APDU element of 3GPP TS 49.031 BSSAP-LE.
3040 apdu_protocol_id = tvb_get_guint8(tvb,curr_offset);
3041 proto_tree_add_item(tree, hf_gsm_a_bssmap_apdu_protocol_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3045 switch(apdu_protocol_id){
3048 * the embedded message is as defined in 3GPP TS 08.71(3GPP TS 48.071 version 7.2.0 Release 7)
3050 APDU_tvb = tvb_new_subset(tvb, curr_offset, len, len);
3051 if(gsm_bsslap_handle)
3052 call_dissector(gsm_bsslap_handle, APDU_tvb, g_pinfo, g_tree);
3056 * The embedded message contains a Facility Information Element as defined in 3GPP TS 04.71
3057 * excluding the Facility IEI and length of Facility IEI octets defined in 3GPP TS 04.71.(3GPP TS 44.071).
3062 * The embedded message is as defined in 3GPP TS 08.31(TS 48.031).
3071 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
3073 return(curr_offset - offset);
3076 * 3.2.2.69 Network Element Identity
3077 * Network Element Identity element of 3GPP TS 49.031 BSSAP-LE.
3080 * 3.2.2.70 GPS Assistance Data
3081 * Requested GPS Data element of 3GPP TS 49.031 BSSAP-LE.
3084 be_gps_assist_data(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3086 guint32 curr_offset;
3088 curr_offset = offset;
3090 proto_tree_add_text(tree, tvb, curr_offset, len , "Not decoded yet");
3096 * 3.2.2.71 Deciphering Keys
3097 * Deciphering Key element of 3GPP TS 49.031 BSSAP-LE.
3098 * Dissected in packet-gsm_bssmap_le.c
3101 /* 3.2.2.72 Return Error Request
3102 * Return Error Request element of 3GPP TS 49.031 BSSAP-LE.
3105 be_ret_err_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3107 guint32 curr_offset;
3109 curr_offset = offset;
3111 proto_tree_add_text(tree, tvb, curr_offset, len , "Not decoded yet");
3116 * 3.2.2.73 Return Error Cause
3117 * Return Error Cause element of 3GPP TS 49.031 BSSAP-LE.
3120 be_ret_err_cause(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3122 guint32 curr_offset;
3124 curr_offset = offset;
3126 proto_tree_add_text(tree, tvb, curr_offset, len , "Not decoded yet");
3131 * 3.2.2.74 Segmentation
3132 * Segmentation element of 3GPP TS 49.031 BSSAP-LE.
3135 be_seg(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3137 guint32 curr_offset;
3139 curr_offset = offset;
3141 proto_tree_add_text(tree, tvb, curr_offset, len , "Not decoded yet");
3146 * 3.2.2.75 Service Handover
3148 static const value_string gsm_a_bssmap_serv_ho_inf_vals[] = {
3149 { 0, "Handover to UTRAN or cdma2000 should be performed - Handover to UTRAN or cdma2000 is preferred" },
3150 { 1, "Handover to UTRAN or cdma2000 should not be performed - Handover to GSM is preferred" },
3151 { 2, "Handover to UTRAN or cdma2000 shall not be performed - " },
3152 { 3, "no information available for service based handover" },
3153 { 4, "no information available for service based handover" },
3154 { 5, "no information available for service based handover" },
3155 { 6, "no information available for service based handover" },
3156 { 7, "no information available for service based handover" },
3160 be_serv_ho(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3162 guint32 curr_offset;
3164 curr_offset = offset;
3166 /* Service Handover information */
3167 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 5, ENC_BIG_ENDIAN);
3168 proto_tree_add_item(tree, hf_gsm_a_bssmap_serv_ho_inf, tvb, curr_offset+1, 1, ENC_BIG_ENDIAN);
3174 * 3.2.2.76 Source RNC to target RNC transparent information (UMTS)
3178 be_src_rnc_to_tar_rnc_umts(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3180 tvbuff_t *container_tvb;
3181 guint32 curr_offset;
3183 curr_offset = offset;
3185 /* The Source RNC to Target RNC transparent Information value is encoded as
3186 * the Source RNC to Target RNC Transparent Container IE as defined in relevant
3187 * RANAP specification 3GPP TS 25.413, excluding RANAP tag
3189 container_tvb = tvb_new_subset(tvb, curr_offset, len, len);
3190 dissect_ranap_SourceRNC_ToTargetRNC_TransparentContainer_PDU(container_tvb, g_pinfo , tree);
3195 * 3.2.2.77 Source RNC to target RNC transparent information (cdma2000)
3198 be_src_rnc_to_tar_rnc_cdma(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3200 guint32 curr_offset;
3202 curr_offset = offset;
3204 proto_tree_add_text(tree, tvb, curr_offset, len , "Not decoded yet");
3205 /* The Source RNC to Target RNC transparent Information value (structure and encoding)
3206 * for cdma2000 is defined in relevant specifications.
3212 * 3.2.2.78 GERAN Classmark
3216 be_geran_cls_m(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3218 guint32 curr_offset;
3220 curr_offset = offset;
3222 proto_tree_add_text(tree, tvb, curr_offset, len , "Not decoded yet");
3227 * 3.2.2.79 GERAN BSC Container
3231 * 3.2.2.80 New BSS to Old BSS Information
3233 /* This function is only called from other protocols (e.g. RANAP),
3234 internally, the Field Element dissector is called directly */
3236 bssmap_new_bss_to_old_bss_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo)
3246 len = tvb_length(tvb);
3247 be_field_element_dissect(tvb, tree, pinfo, 0, len, NULL, 0);
3255 * 3.2.2.81 Inter-System Information
3258 be_inter_sys_inf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3260 guint32 curr_offset;
3262 curr_offset = offset;
3264 proto_tree_add_text(tree, tvb, curr_offset, len , "Not decoded yet");
3269 * 3.2.2.82 SNA Access Information
3272 be_sna_acc_inf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3274 guint32 curr_offset;
3276 curr_offset = offset;
3278 proto_tree_add_text(tree, tvb, curr_offset, len , "Not decoded yet");
3284 * 3.2.2.83 VSTK_RAND Information
3287 * 3.2.2.84 VSTK information
3290 * 3.2.2.85 Paging Information
3293 * If the VGCS/VBS flag is set to zero, the mobile station to be paged is not a member of any VGCS/VBS-group.
3294 * If the VGCS/VBS flag is set to one, the mobile station to be paged is a member of a VGCS/VBS-group.
3296 static const true_false_string bssmap_paging_inf_flg_value = {
3297 "A member of a VGCS/VBS-group",
3298 "Not a member of any VGCS/VBS-group"
3301 static const value_string gsm_a_bssmap_paging_cause_vals[] = {
3302 { 0, "Paging is for mobile terminating call" },
3303 { 1, "Paging is for a short message" },
3304 { 2, "Paging is for a USSD" },
3310 be_paging_inf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3312 guint32 curr_offset;
3314 curr_offset = offset;
3316 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 5, ENC_BIG_ENDIAN);
3317 proto_tree_add_item(tree, hf_gsm_a_bssmap_paging_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3318 proto_tree_add_item(tree, hf_gsm_a_bssmap_paging_inf_flg, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3321 return(curr_offset-offset);
3325 * Use same dissector as IMSI 3.2.2.6
3329 * 3.2.2.87 Velocity Estimate
3332 be_vel_est(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3334 guint32 curr_offset;
3336 curr_offset = offset;
3338 proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet");
3343 * 3.2.2.88 VGCS Feature Flags
3346 /* Bit 1 is the talker priority indicator (TP Ind). */
3347 static const true_false_string gsm_bssmap_tpind_vals = {
3348 "Talker Priority not supported" ,
3349 "Talker Priority supported"
3351 /* Bits 2 and 3 are the A-interface resource sharing indicator (AS Ind). */
3352 static const true_false_string gsm_bssmap_asind_b2_vals = {
3353 "A-interface circuit sharing" ,
3354 "No A-interface circuit sharing"
3357 static const true_false_string gsm_bssmap_asind_b3_vals = {
3358 "A-interface link sharing" ,
3359 "No A-interface link sharing"
3362 /* Bit 4 is the group or broadcast call re-establishment by the BSS indicator (Bss Res). */
3363 static const true_false_string gsm_bssmap_bss_res_vals = {
3364 "Re-establishment of the group or broadcast call by the BSS" ,
3365 "No re-establishment of the group or broadcast call by the BSS"
3368 /* Bit 5 is the Talker Channel Parameter (TCP). */
3369 static const true_false_string gsm_bssmap_bss_tcp_vals = {
3370 "Talker channel parameter is applicable to this call, talker shall be established and maintained on a dedicated channel" ,
3371 "Talker channel parameter is not applicable to this call"
3375 be_vgcs_feat_flg(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3377 guint32 curr_offset;
3379 curr_offset = offset;
3381 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 3, ENC_BIG_ENDIAN);
3382 proto_tree_add_item(tree, hf_gsm_a_bssmap_tcp, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3383 proto_tree_add_item(tree, hf_gsm_a_bssmap_bss_res, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3384 proto_tree_add_item(tree, hf_gsm_a_bssmap_asind_b3, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3385 proto_tree_add_item(tree, hf_gsm_a_bssmap_asind_b2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3386 proto_tree_add_item(tree, hf_gsm_a_bssmap_tpind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3390 return(curr_offset-offset);
3393 * 3.2.2.89 Talker Priority
3395 static const value_string gsm_a_bssmap_talker_pri_vals[] = {
3396 { 0, "Normal Priority" },
3397 { 1, "Privileged Priority" },
3398 { 2, "Emergency Priority" },
3399 { 3, "Reserved for future use" },
3404 be_talker_pri(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3406 guint32 curr_offset;
3408 curr_offset = offset;
3410 proto_tree_add_item(tree, hf_gsm_a_bssmap_talker_pri, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3413 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
3415 return(curr_offset - offset);
3419 * 3.2.2.90 Emergency Set Indication
3423 * 3.2.2.91 Talker Identity
3426 be_talker_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3428 guint32 curr_offset;
3430 curr_offset = offset;
3432 proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 5, ENC_BIG_ENDIAN);
3433 proto_tree_add_item(tree, hf_gsm_a_bssmap_filler_bits, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3435 proto_tree_add_text(tree, tvb, curr_offset, len-1, "Talker Identity field");
3440 * 3.2.2.92 SMS to VGCS
3443 be_sms_to_vgcs(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3445 guint32 curr_offset;
3447 curr_offset = offset;
3449 proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet");
3450 /* The SMS content field is coded as follows - this field contains
3451 * the RP-DATA message as defined in 3GPP TS 24.011.
3458 * 3.2.2.93 VGCS talker mode
3461 be_vgcs_talker_mode(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3463 guint32 curr_offset;
3465 curr_offset = offset;
3467 proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet");
3472 * 3.2.2.94 VGCS/VBS Cell Status
3475 * 3.2.2.95 GANSS Assistance Data
3476 * The GANSS Assistance Data octets 3 to n are coded as the Requested GANSS Data element of 3GPP TS 49.031 (BSSAP-LE)
3477 * XXX move to packet-gsm_bssmap_le.c
3480 be_ganss_ass_dta(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3482 guint32 curr_offset;
3484 curr_offset = offset;
3486 proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet");
3491 * 3.2.2.96 GANSS Positioning Data
3492 * XXX move to packet-gsm_bssmap_le.c
3495 static const value_string gsm_a_bssmap_method_vals[] = {
3496 { 0x00, "MS-Based" },
3497 { 0x01, "MS-Assisted" },
3498 { 0x02, "Conventional" },
3499 { 0x03, "Reserved" },
3503 static const value_string gsm_a_bssmap_ganss_id_vals[] = {
3504 { 0x00, "Galileo" },
3505 { 0x01, "Satellite Based Augmentation Systems (SBAS)" },
3506 { 0x02, "Modernized GPS" },
3507 { 0x03, "Quasi Zenith Satellite System (QZSS)" },
3508 { 0x04, "GLONASS" },
3512 static const value_string gsm_a_bssmap_usage_vals[] = {
3513 { 0x00, "Attempted unsuccessfully due to failure or interruption" },
3514 { 0x01, "Attempted successfully: results not used to generate location" },
3515 { 0x02, "Attempted successfully: results used to verify but not generate location" },
3516 { 0x03, "Attempted successfully: results used to generate location" },
3517 { 0x04, "Attempted successfully: case where MS supports multiple mobile based positioning methods and the actual method or methods used by the MS cannot be determined" },
3522 be_ganss_pos_dta(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3524 guint32 curr_offset;
3526 curr_offset = offset;
3528 proto_tree_add_item(tree, hf_gsm_a_bssmap_method, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3529 proto_tree_add_item(tree, hf_gsm_a_bssmap_ganss_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3530 proto_tree_add_item(tree, hf_gsm_a_bssmap_usage, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3533 return(curr_offset-offset);
3536 * 3.2.2.97 GANSS Location Type
3539 be_ganss_loc_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3541 guint32 curr_offset;
3543 curr_offset = offset;
3545 proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet");
3550 * 3.2.2.98 Application Data
3553 * 3.2.2.99 Data Identity
3556 * 3.2.2.100 Application Data Information
3559 be_app_data_inf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3561 guint32 curr_offset;
3563 curr_offset = offset;
3565 proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet");
3571 * Octets 3-12 contain the digits of an MSISDN, coded as in 3GPP TS 24.008, Calling party BCD number, octets 4 - 13.
3574 * 3.2.2.102 AoIP Transport Layer Address
3577 be_aoip_trans_lay_add(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3579 guint32 curr_offset;
3581 curr_offset = offset;
3583 /* This Information Element provides either an IPv4 or and IPv6 Address and UDP port value
3584 * for the Transport Layer information of the connection end point.
3585 * The Length differentiates between IPv4 and IPv6.
3590 proto_tree_add_item(tree, hf_gsm_a_bssmap_aoip_trans_ipv4, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
3595 proto_tree_add_item(tree, hf_gsm_a_bssmap_aoip_trans_ipv6, tvb, curr_offset, 16, ENC_BIG_ENDIAN);
3600 proto_tree_add_text(tree, tvb, curr_offset, len, "Bogus length %u",len);
3603 proto_tree_add_item(tree, hf_gsm_a_bssmap_aoip_trans_port, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
3606 return(curr_offset - offset);
3609 * 3.2.2.103 Speech Codec List
3612 FR_AMR is coded '011'
3613 S11, S13 and S15 are reserved and coded with zeroes.
3614 HR_AMR is coded '100'
3615 S6 - S7 and S11 - S15 are reserved and coded with zeroes.
3616 OHR_AMR is coded '011'
3617 S11, S13 and S15 are reserved and coded with zeroes.
3619 FR_AMR-WB is coded '001'
3620 S0 is set to '1' S1 - S7 are reserved and coded with zeroes.
3621 OFR_AMR-WB is coded '100'
3622 S0, S2, S4 indicates the supported Codec Configurations. S1, S3, S5, S6, S7 are reserved and coded with zeroes.
3623 OHR_AMR-WB is coded '101'
3624 S0 is set to '1' S1 - S7 are reserved and coded with zeroes.
3628 FI PI PT TF Codec Type (FR_AMR-WB or OFR_AMR-WB or OHR_AMR-WB)
3629 S7 S6 S5 S4 S3 S2 S1 S0
3633 static const true_false_string bssmap_fi_vals = {
3634 "AoIP with compressed speech via RTP/UDP/IP is supported by the BSS/Preferred by the MSC",
3635 "AoIP with Compressed speech via RTP/UDP/IP is not supported by the BSS/Not Preferred by the MSC"
3637 static const true_false_string bssmap_tf_vals = {
3638 "TFO supported by the BSS or TFO support is preferred by the MSC for this Codec Type",
3639 "TFO is not supported by the BSS or TFO support is not preferred by the MSC for this Codec Type"
3641 static const true_false_string bssmap_pi_vals = {
3642 "Transport of PCM over A-Interface via RTP/UDP/IP is supported by the BSS or preferred by the MSC for this Codec Type",
3643 "PCM over A interface with IP as transport is not supported by the BSS or not preferred by the MSC for this Codec Type"
3645 static const true_false_string bssmap_pt_vals = {
3646 "Transport of PCM over A-Interface via TDM is supported by the BSS or preferred by the MSC",
3647 "PCM over A-Interface with TDM as transport is not supported by the BSS or not preferred by the MSC for this Codec Type"
3649 /* 26.103 Table 6.3-1: Coding of the selected Codec_Type (long form) */
3650 static const value_string bssap_speech_codec_values[] = {
3651 { 0x00, "GSM FR " },
3652 { 0x01, "GSM HR " },
3653 { 0x02, "GSM EFR" },
3656 { 0x05, "UMTS AMR" },
3657 { 0x06, "UMTS AMR 2" },
3658 { 0x07, "TDMA EFR" },
3659 { 0x08, "PDC EFR" },
3660 { 0x09, "FR_AMR-WB" },
3661 { 0x0a, "UMTS AMR-WB" },
3662 { 0x0b, "OHR_AMR" },
3663 { 0x0c, "OFR_AMR-WB" },
3664 { 0x0d, "OHR_AMR-WB" },
3665 { 0x0e, "Reserved" },
3666 { 0x0f, "Codec Extension" },
3669 static value_string_ext bssap_speech_codec_values_ext = VALUE_STRING_EXT_INIT(bssap_speech_codec_values);
3671 static const value_string bssap_extended_codec_values[] = {
3672 { 0x0d, "(CSData" },
3677 be_speech_codec_lst(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3679 guint32 curr_offset, consumed = 0;
3682 proto_item *item = NULL;
3683 proto_tree *subtree = NULL;
3685 curr_offset = offset;
3687 while (curr_offset-offset < len){
3690 item = proto_tree_add_text(tree, tvb, curr_offset, 1, "Speech Codec Element %u",number);
3691 subtree = proto_item_add_subtree(item, ett_codec_lst);
3692 codec = tvb_get_guint8(tvb,curr_offset)&0x0f;
3699 /* FR_AMR is coded '011'
3700 * HR_AMR is coded '100'
3701 * OHR_AMR is coded '1011'
3703 /* FI indicates Full IP */
3704 proto_tree_add_item(subtree, hf_gsm_a_bssmap_fi, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3705 /* PI indicates PCMoIP */
3706 proto_tree_add_item(subtree, hf_gsm_a_bssmap_pi, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3707 /* PT indicates PCMoTDM */
3708 proto_tree_add_item(subtree, hf_gsm_a_bssmap_pt, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3709 /* TF indicates TFO support */
3710 proto_tree_add_item(subtree, hf_gsm_a_bssmap_tf, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3712 proto_tree_add_item(subtree, hf_gsm_a_bssap_speech_codec, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3715 proto_tree_add_text(subtree, tvb, curr_offset, 2, "S0 - S15");
3724 /* FR_AMR-WB is coded '1001'
3725 * OFR_AMR-WB is coded '1100'
3726 * OHR_AMR-WB is coded '1101'
3728 /* FI indicates Full IP */
3729 proto_tree_add_item(subtree, hf_gsm_a_bssmap_fi, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3730 /* PI indicates PCMoIP */
3731 proto_tree_add_item(subtree, hf_gsm_a_bssmap_pi, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3732 /* PT indicates PCMoTDM */
3733 proto_tree_add_item(subtree, hf_gsm_a_bssmap_pt, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3734 /* TF indicates TFO support */
3735 proto_tree_add_item(subtree, hf_gsm_a_bssmap_tf, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3737 proto_tree_add_item(subtree, hf_gsm_a_bssap_speech_codec, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3740 proto_tree_add_text(subtree, tvb, curr_offset, 1, "S0 - S7");
3745 /* Currently (3GPP TS 48.008 version 9.4.0 Release 9) CSData Codec Type is the only extended one */
3746 /* PI indicates PCMoIP */
3747 proto_tree_add_item(subtree, hf_gsm_a_bssmap_pi, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3748 /* PT indicates PCMoTDM */
3749 proto_tree_add_item(subtree, hf_gsm_a_bssmap_pt, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3751 proto_tree_add_item(subtree, hf_gsm_a_bssap_speech_codec, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3754 /* Codec Extension */
3755 proto_tree_add_item(subtree, hf_gsm_a_bssap_extended_codec, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3758 proto_tree_add_item(subtree, hf_gsm_a_bssap_extended_codec_r2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3759 proto_tree_add_item(subtree, hf_gsm_a_bssap_extended_codec_r3, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3764 proto_tree_add_text(subtree, tvb, curr_offset, 2,"Unknown codec - the rest of the dissection my be suspect");
3770 proto_item_set_len(item, consumed);
3774 * 3.2.2.104 Speech Codec
3776 static const true_false_string bssmap_fi2_vals = {
3777 "AoIP with compressed speech via RTP/UDP/IP is selected for this Codec Type",
3778 "Compressed speech via RTP/UDP/IP is not selected for this Codec Type"
3780 static const true_false_string bssmap_tf2_vals = {
3781 "TFO Support is selected for this Codec Type",
3782 "TFO Support is not selected for this Codec Type"
3784 static const true_false_string bssmap_pi2_vals = {
3785 "PCM over A-Interface via RTP/UPD/IP is selected for this Codec Type",
3786 "PCM over A interface with RTP/UDP/IP is not selected for this Codec Type"
3788 static const true_false_string bssmap_pt2_vals = {
3789 "PCM over A-Interface with TDM as transport is selected for this Codec Type",
3790 "PCM over A-Interface with TDM as transport is not selected for this Codec Type"
3793 be_speech_codec(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3795 guint32 curr_offset, consumed = 0;
3798 proto_item *item = NULL;
3799 proto_tree *subtree = NULL;
3801 curr_offset = offset;
3803 while (curr_offset-offset < len){
3806 item = proto_tree_add_text(tree, tvb, curr_offset, 1, "Speech Codec Element %u",number);
3807 subtree = proto_item_add_subtree(item, ett_codec_lst);
3808 codec = tvb_get_guint8(tvb,curr_offset)&0x0f;
3815 /* FR_AMR is coded '011'
3816 * HR_AMR is coded '100'
3817 * OHR_AMR is coded '1011'
3819 /* FI indicates Full IP */
3820 proto_tree_add_item(subtree, hf_gsm_a_bssmap_fi2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3821 /* PI indicates PCMoIP */
3822 proto_tree_add_item(subtree, hf_gsm_a_bssmap_pi2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3823 /* PT indicates PCMoTDM */
3824 proto_tree_add_item(subtree, hf_gsm_a_bssmap_pt2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3825 /* TF indicates TFO support */
3826 proto_tree_add_item(subtree, hf_gsm_a_bssmap_tf2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3828 proto_tree_add_item(subtree, hf_gsm_a_bssap_speech_codec, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3831 proto_tree_add_text(subtree, tvb, curr_offset, 2, "S0 - S15");
3840 /* FR_AMR-WB is coded '1001'
3841 * OFR_AMR-WB is coded '1100'
3842 * OHR_AMR-WB is coded '1101'
3844 /* FI indicates Full IP */
3845 proto_tree_add_item(subtree, hf_gsm_a_bssmap_fi2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3846 /* PI indicates PCMoIP */
3847 proto_tree_add_item(subtree, hf_gsm_a_bssmap_pi2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3848 /* PT indicates PCMoTDM */
3849 proto_tree_add_item(subtree, hf_gsm_a_bssmap_pt2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3850 /* TF indicates TFO support */
3851 proto_tree_add_item(subtree, hf_gsm_a_bssmap_tf2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3853 proto_tree_add_item(subtree, hf_gsm_a_bssap_speech_codec, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3856 proto_tree_add_text(subtree, tvb, curr_offset, 1, "S0 - S7");
3861 /* Currently (3GPP TS 48.008 version 9.4.0 Release 9) CSData Codec Type is the only extended one */
3862 /* PI indicates PCMoIP */
3863 proto_tree_add_item(subtree, hf_gsm_a_bssmap_pi, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3864 /* PT indicates PCMoTDM */
3865 proto_tree_add_item(subtree, hf_gsm_a_bssmap_pt, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3867 proto_tree_add_item(subtree, hf_gsm_a_bssap_speech_codec, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3870 /* Codec Extension */
3871 proto_tree_add_item(subtree, hf_gsm_a_bssap_extended_codec, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3874 proto_tree_add_item(subtree, hf_gsm_a_bssap_extended_codec_r2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3875 proto_tree_add_item(subtree, hf_gsm_a_bssap_extended_codec_r3, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3879 proto_tree_add_text(subtree, tvb, curr_offset, 2, "Unknown codec - the rest of the dissection my be suspect");
3885 proto_item_set_len(item, consumed);
3889 * 3.2.2.105 Call Identifier
3892 be_call_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3894 guint32 curr_offset;
3896 curr_offset = offset;
3898 /* Call Identifier (least significant bits) octet 2
3899 * Call Identifier octet 3
3900 * Call Identifier octet 4
3901 * Call Identifier (most significant bits) octet 5
3903 proto_tree_add_item(tree, hf_gsm_a_bssmap_call_id, tvb, curr_offset, 4, TRUE);
3906 return(curr_offset - offset);
3909 * 3.2.2.106 Call Identifier List
3912 be_call_id_lst(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
3914 guint32 curr_offset;
3915 curr_offset = offset;
3918 proto_tree_add_text(tree, tvb, curr_offset, len, "all resources and references associated to all Call Identifiers in use between the BSC and the MSC need to be released");
3920 while (curr_offset-offset < len){
3921 proto_tree_add_item(tree, hf_gsm_a_bssmap_call_id, tvb, curr_offset, 4, TRUE);
3928 guint16 (*bssmap_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string, int string_len) = {
3929 be_cic, /* Circuit Identity Code */
3930 NULL, /* Reserved */
3931 be_res_avail, /* Resource Available */
3932 be_cause, /* Cause */
3933 be_cell_id, /* Cell Identifier */
3934 be_prio, /* Priority */
3935 be_l3_header_info, /* Layer 3 Header Information */
3938 be_enc_info, /* Encryption Information */
3939 be_chan_type, /* Channel Type */
3940 be_periodicity, /* Periodicity */
3941 be_ext_res_ind, /* Extended Resource Indicator */
3942 be_num_ms, /* Number Of MSs */
3943 NULL, /* Reserved */
3944 NULL, /* Reserved */
3945 NULL, /* Reserved */
3946 de_ms_cm_2, /* Classmark Information Type 2 */
3947 de_ms_cm_3, /* Classmark Information Type 3 */
3948 be_int_band, /* Interference Band To Be Used */
3949 de_rr_cause, /* RR Cause */
3950 NULL, /* Reserved */
3951 be_l3_info, /* Layer 3 Information */
3953 be_down_dtx_flag, /* Downlink DTX Flag */
3954 be_cell_id_list, /* Cell Identifier List */
3955 NULL /* no associated data */, /* Response Request */
3956 be_res_ind_method, /* Resource Indication Method */
3957 de_ms_cm_1, /* Classmark Information Type 1 */
3958 be_cic_list, /* Circuit Identity Code List */
3959 be_diag, /* Diagnostics */
3960 be_l3_msg, /* Layer 3 Message Contents */
3961 be_chosen_chan, /* Chosen Channel */
3962 be_tot_res_acc, /* Total Resource Accessible */
3963 be_ciph_resp_mode, /* Cipher Response Mode */
3964 be_cha_needed, /* Channel Needed */
3965 be_trace_type, /* Trace Type */
3966 be_trace_trigger_id,/* TriggerID */
3967 be_trace_reference, /* Trace Reference */
3968 be_trace_transaction_id, /* TransactionID */
3969 de_mid, /* Mobile Identity */
3970 be_trace_omc_id, /* OMCID */
3971 be_for_ind, /* Forward Indicator */
3972 be_chosen_enc_alg, /* Chosen Encryption Algorithm */
3973 be_cct_pool, /* Circuit Pool */
3974 NULL, /* Circuit Pool List */
3975 NULL, /* Time Indication */
3976 NULL, /* Resource Situation */
3977 be_curr_chan_1, /* Current Channel Type 1 */
3978 be_que_ind, /* Queueing Indicator */
3979 be_speech_ver, /* Speech Version */
3980 be_ass_req, /* Assignment Requirement */
3981 NULL /* no associated data */, /* Talker Flag */
3982 NULL /* no associated data */, /* Connection Release Requested */
3983 de_d_gb_call_ref, /* Group Call Reference */
3984 be_emlpp_prio, /* eMLPP Priority */
3985 be_conf_evo_ind, /* Configuration Evolution Indication */
3986 be_field_element_dissect, /* Old BSS to New BSS Information */
3987 be_lsa_id, /* LSA Identifier */
3988 be_lsa_id_list, /* LSA Identifier List */
3989 be_lsa_info, /* LSA Information */
3990 NULL, /* LCS QoS Dissected in packet-gsm_bssmap_le.c*/
3991 NULL, /* LSA access control suppression */
3992 be_lcs_prio, /* LCS Priority */
3993 be_loc_type, /* Location Type */
3994 be_loc_est, /* Location Estimate */
3995 be_pos_data, /* Positioning Data */
3996 NULL, /* 3.2.2.66 LCS Cause Dissected in packet-gsm_bssmap_le.c */
3997 NULL, /* LCS Client Type Dissected in packet-gsm_bssmap_le.c */
3999 NULL, /* Network Element Identity */
4000 be_gps_assist_data, /* GPS Assistance Data */
4001 NULL, /* Deciphering Keys (dissected in packet-gsm_bssmap_le)*/
4002 be_ret_err_req, /* Return Error Request */
4003 be_ret_err_cause, /* Return Error Cause */
4004 be_seg, /* Segmentation */
4005 be_serv_ho, /* Service Handover */
4006 be_src_rnc_to_tar_rnc_umts, /* Source RNC to target RNC transparent information (UMTS) */
4007 be_src_rnc_to_tar_rnc_cdma, /* Source RNC to target RNC transparent information (cdma2000) */
4008 be_geran_cls_m, /* GERAN Classmark */
4009 NULL, /* GERAN BSC Container */
4010 be_field_element_dissect, /* New BSS to Old BSS Information */
4011 be_inter_sys_inf, /* Inter-System Information */
4012 be_sna_acc_inf, /* SNA Access Information */
4013 NULL, /* VSTK_RAND Information */
4014 NULL, /* VSTK Information */
4015 be_paging_inf, /* Paging Information */
4016 de_mid, /* 3.2.2.86 IMEI (use same dissector as IMSI)*/
4017 be_vel_est, /* Velocity Estimate */
4018 be_vgcs_feat_flg, /* VGCS Feature Flags */
4019 be_talker_pri, /* Talker Priority */
4020 NULL, /* no data Emergency Set Indication */
4021 be_talker_id, /* Talker Identity */
4022 be_cell_id_list_seg, /* Cell Identifier List Segment */
4023 be_sms_to_vgcs, /* SMS to VGCS */
4024 be_vgcs_talker_mode,/* VGCS Talker Mode */
4025 NULL, /* VGCS/VBS Cell Status */
4026 be_cell_id_lst_seg_f_est_cells, /* Cell Identifier List Segment for established cells */
4027 be_cell_id_lst_seg_f_cell_tb_est, /* Cell Identifier List Segment for cells to be established */
4028 be_cell_id_lst_seg_f_rel_cell, /* Cell Identifier List Segment for released cells - no user present */
4029 be_cell_id_lst_seg_f_not_est_cell, /* Cell Identifier List Segment for not established cells - no establishment possible */
4030 be_ganss_ass_dta, /* GANSS Assistance Data */
4031 be_ganss_pos_dta, /* GANSS Positioning Data */
4032 be_ganss_loc_type, /* GANSS Location Type */
4033 NULL, /* Application Data */
4034 NULL, /* Data Identity */
4035 be_app_data_inf, /* Application Data Information */
4037 be_aoip_trans_lay_add, /* AoIP Transport Layer Address */
4038 be_speech_codec_lst,/* Speech Codec List */
4039 be_speech_codec, /* Speech Codec */
4040 be_call_id, /* Call Identifier */
4041 be_call_id_lst, /* Call Identifier List */
4045 /* 3.2.3 Signalling Field Element Coding */
4046 /* 3.2.3.1 Extra information */
4047 static const value_string fe_extra_info_prec_vals[] = {
4048 { 0, "The old BSS recommends that this allocation request should not cause a pre-emption an existing connection" },
4049 { 1, "The old BSS recommends that this allocation request is allowed to preempt an existing connection based on the information supplied in the Priority information element, if available" },
4053 static const value_string fe_extra_info_lcs_vals[] = {
4054 { 0, "No ongoing LCS procedure" },
4055 { 1, "An ongoing LCS procedure was interrupted by handover. The new BSS may notify the SMLC when the handover is completed" },
4059 static const value_string fe_extra_info_ue_prob_vals[] = {
4060 { 0, "This MS supports handover to UMTS" },
4061 { 1, "This MS does not support handover to UMTS" },
4066 be_fe_extra_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
4068 guint32 curr_offset;
4070 curr_offset = offset;
4071 proto_tree_add_item(tree, hf_fe_extra_info_prec, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4072 proto_tree_add_item(tree, hf_fe_extra_info_lcs, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4073 proto_tree_add_item(tree, hf_fe_extra_info_ue_prob, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4074 proto_tree_add_item(tree, hf_fe_extra_info_spare, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4077 return(curr_offset - offset);
4080 /* 3.2.3.2 Current Channel type 2 */
4082 be_fe_cur_chan_type2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
4084 guint32 curr_offset;
4086 curr_offset = offset;
4087 proto_tree_add_item(tree, hf_fe_cur_chan_type2_chan_mode, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4088 proto_tree_add_item(tree, hf_fe_cur_chan_type2_chan_mode_spare, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4090 proto_tree_add_item(tree, hf_fe_cur_chan_type2_chan_field, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4091 proto_tree_add_item(tree, hf_fe_cur_chan_type2_chan_field_spare, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4094 return(curr_offset - offset);
4097 /* 3.2.3.3 Target cell radio information */
4099 be_fe_target_radio_cell_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
4101 guint32 curr_offset;
4103 curr_offset = offset;
4104 proto_tree_add_item(tree, hf_fe_target_radio_cell_info_rxlev_ncell, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4105 proto_tree_add_item(tree, hf_fe_target_radio_cell_info_rxlev_ncell_spare, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4108 return(curr_offset - offset);
4111 /* 3.2.3.4 GPRS Suspend Information */
4113 be_fe_gprs_suspend_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
4115 guint32 curr_offset = offset;
4117 /* This Field Element contains the contents of the Gb interface SUSPEND ACK PDU,
4118 Call the BSSGP dissector here, assuming that the encoding is per 48.018 */
4121 bssgp_suspend_ack(tvb, tree, g_pinfo, offset, len);
4124 return(curr_offset - offset);
4127 /* 3.2.3.5 MultiRate configuration Information */
4129 /* 3.2.3.6 Dual Transfer Mode information */
4130 static const value_string gsm_a_bssmap_dtm_info_dtm_ind_vals[] = {
4131 { 0, "The MS has resources allocated exclusively for the CS domain in the old cell" },
4132 { 1, "The MS has resources allocated for both the CS and PS domains in the old cell" },
4136 static const value_string gsm_a_bssmap_dtm_info_sto_ind_vals[] = {
4137 { 0, "The MS is in multislot operation in the old cell" },
4138 { 1, "The MS is in single timeslot operation in the old cell" },
4142 static const value_string gsm_a_bssmap_dtm_info_egprs_ind_vals[] = {
4143 { 0, "The MS has no TBF using E-GPRS in the old cell" },
4144 { 1, "The MS has a TBF using E-GPRS in the old cell" },
4149 be_fe_dual_transfer_mode_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
4151 guint32 curr_offset;
4153 curr_offset = offset;
4154 proto_tree_add_item(tree, hf_fe_dtm_info_dtm_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4155 proto_tree_add_item(tree, hf_fe_dtm_info_sto_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4156 proto_tree_add_item(tree, hf_fe_dtm_info_egprs_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4157 proto_tree_add_item(tree, hf_fe_dtm_info_spare_bits, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4160 return(curr_offset - offset);
4163 /* 3.2.3.7 Inter RAT Handover Info */
4165 be_fe_inter_rat_handover_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
4167 tvbuff_t *container_tvb;
4169 /* Octets 3-n are encoded as Inter RAT Handover Info as defined in 3GPP TS 25.331 */
4170 container_tvb = tvb_new_subset(tvb, offset, len, len);
4171 dissect_rrc_InterRATHandoverInfo_PDU(container_tvb, g_pinfo , tree);
4176 /* 3.2.3.8 cdma2000 Capability Information */
4178 /* 3.2.3.9 Downlink Cell Load Information */
4180 /* 3.2.3.10 Uplink Cell Load Information */
4183 static const value_string gsm_a_bssmap_cell_load_nrt_vals[] = {
4184 { 0, "NRT Load is low" },
4185 { 1, "NRT load is medium" },
4186 { 2, "NRT load is high. (Probability to admit a new user is low.)" },
4187 { 3, "NRT overload. (Probability to admit a new user is low, packets are discarded and the source is recommended to reduce the data flow.)" },
4191 /* 3.2.3.11 Cell Load Information Group */
4193 be_fe_cell_load_info_group(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
4195 guint32 curr_offset;
4197 curr_offset = offset;
4198 curr_offset += be_cell_id(tvb, tree, pinfo, curr_offset, len, NULL, 0);
4199 curr_offset += be_field_element_dissect(tvb, tree, pinfo, curr_offset, len + offset - curr_offset, NULL, 0);
4201 return(curr_offset - offset);
4204 /* 3.2.3.12 Cell Load Information */
4206 be_fe_cell_load_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
4208 guint32 curr_offset;
4210 curr_offset = offset;
4211 proto_tree_add_item(tree, hf_fe_cell_load_info_cell_capacity_class, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4213 proto_tree_add_item(tree, hf_fe_cell_load_info_load_value, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4215 proto_tree_add_item(tree, hf_fe_cell_load_info_rt_load_value, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4217 proto_tree_add_item(tree, hf_fe_cell_load_info_nrt_load_information_value, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4220 return(curr_offset - offset);
4223 /* 3.2.3.13 PS Indication */
4225 be_fe_ps_indication(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
4227 guint32 curr_offset;
4229 curr_offset = offset;
4230 proto_tree_add_item(tree, hf_fe_ps_indication, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4233 return(curr_offset - offset);
4236 /* 3.2.3.14 DTM Handover Command Indication */
4238 be_fe_dtm_ho_command_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
4240 guint32 curr_offset;
4242 curr_offset = offset;
4243 proto_tree_add_item(tree, hf_fe_dtm_ho_command_ind_spare, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4246 return(curr_offset - offset);
4249 static guint16 (*bssmap_bss_to_bss_element_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) = {
4250 be_fe_extra_info, /* { 0x01, "Extra information" }, */
4251 be_fe_cur_chan_type2, /* { 0x02, "Current Channel Type 2" }, */
4252 be_fe_target_radio_cell_info, /* { 0x03, "Target cell radio information" }, */
4253 be_fe_gprs_suspend_info, /* { 0x04, "GPRS Suspend information" }, */
4254 de_rr_multirate_conf, /* { 0x05, "MultiRate configuration information" }, */
4255 be_fe_dual_transfer_mode_info, /* { 0x06, "Dual Transfer Mode Information" }, */
4256 be_fe_inter_rat_handover_info, /* { 0x07, "Inter RAT Handover Info" }, */
4257 NULL, /* { 0x08, "cdma2000 Capability Information" }, */
4258 be_fe_cell_load_info, /* { 0x09, "Downlink Cell Load Information" }, */
4259 be_fe_cell_load_info, /* { 0x0a, "Uplink Cell Load Information" }, */
4260 be_fe_cell_load_info_group, /* { 0x0b, "Cell Load Information Group" }, */
4261 be_fe_cell_load_info, /* { 0x0c, "Cell Load Information" }, */
4262 be_fe_ps_indication, /* { 0x0d, "PS Indication" }, */
4263 be_fe_dtm_ho_command_ind, /* { 0x0e, "DTM Handover Command Indication" }, */
4264 be_vgcs_talker_mode, /* { 0x6f, "VGCS talker mode" }, */ /* not really a field element
4265 but does appear in old bss to new bss info */
4270 be_field_element_dissect(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
4272 guint32 curr_offset, ie_len, fe_start_offset;
4275 proto_item *item = NULL;
4276 proto_tree * bss_to_bss_tree = NULL;
4278 curr_offset = offset;
4281 while (curr_offset - offset + 2 < len) {
4286 oct = tvb_get_guint8(tvb, curr_offset++);
4288 str = match_strval_idx((guint32) oct, bssmap_field_element_ids, &idx);
4289 ie_len = tvb_get_guint8(tvb, curr_offset++);
4295 * add Field Element name
4297 item = proto_tree_add_uint_format(tree, hf_gsm_a_bssmap_field_elem_id,
4298 tvb, curr_offset - 2, ie_len + 2, oct, "%s (%X)", str, oct);
4300 bss_to_bss_tree = proto_item_add_subtree(item, ett_bss_to_bss_info);
4301 fe_start_offset = curr_offset;
4304 * decode field element
4306 if (idx < 0 || (bssmap_bss_to_bss_element_fcn[idx] == NULL))
4308 proto_tree_add_text(bss_to_bss_tree,
4309 tvb, curr_offset, ie_len,
4310 "Field Element not decoded");
4311 curr_offset += ie_len;
4315 /* dissect the field element */
4316 curr_offset += (*bssmap_bss_to_bss_element_fcn[idx])(tvb, bss_to_bss_tree, pinfo, curr_offset, ie_len, NULL, 0);
4318 EXTRANEOUS_DATA_CHECK(ie_len, curr_offset - fe_start_offset);
4323 /* MESSAGE FUNCTIONS */
4326 * [2] 3.2.1.1 ASSIGNMENT REQUEST
4330 bssmap_ass_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
4332 guint32 curr_offset;
4336 curr_offset = offset;
4339 /* Channel Type 3.2.2.11 MSC-BSS M 5-13 */
4340 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CHAN_TYPE].value, GSM_A_PDU_TYPE_BSSMAP, BE_CHAN_TYPE, NULL);
4341 /* Layer 3 Header Information 3.2.2.9 MSC-BSS O (note 3) 4 */
4342 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_L3_HEADER_INFO].value, GSM_A_PDU_TYPE_BSSMAP, BE_L3_HEADER_INFO, NULL);
4343 /* Priority 3.2.2.18 MSC-BSS O 3 */
4344 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_PRIO].value, GSM_A_PDU_TYPE_BSSMAP, BE_PRIO, NULL);
4345 /* Circuit Identity Code 3.2.2.2 MSC-BSS O (note 1, 12 3 */
4346 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CIC].value, GSM_A_PDU_TYPE_BSSMAP, BE_CIC, NULL);
4347 /* Downlink DTX Flag 3.2.2.26 MSC-BSS O (note 2) 2 */
4348 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_DOWN_DTX_FLAG].value, GSM_A_PDU_TYPE_BSSMAP, BE_DOWN_DTX_FLAG, NULL);
4349 /* Interference Band To Be Used 3.2.2.21 MSC-BSS O 2 */
4350 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_INT_BAND].value, GSM_A_PDU_TYPE_BSSMAP, BE_INT_BAND, NULL);
4351 /* Classmark Information 2 3.2.2.19 MSC-BSS O (note 4) 4-5 */
4352 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CM_INFO_2].value, GSM_A_PDU_TYPE_BSSMAP, BE_CM_INFO_2, NULL);
4353 /* Group Call Reference 3.2.2.55 MSC-BSS O (note 5) 7 */
4354 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_GROUP_CALL_REF].value, GSM_A_PDU_TYPE_BSSMAP, BE_GROUP_CALL_REF, NULL);
4355 /* Talker Flag 3.2.2.54 MSC-BSS O (note 6) 1 */
4356 ELEM_OPT_T(gsm_bssmap_elem_strings[BE_TALKER_FLAG].value, GSM_A_PDU_TYPE_BSSMAP, BE_TALKER_FLAG, NULL);
4357 /* Configuration Evolution Indication 3.2.2.57 MSC-BSS O (note 7) 2 */
4358 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CONF_EVO_IND].value, GSM_A_PDU_TYPE_BSSMAP, BE_CONF_EVO_IND, NULL);
4359 /* LSA Access Control Suppression 3.2.2.61 MSC-BSS O (note 8) 2 */
4360 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_LSA_ACC_CTRL].value, GSM_A_PDU_TYPE_BSSMAP, BE_LSA_ACC_CTRL, NULL);
4361 /* Service Handover 3.2.2.75 MSC-BSS O (note 9) 3 */
4362 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_SERV_HO].value, GSM_A_PDU_TYPE_BSSMAP, BE_SERV_HO, NULL);
4363 /* Encryption Information 3.2.2.10 MSC-BSS O (note 10) 3-n */
4364 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_ENC_INFO].value, GSM_A_PDU_TYPE_BSSMAP, BE_ENC_INFO, NULL);
4365 /* Talker Priority 3.2.2.89 MSC-BSS O (note 11) 2 */
4366 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, GSM_A_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL);
4367 /* AoIP Transport Layer Address (MGW) 3.2.2.102 MSC-BSS O (note 12) 10-22 */
4368 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_AOIP_TRANS_LAY_ADD].value, GSM_A_PDU_TYPE_BSSMAP, BE_AOIP_TRANS_LAY_ADD, NULL);
4369 /* Codec List (MSC Preferred) 3.2.2.103 MSC-BSS O (note 13) 3-n */
4370 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC_LST].value, GSM_A_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC_LST, "(MSC Preferred)");
4371 /* Call Identifier 3.2.2.104 MSC-BSS O (note 12) 5 */
4372 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CALL_ID].value, GSM_A_PDU_TYPE_BSSMAP, BE_CALL_ID, NULL);
4374 EXTRANEOUS_DATA_CHECK(curr_len, 0);
4378 * [2] 3.2.1.2 ASSIGNMENT COMPLETE
4381 bssmap_ass_complete(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
4383 guint32 curr_offset;
4387 curr_offset = offset;
4390 /* RR Cause 3.2.2.22 BSS-MSC O 2 */
4391 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_RR_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_RR_CAUSE, NULL);
4392 /* Circuit Identity Code 3.2.2.2 BSS-MSC O (note 4) 3 */
4393 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CIC].value, GSM_A_PDU_TYPE_BSSMAP, BE_CIC, NULL);
4394 /* Cell Identifier 3.2.2.17 BSS-MSC O (note 1) 3-10 */
4395 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, GSM_A_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL);
4396 /* Chosen Channel 3.2.2.33 BSS-MSC O (note 3) 2 */
4397 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_CHAN].value, GSM_A_PDU_TYPE_BSSMAP, BE_CHOSEN_CHAN, NULL);
4398 /* Chosen Encryption Algorithm 3.2.2.44 BSS-MSC O (note 5) 2 */
4399 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_ENC_ALG].value, GSM_A_PDU_TYPE_BSSMAP, BE_CHOSEN_ENC_ALG, NULL);
4400 /* Circuit Pool 3.2.2.45 BSS-MSC O (note 2) 2 */
4401 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CCT_POOL].value, GSM_A_PDU_TYPE_BSSMAP, BE_CCT_POOL, NULL);
4402 /* Speech Version (Chosen) 3.2.2.51 BSS-MSC O (note 6) 2 */
4403 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_SPEECH_VER].value, GSM_A_PDU_TYPE_BSSMAP, BE_SPEECH_VER, " (Chosen)");
4404 /* LSA Identifier 3.2.2.15 BSS-MSC O (note 7) 5 */
4405 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LSA_ID].value, GSM_A_PDU_TYPE_BSSMAP, BE_LSA_ID, NULL);
4406 /* Talker Priority 3.2.2.89 BSS-MSC O (note 8) 2 */
4407 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, GSM_A_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL);
4408 /* AoIP Transport Layer Address (BSS) 3.2.2.102 BSS-MSC O (note 9) 10-22 */
4409 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_AOIP_TRANS_LAY_ADD].value, GSM_A_PDU_TYPE_BSSMAP, BE_AOIP_TRANS_LAY_ADD, NULL);
4410 /* Speech Codec (Chosen) 3.2.2.104 BSS-MSC O (note 10) 3-5 */
4411 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC].value, GSM_A_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC, "(Chosen)");
4413 EXTRANEOUS_DATA_CHECK(curr_len, 0);
4417 * [2] 3.2.1.3 ASSIGNMENT FAILURE
4420 bssmap_ass_failure(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
4422 guint32 curr_offset;
4426 curr_offset = offset;
4429 /* Cause 3.2.2.5 BSS-MSC M 3-4 */
4430 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_CAUSE, NULL);
4431 /* RR Cause 3.2.2.22 BSS-MSC O 2 */
4432 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_RR_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_RR_CAUSE, NULL);
4433 /* Circuit Pool 3.2.2.45 BSS-MSC O (note 1) 2 */
4434 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CCT_POOL].value, GSM_A_PDU_TYPE_BSSMAP, BE_CCT_POOL, NULL);
4435 /* Circuit Pool List 3.2.2.46 BSS-MSC O (note 2) V */
4436 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CCT_POOL_LIST].value, GSM_A_PDU_TYPE_BSSMAP, BE_CCT_POOL_LIST, NULL);
4437 /* Talker Priority 3.2.2.89 BSS-MSC O (note 3) 2 */
4438 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, GSM_A_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL);
4439 /* Codec List (BSS Supported) 3.2.2.103 BSS-MSC O (note 4) 3-n */
4440 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC_LST].value, GSM_A_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC_LST, "(BSS Supported)");
4442 EXTRANEOUS_DATA_CHECK(curr_len, 0);
4449 bssmap_block(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
4451 guint32 curr_offset;
4455 curr_offset = offset;
4458 /* Circuit Identity Code 3.2.2.2 both M 3*/
4459 ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, GSM_A_PDU_TYPE_BSSMAP, BE_CIC, NULL);
4460 /* Cause 3.2.2.5 both M 3-4 */
4461 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_CAUSE, NULL);
4462 /* Connection Release Requested 3.2.2.3 MSC-BSS O 1 */
4463 ELEM_OPT_T(gsm_bssmap_elem_strings[BE_CONN_REL_REQ].value, GSM_A_PDU_TYPE_BSSMAP, BE_CONN_REL_REQ, NULL);
4465 EXTRANEOUS_DATA_CHECK(curr_len, 0);
4469 * [2] 3.2.1.5 BLOCKING ACKNOWLEDGE
4473 bssmap_block_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
4475 guint32 curr_offset;
4479 curr_offset = offset;
4482 /* Circuit Identity Code 3.2.2.2 both M 3 */
4483 ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, GSM_A_PDU_TYPE_BSSMAP, BE_CIC, NULL);
4485 EXTRANEOUS_DATA_CHECK(curr_len, 0);
4489 * [2] 3.2.1.6 UNBLOCK
4492 bssmap_unblock(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
4494 guint32 curr_offset;
4498 curr_offset = offset;
4501 /* Circuit Identity Code 3.2.2.2 both M 3 */
4502 ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, GSM_A_PDU_TYPE_BSSMAP, BE_CIC, NULL);
4504 EXTRANEOUS_DATA_CHECK(curr_len, 0);
4508 * [2] 3.2.1.7 UNBLOCKING ACKNOWLEDGE
4511 bssmap_unblock_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
4513 guint32 curr_offset;
4517 curr_offset = offset;
4520 /* Circuit Identity Code 3.2.2.2 both M 3 */
4521 ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, GSM_A_PDU_TYPE_BSSMAP, BE_CIC, NULL);
4523 EXTRANEOUS_DATA_CHECK(curr_len, 0);
4527 * [2] 3.2.1.8 HANDOVER REQUEST
4530 bssmap_ho_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
4532 guint32 curr_offset;
4536 curr_offset = offset;
4539 /* Channel Type 3.2.2.11 MSC-BSS M 5-13 */
4540 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CHAN_TYPE].value, GSM_A_PDU_TYPE_BSSMAP, BE_CHAN_TYPE, NULL);
4541 /* Encryption Information 3.2.2.10 MSC-BSS M (note 1) 3-n */
4542 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_ENC_INFO].value, GSM_A_PDU_TYPE_BSSMAP, BE_ENC_INFO, NULL);
4544 /* Classmark Information 1 3.2.2.30 MSC-BSS M# 2
4546 * Classmark Information 2 3.2.2.19 MSC-BSS M (note 6) 4-5
4548 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CM_INFO_1].value, GSM_A_PDU_TYPE_BSSMAP, BE_CM_INFO_1, NULL);
4550 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CM_INFO_2].value, GSM_A_PDU_TYPE_BSSMAP, BE_CM_INFO_2, NULL);
4551 /* Cell Identifier (Serving) 3.2.2.17 MSC-BSS M (note 20) 5-10 */
4552 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, GSM_A_PDU_TYPE_BSSMAP, BE_CELL_ID, " (Serving)");
4553 /* Priority 3.2.2.18 MSC-BSS O 3 */
4554 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_PRIO].value, GSM_A_PDU_TYPE_BSSMAP, BE_PRIO, NULL);
4555 /* Circuit Identity Code 3.2.2.2 MSC-BSS O (note 7, 28 3 */
4556 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CIC].value, GSM_A_PDU_TYPE_BSSMAP, BE_CIC, NULL);
4557 /* Downlink DTX Flag 3.2.2.26 MSC-BSS O (note 3) 2 */
4558 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_DOWN_DTX_FLAG].value, GSM_A_PDU_TYPE_BSSMAP, BE_DOWN_DTX_FLAG, NULL);
4559 /* Cell Identifier (Target) 3.2.2.17 MSC-BSS M (note 17) 3-10 */
4560 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, GSM_A_PDU_TYPE_BSSMAP, BE_CELL_ID, " (Target)");
4561 /* Interference Band To Be Used 3.2.2.21 MSC-BSS O 2 */
4562 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_INT_BAND].value, GSM_A_PDU_TYPE_BSSMAP, BE_INT_BAND, NULL);
4563 /* Cause 3.2.2.5 MSC-BSS O (note 9) 3-4 */
4564 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_CAUSE, NULL);
4565 /* Classmark Information 3 3.2.2.20 MSC-BSS O (note 4) 3-34 */
4566 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CM_INFO_3].value, GSM_A_PDU_TYPE_BSSMAP, BE_CM_INFO_3, NULL);
4567 /* Current Channel type 1 3.2.2.49 MSC-BSS O (note 8) 2 */
4568 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CURR_CHAN_1].value, GSM_A_PDU_TYPE_BSSMAP, BE_CURR_CHAN_1, NULL);
4569 /* Speech Version (Used) 3.2.2.51 MSC-BSS O (note 10) 2 */
4570 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_SPEECH_VER].value, GSM_A_PDU_TYPE_BSSMAP, BE_SPEECH_VER, " (Used)");
4571 /* Group Call Reference 3.2.2.55 MSC-BSS O (note 5) 7 */
4572 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_GROUP_CALL_REF].value, GSM_A_PDU_TYPE_BSSMAP, BE_GROUP_CALL_REF, NULL);
4573 /* Talker Flag 3.2.2.54 MSC-BSS O (note 11) 1 */
4574 ELEM_OPT_T(gsm_bssmap_elem_strings[BE_TALKER_FLAG].value, GSM_A_PDU_TYPE_BSSMAP, BE_TALKER_FLAG, NULL);
4575 /* Configuration Evolution Indication 3.2.2.57 MSC-BSS O (note 12) 2 */
4576 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CONF_EVO_IND].value, GSM_A_PDU_TYPE_BSSMAP, BE_CONF_EVO_IND, NULL);
4577 /* Chosen Encryption Algorithm (Serving) 3.2.2.44 MSC-BSS O (note 2) 2 */
4578 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_ENC_ALG].value, GSM_A_PDU_TYPE_BSSMAP, BE_CHOSEN_ENC_ALG, " (Serving)");
4579 /* Old BSS to New BSS Information 3.2.2.58 MSC-BSS O (note 13) 2-n */
4580 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_OLD2NEW_INFO].value, GSM_A_PDU_TYPE_BSSMAP, BE_OLD2NEW_INFO, NULL);
4581 /* LSA Information 3.2.2.23 MSC-BSS O (note 14) 3+4n */
4582 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LSA_INFO].value, GSM_A_PDU_TYPE_BSSMAP, BE_LSA_INFO, NULL);
4583 /* LSA Access Control Suppression 3.2.2.61 MSC-BSS O (note 15) 2 */
4584 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_LSA_ACC_CTRL].value, GSM_A_PDU_TYPE_BSSMAP, BE_LSA_ACC_CTRL, NULL);
4585 /* Service Handover 3.2.2.75 MSC-BSS O (note 21) 3 */
4586 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_SERV_HO].value, GSM_A_PDU_TYPE_BSSMAP, BE_SERV_HO, NULL);
4587 /* IMSI 3.2.2.6 MSC-BSC O (note 16) 3-10 */
4588 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_IMSI].value, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL);
4589 /* Source RNC to target RNC transparent information (UMTS) 3.2.2.76 MSC-BSS O (note 18) n-m */
4590 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SRC_RNC_TO_TAR_RNC_UMTS].value, GSM_A_PDU_TYPE_BSSMAP, BE_SRC_RNC_TO_TAR_RNC_UMTS, NULL);
4591 /* Source RNC to target RNC transparent information (cdma2000) 3.2.2.77 MSC-BSS O (note 19) n-m */
4592 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SRC_RNC_TO_TAR_RNC_CDMA].value, GSM_A_PDU_TYPE_BSSMAP, BE_SRC_RNC_TO_TAR_RNC_CDMA, NULL);
4593 /* SNA Access Information 3.2.2.82 MSC-BSC O (note 22) 2+n */
4594 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SNA_ACC_INF].value, GSM_A_PDU_TYPE_BSSMAP, BE_SNA_ACC_INF, NULL);
4595 /* Talker Priority 3.2.2.89 MSC-BSC O (note 23) 2 */
4596 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, GSM_A_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL);
4597 /* AoIP Transport Layer Address (MGW) 3.2.2.102 MSC-BSS O (note 24) 10-22 */
4598 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_AOIP_TRANS_LAY_ADD].value, GSM_A_PDU_TYPE_BSSMAP, BE_AOIP_TRANS_LAY_ADD, NULL);
4599 /* Codec List (MSC Preferred) 3.2.2.103 MSC-BSS O (note 25) 3-n */
4600 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC_LST].value, GSM_A_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC_LST, "(MSC Preferred)");
4601 /* Call Identifier 3.2.2.105 MSC-BSS O (note 24) 5 */
4602 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CALL_ID].value, GSM_A_PDU_TYPE_BSSMAP, BE_CALL_ID, NULL);
4604 EXTRANEOUS_DATA_CHECK(curr_len, 0);
4608 * [2] 3.2.1.9 HANDOVER REQUIRED
4611 bssmap_ho_reqd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
4613 guint32 curr_offset;
4617 curr_offset = offset;
4620 /* Cause 3.2.2.5 BSS-MSC M 3-4 */
4621 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_CAUSE, NULL);
4622 /* Response Request 3.2.2.28 BSS-MSC O (note 8) 1 */
4623 ELEM_OPT_T(gsm_bssmap_elem_strings[BE_RESP_REQ].value, GSM_A_PDU_TYPE_BSSMAP, BE_RESP_REQ, NULL);
4624 /* Cell Identifier List (Preferred) 3.2.2.27 BSS-MSC M (note 4) 2n+3 to 7n+3 */
4625 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID_LIST].value, GSM_A_PDU_TYPE_BSSMAP, BE_CELL_ID_LIST, " (Preferred)");
4626 /* Circuit Pool List 3.2.2.46 BSS-MSC O (note 1) V */
4627 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CCT_POOL_LIST].value, GSM_A_PDU_TYPE_BSSMAP, BE_CCT_POOL_LIST, NULL);
4628 /* Current Channel Type 1 3.2.2.49 BSS-MSC O (note 2) 2 */
4629 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CURR_CHAN_1].value, GSM_A_PDU_TYPE_BSSMAP, BE_CURR_CHAN_1, NULL);
4630 /* Speech Version (Used) 3.2.2.51 BSS-MSC O (note 3) 2 */
4631 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_SPEECH_VER].value, GSM_A_PDU_TYPE_BSSMAP, BE_SPEECH_VER, " (Used)");
4632 /* Queueing Indicator 3.2.2.50 BSS-MSC O 2 */
4633 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_QUE_IND].value, GSM_A_PDU_TYPE_BSSMAP, BE_QUE_IND, NULL);
4634 /* Old BSS to New BSS Information 3.2.2.58 BSS-MSC O 2-n */
4635 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_OLD2NEW_INFO].value, GSM_A_PDU_TYPE_BSSMAP, BE_OLD2NEW_INFO, NULL);
4636 /* Source RNC to target RNC transparent information (UMTS) 3.2.2.76 BSS-MSC O (note 5) 3-m */
4637 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SRC_RNC_TO_TAR_RNC_UMTS].value, GSM_A_PDU_TYPE_BSSMAP, BE_SRC_RNC_TO_TAR_RNC_UMTS, NULL);
4638 /* Source RNC to target RNC transparent information (cdma2000) 3.2.2.77 BSS-MSC O (note 6) n-m */
4639 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SRC_RNC_TO_TAR_RNC_CDMA].value, GSM_A_PDU_TYPE_BSSMAP, BE_SRC_RNC_TO_TAR_RNC_CDMA, NULL);
4640 /* GERAN Classmark 3.2.2.78 BSS-MSC O (note 7) V */
4641 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_GERAN_CLS_M].value, GSM_A_PDU_TYPE_BSSMAP, BE_GERAN_CLS_M, NULL);
4642 /* Talker Priority 3.2.2.89 BSS-MSC O (note 9) 2 */
4643 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, GSM_A_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL);
4644 /* Speech Codec (Used) 3.2.2.104 BSS-MSC O (note 10) 3-5 */
4645 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC].value, GSM_A_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC, "(Used)");
4647 EXTRANEOUS_DATA_CHECK(curr_len, 0);
4651 * [2] 3.2.1.10 HANDOVER REQUEST ACKNOWLEDGE
4654 bssmap_ho_req_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
4656 guint32 curr_offset;
4660 curr_offset = offset;
4663 /* Layer 3 Information 3.2.2.24 BSS-MSC M (note 1) 11-n */
4664 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_L3_INFO].value, GSM_A_PDU_TYPE_BSSMAP, BE_L3_INFO, NULL);
4665 /* Chosen Channel 3.2.2.33 BSS-MSC O (note 4) 2 */
4666 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_CHAN].value, GSM_A_PDU_TYPE_BSSMAP, BE_CHOSEN_CHAN, NULL);
4667 /* Chosen Encryption Algorithm 3.2.2.44 BSS-MSC O (note 5) 2 */
4668 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_ENC_ALG].value, GSM_A_PDU_TYPE_BSSMAP, BE_CHOSEN_ENC_ALG, NULL);
4669 /* Circuit Pool 3.2.2.45 BSS-MSC O (note 2) 2 */
4670 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CCT_POOL].value, GSM_A_PDU_TYPE_BSSMAP, BE_CCT_POOL, NULL);
4671 /* Speech Version (Chosen) 3.2.2.51 BSS-MSC O (note 6) 2 */
4672 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_SPEECH_VER].value, GSM_A_PDU_TYPE_BSSMAP, BE_SPEECH_VER, " (Chosen)");
4673 /* Circuit Identity Code 3.2.2.2 BSS-MSC O (note 3) 3 */
4674 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CIC].value, GSM_A_PDU_TYPE_BSSMAP, BE_CIC, NULL);
4675 /* LSA Identifier 3.2.2.15 BSS-MSC O (note 7) 5 */
4676 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LSA_ID].value, GSM_A_PDU_TYPE_BSSMAP, BE_LSA_ID, NULL);
4677 /* New BSS to Old BSS Information 3.2.2.80 BSS-MSC O (note 8) 2-n */
4678 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_NEW_BSS_TO_OLD_BSS_INF].value, GSM_A_PDU_TYPE_BSSMAP, BE_NEW_BSS_TO_OLD_BSS_INF, NULL);
4679 /* Inter-System Information 3.2.2.81 BSS-MSC O (note 9) 2-n */
4680 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_INTER_SYS_INF].value, GSM_A_PDU_TYPE_BSSMAP, BE_INTER_SYS_INF, NULL);
4681 /* Talker Priority 3.2.2.89 BSS-MSC O (note 10) 2 */
4682 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, GSM_A_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL);
4683 /* AoIP Transport Layer Address (BSS) 3.2.2.102 BSS-MSC O (note 11) 10-22 */
4684 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_AOIP_TRANS_LAY_ADD].value, GSM_A_PDU_TYPE_BSSMAP, BE_AOIP_TRANS_LAY_ADD, NULL);
4685 /* Codec List (BSS Supported) 3.2.2.103 BSS-MSC O (note 12) 3-n */
4686 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC_LST].value, GSM_A_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC_LST, "(BSS Supported)");
4687 /* Speech Codec (Chosen) 3.2.2.104 BSS-MSC O (note 12) 3-5 */
4688 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC].value, GSM_A_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC, "(Chosen)");
4690 EXTRANEOUS_DATA_CHECK(curr_len, 0);
4694 * [2] 3.2.1.11 HANDOVER COMMAND
4697 bssmap_ho_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
4699 guint32 curr_offset;
4703 curr_offset = offset;
4706 /* Layer 3 Information 3.2.2.24 MSC-BSS M (note 1) 11-n */
4707 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_L3_INFO].value, GSM_A_PDU_TYPE_BSSMAP, BE_L3_INFO, NULL);
4708 /* Cell Identifier 3.2.2.17 MSC-BSS O 3-10 */
4709 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, GSM_A_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL);
4710 /* New BSS to Old BSS Information 3.2.2.80 MSC-BSS O (note 2) 2-n */
4711 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_NEW_BSS_TO_OLD_BSS_INF].value, GSM_A_PDU_TYPE_BSSMAP, BE_NEW_BSS_TO_OLD_BSS_INF, NULL);
4712 /* Talker Priority 3.2.2.89 MSC-BSS O (note 3) 2 */
4713 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, GSM_A_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL);
4715 EXTRANEOUS_DATA_CHECK(curr_len, 0);
4719 * [2] 3.2.1.12 HANDOVER COMPLETE
4722 bssmap_ho_complete(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
4724 guint32 curr_offset;
4728 curr_offset = offset;
4731 /* RR Cause 3.2.2.22 BSS-MSC O 2 */
4732 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_RR_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_RR_CAUSE, NULL);
4733 /* Talker Priority 3.2.2.89 BSS-MSC O (note 1) 2 */
4734 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, GSM_A_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL);
4735 /* Speech Codec (Chosen) 3.2.2.nn BSS-MSC O (note 2) 3-5 */
4736 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC].value, GSM_A_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC, "(Chosen)");
4738 EXTRANEOUS_DATA_CHECK(curr_len, 0);
4742 * 3.2.1.13 HANDOVER SUCCEEDED
4745 bssmap_ho_succ(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
4747 guint32 curr_offset;
4751 curr_offset = offset;
4754 /* Talker Priority 3.2.2.89 MSC-BSS O (note 1) 2 */
4755 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, GSM_A_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL);
4757 EXTRANEOUS_DATA_CHECK(curr_len, 0);
4761 * [2] 3.2.1.14 HANDOVER CANDIDATE ENQUIRE
4764 bssmap_ho_cand_enq(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
4766 guint32 curr_offset;
4770 curr_offset = offset;
4773 /* Number Of Mss 3.2.2.8 MSC-BSS M 2 */
4774 ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_NUM_MS].value, GSM_A_PDU_TYPE_BSSMAP, BE_NUM_MS, NULL);
4776 /* Cell Identifier List 3.2.2.27 MSC-BSS M 2n+3 to 7n+3 */
4777 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID_LIST].value, GSM_A_PDU_TYPE_BSSMAP, BE_CELL_ID_LIST, NULL);
4779 /* Cell Identifier 3.2.2.17 MSC-BSS M 3-10 */
4780 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, GSM_A_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL);
4782 EXTRANEOUS_DATA_CHECK(curr_len, 0);
4786 * [2] 3.2.1.15 HANDOVER CANDIDATE RESPONSE
4789 bssmap_ho_cand_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
4791 guint32 curr_offset;
4795 curr_offset = offset;
4798 /* Number Of Mss 3.2.2.8 BSS-MSC M 2 */
4799 ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_NUM_MS].value, GSM_A_PDU_TYPE_BSSMAP, BE_NUM_MS, NULL);
4801 /* Cell Identifier 3.2.2.17 BSS-MSC M 3-10 */
4802 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, GSM_A_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL);
4804 EXTRANEOUS_DATA_CHECK(curr_len, 0);
4808 * [2] 3.2.1.16 HANDOVER FAILURE
4811 bssmap_ho_failure(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
4813 guint32 curr_offset;
4817 curr_offset = offset;
4820 /* Cause 3.2.2.5 BSS-MSC M 3-4 */
4821 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_CAUSE, NULL);
4822 /* RR Cause 3.2.2.22 BSS-MSC O 2 */
4823 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_RR_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_RR_CAUSE, NULL);
4824 /* Circuit Pool 3.2.2.45 BSS-MSC O (note 1) 2 */
4825 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CCT_POOL].value, GSM_A_PDU_TYPE_BSSMAP, BE_CCT_POOL, NULL);
4826 /* Circuit Pool List 3.2.2.46 BSS-MSC O (note 2) V */
4827 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CCT_POOL_LIST].value, GSM_A_PDU_TYPE_BSSMAP, BE_CCT_POOL_LIST, NULL);
4828 /* GERAN Classmark 3.2.2.78 BSS-MSC O (note 3) V */
4829 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_GERAN_CLS_M].value, GSM_A_PDU_TYPE_BSSMAP, BE_GERAN_CLS_M, NULL);
4830 /* New BSS to Old BSS Information 3.2.2.80 BSS-MSC O (note 4) 2-n */
4831 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_NEW_BSS_TO_OLD_BSS_INF].value, GSM_A_PDU_TYPE_BSSMAP, BE_NEW_BSS_TO_OLD_BSS_INF, NULL);
4832 /* Inter-System Information 3.2.2.81 BSS-MSC O (note 5) 2-n */
4833 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_INTER_SYS_INF].value, GSM_A_PDU_TYPE_BSSMAP, BE_INTER_SYS_INF, NULL);
4834 /* Talker Priority 3.2.2.89 BSS-MSC O (note 6) 2 */
4835 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, GSM_A_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL);
4836 /* Codec List (BSS Supported) 3.2.2.103 BSS-MSC O (note 7) 3-n */
4837 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC_LST].value, GSM_A_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC_LST, "(BSS Supported)");
4839 EXTRANEOUS_DATA_CHECK(curr_len, 0);
4843 * 3.2.1.17 RESOURCE REQUEST
4846 bssmap_res_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
4848 guint32 curr_offset;
4852 curr_offset = offset;
4855 /* Periodicity 3.2.2.12 MSC-BSS M 2 */
4856 ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_PERIODICITY].value, GSM_A_PDU_TYPE_BSSMAP, BE_PERIODICITY, NULL);
4857 /* Resource Indication Method 3.2.2.29 MSC-BSS M 2 */
4858 ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_RES_IND_METHOD].value, GSM_A_PDU_TYPE_BSSMAP, BE_RES_IND_METHOD, NULL);
4859 /* Cell Identifier 3.2.2.17 MSC-BSS M 3-10 */
4860 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, GSM_A_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL);
4861 /* Extended Resource Indicator 3.2.2.13 MSC-BSS O 2 */
4862 ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_EXT_RES_IND].value, GSM_A_PDU_TYPE_BSSMAP, BE_EXT_RES_IND, NULL);
4864 EXTRANEOUS_DATA_CHECK(curr_len, 0);
4868 * 3.2.1.18 RESOURCE INDICATION
4871 bssmap_res_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
4873 guint32 curr_offset;
4877 curr_offset = offset;
4880 /* Resource Indication Method 3.2.2.29 BSS-MSC M 2 */
4881 ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_RES_IND_METHOD].value, GSM_A_PDU_TYPE_BSSMAP, BE_RES_IND_METHOD, NULL);
4882 /* Resource Available 3.2.2.4 BSS-MSC O (note 1) 21 */
4883 ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_RES_AVAIL].value, GSM_A_PDU_TYPE_BSSMAP, BE_RES_AVAIL, NULL);
4884 /* Cell Identifier 3.2.2.17 BSS-MSC M 3-10 */
4885 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, GSM_A_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL);
4886 /* Total Resource Accessible 3.2.2.14 BSS-MSC O (note 2) 5 */
4887 ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_TOT_RES_ACC].value, GSM_A_PDU_TYPE_BSSMAP, BE_TOT_RES_ACC, NULL);
4889 EXTRANEOUS_DATA_CHECK(curr_len, 0);
4892 * [2] 3.2.1.19 PAGING
4895 bssmap_paging(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
4897 guint32 curr_offset;
4901 curr_offset = offset;
4904 /* IMSI 3.2.2.6 MSC-BSS M 3-10 */
4905 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_IMSI].value, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL);
4906 /* TMSI 3.2.2.7 MSC-BSS O (note 1) 6 */
4907 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_TMSI].value, GSM_A_PDU_TYPE_BSSMAP, BE_TMSI, NULL);
4908 /* Cell Identifier List 3.2.2.27 MSC-BSS M 3 to 3+7n */
4909 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID_LIST].value, GSM_A_PDU_TYPE_BSSMAP, BE_CELL_ID_LIST, NULL);
4910 /* Channel Needed 3.2.2.36 MSC-BSS O (note 2) 2 */
4911 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHAN_NEEDED].value, GSM_A_PDU_TYPE_BSSMAP, BE_CHAN_NEEDED, NULL);
4912 /* eMLPP Priority 3.2.2.56 MSC-BSS O (note 3) 2 */
4913 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_EMLPP_PRIO].value, GSM_A_PDU_TYPE_BSSMAP, BE_EMLPP_PRIO, NULL);
4914 /* Paging Information 3.2.2.85 MSC-BSS O 2 */
4915 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_PAGING_INF].value, GSM_A_PDU_TYPE_BSSMAP, BE_PAGING_INF, NULL);
4917 EXTRANEOUS_DATA_CHECK(curr_len, 0);
4921 * [2] 3.2.1.20 CLEAR REQUEST
4924 bssmap_clear_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
4926 guint32 curr_offset;
4930 curr_offset = offset;
4933 /* Cause 3.2.2.5 BSS-MSC M 3-4 */
4934 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_CAUSE, NULL);
4936 EXTRANEOUS_DATA_CHECK(curr_len, 0);
4940 * [2] 3.2.1.21 CLEAR COMMAND
4943 bssmap_clear_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
4945 guint32 curr_offset;
4949 curr_offset = offset;
4952 /* Layer 3 Header Information 3.2.2.9 MSC-BSS O (note) 4 */
4953 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_L3_HEADER_INFO].value, GSM_A_PDU_TYPE_BSSMAP, BE_L3_HEADER_INFO, NULL);
4954 /* Cause 3.2.2.5 MSC-BSS M 3-4 */
4955 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_CAUSE, NULL);
4957 EXTRANEOUS_DATA_CHECK(curr_len, 0);
4960 * 3.2.1.22 CLEAR COMPLETE
4965 * [2] 3.2.1.23 RESET
4968 bssmap_reset(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
4970 guint32 curr_offset;
4974 curr_offset = offset;
4977 /* Cause 3.2.2.5 Both M 3-4 */
4978 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_CAUSE, NULL);
4980 EXTRANEOUS_DATA_CHECK(curr_len, 0);
4984 * 3.2.1.24 RESET ACKNOWLEDGE
4988 * [2] 3.2.1.25 HANDOVER PERFORMED
4991 bssmap_ho_performed(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
4993 guint32 curr_offset;
4997 curr_offset = offset;
5000 /* Cause 3.2.2.5 BSS-MSC M 3-4 */
5001 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_CAUSE, NULL);
5002 /* Cell Identifier 3.2.2.17 BSS-MSC M (note 5) 3-10 */
5003 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, GSM_A_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL);
5004 /* Chosen Channel 3.2.2.33 BSS-MSC O (note 1) 2 */
5005 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_CHAN].value, GSM_A_PDU_TYPE_BSSMAP, BE_CHOSEN_CHAN, NULL);
5006 /* Chosen Encryption Algorithm 3.2.2.44 BSS-MSC O (note 2) 2 */
5007 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_ENC_ALG].value, GSM_A_PDU_TYPE_BSSMAP, BE_CHOSEN_ENC_ALG, NULL);
5008 /* Speech Version (Chosen) 3.2.2.51 BSS-MSC O (note 3) 2 */
5009 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_SPEECH_VER].value, GSM_A_PDU_TYPE_BSSMAP, BE_SPEECH_VER, " (Chosen)");
5010 /* LSA Identifier 3.2.2.15 BSS-MSC O (note 4) 5 */
5011 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LSA_ID].value, GSM_A_PDU_TYPE_BSSMAP, BE_LSA_ID, NULL);
5012 /* Talker Priority 3.2.2.89 BSS-MSC O (note 6) 2 */
5013 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, GSM_A_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL);
5014 /* Codec List (BSS Supported) (serving cell) 3.2.2.103 BSS-MSC O (note 7) 3-n */
5015 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC_LST].value, GSM_A_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC_LST, "(BSS Supported)");
5016 /* Speech Codec (Chosen) 3.2.2.104 BSS-MSC O (note 8) 3-5 */
5017 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC].value, GSM_A_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC, "(Chosen)");
5019 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5023 * [2] 3.2.1.26 OVERLOAD
5026 bssmap_overload(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5028 guint32 curr_offset;
5032 curr_offset = offset;
5035 /* Cause 3.2.2.5 Both M 3-4 */
5036 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_CAUSE, NULL);
5037 /* Cell Identifier 3.2.2.17 BSS-MSC O 3-10 */
5038 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, GSM_A_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL);
5040 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5043 * 3.2.1.27 MSC INVOKE TRACE
5046 bssmap_msc_invoke_trace(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5048 guint32 curr_offset;
5052 curr_offset = offset;
5055 /* Trace Type 3.2.2.37 MSC-BSS M 2 */
5056 ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_TRACE_TYPE].value, GSM_A_PDU_TYPE_BSSMAP, BE_TRACE_TYPE, NULL);
5057 /* Triggerid 3.2.2.38 MSC-BSS O 3-22 */
5058 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_TRIGGERID].value, GSM_A_PDU_TYPE_BSSMAP, BE_TRIGGERID, NULL);
5059 /* Trace Reference 3.2.2.39 MSC-BSS M 3 */
5060 ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_TRACE_REF].value, GSM_A_PDU_TYPE_BSSMAP, BE_TRACE_REF, NULL);
5061 /* Transactionid 3.2.2.40 MSC-BSS O 4 */
5062 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_TRANSID].value, GSM_A_PDU_TYPE_BSSMAP, BE_TRANSID, NULL);
5063 /* Mobile Identity 3.2.2.41 MSC-BSS O 3-10 */
5064 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_MID].value, GSM_A_PDU_TYPE_BSSMAP, BE_MID, NULL);
5065 /* OMCId 3.2.2.42 MSC-BSS O 3-22 */
5066 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_OMCID].value, GSM_A_PDU_TYPE_BSSMAP, BE_OMCID, NULL);
5068 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5072 * 3.2.1.28 BSS INVOKE TRACE
5075 bssmap_bss_invoke_trace(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5077 guint32 curr_offset;
5081 curr_offset = offset;
5084 /* Trace Type 3.2.2.37 Both M 2 */
5085 ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_TRACE_TYPE].value, GSM_A_PDU_TYPE_BSSMAP, BE_TRACE_TYPE, NULL);
5086 /* Forward Indicator 3.2.2.43 Both O 2 */
5087 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_FOR_IND].value, GSM_A_PDU_TYPE_BSSMAP, BE_FOR_IND, NULL);
5088 /* Triggerid 3.2.2.38 Both O 3-22 */
5089 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_TRIGGERID].value, GSM_A_PDU_TYPE_BSSMAP, BE_TRIGGERID, NULL);
5090 /* Trace Reference 3.2.2.39 Both M 3 */
5091 ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_TRACE_REF].value, GSM_A_PDU_TYPE_BSSMAP, BE_TRACE_REF, NULL);
5092 /* TransactionId 3.2.2.40 Both O 4 */
5093 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_TRANSID].value, GSM_A_PDU_TYPE_BSSMAP, BE_TRANSID, NULL);
5094 /* OMCId 3.2.2.42 Both O 3-22 */
5095 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_OMCID].value, GSM_A_PDU_TYPE_BSSMAP, BE_OMCID, NULL);
5097 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5101 * [2] 3.2.1.29 CLASSMARK UPDATE
5104 bssmap_cm_upd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5106 guint32 curr_offset;
5110 curr_offset = offset;
5113 /* Classmark Information Type 2 3.2.2.19 Both M 4-5 */
5114 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CM_INFO_2].value, GSM_A_PDU_TYPE_BSSMAP, BE_CM_INFO_2, NULL);
5115 /* Classmark Information Type 3 3.2.2.20 Both O (note 1) 3-34 */
5116 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CM_INFO_3].value, GSM_A_PDU_TYPE_BSSMAP, BE_CM_INFO_3, NULL);
5117 /* Talker Priority 3.2.2.89 Both O (note 2) 2 */
5118 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, GSM_A_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL);
5120 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5124 * [2] 3.2.1.30 CIPHER MODE COMMAND
5127 bssmap_ciph_mode_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5129 guint32 curr_offset;
5133 curr_offset = offset;
5136 /* Layer 3 Header Information 3.2.2.9 MSC-BSS O (note) 4 */
5137 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_L3_HEADER_INFO].value, GSM_A_PDU_TYPE_BSSMAP, BE_L3_HEADER_INFO, NULL);
5138 /* Encryption Information 3.2.2.10 MSC-BSS M 3-n */
5139 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_ENC_INFO].value, GSM_A_PDU_TYPE_BSSMAP, BE_ENC_INFO, NULL);
5140 /* Cipher Response Mode 3.2.2.34 MSC-BSS O 2 */
5141 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CIPH_RESP_MODE].value, GSM_A_PDU_TYPE_BSSMAP, BE_CIPH_RESP_MODE, NULL);
5143 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5147 * [2] 3.2.1.31 CIPHER MODE COMPLETE
5150 bssmap_ciph_mode_complete(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5152 guint32 curr_offset;
5156 curr_offset = offset;
5159 /* Layer 3 Message Contents 3.2.2.35 BSS-MSC O 2-n */
5160 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_L3_MSG].value, GSM_A_PDU_TYPE_BSSMAP, BE_L3_MSG, NULL);
5161 /* Chosen Encryption Algorithm 3.2.2.44 BSS-MSC O (note) 2 */
5162 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_ENC_ALG].value, GSM_A_PDU_TYPE_BSSMAP, BE_CHOSEN_ENC_ALG, NULL);
5164 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5168 * [2] 3.2.1.32 COMPLETE LAYER 3 INFORMATION
5171 bssmap_cl3_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5174 guint32 curr_offset;
5177 curr_offset = offset;
5180 /* Cell Identifier 3.2.2.17 BSS-MSC M 3-10 */
5181 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, GSM_A_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL);
5182 /* Layer 3 Information 3.2.2.24 BSS-MSC M 3-n */
5183 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_L3_INFO].value, GSM_A_PDU_TYPE_BSSMAP, BE_L3_INFO, NULL);
5184 /* Chosen Channel 3.2.2.33 BSS-MSC O (note 1) 2 */
5185 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_CHAN].value, GSM_A_PDU_TYPE_BSSMAP, BE_CHOSEN_CHAN, NULL);
5186 /* LSA Identifier List 3.2.2.16 BSS-MSC O (note 2) 3+3n */
5187 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LSA_ID_LIST].value, GSM_A_PDU_TYPE_BSSMAP, BE_LSA_ID_LIST, NULL);
5188 /* APDU 3.2.2.68 BSS-MSC O (note 3) 3-n */
5189 ELEM_OPT_TLV_E(gsm_bssmap_elem_strings[BE_APDU].value, GSM_A_PDU_TYPE_BSSMAP, BE_APDU, NULL);
5190 /* Codec List (BSS Supported) 3.2.2.103 BSS-MSC O (note 4) 3-n */
5191 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC_LST].value, GSM_A_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC_LST, "(BSS Supported)");
5193 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5196 * 3.2.1.33 QUEUEING INDICATION
5201 * [2] 3.2.1.34 SAPI "n" REJECT
5204 bssmap_sapi_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5207 guint32 curr_offset;
5210 curr_offset = offset;
5213 /* DLCI 3.2.2.25 BSS-MSC M 2 */
5214 ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_DLCI].value, GSM_A_PDU_TYPE_BSSMAP, BE_DLCI, NULL);
5215 /* Cause 3.2.2.5 BSS-MSC M 3-4 */
5216 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_CAUSE, NULL);
5218 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5224 * [2] 3.2.1.37 HANDOVER REQUIRED REJECT
5227 bssmap_ho_reqd_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5229 guint32 curr_offset;
5233 curr_offset = offset;
5236 /* Cause 3.2.2.5 MSC-BSS M 3-4 */
5237 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_CAUSE, NULL);
5238 /* New BSS to Old BSS Information 3.2.2.78 MSC-BSS O (note 1) 2-n */
5239 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_NEW_BSS_TO_OLD_BSS_INF].value, GSM_A_PDU_TYPE_BSSMAP, BE_NEW_BSS_TO_OLD_BSS_INF, NULL);
5240 /* Talker Priority 3.2.2.89 MSC-BSS O (note 2) 2 */
5241 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, GSM_A_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL);
5243 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5247 * [2] 3.2.1.38 RESET CIRCUIT
5250 bssmap_reset_cct(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5252 guint32 curr_offset;
5256 curr_offset = offset;
5259 /* Circuit Identity Code 3.2.2.2 Both M 3 */
5260 ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, GSM_A_PDU_TYPE_BSSMAP, BE_CIC, NULL);
5261 /* Cause 3.2.2.5 Both M 3-4 */
5262 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_CAUSE, NULL);
5264 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5268 * [2] 3.2.1.39 RESET CIRCUIT ACKNOWLEDGE
5271 bssmap_reset_cct_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5273 guint32 curr_offset;
5277 curr_offset = offset;
5280 /* Circuit Identity 3.2.2.2 Both M 3 */
5281 ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, GSM_A_PDU_TYPE_BSSMAP, BE_CIC, NULL);
5283 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5287 * 3.2.1.40 HANDOVER DETECT
5290 bssmap_ho_det(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5292 guint32 curr_offset;
5296 curr_offset = offset;
5299 /* Talker Priority 3.2.2.89 BSS-MSC O (note 1) 2 */
5300 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, GSM_A_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL);
5302 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5305 * [2] 3.2.1.41 CIRCUIT GROUP BLOCK
5308 bssmap_cct_group_block(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5310 guint32 curr_offset;
5314 curr_offset = offset;
5317 /* Cause 3.2.2.5 Both M 3-4 */
5318 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_CAUSE, NULL);
5319 /* Circuit Identity Code 3.2.2.2 Both M 3 */
5320 ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, GSM_A_PDU_TYPE_BSSMAP, BE_CIC, NULL);
5321 /* Circuit Identity Code List 3.2.2.31 Both M 4-35 */
5322 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CIC_LIST].value, GSM_A_PDU_TYPE_BSSMAP, BE_CIC_LIST, NULL);
5324 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5328 * [2] 3.2.1.42 CIRCUIT GROUP BLOCKING ACKNOWLEDGE
5331 bssmap_cct_group_block_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5333 guint32 curr_offset;
5337 curr_offset = offset;
5340 /* Circuit Identity Code 3.2.2.2 Both M 3 */
5341 ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, GSM_A_PDU_TYPE_BSSMAP, BE_CIC, NULL);
5342 /* Circuit Identity Code List 3.2.2.31 Both M 4-35 */
5343 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CIC_LIST].value, GSM_A_PDU_TYPE_BSSMAP, BE_CIC_LIST, NULL);
5345 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5349 * [2] 3.2.1.43 CIRCUIT GROUP UNBLOCK
5352 bssmap_cct_group_unblock(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5354 guint32 curr_offset;
5358 curr_offset = offset;
5361 /* Circuit Identity Code 3.2.2.2 Both M 3 */
5362 ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, GSM_A_PDU_TYPE_BSSMAP, BE_CIC, NULL);
5363 /* Circuit Identity Code List 3.2.2.31 Both M 4-35 */
5364 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CIC_LIST].value, GSM_A_PDU_TYPE_BSSMAP, BE_CIC_LIST, NULL);
5366 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5370 * [2] 3.2.1.44 CIRCUIT GROUP UNBLOCKING ACKNOWLEDGE
5373 bssmap_cct_group_unblock_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5375 guint32 curr_offset;
5379 curr_offset = offset;
5382 /* Circuit Identity Code 3.2.2.2 Both M 3 */
5383 ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, GSM_A_PDU_TYPE_BSSMAP, BE_CIC, NULL);
5384 /* Circuit Identity Code List 3.2.2.31 Both M 4-35 */
5385 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CIC_LIST].value, GSM_A_PDU_TYPE_BSSMAP, BE_CIC_LIST, NULL);
5387 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5391 * [2] 3.2.1.45 CONFUSION
5394 bssmap_confusion(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5396 guint32 curr_offset;
5400 curr_offset = offset;
5403 /* Cause 3.2.2.5 Both M 3-4 */
5404 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_CAUSE, NULL);
5405 /* Diagnostics 3.2.2.32 Both M 4-n */
5406 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_DIAG].value, GSM_A_PDU_TYPE_BSSMAP, BE_DIAG, NULL);
5408 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5411 * 3.2.1.46 CLASSMARK REQUEST
5414 bssmap_cls_m_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5416 guint32 curr_offset;
5420 curr_offset = offset;
5423 /* Talker Priority 3.2.2.89 MSC-BSS O (note 1) 2 */
5424 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, GSM_A_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL);
5426 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5429 * [2] 3.2.1.47 UNEQUIPPED CIRCUIT
5432 bssmap_unequipped_cct(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5434 guint32 curr_offset;
5438 curr_offset = offset;
5441 /* Circuit Identity Code 3.2.2.2 Both M 3 */
5442 ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, GSM_A_PDU_TYPE_BSSMAP, BE_CIC, NULL);
5443 /* Circuit Identity Code List 3.2.2.31 Both O 4-35 */
5444 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CIC_LIST].value, GSM_A_PDU_TYPE_BSSMAP, BE_CIC_LIST, NULL);
5446 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5450 * [2] 3.2.1.48 CIPHER MODE REJECT
5453 bssmap_ciph_mode_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5455 guint32 curr_offset;
5459 curr_offset = offset;
5462 /* Cause 3.2.2.5 BSS-MSC M 3-4 */
5463 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_CAUSE, NULL);
5465 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5469 * [2] 3.2.1.49 LOAD INDICATION
5472 bssmap_load_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5474 guint32 curr_offset;
5478 curr_offset = offset;
5481 /* Time Indication 3.2.2.47 Both M 2 */
5482 ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_TIME_IND].value, GSM_A_PDU_TYPE_BSSMAP, BE_TIME_IND, NULL);
5483 /* Cell Identifier 3.2.2.17 Both M 3-10 */
5484 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, GSM_A_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL);
5485 /* Cell Identifier List (Target) 3.2.2.27 Both M 3 to 3+7n */
5486 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID_LIST].value, GSM_A_PDU_TYPE_BSSMAP, BE_CELL_ID_LIST, " (Target)");
5487 /* Resource Situation 3.2.2.48 Both O (note 1) 4-N */
5488 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_RES_SIT].value, GSM_A_PDU_TYPE_BSSMAP, BE_RES_SIT, NULL);
5489 /* Cause 3.2.2.5 Both O (note 2) 4-5 */
5490 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_CAUSE, NULL);
5492 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5495 * 3.2.1.50 VGCS/VBS SETUP
5498 bssmap_vgcs_vbs_setup(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5500 guint32 curr_offset;
5504 curr_offset = offset;
5507 /* Group Call Reference 3.2.2.55 MSC-BSS M 7 */
5508 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_GROUP_CALL_REF].value, GSM_A_PDU_TYPE_BSSMAP, BE_GROUP_CALL_REF, NULL);
5509 /* Priority 3.2.2.18 MSC-BSS O 3 */
5510 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_PRIO].value, GSM_A_PDU_TYPE_BSSMAP, BE_PRIO, NULL);
5511 /* VGCS Feature Flags 3.2.2.88 MSC-BSS O 3 */
5512 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_VGCS_FEAT_FLG].value, GSM_A_PDU_TYPE_BSSMAP, BE_VGCS_FEAT_FLG, NULL);
5514 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5518 * 3.2.1.51 VGCS/VBS SETUP ACK
5521 bssmap_vgcs_vbs_setup_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5523 guint32 curr_offset;
5527 curr_offset = offset;
5530 /* VGCS Feature Flags 3.2.2.88 BSS-MSC O(note 1) 3 */
5531 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_VGCS_FEAT_FLG].value, GSM_A_PDU_TYPE_BSSMAP, BE_VGCS_FEAT_FLG, NULL);
5533 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5537 * 3.2.1.52 VGCS/VBS SETUP REFUSE
5540 bssmap_vgcs_vbs_setup_refuse(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5542 guint32 curr_offset;
5546 curr_offset = offset;
5549 /* Cause 3.2.2.5 BSS-MSC M 3-4 */
5550 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_CAUSE, NULL);
5552 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5556 * 3.2.1.53 VGCS/VBS ASSIGNMENT REQUEST
5559 bssmap_vgcs_vbs_ass_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5561 guint32 curr_offset;
5565 curr_offset = offset;
5568 /* Channel Type 3.2.2.11 MSC-BSS M (note 2) 5-13 */
5569 ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CURR_CHAN_1].value, GSM_A_PDU_TYPE_BSSMAP, BE_CURR_CHAN_1, NULL);
5570 /* Assignment Requirement 3.2.2.52 MSC-BSS M 2 */
5571 ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_ASS_REQ].value, GSM_A_PDU_TYPE_BSSMAP, BE_ASS_REQ, NULL);
5572 /* Cell Identifier 3.2.2.17 MSC-BSS M 3-10 */
5573 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, GSM_A_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL);
5574 /* Group Call Reference 3.2.2.55 MSC-BSS M 7 */
5575 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_GROUP_CALL_REF].value, GSM_A_PDU_TYPE_BSSMAP, BE_GROUP_CALL_REF, NULL);
5576 /* Priority 3.2.2.18 MSC-BSS O 3 */
5577 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_PRIO].value, GSM_A_PDU_TYPE_BSSMAP, BE_PRIO, NULL);
5578 /* Circuit Identity Code 3.2.2.2 MSC-BSS O (note 4, 5) 3 */
5579 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CIC].value, GSM_A_PDU_TYPE_BSSMAP, BE_CIC, NULL);
5580 /* Downlink DTX Flag 3.2.2.26 MSC-BSS O (note 2, 4) 2 */
5581 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_DOWN_DTX_FLAG].value, GSM_A_PDU_TYPE_BSSMAP, BE_DOWN_DTX_FLAG, NULL);
5582 /* Encryption Information 3.2.2.10 MSC-BSS O 3-n */
5583 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_ENC_INFO].value, GSM_A_PDU_TYPE_BSSMAP, BE_ENC_INFO, NULL);
5584 /* VSTK_RAND 3.2.2.83 MSC-BSS O (note 1) 7 */
5585 /* VSTK 3.2.2.84 MSC-BSS O (note 1) 18 */
5586 /* Cell Identifier List Segment 3.2.2.27a MSC-BSS O (note 3) 4-? */
5587 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CELL_ID_LIST_SEG].value, GSM_A_PDU_TYPE_BSSMAP, BE_CELL_ID_LIST_SEG, NULL);
5589 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5592 * 3.2.1.54 VGCS/VBS ASSIGNMENT RESULT
5595 bssmap_vgcs_vbs_ass_res(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5597 guint32 curr_offset;
5601 curr_offset = offset;
5604 /* Channel Type 3.2.2.11 BSS-MSC M (note 3, 4) 5 */
5605 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CURR_CHAN_1].value, GSM_A_PDU_TYPE_BSSMAP, BE_CURR_CHAN_1, NULL);
5606 /* Cell Identifier 3.2.2.17 BSS-MSC M 3-10 */
5607 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, GSM_A_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL);
5608 /* Chosen Channel 3.2.2.33 BSS-MSC O (note 2) 2 */
5609 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_CHAN].value, GSM_A_PDU_TYPE_BSSMAP, BE_CHOSEN_CHAN, NULL);
5610 /* Circuit Identity Code 3.2.2.2 BSS-MSC O (note 5) 3 */
5611 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CIC].value, GSM_A_PDU_TYPE_BSSMAP, BE_CIC, NULL);
5612 /* Circuit Pool 3.2.2.45 BSS-MSC O (note 1) 2 */
5614 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5617 * 3.2.1.55 VGCS/VBS ASSIGNMENT FAILURE
5620 bssmap_vgcs_vbs_ass_fail(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5622 guint32 curr_offset;
5626 curr_offset = offset;
5629 /* Cause 3.2.2.5 BSS-MSC M 3-4 */
5630 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_CAUSE, NULL);
5631 /* Circuit Pool 3.2.2.45 BSS-MSC O (note 1) 2 */
5632 /* Circuit Pool List 3.2.2.46 BSS-MSC O (note 2) V */
5634 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5637 * 3.2.1.56 VGCS/VBS QUEUING INDICATION
5641 * 3.2.1.57 UPLINK REQUEST
5644 bssmap_uplink_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5646 guint32 curr_offset;
5650 curr_offset = offset;
5653 /* Talker Priority 3.2.2.89 BSS-MSC O (note 1) 2 */
5654 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, GSM_A_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL);
5655 /* Cell Identifier 3.2.2.17 BSS-MSC O (note 1) 3-10 */
5656 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, GSM_A_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL);
5657 /* Layer 3 Information 3.2.2.24 BSS-MSC O (note 1,3) 3-n */
5658 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_L3_INFO].value, GSM_A_PDU_TYPE_BSSMAP, BE_L3_INFO, NULL);
5659 /* Mobile Identity 3.2.2.41 BSS-MSC O (note 1,2) 3-n */
5661 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5664 * 3.2.1.58 UPLINK REQUEST ACKNOWLEDGE
5667 bssmap_uplink_req_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5669 guint32 curr_offset;
5673 curr_offset = offset;
5676 /* Talker Priority 3.2.2.89 MSC-BSS O (note 1) 2 */
5677 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, GSM_A_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL);
5678 /* Emergency set indication 3.2.2.90 MSC-BSS O (note 1) 1 */
5679 ELEM_OPT_T(gsm_bssmap_elem_strings[BE_EMRG_SET_IND].value, GSM_A_PDU_TYPE_BSSMAP, BE_EMRG_SET_IND, NULL);
5680 /* Talker Identity 3.2.2.91 MSC-BSS O 3-20 */
5681 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_TALKER_ID].value, GSM_A_PDU_TYPE_BSSMAP, BE_TALKER_ID, NULL);
5683 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5686 * 3.2.1.59 UPLINK REQUEST CONFIRMATION
5689 bssmap_uplink_req_conf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5691 guint32 curr_offset;
5695 curr_offset = offset;
5698 /* Cell Identifier 3.2.2.17 BSS-MSC M 3-10 */
5699 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, GSM_A_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL);
5700 /* Talker Identity 3.2.2.91 BSS-MSC O 3-20 */
5701 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_TALKER_ID].value, GSM_A_PDU_TYPE_BSSMAP, BE_TALKER_ID, NULL);
5702 /* Layer 3 Information 3.2.2.24 BSS-MSC M 3-n */
5703 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_L3_INFO].value, GSM_A_PDU_TYPE_BSSMAP, BE_L3_INFO, NULL);
5705 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5708 * 3.2.1.59a UPLINK APPLICATION DATA
5711 bssmap_uplink_app_data(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5713 guint32 curr_offset;
5717 curr_offset = offset;
5720 /* Cell Identifier 3.2.2.17 BSS-MSC M 3-10 */
5721 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, GSM_A_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL);
5722 /* Layer 3 Information 3.2.2.24 BSS-MSC M 3-n */
5723 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_L3_INFO].value, GSM_A_PDU_TYPE_BSSMAP, BE_L3_INFO, NULL);
5724 /* Application Data information 3.2.2.100 BSS-MSC M 3 */
5725 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_APP_DATA_INF].value, GSM_A_PDU_TYPE_BSSMAP, BE_APP_DATA_INF, NULL);
5727 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5730 * 3.2.1.60 UPLINK RELEASE INDICATION
5733 bssmap_uplink_rel_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5735 guint32 curr_offset;
5739 curr_offset = offset;
5742 /* Cause 3.2.2.5 BSS-MSC M 3-4 */
5743 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_CAUSE, NULL);
5744 /* Talker Priority 3.2.2.89 BSS-MSC O (note 1) 2 */
5745 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, GSM_A_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL);
5748 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5751 * 3.2.1.61 UPLINK REJECT COMMAND
5754 bssmap_uplink_rej_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5756 guint32 curr_offset;
5760 curr_offset = offset;
5763 /* Cause 3.2.2.5 MSC-BSS M 3-4 */
5764 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_CAUSE, NULL);
5765 /* Current Talker Priority 3.2.2.89 MSC-BSS O (note 1) 2 */
5766 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, GSM_A_PDU_TYPE_BSSMAP, BE_TALKER_PRI, "Current");
5767 /* Rejected Talker Priority 3.2.2.89 MSC-BSS O (note 1) 2 */
5768 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, GSM_A_PDU_TYPE_BSSMAP, BE_TALKER_PRI, "Rejected");
5769 /* Talker Identity 3.2.2.91 MSC-BSS O 3-20 */
5770 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_TALKER_ID].value, GSM_A_PDU_TYPE_BSSMAP, BE_TALKER_ID, NULL);
5772 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5775 * 3.2.1.62 UPLINK RELEASE COMMAND
5778 bssmap_uplink_rel_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5780 guint32 curr_offset;
5784 curr_offset = offset;
5787 /* Cause 3.2.2.5 MSC-BSS M 3-4 */
5788 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_CAUSE, NULL);
5790 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5794 * 3.2.1.63 UPLINK SEIZED COMMAND
5797 bssmap_uplink_seized_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5799 guint32 curr_offset;
5803 curr_offset = offset;
5806 /* Cause 3.2.2.5 MSC-BSS M 3-4 */
5807 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_CAUSE, NULL);
5808 /* Talker Priority 3.2.2.89 MSC-BSS O (note 1) 2 */
5809 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, GSM_A_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL);
5810 /* Emergency set indication 3.2.2.90 MSC-BSS O (note 1) 1 */
5811 ELEM_OPT_T(gsm_bssmap_elem_strings[BE_EMRG_SET_IND].value, GSM_A_PDU_TYPE_BSSMAP, BE_EMRG_SET_IND, NULL);
5812 /* Talker Identity 3.2.2.91 MSC-BSS O 3-20 */
5813 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_TALKER_ID].value, GSM_A_PDU_TYPE_BSSMAP, BE_TALKER_ID, NULL);
5815 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5821 bssmap_sus(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5823 guint32 curr_offset;
5827 curr_offset = offset;
5830 /* DLCI 3.2.2.25 BSS-MSC M 2 */
5831 ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_DLCI].value, GSM_A_PDU_TYPE_BSSMAP, BE_DLCI, NULL);
5833 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5839 bssmap_res(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5841 guint32 curr_offset;
5845 curr_offset = offset;
5848 /* DLCI 3.2.2.25 BSS-MSC M 2 */
5849 ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_DLCI].value, GSM_A_PDU_TYPE_BSSMAP, BE_DLCI, NULL);
5851 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5854 * [2] 3.2.1.66 CHANGE CIRCUIT
5857 bssmap_change_cct(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5859 guint32 curr_offset;
5863 curr_offset = offset;
5866 /* Cause 3.2.2.5 MSC-BSS M 3-4 */
5867 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_CAUSE, NULL);
5869 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5873 * [2] 3.2.1.67 CHANGE CIRCUIT ACKNOWLEDGE
5876 bssmap_change_cct_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5878 guint32 curr_offset;
5882 curr_offset = offset;
5885 /* Circuit identity 3.2.2.2 BSS-MSC M 3 */
5886 ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, GSM_A_PDU_TYPE_BSSMAP, BE_CIC, NULL);
5888 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5892 * [2] 3.2.1.68 Common ID
5895 bssmap_common_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5897 guint32 curr_offset;
5901 curr_offset = offset;
5904 /* IMSI 3.2.2.6 MSC-BSS M 3-10 */
5905 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_IMSI].value, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL);
5906 /* SNA Access Information 3.2.2.82 MSC-BSC O (note) 2+n */
5907 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SNA_ACC_INF].value, GSM_A_PDU_TYPE_BSSMAP, BE_SNA_ACC_INF, NULL);
5909 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5913 * [2] 3.2.1.69 LSA INFORMATION
5916 bssmap_lsa_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5918 guint32 curr_offset;
5922 curr_offset = offset;
5925 /* LSA Information 3.2.2.23 MSC-BSS M 3+4n */
5926 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_LSA_INFO].value, GSM_A_PDU_TYPE_BSSMAP, BE_LSA_INFO, NULL);
5928 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5932 * [2] 3.2.1.70 (void)
5935 bssmap_conn_oriented(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5937 guint32 curr_offset;
5941 curr_offset = offset;
5944 ELEM_MAND_TLV_E(gsm_bssmap_elem_strings[BE_APDU].value, GSM_A_PDU_TYPE_BSSMAP, BE_APDU, NULL);
5946 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SEG].value, GSM_A_PDU_TYPE_BSSMAP, BE_SEG, NULL);
5948 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5952 * 3.2.1.71 PERFORM LOCATION REQUEST
5955 bssmap_perf_loc_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5957 guint32 curr_offset;
5961 curr_offset = offset;
5964 /* Location Type 3.2.2.63 M 3-n */
5965 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_LOC_TYPE].value, GSM_A_PDU_TYPE_BSSMAP, BE_LOC_TYPE , NULL);
5966 /* Cell Identifier 3.2.2.17 O 5-10 */
5967 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, GSM_A_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL);
5968 /* Classmark Information Type 3 3.2.2.20 O 3-14 */
5969 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CM_INFO_3].value, GSM_A_PDU_TYPE_BSSMAP, BE_CM_INFO_3, NULL);
5970 /* LCS Client Type 3.2.2.67 C (note 3) 3-n */
5971 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LCS_CLIENT].value, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CLIENT_TYPE, NULL);
5972 /* Chosen Channel 3.2.2.33 O 2 */
5973 ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_CHAN].value, GSM_A_PDU_TYPE_BSSMAP, BE_CHOSEN_CHAN, NULL);
5974 /* LCS Priority 3.2.2.62 O 3-n */
5975 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LCS_PRIO].value, GSM_A_PDU_TYPE_BSSMAP, BE_LCS_PRIO, NULL);
5976 /* LCS QoS 3.2.2.60 C (note 1) 3-n */
5977 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LCS_QOS].value, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCSQOS, NULL);
5978 /* GPS Assistance Data 3.2.2.70 C (note 2) 3-n */
5979 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_GPS_ASSIST_DATA].value, GSM_A_PDU_TYPE_BSSMAP, BE_GPS_ASSIST_DATA, NULL);
5980 /* APDU 3.2.2.68 O 3-n */
5981 ELEM_OPT_TLV_E(gsm_bssmap_elem_strings[BE_APDU].value, GSM_A_PDU_TYPE_BSSMAP, BE_APDU, NULL);
5982 /* IMSI 3.2.2.6 O (note 4) 5-10 */
5983 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_IMSI].value, GSM_A_PDU_TYPE_BSSMAP, BE_IMSI, NULL);
5984 /* IMEI 3.2.2.86 O (note 4) 10 (use same decode as IMSI) */
5985 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_IMEI].value, GSM_A_PDU_TYPE_BSSMAP, BE_IMEI, NULL);
5986 /* GANSS Location Type 3.2.2.97 C 3 */
5987 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_GANSS_LOC_TYP].value, GSM_A_PDU_TYPE_BSSMAP, BE_GANSS_LOC_TYP, NULL);
5988 /* GANSS Assistance Data 3.2.2.95 C (note 5) 3-n */
5989 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_GANSS_ASS_DTA].value, GSM_A_PDU_TYPE_BSSMAP, BE_GANSS_ASS_DTA, NULL);
5991 EXTRANEOUS_DATA_CHECK(curr_len, 0);
5994 * 3.2.1.72 PERFORM LOCATION RESPONSE
5997 bssmap_perf_loc_res(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
5999 guint32 curr_offset;
6003 curr_offset = offset;
6006 /* Location Estimate 3.2.2.64 C (note 1) 3-n */
6007 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LOC_EST].value, GSM_A_PDU_TYPE_BSSMAP, BE_LOC_EST, NULL);
6008 /* Positioning Data 3.2.2.65 O 3-n */
6009 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_POS_DATA].value, GSM_A_PDU_TYPE_BSSMAP, BE_POS_DATA, NULL);
6010 /* Deciphering Keys 3.2.2.71 C (note 2) 3-n */
6011 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_DECIPH_KEYS].value, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_DECIPH_KEYS, NULL);
6012 /* LCS Cause 3.2.2.66 C (note 3) 3-n */
6013 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LCS_CAUSE].value, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CAUSE, NULL);
6014 /* Velocity Estimate 3.2.2.87 O 3-n */
6015 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_VEL_EST].value, GSM_A_PDU_TYPE_BSSMAP, BE_VEL_EST, NULL);
6016 /* GANSS Positioning Data 3.2.2.96 O 3-n */
6017 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_GANSS_POS_DTA].value, GSM_A_PDU_TYPE_BSSMAP, BE_GANSS_POS_DTA, NULL);
6019 EXTRANEOUS_DATA_CHECK(curr_len, 0);
6022 * 3.2.1.73 PERFORM LOCATION ABORT
6025 bssmap_perf_loc_abort(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
6027 guint32 curr_offset;
6031 curr_offset = offset;
6034 /* LCS Cause 3.2.2.66 M 3-n */
6035 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LCS_CAUSE].value, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CAUSE, NULL);
6037 EXTRANEOUS_DATA_CHECK(curr_len, 0);
6041 * 3.2.1.74 CONNECTIONLESS INFORMATION
6043 Network Element Identity (source) 3.2.2.69 Both M 3-n
6044 Network Element Identity (target) 3.2.2.69 Both M 3-n
6045 APDU 3.2.2.68 Both M 3-n
6046 Segmentation 3.2,2,74 Both C (note 1) 5
6047 Return Error Request 3.2.2.72 Both C (note 2) 3-n
6048 Return Error Cause 3.2.2.73 Both C (note 3) 3-n
6052 * 3.2.1.75 CHANNEL MODIFY REQUEST
6056 bssmap_chan_mod_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
6058 guint32 curr_offset;
6062 curr_offset = offset;
6065 /* Cause 3.2.2.5 BSS-MSC M 3-4 */
6066 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_CAUSE, NULL);
6068 EXTRANEOUS_DATA_CHECK(curr_len, 0);
6071 * 3.2.1.76 EMERGENCY RESET INDICATION
6074 Cell Identifier 3.2.2.17 BSS-MSC O 3-10
6075 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, GSM_A_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL);
6076 Layer 3 Information 3.2.2.24 BSS-MSC O (note 2) 3-n
6077 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_L3_INFO].value, GSM_A_PDU_TYPE_BSSMAP, BE_L3_INFO, NULL);
6078 Mobile Identity 3.2.2.41 BSS-MSC O (note 1) 3-n
6081 * 3.2.1.77 EMERGENCY RESET COMMAND
6085 * 3.2.1.78 VGCS ADDITIONAL INFORMATION
6088 bssmap_vgcs_add_inf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
6090 guint32 curr_offset;
6094 curr_offset = offset;
6097 /* Talker Identity 3.2.2.91 MSC-BSS M 3-20 */
6098 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_TALKER_ID].value, GSM_A_PDU_TYPE_BSSMAP, BE_TALKER_ID, NULL);
6100 EXTRANEOUS_DATA_CHECK(curr_len, 0);
6103 * 3.2.1.79 VGCS/VBS AREA CELL INFO
6105 Cell Identifier List Segment 3.2.2.27a MSC-BSS M 4-?
6106 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CELL_ID_LIST_SEG].value, GSM_A_PDU_TYPE_BSSMAP, BE_CELL_ID_LIST_SEG, NULL);
6107 Assignment Requirement 3.2.2.52 MSC-BSS O 2
6109 * 3.2.1.80 VGCS/VBS ASSIGNMENT STATUS
6111 Cell Identifier List Segment for established cells 3.2.2.27b BSS-MSC O (note 1) 3-?
6112 Cell Identifier List Segment for cells to be established 3.2.2.27c BSS-MSC O (note 1) 3-?
6113 Cell Identifier List Segment for released cells - no user present 3.2.2.27e BSS-MSC O (note 1) 3-?
6114 Cell Identifier List Segment for not established cells - no establishment possible 3.2.2.27f BSS-MSC O (note 1) 3-?
6115 VGCS/VBS Cell Status 3.2.2.94 BSS-MSC O (note 2) 3
6121 bssmap_vgcs_sms(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
6123 guint32 curr_offset;
6127 curr_offset = offset;
6130 /* SMS to VGCS 3.2.2.92 MSC-BSS M 2-250 */
6131 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_SMS_TO_VGCS].value, GSM_A_PDU_TYPE_BSSMAP, BE_SMS_TO_VGCS, NULL);
6133 EXTRANEOUS_DATA_CHECK(curr_len, 0);
6136 * 3.2.1.82 NOTIFICATION DATA
6139 bssmap_notification_data(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
6141 guint32 curr_offset;
6145 curr_offset = offset;
6148 /* Application Data 3.2.2.98 MSC-BSS M 11 */
6149 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_APP_DATA_INF].value, GSM_A_PDU_TYPE_BSSMAP, BE_APP_DATA_INF, NULL);
6150 /* Data Identity 3.2.2.99 MSC-BSS M 3 */
6151 /* MSISDN 3.2.2.101 MSC-BSS O 2-12 */
6153 EXTRANEOUS_DATA_CHECK(curr_len, 0);
6156 * 3.2.1.83 INTERNAL HANDOVER REQUIRED
6159 bssmap_int_ho_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
6161 guint32 curr_offset;
6165 curr_offset = offset;
6168 /* Cause 3.2.2.5 BSS-MSC M 3-4 */
6169 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_CAUSE, NULL);
6170 /* Cell Identifier 3.2.2.17 BSS-MSC M 4-10 */
6171 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, GSM_A_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL);
6172 /* AoIP Transport Layer Address (BSS) 3.2.2.nn BSS-MSC C (Note 1) 10-22 */
6173 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_AOIP_TRANS_LAY_ADD].value, GSM_A_PDU_TYPE_BSSMAP, BE_AOIP_TRANS_LAY_ADD, NULL);
6174 /* Codec List (BSS Supported) 3.2.2.nn BSS-MSC M 3-n */
6175 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC_LST].value, GSM_A_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC_LST, "(BSS Supported)");
6177 EXTRANEOUS_DATA_CHECK(curr_len, 0);
6180 * 3.2.1.84 INTERNAL HANDOVER REQUIRED REJECT
6183 bssmap_int_ho_req_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
6185 guint32 curr_offset;
6189 curr_offset = offset;
6192 /* Cause 3.2.2.5 MSC-BSS M 3-4 */
6193 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_CAUSE, NULL);
6194 /* Codec List (MSC Preferred) 3.2.2.nn MSC-BSS O 3-n */
6195 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC_LST].value, GSM_A_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC_LST, "(BSS Supported)");
6197 EXTRANEOUS_DATA_CHECK(curr_len, 0);
6201 * 3.2.1.85 INTERNAL HANDOVER COMMAND
6204 bssmap_int_ho_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
6206 guint32 curr_offset;
6210 curr_offset = offset;
6213 /* Speech Codec (MSC Chosen) 3.2.2.nn MSC-BSS M (note 1) 3-n */
6214 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC].value, GSM_A_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC, "(Chosen)");
6215 /* Circuit Identity Code 3.2.2.2 MSC-BSS C (note 2) 3 */
6216 ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, GSM_A_PDU_TYPE_BSSMAP, BE_CIC, NULL);
6217 /* AoIP Transport Layer Address (MGW) 3.2.2.nn MSC-BSS C (note 2) 10-22 */
6218 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_AOIP_TRANS_LAY_ADD].value, GSM_A_PDU_TYPE_BSSMAP, BE_AOIP_TRANS_LAY_ADD, NULL);
6220 EXTRANEOUS_DATA_CHECK(curr_len, 0);
6223 * 3.2.1.86 INTERNAL HANDOVER ENQUIRY
6227 bssmap_int_ho_enq(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
6229 guint32 curr_offset;
6233 curr_offset = offset;
6236 /* Speech Codec (MSC Chosen) 3.2.2.104 MSC-BSS M 3-n */
6237 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC].value, GSM_A_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC, "(Chosen)");
6239 EXTRANEOUS_DATA_CHECK(curr_len, 0);
6242 * 3.2.1.87 RESET IP RESOURCE
6245 bssmap_reset_ip_res(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
6247 guint32 curr_offset;
6251 curr_offset = offset;
6254 /* Cause 3.2.2.5 Both M 3-4 */
6255 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, GSM_A_PDU_TYPE_BSSMAP, BE_CAUSE, NULL);
6256 /* Call Identifier List 3.2.2.106 Both M 6-n */
6257 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CALL_ID_LST].value, GSM_A_PDU_TYPE_BSSMAP, BE_CALL_ID_LST, NULL);
6259 EXTRANEOUS_DATA_CHECK(curr_len, 0);
6262 * 3.2.1.88 RESET IP RESOURCE ACKNOWLEDGE
6265 bssmap_reset_ip_res_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
6267 guint32 curr_offset;
6271 curr_offset = offset;
6274 /* Call Identifier List 3.2.2.106 Both M 6-n */
6275 ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CALL_ID_LST].value, GSM_A_PDU_TYPE_BSSMAP, BE_CALL_ID_LST, NULL);
6277 EXTRANEOUS_DATA_CHECK(curr_len, 0);
6280 #define NUM_GSM_BSSMAP_MSG (sizeof(gsm_a_bssmap_msg_strings)/sizeof(value_string))
6281 static gint ett_gsm_bssmap_msg[NUM_GSM_BSSMAP_MSG];
6283 static void (*bssmap_msg_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len) = {
6284 bssmap_ass_req, /* Assignment Request */
6285 bssmap_ass_complete, /* Assignment Complete */
6286 bssmap_ass_failure, /* Assignment Failure */
6287 bssmap_vgcs_vbs_setup, /* VGCS/VBS Setup */
6288 bssmap_vgcs_vbs_setup_ack, /* VGCS/VBS Setup Ack */
6289 bssmap_vgcs_vbs_setup_refuse, /* VGCS/VBS Setup Refuse */
6290 bssmap_vgcs_vbs_ass_req, /* VGCS/VBS Assignment Request */
6291 bssmap_chan_mod_req, /* 0x08 Channel Modify request */
6292 NULL, /* Unallocated */
6293 NULL, /* Unallocated */
6294 NULL, /* Unallocated */
6295 NULL, /* Unallocated */
6296 NULL, /* Unallocated */
6297 NULL, /* Unallocated */
6298 NULL, /* Unallocated */
6299 bssmap_ho_req, /* 0x10 Handover Request */
6300 bssmap_ho_reqd, /* Handover Required */
6301 bssmap_ho_req_ack, /* Handover Request Acknowledge */
6302 bssmap_ho_cmd, /* Handover Command */
6303 bssmap_ho_complete, /* Handover Complete */
6304 bssmap_ho_succ , /* Handover Succeeded */
6305 bssmap_ho_failure, /* Handover Failure */
6306 bssmap_ho_performed, /* Handover Performed */
6307 bssmap_ho_cand_enq, /* Handover Candidate Enquire */
6308 bssmap_ho_cand_resp, /* Handover Candidate Response */
6309 bssmap_ho_reqd_rej, /* Handover Required Reject */
6310 bssmap_ho_det, /* 0x1b Handover Detect */
6311 bssmap_vgcs_vbs_ass_res, /* 0x1c VGCS/VBS Assignment Result */
6312 bssmap_vgcs_vbs_ass_fail, /* 0x1d VGCS/VBS Assignment Failure */
6313 NULL, /* 0x1e No dsta VGCS/VBS Queuing Indication */
6314 bssmap_uplink_req, /* 0x1f Uplink Request */
6316 bssmap_clear_cmd, /* 0x20 Clear Command */
6317 NULL /* no associated data */, /* Clear Complete */
6318 bssmap_clear_req, /* Clear Request */
6319 NULL, /* Reserved */
6320 NULL, /* Reserved */
6321 bssmap_sapi_rej, /* SAPI 'n' Reject */
6322 bssmap_confusion, /* Confusion */
6323 bssmap_uplink_req_ack, /* Uplink Request Acknowledge */
6324 bssmap_sus, /* Suspend */
6325 bssmap_res, /* Resume */
6326 bssmap_conn_oriented, /* Connection Oriented Information */
6327 bssmap_perf_loc_req, /* Perform Location Request */
6328 bssmap_lsa_info, /* LSA Information */
6329 bssmap_perf_loc_res, /* Perform Location Response */
6330 bssmap_perf_loc_abort, /* Perform Location Abort */
6331 bssmap_common_id, /* Common Id */
6332 bssmap_reset, /* Reset */
6333 NULL /* no associated data */, /* Reset Acknowledge */
6334 bssmap_overload, /* Overload */
6335 NULL, /* Reserved */
6336 bssmap_reset_cct, /* Reset Circuit */
6337 bssmap_reset_cct_ack, /* Reset Circuit Acknowledge */
6338 bssmap_msc_invoke_trace, /* MSC Invoke Trace */
6339 bssmap_bss_invoke_trace, /* 0x37 BSS Invoke Trace */
6341 NULL, /* 0x38 unallocated */
6342 NULL, /* 0x39 unallocated */
6344 NULL, /* 0x3a Connectionless Information */
6345 NULL, /* 0x3b VGCS/VBS ASSIGNMENT STATUS */
6346 NULL, /* 0x3c VGCS/VBS AREA CELL INFO */
6347 bssmap_reset_ip_res, /* 0x3d 3.2.1.87 RESET IP RESOURCE */
6348 bssmap_reset_ip_res_ack, /* 0x3e 3.2.1.88 RESET IP RESOURCE ACKNOWLEDGE */
6349 NULL, /* 0x3f VGCS/VBS AREA CELL INFO */
6350 bssmap_block, /* Block */
6351 bssmap_block_ack, /* Blocking Acknowledge */
6352 bssmap_unblock, /* Unblock */
6353 bssmap_unblock_ack, /* Unblocking Acknowledge */
6354 bssmap_cct_group_block, /* Circuit Group Block */
6355 bssmap_cct_group_block_ack, /* Circuit Group Blocking Acknowledge */
6356 bssmap_cct_group_unblock, /* Circuit Group Unblock */
6357 bssmap_cct_group_unblock_ack, /* Circuit Group Unblocking Acknowledge */
6358 bssmap_unequipped_cct, /* Unequipped Circuit */
6359 bssmap_uplink_req_conf, /* Uplink Request Confirmation */
6360 bssmap_uplink_rel_ind, /* Uplink Release Indication */
6361 bssmap_uplink_rej_cmd, /* Uplink Reject Command */
6362 bssmap_uplink_rel_cmd, /* Uplink Release Command */
6363 bssmap_uplink_seized_cmd, /* Uplink Seized Command */
6364 bssmap_change_cct, /* Change Circuit */
6365 bssmap_change_cct_ack, /* Change Circuit Acknowledge */
6366 bssmap_res_req, /* Resource Request */
6367 bssmap_res_ind, /* Resource Indication */
6368 bssmap_paging, /* Paging */
6369 bssmap_ciph_mode_cmd, /* Cipher Mode Command */
6370 bssmap_cm_upd, /* Classmark Update */
6371 bssmap_ciph_mode_complete, /* Cipher Mode Complete */
6372 NULL /* no associated data */, /* Queuing Indication */
6373 bssmap_cl3_info, /* Complete Layer 3 Information */
6374 bssmap_cls_m_req /* no associated data */, /* Classmark Request */
6375 bssmap_ciph_mode_rej, /* Cipher Mode Reject */
6376 bssmap_load_ind, /* 0x5a Load Indication */
6378 NULL, /* 0x5b unallocated */
6379 NULL, /* 0x5c unallocated */
6380 NULL, /* 0x5d unallocated */
6381 NULL, /* 0x5e unallocated */
6382 NULL, /* 0x5f unallocated */
6384 bssmap_vgcs_add_inf, /* 0x60 VGCS Additional Information */
6385 bssmap_vgcs_sms, /* 0x61 VGCS SMS */
6386 bssmap_notification_data, /* 0x62 Notification Data*/
6387 bssmap_uplink_app_data, /* 0x63 Uplink Application Data */
6389 NULL, /* 0x64 unallocated */
6390 NULL, /* 0x65 unallocated */
6391 NULL, /* 0x66 unallocated */
6392 NULL, /* 0x67 unallocated */
6393 NULL, /* 0x68 unallocated */
6394 NULL, /* 0x69 unallocated */
6395 NULL, /* 0x6a unallocated */
6396 NULL, /* 0x6b unallocated */
6397 NULL, /* 0x6c unallocated */
6398 NULL, /* 0x6d unallocated */
6399 NULL, /* 0x6e unallocated */
6400 NULL, /* 0x6f unallocated */
6402 bssmap_int_ho_req, /* 0x70 Internal Handover Required */
6403 bssmap_int_ho_req_rej, /* 0x71 Internal Handover Required Reject */
6404 bssmap_int_ho_cmd, /* 0x72 Internal Handover Command */
6405 bssmap_int_ho_enq, /* 0x73 Internal Handover Enquiry */
6411 dissect_bssmap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
6413 static gsm_a_tap_rec_t tap_rec[4];
6414 static gsm_a_tap_rec_t *tap_p;
6415 static guint tap_current=0;
6417 guint32 offset, saved_offset;
6420 proto_item *bssmap_item = NULL;
6421 proto_tree *bssmap_tree = NULL;
6423 sccp_msg_info_t* sccp_msg_p;
6425 sccp_msg_p = pinfo->sccp_info;
6427 if (!(sccp_msg_p && sccp_msg_p->data.co.assoc)) {
6431 col_append_str(pinfo->cinfo, COL_INFO, "(BSSMAP) ");
6434 * set tap record pointer
6437 if (tap_current >= 4)
6441 tap_p = &tap_rec[tap_current];
6445 saved_offset = offset;
6450 len = tvb_length(tvb);
6453 * add BSSMAP message name
6455 oct = tvb_get_guint8(tvb, offset++);
6457 str = match_strval_idx_ext((guint32) oct, &gsm_a_bssmap_msg_strings_ext, &idx);
6459 if (sccp_msg_p && !sccp_msg_p->data.co.label) {
6460 sccp_msg_p->data.co.label = se_strdup(val_to_str_ext((guint32) oct, &gsm_a_bssmap_msg_strings_ext, "BSSMAP (0x%02x)"));
6464 * create the protocol tree
6469 proto_tree_add_protocol_format(tree, proto_a_bssmap, tvb, 0, len,
6470 "GSM A-I/F BSSMAP - Unknown BSSMAP Message Type (0x%02x)",
6473 bssmap_tree = proto_item_add_subtree(bssmap_item, ett_bssmap_msg);
6478 proto_tree_add_protocol_format(tree, proto_a_bssmap, tvb, 0, -1,
6479 "GSM A-I/F BSSMAP - %s",
6482 bssmap_tree = proto_item_add_subtree(bssmap_item, ett_gsm_bssmap_msg[idx]);
6484 col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", str);
6487 * add BSSMAP message name
6489 proto_tree_add_uint_format(bssmap_tree, hf_gsm_a_bssmap_msg_type,
6490 tvb, saved_offset, 1, oct, "Message Type %s",str);
6493 tap_p->pdu_type = GSM_A_PDU_TYPE_BSSMAP;
6494 tap_p->message_type = oct;
6496 tap_queue_packet(gsm_a_tap, pinfo, tap_p);
6498 if (str == NULL) return;
6500 if ((len - offset) <= 0) return;
6505 if (idx < 0 || bssmap_msg_fcn[idx] == NULL){
6506 proto_tree_add_text(bssmap_tree,
6507 tvb, offset, len - offset,
6508 "Message Elements");
6510 if (sccp_msg_p && ((sccp_msg_p->data.co.assoc->app_info & 0xCD00) == 0xCD00)){
6511 cell_discriminator = sccp_msg_p->data.co.assoc->app_info & 0xFF;
6513 cell_discriminator = 0xFF;
6515 (*bssmap_msg_fcn[idx])(tvb, bssmap_tree, pinfo, offset, len - offset);
6517 sccp_msg_p->data.co.assoc->app_info = cell_discriminator | 0xCDF0;
6524 /* Register the protocol with Wireshark */
6526 proto_register_gsm_a_bssmap(void)
6531 /* Setup list of header fields */
6533 static hf_register_info hf[] =
6535 { &hf_gsm_a_bssmap_msg_type,
6536 { "BSSMAP Message Type", "gsm_a.bssmap_msgtype",
6537 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &gsm_a_bssmap_msg_strings_ext, 0x0,
6540 { &hf_gsm_a_bssmap_elem_id,
6541 { "Element ID", "gsm_a_bssmap.elem_id",
6542 FT_UINT8, BASE_DEC, NULL, 0,
6545 { &hf_gsm_a_bssmap_field_elem_id,
6546 { "Field Element ID", "gsm_a_bssmap.field_elem_id",
6547 FT_UINT8, BASE_HEX, VALS(bssmap_field_element_ids), 0,
6551 { "Length", "gsm_a.len",
6552 FT_UINT16, BASE_DEC, NULL, 0,
6555 { &hf_gsm_a_bssmap_cell_ci,
6556 { "Cell CI", "gsm_a.cell_ci",
6557 FT_UINT16, BASE_HEX_DEC, 0, 0x0,
6560 { &hf_gsm_a_bssmap_cell_lac,
6561 { "Cell LAC", "gsm_a.cell_lac",
6562 FT_UINT16, BASE_HEX_DEC, 0, 0x0,
6565 { &hf_gsm_a_bssmap_sac,
6566 { "SAC", "gsm_a.sac",
6567 FT_UINT16, BASE_HEX, 0, 0x0,
6570 { &hf_gsm_a_bssmap_dlci_cc,
6571 { "Control Channel", "bssap.dlci.cc",
6572 FT_UINT8, BASE_HEX, VALS(bssap_cc_values), 0xc0,
6575 { &hf_gsm_a_bssmap_dlci_spare,
6576 { "Spare", "bssap.dlci.spare",
6577 FT_UINT8, BASE_HEX, NULL, 0x38,
6580 { &hf_gsm_a_bssmap_dlci_sapi,
6581 { "SAPI", "bssap.dlci.sapi",
6582 FT_UINT8, BASE_HEX, VALS(bssap_sapi_values), 0x07,
6585 { &hf_gsm_a_bssmap_cause,
6586 { "BSSMAP Cause", "gsm_a_bssmap.cause",
6587 FT_UINT8, BASE_HEX, 0, 0x0,
6590 { &hf_gsm_a_bssmap_be_cell_id_disc,
6591 { "Cell identification discriminator","gsm_a.be.cell_id_disc",
6592 FT_UINT8,BASE_DEC|BASE_EXT_STRING, &gsm_a_be_cell_id_disc_vals_ext, 0x0f,
6595 { &hf_gsm_a_bssmap_pci,
6596 { "Preemption Capability indicator(PCI)","ggsm_a_bssmap.pci",
6597 FT_BOOLEAN,8, TFS(&bssmap_pci_value), 0x40,
6600 { &hf_gsm_a_bssmap_qa,
6601 { "Queuing Allowed Indicator(QA)","ggsm_a_bssmap.qa",
6602 FT_BOOLEAN,8, TFS(&tfs_allowed_not_allowed), 0x02,
6605 { &hf_gsm_a_bssmap_pvi,
6606 { "Preemption Vulnerability Indicator(PVI)","ggsm_a_bssmap.pvi",
6607 FT_BOOLEAN,8, TFS(&bssmap_pvi_value), 0x01,
6610 { &hf_gsm_a_bssmap_lsa_only,
6611 { "LSA only","ggsm_a_bssmap.lsa_only",
6612 FT_BOOLEAN,8, TFS(&bssmap_lsa_only_value), 0x01,
6615 { &hf_gsm_a_bssmap_act,
6616 { "Active mode support","gsm_a_bssmap.act",
6617 FT_BOOLEAN,8, NULL, 0x20,
6620 { &hf_gsm_a_bssmap_pref,
6621 { "Preferential access","gsm_a_bssmap.pref",
6622 FT_BOOLEAN,8, NULL, 0x10,
6625 { &hf_gsm_a_bssmap_lsa_inf_prio,
6626 { "Priority","gsm_a_bssmap.lsa_inf_prio",
6627 FT_UINT8,BASE_DEC, NULL, 0x0f,
6630 { &hf_gsm_a_bssmap_seq_len,
6631 { "Sequence Length","gsm_a_bssmap.seq_len",
6632 FT_UINT8,BASE_DEC, NULL, 0xf0,
6635 { &hf_gsm_a_bssmap_seq_no,
6636 { "Sequence Number","gsm_a_bssmap.seq_no",
6637 FT_UINT8,BASE_DEC, NULL, 0xf,
6640 { &hf_gsm_a_bssap_cell_id_list_seg_cell_id_disc,
6641 { "Cell identification discriminator","gsm_a_bssmap.cell_id_list_seg_cell_id_disc",
6642 FT_UINT8,BASE_DEC, VALS(gsm_a_bssap_cell_id_list_seg_cell_id_disc_vals), 0xf,
6645 { &hf_gsm_a_bssap_res_ind_method,
6646 { "Resource indication method","gsm_a_bssmap.res_ind_method",
6647 FT_UINT8,BASE_DEC, VALS(gsm_a_bssap_resource_indication_vals), 0xf,
6650 { &hf_gsm_a_bssmap_ch_mode,
6651 { "Channel mode","gsm_a_bssmap.cch_mode",
6652 FT_UINT8,BASE_DEC, VALS(gsm_a_bssmap_ch_mode_vals), 0xf0,
6655 { &hf_gsm_a_bssmap_cur_ch_mode,
6656 { "Channel Mode", "fe_cur_chan_type2.chan_mode",
6657 FT_UINT8, BASE_HEX, VALS(chan_mode_vals), 0xf0,
6660 { &hf_gsm_a_bssmap_channel,
6661 { "Channel","gsm_a_bssmap.channel",
6662 FT_UINT8,BASE_DEC, VALS(gsm_a_bssmap_channel_vals), 0x0f,
6665 { &hf_gsm_a_bssmap_trace_trigger_id,
6666 { "Priority Indication","gsm_a_bssmap.trace_trigger_id",
6667 FT_STRING, BASE_NONE, NULL, 0x0,
6670 { &hf_gsm_a_bssmap_trace_priority_indication,
6671 { "Priority Indication","gsm_a_bssmap.trace_priority_indication",
6672 FT_UINT8,BASE_DEC, NULL, 0x00,
6675 { &hf_gsm_a_bssmap_trace_bss_record_type,
6676 { "BSS Record Type","gsm_a_bssmap.bss_record__type",
6677 FT_UINT8,BASE_DEC, VALS(gsm_a_bssmap_trace_bss_record_type_vals), 0x00,
6680 { &hf_gsm_a_bssmap_trace_msc_record_type,
6681 { "MSC Record Type","gsm_a_bssmap.msc_record_type",
6682 FT_UINT8,BASE_DEC, VALS(gsm_a_bssmap_trace_msc_record_type_vals), 0x00,
6685 { &hf_gsm_a_bssmap_trace_invoking_event,
6686 { "Invoking Event","gsm_a_bssmap.trace_invoking_event",
6687 FT_UINT8,BASE_DEC, VALS(gsm_a_bssmap_trace_invoking_event_vals), 0x0,
6690 { &hf_gsm_a_bssmap_trace_reference,
6691 { "Trace Reference","gsm_a_bssmap.trace_id",
6692 FT_UINT16,BASE_DEC, NULL, 0x0,
6695 { &hf_gsm_a_bssmap_trace_omc_id,
6696 { "OMC ID","gsm_a_bssmap.trace_omc_id",
6697 FT_STRING, BASE_NONE, NULL, 0x0,
6700 { &hf_gsm_a_bssmap_be_rnc_id,
6701 { "RNC-ID","gsm_a.be.rnc_id",
6702 FT_UINT16,BASE_DEC, NULL, 0x0,
6705 { &hf_gsm_a_bssmap_apdu_protocol_id,
6706 { "Protocol ID", "gsm_a.apdu_protocol_id",
6707 FT_UINT8, BASE_DEC, VALS(gsm_a_apdu_protocol_id_strings), 0x0,
6708 "APDU embedded protocol id", HFILL }
6710 { &hf_gsm_a_bssmap_periodicity,
6711 { "Periodicity", "gsm_a_bssmap.periodicity",
6712 FT_UINT8, BASE_DEC, NULL, 0x0,
6715 { &hf_gsm_a_bssmap_sm,
6716 { "Subsequent Mode","gsm_a_bssmap.sm",
6717 FT_BOOLEAN,8, NULL, 0x02,
6720 { &hf_gsm_a_bssmap_tarr,
6721 { "Total Accessible Resource Requested","gsm_a_bssmap.tarr",
6722 FT_BOOLEAN,8, NULL, 0x01,
6725 { &hf_gsm_a_bssmap_tot_no_of_fullr_ch,
6726 { "Total number of accessible full rate channels", "gsm_a_bssmap.tot_no_of_fullr_ch",
6727 FT_UINT16, BASE_DEC, NULL, 0x0,
6730 { &hf_gsm_a_bssmap_tot_no_of_hr_ch,
6731 { "Total number of accessible half rate channels", "gsm_a_bssmap.tot_no_of_hr_ch",
6732 FT_UINT16, BASE_DEC, NULL, 0x0,
6735 { &hf_gsm_a_bssmap_lsa_id,
6736 { "Identification of Localised Service Area", "gsm_a_bssmap.lsa_id",
6737 FT_UINT24, BASE_HEX, NULL, 0x0,
6740 { &hf_gsm_a_bssmap_ep,
6741 { "EP", "gsm_a_bssmap.ep",
6742 FT_UINT8, BASE_DEC, NULL, 0x01,
6745 { &hf_gsm_a_bssmap_smi,
6746 { "Subsequent Modification Indication(SMI)", "gsm_a_bssmap.smi",
6747 FT_UINT8, BASE_DEC, VALS(gsm_a_bssmap_smi_vals), 0x0f,
6750 { &hf_gsm_a_bssmap_lcs_pri,
6751 { "Periodicity", "gsm_a_bssmap.lcs_pri",
6752 FT_UINT8, BASE_DEC, VALS(lcs_priority_vals), 0x0,
6755 { &hf_gsm_a_bssmap_num_ms,
6756 { "Number of handover candidates", "gsm_a_bssmap.num_ms",
6757 FT_UINT8, BASE_DEC,NULL, 0x0,
6760 { &hf_gsm_a_bssmap_talker_pri,
6761 { "Priority", "gsm_a_bssmap.talker_pri",
6762 FT_UINT8, BASE_DEC,VALS(gsm_a_bssmap_talker_pri_vals), 0x03,
6765 { &hf_gsm_a_bssmap_paging_cause,
6766 { "Paging Cause", "gsm_a_bssmap.paging_cause",
6767 FT_UINT8, BASE_DEC,VALS(gsm_a_bssmap_paging_cause_vals), 0x06,
6770 { &hf_gsm_a_bssmap_paging_inf_flg,
6771 { "VGCS/VBS flag","ggsm_a_bssmap.paging_inf_flg",
6772 FT_BOOLEAN,8, TFS(&bssmap_paging_inf_flg_value), 0x01,
6773 "If 1, a member of a VGCS/VBS-group", HFILL }
6775 { &hf_gsm_a_bssmap_serv_ho_inf,
6776 { "Service Handover information", "gsm_a_bssmap.serv_ho_inf",
6777 FT_UINT8, BASE_HEX, NULL, 0x07,
6781 { &hf_gsm_a_bssmap_spare_bits,
6782 { "Spare bit(s)", "gsm_a_bssmap.spare_bits",
6783 FT_UINT8, BASE_HEX, NULL, 0x0,
6786 { &hf_gsm_a_bssmap_tpind,
6787 { "Talker priority indicator (TP Ind)","gsm_a_bssmap.tpind",
6788 FT_BOOLEAN,8, TFS(&gsm_bssmap_tpind_vals), 0x01,
6791 { &hf_gsm_a_bssmap_asind_b2,
6792 { "A-interface resource sharing indicator (AS Ind) bit 2","gsm_a_bssmap.asind_b2",
6793 FT_BOOLEAN,8, TFS(&gsm_bssmap_asind_b2_vals), 0x02,
6796 { &hf_gsm_a_bssmap_asind_b3,
6797 { "A-interface resource sharing indicator (AS Ind) bit 3","gsm_a_bssmap.asind_b3",
6798 FT_BOOLEAN,8, TFS(&gsm_bssmap_asind_b3_vals), 0x04,
6801 { &hf_gsm_a_bssmap_bss_res,
6802 { "Group or broadcast call re-establishment by the BSS indicator","gsm_a_bssmap.bss_res",
6803 FT_BOOLEAN,8, TFS(&gsm_bssmap_bss_res_vals), 0x08,
6806 { &hf_gsm_a_bssmap_tcp,
6807 { "Talker Channel Parameter (TCP)","gsm_a_bssmap.tcp",
6808 FT_BOOLEAN,8, TFS(&gsm_bssmap_bss_tcp_vals), 0x10,
6811 { &hf_gsm_a_bssmap_filler_bits,
6812 { "Filler Bits","gsm_a_bssmap.filler_bits",
6813 FT_UINT8, BASE_DEC,NULL, 0x07,
6816 { &hf_gsm_a_bssmap_method,
6817 { "Method","gsm_a_bssmap.method",
6818 FT_UINT8, BASE_DEC,VALS(gsm_a_bssmap_method_vals), 0xc0,
6821 { &hf_gsm_a_bssmap_ganss_id,
6822 { "GANSS Id","gsm_a_bssmap.ganss_id",
6823 FT_UINT8, BASE_DEC,VALS(gsm_a_bssmap_ganss_id_vals), 0x38,
6826 { &hf_gsm_a_bssmap_usage,
6827 { "Usage","gsm_a_bssmap.usage",
6828 FT_UINT8, BASE_DEC,VALS(gsm_a_bssmap_usage_vals), 0x07,
6831 { &hf_gsm_a_bssmap_aoip_trans_ipv4,
6832 { "Transport Layer Address (IPv4)","gsm_a_bssmap.aoip_trans_ipv4",
6833 FT_IPv4,BASE_NONE, NULL, 0x0,
6836 { &hf_gsm_a_bssmap_aoip_trans_ipv6,
6837 { "Transport Layer Address (IPv6)","gsm_a_bssmap.aoip_trans_ipv6",
6838 FT_IPv6,BASE_NONE, NULL, 0x0,
6841 { &hf_gsm_a_bssmap_aoip_trans_port,
6842 { "UDP Port","gsm_a_bssmap.aoip_trans_port",
6843 FT_UINT16, BASE_DEC,NULL, 0x0,
6846 { &hf_gsm_a_bssmap_fi,
6847 { "FI(Full IP)","gsm_a_bssmap.fi",
6848 FT_BOOLEAN,8, TFS(&bssmap_fi_vals), 0x80,
6851 { &hf_gsm_a_bssmap_pi,
6852 { "PI","gsm_a_bssmap.pi",
6853 FT_BOOLEAN,8, TFS(&bssmap_pi_vals), 0x40,
6856 { &hf_gsm_a_bssmap_pt,
6857 { "PT","gsm_a_bssmap.pt",
6858 FT_BOOLEAN,8, TFS(&bssmap_pt_vals), 0x20,
6861 { &hf_gsm_a_bssmap_tf,
6862 { "TF","gsm_a_bssmap.tf",
6863 FT_BOOLEAN,8, TFS(&bssmap_tf_vals), 0x10,
6866 { &hf_gsm_a_bssap_speech_codec,
6867 { "Codec Type","gsm_a_bssmap.speech_codec",
6868 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &bssap_speech_codec_values_ext, 0x0f,
6871 { &hf_gsm_a_bssap_extended_codec,
6872 { "Extended Codec Type","gsm_a_bssmap.extended_codec",
6873 FT_UINT8, BASE_DEC, VALS(bssap_extended_codec_values), 0x0,
6876 { &hf_gsm_a_bssap_extended_codec_r2,
6877 { "Redundancy Level 2","gsm_a_bssmap.r2",
6878 FT_BOOLEAN,8, TFS(&tfs_supported_not_supported), 0x80,
6881 { &hf_gsm_a_bssap_extended_codec_r3,
6882 { "Redundancy Level 3","gsm_a_bssmap.r3",
6883 FT_BOOLEAN,8, TFS(&tfs_supported_not_supported), 0x40,
6886 { &hf_gsm_a_bssmap_fi2,
6887 { "FI(Full IP)","gsm_a_bssmap.fi2",
6888 FT_BOOLEAN,8, TFS(&bssmap_fi2_vals), 0x80,
6891 { &hf_gsm_a_bssmap_pi2,
6892 { "PI","gsm_a_bssmap.pi2",
6893 FT_BOOLEAN,8, TFS(&bssmap_pi2_vals), 0x40,
6896 { &hf_gsm_a_bssmap_pt2,
6897 { "PT","gsm_a_bssmap.pt2",
6898 FT_BOOLEAN,8, TFS(&bssmap_pt2_vals), 0x20,
6901 { &hf_gsm_a_bssmap_tf2,
6902 { "TF","gsm_a_bssmap.tf2",
6903 FT_BOOLEAN,8, TFS(&bssmap_tf2_vals), 0x10,
6906 { &hf_gsm_a_bssmap_call_id,
6907 { "Call Identifier","gsm_a_bssmap.callid",
6908 FT_UINT32, BASE_DEC,NULL, 0x0,
6911 { &hf_gsm_a_bssmap_spare,
6912 { "Spare", "gsm_a_bssmap.spare",
6913 FT_UINT8, BASE_HEX, NULL, 0x0,
6916 { &hf_gsm_a_bssmap_positioning_data_discriminator,
6917 { "Positioning Data Discriminator", "gsm_a_bssmap.posData.discriminator",
6918 FT_UINT8, BASE_HEX, NULL, 0x0,
6921 { &hf_gsm_a_bssmap_positioning_method,
6922 { "Positioning method", "gsm_a_bssmap.posData.method",
6923 FT_UINT8, BASE_HEX, VALS(bssmap_positioning_methods), 0x0,
6926 { &hf_gsm_a_bssmap_positioning_method_usage,
6927 { "Usage", "gsm_a_bssmap.posData.usage",
6928 FT_UINT8, BASE_HEX, VALS(bssmap_positioning_methods_usage), 0x0,
6931 { &hf_gsm_a_bssmap_location_type_location_information,
6932 { "Location Information", "gsm_a_bssmap.locationType.locationInformation",
6933 FT_UINT8, BASE_HEX, VALS(bssmap_location_information_vals), 0x0,
6936 { &hf_gsm_a_bssmap_location_type_positioning_method,
6937 { "Positioning Method", "gsm_a_bssmap.locationType.positioningMethod",
6938 FT_UINT8, BASE_HEX, VALS(bssmap_positioning_method_vals), 0x0,
6941 { &hf_gsm_a_bssmap_chan_type_extension,
6942 { "Extension", "gsm_a_bssmap.chanType.permittedIndicator.extension",
6943 FT_BOOLEAN, 8, TFS(&bssmap_chan_type_extension_value), 0x80,
6946 { &hf_gsm_a_bssmap_cause_extension,
6947 { "Extension", "gsm_a_bssmap.causeType.extension",
6948 FT_BOOLEAN, 8, TFS(&bssmap_cause_extension_value), 0x80,
6951 { &hf_gsm_a_bssmap_emlpp_prio,
6952 { "eMLPP Priority", "gsm_a_bssmap.emlpp_priority",
6953 FT_UINT8, BASE_HEX, VALS(gsm_a_bssmap_call_priority_vals), 0x07,
6957 { &hf_fe_extra_info_prec,
6958 { "Pre-emption Recommendation", "fe_extra_info.prec",
6959 FT_UINT8, BASE_DEC, VALS(fe_extra_info_prec_vals), 0x01,
6962 { &hf_fe_extra_info_lcs,
6963 { "LCS Information", "fe_extra_info.lcs",
6964 FT_UINT8, BASE_DEC, VALS(fe_extra_info_lcs_vals), 0x02,
6967 { &hf_fe_extra_info_ue_prob,
6968 { "UE support of UMTS", "fe_extra_info.ue_prob",
6969 FT_UINT8, BASE_DEC, VALS(fe_extra_info_ue_prob_vals), 0x04,
6972 { &hf_fe_extra_info_spare,
6973 { "Extra Information Spare bits", "fe_extra_info.spare",
6974 FT_UINT8, BASE_HEX, NULL, 0xf8,
6977 { &hf_fe_cur_chan_type2_chan_mode,
6978 { "Channel Mode", "fe_cur_chan_type2.chan_mode",
6979 FT_UINT8, BASE_HEX, VALS(chan_mode_vals), 0x0f,
6982 { &hf_fe_cur_chan_type2_chan_mode_spare,
6983 { "Channel Mode Spare bits", "fe_cur_chan_type2_chan_mode.spare",
6984 FT_UINT8, BASE_HEX, NULL, 0xf0,
6987 { &hf_fe_cur_chan_type2_chan_field,
6988 { "Channel Field", "fe_cur_chan_type2.chan_field",
6989 FT_UINT8, BASE_HEX, VALS(fe_cur_chan_type2_chan_field_vals),0x0f,
6992 { &hf_fe_cur_chan_type2_chan_field_spare,
6993 { "Channel field Spare bits", "fe_cur_chan_type2_chan_field.spare",
6994 FT_UINT8, BASE_HEX, NULL, 0xf0,
6997 { &hf_fe_target_radio_cell_info_rxlev_ncell,
6998 { "RXLEV-NCELL", "fe_target_radio_cell_info.rxlev_ncell",
6999 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &gsm_a_rr_rxlev_vals_ext, 0x3f,
7002 { &hf_fe_target_radio_cell_info_rxlev_ncell_spare,
7003 { "RXLEV-NCELL Spare bits", "fe_target_radio_cell_info.rxlev_ncell_spare",
7004 FT_UINT8, BASE_HEX, NULL, 0xc0,
7007 { &hf_fe_dtm_info_dtm_ind,
7008 { "DTM indicator", "fe_dtm_info.dtm_ind",
7009 FT_UINT8, BASE_HEX, VALS(gsm_a_bssmap_dtm_info_dtm_ind_vals), 0x01,
7012 { &hf_fe_dtm_info_sto_ind,
7013 { "Time Slot Operation indicator", "fe_dtm_info.sto_ind",
7014 FT_UINT8, BASE_HEX, VALS(gsm_a_bssmap_dtm_info_sto_ind_vals), 0x02,
7017 { &hf_fe_dtm_info_egprs_ind,
7018 { "EGPRS indicator", "fe_dtm_info.egprs_ind",
7019 FT_UINT8, BASE_HEX, VALS(gsm_a_bssmap_dtm_info_egprs_ind_vals), 0x04,
7022 { &hf_fe_dtm_info_spare_bits,
7023 { "DTM Info Spare bits", "fe_dtm_info.spare_bits",
7024 FT_UINT8, BASE_HEX, NULL, 0xf8,
7027 { &hf_fe_cell_load_info_cell_capacity_class,
7028 { "Cell capacity class", "fe_cell_load_info.cell_capacity_class",
7029 FT_UINT8, BASE_DEC, NULL, 0,
7032 { &hf_fe_cell_load_info_load_value,
7033 { "Load value", "fe_cell_load_info.load_info",
7034 FT_UINT8, BASE_DEC, NULL, 0,
7037 { &hf_fe_cell_load_info_rt_load_value,
7038 { "Realtime load value", "fe_cell_load_info.rt_load_value",
7039 FT_UINT8, BASE_DEC, NULL, 0,
7042 { &hf_fe_cell_load_info_nrt_load_information_value,
7043 { "Non-Realtime load information value", "fe_cell_load_info.nrt_load_info_value",
7044 FT_UINT8, BASE_HEX, VALS(gsm_a_bssmap_cell_load_nrt_vals), 0,
7047 { &hf_fe_ps_indication,
7048 { "PS Indication", "fe_ps_indication.value",
7049 FT_UINT8, BASE_HEX, NULL, 0,
7052 { &hf_fe_dtm_ho_command_ind_spare,
7053 { "Spare octet", "fe_dtm_ho_command_ind.spare",
7054 FT_UINT8, BASE_HEX, NULL, 0,
7059 /* Setup protocol subtree array */
7060 #define NUM_INDIVIDUAL_ELEMS 5
7061 gint *ett[NUM_INDIVIDUAL_ELEMS + NUM_GSM_BSSMAP_MSG +
7062 NUM_GSM_BSSMAP_ELEM];
7064 ett[0] = &ett_bssmap_msg;
7065 ett[1] = &ett_cell_list;
7067 ett[3] = &ett_codec_lst,
7068 ett[4] = &ett_bss_to_bss_info,
7070 last_offset = NUM_INDIVIDUAL_ELEMS;
7072 for (i=0; i < NUM_GSM_BSSMAP_MSG; i++, last_offset++)
7074 ett_gsm_bssmap_msg[i] = -1;
7075 ett[last_offset] = &ett_gsm_bssmap_msg[i];
7078 for (i=0; i < NUM_GSM_BSSMAP_ELEM; i++, last_offset++)
7080 ett_gsm_bssmap_elem[i] = -1;
7081 ett[last_offset] = &ett_gsm_bssmap_elem[i];
7084 /* Register the protocol name and description */
7087 proto_register_protocol("GSM A-I/F BSSMAP", "GSM BSSMAP", "gsm_a_bssmap");
7089 proto_register_field_array(proto_a_bssmap, hf, array_length(hf));
7091 proto_register_subtree_array(ett, array_length(ett));
7093 register_dissector("gsm_a_bssmap", dissect_bssmap, proto_a_bssmap);
7098 proto_reg_handoff_gsm_a_bssmap(void)
7100 dissector_handle_t bssmap_handle;
7102 bssmap_handle = find_dissector("gsm_a_bssmap");
7103 dissector_add_uint("bssap.pdu_type", GSM_A_PDU_TYPE_BSSMAP, bssmap_handle);
7105 dtap_handle = find_dissector("gsm_a_dtap");
7106 gsm_bsslap_handle = find_dissector("gsm_bsslap");
7107 bssgp_handle = find_dissector ("bssgp");
7108 rrc_handle = find_dissector ("rrc");