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 9.8.0 Release 9
8 * Copyright 2008, Anders Broman <anders.broman [at] ericsson.com
9 * Copyright 2012, Pascal Quantin <pascal.quantin [at] gmail.com
13 * Mobile-services Switching Centre - Base Station System
14 * (MSC - BSS) interface;
15 * Layer 3 specification
16 * (GSM 08.08 version 7.7.0 Release 1998) TS 100 590 v7.7.0
17 * 3GPP TS 48.008 version 8.4.0 Release 8
18 * 3GPP TS 48.008 version 9.8.0 Release 9
22 * Wireshark - Network traffic analyzer
23 * By Gerald Combs <gerald@wireshark.org>
24 * Copyright 1998 Gerald Combs
26 * This program is free software; you can redistribute it and/or
27 * modify it under the terms of the GNU General Public License
28 * as published by the Free Software Foundation; either version 2
29 * of the License, or (at your option) any later version.
31 * This program is distributed in the hope that it will be useful,
32 * but WITHOUT ANY WARRANTY; without even the implied warranty of
33 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
34 * GNU General Public License for more details.
36 * You should have received a copy of the GNU General Public License
37 * along with this program; if not, write to the Free Software
38 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
45 #include <epan/packet.h>
46 #include <epan/to_str.h>
48 #include <epan/wmem/wmem.h>
49 #include <epan/expert.h>
50 #include <epan/asn1.h>
52 #include "packet-bssap.h"
53 #include "packet-bssgp.h"
54 #include "packet-sccp.h"
55 #include "packet-gsm_a_common.h"
56 #include "packet-e212.h"
57 #include "packet-ranap.h"
58 #include "packet-rrc.h"
59 #include "packet-rtcp.h"
60 #include "packet-rtp.h"
61 #include "packet-gsm_map.h"
63 /* PROTOTYPES/FORWARDS */
65 /* TS 48.008 3.2.2.1 Message Type */
66 const value_string gsm_a_bssmap_msg_strings
[] = {
67 { 0x01, "Assignment Request" },
68 { 0x02, "Assignment Complete" },
69 { 0x03, "Assignment Failure" },
70 { 0x04, "VGCS/VBS Setup" },
71 { 0x05, "VGCS/VBS Setup Ack" },
72 { 0x06, "VGCS/VBS Setup Refuse" },
73 { 0x07, "VGCS/VBS Assignment Request" },
74 { 0x08, "Channel Modify request" },
76 { 0x09, "Unallocated" },
77 { 0x0a, "Unallocated" },
78 { 0x0b, "Unallocated" },
79 { 0x0c, "Unallocated" },
80 { 0x0d, "Unallocated" },
81 { 0x0e, "Unallocated" },
82 { 0x0f, "Unallocated" },
84 { 0x10, "Handover Request" },
85 { 0x11, "Handover Required" },
86 { 0x12, "Handover Request Acknowledge" },
87 { 0x13, "Handover Command" },
88 { 0x14, "Handover Complete" },
89 { 0x15, "Handover Succeeded" },
90 { 0x16, "Handover Failure" },
91 { 0x17, "Handover Performed" },
92 { 0x18, "Handover Candidate Enquire" },
93 { 0x19, "Handover Candidate Response" },
94 { 0x1a, "Handover Required Reject" },
95 { 0x1b, "Handover Detect" },
96 { 0x1c, "VGCS/VBS Assignment Result" },
97 { 0x1d, "VGCS/VBS Assignment Failure" },
98 { 0x1e, "VGCS/VBS Queuing Indication" },
99 { 0x1f, "Uplink Request" },
100 { 0x20, "Clear Command" },
101 { 0x21, "Clear Complete" },
102 { 0x22, "Clear Request" },
103 { 0x23, "Reserved" },
104 { 0x24, "Reserved" },
105 { 0x25, "SAPI 'n' Reject" },
106 { 0x26, "Confusion" },
107 { 0x27, "Uplink Request Acknowledge" },
110 /* This value (2a) was allocated in an earlier phase of the protocol and shall not be used in the future. */
111 { 0x2a, "Connection Oriented Information(Obsolete)" },
112 { 0x2b, "Perform Location Request" },
113 { 0x2c, "LSA Information" },
114 { 0x2d, "Perform Location Response" },
115 { 0x2e, "Perform Location Abort" },
116 { 0x2f, "Common Id" },
118 { 0x31, "Reset Acknowledge" },
119 { 0x32, "Overload" },
120 { 0x33, "Reserved" },
121 { 0x34, "Reset Circuit" },
122 { 0x35, "Reset Circuit Acknowledge" },
123 { 0x36, "MSC Invoke Trace" },
124 { 0x37, "BSS Invoke Trace" },
126 { 0x38, "Unallocated" },
127 { 0x39, "Unallocated" },
129 { 0x3a, "Connectionless Information" },
130 { 0x3b, "VGCS/VBS Assignment Status" },
131 { 0x3c, "VGCS/VBS Area Cell Info" },
132 { 0x3d, "Reset IP Resource" },
133 { 0x3e, "Reset IP Resource Acknowledge" },
135 { 0x3f, "Unallocated" },
138 { 0x41, "Blocking Acknowledge" },
140 { 0x43, "Unblocking Acknowledge" },
141 { 0x44, "Circuit Group Block" },
142 { 0x45, "Circuit Group Blocking Acknowledge" },
143 { 0x46, "Circuit Group Unblock" },
144 { 0x47, "Circuit Group Unblocking Acknowledge" },
145 { 0x48, "Unequipped Circuit" },
146 { 0x49, "Uplink Request Confirmation" },
147 { 0x4a, "Uplink Release Indication" },
148 { 0x4b, "Uplink Reject Command" },
149 { 0x4c, "Uplink Release Command" },
150 { 0x4d, "Uplink Seized Command" },
151 { 0x4e, "Change Circuit" },
152 { 0x4f, "Change Circuit Acknowledge" },
153 { 0x50, "Resource Request" },
154 { 0x51, "Resource Indication" },
156 { 0x53, "Cipher Mode Command" },
157 { 0x54, "Classmark Update" },
158 { 0x55, "Cipher Mode Complete" },
159 { 0x56, "Queuing Indication" },
160 { 0x57, "Complete Layer 3 Information" },
161 { 0x58, "Classmark Request" },
162 { 0x59, "Cipher Mode Reject" },
163 { 0x5a, "Load Indication" },
165 { 0x5b, "Unallocated" },
166 { 0x5c, "Unallocated" },
167 { 0x5d, "Unallocated" },
168 { 0x5e, "Unallocated" },
169 { 0x5f, "Unallocated" },
171 { 0x60, "VGCS Additional Information" },
172 { 0x61, "VGCS SMS" },
173 { 0x62, "Notification Data" },
174 { 0x63, "Uplink Application Data" },
176 { 0x64, "Unallocated" },
177 { 0x65, "Unallocated" },
178 { 0x66, "Unallocated" },
179 { 0x67, "Unallocated" },
180 { 0x68, "Unallocated" },
181 { 0x69, "Unallocated" },
182 { 0x6a, "Unallocated" },
183 { 0x6b, "Unallocated" },
184 { 0x6c, "Unallocated" },
185 { 0x6d, "Unallocated" },
186 { 0x6e, "Unallocated" },
187 { 0x6f, "Unallocated" },
189 { 0x70, "Internal Handover Required" },
190 { 0x71, "Internal Handover Required Reject" },
191 { 0x72, "Internal Handover Command" },
192 { 0x73, "Internal Handover Enquiry" },
193 { 0x74, "LCLS-Connect-Control" },
194 { 0x75, "LCLS-Connect-Control-Ack" },
195 { 0x76, "LCLS-Notification" },
196 { 0x77, "Unallocated" },
197 { 0x78, "Reroute Command" },
198 { 0x79, "Reroute Complete" },
202 static value_string_ext gsm_a_bssmap_msg_strings_ext
= VALUE_STRING_EXT_INIT(gsm_a_bssmap_msg_strings
);
204 static const value_string gsm_bssmap_elem_strings
[] = {
205 { BE_UDEF_0
, "Undefined" },
206 { BE_CIC
, "Circuit Identity Code" },
207 { BE_RSVD_1
, "Reserved" },
208 { BE_RES_AVAIL
, "Resource Available" },
209 { BE_CAUSE
, "Cause" },
210 { BE_CELL_ID
, "Cell Identifier" },
211 { BE_PRIO
, "Priority" },
212 { BE_L3_HEADER_INFO
, "Layer 3 Header Information" },
215 { BE_ENC_INFO
, "Encryption Information" },
216 { BE_CHAN_TYPE
, "Channel Type" },
217 { BE_PERIODICITY
, "Periodicity" },
218 { BE_EXT_RES_IND
, "Extended Resource Indicator" },
219 { BE_NUM_MS
, "Number Of MSs" },
220 { BE_RSVD_2
, "Reserved" },
221 { BE_RSVD_3
, "Reserved" },
222 { BE_RSVD_4
, "Reserved" },
223 { BE_CM_INFO_2
, "Classmark Information Type 2" },
224 { BE_CM_INFO_3
, "Classmark Information Type 3" },
225 { BE_INT_BAND
, "Interference Band To Be Used" },
226 { BE_RR_CAUSE
, "RR Cause" },
227 { BE_RSVD_5
, "Reserved" },
228 { BE_L3_INFO
, "Layer 3 Information" },
230 { BE_DOWN_DTX_FLAG
, "Downlink DTX Flag" },
231 { BE_CELL_ID_LIST
, "Cell Identifier List" },
232 { BE_RESP_REQ
, "Response Request" },
233 { BE_RES_IND_METHOD
, "Resource Indication Method" },
234 { BE_CM_INFO_1
, "Classmark Information Type 1" },
235 { BE_CIC_LIST
, "Circuit Identity Code List" },
236 { BE_DIAG
, "Diagnostic" },
237 { BE_L3_MSG
, "Layer 3 Message Contents" },
238 { BE_CHOSEN_CHAN
, "Chosen Channel" },
239 { BE_TOT_RES_ACC
, "Total Resource Accessible" },
240 { BE_CIPH_RESP_MODE
, "Cipher Response Mode" },
241 { BE_CHAN_NEEDED
, "Channel Needed" },
242 { BE_TRACE_TYPE
, "Trace Type" },
243 { BE_TRIGGERID
, "TriggerID" },
244 { BE_TRACE_REF
, "Trace Reference" },
245 { BE_TRANSID
, "TransactionID" },
246 { BE_MID
, "Mobile Identity" },
247 { BE_OMCID
, "OMCID" },
248 { BE_FOR_IND
, "Forward Indicator" },
249 { BE_CHOSEN_ENC_ALG
, "Chosen Encryption Algorithm" },
250 { BE_CCT_POOL
, "Circuit Pool" },
251 { BE_CCT_POOL_LIST
, "Circuit Pool List" },
252 { BE_TIME_IND
, "Time Indication" },
253 { BE_RES_SIT
, "Resource Situation" },
254 { BE_CURR_CHAN_1
, "Current Channel Type 1" },
255 { BE_QUE_IND
, "Queuing Indicator" },
256 { BE_ASS_REQ
, "Assignment Requirement" },
257 { BE_UDEF_52
, "Undefined" },
258 { BE_TALKER_FLAG
, "Talker Flag" },
259 { BE_CONN_REL_REQ
, "Connection Release Requested" },
260 { BE_GROUP_CALL_REF
, "Group Call Reference" },
261 { BE_EMLPP_PRIO
, "eMLPP Priority" },
262 { BE_CONF_EVO_IND
, "Configuration Evolution Indication" },
263 { BE_OLD2NEW_INFO
, "Old BSS to New BSS Information" },
264 { BE_LSA_ID
, "LSA Identifier" },
265 { BE_LSA_ID_LIST
, "LSA Identifier List" },
266 { BE_LSA_INFO
, "LSA Information" },
267 { BE_LCS_QOS
, "LCS QoS" },
268 { BE_LSA_ACC_CTRL
, "LSA access control suppression" },
269 { BE_SPEECH_VER
, "Speech Version" },
270 { BE_UDEF_65
, "Undefined" },
271 { BE_UDEF_66
, "Undefined" },
272 { BE_LCS_PRIO
, "LCS Priority" },
273 { BE_LOC_TYPE
, "Location Type" },
274 { BE_LOC_EST
, "Location Estimate" },
275 { BE_POS_DATA
, "Positioning Data" },
276 { BE_LCS_CAUSE
, "LCS Cause" },
277 { BE_LCS_CLIENT
, "LCS Client Type" },
279 { BE_NE_ID
, "Network Element Identity" },
280 { BE_GPS_ASSIST_DATA
, "GPS Assistance Data" },
281 { BE_DECIPH_KEYS
, "Deciphering Keys" },
282 { BE_RET_ERR_REQ
, "Return Error Request" },
283 { BE_RET_ERR_CAUSE
, "Return Error Cause" },
284 { BE_SEG
, "Segmentation" },
285 { BE_SERV_HO
, "Service Handover" },
286 { BE_SRC_RNC_TO_TAR_RNC_UMTS
, "Source RNC to target RNC transparent information (UMTS)" },
287 { BE_SRC_RNC_TO_TAR_RNC_CDMA
, "Source RNC to target RNC transparent information (cdma2000)" },
288 { BE_GERAN_CLS_M
, "GERAN Classmark" },
289 { BE_GERAN_BSC_CONT
, "GERAN BSC Container" },
290 { BE_VEL_EST
, "Velocity Estimate" },
291 { BE_UDEF_86
, "Undefined" },
292 { BE_UDEF_87
, "Undefined" },
293 { BE_UDEF_88
, "Undefined" },
294 { BE_UDEF_89
, "Undefined" },
295 { BE_UDEF_90
, "Undefined" },
296 { BE_UDEF_91
, "Undefined" },
297 { BE_UDEF_92
, "Undefined" },
298 { BE_UDEF_93
, "Undefined" },
299 { BE_UDEF_94
, "Undefined" },
300 { BE_UDEF_95
, "Undefined" },
301 { BE_UDEF_96
, "Undefined" },
302 { BE_NEW_BSS_TO_OLD_BSS_INF
, "New BSS to Old BSS Information" },
303 { BE_UDEF_98
, "Undefined" },
304 { BE_INTER_SYS_INF
, "Inter-System Information" },
305 { BE_SNA_ACC_INF
, "SNA Access Information" },
306 { BE_VSTK_RAND_INF
, "VSTK_RAND Information" },
307 { BE_VSTK_INF
, "VSTK Information" },
308 { BE_PAGING_INF
, "Paging Information" },
310 { BE_VGCS_FEAT_FLG
, "VGCS Feature Flags" },
311 { BE_TALKER_PRI
, "Talker Priority" },
312 { BE_EMRG_SET_IND
, "Emergency Set Indication" },
313 { BE_TALKER_ID
, "Talker Identity" },
314 { BE_CELL_ID_LIST_SEG
, "Cell Identifier List Segment" },
315 { BE_SMS_TO_VGCS
, "SMS to VGCS" },
316 { BE_VGCS_TALKER_MOD
, "VGCS Talker Mode" },
317 { BE_VGS_VBS_CELL_STAT
, "VGCS/VBS Cell Status" },
318 { BE_CELL_ID_LST_SEG_F_EST_CELLS
, "Cell Identifier List Segment for established cells" },
319 { BE_CELL_ID_LST_SEG_F_CELL_TB_EST
, "Cell Identifier List Segment for cells to be established" },
320 { BE_CELL_ID_LST_SEG_F_REL_CELL
, "Cell Identifier List Segment for released cells - no user present" },
321 { BE_CELL_ID_LST_SEG_F_NOT_EST_CELL
, "Cell Identifier List Segment for not established cells - no establishment possible" },
322 { BE_GANSS_ASS_DTA
, "GANSS Assistance Data" },
323 { BE_GANSS_POS_DTA
, "GANSS Positioning Data" },
324 { BE_GANSS_LOC_TYP
, "GANSS Location Type" },
325 { BE_APP_DATA
, "Application Data" },
326 { BE_DATA_ID
, "Data Identity" },
327 { BE_APP_DATA_INF
, "Application Data Information" },
328 { BE_MSISDN
, "MSISDN" },
329 { BE_AOIP_TRANS_LAY_ADD
, "AoIP Transport Layer Address" },
330 { BE_SPEECH_CODEC_LST
, "Speech Codec List" },
331 { BE_SPEECH_CODEC
, "Speech Codec" },
332 { BE_CALL_ID
, "Call Identifier" },
333 { BE_CALL_ID_LST
, "Call Identifier List" },
334 { BE_A_ITF_SEL_FOR_RESET
, "A-Interface Selector for RESET" },
335 { BE_UDEF_130
, "Undefined" },
336 { BE_KC128
, "Kc128" },
337 { BE_CSG_ID
, "CSG Identifier" },
338 { BE_REDIR_ATT_FLG
, "Redirect Attempt Flag" }, /* 3.2.2.111 */
339 { BE_REROUTE_REJ_CAUSE
, "Reroute Reject Cause" }, /* 3.2.2.112 */
340 { BE_SEND_SEQN
, "Send Sequence Number" }, /* 3.2.2.113 */
341 { BE_REROUTE_OUTCOME
, "Reroute complete outcome" }, /* 3.2.2.114 */
342 { BE_GLOBAL_CALL_REF
, "Global Call Reference" }, /* 3.2.2.115 */
343 { BE_LCLS_CONF
, "LCLS-Configuration" }, /* 3.2.2.116 */
344 { BE_LCLS_CON_STATUS_CONTROL
, "LCLS-Connection-Status-Control" }, /* 3.2.2.117 */
345 { BE_LCLS_CORR_NOT_NEEDED
, "LCLS-Correlation-Not-Needed" }, /* 3.2.2.118 */
346 { BE_LCLS_BSS_STATUS
, "LCLS-BSS-Status" }, /* 3.2.2.119 */
347 { BE_LCLS_BREAK_REQ
, "LCLS-Break-Request" }, /* 3.2.2.120 */
348 { BE_CSFB_IND
, "CSFB Indication" }, /* 3.2.2.121 */
350 { BE_CS_TO_PS_SRVCC
, "CS to PS SRVCC" }, /* 3.2.2.122 */
351 { BE_SRC_ENB_2_TGT_ENB_TRANSP_INF
, "Source eNB to target eNB transparent information (E-UTRAN)" }, /*3.2.2.123 */
352 { BE_CS_TO_PS_SRVCC_IND
, "CS to PS SRVCC Indication" }, /* 3.2.2.124 */
353 { BE_CN_TO_MS_TRANSP
, "CN to MS transparent information" }, /* 3.2.2.125 */
355 { BE_SELECTED_PLMN_ID
, "Selected PLMN ID" }, /* 3.2.2.126 */
358 value_string_ext gsm_bssmap_elem_strings_ext
= VALUE_STRING_EXT_INIT(gsm_bssmap_elem_strings
);
360 /* 3.2.3 Signalling Field Element Coding */
361 static const value_string bssmap_field_element_ids
[] = {
363 { 0x1, "BSSMAP Field Element: Extra information" }, /* 3.2.3.1 */
364 { 0x2, "BSSMAP Field Element: Current Channel Type 2" }, /* 3.2.2.2 */
365 { 0x3, "BSSMAP Field Element: Target cell radio information" }, /* 3.2.3.3 */
366 { 0x4, "BSSMAP Field Element: GPRS Suspend information" }, /* 3.2.3.4 */
367 { 0x5, "BSSMAP Field Element: MultiRate configuration information" }, /* 3.2.3.5 */
368 { 0x6, "BSSMAP Field Element: Dual Transfer Mode information" }, /* 3.2.3.6 */
369 { 0x7, "BSSMAP Field Element: Inter RAT Handover Info" }, /* 3.2.3.7 */
370 /*{ 0x7, "UE Capability information" },*/ /* 3.2.3.7 */
371 { 0x8, "BSSMAP Field Element: cdma2000 Capability Information" }, /* 3.2.3.8 */
372 { 0x9, "BSSMAP Field Element: Downlink Cell Load Information" }, /* 3.2.3.9 */
373 { 0xa, "BSSMAP Field Element: Uplink Cell Load Information" }, /* 3.2.3.10 */
374 { 0xb, "BSSMAP Field Element: Cell Load Information Group" }, /* 3.2.3.11 */
375 { 0xc, "BSSMAP Field Element: Cell Load Information" }, /* 3.2.3.12 */
376 { 0x0d, "BSSMAP Field Element: PS Indication" }, /* 3.2.3.13 */
377 { 0x0e, "BSSMAP Field Element: DTM Handover Command Indication" }, /* 3.2.3.14 */
378 { 0x6f, "VGCS talker mode" }, /* although technically not a Field Element,
379 this IE can appear in Old BSS to New BSS information */
383 static const value_string bssap_cc_values
[] = {
384 { 0x00, "not further specified" },
385 { 0x80, "FACCH or SDCCH" },
389 static const value_string bssap_sapi_values
[] = {
390 { 0x00, "RR/MM/CC" },
394 static const value_string gsm_a_be_cell_id_disc_vals
[] = {
395 { 0, "The whole Cell Global Identification, CGI, is used to identify the cells."},
396 { 1, "Location Area Code, LAC, and Cell Identify, CI, is used to identify the cells."},
397 { 2, "Cell Identity, CI, is used to identify the cells."},
398 { 3, "No cell is associated with the transaction."},
399 { 4, "Location Area Identification, LAI, is used to identify all cells within a Location Area."},
400 { 5, "Location Area Code, LAC, is used to identify all cells within a location area."},
401 { 6, "All cells on the BSS are identified."},
403 { 8, "Intersystem Handover to UTRAN or cdma2000. PLMN-ID, LAC, and RNC-ID, are encoded to identify the target RNC."},
404 { 9, "Intersystem Handover to UTRAN or cdma2000. The RNC-ID is coded to identify the target RNC."},
405 { 10, "Intersystem Handover to UTRAN or cdma2000. LAC and RNC-ID are encoded to identify the target RNC."},
406 { 11, "Serving Area Identity, SAI, is used to identify the Serving Area of UE within UTRAN or cdma2000"},
407 { 12, "LAC, RNC-ID (or Extended RNC-ID) and Cell Identity, CI, is used to identify a UTRAN cell for cell load information"},
413 static value_string_ext gsm_a_be_cell_id_disc_vals_ext
= VALUE_STRING_EXT_INIT(gsm_a_be_cell_id_disc_vals
);
416 static const value_string gsm_a_rr_channel_needed_vals
[] = {
417 { 0x00, "Any channel"},
419 { 0x02, "TCH/F (Full rate)"},
420 { 0x03, "TCH/H or TCH/F (Dual rate)"},
425 static const value_string bssmap_positioning_methods
[] = {
426 { 0, "Timing Advance" },
427 { 1, "Reserved (Note)" },
428 { 2, "Reserved (Note)" },
429 { 3, "Mobile Assisted E-OTD" },
430 { 4, "Mobile Based E-OTD" },
431 { 5, "Mobile Assisted GPS" },
432 { 6, "Mobile Based GPS" },
433 { 7, "Conventional GPS" },
435 { 9, "Reserved for UTRAN use only" },
436 { 10, "Reserved for UTRAN use only" },
437 { 11, "Reserved for UTRAN use only" },
442 /* Positioning Method definitions */
443 static const value_string bssmap_positioning_method_vals
[] = {
445 { 1, "Mobile Assisted E-OTD" },
446 { 2, "Mobile Based E-OTD" },
447 { 3, "Assisted GPS" },
448 { 4, "Assisted GANSS" },
449 { 5, "Assisted GPS and Assisted GANSS" },
453 static const value_string bssmap_positioning_methods_usage
[] = {
454 { 0, "Attempted unsuccessfully due to failure or interruption" },
455 { 1, "Attempted successfully - results not used to generate location" },
456 { 2, "Attempted successfully - results used to verify but not generate location" },
457 { 3, "Attempted successfully - results used to generate location" },
458 { 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" },
462 /* Location Information definitions */
463 static const value_string bssmap_location_information_vals
[] = {
464 { 0, "current geographic location" },
465 { 1, "location assistance information for the target MS" },
466 { 2, "deciphering keys for broadcast assistance data for the target MS" },
470 static const true_false_string bssmap_chan_type_extension_value
= {
475 static const true_false_string bssmap_cause_extension_value
= {
480 /* Current Channel Type */
481 static const value_string chan_mode_vals
[] = {
482 { 0, "signalling only" },
483 { 1, "speech (full rate or half rate)" },
484 { 6, "data, 14.5 kbit/s radio interface rate" },
485 { 3, "data, 12.0 kbit/s radio interface rate" },
486 { 4, "data, 6.0 kbit/s radio interface rate" },
487 { 5, "data, 3.6 kbit/s radio interface rate" },
488 { 0x0f, "reserved" },
492 static const value_string fe_cur_chan_type2_chan_field_vals
[] = {
494 { 8, "1 Full rate TCH" },
495 { 9, "1 Half rate TCH" },
496 { 10, "2 Full Rate TCHs" },
497 { 11, "3 Full Rate TCHs" },
498 { 12, "4 Full Rate TCHs" },
499 { 13, "5 Full Rate TCHs" },
500 { 14, "6 Full Rate TCHs" },
501 { 15, "7 Full Rate TCHs" },
502 { 4, "8 Full Rate TCHs" },
507 /* Initialize the protocol and registered fields */
508 static int proto_a_bssmap
= -1;
510 static int hf_gsm_a_bssmap_msg_type
= -1;
511 int hf_gsm_a_bssmap_elem_id
= -1;
512 static int hf_gsm_a_bssmap_field_elem_id
= -1;
513 static int hf_gsm_a_bssmap_cell_ci
= -1;
514 static int hf_gsm_a_bssmap_cell_lac
= -1;
515 static int hf_gsm_a_bssmap_sac
= -1;
516 static int hf_gsm_a_bssmap_dlci_cc
= -1;
517 static int hf_gsm_a_bssmap_dlci_spare
= -1;
518 static int hf_gsm_a_bssmap_dlci_sapi
= -1;
519 static int hf_gsm_a_bssmap_cause
= -1;
520 static int hf_gsm_a_bssmap_be_cell_id_disc
= -1;
521 static int hf_gsm_a_bssmap_pci
= -1;
522 static int hf_gsm_a_bssmap_qa
= -1;
523 static int hf_gsm_a_bssmap_pvi
= -1;
524 static int hf_gsm_a_bssmap_interference_bands
= -1;
525 static int hf_gsm_a_bssmap_lsa_only
= -1;
526 static int hf_gsm_a_bssmap_act
= -1;
527 static int hf_gsm_a_bssmap_pref
= -1;
528 static int hf_gsm_a_bssmap_lsa_inf_prio
= -1;
529 static int hf_gsm_a_bssmap_seq_len
= -1;
530 static int hf_gsm_a_bssmap_seq_no
= -1;
531 static int hf_gsm_a_bssap_cell_id_list_seg_cell_id_disc
= -1;
532 static int hf_gsm_a_bssap_res_ind_method
= -1;
533 static int hf_gsm_a_bssap_cic_list_range
= -1;
534 static int hf_gsm_a_bssap_cic_list_status
= -1;
535 static int hf_gsm_a_bssap_diag_error_pointer
= -1;
536 static int hf_gsm_a_bssap_diag_msg_rcv
= -1;
537 static int hf_gsm_a_bssmap_ch_mode
= -1;
538 static int hf_gsm_a_bssmap_cur_ch_mode
= -1;
539 static int hf_gsm_a_bssmap_channel
= -1;
540 static int hf_gsm_a_bssmap_trace_trigger_id
= -1;
541 static int hf_gsm_a_bssmap_trace_priority_indication
= -1;
542 static int hf_gsm_a_bssmap_trace_bss_record_type
= -1;
543 static int hf_gsm_a_bssmap_trace_msc_record_type
= -1;
544 static int hf_gsm_a_bssmap_trace_invoking_event
= -1;
545 static int hf_gsm_a_bssmap_trace_reference
= -1;
546 static int hf_gsm_a_bssmap_trace_omc_id
= -1;
547 static int hf_gsm_a_bssmap_be_rnc_id
= -1;
548 static int hf_gsm_a_bssmap_apdu_protocol_id
= -1;
549 static int hf_gsm_a_bssmap_periodicity
= -1;
550 static int hf_gsm_a_bssmap_sm
= -1;
551 static int hf_gsm_a_bssmap_tarr
= -1;
552 static int hf_gsm_a_bssmap_tot_no_of_fullr_ch
= -1;
553 static int hf_gsm_a_bssmap_tot_no_of_hr_ch
= -1;
554 static int hf_gsm_a_bssmap_smi
= -1;
555 static int hf_gsm_a_bssmap_lsa_id
= -1;
556 static int hf_gsm_a_bssmap_ep
= -1;
557 static int hf_gsm_a_bssmap_lcs_pri
= -1;
558 static int hf_gsm_a_bssmap_num_ms
= -1;
559 static int hf_gsm_a_bssmap_talker_pri
= -1;
560 static int hf_gsm_a_bssmap_rr_mode
= -1;
561 static int hf_gsm_a_bssmap_group_cipher_key_nb
= -1;
562 static int hf_gsm_a_bssmap_vgcs_vbs_cell_status
= -1;
563 static int hf_gsm_a_bssmap_paging_cause
= -1;
564 static int hf_gsm_a_bssmap_paging_inf_flg
= -1;
565 static int hf_gsm_a_bssmap_serv_ho_inf
= -1;
566 static int hf_gsm_a_bssmap_max_nb_traffic_chan
= -1;
567 static int hf_gsm_a_bssmap_acceptable_chan_coding_bit5
= -1;
568 static int hf_gsm_a_bssmap_acceptable_chan_coding_bit4
= -1;
569 static int hf_gsm_a_bssmap_acceptable_chan_coding_bit3
= -1;
570 static int hf_gsm_a_bssmap_acceptable_chan_coding_bit2
= -1;
571 static int hf_gsm_a_bssmap_acceptable_chan_coding_bit1
= -1;
572 static int hf_gsm_a_bssmap_allowed_data_rate_bit8
= -1;
573 static int hf_gsm_a_bssmap_allowed_data_rate_bit7
= -1;
574 static int hf_gsm_a_bssmap_allowed_data_rate_bit6
= -1;
575 static int hf_gsm_a_bssmap_allowed_data_rate_bit5
= -1;
576 static int hf_gsm_a_bssmap_allowed_data_rate_bit4
= -1;
577 static int hf_gsm_a_bssmap_vstk_rand
= -1;
578 static int hf_gsm_a_bssmap_vstk
= -1;
579 static int hf_gsm_a_bssmap_spare_bits
= -1;
580 static int hf_gsm_a_bssmap_tpind
= -1;
581 static int hf_gsm_a_bssmap_asind_b2
= -1;
582 static int hf_gsm_a_bssmap_asind_b3
= -1;
583 static int hf_gsm_a_bssmap_bss_res
= -1;
584 static int hf_gsm_a_bssmap_tcp
= -1;
585 static int hf_gsm_a_bssmap_filler_bits
= -1;
586 static int hf_gsm_a_bssmap_method
= -1;
587 static int hf_gsm_a_bssmap_ganss_id
= -1;
588 static int hf_gsm_a_bssmap_usage
= -1;
589 static int hf_gsm_a_bssmap_data_id
= -1;
590 static int hf_gsm_a_bssmap_bt_ind
= -1;
591 static int hf_gsm_a_bssmap_aoip_trans_ipv4
= -1;
592 static int hf_gsm_a_bssmap_aoip_trans_ipv6
= -1;
593 static int hf_gsm_a_bssmap_aoip_trans_port
= -1;
594 static int hf_gsm_a_bssmap_fi
= -1;
595 static int hf_gsm_a_bssmap_tf
= -1;
596 static int hf_gsm_a_bssmap_pi
= -1;
597 static int hf_gsm_a_bssmap_pt
= -1;
598 static int hf_gsm_a_bssap_speech_codec
= -1;
599 static int hf_gsm_a_bssap_extended_codec
= -1;
600 static int hf_gsm_a_bssap_extended_codec_r2
= -1;
601 static int hf_gsm_a_bssap_extended_codec_r3
= -1;
602 static int hf_gsm_a_bssmap_fi2
= -1;
603 static int hf_gsm_a_bssmap_tf2
= -1;
604 static int hf_gsm_a_bssmap_pi2
= -1;
605 static int hf_gsm_a_bssmap_pt2
= -1;
606 static int hf_gsm_a_bssmap_call_id
= -1;
607 static int hf_gsm_a_bssmap_spare
= -1;
608 static int hf_gsm_a_bssmap_positioning_data_discriminator
= -1;
609 static int hf_gsm_a_bssmap_positioning_method
= -1;
610 static int hf_gsm_a_bssmap_positioning_method_usage
= -1;
611 static int hf_gsm_a_bssmap_location_type_location_information
= -1;
612 static int hf_gsm_a_bssmap_location_type_positioning_method
= -1;
613 static int hf_gsm_a_bssmap_chan_type_extension
= -1;
614 static int hf_gsm_a_bssmap_cause_extension
= -1;
615 static int hf_gsm_a_bssmap_emlpp_prio
= -1;
616 static int hf_gsm_a_bssmap_rip
= -1;
617 static int hf_gsm_a_bssmap_rtd
= -1;
618 static int hf_gsm_a_bssmap_kc128
= -1;
619 static int hf_gsm_a_bssmap_csg_id
= -1;
620 static int hf_gsm_a_bssmap_cell_access_mode
= -1;
621 static int hf_fe_extra_info_prec
= -1;
622 static int hf_fe_extra_info_lcs
= -1;
623 static int hf_fe_extra_info_ue_prob
= -1;
624 static int hf_fe_extra_info_spare
= -1;
625 static int hf_fe_cur_chan_type2_chan_mode
= -1;
626 static int hf_fe_cur_chan_type2_chan_mode_spare
= -1;
627 static int hf_fe_cur_chan_type2_chan_field
= -1;
628 static int hf_fe_cur_chan_type2_chan_field_spare
= -1;
629 static int hf_fe_target_radio_cell_info_rxlev_ncell
= -1;
630 static int hf_fe_target_radio_cell_info_rxlev_ncell_spare
= -1;
631 static int hf_fe_dtm_info_dtm_ind
= -1;
632 static int hf_fe_dtm_info_sto_ind
= -1;
633 static int hf_fe_dtm_info_egprs_ind
= -1;
634 static int hf_fe_dtm_info_spare_bits
= -1;
635 static int hf_fe_cell_load_info_cell_capacity_class
= -1;
636 static int hf_fe_cell_load_info_load_value
= -1;
637 static int hf_fe_cell_load_info_rt_load_value
= -1;
638 static int hf_fe_cell_load_info_nrt_load_information_value
= -1;
639 static int hf_fe_ps_indication
= -1;
640 static int hf_fe_dtm_ho_command_ind_spare
= -1;
641 static int hf_gsm_a_bssmap_speech_data_ind
= -1;
642 static int hf_gsm_a_bssmap_channel_rate_and_type
= -1;
643 static int hf_gsm_a_bssmap_perm_speech_v_ind
= -1;
644 static int hf_gsm_a_bssmap_reroute_rej_cause
= -1;
645 static int hf_gsm_a_bssmap_send_seqn
= -1;
646 static int hf_gsm_a_bssmap_reroute_outcome
= -1;
647 static int hf_gsm_a_bssmap_lcls_conf
= -1;
648 static int hf_gsm_a_bssmap_lcls_con_status_control
= -1;
649 static int hf_gsm_a_bssmap_lcls_bss_status
= -1;
650 static int hf_gsm_a_bssmap_selected_plmn_id
= -1;
652 static expert_field ei_gsm_a_bssmap_extraneous_data
= EI_INIT
;
654 /* Initialize the subtree pointers */
655 static gint ett_bssmap_msg
= -1;
656 static gint ett_cell_list
= -1;
657 static gint ett_dlci
= -1;
658 static gint ett_codec_lst
= -1;
659 static gint ett_bss_to_bss_info
= -1;
661 static char a_bigbuf
[1024];
663 static dissector_handle_t gsm_bsslap_handle
= NULL
;
664 static dissector_handle_t dtap_handle
;
665 static dissector_handle_t bssgp_handle
;
666 static dissector_handle_t rrc_handle
;
668 static proto_tree
*g_tree
;
669 static guint8 cell_discriminator
= 0x0f; /* tracks whether handover is to UMTS */
672 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_
);
675 This
enum has been moved to packet
-gsm_a_common to
676 make it possible to use element dissecton from
this dissector
678 It is left here as a comment
for easier reference
.
680 Note
this enum must be of the same size as the element decoding list
684 BE_UDEF_0
, /* Undefined */
685 BE_CIC
, /* Circuit Identity Code */
686 BE_RSVD_1
, /* Reserved */
687 BE_RES_AVAIL
, /* Resource Available */
688 BE_CAUSE
, /* Cause */
689 BE_CELL_ID
, /* Cell Identifier */
690 BE_PRIO
, /* Priority */
691 BE_L3_HEADER_INFO
, /* Layer 3 Header Information */
694 BE_ENC_INFO
, /* Encryption Information */
695 BE_CHAN_TYPE
, /* Channel Type */
696 BE_PERIODICITY
, /* Periodicity */
697 BE_EXT_RES_IND
, /* Extended Resource Indicator */
698 BE_NUM_MS
, /* Number Of MSs */
699 BE_RSVD_2
, /* Reserved */
700 BE_RSVD_3
, /* Reserved */
701 BE_RSVD_4
, /* Reserved */
702 BE_CM_INFO_2
, /* Classmark Information Type 2 */
703 BE_CM_INFO_3
, /* Classmark Information Type 3 */
704 BE_INT_BAND
, /* Interference Band To Be Used */
705 BE_RR_CAUSE
, /* RR Cause */
706 BE_RSVD_5
, /* Reserved */
707 BE_L3_INFO
, /* Layer 3 Information */
709 BE_DOWN_DTX_FLAG
, /* Downlink DTX Flag */
710 BE_CELL_ID_LIST
, /* Cell Identifier List */
711 BE_RESP_REQ
, /* Response Request */
712 BE_RES_IND_METHOD
, /* Resource Indication Method */
713 BE_CM_INFO_1
, /* Classmark Information Type 1 */
714 BE_CIC_LIST
, /* Circuit Identity Code List */
715 BE_DIAG
, /* Diagnostic */
716 BE_L3_MSG
, /* Layer 3 Message Contents */
717 BE_CHOSEN_CHAN
, /* Chosen Channel */
718 BE_TOT_RES_ACC
, /* Total Resource Accessible */
719 BE_CIPH_RESP_MODE
, /* Cipher Response Mode */
720 BE_CHAN_NEEDED
, /* Channel Needed */
721 BE_TRACE_TYPE
, /* Trace Type */
722 BE_TRIGGERID
, /* TriggerID */
723 BE_TRACE_REF
, /* Trace Reference */
724 BE_TRANSID
, /* TransactionID */
725 BE_MID
, /* Mobile Identity */
726 BE_OMCID
, /* OMCID */
727 BE_FOR_IND
, /* Forward Indicator */
728 BE_CHOSEN_ENC_ALG
, /* Chosen Encryption Algorithm */
729 BE_CCT_POOL
, /* Circuit Pool */
730 BE_CCT_POOL_LIST
, /* Circuit Pool List */
731 BE_TIME_IND
, /* Time Indication */
732 BE_RES_SIT
, /* Resource Situation */
733 BE_CURR_CHAN_1
, /* Current Channel Type 1 */
734 BE_QUE_IND
, /* Queueing Indicator */
735 BE_ASS_REQ
, /* Assignment Requirement */
736 BE_UDEF_52
, /* Undefined */
737 BE_TALKER_FLAG
, /* Talker Flag */
738 BE_CONN_REL_REQ
, /* Connection Release Requested */
739 BE_GROUP_CALL_REF
, /* Group Call Reference */
740 BE_EMLPP_PRIO
, /* eMLPP Priority */
741 BE_CONF_EVO_IND
, /* Configuration Evolution Indication */
742 BE_OLD2NEW_INFO
, /* Old BSS to New BSS Information */
743 BE_LSA_ID
, /* LSA Identifier */
744 BE_LSA_ID_LIST
, /* LSA Identifier List */
745 BE_LSA_INFO
, /* LSA Information */
746 BE_LCS_QOS
, /* LCS QoS */
747 BE_LSA_ACC_CTRL
, /* LSA access control suppression */
748 BE_SPEECH_VER
, /* Speech Version */
749 BE_UDEF_65
, /* Undefined */
750 BE_UDEF_66
, /* Undefined */
751 BE_LCS_PRIO
, /* LCS Priority */
752 BE_LOC_TYPE
, /* Location Type */
753 BE_LOC_EST
, /* Location Estimate */
754 BE_POS_DATA
, /* Positioning Data */
755 BE_LCS_CAUSE
, /* 3.2.2.66 LCS Cause */
756 BE_LCS_CLIENT
, /* 10.14 LCS Client Type */
758 BE_NE_ID
, /* Network Element Identity */
759 BE_GPS_ASSIST_DATA
, /* GPS Assistance Data */
760 BE_DECIPH_KEYS
, /* Deciphering Keys */
761 BE_RET_ERR_REQ
, /* Return Error Request */
762 BE_RET_ERR_CAUSE
, /* Return Error Cause */
763 BE_SEG
, /* Segmentation */
764 BE_SERV_HO
, /* Service Handover */
765 BE_SRC_RNC_TO_TAR_RNC_UMTS
, /* Source RNC to target RNC transparent information (UMTS) */
766 BE_SRC_RNC_TO_TAR_RNC_CDMA
, /* Source RNC to target RNC transparent information (cdma2000) */
767 BE_GERAN_CLS_M
, /* GERAN Classmark */
768 BE_GERAN_BSC_CONT
, /* GERAN BSC Container */
769 BE_VEL_EST
, /* Velocity Estimate */
770 BE_UDEF_86
, /* Undefined */
771 BE_UDEF_87
, /* Undefined */
772 BE_UDEF_88
, /* Undefined */
773 BE_UDEF_89
, /* Undefined */
774 BE_UDEF_90
, /* Undefined */
775 BE_UDEF_91
, /* Undefined */
776 BE_UDEF_92
, /* Undefined */
777 BE_UDEF_93
, /* Undefined */
778 BE_UDEF_94
, /* Undefined */
779 BE_UDEF_95
, /* Undefined */
780 BE_UDEF_96
, /* Undefined */
781 BE_NEW_BSS_TO_OLD_BSS_INF
, /* New BSS to Old BSS Information */
782 BE_UDEF_98
, /* Undefined */
783 BE_INTER_SYS_INF
, /* Inter-System Information */
784 BE_SNA_ACC_INF
, /* SNA Access Information */
785 BE_VSTK_RAND_INF
, /* VSTK_RAND Information */
786 BE_VSTK_INF
, /* VSTK Information */
787 BE_PAGING_INF
, /* Paging Information */
789 BE_VGCS_FEAT_FLG
, /* VGCS Feature Flags */
790 BE_TALKER_PRI
, /* Talker Priority */
791 BE_EMRG_SET_IND
, /* Emergency Set Indication */
792 BE_TALKER_ID
, /* Talker Identity */
793 BE_CELL_ID_LIST_SEG
, /* Cell Identifier List Segment */
794 BE_SMS_TO_VGCS
, /* SMS to VGCS */
795 BE_VGCS_TALKER_MOD
, /* VGCS Talker Mode */
796 BE_VGS_VBS_CELL_STAT
, /* VGCS/VBS Cell Status */
797 BE_CELL_ID_LST_SEG_F_EST_CELLS
, /* Cell Identifier List Segment for established cells */
798 BE_CELL_ID_LST_SEG_F_CELL_TB_EST
, /* Cell Identifier List Segment for cells to be established */
799 BE_CELL_ID_LST_SEG_F_REL_CELL
, /* Cell Identifier List Segment for released cells - no user present */
800 BE_CELL_ID_LST_SEG_F_NOT_EST_CELL
, /* Cell Identifier List Segment for not established cells - no establishment possible */
801 BE_GANSS_ASS_DTA
, /* GANSS Assistance Data */
802 BE_GANSS_POS_DTA
, /* GANSS Positioning Data */
803 BE_GANSS_LOC_TYP
, /* GANSS Location Type */
804 BE_APP_DATA
, /* Application Data */
805 BE_DATA_ID
, /* Data Identity */
806 BE_APP_DATA_INF
, /* Application Data Information */
807 BE_MSISDN
, /* MSISDN */
808 BE_AOIP_TRANS_LAY_ADD
, /* AoIP Transport Layer Address */
809 BE_SPEECH_CODEC_LST
, /* Speech Codec List */
810 BE_SPEECH_CODEC
, /* Speech Codec */
811 BE_CALL_ID
, /* Call Identifier */
812 BE_CALL_ID_LST
, /* Call Identifier List */
813 BE_A_ITF_SEL_FOR_RESET
, /* A-Interface Selector for RESET */
814 BE_UDEF_130
, /* Undefined */
815 BE_KC128
, /* Kc128 */
816 BE_CSG_ID
, /* CSG Identifier */
817 BE_REDIR_ATT_FLG
, /* Redirect Attempt Flag 3.2.2.111 */
818 BE_REROUTE_REJ_CAUSE
, /* Reroute Reject Cause 3.2.2.112 */
819 BE_SEND_SEQN
, /* Send Sequence Number 3.2.2.113 */
820 BE_REROUTE_OUTCOME
, /* Reroute complete outcome 3.2.2.114 */
821 BE_GLOBAL_CALL_REF
, /* Global Call Reference 3.2.2.115 */
822 BE_LCLS_CONF
, /* LCLS-Configuration 3.2.2.116 */
823 BE_LCLS_CON_STATUS_CONTROL
, /* LCLS-Connection-Status-Control 3.2.2.117 */
824 BE_LCLS_CORR_NOT_NEEDED
, /* LCLS-Correlation-Not-Needed 3.2.2.118 */
825 BE_LCLS_BSS_STATUS
, /* LCLS-BSS-Status 3.2.2.119 */
826 BE_LCLS_BREAK_REQ
, /* LCLS-Break-Request 3.2.2.120 */
827 BE_CSFB_IND
, /* CSFB Indication 3.2.2.121 */
828 BE_CS_TO_PS_SRVCC
, /* CS to PS SRVCC 3.2.2.122 */
829 BE_SRC_ENB_2_TGT_ENB_TRANSP_INF
, /* Source eNB to target eNB transparent information (E-UTRAN)" 3.2.2.123 */
830 BE_CS_TO_PS_SRVCC_IND
, /* CS to PS SRVCC Indication 3.2.2.124 */
831 BE_CN_TO_MS_TRANSP
, /* CN to MS transparent information 3.2.2.125 */
832 BE_SELECTED_PLMN_ID
, /* Selected PLMN ID 3.2.2.126 */
838 #define NUM_GSM_BSSMAP_ELEM (sizeof(gsm_bssmap_elem_strings)/sizeof(value_string))
839 gint ett_gsm_bssmap_elem
[NUM_GSM_BSSMAP_ELEM
];
842 * [2] 3.2.2.2 Circuit Identity Code
845 be_cic(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string
, int string_len
)
850 curr_offset
= offset
;
852 value
= tvb_get_ntohs(tvb
, curr_offset
);
854 other_decode_bitfield_value(a_bigbuf
, value
, 0xffe0, 16);
855 proto_tree_add_text(tree
,
857 "%s = PCM Multiplexer: %u",
859 (value
& 0xffe0) >> 5);
861 other_decode_bitfield_value(a_bigbuf
, value
, 0x001f, 16);
862 proto_tree_add_text(tree
,
871 g_snprintf(add_string
, string_len
, " - (%u) (0x%04x)", value
, value
);
873 /* no length check possible */
875 return(curr_offset
- offset
);
878 * 3.2.2.3 Connection Release Requested
883 * 3.2.2.4 Resource Available
886 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_
)
892 curr_offset
= offset
;
894 for (i
=0; i
< 5; i
++) {
895 value
= tvb_get_ntohl(tvb
, curr_offset
);
896 proto_tree_add_text(tree
, tvb
, curr_offset
, len
, "Number of full rate channels available in band %u %u",i
+1,value
);
898 proto_tree_add_text(tree
, tvb
, curr_offset
, len
, "Number of half rate channels available in band %u %u",i
+1, value
);
909 be_cause(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
, gchar
*add_string
, int string_len
)
914 const gchar
*str
= NULL
;
916 curr_offset
= offset
;
918 oct
= tvb_get_guint8(tvb
, curr_offset
);
920 proto_tree_add_item(tree
, hf_gsm_a_bssmap_cause_extension
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
926 if ((oct
& 0x0f) == 0x00)
929 switch ((oct
& 0x70) >> 4)
931 case 0: str
= "Normal Event"; break;
932 case 1: str
= "Normal Event"; break;
933 case 2: str
= "Resource Unavailable"; break;
934 case 3: str
= "Service or option not available"; break;
935 case 4: str
= "Service or option not implemented"; break;
936 case 5: str
= "Invalid message (e.g., parameter out of range)"; break;
937 case 6: str
= "Protocol error"; break;
939 str
= "Interworking";
943 other_decode_bitfield_value(a_bigbuf
, oct
, 0x70, 8);
944 proto_tree_add_text(tree
,
946 "%s = Cause Class: %s",
950 other_decode_bitfield_value(a_bigbuf
, oct
, 0x0f, 8);
951 proto_tree_add_text(tree
,
953 "%s = National Cause",
958 proto_tree_add_text(tree
, tvb
, curr_offset
, 1,
964 g_snprintf(add_string
, string_len
, " - (National Cause)");
968 value
= tvb_get_guint8(tvb
, curr_offset
+ 1);
970 other_decode_bitfield_value(a_bigbuf
, oct
, 0x7f, 8);
971 proto_tree_add_text(tree
,
973 "%s = Cause (MSB): %u",
975 ((oct
& 0x7f) << 8) | value
);
979 other_decode_bitfield_value(a_bigbuf
, value
, 0xff, 8);
980 proto_tree_add_text(tree
, tvb
, curr_offset
, 1,
991 case 0x00: str
= "Radio interface message failure"; break;
992 case 0x01: str
= "Radio interface failure"; break;
993 case 0x02: str
= "Uplink quality"; break;
994 case 0x03: str
= "Uplink strength"; break;
995 case 0x04: str
= "Downlink quality"; break;
996 case 0x05: str
= "Downlink strength"; break;
997 case 0x06: str
= "Distance"; break;
998 case 0x07: str
= "O and M intervention"; break;
999 case 0x08: str
= "Response to MSC invocation"; break;
1000 case 0x09: str
= "Call control"; break;
1001 case 0x0a: str
= "Radio interface failure, reversion to old channel"; break;
1002 case 0x0b: str
= "Handover successful"; break;
1003 case 0x0c: str
= "Better Cell"; break;
1004 case 0x0d: str
= "Directed Retry"; break;
1005 case 0x0e: str
= "Joined group call channel"; break;
1006 case 0x0f: str
= "Traffic"; break;
1008 case 0x10: str
= "Reduce load in serving cell"; break;
1009 case 0x11: str
= "Traffic load in target cell higher than in source cell"; break;
1010 case 0x12: str
= "Relocation triggered"; break;
1011 case 0x14: str
= "Requested option not authorised"; break;
1012 case 0x15: str
= "Alternative channel configuration requested "; break;
1013 case 0x16: str
= "Call Identifier already allocated"; break;
1014 case 0x17: str
= "INTERNAL HANDOVER ENQUIRY reject"; break;
1015 case 0x18: str
= "Redundancy Level not adequate"; break;
1017 case 0x20: str
= "Equipment failure"; break;
1018 case 0x21: str
= "No radio resource available"; break;
1019 case 0x22: str
= "Requested terrestrial resource unavailable"; break;
1020 case 0x23: str
= "CCCH overload"; break;
1021 case 0x24: str
= "Processor overload"; break;
1022 case 0x25: str
= "BSS not equipped"; break;
1023 case 0x26: str
= "MS not equipped"; break;
1024 case 0x27: str
= "Invalid cell"; break;
1025 case 0x28: str
= "Traffic Load"; break;
1026 case 0x29: str
= "Preemption"; break;
1027 case 0x2a: str
= "DTM Handover - SGSN Failure"; break;
1028 case 0x2b: str
= "DTM Handover - PS Allocation failure"; break;
1030 case 0x30: str
= "Requested transcoding/rate adaption unavailable"; break;
1031 case 0x31: str
= "Circuit pool mismatch"; break;
1032 case 0x32: str
= "Switch circuit pool"; break;
1033 case 0x33: str
= "Requested speech version unavailable"; break;
1034 case 0x34: str
= "LSA not allowed"; break;
1035 case 0x35: str
= "Requested Codec Type or Codec Configuration unavailable"; break;
1036 case 0x36: str
= "Requested A-Interface Type unavailable"; break;
1037 case 0x37: str
= "Invalid CSG cell"; break;
1039 case 0x3f: str
= "Requested Redundancy Level not available"; break;
1041 case 0x40: str
= "Ciphering algorithm not supported"; break;
1042 case 0x41: str
= "GERAN Iu-mode failure"; break;
1043 case 0x42: str
= "Incoming Relocation Not Supported Due To PUESBINE Feature"; break;
1044 case 0x43: str
= "Access Restricted Due to Shared Networks"; break;
1045 case 0x44: str
= "Requested Codec Type or Codec Configuration not supported"; break;
1046 case 0x45: str
= "Requested A-Interface Type not supported"; break;
1047 case 0x46: str
= "Requested Redundancy Level not supported"; break;
1048 case 0x47: str
= "Reserved for international use"; break;
1050 case 0x50: str
= "Terrestrial circuit already allocated"; break;
1051 case 0x51: str
= "Invalid message contents"; break;
1052 case 0x52: str
= "Information element or field missing"; break;
1053 case 0x53: str
= "Incorrect value"; break;
1054 case 0x54: str
= "Unknown Message type"; break;
1055 case 0x55: str
= "Unknown Information Element"; break;
1056 case 0x56: str
= "DTM Handover - Invalid PS Indication"; break;
1057 case 0x57: str
= "Call Identifier already allocated"; break;
1059 case 0x60: str
= "Protocol Error between BSS and MSC"; break;
1060 case 0x61: str
= "VGCS/VBS call non existent"; break;
1061 case 0x62: str
= "DTM Handover - Timer Expiry"; break;
1064 if ((oct
>= 0x19) && (oct
<= 0x1f)) { str
= "Reserved for national use"; }
1065 else if ((oct
>= 0x2c) && (oct
<= 0x2f)) { str
= "Reserved for national use"; }
1066 else if ((oct
>= 0x38) && (oct
<= 0x3e)) { str
= "Reserved for international use"; }
1067 else if ((oct
>= 0x48) && (oct
<= 0x4f)) { str
= "Reserved for national use"; }
1068 else if ((oct
>= 0x58) && (oct
<= 0x5f)) { str
= "Reserved for national use"; }
1069 else if ((oct
>= 0x63) && (oct
<= 0x67)) { str
= "Reserved for international use"; }
1070 else if ((oct
>= 0x68) && (oct
<= 0x6f)) { str
= "Reserved for national use"; }
1071 else if ((oct
>= 0x70) && (oct
<= 0x77)) { str
= "Reserved for international use"; }
1072 else if ((oct
>= 0x78) && (oct
<= 0x7f)) { str
= "Reserved for national use"; }
1073 else { str
= "Unknown"; }
1077 other_decode_bitfield_value(a_bigbuf
, oct
, 0x7f, 8);
1078 proto_tree_add_uint_format(tree
, hf_gsm_a_bssmap_cause
,
1079 tvb
, curr_offset
, 1, oct
& 0x7f,
1080 "%s = Cause: (%u) %s",
1088 g_snprintf(add_string
, string_len
, " - (%u) %s", oct
& 0x7f, str
);
1091 EXTRANEOUS_DATA_CHECK(len
, curr_offset
- offset
);
1093 return(curr_offset
- offset
);
1097 * IMSI coded as the value part of the Mobile Identity IE defined in 3GPP TS 24.008 (NOTE 1)
1098 * NOTE 1: The Type of identity field in the Mobile Identity IE shall be ignored by the receiver.
1099 * Dissected in packet-gsm_a_common.c (de_mid)
1106 be_tmsi(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
, gchar
*add_string
, int string_len
)
1108 guint32 curr_offset
;
1111 curr_offset
= offset
;
1113 value
= tvb_get_ntohl(tvb
, curr_offset
);
1115 proto_tree_add_uint(tree
, hf_gsm_a_tmsi
,
1116 tvb
, curr_offset
, 4,
1120 g_snprintf(add_string
, string_len
, " - (0x%04x)", value
);
1124 EXTRANEOUS_DATA_CHECK(len
, curr_offset
- offset
);
1126 return(curr_offset
- offset
);
1130 * [2] 3.2.2.8 Number Of MSs
1133 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_
)
1135 guint32 curr_offset
;
1137 curr_offset
= offset
;
1139 proto_tree_add_item(tree
, hf_gsm_a_bssmap_num_ms
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1142 EXTRANEOUS_DATA_CHECK(len
, curr_offset
- offset
);
1144 return(curr_offset
- offset
);
1147 * [2] 3.2.2.9 Layer 3 Header Information
1151 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_
)
1154 guint32 curr_offset
;
1156 curr_offset
= offset
;
1158 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, curr_offset
<<3, 4, ENC_BIG_ENDIAN
);
1160 proto_tree_add_item(tree
, hf_gsm_a_L3_protocol_discriminator
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1164 NO_MORE_DATA_CHECK(len
);
1166 oct
= tvb_get_guint8(tvb
, curr_offset
);
1168 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, curr_offset
<<3, 4, ENC_BIG_ENDIAN
);
1170 other_decode_bitfield_value(a_bigbuf
, oct
, 0x08, 8);
1171 proto_tree_add_text(tree
,
1172 tvb
, curr_offset
, 1,
1175 ((oct
& 0x08) ? "allocated by receiver" : "allocated by sender"));
1177 other_decode_bitfield_value(a_bigbuf
, oct
, 0x07, 8);
1178 proto_tree_add_text(tree
,
1179 tvb
, curr_offset
, 1,
1186 EXTRANEOUS_DATA_CHECK(len
, curr_offset
- offset
);
1188 return(curr_offset
- offset
);
1192 * [2] 3.2.2.10 Encryption Information
1195 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_
)
1200 guint32 curr_offset
;
1202 curr_offset
= offset
;
1204 oct
= tvb_get_guint8(tvb
, curr_offset
);
1211 other_decode_bitfield_value(a_bigbuf
, oct
, mask
, 8);
1212 proto_tree_add_text(tree
,
1213 tvb
, curr_offset
, 1,
1214 "%s = GSM A5/%u: %spermitted",
1217 (mask
& oct
) ? "" : "not ");
1222 while (mask
!= 0x01);
1224 other_decode_bitfield_value(a_bigbuf
, oct
, mask
, 8);
1225 proto_tree_add_text(tree
,
1226 tvb
, curr_offset
, 1,
1227 "%s = No encryption: %spermitted",
1229 (mask
& oct
) ? "" : "not ");
1233 NO_MORE_DATA_CHECK(len
);
1235 proto_tree_add_text(tree
,
1236 tvb
, curr_offset
, len
- (curr_offset
- offset
),
1238 tvb_bytes_to_str(tvb
, curr_offset
, len
-(curr_offset
-offset
) ));
1240 curr_offset
+= len
- (curr_offset
- offset
);
1242 EXTRANEOUS_DATA_CHECK(len
, curr_offset
- offset
);
1244 return(curr_offset
- offset
);
1248 * [2] 3.2.2.11 Channel Type
1251 static const value_string gsm_a_bssap_speech_data_ind_vals
[] = {
1255 { 0x3, "Signalling"},
1256 { 0x4, "Speech + CTM Text Telephony"},
1271 /* Channel Rate and Type */
1272 static const value_string gsm_a_bssap_channel_rate_and_type_vals
[] = {
1273 { 0x08, "Full rate TCH channel Bm. Prefer full rate TCH"},
1274 { 0x09, "Half rate TCH channel Lm. Prefer half rate TCH"},
1275 { 0x0a, "Full or Half rate channel, Full rate preferred changes allowed after first allocation"},
1276 { 0x0b, "Full or Half rate channel, Half rate preferred changes allowed after first allocation"},
1277 { 0x0f, "Full or Half rate channel, changes allowed after first allocation"},
1278 { 0x1a, "Full or Half rate channel, Full rate preferred changes between full and half rate not allowed after first allocation"},
1279 { 0x1b, "Full or Half rate channel, Half rate preferred changes between full and half rate not allowed after first allocation"},
1280 { 0x1f, "Full or Half rate channel, changes between full and half rate not allowed after first allocation"},
1284 /* Bits 7-1 indicate the permitted speech version identifier; */
1285 static const value_string gsm_a_bssap_perm_speech_v_ind_vals
[] = {
1286 { 0x01, "GSM speech full rate version 1 (GSM FR)"},
1287 { 0x05, "GSM speech half rate version 1 (GSM HR)"},
1288 { 0x11, "GSM speech full rate version 2 (GSM EFR)"},
1289 { 0x15, "GSM speech half rate version 2"},
1290 { 0x21, "GSM speech full rate version 3 (FR AMR)"},
1291 { 0x25, "GSM speech half rate version 3 (HR AMR)"},
1292 { 0x41, "GSM speech full rate version 4 (OFR AMR-WB)"},
1293 { 0x42, "GSM speech full rate version 5 (FR AMR-WB)"},
1294 { 0x46, "GSM speech half rate version 4 (OHR AMR-WB)"},
1295 { 0x45, "GSM speech half rate version 6 (OHR AMR)"},
1300 be_chan_type(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
, gchar
*add_string
, int string_len
)
1305 guint32 curr_offset
;
1308 curr_offset
= offset
;
1310 oct
= tvb_get_guint8(tvb
, curr_offset
);
1313 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, curr_offset
<<3, 4, ENC_BIG_ENDIAN
);
1314 proto_tree_add_item(tree
, hf_gsm_a_bssmap_speech_data_ind
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1317 g_snprintf(add_string
, string_len
, " - (%s)", val_to_str_const(tvb_get_guint8(tvb
, curr_offset
) & 0x0f,
1318 gsm_a_bssap_speech_data_ind_vals
,
1323 NO_MORE_DATA_CHECK(len
);
1325 oct
= tvb_get_guint8(tvb
, curr_offset
);
1327 if ((sdi
== 0x01)||(sdi
== 0x04))
1330 proto_tree_add_item(tree
, hf_gsm_a_bssmap_channel_rate_and_type
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1332 NO_MORE_DATA_CHECK(len
);
1336 proto_tree_add_item(tree
, hf_gsm_a_bssmap_chan_type_extension
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1337 proto_tree_add_item(tree
, hf_gsm_a_bssmap_perm_speech_v_ind
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1340 while ((len
- (curr_offset
- offset
)) > 0);
1342 else if (sdi
== 0x02)
1350 case 0x00: str
= "SDCCH or Full rate TCH channel Bm or Half rate TCH channel Lm"; break;
1351 case 0x01: str
= "SDCCH "; break;
1352 case 0x02: str
= "SDCCH or Full rate TCH channel Bm"; break;
1353 case 0x03: str
= "Half rate TCH channel Lm"; break;
1354 case 0x08: str
= "Full rate TCH channel Bm"; break;
1355 case 0x09: str
= "Half rate TCH channel Lm"; break;
1356 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;
1357 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;
1358 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;
1359 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;
1361 if ((oct
>= 0x20) && (oct
<= 0x27))
1363 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";
1364 num_chan
= (oct
- 0x20) + 1;
1366 else if ((oct
>= 0x30) && (oct
<= 0x37))
1368 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";
1369 num_chan
= (oct
- 0x30) + 1;
1380 proto_tree_add_text(tree
,
1381 tvb
, curr_offset
, 1,
1382 "Channel Rate and Type: Max channels %u, %s",
1388 proto_tree_add_text(tree
,
1389 tvb
, curr_offset
, 1,
1390 "Channel Rate and Type: %s",
1396 NO_MORE_DATA_CHECK(len
);
1398 oct
= tvb_get_guint8(tvb
, curr_offset
);
1400 proto_tree_add_item(tree
, hf_gsm_a_bssmap_chan_type_extension
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1402 other_decode_bitfield_value(a_bigbuf
, oct
, 0x40, 8);
1403 proto_tree_add_text(tree
,
1404 tvb
, curr_offset
, 1,
1405 "%s = %sTransparent service",
1407 (oct
& 0x40) ? "Non-" : "");
1413 /* non-transparent */
1417 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;
1418 case 0x18: str
= "14.5 kbit/s"; break;
1419 case 0x10: str
= "12 kbits/s"; break;
1420 case 0x11: str
= "6 kbits/s"; break;
1421 case 0x31: str
= "29 kbit/s"; break;
1422 case 0x34: str
= "43,5 kbit/s"; break;
1432 case 0x18: str
= "14.4 kbit/s"; break;
1433 case 0x10: str
= "9.6kbit/s"; break;
1434 case 0x11: str
= "4.8kbit/s"; break;
1435 case 0x12: str
= "2.4kbit/s"; break;
1436 case 0x13: str
= "1.2Kbit/s"; break;
1437 case 0x14: str
= "600 bit/s"; break;
1438 case 0x15: str
= "1200/75 bit/s (1200 network-to-MS / 75 MS-to-network)"; break;
1439 case 0x39: str
= "28,8 kbit/s"; break;
1440 case 0x3a: str
= "32,0 kbit/s"; break;
1451 /* non-transparent */
1455 case 0x16: str
= "58 kbit/s (4x14.5 kbit/s)"; break;
1456 case 0x14: str
= "48.0 / 43.5 kbit/s (4x12 kbit/s or 3x14.5 kbit/s)"; break;
1457 case 0x13: str
= "36.0 / 29.0 kbit/s (3x12 kbit/s or 2x14.5 kbit/s)"; break;
1458 case 0x12: str
= "24.0 / 24.0 (4x6 kbit/s or 2x12 kbit/s)"; break;
1459 case 0x11: str
= "18.0 / 14.5 kbit/s (3x6 kbit/s or 1x14.5 kbit/s)"; break;
1460 case 0x10: str
= "12.0 / 12.0 kbit/s (2x6 kbit/s or 1x12 kbit/s)"; break;
1470 case 0x1f: str
= "64 kbit/s, bit transparent"; break;
1471 case 0x1e: str
= "56 kbit/s, bit transparent"; break;
1472 case 0x1d: str
= "56 kbit/s"; break;
1473 case 0x1c: str
= "48 kbit/s"; break;
1474 case 0x1b: str
= "38.4 kbit/s"; break;
1475 case 0x1a: str
= "28.8 kbit/s"; break;
1476 case 0x19: str
= "19.2 kbit/s"; break;
1477 case 0x18: str
= "14.4 kbit/s"; break;
1478 case 0x10: str
= "9.6 kbit/s"; break;
1486 other_decode_bitfield_value(a_bigbuf
, oct
, 0x3f, 8);
1487 proto_tree_add_text(tree
,
1488 tvb
, curr_offset
, 1,
1495 NO_MORE_DATA_CHECK(len
);
1497 oct
= tvb_get_guint8(tvb
, curr_offset
);
1499 proto_tree_add_item(tree
, hf_gsm_a_bssmap_chan_type_extension
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1501 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, (curr_offset
<<3)+1, 3, ENC_BIG_ENDIAN
);
1505 other_decode_bitfield_value(a_bigbuf
, oct
, 0x08, 8);
1506 proto_tree_add_text(tree
,
1507 tvb
, curr_offset
, 1,
1508 "%s = 14.5 kbit/s (TCH/F14.4) %sallowed",
1510 (oct
& 0x08) ? "" : "not ");
1512 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, (curr_offset
<<3)+6, 1, ENC_BIG_ENDIAN
);
1514 other_decode_bitfield_value(a_bigbuf
, oct
, 0x02, 8);
1515 proto_tree_add_text(tree
,
1516 tvb
, curr_offset
, 1,
1517 "%s = 12.0 kbit/s (TCH F/9.6) %sallowed",
1519 (oct
& 0x02) ? "" : "not ");
1521 other_decode_bitfield_value(a_bigbuf
, oct
, 0x01, 8);
1522 proto_tree_add_text(tree
,
1523 tvb
, curr_offset
, 1,
1524 "%s = 6.0 kbit/s (TCH F/4.8) %sallowed",
1526 (oct
& 0x01) ? "" : "not ");
1530 other_decode_bitfield_value(a_bigbuf
, oct
, 0x08, 8);
1531 proto_tree_add_text(tree
,
1532 tvb
, curr_offset
, 1,
1533 "%s = 14.5/14.4 kbit/s (TCH/F14.4) %sallowed",
1535 (oct
& 0x08) ? "" : "not ");
1537 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, (curr_offset
<<3)+6, 1, ENC_BIG_ENDIAN
);
1539 other_decode_bitfield_value(a_bigbuf
, oct
, 0x02, 8);
1540 proto_tree_add_text(tree
,
1541 tvb
, curr_offset
, 1,
1542 "%s = 12.0/9.6 kbit/s (TCH F/9.6) %sallowed",
1544 (oct
& 0x02) ? "" : "not ");
1546 other_decode_bitfield_value(a_bigbuf
, oct
, 0x01, 8);
1547 proto_tree_add_text(tree
,
1548 tvb
, curr_offset
, 1,
1549 "%s = 6.0/4.8 kbit/s (TCH F/4.8) %sallowed",
1551 (oct
& 0x01) ? "" : "not ");
1556 else if (sdi
== 0x03)
1562 case 0x00: str
= "SDCCH or Full rate TCH channel Bm or Half rate TCH channel Lm"; break;
1563 case 0x01: str
= "SDCCH"; break;
1564 case 0x02: str
= "SDCCH or Full rate TCH channel Bm"; break;
1565 case 0x03: str
= "SDCCH or Half rate TCH channel Lm"; break;
1566 case 0x08: str
= "Full rate TCH channel Bm"; break;
1567 case 0x09: str
= "Half rate TCH channel Lm"; break;
1568 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;
1569 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;
1570 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;
1571 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;
1577 proto_tree_add_text(tree
,
1578 tvb
, curr_offset
, 1,
1579 "Channel Rate and Type: %s",
1584 NO_MORE_DATA_CHECK(len
);
1586 proto_tree_add_text(tree
,
1587 tvb
, curr_offset
, len
- (curr_offset
- offset
),
1590 curr_offset
+= len
- (curr_offset
- offset
);
1594 /* unknown format */
1596 proto_tree_add_text(tree
,
1597 tvb
, curr_offset
, len
- (curr_offset
- offset
),
1600 curr_offset
+= len
- (curr_offset
- offset
);
1603 EXTRANEOUS_DATA_CHECK(len
, curr_offset
- offset
);
1605 return(curr_offset
- offset
);
1608 * 3.2.2.12 Periodicity
1611 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_
)
1613 guint32 curr_offset
;
1615 curr_offset
= offset
;
1616 proto_tree_add_item(tree
, hf_gsm_a_bssmap_periodicity
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1619 return(curr_offset
- offset
);
1622 * 3.2.2.13 Extended Resource Indicator
1625 static const true_false_string bssmap_tarr_vals
= {
1626 "The total number of accessible channels is requested",
1627 "No extra Resource Information is requested"
1631 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_
)
1633 guint32 curr_offset
;
1635 curr_offset
= offset
;
1637 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, curr_offset
<<3, 6, ENC_BIG_ENDIAN
);
1638 /* the Subsequent Mode field */
1639 proto_tree_add_item(tree
, hf_gsm_a_bssmap_sm
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1640 /* Total Accessible Resource Requested field */
1641 proto_tree_add_item(tree
, hf_gsm_a_bssmap_tarr
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1645 return(curr_offset
- offset
);
1648 * 3.2.2.14 Total Resource Accessible
1651 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_
)
1653 guint32 curr_offset
;
1655 curr_offset
= offset
;
1657 /* Total number of accessible full rate channels */
1658 proto_tree_add_item(tree
, hf_gsm_a_bssmap_tot_no_of_fullr_ch
, tvb
, curr_offset
, 2, ENC_BIG_ENDIAN
);
1660 /* Total number of accessible half rate channels */
1661 proto_tree_add_item(tree
, hf_gsm_a_bssmap_tot_no_of_hr_ch
, tvb
, curr_offset
, 2, ENC_BIG_ENDIAN
);
1668 * 3.2.2.15 LSA Identifier
1669 * 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.
1672 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_
)
1674 guint32 curr_offset
;
1676 curr_offset
= offset
;
1679 * The LSA ID consists of 24 bits, numbered from 0 to 23, with bit 0 being the LSB.
1680 * Bit 0 indicates whether the LSA is a PLMN significant number or a universal LSA.
1681 * If the bit is set to 0 the LSA is a PLMN significant number; if it is set to
1682 * 1 it is a universal LSA.
1684 proto_tree_add_item(tree
, hf_gsm_a_bssmap_lsa_id
, tvb
, curr_offset
, 3, ENC_BIG_ENDIAN
);
1693 * 3.2.2.16 LSA Identifier List
1696 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_
)
1698 guint32 curr_offset
;
1700 curr_offset
= offset
;
1702 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, curr_offset
<<3, 7, ENC_BIG_ENDIAN
);
1703 proto_tree_add_item(tree
, hf_gsm_a_bssmap_ep
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1706 /* LSA identification 1 - n */
1708 while (curr_offset
-offset
< len
) {
1709 proto_tree_add_item(tree
, hf_gsm_a_bssmap_lsa_id
, tvb
, curr_offset
, 3, ENC_BIG_ENDIAN
);
1716 * [2] 3.2.2.17 Cell Identifier
1717 * Formats everything after the discriminator, shared function
1720 be_cell_id_aux(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
, guint32 offset
, guint len
, gchar
*add_string
, int string_len
, guint8 disc
)
1723 guint32 curr_offset
;
1726 add_string
[0] = '\0';
1727 curr_offset
= offset
;
1737 case 0x08: /* For intersystem handover from GSM to UMTS or cdma2000: */
1740 /* Serving Area Identity, SAI, is used to identify the Serving Area of UE
1741 * within UTRAN or cdma2000.
1742 * Coding of Cell Identification for Cell identification discriminator = 1011
1743 * The coding of SAI is defined in 3GPP TS 25.413, without the protocol extension
1746 * SAI ::= SEQUENCE {
1747 * pLMNidentity PLMNidentity,
1750 * iE-Extensions ProtocolExtensionContainer { {SAI-ExtIEs} } OPTIONAL
1754 case 0x0c: /* For identification of a UTRAN cell for cell load information: */
1756 curr_offset
= dissect_e212_mcc_mnc(tvb
, pinfo
, tree
, curr_offset
, TRUE
);
1758 curr_offset
= dissect_e212_mcc_mnc(tvb
, pinfo
, tree
, curr_offset
, FALSE
);
1763 case 0x0a: /*For intersystem handover from GSM to UMTS or cdma2000: */
1765 value
= tvb_get_ntohs(tvb
, curr_offset
);
1766 proto_tree_add_item(tree
, hf_gsm_a_bssmap_cell_lac
, tvb
, curr_offset
, 2, ENC_BIG_ENDIAN
);
1770 g_snprintf(add_string
, string_len
, " - LAC (0x%04x)", value
);
1773 /* If SAI, SAC follows */
1774 proto_tree_add_item(tree
, hf_gsm_a_bssmap_sac
, tvb
, curr_offset
, 2, ENC_BIG_ENDIAN
);
1779 case 0x09: /* For intersystem handover from GSM to UMTS or cdma2000: */
1781 if ((disc
== 0x08) ||(disc
== 0x09) || (disc
== 0x0a)|| (disc
== 0x0c)) {
1783 * The octets 9-10 are coded as the RNC-ID (0..4095) or the
1784 * Extended RNC-ID (4096..65535) specified in 3GPP TS 25.413 [31]:
1785 * XXX is this a PER encoded number?
1787 value
= tvb_get_ntohs(tvb
, curr_offset
);
1788 proto_tree_add_item(tree
, hf_gsm_a_bssmap_be_rnc_id
, tvb
, curr_offset
, 2, ENC_BIG_ENDIAN
);
1793 if (add_string
[0] == '\0')
1795 g_snprintf(add_string
, string_len
, " - RNC-ID (%u)", value
);
1799 g_snprintf(add_string
, string_len
, "%s/RNC-ID (%u)", add_string
, value
);
1805 if ((disc
== 0x04) || (disc
== 0x05) || (disc
== 0x08)) break;
1812 value
= tvb_get_ntohs(tvb
, curr_offset
);
1813 proto_tree_add_uint(tree
, hf_gsm_a_bssmap_cell_ci
, tvb
,
1814 curr_offset
, 2, value
);
1820 if (add_string
[0] == '\0')
1822 g_snprintf(add_string
, string_len
, " - CI (%u)", value
);
1826 g_snprintf(add_string
, string_len
, "%s/CI (%u)", add_string
, value
);
1831 proto_tree_add_text(tree
, tvb
, curr_offset
, len
,
1832 "Cell ID - Unknown format");
1834 curr_offset
+= (len
);
1838 return(curr_offset
- offset
);
1842 be_cell_id(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string
, int string_len
)
1846 guint32 curr_offset
;
1848 curr_offset
= offset
;
1850 oct
= tvb_get_guint8(tvb
, curr_offset
);
1852 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, curr_offset
<<3, 4, ENC_BIG_ENDIAN
);
1853 proto_tree_add_item(tree
, hf_gsm_a_bssmap_be_cell_id_disc
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1855 cell_discriminator
= disc
; /* may be required later */
1858 NO_MORE_DATA_CHECK(len
);
1861 be_cell_id_aux(tvb
, tree
, pinfo
, curr_offset
, len
- (curr_offset
- offset
), add_string
, string_len
, disc
);
1863 /* no length check possible */
1865 return(curr_offset
- offset
);
1869 * [2] 3.2.2.18 Priority
1871 static const true_false_string bssmap_pci_value
= {
1872 "This allocation request may preempt an existing connection",
1873 "This allocation request shall not preempt an existing connection"
1876 static const true_false_string bssmap_pvi_value
= {
1877 "This connection might be preempted by another allocation request",
1878 "This connection shall not be preempted by another allocation request"
1882 be_prio(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string
, int string_len
)
1885 guint32 curr_offset
;
1888 curr_offset
= offset
;
1890 oct
= tvb_get_guint8(tvb
, curr_offset
);
1892 proto_tree_add_item(tree
, hf_gsm_a_b8spare
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1893 proto_tree_add_item(tree
, hf_gsm_a_bssmap_pci
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1896 switch ((oct
& 0x3c) >> 2)
1898 case 0x00: str
= "Spare"; break;
1899 case 0x0f: str
= "priority not used"; break;
1901 str
= "1 is highest";
1905 other_decode_bitfield_value(a_bigbuf
, oct
, 0x3c, 8);
1906 proto_tree_add_text(tree
,
1907 tvb
, curr_offset
, 1,
1908 "%s = Priority Level: (%u) %s",
1914 g_snprintf(add_string
, string_len
, " - (%u)", (oct
& 0x3c) >> 2);
1916 proto_tree_add_item(tree
, hf_gsm_a_bssmap_qa
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1917 proto_tree_add_item(tree
, hf_gsm_a_bssmap_pvi
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1921 /* no length check possible */
1923 return(curr_offset
- offset
);
1926 * 3.2.2.19 Classmark Information Type 2
1927 * The classmark octets 3, 4 and 5 are coded in the same way as the
1928 * equivalent octets in the Mobile station classmark 2 element of
1930 * dissected in packet-gsm_a_common.c
1933 * 3.2.2.20 Classmark Information Type 3
1934 * The classmark octets 3 to 34 are coded in the same way as the
1935 * equivalent octets in the Mobile station classmark 3 element of
1937 * dissected in packet-gsm_a_common.c
1940 * 3.2.2.21 Interference Band To Be Used
1943 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_
)
1945 guint32 curr_offset
;
1947 curr_offset
= offset
;
1949 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, curr_offset
<<3, 3, ENC_BIG_ENDIAN
);
1950 proto_tree_add_item(tree
, hf_gsm_a_bssmap_interference_bands
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1954 return(curr_offset
- offset
);
1958 * Octet 2 is coded as the equivalent field from 3GPP TS 24.008
1959 * Dissected in packet-gsm_a_rr.c
1962 * 3.2.2.23 LSA Information
1965 static const true_false_string bssmap_lsa_only_value
= {
1966 "Access to the LSAs that are defined ",
1967 "Allowing emergency call"
1971 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_
)
1973 guint32 curr_offset
;
1975 curr_offset
= offset
;
1977 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, curr_offset
<<3, 7, ENC_BIG_ENDIAN
);
1978 proto_tree_add_item(tree
, hf_gsm_a_bssmap_lsa_only
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1981 while (curr_offset
-offset
< len
) {
1982 /* LSA identification and attributes */
1984 * spare act pref priority
1986 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, curr_offset
<<3, 2, ENC_BIG_ENDIAN
);
1987 proto_tree_add_item(tree
, hf_gsm_a_bssmap_act
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1988 proto_tree_add_item(tree
, hf_gsm_a_bssmap_pref
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1989 proto_tree_add_item(tree
, hf_gsm_a_bssmap_lsa_inf_prio
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
1991 proto_tree_add_item(tree
, hf_gsm_a_bssmap_lsa_id
, tvb
, curr_offset
, 3, ENC_BIG_ENDIAN
);
1998 * [2] 3.2.2.24 Layer 3 Information
2001 be_l3_info(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
)
2003 guint32 curr_offset
;
2006 curr_offset
= offset
;
2008 proto_tree_add_text(tree
, tvb
, curr_offset
, len
,
2009 "Layer 3 Information value");
2012 * dissect the embedded DTAP message
2014 l3_tvb
= tvb_new_subset(tvb
, curr_offset
, len
, len
);
2016 /* This information element carries a radio interface message.
2017 In the case of an Intersystem handover to UMTS,
2018 this information element contains a HANDOVER TO UTRAN COMMAND message
2019 as defined in 3GPP TS 25.331.
2020 In the case of an Inter BSC handover,
2021 it contains an RR HANDOVER COMMAND message as defined in 3GPP TS 44.018.
2022 In the case of an Intersystem handover to cdma2000,
2023 this information element contains the HANDOVER TO CDMA2000 COMMAND message,
2024 as defined in 3GPP TS 44.018. */
2026 /* note that we can't (from this PDU alone) determine whether a handover is to UMTS or cdma2000
2027 Maybe if cdma2000 support is added later, a preference option would select dissection of cdma2000 or UMTS.
2028 If SCCP trace is enabled (and the cell discriminator has correctly appeared in an earlier PDU)
2029 then we will have remembered the discriminator */
2030 if ( cell_discriminator
== 0xFF)
2032 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");
2034 else if ((cell_discriminator
& 0x0f) < 8) {
2036 call_dissector(dtap_handle
, l3_tvb
, pinfo
, g_tree
);
2038 else if ((cell_discriminator
& 0x0f) < 13) {
2040 /* UMTS or CDMA 2000 */
2041 dissect_rrc_HandoverToUTRANCommand_PDU(l3_tvb
, pinfo
, g_tree
, NULL
);
2044 proto_tree_add_text(tree
, l3_tvb
, curr_offset
, len
, "Unrecognised Cell Discriminator %x",cell_discriminator
);
2048 EXTRANEOUS_DATA_CHECK(len
, curr_offset
- offset
);
2050 return(curr_offset
- offset
);
2057 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_
)
2060 guint32 curr_offset
;
2061 proto_item
*item
= NULL
;
2062 proto_tree
*subtree
= NULL
;
2064 curr_offset
= offset
;
2067 proto_tree_add_text(tree
, tvb
, curr_offset
, 1,
2068 "Data Link Connection Identifier");
2070 subtree
= proto_item_add_subtree(item
, ett_dlci
);
2072 oct
= tvb_get_guint8(tvb
, curr_offset
);
2074 proto_tree_add_uint(subtree
, hf_gsm_a_bssmap_dlci_cc
, tvb
, curr_offset
, 1, oct
);
2075 proto_tree_add_uint(subtree
, hf_gsm_a_bssmap_dlci_spare
, tvb
, curr_offset
, 1, oct
);
2076 proto_tree_add_uint(subtree
, hf_gsm_a_bssmap_dlci_sapi
, tvb
, curr_offset
, 1, oct
);
2080 /* no length check possible */
2082 return(curr_offset
- offset
);
2086 * [2] 3.2.2.26 Downlink DTX Flag
2089 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_
)
2092 guint32 curr_offset
;
2094 curr_offset
= offset
;
2096 oct
= tvb_get_guint8(tvb
, curr_offset
);
2098 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, curr_offset
<<3, 7, ENC_BIG_ENDIAN
);
2099 other_decode_bitfield_value(a_bigbuf
, oct
, 0x01, 8);
2100 proto_tree_add_text(tree
,
2101 tvb
, curr_offset
, 1,
2102 "%s = BSS is %s to activate DTX in the downlink direction",
2104 (oct
& 0x01) ? "forbidden" : "allowed");
2108 /* no length check possible */
2110 return(curr_offset
- offset
);
2114 * [2] 3.2.2.27 Cell Identifier List
2117 be_cell_id_list(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
, guint32 offset
, guint len
, gchar
*add_string
, int string_len
)
2123 guint32 curr_offset
;
2124 proto_item
*item
= NULL
;
2125 proto_tree
*subtree
= NULL
;
2127 curr_offset
= offset
;
2129 oct
= tvb_get_guint8(tvb
, curr_offset
);
2131 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, curr_offset
<<3, 4, ENC_BIG_ENDIAN
);
2134 cell_discriminator
= disc
; /* may be required later */
2135 proto_tree_add_item(tree
, hf_gsm_a_bssmap_be_cell_id_disc
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
2138 NO_MORE_DATA_CHECK(len
);
2144 proto_tree_add_text(tree
,
2145 tvb
, curr_offset
, -1,
2149 subtree
= proto_item_add_subtree(item
, ett_cell_list
);
2152 add_string
[0] = '\0';
2155 be_cell_id_aux(tvb
, subtree
, pinfo
, curr_offset
, len
- (curr_offset
- offset
), add_string
, string_len
, disc
);
2157 if (add_string
&& add_string
[0] != '\0')
2158 proto_item_append_text(item
, "%s", add_string
);
2160 proto_item_set_len(item
, consumed
);
2162 curr_offset
+= consumed
;
2166 while ((len
- (curr_offset
- offset
)) > 0 && consumed
> 0);
2169 g_snprintf(add_string
, string_len
, " - %u cell%s",
2170 num_cells
, plurality(num_cells
, "", "s"));
2173 EXTRANEOUS_DATA_CHECK(len
, curr_offset
- offset
);
2175 return(curr_offset
- offset
);
2178 * 3.2.2.27a Cell Identifier List Segment
2181 static const value_string gsm_a_bssap_cell_id_list_seg_cell_id_disc_vals
[] = {
2182 { 0x0, "The whole Cell Global Identification, CGI, is used to identify the cells"},
2183 { 0x1, "Location Area Code, LAC, and Cell Identify, CI, is used to identify the cells within a given MCC and MNC"},
2184 { 0x2, "Cell Identity, CI, is used to identify the cells within a given MCC and MNC and LAC"},
2185 { 0x3, "No cell is associated with the transaction"},
2186 { 0x4, "Location Area Identification, LAI, is used to identify all cells within a Location Area"},
2187 { 0x5, "Location Area Code, LAC, is used to identify all cells within a location area"},
2188 { 0x6, "All cells on the BSS are identified"},
2189 { 0x7, "MCC and MNC, is used to identify all cells within the given MCC and MNC"},
2194 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_
)
2196 guint32 curr_offset
;
2198 curr_offset
= offset
;
2200 /* Sequence Length */
2201 proto_tree_add_item(tree
, hf_gsm_a_bssmap_seq_len
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
2202 /* Sequence Number */
2203 proto_tree_add_item(tree
, hf_gsm_a_bssmap_seq_no
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
2206 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, curr_offset
<<3, 4, ENC_BIG_ENDIAN
);
2207 /* Cell identification discriminator */
2208 proto_tree_add_item(tree
, hf_gsm_a_bssap_cell_id_list_seg_cell_id_disc
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
2210 proto_tree_add_text(tree
, tvb
, curr_offset
, len
-2, "Not decoded yet");
2217 * 3.2.2.27b Cell Identifier List Segment for established cells
2220 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_
)
2222 guint32 curr_offset
;
2224 curr_offset
= offset
;
2226 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, curr_offset
<<3, 4, ENC_BIG_ENDIAN
);
2227 /* Cell identification discriminator */
2228 proto_tree_add_item(tree
, hf_gsm_a_bssap_cell_id_list_seg_cell_id_disc
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
2231 proto_tree_add_text(tree
, tvb
, curr_offset
, len
-1, "Not decoded yet");
2237 * 3.2.2.27c Cell Identifier List Segment for cells to be established
2240 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_
)
2242 guint32 curr_offset
;
2244 curr_offset
= offset
;
2246 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, curr_offset
<<3, 4, ENC_BIG_ENDIAN
);
2247 /* Cell identification discriminator */
2248 proto_tree_add_item(tree
, hf_gsm_a_bssap_cell_id_list_seg_cell_id_disc
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
2251 proto_tree_add_text(tree
, tvb
, curr_offset
, len
-1, "Not decoded yet");
2260 * 3.2.2.27e Cell Identifier List Segment for released cells - no user present
2263 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_
)
2265 guint32 curr_offset
;
2267 curr_offset
= offset
;
2269 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, curr_offset
<<3, 4, ENC_BIG_ENDIAN
);
2270 /* Cell identification discriminator */
2271 proto_tree_add_item(tree
, hf_gsm_a_bssap_cell_id_list_seg_cell_id_disc
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
2274 proto_tree_add_text(tree
, tvb
, curr_offset
, len
-1, "Not decoded yet");
2280 * 3.2.2.27f Cell Identifier List Segment for not established cells - no establishment possible
2283 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_
)
2285 guint32 curr_offset
;
2287 curr_offset
= offset
;
2289 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, curr_offset
<<3, 4, ENC_BIG_ENDIAN
);
2290 /* Cell identification discriminator */
2291 proto_tree_add_item(tree
, hf_gsm_a_bssap_cell_id_list_seg_cell_id_disc
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
2294 proto_tree_add_text(tree
, tvb
, curr_offset
, len
-1, "Not decoded yet");
2300 * 3.2.2.28 Response Request
2304 * 3.2.2.29 Resource Indication Method
2306 static const value_string gsm_a_bssap_resource_indication_vals
[] = {
2307 { 0x0, "Spontaneous resource information expected"},
2308 { 0x1, "One single resource information expected"},
2309 { 0x2, "Periodic resource information expected"},
2310 { 0x3, "No cell is associated with the transaction"},
2311 { 0x4, "No resource information expected"},
2315 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_
)
2317 guint32 curr_offset
;
2319 curr_offset
= offset
;
2321 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, curr_offset
<<3, 4, ENC_BIG_ENDIAN
);
2322 proto_tree_add_item(tree
, hf_gsm_a_bssap_res_ind_method
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
2329 * 3.2.2.30 Classmark Information Type 1
2330 * coded in the same way as the equivalent octet in the classmark 1 element of 3GPP TS 24.008
2331 * dissected in packet-gsm_a_common.c
2334 * 3.2.2.31 Circuit Identity Code List
2337 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_
)
2339 guint32 curr_offset
;
2341 curr_offset
= offset
;
2343 proto_tree_add_item(tree
, hf_gsm_a_bssap_cic_list_range
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
2344 proto_tree_add_item(tree
, hf_gsm_a_bssap_cic_list_status
, tvb
, (curr_offset
+1), (len
-1), ENC_NA
);
2349 * 3.2.2.32 Diagnostics
2352 be_diag(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
)
2354 guint32 curr_offset
;
2356 curr_offset
= offset
;
2358 proto_tree_add_item(tree
, hf_gsm_a_bssap_diag_error_pointer
, tvb
, curr_offset
, 2, ENC_BIG_ENDIAN
);
2360 NO_MORE_DATA_CHECK(len
);
2361 proto_tree_add_item(tree
, hf_gsm_a_bssap_diag_msg_rcv
, tvb
, curr_offset
, (len
-2), ENC_NA
);
2366 * [2] 3.2.2.33 Chosen Channel
2368 static const value_string gsm_a_bssmap_ch_mode_vals
[] = {
2369 { 0, "no channel mode indication" },
2370 { 9, "speech (full rate or half rate)" },
2371 { 14, "data, 14.5 kbit/s radio interface rate" },
2372 { 11, "data, 12.0 kbit/s radio interface rate" },
2373 { 12, "data, 6.0 kbit/s radio interface rate" },
2374 { 13, "data, 3.6 kbit/s radio interface rate" },
2375 { 8, "signalling only" },
2376 { 1, "data, 29.0 kbit/s radio interface rate" },
2377 { 2, "data, 32.0 kbit/s radio interface rate" },
2378 { 3, "data, 43.5 kbit/s radio interface rate" },
2379 { 4, "data, 43.5 kbit/s downlink and 14.5 kbit/s uplink" },
2380 { 5, "data, 29.0 kbit/s downlink and 14.5 kbit/s uplink" },
2381 { 6, "data, 43.5 kbit/s downlink and 29.0 kbit/s uplink" },
2382 { 7, "data, 14.5 kbit/s downlink and 43.5 kbit/s uplink" },
2383 { 10, "data, 14.5 kbit/s downlink and 29.0 kbit/s uplink" },
2384 { 15, "data, 29.0 kbit/s downlink and 43.5 kbit/s uplink" },
2387 static const value_string gsm_a_bssmap_channel_vals
[] = {
2388 { 0, "None(Current Channel Type 1 - Reserved)" },
2395 { 8, "1 Full rate TCH" },
2396 { 9, "1 Half rate TCH" },
2397 { 10, "2 Full Rate TCHs" },
2398 { 11, "3 Full Rate TCHs" },
2399 { 12, "4 Full Rate TCHs" },
2400 { 13, "5 Full Rate TCHs" },
2401 { 14, "6 Full Rate TCHs" },
2402 { 15, "7 Full Rate TCHs" },
2403 { 4, "8 Full Rate TCHs" },
2406 static const value_string gsm_a_bssmap_trace_bss_record_type_vals
[] = {
2410 { 3, "No BSS Trace" },
2413 static const value_string gsm_a_bssmap_trace_msc_record_type_vals
[] = {
2415 { 1, "Detailed (optional)" },
2417 { 3, "No MSC Trace" },
2420 static const value_string gsm_a_bssmap_trace_invoking_event_vals
[] = {
2421 { 0, "MOC, MTC, SMS MO, SMS MT, PDS MO, PDS MT, SS, Location Updates, IMSI attach, IMSI detach" },
2422 { 1, "MOC, MTC, SMS_MO, SMS_MT, PDS MO, PDS MT, SS only" },
2423 { 2, "Location updates, IMSI attach IMSI detach only" },
2424 { 3, "Operator definable" },
2428 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_
)
2430 guint32 curr_offset
;
2432 curr_offset
= offset
;
2435 proto_tree_add_item(tree
, hf_gsm_a_bssmap_ch_mode
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
2437 proto_tree_add_item(tree
, hf_gsm_a_bssmap_channel
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
2441 /* no length check possible */
2443 return(curr_offset
- offset
);
2447 * [2] 3.2.2.34 Cipher Response Mode
2450 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_
)
2453 guint32 curr_offset
;
2455 curr_offset
= offset
;
2457 oct
= tvb_get_guint8(tvb
, curr_offset
);
2459 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, curr_offset
<<3, 7, ENC_BIG_ENDIAN
);
2461 other_decode_bitfield_value(a_bigbuf
, oct
, 0x01, 8);
2462 proto_tree_add_text(tree
,
2463 tvb
, curr_offset
, 1,
2464 "%s = IMEISV must %sbe included by the mobile station",
2466 (oct
& 0x01) ? "" : "not ");
2470 /* no length check possible */
2472 return(curr_offset
- offset
);
2477 * [2] 3.2.2.35 Layer 3 Message Contents
2480 be_l3_msg(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
)
2484 proto_tree_add_text(tree
, tvb
, offset
, len
,
2485 "Layer 3 Message Contents");
2488 * dissect the embedded DTAP message
2490 l3_tvb
= tvb_new_subset(tvb
, offset
, len
, len
);
2492 /* Octet j (j = 3, 4, ..., n) is the unchanged octet j of a radio interface layer 3 message
2493 * as defined in 3GPP TS 24.008, n is equal to the length of that radio interface layer 3 message. */
2494 call_dissector(dtap_handle
, l3_tvb
, pinfo
, g_tree
);
2500 * [2] 3.2.2.36 Channel Needed
2503 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_
)
2505 guint32 curr_offset
;
2507 curr_offset
= offset
;
2509 /* no length check possible */
2510 proto_tree_add_bits_item(tree
, hf_gsm_a_rr_chnl_needed_ch1
, tvb
, (curr_offset
<<3)+6, 2, ENC_BIG_ENDIAN
);
2514 return(curr_offset
- offset
);
2517 * 3.2.2.37 Trace Type
2518 * coded as the MSC/BSS Trace Type specified in 3GPP TS 52.008
2521 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_
)
2523 guint32 curr_offset
;
2526 bit_offset
= (offset
<<3);
2527 curr_offset
= offset
;
2529 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_trace_priority_indication
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
2531 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
2533 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_trace_bss_record_type
, tvb
, bit_offset
, 2, ENC_BIG_ENDIAN
);
2535 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_trace_msc_record_type
, tvb
, bit_offset
, 2, ENC_BIG_ENDIAN
);
2537 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_trace_invoking_event
, tvb
, bit_offset
, 2, ENC_BIG_ENDIAN
);
2538 /*bit_offset += 2;*/
2541 /* no length check possible */
2543 return(curr_offset
- offset
);
2547 * [2] 3.2.2.38 TriggerID
2550 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_
)
2552 guint32 curr_offset
;
2554 curr_offset
= offset
;
2556 proto_tree_add_item(tree
, hf_gsm_a_bssmap_trace_trigger_id
, tvb
, curr_offset
, len
, ENC_ASCII
|ENC_NA
);
2559 /* no length check possible */
2561 return(curr_offset
- offset
);
2564 /* 3.2.2.39 Trace Reference */
2566 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_
)
2568 guint32 curr_offset
;
2570 curr_offset
= offset
;
2573 proto_tree_add_item(tree
, hf_gsm_a_bssmap_trace_reference
, tvb
, curr_offset
, 2, ENC_BIG_ENDIAN
);
2576 /* no length check possible */
2578 return(curr_offset
- offset
);
2580 /* 3.2.2.40 TransactionID */
2582 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_
)
2584 guint32 curr_offset
;
2586 curr_offset
= offset
;
2591 proto_tree_add_item(tree
, hf_gsm_a_bssmap_trace_reference
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
2596 proto_tree_add_item(tree
, hf_gsm_a_bssmap_trace_reference
, tvb
, curr_offset
, 2, ENC_BIG_ENDIAN
);
2600 EXTRANEOUS_DATA_CHECK(len
, curr_offset
- offset
);
2602 return(curr_offset
- offset
);
2605 * 3.2.2.41 Mobile Identity (IMSI, IMEISV or IMEI as coded in 3GPP TS 24.008)
2606 * Dissected in packet-gsm_a_common.c
2610 * For the OMC identity, see 3GPP TS 52.021
2613 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_
)
2615 guint32 curr_offset
;
2617 curr_offset
= offset
;
2619 proto_tree_add_item(tree
, hf_gsm_a_bssmap_trace_omc_id
, tvb
, curr_offset
, len
, ENC_ASCII
|ENC_NA
);
2622 /* no length check possible */
2624 return(curr_offset
- offset
);
2627 * [2] 3.2.2.43 Forward Indicator
2630 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_
)
2633 guint32 curr_offset
;
2634 const gchar
*str
= NULL
;
2636 curr_offset
= offset
;
2638 oct
= tvb_get_guint8(tvb
, curr_offset
);
2640 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, curr_offset
<<3, 4, ENC_BIG_ENDIAN
);
2644 case 1: str
= "forward to subsequent BSS, no trace at MSC"; break;
2645 case 2: str
= "forward to subsequent BSS, and trace at MSC"; break;
2651 other_decode_bitfield_value(a_bigbuf
, oct
, 0x0f, 8);
2652 proto_tree_add_text(tree
,
2653 tvb
, curr_offset
, 1,
2660 /* no length check possible */
2662 return(curr_offset
- offset
);
2666 * [2] 3.2.2.44 Chosen Encryption Algorithm
2669 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
)
2672 guint32 curr_offset
;
2673 const gchar
*str
= NULL
;
2675 curr_offset
= offset
;
2677 oct
= tvb_get_guint8(tvb
, curr_offset
);
2681 case 0x01: str
= "No encryption used"; break;
2682 case 0x02: str
= "GSM A5/1"; break;
2683 case 0x03: str
= "GSM A5/2"; break;
2684 case 0x04: str
= "GSM A5/3"; break;
2685 case 0x05: str
= "GSM A5/4"; break;
2686 case 0x06: str
= "GSM A5/5"; break;
2687 case 0x07: str
= "GSM A5/6"; break;
2688 case 0x08: str
= "GSM A5/7"; break;
2694 proto_tree_add_text(tree
,
2695 tvb
, curr_offset
, 1,
2696 "Algorithm Identifier: %s",
2702 g_snprintf(add_string
, string_len
, " - %s", str
);
2704 /* no length check possible */
2706 return(curr_offset
- offset
);
2710 * [2] 3.2.2.45 Circuit Pool
2713 be_cct_pool(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string
, int string_len
)
2716 guint32 curr_offset
;
2717 const gchar
*str
= NULL
;
2719 curr_offset
= offset
;
2721 oct
= tvb_get_guint8(tvb
, curr_offset
);
2727 else if ((oct
>= 0x80) && (oct
<= 0x8f))
2729 str
= ", for national/local use";
2733 str
= ", reserved for future international use";
2736 proto_tree_add_text(tree
,
2737 tvb
, curr_offset
, 1,
2738 "Circuit pool number: %u%s",
2745 g_snprintf(add_string
, string_len
, " - (%u)", oct
);
2747 /* no length check possible */
2749 return(curr_offset
- offset
);
2752 * 3.2.2.46 Circuit Pool List
2753 * 3.2.2.47 Time Indication
2754 * 3.2.2.48 Resource Situation
2757 * [2] 3.2.2.49 Current Channel Type 1
2760 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_
)
2762 guint32 curr_offset
;
2764 curr_offset
= offset
;
2767 proto_tree_add_item(tree
, hf_gsm_a_bssmap_cur_ch_mode
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
2769 proto_tree_add_item(tree
, hf_gsm_a_bssmap_channel
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
2773 /* no length check possible */
2775 return(curr_offset
- offset
);
2779 * [2] 3.2.2.50 Queuing Indicator
2782 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_
)
2785 guint32 curr_offset
;
2787 curr_offset
= offset
;
2789 oct
= tvb_get_guint8(tvb
, curr_offset
);
2791 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, curr_offset
<<3, 6, ENC_BIG_ENDIAN
);
2793 other_decode_bitfield_value(a_bigbuf
, oct
, 0x02, 8);
2794 proto_tree_add_text(tree
,
2795 tvb
, curr_offset
, 1,
2796 "%s = qri: it is recommended %sto allow queuing",
2798 (oct
& 0x02) ? "" : "not ");
2800 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, (curr_offset
<<3)+7, 1, ENC_BIG_ENDIAN
);
2804 /* no length check possible */
2806 return(curr_offset
- offset
);
2810 * [2] 3.2.2.51 Speech Version
2813 be_speech_ver(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string
, int string_len
)
2816 guint32 curr_offset
;
2817 const gchar
*str
= NULL
;
2818 const gchar
*short_str
= NULL
;
2820 curr_offset
= offset
;
2822 oct
= tvb_get_guint8(tvb
, curr_offset
);
2824 proto_tree_add_item(tree
, hf_gsm_a_b8spare
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
2826 /* The bits 7-1 of octet 2 are coded in the same way as the permitted speech version identifier
2827 * in the Channel type information element.
2832 case 0x01: str
= "GSM speech full rate version 1"; short_str
= "FR1"; break;
2833 case 0x11: str
= "GSM speech full rate version 2"; short_str
= "FR2"; break;
2834 case 0x21: str
= "GSM speech full rate version 3 (AMR)"; short_str
= "FR3 (AMR)"; break;
2836 case 0x05: str
= "GSM speech half rate version 1"; short_str
= "HR1"; break;
2837 case 0x15: str
= "GSM speech half rate version 2"; short_str
= "HR2"; break;
2838 case 0x25: str
= "GSM speech half rate version 3 (AMR)"; short_str
= "HR3 (AMR)"; break;
2840 case 0x41: str
= "GSM speech full rate version 4";short_str
= "OFR AMR-WB"; break;
2841 case 0x42: str
= "GSM speech full rate version 5";short_str
= "FR AMR-WB"; break;
2842 case 0x46: str
= "GSM speech half rate version 4";short_str
= "OHR AMR-WB"; break;
2843 case 0x45: str
= "GSM speech half rate version 6";short_str
= "OHR AMR"; break;
2852 other_decode_bitfield_value(a_bigbuf
, oct
, 0x7f, 8);
2853 proto_tree_add_text(tree
,
2854 tvb
, curr_offset
, 1,
2855 "%s = Speech version identifier: %s",
2862 g_snprintf(add_string
, string_len
, " - (%s)", short_str
);
2864 /* no length check possible */
2866 return(curr_offset
- offset
);
2869 * 3.2.2.52 Assignment Requirement
2872 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_
)
2874 guint32 curr_offset
;
2876 curr_offset
= offset
;
2878 proto_tree_add_text(tree
, tvb
, curr_offset
, len
, "Not decoded yet");
2886 * 3.2.2.54 Talker Flag
2890 * 3.2.2.55 Group Call Reference
2891 * The octets 3-7 are coded in the same way as the octets 2-6 in the
2892 * Descriptive group or broadcast call reference information element as defined in 3GPP TS 24.008.
2893 * dissected in packet-gsm_a_common.c (de_d_gb_call_ref)
2896 * 3.2.2.56 eMLPP Priority
2897 * The call priority field (bit 3 to 1 of octet 2) is coded in the same way as the call priority field
2898 * (bit 3 to 1 of octet 5) in the Descriptive group or broadcast call reference information element as
2899 * defined in 3GPP TS 24.008.
2901 static const value_string gsm_a_bssmap_call_priority_vals
[] = {
2902 { 0x00, "No priority applied" },
2903 { 0x01, "Call priority level 4" },
2904 { 0x02, "Call priority level 3" },
2905 { 0x03, "Call priority level 2" },
2906 { 0x04, "Call priority level 1" },
2907 { 0x05, "Call priority level 0" },
2908 { 0x06, "Call priority level B" },
2909 { 0x07, "Call priority level A" },
2914 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_
)
2916 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, offset
<< 3, 5, ENC_BIG_ENDIAN
);
2917 proto_tree_add_item(tree
, hf_gsm_a_bssmap_emlpp_prio
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2923 * 3.2.2.57 Configuration Evolution Indication
2925 static const value_string gsm_a_bssmap_smi_vals
[] = {
2926 { 0, "No Modification is allowed" },
2927 { 1, "Modification is allowed and maximum number of TCH/F is 1" },
2928 { 2, "Modification is allowed and maximum number of TCH/F is 2" },
2929 { 3, "Modification is allowed and maximum number of TCH/F is 3" },
2930 { 4, "Modification is allowed and maximum number of TCH/F is 4" },
2938 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_
)
2940 guint32 curr_offset
;
2942 curr_offset
= offset
;
2944 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, curr_offset
<<3, 4, ENC_BIG_ENDIAN
);
2945 /* Subsequent Modification Indication */
2946 proto_tree_add_item(tree
, hf_gsm_a_bssmap_smi
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
2949 return(curr_offset
- offset
);
2952 * 3.2.2.58 Old BSS to New BSS information
2954 /* This function is only called from other protocols (e.g. RANAP),
2955 internally, the Field Element dissector is called directly */
2957 bssmap_old_bss_to_new_bss_info(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
)
2966 len
= tvb_length(tvb
);
2967 be_field_element_dissect(tvb
, tree
, pinfo
, 0, len
, NULL
, 0);
2974 * (The QoS octets 3 to n are coded in the same way as the equivalent octets
2975 * in the LCS QoS element of 3GPP TS 49.031.)
2979 * 3.2.2.61 LSA Access Control Suppression
2982 * 3.2.2.62 LCS Priority
2983 * The Priority octets 3 to n are coded in the same way as the equivalent octets
2984 * in the LCS Priority element of 3GPP TS 49.031.
2986 /* Location Information definitions */
2987 static const value_string lcs_priority_vals
[] = {
2994 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_
)
2996 guint32 curr_offset
;
2998 curr_offset
= offset
;
3000 /* This octet is coded as the LCS-Priority octet in 3GPP TS 29.002 */
3001 proto_tree_add_item(tree
, hf_gsm_a_bssmap_lcs_pri
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3004 return(curr_offset
- offset
);
3008 * 3.2.2.63 Location Type (Location Type element of 3GPP TS 49.031 BSSAP-LE.)
3011 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_
)
3013 guint32 curr_offset
;
3014 guint8 location_information
;
3016 curr_offset
= offset
;
3018 /* Extract the location information and add to protocol tree */
3019 location_information
= tvb_get_guint8(tvb
, offset
);
3020 proto_tree_add_item(tree
, hf_gsm_a_bssmap_location_type_location_information
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3023 if (location_information
== 1 || location_information
== 2)
3025 /* protocol method */
3026 proto_tree_add_item(tree
, hf_gsm_a_bssmap_location_type_positioning_method
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3030 return(curr_offset
- offset
);
3034 * 3.2.2.64 Location Estimate
3035 * The Location Estimate field is composed of 1 or more octets with an internal structure
3036 * according to 3GPP TS 23.032.
3039 be_loc_est(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
3042 guint32 curr_offset
;
3044 curr_offset
= offset
;
3046 data_tvb
= tvb_new_subset(tvb
, curr_offset
, len
, len
);
3047 dissect_geographical_description(data_tvb
, pinfo
, tree
);
3052 * 3.2.2.65 Positioning Data
3053 * Positioning Data element of 3GPP TS 49.031 BSSAP-LE.
3056 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_
)
3058 guint32 curr_offset
;
3060 guint64 pos_data_disc
;
3063 curr_offset
= offset
;
3066 bit_offset
= (offset
<<3);
3067 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare
, tvb
, bit_offset
, 4, ENC_BIG_ENDIAN
);
3070 /* Extract the positioning data discriminator and add to protocol tree */
3071 proto_tree_add_bits_ret_val(tree
, hf_gsm_a_bssmap_positioning_data_discriminator
, tvb
, bit_offset
, 4, &pos_data_disc
, ENC_BIG_ENDIAN
);
3075 if (pos_data_disc
== 0)
3077 /* Extract the positioning methods and add to protocol tree */
3078 for (i
= 0; i
< len
-1; i
++)
3080 /* Extract the positioning method and add to protocol tree */
3081 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_positioning_method
, tvb
, bit_offset
, 5, ENC_BIG_ENDIAN
);
3083 /* Extract the usage and add to protocol tree */
3084 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_positioning_method_usage
, tvb
, bit_offset
, 3, ENC_BIG_ENDIAN
);
3090 return(curr_offset
- offset
);
3093 * 3.2.2.66 LCS Cause
3094 * LCS Cause element of 3GPP TS 49.031 BSSAP-LE.
3095 * Dissected in packet-gsm_bssap_le.c
3099 * 3.2.2.67 LCS Client Type
3100 * LCS Client Type element of 3GPP TS 49.031 BSSAP-LE.
3101 * Dissected in packet-gsm_bssap_le.c
3105 * 3.2.2.68 3GPP TS 48.008 version 6.9.0 Release 6
3108 /* BSSLAP the embedded message is as defined in 3GPP TS 48.071
3109 * LLP the embedded message contains a Facility Information Element as defined in 3GPP TS 44.071
3110 * excluding the Facility IEI and length of Facility IEI octets defined in 3GPP TS 44.071.
3111 * SMLCPP the embedded message is as defined in 3GPP TS 48.031
3113 static const value_string gsm_a_apdu_protocol_id_strings
[] = {
3122 be_apdu(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
)
3124 guint32 curr_offset
;
3125 guint8 apdu_protocol_id
;
3128 curr_offset
= offset
;
3130 proto_tree_add_text(tree
, tvb
, curr_offset
, len
, "APDU");
3133 * dissect the embedded APDU message
3134 * if someone writes a TS 09.31 dissector
3136 * The APDU octets 4 to n are coded in the same way as the
3137 * equivalent octet in the APDU element of 3GPP TS 49.031 BSSAP-LE.
3140 apdu_protocol_id
= tvb_get_guint8(tvb
,curr_offset
);
3141 proto_tree_add_item(tree
, hf_gsm_a_bssmap_apdu_protocol_id
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3145 switch (apdu_protocol_id
) {
3148 * the embedded message is as defined in 3GPP TS 08.71(3GPP TS 48.071 version 7.2.0 Release 7)
3150 APDU_tvb
= tvb_new_subset(tvb
, curr_offset
, len
, len
);
3151 if (gsm_bsslap_handle
)
3152 call_dissector(gsm_bsslap_handle
, APDU_tvb
, pinfo
, g_tree
);
3156 * The embedded message contains a Facility Information Element as defined in 3GPP TS 04.71
3157 * excluding the Facility IEI and length of Facility IEI octets defined in 3GPP TS 04.71.(3GPP TS 44.071).
3162 * The embedded message is as defined in 3GPP TS 08.31(TS 48.031).
3171 EXTRANEOUS_DATA_CHECK(len
, curr_offset
- offset
);
3173 return(curr_offset
- offset
);
3176 * 3.2.2.69 Network Element Identity
3177 * Network Element Identity element of 3GPP TS 49.031 BSSAP-LE.
3180 * 3.2.2.70 GPS Assistance Data
3181 * Requested GPS Data element of 3GPP TS 49.031 BSSAP-LE.
3184 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_
)
3186 guint32 curr_offset
;
3188 curr_offset
= offset
;
3190 proto_tree_add_text(tree
, tvb
, curr_offset
, len
, "Not decoded yet");
3196 * 3.2.2.71 Deciphering Keys
3197 * Deciphering Key element of 3GPP TS 49.031 BSSAP-LE.
3198 * Dissected in packet-gsm_bssmap_le.c
3201 /* 3.2.2.72 Return Error Request
3202 * Return Error Request element of 3GPP TS 49.031 BSSAP-LE.
3205 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_
)
3207 guint32 curr_offset
;
3209 curr_offset
= offset
;
3211 proto_tree_add_text(tree
, tvb
, curr_offset
, len
, "Not decoded yet");
3216 * 3.2.2.73 Return Error Cause
3217 * Return Error Cause element of 3GPP TS 49.031 BSSAP-LE.
3220 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_
)
3222 guint32 curr_offset
;
3224 curr_offset
= offset
;
3226 proto_tree_add_text(tree
, tvb
, curr_offset
, len
, "Not decoded yet");
3231 * 3.2.2.74 Segmentation
3232 * Segmentation element of 3GPP TS 49.031 BSSAP-LE.
3235 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_
)
3237 guint32 curr_offset
;
3239 curr_offset
= offset
;
3241 proto_tree_add_text(tree
, tvb
, curr_offset
, len
, "Not decoded yet");
3246 * 3.2.2.75 Service Handover
3249 static const value_string gsm_a_bssmap_serv_ho_inf_vals
[] = {
3250 { 0, "Handover to UTRAN or cdma2000 should be performed - Handover to UTRAN or cdma2000 is preferred" },
3251 { 1, "Handover to UTRAN or cdma2000 should not be performed - Handover to GSM is preferred" },
3252 { 2, "Handover to UTRAN or cdma2000 shall not be performed - " },
3253 { 3, "no information available for service based handover" },
3254 { 4, "no information available for service based handover" },
3255 { 5, "no information available for service based handover" },
3256 { 6, "no information available for service based handover" },
3257 { 7, "no information available for service based handover" },
3262 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_
)
3264 guint32 curr_offset
;
3266 curr_offset
= offset
;
3268 /* Service Handover information */
3269 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, curr_offset
<<3, 5, ENC_BIG_ENDIAN
);
3270 proto_tree_add_item(tree
, hf_gsm_a_bssmap_serv_ho_inf
, tvb
, curr_offset
+1, 1, ENC_BIG_ENDIAN
);
3276 * 3.2.2.76 Source RNC to target RNC transparent information (UMTS)
3280 be_src_rnc_to_tar_rnc_umts(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
3282 tvbuff_t
*container_tvb
;
3283 guint32 curr_offset
;
3285 curr_offset
= offset
;
3287 /* The Source RNC to Target RNC transparent Information value is encoded as
3288 * the Source RNC to Target RNC Transparent Container IE as defined in relevant
3289 * RANAP specification 3GPP TS 25.413, excluding RANAP tag
3291 container_tvb
= tvb_new_subset(tvb
, curr_offset
, len
, len
);
3292 dissect_ranap_SourceRNC_ToTargetRNC_TransparentContainer_PDU(container_tvb
, pinfo
, tree
, NULL
);
3297 * 3.2.2.77 Source RNC to target RNC transparent information (cdma2000)
3300 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_
)
3302 guint32 curr_offset
;
3304 curr_offset
= offset
;
3306 proto_tree_add_text(tree
, tvb
, curr_offset
, len
, "Not decoded yet");
3307 /* The Source RNC to Target RNC transparent Information value (structure and encoding)
3308 * for cdma2000 is defined in relevant specifications.
3314 * 3.2.2.78 GERAN Classmark
3316 static const value_string gsm_a_max_nb_traffic_chan_vals
[] = {
3325 static const true_false_string gsm_a_bssmap_accept_not_accept_vals
= {
3330 be_geran_cls_m(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
3332 guint32 curr_offset
;
3334 curr_offset
= offset
;
3337 de_sup_codec_list(tvb
, tree
, pinfo
, curr_offset
, (len
-2), NULL
, 0);
3339 curr_offset
+= len
-2;
3340 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, curr_offset
<<3, 5, ENC_BIG_ENDIAN
);
3341 proto_tree_add_item(tree
, hf_gsm_a_bssmap_max_nb_traffic_chan
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3343 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, curr_offset
<<3, 3, ENC_BIG_ENDIAN
);
3344 proto_tree_add_item(tree
, hf_gsm_a_bssmap_acceptable_chan_coding_bit5
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3345 proto_tree_add_item(tree
, hf_gsm_a_bssmap_acceptable_chan_coding_bit4
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3346 proto_tree_add_item(tree
, hf_gsm_a_bssmap_acceptable_chan_coding_bit3
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3347 proto_tree_add_item(tree
, hf_gsm_a_bssmap_acceptable_chan_coding_bit2
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3348 proto_tree_add_item(tree
, hf_gsm_a_bssmap_acceptable_chan_coding_bit1
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3353 * 3.2.2.79 GERAN BSC Container
3356 be_geran_bsc_cont(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
3358 guint32 curr_offset
;
3360 curr_offset
= offset
;
3362 proto_tree_add_item(tree
, hf_gsm_a_bssap_speech_codec
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3364 NO_MORE_DATA_CHECK(len
);
3365 proto_tree_add_item(tree
, hf_gsm_a_bssmap_allowed_data_rate_bit8
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3366 proto_tree_add_item(tree
, hf_gsm_a_bssmap_allowed_data_rate_bit7
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3367 proto_tree_add_item(tree
, hf_gsm_a_bssmap_allowed_data_rate_bit6
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3368 proto_tree_add_item(tree
, hf_gsm_a_bssmap_allowed_data_rate_bit5
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3369 proto_tree_add_item(tree
, hf_gsm_a_bssmap_allowed_data_rate_bit4
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3370 proto_tree_add_item(tree
, hf_gsm_a_bssmap_max_nb_traffic_chan
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3375 * 3.2.2.80 New BSS to Old BSS Information
3377 /* This function is only called from other protocols (e.g. RANAP),
3378 internally, the Field Element dissector is called directly */
3380 bssmap_new_bss_to_old_bss_info(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
)
3389 len
= tvb_length(tvb
);
3390 be_field_element_dissect(tvb
, tree
, pinfo
, 0, len
, NULL
, 0);
3397 * 3.2.2.81 Inter-System Information
3400 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_
)
3404 new_tvb
= tvb_new_subset(tvb
, offset
, len
, len
);
3407 dissect_ranap_InterSystemInformation_TransparentContainer_PDU(new_tvb
, pinfo
, tree
, NULL
);
3413 * 3.2.2.82 SNA Access Information
3416 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_
)
3418 guint32 curr_offset
;
3420 curr_offset
= offset
;
3422 proto_tree_add_text(tree
, tvb
, curr_offset
, len
, "Not decoded yet");
3428 * 3.2.2.83 VSTK_RAND Information
3431 be_vstk_rand_info(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
3433 guint32 curr_offset
;
3436 curr_offset
= offset
;
3438 vstk_rand
= tvb_get_ntoh40(tvb
, curr_offset
);
3440 proto_tree_add_uint64(tree
, hf_gsm_a_bssmap_vstk_rand
, tvb
, curr_offset
, 5, vstk_rand
);
3441 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, (((curr_offset
+4)<<3)+4), 4, ENC_BIG_ENDIAN
);
3446 * 3.2.2.84 VSTK information
3449 be_vstk_info(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
3451 proto_tree_add_item(tree
, hf_gsm_a_bssmap_vstk
, tvb
, offset
, 16, ENC_NA
);
3456 * 3.2.2.85 Paging Information
3459 * If the VGCS/VBS flag is set to zero, the mobile station to be paged is not a member of any VGCS/VBS-group.
3460 * If the VGCS/VBS flag is set to one, the mobile station to be paged is a member of a VGCS/VBS-group.
3462 static const true_false_string bssmap_paging_inf_flg_value
= {
3463 "A member of a VGCS/VBS-group",
3464 "Not a member of any VGCS/VBS-group"
3467 static const value_string gsm_a_bssmap_paging_cause_vals
[] = {
3468 { 0, "Paging is for mobile terminating call" },
3469 { 1, "Paging is for a short message" },
3470 { 2, "Paging is for a USSD" },
3476 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_
)
3478 guint32 curr_offset
;
3480 curr_offset
= offset
;
3482 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, curr_offset
<<3, 5, ENC_BIG_ENDIAN
);
3483 proto_tree_add_item(tree
, hf_gsm_a_bssmap_paging_cause
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3484 proto_tree_add_item(tree
, hf_gsm_a_bssmap_paging_inf_flg
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3487 return(curr_offset
-offset
);
3491 * Use same dissector as IMSI 3.2.2.6
3495 * 3.2.2.87 Velocity Estimate
3498 be_vel_est(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
, guint32 offset
, guint len
, gchar
*add_string
, int string_len
)
3500 dissect_description_of_velocity(tvb
, tree
, pinfo
, offset
, len
, add_string
, string_len
);
3505 * 3.2.2.88 VGCS Feature Flags
3508 /* Bit 1 is the talker priority indicator (TP Ind). */
3509 static const true_false_string gsm_bssmap_tpind_vals
= {
3510 "Talker Priority not supported" ,
3511 "Talker Priority supported"
3513 /* Bits 2 and 3 are the A-interface resource sharing indicator (AS Ind). */
3514 static const true_false_string gsm_bssmap_asind_b2_vals
= {
3515 "A-interface circuit sharing" ,
3516 "No A-interface circuit sharing"
3519 static const true_false_string gsm_bssmap_asind_b3_vals
= {
3520 "A-interface link sharing" ,
3521 "No A-interface link sharing"
3524 /* Bit 4 is the group or broadcast call re-establishment by the BSS indicator (Bss Res). */
3525 static const true_false_string gsm_bssmap_bss_res_vals
= {
3526 "Re-establishment of the group or broadcast call by the BSS" ,
3527 "No re-establishment of the group or broadcast call by the BSS"
3530 /* Bit 5 is the Talker Channel Parameter (TCP). */
3531 static const true_false_string gsm_bssmap_bss_tcp_vals
= {
3532 "Talker channel parameter is applicable to this call, talker shall be established and maintained on a dedicated channel" ,
3533 "Talker channel parameter is not applicable to this call"
3537 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_
)
3539 guint32 curr_offset
;
3541 curr_offset
= offset
;
3543 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, curr_offset
<<3, 3, ENC_BIG_ENDIAN
);
3544 proto_tree_add_item(tree
, hf_gsm_a_bssmap_tcp
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3545 proto_tree_add_item(tree
, hf_gsm_a_bssmap_bss_res
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3546 proto_tree_add_item(tree
, hf_gsm_a_bssmap_asind_b3
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3547 proto_tree_add_item(tree
, hf_gsm_a_bssmap_asind_b2
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3548 proto_tree_add_item(tree
, hf_gsm_a_bssmap_tpind
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3552 return(curr_offset
-offset
);
3555 * 3.2.2.89 Talker Priority
3557 static const value_string gsm_a_bssmap_talker_pri_vals
[] = {
3558 { 0, "Normal Priority" },
3559 { 1, "Privileged Priority" },
3560 { 2, "Emergency Priority" },
3561 { 3, "Reserved for future use" },
3566 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_
)
3568 guint32 curr_offset
;
3570 curr_offset
= offset
;
3572 proto_tree_add_item(tree
, hf_gsm_a_bssmap_talker_pri
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3575 EXTRANEOUS_DATA_CHECK(len
, curr_offset
- offset
);
3577 return(curr_offset
- offset
);
3581 * 3.2.2.90 Emergency Set Indication
3585 * 3.2.2.91 Talker Identity
3588 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_
)
3590 guint32 curr_offset
;
3592 curr_offset
= offset
;
3594 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, curr_offset
<<3, 5, ENC_BIG_ENDIAN
);
3595 proto_tree_add_item(tree
, hf_gsm_a_bssmap_filler_bits
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3597 proto_tree_add_text(tree
, tvb
, curr_offset
, len
-1, "Talker Identity field");
3602 * 3.2.2.92 SMS to VGCS
3605 be_sms_to_vgcs(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
)
3607 /* The SMS content field is coded as follows - this field contains
3608 * the RP-DATA message as defined in 3GPP TS 24.011.
3610 rp_data_n_ms(tvb
, tree
, pinfo
, offset
, len
);
3616 * 3.2.2.93 VGCS talker mode
3618 static const value_string gsm_a_bssmap_rr_mode_vals
[] = {
3619 { 0, "dedicated mode (i.e. dedicated channel)"},
3620 { 1, "group transmit mode (i.e. voice group channel)"},
3623 static const value_string gsm_a_bssmap_group_cipher_key_nb_vals
[] = {
3624 { 0x0, "no ciphering"},
3625 { 0x1, "cipher key number 1"},
3626 { 0x2, "cipher key number 2"},
3627 { 0x3, "cipher key number 3"},
3628 { 0x4, "cipher key number 4"},
3629 { 0x5, "cipher key number 5"},
3630 { 0x6, "cipher key number 6"},
3631 { 0x7, "cipher key number 7"},
3632 { 0x8, "cipher key number 8"},
3633 { 0x9, "cipher key number 9"},
3634 { 0xa, "cipher key number A"},
3635 { 0xb, "cipher key number B"},
3636 { 0xc, "cipher key number C"},
3637 { 0xd, "cipher key number D"},
3638 { 0xe, "cipher key number E"},
3639 { 0xf, "cipher key number F"},
3643 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_
)
3645 guint32 curr_offset
;
3647 curr_offset
= offset
;
3649 proto_tree_add_item(tree
, hf_gsm_a_bssmap_rr_mode
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3650 proto_tree_add_item(tree
, hf_gsm_a_bssmap_group_cipher_key_nb
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3651 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, ((curr_offset
<<3)+6), 2, ENC_BIG_ENDIAN
);
3656 * 3.2.2.94 VGCS/VBS Cell Status
3658 static const value_string gsm_a_bssmap_vgcs_vbs_cell_status_vals
[] = {
3659 { 0, "Cell is established for the voice group or broadcast call"},
3660 { 1, "Cell is not established for the voice group or broadcast call. Establishment by the BSS is to be attempted"},
3661 { 2, "Cell is released for the voice group or broadcast call because no user is present"},
3662 { 3, "Cell is not established for the voice group or broadcast call. No establishment by the BSS is to be attempted"},
3670 be_vgcs_vbs_cell_status(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
3672 guint32 curr_offset
;
3674 curr_offset
= offset
;
3676 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, (curr_offset
<<3), 5, ENC_BIG_ENDIAN
);
3677 proto_tree_add_item(tree
, hf_gsm_a_bssmap_vgcs_vbs_cell_status
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3682 * 3.2.2.95 GANSS Assistance Data
3683 * The GANSS Assistance Data octets 3 to n are coded as the Requested GANSS Data element of 3GPP TS 49.031 (BSSAP-LE)
3684 * XXX move to packet-gsm_bssmap_le.c
3687 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_
)
3689 guint32 curr_offset
;
3691 curr_offset
= offset
;
3693 proto_tree_add_text(tree
, tvb
, curr_offset
, len
, "Not decoded yet");
3698 * 3.2.2.96 GANSS Positioning Data
3699 * XXX move to packet-gsm_bssmap_le.c
3702 static const value_string gsm_a_bssmap_method_vals
[] = {
3703 { 0x00, "MS-Based" },
3704 { 0x01, "MS-Assisted" },
3705 { 0x02, "Conventional" },
3706 { 0x03, "Reserved" },
3710 static const value_string gsm_a_bssmap_ganss_id_vals
[] = {
3711 { 0x00, "Galileo" },
3712 { 0x01, "Satellite Based Augmentation Systems (SBAS)" },
3713 { 0x02, "Modernized GPS" },
3714 { 0x03, "Quasi Zenith Satellite System (QZSS)" },
3715 { 0x04, "GLONASS" },
3719 static const value_string gsm_a_bssmap_usage_vals
[] = {
3720 { 0x00, "Attempted unsuccessfully due to failure or interruption" },
3721 { 0x01, "Attempted successfully: results not used to generate location" },
3722 { 0x02, "Attempted successfully: results used to verify but not generate location" },
3723 { 0x03, "Attempted successfully: results used to generate location" },
3724 { 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" },
3729 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_
)
3731 guint32 curr_offset
;
3733 curr_offset
= offset
;
3735 proto_tree_add_item(tree
, hf_gsm_a_bssmap_method
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3736 proto_tree_add_item(tree
, hf_gsm_a_bssmap_ganss_id
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3737 proto_tree_add_item(tree
, hf_gsm_a_bssmap_usage
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3740 return(curr_offset
-offset
);
3743 * 3.2.2.97 GANSS Location Type
3746 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_
)
3748 guint32 curr_offset
;
3750 curr_offset
= offset
;
3752 proto_tree_add_text(tree
, tvb
, curr_offset
, len
, "Not decoded yet");
3757 * 3.2.2.98 Application Data
3760 be_app_data(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
3762 guint32 curr_offset
;
3764 curr_offset
= offset
;
3766 proto_tree_add_text(tree
, tvb
, curr_offset
, len
, "Not decoded yet");
3771 * 3.2.2.99 Data Identity
3774 be_app_data_id(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
)
3776 proto_tree_add_item(tree
, hf_gsm_a_bssmap_data_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3781 * 3.2.2.100 Application Data Information
3783 static const true_false_string gsm_a_bssmap_bt_ind_val
= {
3784 "BSS has already transmitted the application data to cells",
3785 "BSS has not transmitted the application data to cells"
3788 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_
)
3790 guint32 curr_offset
;
3792 curr_offset
= offset
;
3794 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, (curr_offset
<<3), 7, ENC_BIG_ENDIAN
);
3795 proto_tree_add_item(tree
, hf_gsm_a_bssmap_bt_ind
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3801 * Octets 3-12 contain the digits of an MSISDN, coded as in 3GPP TS 24.008, Calling party BCD number, octets 4 - 13.
3804 be_msisdn(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
)
3808 new_tvb
= tvb_new_subset(tvb
, offset
, len
, len
);
3810 dissect_gsm_map_msisdn(new_tvb
, pinfo
, tree
);
3816 * 3.2.2.102 AoIP Transport Layer Address
3819 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_
)
3821 guint32 curr_offset
;
3823 guint32 rtp_ipv4_address
;
3825 address rtp_dst_addr
;
3826 struct e_in6_addr rtp_addr_ipv6
;
3828 curr_offset
= offset
;
3830 /* This Information Element provides either an IPv4 or and IPv6 Address and UDP port value
3831 * for the Transport Layer information of the connection end point.
3832 * The Length differentiates between IPv4 and IPv6.
3838 proto_tree_add_item(tree
, hf_gsm_a_bssmap_aoip_trans_ipv4
, tvb
, curr_offset
, 4, ENC_BIG_ENDIAN
);
3839 rtp_ipv4_address
= tvb_get_ipv4(tvb
, curr_offset
);
3845 proto_tree_add_item(tree
, hf_gsm_a_bssmap_aoip_trans_ipv6
, tvb
, curr_offset
, 16, ENC_NA
);
3846 tvb_get_ipv6(tvb
, offset
+ 5, &rtp_addr_ipv6
);
3851 proto_tree_add_text(tree
, tvb
, curr_offset
, len
, "Bogus length %u",len
);
3854 proto_tree_add_item(tree
, hf_gsm_a_bssmap_aoip_trans_port
, tvb
, curr_offset
, 2, ENC_BIG_ENDIAN
);
3855 rtp_port
= tvb_get_ntohs(tvb
,curr_offset
);
3858 switch (addr_type
) {
3861 rtp_dst_addr
.type
= AT_IPv4
;
3862 rtp_dst_addr
.len
= 4;
3863 rtp_dst_addr
.data
= (guint8
*)&rtp_ipv4_address
;
3867 rtp_dst_addr
.type
= AT_IPv6
;
3868 rtp_dst_addr
.len
= 16;
3869 rtp_dst_addr
.data
= (guint8
*)&rtp_addr_ipv6
;
3873 if ((!pinfo
->fd
->flags
.visited
) && rtp_port
!= 0) {
3874 rtp_add_address(pinfo
, &rtp_dst_addr
, rtp_port
, 0, "BSS MAP", pinfo
->fd
->num
, FALSE
, 0);
3875 rtcp_add_address(pinfo
, &rtp_dst_addr
, rtp_port
+1, 0, "BSS MAP", pinfo
->fd
->num
);
3877 return(curr_offset
- offset
);
3880 * 3.2.2.103 Speech Codec List
3883 FR_AMR is coded '011'
3884 S11, S13 and S15 are reserved and coded with zeroes.
3885 HR_AMR is coded '100'
3886 S6 - S7 and S11 - S15 are reserved and coded with zeroes.
3887 OHR_AMR is coded '011'
3888 S11, S13 and S15 are reserved and coded with zeroes.
3890 FR_AMR-WB is coded '001'
3891 S0 is set to '1' S1 - S7 are reserved and coded with zeroes.
3892 OFR_AMR-WB is coded '100'
3893 S0, S2, S4 indicates the supported Codec Configurations. S1, S3, S5, S6, S7 are reserved and coded with zeroes.
3894 OHR_AMR-WB is coded '101'
3895 S0 is set to '1' S1 - S7 are reserved and coded with zeroes.
3899 FI PI PT TF Codec Type (FR_AMR-WB or OFR_AMR-WB or OHR_AMR-WB)
3900 S7 S6 S5 S4 S3 S2 S1 S0
3904 static const true_false_string bssmap_fi_vals
= {
3905 "AoIP with compressed speech via RTP/UDP/IP is supported by the BSS/Preferred by the MSC",
3906 "AoIP with Compressed speech via RTP/UDP/IP is not supported by the BSS/Not Preferred by the MSC"
3908 static const true_false_string bssmap_tf_vals
= {
3909 "TFO supported by the BSS or TFO support is preferred by the MSC for this Codec Type",
3910 "TFO is not supported by the BSS or TFO support is not preferred by the MSC for this Codec Type"
3912 static const true_false_string bssmap_pi_vals
= {
3913 "Transport of PCM over A-Interface via RTP/UDP/IP is supported by the BSS or preferred by the MSC for this Codec Type",
3914 "PCM over A interface with IP as transport is not supported by the BSS or not preferred by the MSC for this Codec Type"
3916 static const true_false_string bssmap_pt_vals
= {
3917 "Transport of PCM over A-Interface via TDM is supported by the BSS or preferred by the MSC",
3918 "PCM over A-Interface with TDM as transport is not supported by the BSS or not preferred by the MSC for this Codec Type"
3920 /* 26.103 Table 6.3-1: Coding of the selected Codec_Type (long form) */
3921 static const value_string bssap_speech_codec_values
[] = {
3924 { 0x02, "GSM EFR" },
3927 { 0x05, "UMTS AMR" },
3928 { 0x06, "UMTS AMR 2" },
3929 { 0x07, "TDMA EFR" },
3930 { 0x08, "PDC EFR" },
3931 { 0x09, "FR_AMR-WB" },
3932 { 0x0a, "UMTS AMR-WB" },
3933 { 0x0b, "OHR_AMR" },
3934 { 0x0c, "OFR_AMR-WB" },
3935 { 0x0d, "OHR_AMR-WB" },
3936 { 0x0e, "Reserved" },
3937 { 0x0f, "Codec Extension" },
3943 static value_string_ext bssap_speech_codec_values_ext
= VALUE_STRING_EXT_INIT(bssap_speech_codec_values
);
3945 static const value_string bssap_extended_codec_values
[] = {
3951 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_
)
3953 guint32 curr_offset
, consumed
= 0;
3956 proto_item
*item
= NULL
;
3957 proto_tree
*subtree
= NULL
;
3959 curr_offset
= offset
;
3961 while (curr_offset
-offset
< len
) {
3964 item
= proto_tree_add_text(tree
, tvb
, curr_offset
, 1, "Speech Codec Element %u",number
);
3965 subtree
= proto_item_add_subtree(item
, ett_codec_lst
);
3966 codec
= tvb_get_guint8(tvb
,curr_offset
)&0x0f;
3969 /* GSM_FR is coded "0000" */
3972 /* GSM_HR is coded "0001" */
3975 /* GSM_EFR is coded "0010" */
3977 /* FI indicates Full IP */
3978 proto_tree_add_item(subtree
, hf_gsm_a_bssmap_fi
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3979 /* PI indicates PCMoIP */
3980 proto_tree_add_item(subtree
, hf_gsm_a_bssmap_pi
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3981 /* PT indicates PCMoTDM */
3982 proto_tree_add_item(subtree
, hf_gsm_a_bssmap_pt
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3983 /* TF indicates TFO support */
3984 proto_tree_add_item(subtree
, hf_gsm_a_bssmap_tf
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3986 proto_tree_add_item(subtree
, hf_gsm_a_bssap_speech_codec
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
3987 proto_item_append_text(item
, " - %s",
3988 val_to_str_const(tvb_get_guint8(tvb
, curr_offset
) & 0x0f,
3989 bssap_speech_codec_values
,
3999 /* FR_AMR is coded '011'
4000 * HR_AMR is coded '100'
4001 * OHR_AMR is coded '1011'
4003 /* FI indicates Full IP */
4004 proto_tree_add_item(subtree
, hf_gsm_a_bssmap_fi
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4005 /* PI indicates PCMoIP */
4006 proto_tree_add_item(subtree
, hf_gsm_a_bssmap_pi
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4007 /* PT indicates PCMoTDM */
4008 proto_tree_add_item(subtree
, hf_gsm_a_bssmap_pt
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4009 /* TF indicates TFO support */
4010 proto_tree_add_item(subtree
, hf_gsm_a_bssmap_tf
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4012 proto_tree_add_item(subtree
, hf_gsm_a_bssap_speech_codec
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4013 proto_item_append_text(item
, " - %s",
4014 val_to_str_const(tvb_get_guint8(tvb
, curr_offset
) & 0x0f,
4015 bssap_speech_codec_values
,
4019 proto_tree_add_text(subtree
, tvb
, curr_offset
, 2, "S0 - S15");
4028 /* FR_AMR-WB is coded '1001'
4029 * OFR_AMR-WB is coded '1100'
4030 * OHR_AMR-WB is coded '1101'
4032 /* FI indicates Full IP */
4033 proto_tree_add_item(subtree
, hf_gsm_a_bssmap_fi
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4034 /* PI indicates PCMoIP */
4035 proto_tree_add_item(subtree
, hf_gsm_a_bssmap_pi
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4036 /* PT indicates PCMoTDM */
4037 proto_tree_add_item(subtree
, hf_gsm_a_bssmap_pt
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4038 /* TF indicates TFO support */
4039 proto_tree_add_item(subtree
, hf_gsm_a_bssmap_tf
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4041 proto_tree_add_item(subtree
, hf_gsm_a_bssap_speech_codec
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4042 proto_item_append_text(item
, " - %s",
4043 val_to_str_const(tvb_get_guint8(tvb
, curr_offset
) & 0x0f,
4044 bssap_speech_codec_values
,
4048 proto_tree_add_text(subtree
, tvb
, curr_offset
, 1, "S0 - S7");
4053 /* Currently (3GPP TS 48.008 version 9.4.0 Release 9) CSData Codec Type is the only extended one */
4054 /* PI indicates PCMoIP */
4055 proto_tree_add_item(subtree
, hf_gsm_a_bssmap_pi
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4056 /* PT indicates PCMoTDM */
4057 proto_tree_add_item(subtree
, hf_gsm_a_bssmap_pt
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4059 proto_tree_add_item(subtree
, hf_gsm_a_bssap_speech_codec
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4062 /* Codec Extension */
4063 proto_tree_add_item(subtree
, hf_gsm_a_bssap_extended_codec
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4064 proto_item_append_text(item
, " - %s",
4065 val_to_str_const(tvb_get_guint8(tvb
, curr_offset
),
4066 bssap_extended_codec_values
,
4070 proto_tree_add_item(subtree
, hf_gsm_a_bssap_extended_codec_r2
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4071 proto_tree_add_item(subtree
, hf_gsm_a_bssap_extended_codec_r3
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4076 proto_tree_add_text(subtree
, tvb
, curr_offset
, 2,"Unknown codec - the rest of the dissection my be suspect");
4082 proto_item_set_len(item
, consumed
);
4086 * 3.2.2.104 Speech Codec
4088 static const true_false_string bssmap_fi2_vals
= {
4089 "AoIP with compressed speech via RTP/UDP/IP is selected for this Codec Type",
4090 "Compressed speech via RTP/UDP/IP is not selected for this Codec Type"
4092 static const true_false_string bssmap_tf2_vals
= {
4093 "TFO Support is selected for this Codec Type",
4094 "TFO Support is not selected for this Codec Type"
4096 static const true_false_string bssmap_pi2_vals
= {
4097 "PCM over A-Interface via RTP/UPD/IP is selected for this Codec Type",
4098 "PCM over A interface with RTP/UDP/IP is not selected for this Codec Type"
4100 static const true_false_string bssmap_pt2_vals
= {
4101 "PCM over A-Interface with TDM as transport is selected for this Codec Type",
4102 "PCM over A-Interface with TDM as transport is not selected for this Codec Type"
4105 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_
)
4107 guint32 curr_offset
, consumed
= 0;
4110 proto_item
*item
= NULL
;
4111 proto_tree
*subtree
= NULL
;
4113 curr_offset
= offset
;
4115 while (curr_offset
-offset
< len
) {
4118 item
= proto_tree_add_text(tree
, tvb
, curr_offset
, 1, "Speech Codec Element %u",number
);
4119 subtree
= proto_item_add_subtree(item
, ett_codec_lst
);
4120 codec
= tvb_get_guint8(tvb
,curr_offset
)&0x0f;
4123 /* GSM_FR is coded "0000" */
4126 /* GSM_HR is coded "0001" */
4129 /* GSM_EFR is coded "0010" */
4131 /* FI indicates Full IP */
4132 proto_tree_add_item(subtree
, hf_gsm_a_bssmap_fi
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4133 /* PI indicates PCMoIP */
4134 proto_tree_add_item(subtree
, hf_gsm_a_bssmap_pi
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4135 /* PT indicates PCMoTDM */
4136 proto_tree_add_item(subtree
, hf_gsm_a_bssmap_pt
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4137 /* TF indicates TFO support */
4138 proto_tree_add_item(subtree
, hf_gsm_a_bssmap_tf
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4140 proto_tree_add_item(subtree
, hf_gsm_a_bssap_speech_codec
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4141 proto_item_append_text(item
, " - %s",
4142 val_to_str_const(tvb_get_guint8(tvb
, curr_offset
) & 0x0f,
4143 bssap_speech_codec_values
,
4153 /* FR_AMR is coded '011'
4154 * HR_AMR is coded '100'
4155 * OHR_AMR is coded '1011'
4157 /* FI indicates Full IP */
4158 proto_tree_add_item(subtree
, hf_gsm_a_bssmap_fi2
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4159 /* PI indicates PCMoIP */
4160 proto_tree_add_item(subtree
, hf_gsm_a_bssmap_pi2
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4161 /* PT indicates PCMoTDM */
4162 proto_tree_add_item(subtree
, hf_gsm_a_bssmap_pt2
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4163 /* TF indicates TFO support */
4164 proto_tree_add_item(subtree
, hf_gsm_a_bssmap_tf2
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4166 proto_tree_add_item(subtree
, hf_gsm_a_bssap_speech_codec
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4167 proto_item_append_text(item
, " - %s",
4168 val_to_str_const(tvb_get_guint8(tvb
, curr_offset
) & 0x0f,
4169 bssap_speech_codec_values
,
4173 proto_tree_add_text(subtree
, tvb
, curr_offset
, 2, "S0 - S15");
4182 /* FR_AMR-WB is coded '1001'
4183 * OFR_AMR-WB is coded '1100'
4184 * OHR_AMR-WB is coded '1101'
4186 /* FI indicates Full IP */
4187 proto_tree_add_item(subtree
, hf_gsm_a_bssmap_fi2
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4188 /* PI indicates PCMoIP */
4189 proto_tree_add_item(subtree
, hf_gsm_a_bssmap_pi2
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4190 /* PT indicates PCMoTDM */
4191 proto_tree_add_item(subtree
, hf_gsm_a_bssmap_pt2
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4192 /* TF indicates TFO support */
4193 proto_tree_add_item(subtree
, hf_gsm_a_bssmap_tf2
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4195 proto_tree_add_item(subtree
, hf_gsm_a_bssap_speech_codec
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4196 proto_item_append_text(item
, " - %s",
4197 val_to_str_const(tvb_get_guint8(tvb
, curr_offset
) & 0x0f,
4198 bssap_speech_codec_values
,
4202 proto_tree_add_text(subtree
, tvb
, curr_offset
, 1, "S0 - S7");
4207 /* Currently (3GPP TS 48.008 version 9.4.0 Release 9) CSData Codec Type is the only extended one */
4208 /* PI indicates PCMoIP */
4209 proto_tree_add_item(subtree
, hf_gsm_a_bssmap_pi
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4210 /* PT indicates PCMoTDM */
4211 proto_tree_add_item(subtree
, hf_gsm_a_bssmap_pt
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4213 proto_tree_add_item(subtree
, hf_gsm_a_bssap_speech_codec
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4216 /* Codec Extension */
4217 proto_tree_add_item(subtree
, hf_gsm_a_bssap_extended_codec
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4220 proto_tree_add_item(subtree
, hf_gsm_a_bssap_extended_codec_r2
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4221 proto_tree_add_item(subtree
, hf_gsm_a_bssap_extended_codec_r3
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4226 proto_tree_add_text(subtree
, tvb
, curr_offset
, 2, "Unknown codec - the rest of the dissection my be suspect");
4232 proto_item_set_len(item
, consumed
);
4236 * 3.2.2.105 Call Identifier
4239 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_
)
4241 guint32 curr_offset
;
4243 curr_offset
= offset
;
4245 /* Call Identifier (least significant bits) octet 2
4246 * Call Identifier octet 3
4247 * Call Identifier octet 4
4248 * Call Identifier (most significant bits) octet 5
4250 proto_tree_add_item(tree
, hf_gsm_a_bssmap_call_id
, tvb
, curr_offset
, 4, ENC_LITTLE_ENDIAN
);
4253 return(curr_offset
- offset
);
4256 * 3.2.2.106 Call Identifier List
4259 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_
)
4261 guint32 curr_offset
;
4262 curr_offset
= offset
;
4265 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");
4267 while (curr_offset
-offset
< len
) {
4268 proto_tree_add_item(tree
, hf_gsm_a_bssmap_call_id
, tvb
, curr_offset
, 4, ENC_LITTLE_ENDIAN
);
4275 * 3.2.2.107 A-Interface Selector for RESET
4277 static const true_false_string gsm_a_bssmap_rip_value
= {
4278 "all calls associated to IP links shall be cleared",
4279 "calls associated to IP links shall not be cleared"
4281 static const true_false_string gsm_a_bssmap_rtd_value
= {
4282 "all calls associated to TDM links shall be cleared",
4283 "calls associated to TDM links shall not be cleared"
4286 be_a_itf_sel_for_reset(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
4288 guint32 curr_offset
;
4289 curr_offset
= offset
;
4291 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, (curr_offset
<<3), 6, ENC_BIG_ENDIAN
);
4292 proto_tree_add_item(tree
, hf_gsm_a_bssmap_rip
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4293 proto_tree_add_item(tree
, hf_gsm_a_bssmap_rtd
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4296 return(curr_offset
- offset
);
4302 be_kc128(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
4304 guint32 curr_offset
;
4305 curr_offset
= offset
;
4307 proto_tree_add_item(tree
, hf_gsm_a_bssmap_kc128
, tvb
, curr_offset
, 16, ENC_NA
);
4310 return(curr_offset
- offset
);
4313 * 3.2.2.110 CSG Identifier
4315 static const crumb_spec_t gsm_a_bssmap_csg_id_crumbs
[] = {
4320 static const true_false_string gsm_a_bssmap_cell_access_mode_value
= {
4325 be_csg_id(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
)
4328 bit_offset
= offset
<<3;
4330 proto_tree_add_split_bits_item_ret_val(tree
, hf_gsm_a_bssmap_csg_id
, tvb
, bit_offset
, gsm_a_bssmap_csg_id_crumbs
, NULL
);
4332 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_spare_bits
, tvb
, bit_offset
, 7, ENC_BIG_ENDIAN
);
4334 proto_tree_add_bits_item(tree
, hf_gsm_a_bssmap_cell_access_mode
, tvb
, bit_offset
, 1, ENC_BIG_ENDIAN
);
4340 * 3.2.2.111 Redirect Attempt Flag
4345 * 3.2.2.112 Reroute Reject Cause
4348 * Reroute Reject cause value (octet 2)
4352 static const value_string gsm_a_bssap_reroute_rej_cause_vals
[] = {
4353 { 0x0, "Reserved" },
4354 { 0x1, "Reserved" },
4355 { 0x2, "Reserved" },
4356 { 0x3, "Reserved" },
4357 { 0x4, "Reserved" },
4358 { 0x5, "Reserved" },
4359 { 0x6, "Reserved" },
4360 { 0x7, "Reserved" },
4361 { 0x8, "Reserved" },
4362 { 0x9, "Reserved" },
4363 { 0xa, "Reserved" },
4364 { 0xb, "PLMN not allowed" },
4365 { 0xc, "Location area not allowed" },
4366 { 0xd, "Roaming not allowed in this location area" },
4367 { 0xe, "GPRS services not allowed in this PLMN" },
4368 { 0xf, "No suitable cell in location area" },
4369 { 0x10, "CS/PS domain registration coordination required" },
4374 be_reroute_rej_cause(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
4376 guint32 curr_offset
;
4377 curr_offset
= offset
;
4379 proto_tree_add_item(tree
, hf_gsm_a_bssmap_reroute_rej_cause
, tvb
, curr_offset
, 1, ENC_NA
);
4382 return(curr_offset
- offset
);
4387 * 3.2.2.113 Send Sequence Number
4390 be_send_seqn(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
4392 guint32 curr_offset
;
4393 curr_offset
= offset
;
4395 proto_tree_add_item(tree
, hf_gsm_a_bssmap_send_seqn
, tvb
, curr_offset
, 1, ENC_NA
);
4398 return(curr_offset
- offset
);
4403 * 3.2.2.114 Reroute complete outcome
4405 static const value_string gsm_a_bssap_reroute_outcome_vals
[] = {
4406 { 0x0, "Reserved" },
4407 { 0x1, "MS is accepted" },
4408 { 0x2, "MS is not accepted" },
4409 { 0x3, "MS is already registered" },
4414 be_reroute_outcome(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
4416 guint32 curr_offset
;
4417 curr_offset
= offset
;
4419 proto_tree_add_item(tree
, hf_gsm_a_bssmap_reroute_outcome
, tvb
, curr_offset
, 1, ENC_NA
);
4422 return(curr_offset
- offset
);
4427 * 3.2.2.115 Global Call Reference
4430 be_global_call_ref(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
, gchar
*add_string _U_
, int string_len _U_
)
4432 guint32 curr_offset
;
4433 curr_offset
= offset
;
4435 /* Global Call Reference Identifier */
4436 proto_tree_add_text(tree
, tvb
, curr_offset
, len
, "Field Element not decoded yet");
4442 * 3.2.2.116 LCLS-Configuration
4444 static const value_string gsm_a_bssap_lcls_conf_vals
[] = {
4445 { 0x0, "Connect both-way" },
4446 { 0x1, "Connect both-way and bi-cast UL to the core network" },
4447 { 0x2, "Connect both-way and send access DL from the core network" },
4448 { 0x3, "Connect both-way and send access DL from the core network, block local DL user data" },
4449 { 0x4, "Connect both-way and bi-cast UL to the core network with send access DL from the core network" },
4450 { 0x5, "Connect both-way and bi-cast UL to the core network with send access DL from the core network, block local DL user data" },
4455 be_lcls_conf(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
4457 guint32 curr_offset
;
4458 curr_offset
= offset
;
4460 proto_tree_add_item(tree
, hf_gsm_a_bssmap_lcls_conf
, tvb
, curr_offset
, 1, ENC_NA
);
4463 return(curr_offset
- offset
);
4468 * 3.2.2.117 LCLS-Connection-Status-Control
4470 static const value_string gsm_a_bssap_lcls_con_status_control_vals
[] = {
4472 { 0x1, "Do not connect" },
4473 { 0x2, "Release LCLS" },
4474 { 0x3, "Bi-cast UL at Handover" },
4475 { 0x4, "Bi-cast UL and receive DL data at Handover" },
4480 be_lcls_con_status_control(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
4482 guint32 curr_offset
;
4483 curr_offset
= offset
;
4485 proto_tree_add_item(tree
, hf_gsm_a_bssmap_lcls_con_status_control
, tvb
, curr_offset
, 1, ENC_NA
);
4488 return(curr_offset
- offset
);
4493 * 3.2.2.118 LCLS-Correlation-Not-Needed
4498 * 3.2.2.119 LCLS-BSS-Status
4500 static const value_string gsm_a_bssmap_lcls_bss_status_vals
[] = {
4501 { 0x0, "Call not yet locally switched" },
4502 { 0x1, "Call not possible to be locally switched" },
4503 { 0x2, "Call is no longer locally switched" },
4504 { 0x3, "Requested LCLS configuration is not supported" },
4505 { 0x4, "Call is locally switched with requested LCLS configuration" },
4510 be_lcls_bss_status(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
4512 guint32 curr_offset
;
4513 curr_offset
= offset
;
4515 proto_tree_add_item(tree
, hf_gsm_a_bssmap_lcls_bss_status
, tvb
, curr_offset
, 1, ENC_NA
);
4518 return(curr_offset
- offset
);
4523 * 3.2.2.120 LCLS-Break-Request
4528 * 3.2.2.121 CSFB Indication
4533 * 3.2.2.123 Source eNB to target eNB transparent information (E-UTRAN)
4537 * 3.2.2.124 CS to PS SRVCC Indication
4541 * 3.2.2.125 CN to MS transparent information
4545 * 3.2.2.126 Selected PLMN ID
4548 be_selected_plmn_id(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
4551 proto_tree_add_string(tree
, hf_gsm_a_bssmap_selected_plmn_id
, tvb
, offset
, 3, dissect_e212_mcc_mnc_wmem_packet_str(tvb
, pinfo
, tree
, offset
, TRUE
));
4557 guint16 (*bssmap_elem_fcn
[])(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
, gchar
*add_string
, int string_len
) = {
4558 NULL
, /* Undefined */
4559 be_cic
, /* Circuit Identity Code */
4560 NULL
, /* Reserved */
4561 be_res_avail
, /* Resource Available */
4562 be_cause
, /* Cause */
4563 be_cell_id
, /* Cell Identifier */
4564 be_prio
, /* Priority */
4565 be_l3_header_info
, /* Layer 3 Header Information */
4568 be_enc_info
, /* Encryption Information */
4569 be_chan_type
, /* Channel Type */
4570 be_periodicity
, /* Periodicity */
4571 be_ext_res_ind
, /* Extended Resource Indicator */
4572 be_num_ms
, /* Number Of MSs */
4573 NULL
, /* Reserved */
4574 NULL
, /* Reserved */
4575 NULL
, /* Reserved */
4576 de_ms_cm_2
, /* Classmark Information Type 2 */
4577 de_ms_cm_3
, /* Classmark Information Type 3 */
4578 be_int_band
, /* Interference Band To Be Used */
4579 de_rr_cause
, /* RR Cause */
4580 NULL
, /* Reserved */
4581 be_l3_info
, /* Layer 3 Information */
4583 be_down_dtx_flag
, /* Downlink DTX Flag */
4584 be_cell_id_list
, /* Cell Identifier List */
4585 NULL
/* no associated data */, /* Response Request */
4586 be_res_ind_method
, /* Resource Indication Method */
4587 de_ms_cm_1
, /* Classmark Information Type 1 */
4588 be_cic_list
, /* Circuit Identity Code List */
4589 be_diag
, /* Diagnostics */
4590 be_l3_msg
, /* Layer 3 Message Contents */
4591 be_chosen_chan
, /* Chosen Channel */
4592 be_tot_res_acc
, /* Total Resource Accessible */
4593 be_ciph_resp_mode
, /* Cipher Response Mode */
4594 be_cha_needed
, /* Channel Needed */
4595 be_trace_type
, /* Trace Type */
4596 be_trace_trigger_id
,/* TriggerID */
4597 be_trace_reference
, /* Trace Reference */
4598 be_trace_transaction_id
, /* TransactionID */
4599 de_mid
, /* Mobile Identity */
4600 be_trace_omc_id
, /* OMCID */
4601 be_for_ind
, /* Forward Indicator */
4602 be_chosen_enc_alg
, /* Chosen Encryption Algorithm */
4603 be_cct_pool
, /* Circuit Pool */
4604 NULL
, /* Circuit Pool List */
4605 NULL
, /* Time Indication */
4606 NULL
, /* Resource Situation */
4607 be_curr_chan_1
, /* Current Channel Type 1 */
4608 be_que_ind
, /* Queueing Indicator */
4609 be_ass_req
, /* Assignment Requirement */
4610 NULL
, /* Undefined */
4611 NULL
/* no associated data */, /* Talker Flag */
4612 NULL
/* no associated data */, /* Connection Release Requested */
4613 de_d_gb_call_ref
, /* Group Call Reference */
4614 be_emlpp_prio
, /* eMLPP Priority */
4615 be_conf_evo_ind
, /* Configuration Evolution Indication */
4616 be_field_element_dissect
, /* Old BSS to New BSS Information */
4617 be_lsa_id
, /* LSA Identifier */
4618 be_lsa_id_list
, /* LSA Identifier List */
4619 be_lsa_info
, /* LSA Information */
4620 NULL
, /* LCS QoS Dissected in packet-gsm_bssmap_le.c*/
4621 NULL
, /* LSA access control suppression */
4622 be_speech_ver
, /* Speech Version */
4623 NULL
, /* Undefined */
4624 NULL
, /* Undefined */
4625 be_lcs_prio
, /* LCS Priority */
4626 be_loc_type
, /* Location Type */
4627 be_loc_est
, /* Location Estimate */
4628 be_pos_data
, /* Positioning Data */
4629 NULL
, /* 3.2.2.66 LCS Cause Dissected in packet-gsm_bssmap_le.c */
4630 NULL
, /* LCS Client Type Dissected in packet-gsm_bssmap_le.c */
4632 NULL
, /* Network Element Identity */
4633 be_gps_assist_data
, /* GPS Assistance Data */
4634 NULL
, /* Deciphering Keys (dissected in packet-gsm_bssmap_le)*/
4635 be_ret_err_req
, /* Return Error Request */
4636 be_ret_err_cause
, /* Return Error Cause */
4637 be_seg
, /* Segmentation */
4638 be_serv_ho
, /* Service Handover */
4639 be_src_rnc_to_tar_rnc_umts
, /* Source RNC to target RNC transparent information (UMTS) */
4640 be_src_rnc_to_tar_rnc_cdma
, /* Source RNC to target RNC transparent information (cdma2000) */
4641 be_geran_cls_m
, /* GERAN Classmark */
4642 be_geran_bsc_cont
, /* GERAN BSC Container */
4643 be_vel_est
, /* Velocity Estimate */
4644 NULL
, /* Undefined */
4645 NULL
, /* Undefined */
4646 NULL
, /* Undefined */
4647 NULL
, /* Undefined */
4648 NULL
, /* Undefined */
4649 NULL
, /* Undefined */
4650 NULL
, /* Undefined */
4651 NULL
, /* Undefined */
4652 NULL
, /* Undefined */
4653 NULL
, /* Undefined */
4654 NULL
, /* Undefined */
4655 be_field_element_dissect
, /* New BSS to Old BSS Information */
4656 NULL
, /* Undefined */
4657 be_inter_sys_inf
, /* Inter-System Information */
4658 be_sna_acc_inf
, /* SNA Access Information */
4659 be_vstk_rand_info
, /* VSTK_RAND Information */
4660 be_vstk_info
, /* VSTK Information */
4661 be_paging_inf
, /* Paging Information */
4662 de_mid
, /* 3.2.2.86 IMEI (use same dissector as IMSI)*/
4663 be_vgcs_feat_flg
, /* VGCS Feature Flags */
4664 be_talker_pri
, /* Talker Priority */
4665 NULL
, /* no data Emergency Set Indication */
4666 be_talker_id
, /* Talker Identity */
4667 be_cell_id_list_seg
, /* Cell Identifier List Segment */
4668 be_sms_to_vgcs
, /* SMS to VGCS */
4669 be_vgcs_talker_mode
,/* VGCS Talker Mode */
4670 be_vgcs_vbs_cell_status
, /* VGCS/VBS Cell Status */
4671 be_cell_id_lst_seg_f_est_cells
, /* Cell Identifier List Segment for established cells */
4672 be_cell_id_lst_seg_f_cell_tb_est
, /* Cell Identifier List Segment for cells to be established */
4673 be_cell_id_lst_seg_f_rel_cell
, /* Cell Identifier List Segment for released cells - no user present */
4674 be_cell_id_lst_seg_f_not_est_cell
, /* Cell Identifier List Segment for not established cells - no establishment possible */
4675 be_ganss_ass_dta
, /* GANSS Assistance Data */
4676 be_ganss_pos_dta
, /* GANSS Positioning Data */
4677 be_ganss_loc_type
, /* GANSS Location Type */
4678 be_app_data
, /* Application Data */
4679 be_app_data_id
, /* Data Identity */
4680 be_app_data_inf
, /* Application Data Information */
4681 be_msisdn
, /* MSISDN */
4682 be_aoip_trans_lay_add
, /* AoIP Transport Layer Address */
4683 be_speech_codec_lst
,/* Speech Codec List */
4684 be_speech_codec
, /* Speech Codec */
4685 be_call_id
, /* Call Identifier */
4686 be_call_id_lst
, /* Call Identifier List */
4687 be_a_itf_sel_for_reset
, /* A-Interface Selector for RESET */
4688 NULL
, /* Undefined */
4689 be_kc128
, /* Kc128 */
4690 be_csg_id
, /* CSG Identifier */
4691 NULL
, /* Redirect Attempt Flag 3.2.2.111 No data */
4692 be_reroute_rej_cause
, /* Reroute Reject Cause 3.2.2.112 */
4693 be_send_seqn
, /* Send Sequence Number 3.2.2.113 */
4694 be_reroute_outcome
, /* Reroute complete outcome 3.2.2.114 */
4695 be_global_call_ref
, /* Global Call Reference 3.2.2.115 */
4696 be_lcls_conf
, /* LCLS-Configuration 3.2.2.116 */
4697 be_lcls_con_status_control
, /* LCLS-Connection-Status-Control 3.2.2.117 */
4698 NULL
, /* LCLS-Correlation-Not-Needed 3.2.2.118 No data */
4699 be_lcls_bss_status
, /* LCLS-BSS-Status 3.2.2.119 */
4700 NULL
, /* LCLS-Break-Request 3.2.2.120 No data */
4701 NULL
, /* CSFB Indication 3.2.2.121 No data */
4703 BE_CS_TO_PS_SRVCC
, /* CS to PS SRVCC 3.2.2.122 */
4704 BE_SRC_ENB_2_TGT_ENB_TRANSP_INF
, /* Source eNB to target eNB transparent information (E-UTRAN)" 3.2.2.123 */
4705 BE_CS_TO_PS_SRVCC_IND
, /* CS to PS SRVCC Indication 3.2.2.124 */
4706 BE_CN_TO_MS_TRANSP
, /* CN to MS transparent information 3.2.2.125 */
4708 be_selected_plmn_id
, /* Selected PLMN ID 3.2.2.126 */
4712 /* 3.2.3 Signalling Field Element Coding */
4713 /* 3.2.3.1 Extra information */
4714 static const value_string fe_extra_info_prec_vals
[] = {
4715 { 0, "The old BSS recommends that this allocation request should not cause a pre-emption an existing connection" },
4716 { 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" },
4720 static const value_string fe_extra_info_lcs_vals
[] = {
4721 { 0, "No ongoing LCS procedure" },
4722 { 1, "An ongoing LCS procedure was interrupted by handover. The new BSS may notify the SMLC when the handover is completed" },
4726 static const value_string fe_extra_info_ue_prob_vals
[] = {
4727 { 0, "This MS supports handover to UMTS" },
4728 { 1, "This MS does not support handover to UMTS" },
4733 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_
)
4735 guint32 curr_offset
;
4737 curr_offset
= offset
;
4738 proto_tree_add_item(tree
, hf_fe_extra_info_prec
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4739 proto_tree_add_item(tree
, hf_fe_extra_info_lcs
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4740 proto_tree_add_item(tree
, hf_fe_extra_info_ue_prob
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4741 proto_tree_add_item(tree
, hf_fe_extra_info_spare
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4744 return(curr_offset
- offset
);
4747 /* 3.2.3.2 Current Channel type 2 */
4749 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_
)
4751 guint32 curr_offset
;
4753 curr_offset
= offset
;
4754 proto_tree_add_item(tree
, hf_fe_cur_chan_type2_chan_mode
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4755 proto_tree_add_item(tree
, hf_fe_cur_chan_type2_chan_mode_spare
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4757 proto_tree_add_item(tree
, hf_fe_cur_chan_type2_chan_field
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4758 proto_tree_add_item(tree
, hf_fe_cur_chan_type2_chan_field_spare
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4761 return(curr_offset
- offset
);
4764 /* 3.2.3.3 Target cell radio information */
4766 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_
)
4768 guint32 curr_offset
;
4770 curr_offset
= offset
;
4771 proto_tree_add_item(tree
, hf_fe_target_radio_cell_info_rxlev_ncell
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4772 proto_tree_add_item(tree
, hf_fe_target_radio_cell_info_rxlev_ncell_spare
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4775 return(curr_offset
- offset
);
4778 /* 3.2.3.4 GPRS Suspend Information */
4780 be_fe_gprs_suspend_info(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
4782 guint32 curr_offset
= offset
;
4784 /* This Field Element contains the contents of the Gb interface SUSPEND ACK PDU,
4785 Call the BSSGP dissector here, assuming that the encoding is per 48.018 */
4788 bssgp_suspend_ack(tvb
, tree
, pinfo
, offset
, len
);
4791 return(curr_offset
- offset
);
4794 /* 3.2.3.5 MultiRate configuration Information */
4796 /* 3.2.3.6 Dual Transfer Mode information */
4797 static const value_string gsm_a_bssmap_dtm_info_dtm_ind_vals
[] = {
4798 { 0, "The MS has resources allocated exclusively for the CS domain in the old cell" },
4799 { 1, "The MS has resources allocated for both the CS and PS domains in the old cell" },
4803 static const value_string gsm_a_bssmap_dtm_info_sto_ind_vals
[] = {
4804 { 0, "The MS is in multislot operation in the old cell" },
4805 { 1, "The MS is in single timeslot operation in the old cell" },
4809 static const value_string gsm_a_bssmap_dtm_info_egprs_ind_vals
[] = {
4810 { 0, "The MS has no TBF using E-GPRS in the old cell" },
4811 { 1, "The MS has a TBF using E-GPRS in the old cell" },
4816 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_
)
4818 guint32 curr_offset
;
4820 curr_offset
= offset
;
4821 proto_tree_add_item(tree
, hf_fe_dtm_info_dtm_ind
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4822 proto_tree_add_item(tree
, hf_fe_dtm_info_sto_ind
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4823 proto_tree_add_item(tree
, hf_fe_dtm_info_egprs_ind
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4824 proto_tree_add_item(tree
, hf_fe_dtm_info_spare_bits
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4827 return(curr_offset
- offset
);
4830 /* 3.2.3.7 Inter RAT Handover Info */
4832 be_fe_inter_rat_handover_info(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
, guint32 offset
, guint len _U_
, gchar
*add_string _U_
, int string_len _U_
)
4834 tvbuff_t
*container_tvb
;
4836 /* Octets 3-n are encoded as Inter RAT Handover Info as defined in 3GPP TS 25.331 */
4837 container_tvb
= tvb_new_subset(tvb
, offset
, len
, len
);
4838 dissect_rrc_InterRATHandoverInfo_PDU(container_tvb
, pinfo
, tree
, NULL
);
4843 /* 3.2.3.8 cdma2000 Capability Information */
4845 /* 3.2.3.9 Downlink Cell Load Information */
4847 /* 3.2.3.10 Uplink Cell Load Information */
4850 static const value_string gsm_a_bssmap_cell_load_nrt_vals
[] = {
4851 { 0, "NRT Load is low" },
4852 { 1, "NRT load is medium" },
4853 { 2, "NRT load is high. (Probability to admit a new user is low.)" },
4854 { 3, "NRT overload. (Probability to admit a new user is low, packets are discarded and the source is recommended to reduce the data flow.)" },
4858 /* 3.2.3.11 Cell Load Information Group */
4860 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_
)
4862 guint32 curr_offset
;
4864 curr_offset
= offset
;
4865 curr_offset
+= be_cell_id(tvb
, tree
, pinfo
, curr_offset
, len
, NULL
, 0);
4866 curr_offset
+= be_field_element_dissect(tvb
, tree
, pinfo
, curr_offset
, len
+ offset
- curr_offset
, NULL
, 0);
4868 return(curr_offset
- offset
);
4871 /* 3.2.3.12 Cell Load Information */
4873 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_
)
4875 guint32 curr_offset
;
4877 curr_offset
= offset
;
4878 proto_tree_add_item(tree
, hf_fe_cell_load_info_cell_capacity_class
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4880 proto_tree_add_item(tree
, hf_fe_cell_load_info_load_value
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4882 proto_tree_add_item(tree
, hf_fe_cell_load_info_rt_load_value
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4884 proto_tree_add_item(tree
, hf_fe_cell_load_info_nrt_load_information_value
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4887 return(curr_offset
- offset
);
4890 /* 3.2.3.13 PS Indication */
4892 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_
)
4894 guint32 curr_offset
;
4896 curr_offset
= offset
;
4897 proto_tree_add_item(tree
, hf_fe_ps_indication
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4900 return(curr_offset
- offset
);
4903 /* 3.2.3.14 DTM Handover Command Indication */
4905 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_
)
4907 guint32 curr_offset
;
4909 curr_offset
= offset
;
4910 proto_tree_add_item(tree
, hf_fe_dtm_ho_command_ind_spare
, tvb
, curr_offset
, 1, ENC_BIG_ENDIAN
);
4913 return(curr_offset
- offset
);
4916 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_
) = {
4917 be_fe_extra_info
, /* { 0x01, "Extra information" }, */
4918 be_fe_cur_chan_type2
, /* { 0x02, "Current Channel Type 2" }, */
4919 be_fe_target_radio_cell_info
, /* { 0x03, "Target cell radio information" }, */
4920 be_fe_gprs_suspend_info
, /* { 0x04, "GPRS Suspend information" }, */
4921 de_rr_multirate_conf
, /* { 0x05, "MultiRate configuration information" }, */
4922 be_fe_dual_transfer_mode_info
, /* { 0x06, "Dual Transfer Mode Information" }, */
4923 be_fe_inter_rat_handover_info
, /* { 0x07, "Inter RAT Handover Info" }, */
4924 NULL
, /* { 0x08, "cdma2000 Capability Information" }, */
4925 be_fe_cell_load_info
, /* { 0x09, "Downlink Cell Load Information" }, */
4926 be_fe_cell_load_info
, /* { 0x0a, "Uplink Cell Load Information" }, */
4927 be_fe_cell_load_info_group
, /* { 0x0b, "Cell Load Information Group" }, */
4928 be_fe_cell_load_info
, /* { 0x0c, "Cell Load Information" }, */
4929 be_fe_ps_indication
, /* { 0x0d, "PS Indication" }, */
4930 be_fe_dtm_ho_command_ind
, /* { 0x0e, "DTM Handover Command Indication" }, */
4931 be_vgcs_talker_mode
, /* { 0x6f, "VGCS talker mode" }, */ /* not really a field element
4932 but does appear in old bss to new bss info */
4936 #define NUM_BSS_ELEMENT_FCNS (int)(sizeof(bssmap_bss_to_bss_element_fcn)/(sizeof bssmap_bss_to_bss_element_fcn[0]))
4939 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_
)
4941 guint32 curr_offset
, ie_len
, fe_start_offset
;
4944 proto_item
*item
= NULL
;
4945 proto_tree
* bss_to_bss_tree
= NULL
;
4947 curr_offset
= offset
;
4950 while (curr_offset
- offset
+ 2 < len
) {
4955 oct
= tvb_get_guint8(tvb
, curr_offset
++);
4957 str
= try_val_to_str_idx((guint32
) oct
, bssmap_field_element_ids
, &idx
);
4958 ie_len
= tvb_get_guint8(tvb
, curr_offset
++);
4964 * add Field Element name
4966 item
= proto_tree_add_uint_format(tree
, hf_gsm_a_bssmap_field_elem_id
,
4967 tvb
, curr_offset
- 2, ie_len
+ 2, oct
, "%s (%X)", str
, oct
);
4969 bss_to_bss_tree
= proto_item_add_subtree(item
, ett_bss_to_bss_info
);
4970 fe_start_offset
= curr_offset
;
4973 * decode field element
4975 if (idx
< 0 || idx
>= NUM_BSS_ELEMENT_FCNS
||
4976 (bssmap_bss_to_bss_element_fcn
[idx
] == NULL
))
4978 proto_tree_add_text(bss_to_bss_tree
,
4979 tvb
, curr_offset
, ie_len
,
4980 "Field Element not decoded");
4981 curr_offset
+= ie_len
;
4985 /* dissect the field element */
4986 curr_offset
+= (*bssmap_bss_to_bss_element_fcn
[idx
])(tvb
, bss_to_bss_tree
, pinfo
, curr_offset
, ie_len
, NULL
, 0);
4988 EXTRANEOUS_DATA_CHECK_EXPERT(ie_len
, curr_offset
- fe_start_offset
, pinfo
, &ei_gsm_a_bssmap_extraneous_data
);
4994 /* MESSAGE FUNCTIONS */
4997 * [2] 3.2.1.1 ASSIGNMENT REQUEST
5001 bssmap_ass_req(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5003 guint32 curr_offset
;
5007 curr_offset
= offset
;
5010 /* Channel Type 3.2.2.11 MSC-BSS M 5-13 */
5011 ELEM_MAND_TLV(BE_CHAN_TYPE
, GSM_A_PDU_TYPE_BSSMAP
, BE_CHAN_TYPE
, NULL
);
5012 /* Layer 3 Header Information 3.2.2.9 MSC-BSS O (note 3) 4 */
5013 ELEM_OPT_TLV(BE_L3_HEADER_INFO
, GSM_A_PDU_TYPE_BSSMAP
, BE_L3_HEADER_INFO
, NULL
);
5014 /* Priority 3.2.2.18 MSC-BSS O 3 */
5015 ELEM_OPT_TLV(BE_PRIO
, GSM_A_PDU_TYPE_BSSMAP
, BE_PRIO
, NULL
);
5016 /* Circuit Identity Code 3.2.2.2 MSC-BSS O (note 1, 12 3 */
5017 ELEM_OPT_TV(BE_CIC
, GSM_A_PDU_TYPE_BSSMAP
, BE_CIC
, NULL
);
5018 /* Downlink DTX Flag 3.2.2.26 MSC-BSS O (note 2) 2 */
5019 ELEM_OPT_TV(BE_DOWN_DTX_FLAG
, GSM_A_PDU_TYPE_BSSMAP
, BE_DOWN_DTX_FLAG
, NULL
);
5020 /* Interference Band To Be Used 3.2.2.21 MSC-BSS O 2 */
5021 ELEM_OPT_TV(BE_INT_BAND
, GSM_A_PDU_TYPE_BSSMAP
, BE_INT_BAND
, NULL
);
5022 /* Classmark Information 2 3.2.2.19 MSC-BSS O (note 4) 4-5 */
5023 ELEM_OPT_TLV(BE_CM_INFO_2
, GSM_A_PDU_TYPE_BSSMAP
, BE_CM_INFO_2
, NULL
);
5024 /* Group Call Reference 3.2.2.55 MSC-BSS O (note 5) 7 */
5025 ELEM_OPT_TLV(BE_GROUP_CALL_REF
, GSM_A_PDU_TYPE_BSSMAP
, BE_GROUP_CALL_REF
, NULL
);
5026 /* Talker Flag 3.2.2.54 MSC-BSS O (note 6) 1 */
5027 ELEM_OPT_T(BE_TALKER_FLAG
, GSM_A_PDU_TYPE_BSSMAP
, BE_TALKER_FLAG
, NULL
);
5028 /* Configuration Evolution Indication 3.2.2.57 MSC-BSS O (note 7) 2 */
5029 ELEM_OPT_TV(BE_CONF_EVO_IND
, GSM_A_PDU_TYPE_BSSMAP
, BE_CONF_EVO_IND
, NULL
);
5030 /* LSA Access Control Suppression 3.2.2.61 MSC-BSS O (note 8) 2 */
5031 ELEM_OPT_TV(BE_LSA_ACC_CTRL
, GSM_A_PDU_TYPE_BSSMAP
, BE_LSA_ACC_CTRL
, NULL
);
5032 /* Service Handover 3.2.2.75 MSC-BSS O (note 9) 3 */
5033 ELEM_OPT_TLV(BE_SERV_HO
, GSM_A_PDU_TYPE_BSSMAP
, BE_SERV_HO
, NULL
);
5034 /* Encryption Information 3.2.2.10 MSC-BSS O (note 10) 3-n */
5035 ELEM_OPT_TLV(BE_ENC_INFO
, GSM_A_PDU_TYPE_BSSMAP
, BE_ENC_INFO
, NULL
);
5036 /* Talker Priority 3.2.2.89 MSC-BSS O (note 11) 2 */
5037 ELEM_OPT_TV(BE_TALKER_PRI
, GSM_A_PDU_TYPE_BSSMAP
, BE_TALKER_PRI
, NULL
);
5038 /* AoIP Transport Layer Address (MGW) 3.2.2.102 MSC-BSS O (note 12) 10-22 */
5039 ELEM_OPT_TLV(BE_AOIP_TRANS_LAY_ADD
, GSM_A_PDU_TYPE_BSSMAP
, BE_AOIP_TRANS_LAY_ADD
, NULL
);
5040 /* Codec List (MSC Preferred) 3.2.2.103 MSC-BSS O (note 13) 3-n */
5041 ELEM_OPT_TLV(BE_SPEECH_CODEC_LST
, GSM_A_PDU_TYPE_BSSMAP
, BE_SPEECH_CODEC_LST
, "(MSC Preferred)");
5042 /* Call Identifier 3.2.2.105 MSC-BSS O (note 12) 5 */
5043 ELEM_OPT_TV(BE_CALL_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_CALL_ID
, NULL
);
5044 /* Kc128 3.2.2.109 MSC-BSS C (note 15) 17 */
5045 ELEM_OPT_TV(BE_KC128
, GSM_A_PDU_TYPE_BSSMAP
, BE_KC128
, NULL
);
5047 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5051 * [2] 3.2.1.2 ASSIGNMENT COMPLETE
5054 bssmap_ass_complete(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5056 guint32 curr_offset
;
5060 curr_offset
= offset
;
5063 /* RR Cause 3.2.2.22 BSS-MSC O 2 */
5064 ELEM_OPT_TV(BE_RR_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_RR_CAUSE
, NULL
);
5065 /* Circuit Identity Code 3.2.2.2 BSS-MSC O (note 4) 3 */
5066 ELEM_OPT_TV(BE_CIC
, GSM_A_PDU_TYPE_BSSMAP
, BE_CIC
, NULL
);
5067 /* Cell Identifier 3.2.2.17 BSS-MSC O (note 1) 3-10 */
5068 ELEM_OPT_TLV(BE_CELL_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_CELL_ID
, NULL
);
5069 /* Chosen Channel 3.2.2.33 BSS-MSC O (note 3) 2 */
5070 ELEM_OPT_TV(BE_CHOSEN_CHAN
, GSM_A_PDU_TYPE_BSSMAP
, BE_CHOSEN_CHAN
, NULL
);
5071 /* Chosen Encryption Algorithm 3.2.2.44 BSS-MSC O (note 5) 2 */
5072 ELEM_OPT_TV(BE_CHOSEN_ENC_ALG
, GSM_A_PDU_TYPE_BSSMAP
, BE_CHOSEN_ENC_ALG
, NULL
);
5073 /* Circuit Pool 3.2.2.45 BSS-MSC O (note 2) 2 */
5074 ELEM_OPT_TV(BE_CCT_POOL
, GSM_A_PDU_TYPE_BSSMAP
, BE_CCT_POOL
, NULL
);
5075 /* Speech Version (Chosen) 3.2.2.51 BSS-MSC O (note 6) 2 */
5076 ELEM_OPT_TV(BE_SPEECH_VER
, GSM_A_PDU_TYPE_BSSMAP
, BE_SPEECH_VER
, " (Chosen)");
5077 /* LSA Identifier 3.2.2.15 BSS-MSC O (note 7) 5 */
5078 ELEM_OPT_TLV(BE_LSA_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_LSA_ID
, NULL
);
5079 /* Talker Priority 3.2.2.89 BSS-MSC O (note 8) 2 */
5080 ELEM_OPT_TV(BE_TALKER_PRI
, GSM_A_PDU_TYPE_BSSMAP
, BE_TALKER_PRI
, NULL
);
5081 /* AoIP Transport Layer Address (BSS) 3.2.2.102 BSS-MSC O (note 9) 10-22 */
5082 ELEM_OPT_TLV(BE_AOIP_TRANS_LAY_ADD
, GSM_A_PDU_TYPE_BSSMAP
, BE_AOIP_TRANS_LAY_ADD
, NULL
);
5083 /* Speech Codec (Chosen) 3.2.2.104 BSS-MSC O (note 10) 3-5 */
5084 ELEM_OPT_TLV(BE_SPEECH_CODEC
, GSM_A_PDU_TYPE_BSSMAP
, BE_SPEECH_CODEC
, "(Chosen)");
5085 /* Codec List (BSS supported) 3.2.2.103 MSC-BSS O (note 11) 3-n */
5086 ELEM_OPT_TLV(BE_SPEECH_CODEC_LST
, GSM_A_PDU_TYPE_BSSMAP
, BE_SPEECH_CODEC_LST
, "(BSS Supported)");
5088 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5092 * [2] 3.2.1.3 ASSIGNMENT FAILURE
5095 bssmap_ass_failure(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5097 guint32 curr_offset
;
5101 curr_offset
= offset
;
5104 /* Cause 3.2.2.5 BSS-MSC M 3-4 */
5105 ELEM_MAND_TLV(BE_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_CAUSE
, NULL
);
5106 /* RR Cause 3.2.2.22 BSS-MSC O 2 */
5107 ELEM_OPT_TV(BE_RR_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_RR_CAUSE
, NULL
);
5108 /* Circuit Pool 3.2.2.45 BSS-MSC O (note 1) 2 */
5109 ELEM_OPT_TV(BE_CCT_POOL
, GSM_A_PDU_TYPE_BSSMAP
, BE_CCT_POOL
, NULL
);
5110 /* Circuit Pool List 3.2.2.46 BSS-MSC O (note 2) V */
5111 ELEM_OPT_TLV(BE_CCT_POOL_LIST
, GSM_A_PDU_TYPE_BSSMAP
, BE_CCT_POOL_LIST
, NULL
);
5112 /* Talker Priority 3.2.2.89 BSS-MSC O (note 3) 2 */
5113 ELEM_OPT_TV(BE_TALKER_PRI
, GSM_A_PDU_TYPE_BSSMAP
, BE_TALKER_PRI
, NULL
);
5114 /* Codec List (BSS Supported) 3.2.2.103 BSS-MSC O (note 4) 3-n */
5115 ELEM_OPT_TLV(BE_SPEECH_CODEC_LST
, GSM_A_PDU_TYPE_BSSMAP
, BE_SPEECH_CODEC_LST
, "(BSS Supported)");
5117 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5124 bssmap_block(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5126 guint32 curr_offset
;
5130 curr_offset
= offset
;
5133 /* Circuit Identity Code 3.2.2.2 both M 3*/
5134 ELEM_MAND_TV(BE_CIC
, GSM_A_PDU_TYPE_BSSMAP
, BE_CIC
, NULL
);
5135 /* Cause 3.2.2.5 both M 3-4 */
5136 ELEM_MAND_TLV(BE_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_CAUSE
, NULL
);
5137 /* Connection Release Requested 3.2.2.3 MSC-BSS O 1 */
5138 ELEM_OPT_T(BE_CONN_REL_REQ
, GSM_A_PDU_TYPE_BSSMAP
, BE_CONN_REL_REQ
, NULL
);
5140 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5144 * [2] 3.2.1.5 BLOCKING ACKNOWLEDGE
5148 bssmap_block_ack(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5150 guint32 curr_offset
;
5154 curr_offset
= offset
;
5157 /* Circuit Identity Code 3.2.2.2 both M 3 */
5158 ELEM_MAND_TV(BE_CIC
, GSM_A_PDU_TYPE_BSSMAP
, BE_CIC
, NULL
);
5160 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5164 * [2] 3.2.1.6 UNBLOCK
5167 bssmap_unblock(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5169 guint32 curr_offset
;
5173 curr_offset
= offset
;
5176 /* Circuit Identity Code 3.2.2.2 both M 3 */
5177 ELEM_MAND_TV(BE_CIC
, GSM_A_PDU_TYPE_BSSMAP
, BE_CIC
, NULL
);
5179 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5183 * [2] 3.2.1.7 UNBLOCKING ACKNOWLEDGE
5186 bssmap_unblock_ack(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5188 guint32 curr_offset
;
5192 curr_offset
= offset
;
5195 /* Circuit Identity Code 3.2.2.2 both M 3 */
5196 ELEM_MAND_TV(BE_CIC
, GSM_A_PDU_TYPE_BSSMAP
, BE_CIC
, NULL
);
5198 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5202 * [2] 3.2.1.8 HANDOVER REQUEST
5205 bssmap_ho_req(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5207 guint32 curr_offset
;
5211 curr_offset
= offset
;
5214 /* Channel Type 3.2.2.11 MSC-BSS M 5-13 */
5215 ELEM_MAND_TLV(BE_CHAN_TYPE
, GSM_A_PDU_TYPE_BSSMAP
, BE_CHAN_TYPE
, NULL
);
5216 /* Encryption Information 3.2.2.10 MSC-BSS M (note 1) 3-n */
5217 ELEM_MAND_TLV(BE_ENC_INFO
, GSM_A_PDU_TYPE_BSSMAP
, BE_ENC_INFO
, NULL
);
5219 /* Classmark Information 1 3.2.2.30 MSC-BSS M# 2
5221 * Classmark Information 2 3.2.2.19 MSC-BSS M (note 6) 4-5
5223 ELEM_OPT_TV(BE_CM_INFO_1
, GSM_A_PDU_TYPE_BSSMAP
, BE_CM_INFO_1
, NULL
);
5225 ELEM_OPT_TLV(BE_CM_INFO_2
, GSM_A_PDU_TYPE_BSSMAP
, BE_CM_INFO_2
, NULL
);
5226 /* Cell Identifier (Serving) 3.2.2.17 MSC-BSS M (note 20) 5-10 */
5227 ELEM_MAND_TLV(BE_CELL_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_CELL_ID
, " (Serving)");
5228 /* Priority 3.2.2.18 MSC-BSS O 3 */
5229 ELEM_OPT_TLV(BE_PRIO
, GSM_A_PDU_TYPE_BSSMAP
, BE_PRIO
, NULL
);
5230 /* Circuit Identity Code 3.2.2.2 MSC-BSS O (note 7, 28 3 */
5231 ELEM_OPT_TV(BE_CIC
, GSM_A_PDU_TYPE_BSSMAP
, BE_CIC
, NULL
);
5232 /* Downlink DTX Flag 3.2.2.26 MSC-BSS O (note 3) 2 */
5233 ELEM_OPT_TV(BE_DOWN_DTX_FLAG
, GSM_A_PDU_TYPE_BSSMAP
, BE_DOWN_DTX_FLAG
, NULL
);
5234 /* Cell Identifier (Target) 3.2.2.17 MSC-BSS M (note 17) 3-10 */
5235 ELEM_MAND_TLV(BE_CELL_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_CELL_ID
, " (Target)");
5236 /* Interference Band To Be Used 3.2.2.21 MSC-BSS O 2 */
5237 ELEM_OPT_TV(BE_INT_BAND
, GSM_A_PDU_TYPE_BSSMAP
, BE_INT_BAND
, NULL
);
5238 /* Cause 3.2.2.5 MSC-BSS O (note 9) 3-4 */
5239 ELEM_OPT_TLV(BE_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_CAUSE
, NULL
);
5240 /* Classmark Information 3 3.2.2.20 MSC-BSS O (note 4) 3-34 */
5241 ELEM_OPT_TLV(BE_CM_INFO_3
, GSM_A_PDU_TYPE_BSSMAP
, BE_CM_INFO_3
, NULL
);
5242 /* Current Channel type 1 3.2.2.49 MSC-BSS O (note 8) 2 */
5243 ELEM_OPT_TV(BE_CURR_CHAN_1
, GSM_A_PDU_TYPE_BSSMAP
, BE_CURR_CHAN_1
, NULL
);
5244 /* Speech Version (Used) 3.2.2.51 MSC-BSS O (note 10) 2 */
5245 ELEM_OPT_TV(BE_SPEECH_VER
, GSM_A_PDU_TYPE_BSSMAP
, BE_SPEECH_VER
, " (Used)");
5246 /* Group Call Reference 3.2.2.55 MSC-BSS O (note 5) 7 */
5247 ELEM_OPT_TLV(BE_GROUP_CALL_REF
, GSM_A_PDU_TYPE_BSSMAP
, BE_GROUP_CALL_REF
, NULL
);
5248 /* Talker Flag 3.2.2.54 MSC-BSS O (note 11) 1 */
5249 ELEM_OPT_T(BE_TALKER_FLAG
, GSM_A_PDU_TYPE_BSSMAP
, BE_TALKER_FLAG
, NULL
);
5250 /* Configuration Evolution Indication 3.2.2.57 MSC-BSS O (note 12) 2 */
5251 ELEM_OPT_TV(BE_CONF_EVO_IND
, GSM_A_PDU_TYPE_BSSMAP
, BE_CONF_EVO_IND
, NULL
);
5252 /* Chosen Encryption Algorithm (Serving) 3.2.2.44 MSC-BSS O (note 2) 2 */
5253 ELEM_OPT_TV(BE_CHOSEN_ENC_ALG
, GSM_A_PDU_TYPE_BSSMAP
, BE_CHOSEN_ENC_ALG
, " (Serving)");
5254 /* Old BSS to New BSS Information 3.2.2.58 MSC-BSS O (note 13) 2-n */
5255 ELEM_OPT_TLV(BE_OLD2NEW_INFO
, GSM_A_PDU_TYPE_BSSMAP
, BE_OLD2NEW_INFO
, NULL
);
5256 /* LSA Information 3.2.2.23 MSC-BSS O (note 14) 3+4n */
5257 ELEM_OPT_TLV(BE_LSA_INFO
, GSM_A_PDU_TYPE_BSSMAP
, BE_LSA_INFO
, NULL
);
5258 /* LSA Access Control Suppression 3.2.2.61 MSC-BSS O (note 15) 2 */
5259 ELEM_OPT_TV(BE_LSA_ACC_CTRL
, GSM_A_PDU_TYPE_BSSMAP
, BE_LSA_ACC_CTRL
, NULL
);
5260 /* Service Handover 3.2.2.75 MSC-BSS O (note 21) 3 */
5261 ELEM_OPT_TLV(BE_SERV_HO
, GSM_A_PDU_TYPE_BSSMAP
, BE_SERV_HO
, NULL
);
5262 /* IMSI 3.2.2.6 MSC-BSC O (note 16) 3-10 */
5263 ELEM_OPT_TLV(BE_IMSI
, GSM_A_PDU_TYPE_BSSMAP
, BE_IMSI
, NULL
);
5264 /* Source RNC to target RNC transparent information (UMTS) 3.2.2.76 MSC-BSS O (note 18) n-m */
5265 ELEM_OPT_TLV(BE_SRC_RNC_TO_TAR_RNC_UMTS
, GSM_A_PDU_TYPE_BSSMAP
, BE_SRC_RNC_TO_TAR_RNC_UMTS
, NULL
);
5266 /* Source RNC to target RNC transparent information (cdma2000) 3.2.2.77 MSC-BSS O (note 19) n-m */
5267 ELEM_OPT_TLV(BE_SRC_RNC_TO_TAR_RNC_CDMA
, GSM_A_PDU_TYPE_BSSMAP
, BE_SRC_RNC_TO_TAR_RNC_CDMA
, NULL
);
5268 /* SNA Access Information 3.2.2.82 MSC-BSC O (note 22) 2+n */
5269 ELEM_OPT_TLV(BE_SNA_ACC_INF
, GSM_A_PDU_TYPE_BSSMAP
, BE_SNA_ACC_INF
, NULL
);
5270 /* Talker Priority 3.2.2.89 MSC-BSC O (note 23) 2 */
5271 ELEM_OPT_TV(BE_TALKER_PRI
, GSM_A_PDU_TYPE_BSSMAP
, BE_TALKER_PRI
, NULL
);
5272 /* AoIP Transport Layer Address (MGW) 3.2.2.102 MSC-BSS O (note 24) 10-22 */
5273 ELEM_OPT_TLV(BE_AOIP_TRANS_LAY_ADD
, GSM_A_PDU_TYPE_BSSMAP
, BE_AOIP_TRANS_LAY_ADD
, NULL
);
5274 /* Codec List (MSC Preferred) 3.2.2.103 MSC-BSS O (note 25) 3-n */
5275 ELEM_OPT_TLV(BE_SPEECH_CODEC_LST
, GSM_A_PDU_TYPE_BSSMAP
, BE_SPEECH_CODEC_LST
, "(MSC Preferred)");
5276 /* Call Identifier 3.2.2.105 MSC-BSS O (note 24) 5 */
5277 ELEM_OPT_TV(BE_CALL_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_CALL_ID
, NULL
);
5278 /* Kc128 3.2.2.109 MSC-BSS C (note 27) 17 */
5279 ELEM_OPT_TV(BE_KC128
, GSM_A_PDU_TYPE_BSSMAP
, BE_KC128
, NULL
);
5281 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5285 * [2] 3.2.1.9 HANDOVER REQUIRED
5288 bssmap_ho_reqd(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5290 guint32 curr_offset
;
5294 curr_offset
= offset
;
5297 /* Cause 3.2.2.5 BSS-MSC M 3-4 */
5298 ELEM_MAND_TLV(BE_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_CAUSE
, NULL
);
5299 /* Response Request 3.2.2.28 BSS-MSC O (note 8) 1 */
5300 ELEM_OPT_T(BE_RESP_REQ
, GSM_A_PDU_TYPE_BSSMAP
, BE_RESP_REQ
, NULL
);
5301 /* Cell Identifier List (Preferred) 3.2.2.27 BSS-MSC M (note 4) 2n+3 to 7n+3 */
5302 ELEM_MAND_TLV(BE_CELL_ID_LIST
, GSM_A_PDU_TYPE_BSSMAP
, BE_CELL_ID_LIST
, " (Preferred)");
5303 /* Circuit Pool List 3.2.2.46 BSS-MSC O (note 1) V */
5304 ELEM_OPT_TLV(BE_CCT_POOL_LIST
, GSM_A_PDU_TYPE_BSSMAP
, BE_CCT_POOL_LIST
, NULL
);
5305 /* Current Channel Type 1 3.2.2.49 BSS-MSC O (note 2) 2 */
5306 ELEM_OPT_TV(BE_CURR_CHAN_1
, GSM_A_PDU_TYPE_BSSMAP
, BE_CURR_CHAN_1
, NULL
);
5307 /* Speech Version (Used) 3.2.2.51 BSS-MSC O (note 3) 2 */
5308 ELEM_OPT_TV(BE_SPEECH_VER
, GSM_A_PDU_TYPE_BSSMAP
, BE_SPEECH_VER
, " (Used)");
5309 /* Queueing Indicator 3.2.2.50 BSS-MSC O 2 */
5310 ELEM_OPT_TV(BE_QUE_IND
, GSM_A_PDU_TYPE_BSSMAP
, BE_QUE_IND
, NULL
);
5311 /* Old BSS to New BSS Information 3.2.2.58 BSS-MSC O 2-n */
5312 ELEM_OPT_TLV(BE_OLD2NEW_INFO
, GSM_A_PDU_TYPE_BSSMAP
, BE_OLD2NEW_INFO
, NULL
);
5313 /* Source RNC to target RNC transparent information (UMTS) 3.2.2.76 BSS-MSC O (note 5) 3-m */
5314 ELEM_OPT_TLV(BE_SRC_RNC_TO_TAR_RNC_UMTS
, GSM_A_PDU_TYPE_BSSMAP
, BE_SRC_RNC_TO_TAR_RNC_UMTS
, NULL
);
5315 /* Source RNC to target RNC transparent information (cdma2000) 3.2.2.77 BSS-MSC O (note 6) n-m */
5316 ELEM_OPT_TLV(BE_SRC_RNC_TO_TAR_RNC_CDMA
, GSM_A_PDU_TYPE_BSSMAP
, BE_SRC_RNC_TO_TAR_RNC_CDMA
, NULL
);
5317 /* GERAN Classmark 3.2.2.78 BSS-MSC O (note 7) V */
5318 ELEM_OPT_TLV(BE_GERAN_CLS_M
, GSM_A_PDU_TYPE_BSSMAP
, BE_GERAN_CLS_M
, NULL
);
5319 /* Talker Priority 3.2.2.89 BSS-MSC O (note 9) 2 */
5320 ELEM_OPT_TV(BE_TALKER_PRI
, GSM_A_PDU_TYPE_BSSMAP
, BE_TALKER_PRI
, NULL
);
5321 /* Speech Codec (Used) 3.2.2.104 BSS-MSC O (note 10) 3-5 */
5322 ELEM_OPT_TLV(BE_SPEECH_CODEC
, GSM_A_PDU_TYPE_BSSMAP
, BE_SPEECH_CODEC
, "(Used)");
5323 /* CSG Identifier 3.2.2.110 BSS-MSC O (note 11) 7 */
5324 ELEM_OPT_TLV(BE_CSG_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_CSG_ID
, NULL
);
5326 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5330 * [2] 3.2.1.10 HANDOVER REQUEST ACKNOWLEDGE
5333 bssmap_ho_req_ack(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5335 guint32 curr_offset
;
5339 curr_offset
= offset
;
5342 /* Layer 3 Information 3.2.2.24 BSS-MSC M (note 1) 11-n */
5343 ELEM_MAND_TLV(BE_L3_INFO
, GSM_A_PDU_TYPE_BSSMAP
, BE_L3_INFO
, NULL
);
5344 /* Chosen Channel 3.2.2.33 BSS-MSC O (note 4) 2 */
5345 ELEM_OPT_TV(BE_CHOSEN_CHAN
, GSM_A_PDU_TYPE_BSSMAP
, BE_CHOSEN_CHAN
, NULL
);
5346 /* Chosen Encryption Algorithm 3.2.2.44 BSS-MSC O (note 5) 2 */
5347 ELEM_OPT_TV(BE_CHOSEN_ENC_ALG
, GSM_A_PDU_TYPE_BSSMAP
, BE_CHOSEN_ENC_ALG
, NULL
);
5348 /* Circuit Pool 3.2.2.45 BSS-MSC O (note 2) 2 */
5349 ELEM_OPT_TV(BE_CCT_POOL
, GSM_A_PDU_TYPE_BSSMAP
, BE_CCT_POOL
, NULL
);
5350 /* Speech Version (Chosen) 3.2.2.51 BSS-MSC O (note 6) 2 */
5351 ELEM_OPT_TV(BE_SPEECH_VER
, GSM_A_PDU_TYPE_BSSMAP
, BE_SPEECH_VER
, " (Chosen)");
5352 /* Circuit Identity Code 3.2.2.2 BSS-MSC O (note 3) 3 */
5353 ELEM_OPT_TV(BE_CIC
, GSM_A_PDU_TYPE_BSSMAP
, BE_CIC
, NULL
);
5354 /* LSA Identifier 3.2.2.15 BSS-MSC O (note 7) 5 */
5355 ELEM_OPT_TLV(BE_LSA_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_LSA_ID
, NULL
);
5356 /* New BSS to Old BSS Information 3.2.2.80 BSS-MSC O (note 8) 2-n */
5357 ELEM_OPT_TLV(BE_NEW_BSS_TO_OLD_BSS_INF
, GSM_A_PDU_TYPE_BSSMAP
, BE_NEW_BSS_TO_OLD_BSS_INF
, NULL
);
5358 /* Inter-System Information 3.2.2.81 BSS-MSC O (note 9) 2-n */
5359 ELEM_OPT_TLV(BE_INTER_SYS_INF
, GSM_A_PDU_TYPE_BSSMAP
, BE_INTER_SYS_INF
, NULL
);
5360 /* Talker Priority 3.2.2.89 BSS-MSC O (note 10) 2 */
5361 ELEM_OPT_TV(BE_TALKER_PRI
, GSM_A_PDU_TYPE_BSSMAP
, BE_TALKER_PRI
, NULL
);
5362 /* AoIP Transport Layer Address (BSS) 3.2.2.102 BSS-MSC O (note 11) 10-22 */
5363 ELEM_OPT_TLV(BE_AOIP_TRANS_LAY_ADD
, GSM_A_PDU_TYPE_BSSMAP
, BE_AOIP_TRANS_LAY_ADD
, NULL
);
5364 /* Codec List (BSS Supported) 3.2.2.103 BSS-MSC O (note 12) 3-n */
5365 ELEM_OPT_TLV(BE_SPEECH_CODEC_LST
, GSM_A_PDU_TYPE_BSSMAP
, BE_SPEECH_CODEC_LST
, "(BSS Supported)");
5366 /* Speech Codec (Chosen) 3.2.2.104 BSS-MSC O (note 12) 3-5 */
5367 ELEM_OPT_TLV(BE_SPEECH_CODEC
, GSM_A_PDU_TYPE_BSSMAP
, BE_SPEECH_CODEC
, "(Chosen)");
5369 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5373 * [2] 3.2.1.11 HANDOVER COMMAND
5376 bssmap_ho_cmd(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5378 guint32 curr_offset
;
5382 curr_offset
= offset
;
5385 /* Layer 3 Information 3.2.2.24 MSC-BSS M (note 1) 11-n */
5386 ELEM_MAND_TLV(BE_L3_INFO
, GSM_A_PDU_TYPE_BSSMAP
, BE_L3_INFO
, NULL
);
5387 /* Cell Identifier 3.2.2.17 MSC-BSS O 3-10 */
5388 ELEM_OPT_TLV(BE_CELL_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_CELL_ID
, NULL
);
5389 /* New BSS to Old BSS Information 3.2.2.80 MSC-BSS O (note 2) 2-n */
5390 ELEM_OPT_TLV(BE_NEW_BSS_TO_OLD_BSS_INF
, GSM_A_PDU_TYPE_BSSMAP
, BE_NEW_BSS_TO_OLD_BSS_INF
, NULL
);
5391 /* Talker Priority 3.2.2.89 MSC-BSS O (note 3) 2 */
5392 ELEM_OPT_TV(BE_TALKER_PRI
, GSM_A_PDU_TYPE_BSSMAP
, BE_TALKER_PRI
, NULL
);
5394 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5398 * [2] 3.2.1.12 HANDOVER COMPLETE
5401 bssmap_ho_complete(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5403 guint32 curr_offset
;
5407 curr_offset
= offset
;
5410 /* RR Cause 3.2.2.22 BSS-MSC O 2 */
5411 ELEM_OPT_TV(BE_RR_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_RR_CAUSE
, NULL
);
5412 /* Talker Priority 3.2.2.89 BSS-MSC O (note 1) 2 */
5413 ELEM_OPT_TV(BE_TALKER_PRI
, GSM_A_PDU_TYPE_BSSMAP
, BE_TALKER_PRI
, NULL
);
5414 /* Speech Codec (Chosen) 3.2.2.nn BSS-MSC O (note 2) 3-5 */
5415 ELEM_OPT_TLV(BE_SPEECH_CODEC
, GSM_A_PDU_TYPE_BSSMAP
, BE_SPEECH_CODEC
, "(Chosen)");
5416 /* Chosen Encryption Algorithm 3.2.2.44 BSS-MSC O (note 4) 2 */
5417 ELEM_OPT_TV(BE_CHOSEN_ENC_ALG
, GSM_A_PDU_TYPE_BSSMAP
, BE_CHOSEN_ENC_ALG
, NULL
);
5418 /* Chosen Channel 3.2.2.33 BSS-MSC O (note 5) 2 */
5419 ELEM_OPT_TV(BE_CHOSEN_CHAN
, GSM_A_PDU_TYPE_BSSMAP
, BE_CHOSEN_CHAN
, NULL
);
5421 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5425 * 3.2.1.13 HANDOVER SUCCEEDED
5428 bssmap_ho_succ(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5430 guint32 curr_offset
;
5434 curr_offset
= offset
;
5437 /* Talker Priority 3.2.2.89 MSC-BSS O (note 1) 2 */
5438 ELEM_OPT_TV(BE_TALKER_PRI
, GSM_A_PDU_TYPE_BSSMAP
, BE_TALKER_PRI
, NULL
);
5440 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5444 * [2] 3.2.1.14 HANDOVER CANDIDATE ENQUIRE
5447 bssmap_ho_cand_enq(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5449 guint32 curr_offset
;
5453 curr_offset
= offset
;
5456 /* Number Of Mss 3.2.2.8 MSC-BSS M 2 */
5457 ELEM_MAND_TV(BE_NUM_MS
, GSM_A_PDU_TYPE_BSSMAP
, BE_NUM_MS
, NULL
);
5459 /* Cell Identifier List 3.2.2.27 MSC-BSS M 2n+3 to 7n+3 */
5460 ELEM_MAND_TLV(BE_CELL_ID_LIST
, GSM_A_PDU_TYPE_BSSMAP
, BE_CELL_ID_LIST
, NULL
);
5462 /* Cell Identifier 3.2.2.17 MSC-BSS M 3-10 */
5463 ELEM_MAND_TLV(BE_CELL_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_CELL_ID
, NULL
);
5465 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5469 * [2] 3.2.1.15 HANDOVER CANDIDATE RESPONSE
5472 bssmap_ho_cand_resp(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5474 guint32 curr_offset
;
5478 curr_offset
= offset
;
5481 /* Number Of Mss 3.2.2.8 BSS-MSC M 2 */
5482 ELEM_MAND_TV(BE_NUM_MS
, GSM_A_PDU_TYPE_BSSMAP
, BE_NUM_MS
, NULL
);
5484 /* Cell Identifier 3.2.2.17 BSS-MSC M 3-10 */
5485 ELEM_MAND_TLV(BE_CELL_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_CELL_ID
, NULL
);
5487 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5491 * [2] 3.2.1.16 HANDOVER FAILURE
5494 bssmap_ho_failure(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5496 guint32 curr_offset
;
5500 curr_offset
= offset
;
5503 /* Cause 3.2.2.5 BSS-MSC M 3-4 */
5504 ELEM_MAND_TLV(BE_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_CAUSE
, NULL
);
5505 /* RR Cause 3.2.2.22 BSS-MSC O 2 */
5506 ELEM_OPT_TV(BE_RR_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_RR_CAUSE
, NULL
);
5507 /* Circuit Pool 3.2.2.45 BSS-MSC O (note 1) 2 */
5508 ELEM_OPT_TV(BE_CCT_POOL
, GSM_A_PDU_TYPE_BSSMAP
, BE_CCT_POOL
, NULL
);
5509 /* Circuit Pool List 3.2.2.46 BSS-MSC O (note 2) V */
5510 ELEM_OPT_TLV(BE_CCT_POOL_LIST
, GSM_A_PDU_TYPE_BSSMAP
, BE_CCT_POOL_LIST
, NULL
);
5511 /* GERAN Classmark 3.2.2.78 BSS-MSC O (note 3) V */
5512 ELEM_OPT_TLV(BE_GERAN_CLS_M
, GSM_A_PDU_TYPE_BSSMAP
, BE_GERAN_CLS_M
, NULL
);
5513 /* New BSS to Old BSS Information 3.2.2.80 BSS-MSC O (note 4) 2-n */
5514 ELEM_OPT_TLV(BE_NEW_BSS_TO_OLD_BSS_INF
, GSM_A_PDU_TYPE_BSSMAP
, BE_NEW_BSS_TO_OLD_BSS_INF
, NULL
);
5515 /* Inter-System Information 3.2.2.81 BSS-MSC O (note 5) 2-n */
5516 ELEM_OPT_TLV(BE_INTER_SYS_INF
, GSM_A_PDU_TYPE_BSSMAP
, BE_INTER_SYS_INF
, NULL
);
5517 /* Talker Priority 3.2.2.89 BSS-MSC O (note 6) 2 */
5518 ELEM_OPT_TV(BE_TALKER_PRI
, GSM_A_PDU_TYPE_BSSMAP
, BE_TALKER_PRI
, NULL
);
5519 /* Codec List (BSS Supported) 3.2.2.103 BSS-MSC O (note 7) 3-n */
5520 ELEM_OPT_TLV(BE_SPEECH_CODEC_LST
, GSM_A_PDU_TYPE_BSSMAP
, BE_SPEECH_CODEC_LST
, "(BSS Supported)");
5522 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5526 * 3.2.1.17 RESOURCE REQUEST
5529 bssmap_res_req(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5531 guint32 curr_offset
;
5535 curr_offset
= offset
;
5538 /* Periodicity 3.2.2.12 MSC-BSS M 2 */
5539 ELEM_MAND_TV(BE_PERIODICITY
, GSM_A_PDU_TYPE_BSSMAP
, BE_PERIODICITY
, NULL
);
5540 /* Resource Indication Method 3.2.2.29 MSC-BSS M 2 */
5541 ELEM_MAND_TV(BE_RES_IND_METHOD
, GSM_A_PDU_TYPE_BSSMAP
, BE_RES_IND_METHOD
, NULL
);
5542 /* Cell Identifier 3.2.2.17 MSC-BSS M 3-10 */
5543 ELEM_MAND_TLV(BE_CELL_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_CELL_ID
, NULL
);
5544 /* Extended Resource Indicator 3.2.2.13 MSC-BSS O 2 */
5545 ELEM_MAND_TV(BE_EXT_RES_IND
, GSM_A_PDU_TYPE_BSSMAP
, BE_EXT_RES_IND
, NULL
);
5547 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5551 * 3.2.1.18 RESOURCE INDICATION
5554 bssmap_res_ind(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5556 guint32 curr_offset
;
5560 curr_offset
= offset
;
5563 /* Resource Indication Method 3.2.2.29 BSS-MSC M 2 */
5564 ELEM_MAND_TV(BE_RES_IND_METHOD
, GSM_A_PDU_TYPE_BSSMAP
, BE_RES_IND_METHOD
, NULL
);
5565 /* Resource Available 3.2.2.4 BSS-MSC O (note 1) 21 */
5566 ELEM_MAND_TV(BE_RES_AVAIL
, GSM_A_PDU_TYPE_BSSMAP
, BE_RES_AVAIL
, NULL
);
5567 /* Cell Identifier 3.2.2.17 BSS-MSC M 3-10 */
5568 ELEM_MAND_TLV(BE_CELL_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_CELL_ID
, NULL
);
5569 /* Total Resource Accessible 3.2.2.14 BSS-MSC O (note 2) 5 */
5570 ELEM_MAND_TV(BE_TOT_RES_ACC
, GSM_A_PDU_TYPE_BSSMAP
, BE_TOT_RES_ACC
, NULL
);
5572 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5575 * [2] 3.2.1.19 PAGING
5578 bssmap_paging(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5580 guint32 curr_offset
;
5584 curr_offset
= offset
;
5587 /* IMSI 3.2.2.6 MSC-BSS M 3-10 */
5588 ELEM_MAND_TLV(BE_IMSI
, GSM_A_PDU_TYPE_BSSMAP
, BE_IMSI
, NULL
);
5589 /* TMSI 3.2.2.7 MSC-BSS O (note 1) 6 */
5590 ELEM_OPT_TLV(BE_TMSI
, GSM_A_PDU_TYPE_BSSMAP
, BE_TMSI
, NULL
);
5591 /* Cell Identifier List 3.2.2.27 MSC-BSS M 3 to 3+7n */
5592 ELEM_MAND_TLV(BE_CELL_ID_LIST
, GSM_A_PDU_TYPE_BSSMAP
, BE_CELL_ID_LIST
, NULL
);
5593 /* Channel Needed 3.2.2.36 MSC-BSS O (note 2) 2 */
5594 ELEM_OPT_TV(BE_CHAN_NEEDED
, GSM_A_PDU_TYPE_BSSMAP
, BE_CHAN_NEEDED
, NULL
);
5595 /* eMLPP Priority 3.2.2.56 MSC-BSS O (note 3) 2 */
5596 ELEM_OPT_TV(BE_EMLPP_PRIO
, GSM_A_PDU_TYPE_BSSMAP
, BE_EMLPP_PRIO
, NULL
);
5597 /* Paging Information 3.2.2.85 MSC-BSS O 2 */
5598 ELEM_OPT_TV(BE_PAGING_INF
, GSM_A_PDU_TYPE_BSSMAP
, BE_PAGING_INF
, NULL
);
5600 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5604 * [2] 3.2.1.20 CLEAR REQUEST
5607 bssmap_clear_req(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5609 guint32 curr_offset
;
5613 curr_offset
= offset
;
5616 /* Cause 3.2.2.5 BSS-MSC M 3-4 */
5617 ELEM_MAND_TLV(BE_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_CAUSE
, NULL
);
5619 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5623 * [2] 3.2.1.21 CLEAR COMMAND
5626 bssmap_clear_cmd(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5628 guint32 curr_offset
;
5632 curr_offset
= offset
;
5635 /* Layer 3 Header Information 3.2.2.9 MSC-BSS O (note) 4 */
5636 ELEM_OPT_TLV(BE_L3_HEADER_INFO
, GSM_A_PDU_TYPE_BSSMAP
, BE_L3_HEADER_INFO
, NULL
);
5637 /* Cause 3.2.2.5 MSC-BSS M 3-4 */
5638 ELEM_MAND_TLV(BE_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_CAUSE
, NULL
);
5639 /* CSFB Indication 3.2.2.121 MSC-BSS O 1 */
5640 ELEM_OPT_T(BE_CSFB_IND
, GSM_A_PDU_TYPE_BSSMAP
, BE_CSFB_IND
, NULL
);
5642 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5645 * 3.2.1.22 CLEAR COMPLETE
5650 * [2] 3.2.1.23 RESET
5653 bssmap_reset(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5655 guint32 curr_offset
;
5659 curr_offset
= offset
;
5662 /* Cause 3.2.2.5 Both M 3-4 */
5663 ELEM_MAND_TLV(BE_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_CAUSE
, NULL
);
5664 /* A-Interface Selector for RESET 3.2.2.107 Both O 2 */
5665 ELEM_OPT_TV(BE_A_ITF_SEL_FOR_RESET
, GSM_A_PDU_TYPE_BSSMAP
, BE_A_ITF_SEL_FOR_RESET
, NULL
);
5667 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5671 * 3.2.1.24 RESET ACKNOWLEDGE
5674 bssmap_reset_ack(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5676 guint32 curr_offset
;
5680 curr_offset
= offset
;
5683 /* A-Interface Selector for RESET 3.2.2.107 Both O 2 */
5684 ELEM_OPT_TV(BE_A_ITF_SEL_FOR_RESET
, GSM_A_PDU_TYPE_BSSMAP
, BE_A_ITF_SEL_FOR_RESET
, NULL
);
5686 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5690 * [2] 3.2.1.25 HANDOVER PERFORMED
5693 bssmap_ho_performed(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5695 guint32 curr_offset
;
5699 curr_offset
= offset
;
5702 /* Cause 3.2.2.5 BSS-MSC M 3-4 */
5703 ELEM_MAND_TLV(BE_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_CAUSE
, NULL
);
5704 /* Cell Identifier 3.2.2.17 BSS-MSC M (note 5) 3-10 */
5705 ELEM_MAND_TLV(BE_CELL_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_CELL_ID
, NULL
);
5706 /* Chosen Channel 3.2.2.33 BSS-MSC O (note 1) 2 */
5707 ELEM_OPT_TV(BE_CHOSEN_CHAN
, GSM_A_PDU_TYPE_BSSMAP
, BE_CHOSEN_CHAN
, NULL
);
5708 /* Chosen Encryption Algorithm 3.2.2.44 BSS-MSC O (note 2) 2 */
5709 ELEM_OPT_TV(BE_CHOSEN_ENC_ALG
, GSM_A_PDU_TYPE_BSSMAP
, BE_CHOSEN_ENC_ALG
, NULL
);
5710 /* Speech Version (Chosen) 3.2.2.51 BSS-MSC O (note 3) 2 */
5711 ELEM_OPT_TV(BE_SPEECH_VER
, GSM_A_PDU_TYPE_BSSMAP
, BE_SPEECH_VER
, " (Chosen)");
5712 /* LSA Identifier 3.2.2.15 BSS-MSC O (note 4) 5 */
5713 ELEM_OPT_TLV(BE_LSA_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_LSA_ID
, NULL
);
5714 /* Talker Priority 3.2.2.89 BSS-MSC O (note 6) 2 */
5715 ELEM_OPT_TV(BE_TALKER_PRI
, GSM_A_PDU_TYPE_BSSMAP
, BE_TALKER_PRI
, NULL
);
5716 /* Codec List (BSS Supported) (serving cell) 3.2.2.103 BSS-MSC O (note 7) 3-n */
5717 ELEM_OPT_TLV(BE_SPEECH_CODEC_LST
, GSM_A_PDU_TYPE_BSSMAP
, BE_SPEECH_CODEC_LST
, "(BSS Supported)");
5718 /* Speech Codec (Chosen) 3.2.2.104 BSS-MSC O (note 8) 3-5 */
5719 ELEM_OPT_TLV(BE_SPEECH_CODEC
, GSM_A_PDU_TYPE_BSSMAP
, BE_SPEECH_CODEC
, "(Chosen)");
5721 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5725 * [2] 3.2.1.26 OVERLOAD
5728 bssmap_overload(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5730 guint32 curr_offset
;
5734 curr_offset
= offset
;
5737 /* Cause 3.2.2.5 Both M 3-4 */
5738 ELEM_MAND_TLV(BE_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_CAUSE
, NULL
);
5739 /* Cell Identifier 3.2.2.17 BSS-MSC O 3-10 */
5740 ELEM_OPT_TLV(BE_CELL_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_CELL_ID
, NULL
);
5742 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5745 * 3.2.1.27 MSC INVOKE TRACE
5748 bssmap_msc_invoke_trace(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5750 guint32 curr_offset
;
5754 curr_offset
= offset
;
5757 /* Trace Type 3.2.2.37 MSC-BSS M 2 */
5758 ELEM_MAND_TV(BE_TRACE_TYPE
, GSM_A_PDU_TYPE_BSSMAP
, BE_TRACE_TYPE
, NULL
);
5759 /* Triggerid 3.2.2.38 MSC-BSS O 3-22 */
5760 ELEM_OPT_TLV(BE_TRIGGERID
, GSM_A_PDU_TYPE_BSSMAP
, BE_TRIGGERID
, NULL
);
5761 /* Trace Reference 3.2.2.39 MSC-BSS M 3 */
5762 ELEM_MAND_TV(BE_TRACE_REF
, GSM_A_PDU_TYPE_BSSMAP
, BE_TRACE_REF
, NULL
);
5763 /* Transactionid 3.2.2.40 MSC-BSS O 4 */
5764 ELEM_OPT_TLV(BE_TRANSID
, GSM_A_PDU_TYPE_BSSMAP
, BE_TRANSID
, NULL
);
5765 /* Mobile Identity 3.2.2.41 MSC-BSS O 3-10 */
5766 ELEM_OPT_TLV(BE_MID
, GSM_A_PDU_TYPE_BSSMAP
, BE_MID
, NULL
);
5767 /* OMCId 3.2.2.42 MSC-BSS O 3-22 */
5768 ELEM_OPT_TLV(BE_OMCID
, GSM_A_PDU_TYPE_BSSMAP
, BE_OMCID
, NULL
);
5770 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5774 * 3.2.1.28 BSS INVOKE TRACE
5777 bssmap_bss_invoke_trace(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5779 guint32 curr_offset
;
5783 curr_offset
= offset
;
5786 /* Trace Type 3.2.2.37 Both M 2 */
5787 ELEM_MAND_TV(BE_TRACE_TYPE
, GSM_A_PDU_TYPE_BSSMAP
, BE_TRACE_TYPE
, NULL
);
5788 /* Forward Indicator 3.2.2.43 Both O 2 */
5789 ELEM_OPT_TV(BE_FOR_IND
, GSM_A_PDU_TYPE_BSSMAP
, BE_FOR_IND
, NULL
);
5790 /* Triggerid 3.2.2.38 Both O 3-22 */
5791 ELEM_OPT_TLV(BE_TRIGGERID
, GSM_A_PDU_TYPE_BSSMAP
, BE_TRIGGERID
, NULL
);
5792 /* Trace Reference 3.2.2.39 Both M 3 */
5793 ELEM_MAND_TV(BE_TRACE_REF
, GSM_A_PDU_TYPE_BSSMAP
, BE_TRACE_REF
, NULL
);
5794 /* TransactionId 3.2.2.40 Both O 4 */
5795 ELEM_OPT_TLV(BE_TRANSID
, GSM_A_PDU_TYPE_BSSMAP
, BE_TRANSID
, NULL
);
5796 /* OMCId 3.2.2.42 Both O 3-22 */
5797 ELEM_OPT_TLV(BE_OMCID
, GSM_A_PDU_TYPE_BSSMAP
, BE_OMCID
, NULL
);
5799 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5803 * [2] 3.2.1.29 CLASSMARK UPDATE
5806 bssmap_cm_upd(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5808 guint32 curr_offset
;
5812 curr_offset
= offset
;
5815 /* Classmark Information Type 2 3.2.2.19 Both M 4-5 */
5816 ELEM_MAND_TLV(BE_CM_INFO_2
, GSM_A_PDU_TYPE_BSSMAP
, BE_CM_INFO_2
, NULL
);
5817 /* Classmark Information Type 3 3.2.2.20 Both O (note 1) 3-34 */
5818 ELEM_OPT_TLV(BE_CM_INFO_3
, GSM_A_PDU_TYPE_BSSMAP
, BE_CM_INFO_3
, NULL
);
5819 /* Talker Priority 3.2.2.89 Both O (note 2) 2 */
5820 ELEM_OPT_TV(BE_TALKER_PRI
, GSM_A_PDU_TYPE_BSSMAP
, BE_TALKER_PRI
, NULL
);
5822 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5826 * [2] 3.2.1.30 CIPHER MODE COMMAND
5829 bssmap_ciph_mode_cmd(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5831 guint32 curr_offset
;
5835 curr_offset
= offset
;
5838 /* Layer 3 Header Information 3.2.2.9 MSC-BSS O (note) 4 */
5839 ELEM_OPT_TLV(BE_L3_HEADER_INFO
, GSM_A_PDU_TYPE_BSSMAP
, BE_L3_HEADER_INFO
, NULL
);
5840 /* Encryption Information 3.2.2.10 MSC-BSS M 3-n */
5841 ELEM_MAND_TLV(BE_ENC_INFO
, GSM_A_PDU_TYPE_BSSMAP
, BE_ENC_INFO
, NULL
);
5842 /* Cipher Response Mode 3.2.2.34 MSC-BSS O 2 */
5843 ELEM_OPT_TV(BE_CIPH_RESP_MODE
, GSM_A_PDU_TYPE_BSSMAP
, BE_CIPH_RESP_MODE
, NULL
);
5844 /* Kc128 3.2.2.109 MSC-BSS C (note 2) 17 */
5845 ELEM_OPT_TV(BE_KC128
, GSM_A_PDU_TYPE_BSSMAP
, BE_KC128
, NULL
);
5847 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5851 * [2] 3.2.1.31 CIPHER MODE COMPLETE
5854 bssmap_ciph_mode_complete(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5856 guint32 curr_offset
;
5860 curr_offset
= offset
;
5863 /* Layer 3 Message Contents 3.2.2.35 BSS-MSC O 2-n */
5864 ELEM_OPT_TLV(BE_L3_MSG
, GSM_A_PDU_TYPE_BSSMAP
, BE_L3_MSG
, NULL
);
5865 /* Chosen Encryption Algorithm 3.2.2.44 BSS-MSC O (note) 2 */
5866 ELEM_OPT_TV(BE_CHOSEN_ENC_ALG
, GSM_A_PDU_TYPE_BSSMAP
, BE_CHOSEN_ENC_ALG
, NULL
);
5868 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5872 * [2] 3.2.1.32 COMPLETE LAYER 3 INFORMATION
5873 * Updated to 3GPP TS 48.008 version 11.5.0 Release 11
5876 bssmap_cl3_info(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5879 guint32 curr_offset
;
5882 curr_offset
= offset
;
5885 /* Cell Identifier 3.2.2.17 BSS-MSC M 3-10 */
5886 ELEM_MAND_TLV(BE_CELL_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_CELL_ID
, NULL
);
5887 /* Layer 3 Information 3.2.2.24 BSS-MSC M 3-n */
5888 ELEM_MAND_TLV(BE_L3_INFO
, GSM_A_PDU_TYPE_BSSMAP
, BE_L3_INFO
, NULL
);
5889 /* Chosen Channel 3.2.2.33 BSS-MSC O (note 1) 2 */
5890 ELEM_OPT_TV(BE_CHOSEN_CHAN
, GSM_A_PDU_TYPE_BSSMAP
, BE_CHOSEN_CHAN
, NULL
);
5891 /* LSA Identifier List 3.2.2.16 BSS-MSC O (note 2) 3+3n */
5892 ELEM_OPT_TLV(BE_LSA_ID_LIST
, GSM_A_PDU_TYPE_BSSMAP
, BE_LSA_ID_LIST
, NULL
);
5893 /* APDU 3.2.2.68 BSS-MSC O (note 3) 3-n */
5894 ELEM_OPT_TLV_E(BE_APDU
, GSM_A_PDU_TYPE_BSSMAP
, BE_APDU
, NULL
);
5895 /* Codec List (BSS Supported) 3.2.2.103 BSS-MSC O (note 4) 3-n */
5896 ELEM_OPT_TLV(BE_SPEECH_CODEC_LST
, GSM_A_PDU_TYPE_BSSMAP
, BE_SPEECH_CODEC_LST
, "(BSS Supported)");
5897 /* Redirect Attempt Flag 3.2.2.111 BSS-MSC O (note 5) 1 */
5898 ELEM_OPT_T(BE_REDIR_ATT_FLG
, GSM_A_PDU_TYPE_BSSMAP
, BE_REDIR_ATT_FLG
, NULL
);
5899 /* Send Sequence Number 3.2.2.113 BSS-MSC O (note 6) 2 */
5900 ELEM_OPT_TV(BE_SEND_SEQN
, GSM_A_PDU_TYPE_BSSMAP
, BE_SEND_SEQN
, NULL
);
5901 /* IMSI 3.2.2.6 BSS-MSC O (note 7) 3-10 */
5902 ELEM_OPT_TLV(BE_IMSI
, GSM_A_PDU_TYPE_BSSMAP
, BE_IMSI
, NULL
);
5903 /* Selected PLMN ID 3.2.2.126 BSS-MSC O (note 8) 4 */
5904 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5907 * 3.2.1.33 QUEUEING INDICATION
5912 * [2] 3.2.1.34 SAPI "n" REJECT
5915 bssmap_sapi_rej(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5918 guint32 curr_offset
;
5921 curr_offset
= offset
;
5924 /* DLCI 3.2.2.25 BSS-MSC M 2 */
5925 ELEM_MAND_TV(BE_DLCI
, GSM_A_PDU_TYPE_BSSMAP
, BE_DLCI
, NULL
);
5926 /* Cause 3.2.2.5 BSS-MSC M 3-4 */
5927 ELEM_MAND_TLV(BE_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_CAUSE
, NULL
);
5929 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5935 * [2] 3.2.1.37 HANDOVER REQUIRED REJECT
5938 bssmap_ho_reqd_rej(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5940 guint32 curr_offset
;
5944 curr_offset
= offset
;
5947 /* Cause 3.2.2.5 MSC-BSS M 3-4 */
5948 ELEM_MAND_TLV(BE_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_CAUSE
, NULL
);
5949 /* New BSS to Old BSS Information 3.2.2.78 MSC-BSS O (note 1) 2-n */
5950 ELEM_OPT_TLV(BE_NEW_BSS_TO_OLD_BSS_INF
, GSM_A_PDU_TYPE_BSSMAP
, BE_NEW_BSS_TO_OLD_BSS_INF
, NULL
);
5951 /* Talker Priority 3.2.2.89 MSC-BSS O (note 2) 2 */
5952 ELEM_OPT_TV(BE_TALKER_PRI
, GSM_A_PDU_TYPE_BSSMAP
, BE_TALKER_PRI
, NULL
);
5954 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5958 * [2] 3.2.1.38 RESET CIRCUIT
5961 bssmap_reset_cct(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5963 guint32 curr_offset
;
5967 curr_offset
= offset
;
5970 /* Circuit Identity Code 3.2.2.2 Both M 3 */
5971 ELEM_MAND_TV(BE_CIC
, GSM_A_PDU_TYPE_BSSMAP
, BE_CIC
, NULL
);
5972 /* Cause 3.2.2.5 Both M 3-4 */
5973 ELEM_MAND_TLV(BE_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_CAUSE
, NULL
);
5975 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5979 * [2] 3.2.1.39 RESET CIRCUIT ACKNOWLEDGE
5982 bssmap_reset_cct_ack(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
5984 guint32 curr_offset
;
5988 curr_offset
= offset
;
5991 /* Circuit Identity 3.2.2.2 Both M 3 */
5992 ELEM_MAND_TV(BE_CIC
, GSM_A_PDU_TYPE_BSSMAP
, BE_CIC
, NULL
);
5994 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
5998 * 3.2.1.40 HANDOVER DETECT
6001 bssmap_ho_det(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6003 guint32 curr_offset
;
6007 curr_offset
= offset
;
6010 /* Talker Priority 3.2.2.89 BSS-MSC O (note 1) 2 */
6011 ELEM_OPT_TV(BE_TALKER_PRI
, GSM_A_PDU_TYPE_BSSMAP
, BE_TALKER_PRI
, NULL
);
6013 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6016 * [2] 3.2.1.41 CIRCUIT GROUP BLOCK
6019 bssmap_cct_group_block(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6021 guint32 curr_offset
;
6025 curr_offset
= offset
;
6028 /* Cause 3.2.2.5 Both M 3-4 */
6029 ELEM_MAND_TLV(BE_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_CAUSE
, NULL
);
6030 /* Circuit Identity Code 3.2.2.2 Both M 3 */
6031 ELEM_MAND_TV(BE_CIC
, GSM_A_PDU_TYPE_BSSMAP
, BE_CIC
, NULL
);
6032 /* Circuit Identity Code List 3.2.2.31 Both M 4-35 */
6033 ELEM_MAND_TLV(BE_CIC_LIST
, GSM_A_PDU_TYPE_BSSMAP
, BE_CIC_LIST
, NULL
);
6035 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6039 * [2] 3.2.1.42 CIRCUIT GROUP BLOCKING ACKNOWLEDGE
6042 bssmap_cct_group_block_ack(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6044 guint32 curr_offset
;
6048 curr_offset
= offset
;
6051 /* Circuit Identity Code 3.2.2.2 Both M 3 */
6052 ELEM_MAND_TV(BE_CIC
, GSM_A_PDU_TYPE_BSSMAP
, BE_CIC
, NULL
);
6053 /* Circuit Identity Code List 3.2.2.31 Both M 4-35 */
6054 ELEM_MAND_TLV(BE_CIC_LIST
, GSM_A_PDU_TYPE_BSSMAP
, BE_CIC_LIST
, NULL
);
6056 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6060 * [2] 3.2.1.43 CIRCUIT GROUP UNBLOCK
6063 bssmap_cct_group_unblock(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6065 guint32 curr_offset
;
6069 curr_offset
= offset
;
6072 /* Circuit Identity Code 3.2.2.2 Both M 3 */
6073 ELEM_MAND_TV(BE_CIC
, GSM_A_PDU_TYPE_BSSMAP
, BE_CIC
, NULL
);
6074 /* Circuit Identity Code List 3.2.2.31 Both M 4-35 */
6075 ELEM_MAND_TLV(BE_CIC_LIST
, GSM_A_PDU_TYPE_BSSMAP
, BE_CIC_LIST
, NULL
);
6077 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6081 * [2] 3.2.1.44 CIRCUIT GROUP UNBLOCKING ACKNOWLEDGE
6084 bssmap_cct_group_unblock_ack(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6086 guint32 curr_offset
;
6090 curr_offset
= offset
;
6093 /* Circuit Identity Code 3.2.2.2 Both M 3 */
6094 ELEM_MAND_TV(BE_CIC
, GSM_A_PDU_TYPE_BSSMAP
, BE_CIC
, NULL
);
6095 /* Circuit Identity Code List 3.2.2.31 Both M 4-35 */
6096 ELEM_MAND_TLV(BE_CIC_LIST
, GSM_A_PDU_TYPE_BSSMAP
, BE_CIC_LIST
, NULL
);
6098 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6102 * [2] 3.2.1.45 CONFUSION
6105 bssmap_confusion(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6107 guint32 curr_offset
;
6111 curr_offset
= offset
;
6114 /* Cause 3.2.2.5 Both M 3-4 */
6115 ELEM_MAND_TLV(BE_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_CAUSE
, NULL
);
6116 /* Diagnostics 3.2.2.32 Both M 4-n */
6117 ELEM_MAND_TLV(BE_DIAG
, GSM_A_PDU_TYPE_BSSMAP
, BE_DIAG
, NULL
);
6119 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6122 * 3.2.1.46 CLASSMARK REQUEST
6125 bssmap_cls_m_req(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6127 guint32 curr_offset
;
6131 curr_offset
= offset
;
6134 /* Talker Priority 3.2.2.89 MSC-BSS O (note 1) 2 */
6135 ELEM_OPT_TV(BE_TALKER_PRI
, GSM_A_PDU_TYPE_BSSMAP
, BE_TALKER_PRI
, NULL
);
6137 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6140 * [2] 3.2.1.47 UNEQUIPPED CIRCUIT
6143 bssmap_unequipped_cct(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6145 guint32 curr_offset
;
6149 curr_offset
= offset
;
6152 /* Circuit Identity Code 3.2.2.2 Both M 3 */
6153 ELEM_MAND_TV(BE_CIC
, GSM_A_PDU_TYPE_BSSMAP
, BE_CIC
, NULL
);
6154 /* Circuit Identity Code List 3.2.2.31 Both O 4-35 */
6155 ELEM_OPT_TLV(BE_CIC_LIST
, GSM_A_PDU_TYPE_BSSMAP
, BE_CIC_LIST
, NULL
);
6157 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6161 * [2] 3.2.1.48 CIPHER MODE REJECT
6164 bssmap_ciph_mode_rej(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6166 guint32 curr_offset
;
6170 curr_offset
= offset
;
6173 /* Cause 3.2.2.5 BSS-MSC M 3-4 */
6174 ELEM_MAND_TLV(BE_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_CAUSE
, NULL
);
6176 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6180 * [2] 3.2.1.49 LOAD INDICATION
6183 bssmap_load_ind(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6185 guint32 curr_offset
;
6189 curr_offset
= offset
;
6192 /* Time Indication 3.2.2.47 Both M 2 */
6193 ELEM_MAND_TV(BE_TIME_IND
, GSM_A_PDU_TYPE_BSSMAP
, BE_TIME_IND
, NULL
);
6194 /* Cell Identifier 3.2.2.17 Both M 3-10 */
6195 ELEM_MAND_TLV(BE_CELL_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_CELL_ID
, NULL
);
6196 /* Cell Identifier List (Target) 3.2.2.27 Both M 3 to 3+7n */
6197 ELEM_MAND_TLV(BE_CELL_ID_LIST
, GSM_A_PDU_TYPE_BSSMAP
, BE_CELL_ID_LIST
, " (Target)");
6198 /* Resource Situation 3.2.2.48 Both O (note 1) 4-N */
6199 ELEM_OPT_TLV(BE_RES_SIT
, GSM_A_PDU_TYPE_BSSMAP
, BE_RES_SIT
, NULL
);
6200 /* Cause 3.2.2.5 Both O (note 2) 4-5 */
6201 ELEM_OPT_TLV(BE_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_CAUSE
, NULL
);
6203 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6206 * 3.2.1.50 VGCS/VBS SETUP
6209 bssmap_vgcs_vbs_setup(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6211 guint32 curr_offset
;
6215 curr_offset
= offset
;
6218 /* Group Call Reference 3.2.2.55 MSC-BSS M 7 */
6219 ELEM_MAND_TLV(BE_GROUP_CALL_REF
, GSM_A_PDU_TYPE_BSSMAP
, BE_GROUP_CALL_REF
, NULL
);
6220 /* Priority 3.2.2.18 MSC-BSS O 3 */
6221 ELEM_OPT_TLV(BE_PRIO
, GSM_A_PDU_TYPE_BSSMAP
, BE_PRIO
, NULL
);
6222 /* VGCS Feature Flags 3.2.2.88 MSC-BSS O 3 */
6223 ELEM_OPT_TLV(BE_VGCS_FEAT_FLG
, GSM_A_PDU_TYPE_BSSMAP
, BE_VGCS_FEAT_FLG
, NULL
);
6225 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6229 * 3.2.1.51 VGCS/VBS SETUP ACK
6232 bssmap_vgcs_vbs_setup_ack(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6234 guint32 curr_offset
;
6238 curr_offset
= offset
;
6241 /* VGCS Feature Flags 3.2.2.88 BSS-MSC O(note 1) 3 */
6242 ELEM_OPT_TLV(BE_VGCS_FEAT_FLG
, GSM_A_PDU_TYPE_BSSMAP
, BE_VGCS_FEAT_FLG
, NULL
);
6244 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6248 * 3.2.1.52 VGCS/VBS SETUP REFUSE
6251 bssmap_vgcs_vbs_setup_refuse(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6253 guint32 curr_offset
;
6257 curr_offset
= offset
;
6260 /* Cause 3.2.2.5 BSS-MSC M 3-4 */
6261 ELEM_MAND_TLV(BE_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_CAUSE
, NULL
);
6263 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6267 * 3.2.1.53 VGCS/VBS ASSIGNMENT REQUEST
6270 bssmap_vgcs_vbs_ass_req(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6272 guint32 curr_offset
;
6276 curr_offset
= offset
;
6279 /* Channel Type 3.2.2.11 MSC-BSS M (note 2) 5-13 */
6280 ELEM_MAND_TV(BE_CURR_CHAN_1
, GSM_A_PDU_TYPE_BSSMAP
, BE_CURR_CHAN_1
, NULL
);
6281 /* Assignment Requirement 3.2.2.52 MSC-BSS M 2 */
6282 ELEM_MAND_TV(BE_ASS_REQ
, GSM_A_PDU_TYPE_BSSMAP
, BE_ASS_REQ
, NULL
);
6283 /* Cell Identifier 3.2.2.17 MSC-BSS M 3-10 */
6284 ELEM_MAND_TLV(BE_CELL_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_CELL_ID
, NULL
);
6285 /* Group Call Reference 3.2.2.55 MSC-BSS M 7 */
6286 ELEM_MAND_TLV(BE_GROUP_CALL_REF
, GSM_A_PDU_TYPE_BSSMAP
, BE_GROUP_CALL_REF
, NULL
);
6287 /* Priority 3.2.2.18 MSC-BSS O 3 */
6288 ELEM_OPT_TLV(BE_PRIO
, GSM_A_PDU_TYPE_BSSMAP
, BE_PRIO
, NULL
);
6289 /* Circuit Identity Code 3.2.2.2 MSC-BSS O (note 4, 5) 3 */
6290 ELEM_OPT_TV(BE_CIC
, GSM_A_PDU_TYPE_BSSMAP
, BE_CIC
, NULL
);
6291 /* Downlink DTX Flag 3.2.2.26 MSC-BSS O (note 2, 4) 2 */
6292 ELEM_OPT_TV(BE_DOWN_DTX_FLAG
, GSM_A_PDU_TYPE_BSSMAP
, BE_DOWN_DTX_FLAG
, NULL
);
6293 /* Encryption Information 3.2.2.10 MSC-BSS O 3-n */
6294 ELEM_OPT_TLV(BE_ENC_INFO
, GSM_A_PDU_TYPE_BSSMAP
, BE_ENC_INFO
, NULL
);
6295 /* VSTK_RAND 3.2.2.83 MSC-BSS O (note 1) 7 */
6296 ELEM_OPT_TLV(BE_VSTK_RAND_INF
, GSM_A_PDU_TYPE_BSSMAP
, BE_VSTK_RAND_INF
, NULL
);
6297 /* VSTK 3.2.2.84 MSC-BSS O (note 1) 18 */
6298 ELEM_OPT_TLV(BE_VSTK_INF
, GSM_A_PDU_TYPE_BSSMAP
, BE_VSTK_INF
, NULL
);
6299 /* Cell Identifier List Segment 3.2.2.27a MSC-BSS O (note 3) 4-? */
6300 ELEM_OPT_TLV(BE_CELL_ID_LIST_SEG
, GSM_A_PDU_TYPE_BSSMAP
, BE_CELL_ID_LIST_SEG
, NULL
);
6302 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6305 * 3.2.1.54 VGCS/VBS ASSIGNMENT RESULT
6308 bssmap_vgcs_vbs_ass_res(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6310 guint32 curr_offset
;
6314 curr_offset
= offset
;
6317 /* Channel Type 3.2.2.11 BSS-MSC M (note 3, 4) 5 */
6318 ELEM_OPT_TV(BE_CURR_CHAN_1
, GSM_A_PDU_TYPE_BSSMAP
, BE_CURR_CHAN_1
, NULL
);
6319 /* Cell Identifier 3.2.2.17 BSS-MSC M 3-10 */
6320 ELEM_MAND_TLV(BE_CELL_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_CELL_ID
, NULL
);
6321 /* Chosen Channel 3.2.2.33 BSS-MSC O (note 2) 2 */
6322 ELEM_OPT_TV(BE_CHOSEN_CHAN
, GSM_A_PDU_TYPE_BSSMAP
, BE_CHOSEN_CHAN
, NULL
);
6323 /* Circuit Identity Code 3.2.2.2 BSS-MSC O (note 5) 3 */
6324 ELEM_OPT_TV(BE_CIC
, GSM_A_PDU_TYPE_BSSMAP
, BE_CIC
, NULL
);
6325 /* Circuit Pool 3.2.2.45 BSS-MSC O (note 1) 2 */
6326 ELEM_OPT_TV(BE_CCT_POOL
, GSM_A_PDU_TYPE_BSSMAP
, BE_CCT_POOL
, NULL
);
6328 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6331 * 3.2.1.55 VGCS/VBS ASSIGNMENT FAILURE
6334 bssmap_vgcs_vbs_ass_fail(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6336 guint32 curr_offset
;
6340 curr_offset
= offset
;
6343 /* Cause 3.2.2.5 BSS-MSC M 3-4 */
6344 ELEM_OPT_TLV(BE_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_CAUSE
, NULL
);
6345 /* Circuit Pool 3.2.2.45 BSS-MSC O (note 1) 2 */
6346 ELEM_OPT_TV(BE_CCT_POOL
, GSM_A_PDU_TYPE_BSSMAP
, BE_CCT_POOL
, NULL
);
6347 /* Circuit Pool List 3.2.2.46 BSS-MSC O (note 2) V */
6348 ELEM_OPT_TLV(BE_CCT_POOL_LIST
, GSM_A_PDU_TYPE_BSSMAP
, BE_CCT_POOL_LIST
, NULL
);
6350 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6353 * 3.2.1.56 VGCS/VBS QUEUING INDICATION
6357 * 3.2.1.57 UPLINK REQUEST
6360 bssmap_uplink_req(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6362 guint32 curr_offset
;
6366 curr_offset
= offset
;
6369 /* Talker Priority 3.2.2.89 BSS-MSC O (note 1) 2 */
6370 ELEM_OPT_TV(BE_TALKER_PRI
, GSM_A_PDU_TYPE_BSSMAP
, BE_TALKER_PRI
, NULL
);
6371 /* Cell Identifier 3.2.2.17 BSS-MSC O (note 1) 3-10 */
6372 ELEM_MAND_TLV(BE_CELL_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_CELL_ID
, NULL
);
6373 /* Layer 3 Information 3.2.2.24 BSS-MSC O (note 1,3) 3-n */
6374 ELEM_OPT_TLV(BE_L3_INFO
, GSM_A_PDU_TYPE_BSSMAP
, BE_L3_INFO
, NULL
);
6375 /* Mobile Identity 3.2.2.41 BSS-MSC O (note 1,2) 3-n */
6376 ELEM_OPT_TLV(BE_MID
, GSM_A_PDU_TYPE_COMMON
, DE_MID
, NULL
);
6378 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6381 * 3.2.1.58 UPLINK REQUEST ACKNOWLEDGE
6384 bssmap_uplink_req_ack(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6386 guint32 curr_offset
;
6390 curr_offset
= offset
;
6393 /* Talker Priority 3.2.2.89 MSC-BSS O (note 1) 2 */
6394 ELEM_OPT_TV(BE_TALKER_PRI
, GSM_A_PDU_TYPE_BSSMAP
, BE_TALKER_PRI
, NULL
);
6395 /* Emergency set indication 3.2.2.90 MSC-BSS O (note 1) 1 */
6396 ELEM_OPT_T(BE_EMRG_SET_IND
, GSM_A_PDU_TYPE_BSSMAP
, BE_EMRG_SET_IND
, NULL
);
6397 /* Talker Identity 3.2.2.91 MSC-BSS O 3-20 */
6398 ELEM_MAND_TLV(BE_TALKER_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_TALKER_ID
, NULL
);
6400 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6403 * 3.2.1.59 UPLINK REQUEST CONFIRMATION
6406 bssmap_uplink_req_conf(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6408 guint32 curr_offset
;
6412 curr_offset
= offset
;
6415 /* Cell Identifier 3.2.2.17 BSS-MSC M 3-10 */
6416 ELEM_MAND_TLV(BE_CELL_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_CELL_ID
, NULL
);
6417 /* Talker Identity 3.2.2.91 BSS-MSC O 3-20 */
6418 ELEM_OPT_TLV(BE_TALKER_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_TALKER_ID
, NULL
);
6419 /* Layer 3 Information 3.2.2.24 BSS-MSC M 3-n */
6420 ELEM_MAND_TLV(BE_L3_INFO
, GSM_A_PDU_TYPE_BSSMAP
, BE_L3_INFO
, NULL
);
6422 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6425 * 3.2.1.59a UPLINK APPLICATION DATA
6428 bssmap_uplink_app_data(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6430 guint32 curr_offset
;
6434 curr_offset
= offset
;
6437 /* Cell Identifier 3.2.2.17 BSS-MSC M 3-10 */
6438 ELEM_MAND_TLV(BE_CELL_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_CELL_ID
, NULL
);
6439 /* Layer 3 Information 3.2.2.24 BSS-MSC M 3-n */
6440 ELEM_MAND_TLV(BE_L3_INFO
, GSM_A_PDU_TYPE_BSSMAP
, BE_L3_INFO
, NULL
);
6441 /* Application Data information 3.2.2.100 BSS-MSC M 3 */
6442 ELEM_MAND_TLV(BE_APP_DATA_INF
, GSM_A_PDU_TYPE_BSSMAP
, BE_APP_DATA_INF
, NULL
);
6444 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6447 * 3.2.1.60 UPLINK RELEASE INDICATION
6450 bssmap_uplink_rel_ind(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6452 guint32 curr_offset
;
6456 curr_offset
= offset
;
6459 /* Cause 3.2.2.5 BSS-MSC M 3-4 */
6460 ELEM_MAND_TLV(BE_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_CAUSE
, NULL
);
6461 /* Talker Priority 3.2.2.89 BSS-MSC O (note 1) 2 */
6462 ELEM_OPT_TV(BE_TALKER_PRI
, GSM_A_PDU_TYPE_BSSMAP
, BE_TALKER_PRI
, NULL
);
6465 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6468 * 3.2.1.61 UPLINK REJECT COMMAND
6471 bssmap_uplink_rej_cmd(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6473 guint32 curr_offset
;
6477 curr_offset
= offset
;
6480 /* Cause 3.2.2.5 MSC-BSS M 3-4 */
6481 ELEM_MAND_TLV(BE_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_CAUSE
, NULL
);
6482 /* Current Talker Priority 3.2.2.89 MSC-BSS O (note 1) 2 */
6483 ELEM_OPT_TV(BE_TALKER_PRI
, GSM_A_PDU_TYPE_BSSMAP
, BE_TALKER_PRI
, "Current");
6484 /* Rejected Talker Priority 3.2.2.89 MSC-BSS O (note 1) 2 */
6485 ELEM_OPT_TV(BE_TALKER_PRI
, GSM_A_PDU_TYPE_BSSMAP
, BE_TALKER_PRI
, "Rejected");
6486 /* Talker Identity 3.2.2.91 MSC-BSS O 3-20 */
6487 ELEM_OPT_TLV(BE_TALKER_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_TALKER_ID
, NULL
);
6489 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6492 * 3.2.1.62 UPLINK RELEASE COMMAND
6495 bssmap_uplink_rel_cmd(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6497 guint32 curr_offset
;
6501 curr_offset
= offset
;
6504 /* Cause 3.2.2.5 MSC-BSS M 3-4 */
6505 ELEM_OPT_TLV(BE_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_CAUSE
, NULL
);
6507 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6511 * 3.2.1.63 UPLINK SEIZED COMMAND
6514 bssmap_uplink_seized_cmd(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6516 guint32 curr_offset
;
6520 curr_offset
= offset
;
6523 /* Cause 3.2.2.5 MSC-BSS M 3-4 */
6524 ELEM_OPT_TLV(BE_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_CAUSE
, NULL
);
6525 /* Talker Priority 3.2.2.89 MSC-BSS O (note 1) 2 */
6526 ELEM_OPT_TV(BE_TALKER_PRI
, GSM_A_PDU_TYPE_BSSMAP
, BE_TALKER_PRI
, NULL
);
6527 /* Emergency set indication 3.2.2.90 MSC-BSS O (note 1) 1 */
6528 ELEM_OPT_T(BE_EMRG_SET_IND
, GSM_A_PDU_TYPE_BSSMAP
, BE_EMRG_SET_IND
, NULL
);
6529 /* Talker Identity 3.2.2.91 MSC-BSS O 3-20 */
6530 ELEM_MAND_TLV(BE_TALKER_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_TALKER_ID
, NULL
);
6532 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6538 bssmap_sus(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6540 guint32 curr_offset
;
6544 curr_offset
= offset
;
6547 /* DLCI 3.2.2.25 BSS-MSC M 2 */
6548 ELEM_MAND_TV(BE_DLCI
, GSM_A_PDU_TYPE_BSSMAP
, BE_DLCI
, NULL
);
6550 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6556 bssmap_res(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6558 guint32 curr_offset
;
6562 curr_offset
= offset
;
6565 /* DLCI 3.2.2.25 BSS-MSC M 2 */
6566 ELEM_MAND_TV(BE_DLCI
, GSM_A_PDU_TYPE_BSSMAP
, BE_DLCI
, NULL
);
6568 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6571 * [2] 3.2.1.66 CHANGE CIRCUIT
6574 bssmap_change_cct(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6576 guint32 curr_offset
;
6580 curr_offset
= offset
;
6583 /* Cause 3.2.2.5 MSC-BSS M 3-4 */
6584 ELEM_MAND_TLV(BE_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_CAUSE
, NULL
);
6586 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6590 * [2] 3.2.1.67 CHANGE CIRCUIT ACKNOWLEDGE
6593 bssmap_change_cct_ack(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6595 guint32 curr_offset
;
6599 curr_offset
= offset
;
6602 /* Circuit identity 3.2.2.2 BSS-MSC M 3 */
6603 ELEM_MAND_TV(BE_CIC
, GSM_A_PDU_TYPE_BSSMAP
, BE_CIC
, NULL
);
6605 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6609 * [2] 3.2.1.68 Common ID
6612 bssmap_common_id(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6614 guint32 curr_offset
;
6618 curr_offset
= offset
;
6621 /* IMSI 3.2.2.6 MSC-BSS M 3-10 */
6622 ELEM_MAND_TLV(BE_IMSI
, GSM_A_PDU_TYPE_BSSMAP
, BE_IMSI
, NULL
);
6623 /* SNA Access Information 3.2.2.82 MSC-BSC O (note) 2+n */
6624 ELEM_OPT_TLV(BE_SNA_ACC_INF
, GSM_A_PDU_TYPE_BSSMAP
, BE_SNA_ACC_INF
, NULL
);
6626 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6630 * [2] 3.2.1.69 LSA INFORMATION
6633 bssmap_lsa_info(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6635 guint32 curr_offset
;
6639 curr_offset
= offset
;
6642 /* LSA Information 3.2.2.23 MSC-BSS M 3+4n */
6643 ELEM_MAND_TLV(BE_LSA_INFO
, GSM_A_PDU_TYPE_BSSMAP
, BE_LSA_INFO
, NULL
);
6645 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6649 * [2] 3.2.1.70 (void)
6652 bssmap_conn_oriented(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6654 guint32 curr_offset
;
6658 curr_offset
= offset
;
6661 ELEM_MAND_TLV_E(BE_APDU
, GSM_A_PDU_TYPE_BSSMAP
, BE_APDU
, NULL
);
6663 ELEM_OPT_TLV(BE_SEG
, GSM_A_PDU_TYPE_BSSMAP
, BE_SEG
, NULL
);
6665 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6669 * 3.2.1.71 PERFORM LOCATION REQUEST
6672 bssmap_perf_loc_req(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6674 guint32 curr_offset
;
6678 curr_offset
= offset
;
6681 /* Location Type 3.2.2.63 M 3-n */
6682 ELEM_MAND_TLV(BE_LOC_TYPE
, GSM_A_PDU_TYPE_BSSMAP
, BE_LOC_TYPE
, NULL
);
6683 /* Cell Identifier 3.2.2.17 O 5-10 */
6684 ELEM_MAND_TLV(BE_CELL_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_CELL_ID
, NULL
);
6685 /* Classmark Information Type 3 3.2.2.20 O 3-14 */
6686 ELEM_OPT_TLV(BE_CM_INFO_3
, GSM_A_PDU_TYPE_BSSMAP
, BE_CM_INFO_3
, NULL
);
6687 /* LCS Client Type 3.2.2.67 C (note 3) 3-n */
6688 ELEM_OPT_TLV(BE_LCS_CLIENT
, GSM_PDU_TYPE_BSSMAP_LE
, DE_BMAPLE_LCS_CLIENT_TYPE
, NULL
);
6689 /* Chosen Channel 3.2.2.33 O 2 */
6690 ELEM_OPT_TV(BE_CHOSEN_CHAN
, GSM_A_PDU_TYPE_BSSMAP
, BE_CHOSEN_CHAN
, NULL
);
6691 /* LCS Priority 3.2.2.62 O 3-n */
6692 ELEM_OPT_TLV(BE_LCS_PRIO
, GSM_A_PDU_TYPE_BSSMAP
, BE_LCS_PRIO
, NULL
);
6693 /* LCS QoS 3.2.2.60 C (note 1) 3-n */
6694 ELEM_OPT_TLV(BE_LCS_QOS
, GSM_PDU_TYPE_BSSMAP_LE
, DE_BMAPLE_LCSQOS
, NULL
);
6695 /* GPS Assistance Data 3.2.2.70 C (note 2) 3-n */
6696 ELEM_OPT_TLV(BE_GPS_ASSIST_DATA
, GSM_A_PDU_TYPE_BSSMAP
, BE_GPS_ASSIST_DATA
, NULL
);
6697 /* APDU 3.2.2.68 O 3-n */
6698 ELEM_OPT_TLV_E(BE_APDU
, GSM_A_PDU_TYPE_BSSMAP
, BE_APDU
, NULL
);
6699 /* IMSI 3.2.2.6 O (note 4) 5-10 */
6700 ELEM_OPT_TLV(BE_IMSI
, GSM_A_PDU_TYPE_BSSMAP
, BE_IMSI
, NULL
);
6701 /* IMEI 3.2.2.86 O (note 4) 10 (use same decode as IMSI) */
6702 ELEM_OPT_TLV(BE_IMEI
, GSM_A_PDU_TYPE_BSSMAP
, BE_IMEI
, NULL
);
6703 /* GANSS Location Type 3.2.2.97 C 3 */
6704 ELEM_OPT_TLV(BE_GANSS_LOC_TYP
, GSM_A_PDU_TYPE_BSSMAP
, BE_GANSS_LOC_TYP
, NULL
);
6705 /* GANSS Assistance Data 3.2.2.95 C (note 5) 3-n */
6706 ELEM_OPT_TLV(BE_GANSS_ASS_DTA
, GSM_A_PDU_TYPE_BSSMAP
, BE_GANSS_ASS_DTA
, NULL
);
6708 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6711 * 3.2.1.72 PERFORM LOCATION RESPONSE
6714 bssmap_perf_loc_res(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6716 guint32 curr_offset
;
6720 curr_offset
= offset
;
6723 /* Location Estimate 3.2.2.64 C (note 1) 3-n */
6724 ELEM_OPT_TLV(BE_LOC_EST
, GSM_A_PDU_TYPE_BSSMAP
, BE_LOC_EST
, NULL
);
6725 /* Positioning Data 3.2.2.65 O 3-n */
6726 ELEM_OPT_TLV(BE_POS_DATA
, GSM_A_PDU_TYPE_BSSMAP
, BE_POS_DATA
, NULL
);
6727 /* Deciphering Keys 3.2.2.71 C (note 2) 3-n */
6728 ELEM_OPT_TLV(BE_DECIPH_KEYS
, GSM_PDU_TYPE_BSSMAP_LE
, DE_BMAPLE_DECIPH_KEYS
, NULL
);
6729 /* LCS Cause 3.2.2.66 C (note 3) 3-n */
6730 ELEM_OPT_TLV(BE_LCS_CAUSE
, GSM_PDU_TYPE_BSSMAP_LE
, DE_BMAPLE_LCS_CAUSE
, NULL
);
6731 /* Velocity Estimate 3.2.2.87 O 3-n */
6732 ELEM_OPT_TLV(BE_VEL_EST
, GSM_A_PDU_TYPE_BSSMAP
, BE_VEL_EST
, NULL
);
6733 /* GANSS Positioning Data 3.2.2.96 O 3-n */
6734 ELEM_OPT_TLV(BE_GANSS_POS_DTA
, GSM_A_PDU_TYPE_BSSMAP
, BE_GANSS_POS_DTA
, NULL
);
6736 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6739 * 3.2.1.73 PERFORM LOCATION ABORT
6742 bssmap_perf_loc_abort(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6744 guint32 curr_offset
;
6748 curr_offset
= offset
;
6751 /* LCS Cause 3.2.2.66 M 3-n */
6752 ELEM_OPT_TLV(BE_LCS_CAUSE
, GSM_PDU_TYPE_BSSMAP_LE
, DE_BMAPLE_LCS_CAUSE
, NULL
);
6754 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6758 * 3.2.1.74 CONNECTIONLESS INFORMATION
6760 Network Element Identity (source) 3.2.2.69 Both M 3-n
6761 Network Element Identity (target) 3.2.2.69 Both M 3-n
6762 APDU 3.2.2.68 Both M 3-n
6763 Segmentation 3.2,2,74 Both C (note 1) 5
6764 Return Error Request 3.2.2.72 Both C (note 2) 3-n
6765 Return Error Cause 3.2.2.73 Both C (note 3) 3-n
6769 * 3.2.1.75 CHANNEL MODIFY REQUEST
6773 bssmap_chan_mod_req(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6775 guint32 curr_offset
;
6779 curr_offset
= offset
;
6782 /* Cause 3.2.2.5 BSS-MSC M 3-4 */
6783 ELEM_MAND_TLV(BE_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_CAUSE
, NULL
);
6785 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6788 * 3.2.1.76 EMERGENCY RESET INDICATION
6791 Cell Identifier 3.2.2.17 BSS-MSC O 3-10
6792 ELEM_MAND_TLV(BE_CELL_ID, GSM_A_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL);
6793 Layer 3 Information 3.2.2.24 BSS-MSC O (note 2) 3-n
6794 ELEM_OPT_TLV(BE_L3_INFO, GSM_A_PDU_TYPE_BSSMAP, BE_L3_INFO, NULL);
6795 Mobile Identity 3.2.2.41 BSS-MSC O (note 1) 3-n
6798 * 3.2.1.77 EMERGENCY RESET COMMAND
6802 * 3.2.1.78 VGCS ADDITIONAL INFORMATION
6805 bssmap_vgcs_add_inf(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6807 guint32 curr_offset
;
6811 curr_offset
= offset
;
6814 /* Talker Identity 3.2.2.91 MSC-BSS M 3-20 */
6815 ELEM_MAND_TLV(BE_TALKER_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_TALKER_ID
, NULL
);
6817 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6820 * 3.2.1.79 VGCS/VBS AREA CELL INFO
6823 bssmap_vgcs_vbs_area_cell_info(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6825 guint32 curr_offset
;
6829 curr_offset
= offset
;
6832 /* Cell Identifier List Segment 3.2.2.27a MSC-BSS M 4-? */
6833 ELEM_OPT_TLV(BE_CELL_ID_LIST_SEG
, GSM_A_PDU_TYPE_BSSMAP
, BE_CELL_ID_LIST_SEG
, NULL
);
6834 /* Assignment Requirement 3.2.2.52 MSC-BSS O 2 */
6835 ELEM_MAND_TV(BE_ASS_REQ
, GSM_A_PDU_TYPE_BSSMAP
, BE_ASS_REQ
, NULL
);
6837 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6840 * 3.2.1.80 VGCS/VBS ASSIGNMENT STATUS
6843 bssmap_vgcs_vbs_assign_status(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6845 guint32 curr_offset
;
6849 curr_offset
= offset
;
6852 /* Cell Identifier List Segment for established cells 3.2.2.27b BSS-MSC O (note 1) 3-? */
6853 ELEM_OPT_TLV(BE_CELL_ID_LST_SEG_F_EST_CELLS
, GSM_A_PDU_TYPE_BSSMAP
, BE_CELL_ID_LST_SEG_F_EST_CELLS
, NULL
);
6854 /* Cell Identifier List Segment for cells to be established 3.2.2.27c BSS-MSC O (note 1) 3-? */
6855 ELEM_OPT_TLV(BE_CELL_ID_LST_SEG_F_CELL_TB_EST
, GSM_A_PDU_TYPE_BSSMAP
, BE_CELL_ID_LST_SEG_F_CELL_TB_EST
, NULL
);
6856 /* Cell Identifier List Segment for released cells - no user present 3.2.2.27e BSS-MSC O (note 1) 3-? */
6857 ELEM_OPT_TLV(BE_CELL_ID_LST_SEG_F_REL_CELL
, GSM_A_PDU_TYPE_BSSMAP
, BE_CELL_ID_LST_SEG_F_REL_CELL
, NULL
);
6858 /* Cell Identifier List Segment for not established cells - no establishment possible 3.2.2.27f BSS-MSC O (note 1) 3-? */
6859 ELEM_OPT_TLV(BE_CELL_ID_LST_SEG_F_NOT_EST_CELL
, GSM_A_PDU_TYPE_BSSMAP
, BE_CELL_ID_LST_SEG_F_NOT_EST_CELL
, NULL
);
6860 /* VGCS/VBS Cell Status 3.2.2.94 BSS-MSC O (note 2) 3 */
6861 ELEM_OPT_TLV(BE_VGS_VBS_CELL_STAT
, GSM_A_PDU_TYPE_BSSMAP
, BE_VGS_VBS_CELL_STAT
, NULL
);
6863 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6869 bssmap_vgcs_sms(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6871 guint32 curr_offset
;
6875 curr_offset
= offset
;
6878 /* SMS to VGCS 3.2.2.92 MSC-BSS M 2-250 */
6879 ELEM_MAND_TLV(BE_SMS_TO_VGCS
, GSM_A_PDU_TYPE_BSSMAP
, BE_SMS_TO_VGCS
, NULL
);
6881 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6884 * 3.2.1.82 NOTIFICATION DATA
6887 bssmap_notification_data(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6889 guint32 curr_offset
;
6893 curr_offset
= offset
;
6896 /* Application Data 3.2.2.98 MSC-BSS M 11 */
6897 ELEM_MAND_TLV(BE_APP_DATA_INF
, GSM_A_PDU_TYPE_BSSMAP
, BE_APP_DATA_INF
, NULL
);
6898 /* Data Identity 3.2.2.99 MSC-BSS M 3 */
6899 ELEM_MAND_TLV(BE_DATA_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_DATA_ID
, NULL
);
6900 /* MSISDN 3.2.2.101 MSC-BSS O 2-12 */
6901 ELEM_MAND_TLV(BE_MSISDN
, GSM_A_PDU_TYPE_BSSMAP
, BE_MSISDN
, NULL
);
6903 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6906 * 3.2.1.83 INTERNAL HANDOVER REQUIRED
6909 bssmap_int_ho_req(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6911 guint32 curr_offset
;
6915 curr_offset
= offset
;
6918 /* Cause 3.2.2.5 BSS-MSC M 3-4 */
6919 ELEM_MAND_TLV(BE_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_CAUSE
, NULL
);
6920 /* Cell Identifier 3.2.2.17 BSS-MSC M 4-10 */
6921 ELEM_MAND_TLV(BE_CELL_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_CELL_ID
, NULL
);
6922 /* AoIP Transport Layer Address (BSS) 3.2.2.nn BSS-MSC C (Note 1) 10-22 */
6923 ELEM_OPT_TLV(BE_AOIP_TRANS_LAY_ADD
, GSM_A_PDU_TYPE_BSSMAP
, BE_AOIP_TRANS_LAY_ADD
, NULL
);
6924 /* Codec List (BSS Supported) 3.2.2.103 BSS-MSC M 3-n */
6925 ELEM_OPT_TLV(BE_SPEECH_CODEC_LST
, GSM_A_PDU_TYPE_BSSMAP
, BE_SPEECH_CODEC_LST
, "(BSS Supported)");
6927 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6930 * 3.2.1.84 INTERNAL HANDOVER REQUIRED REJECT
6933 bssmap_int_ho_req_rej(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6935 guint32 curr_offset
;
6939 curr_offset
= offset
;
6942 /* Cause 3.2.2.5 MSC-BSS M 3-4 */
6943 ELEM_MAND_TLV(BE_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_CAUSE
, NULL
);
6944 /* Codec List (MSC Preferred) 3.2.2.nn MSC-BSS O 3-n */
6945 ELEM_OPT_TLV(BE_SPEECH_CODEC_LST
, GSM_A_PDU_TYPE_BSSMAP
, BE_SPEECH_CODEC_LST
, "(BSS Supported)");
6947 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6951 * 3.2.1.85 INTERNAL HANDOVER COMMAND
6954 bssmap_int_ho_cmd(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6956 guint32 curr_offset
;
6960 curr_offset
= offset
;
6963 /* Speech Codec (MSC Chosen) 3.2.2.nn MSC-BSS M (note 1) 3-n */
6964 ELEM_OPT_TLV(BE_SPEECH_CODEC
, GSM_A_PDU_TYPE_BSSMAP
, BE_SPEECH_CODEC
, "(Chosen)");
6965 /* Circuit Identity Code 3.2.2.2 MSC-BSS C (note 2) 3 */
6966 ELEM_OPT_TV(BE_CIC
, GSM_A_PDU_TYPE_BSSMAP
, BE_CIC
, NULL
);
6967 /* AoIP Transport Layer Address (MGW) 3.2.2.102 MSC-BSS C (note 2) 10-22 */
6968 ELEM_OPT_TLV(BE_AOIP_TRANS_LAY_ADD
, GSM_A_PDU_TYPE_BSSMAP
, BE_AOIP_TRANS_LAY_ADD
, NULL
);
6969 /* Call Identifier 3.2.2.105 MSC-BSS C (note 4) 5 */
6970 ELEM_OPT_TV(BE_CALL_ID
, GSM_A_PDU_TYPE_BSSMAP
, BE_CALL_ID
, NULL
);
6971 /* Downlink DTX Flag 3.2.2.26 MSC-BSS O (note 5) 2 */
6972 ELEM_OPT_TV(BE_DOWN_DTX_FLAG
, GSM_A_PDU_TYPE_BSSMAP
, BE_DOWN_DTX_FLAG
, NULL
);
6974 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6977 * 3.2.1.86 INTERNAL HANDOVER ENQUIRY
6981 bssmap_int_ho_enq(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
6983 guint32 curr_offset
;
6987 curr_offset
= offset
;
6990 /* Speech Codec (MSC Chosen) 3.2.2.104 MSC-BSS M 3-n */
6991 ELEM_OPT_TLV(BE_SPEECH_CODEC
, GSM_A_PDU_TYPE_BSSMAP
, BE_SPEECH_CODEC
, "(Chosen)");
6993 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
6996 * 3.2.1.87 RESET IP RESOURCE
6999 bssmap_reset_ip_res(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
7001 guint32 curr_offset
;
7005 curr_offset
= offset
;
7008 /* Cause 3.2.2.5 Both M 3-4 */
7009 ELEM_MAND_TLV(BE_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_CAUSE
, NULL
);
7010 /* Call Identifier List 3.2.2.106 Both M 6-n */
7011 ELEM_OPT_TLV(BE_CALL_ID_LST
, GSM_A_PDU_TYPE_BSSMAP
, BE_CALL_ID_LST
, NULL
);
7013 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
7016 * 3.2.1.88 RESET IP RESOURCE ACKNOWLEDGE
7019 bssmap_reset_ip_res_ack(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
7021 guint32 curr_offset
;
7025 curr_offset
= offset
;
7028 /* Call Identifier List 3.2.2.106 Both M 6-n */
7029 ELEM_OPT_TLV(BE_CALL_ID_LST
, GSM_A_PDU_TYPE_BSSMAP
, BE_CALL_ID_LST
, NULL
);
7031 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
7035 * 3.2.1.89 REROUTE COMMAND
7038 bssmap_reroute_cmd(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
7040 guint32 curr_offset
;
7044 curr_offset
= offset
;
7047 /* Initial Layer 3 Information 3.2.2.24 MSC-BSS M (note 1) 3-n */
7048 ELEM_MAND_TLV(BE_L3_INFO
, GSM_A_PDU_TYPE_BSSMAP
, BE_L3_INFO
, " (Initial)");
7049 /* Reroute Reject Cause 3.2.2.112 MSC-BSS M (note 2) 2 */
7050 ELEM_MAND_TV(BE_REROUTE_REJ_CAUSE
, GSM_A_PDU_TYPE_BSSMAP
, BE_REROUTE_REJ_CAUSE
, NULL
);
7051 /* Layer 3 Information 3.2.2.24 MSC-BSS O (note3) 3-n */
7052 ELEM_OPT_TLV(BE_L3_INFO
, GSM_A_PDU_TYPE_BSSMAP
, BE_L3_INFO
, NULL
);
7053 /* Send Sequence Number 3.2.2.113 MSC-BSS O (note 4) 2 */
7054 ELEM_OPT_TV(BE_SEND_SEQN
, GSM_A_PDU_TYPE_BSSMAP
, BE_SEND_SEQN
, NULL
);
7055 /* IMSI 3.2.2.6 MSC-BSS O (note 5) 3-10 */
7056 ELEM_OPT_TLV(BE_IMSI
, GSM_A_PDU_TYPE_BSSMAP
, BE_IMSI
, NULL
);
7058 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
7062 * 3.2.1.90 REROUTE COMPLETE
7066 bssmap_reroute_complete(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo _U_
, guint32 offset
, guint len
)
7068 guint32 curr_offset
;
7072 curr_offset
= offset
;
7075 /* Reroute complete outcome 3.2.2.114 MSC-BSS M 2 */
7076 ELEM_MAND_TV(BE_REROUTE_OUTCOME
, GSM_A_PDU_TYPE_BSSMAP
, BE_REROUTE_OUTCOME
, NULL
);
7078 EXTRANEOUS_DATA_CHECK(curr_len
, 0);
7083 * 3.2.1.91 LCLS-CONNECT-CONTROL
7086 /* LCLS-Configuration 3.2.2.116 MSC-BSS O (note1) 2 */
7087 /* LCLS-Connection-Status-Control 3.2.2.117 MSC-BSS O (note1) 2 */
7090 * 3.2.1.92 LCLS-CONNECT-CONTROL-ACK
7093 /* LCLS-BSS-Status 3.2.2.119 BSS-MSC M 2 */
7097 * 3.2.1.93 LCLS-NOTIFICATION
7100 /* LCLS-BSS-Status 3.2.2.119 BSS-MSC O (note 1) 2 */
7101 /* LCLS-Break-Request 3.2.2.120 BSS-MSC O (note 1) 1 */
7104 #define NUM_GSM_BSSMAP_MSG (int)(sizeof(gsm_a_bssmap_msg_strings)/sizeof(value_string))
7105 static gint ett_gsm_bssmap_msg
[NUM_GSM_BSSMAP_MSG
];
7107 static void (*bssmap_msg_fcn
[])(tvbuff_t
*tvb
, proto_tree
*tree
, packet_info
*pinfo
, guint32 offset
, guint len
) = {
7108 bssmap_ass_req
, /* Assignment Request */
7109 bssmap_ass_complete
, /* Assignment Complete */
7110 bssmap_ass_failure
, /* Assignment Failure */
7111 bssmap_vgcs_vbs_setup
, /* VGCS/VBS Setup */
7112 bssmap_vgcs_vbs_setup_ack
, /* VGCS/VBS Setup Ack */
7113 bssmap_vgcs_vbs_setup_refuse
, /* VGCS/VBS Setup Refuse */
7114 bssmap_vgcs_vbs_ass_req
, /* VGCS/VBS Assignment Request */
7115 bssmap_chan_mod_req
, /* 0x08 Channel Modify request */
7116 NULL
, /* Unallocated */
7117 NULL
, /* Unallocated */
7118 NULL
, /* Unallocated */
7119 NULL
, /* Unallocated */
7120 NULL
, /* Unallocated */
7121 NULL
, /* Unallocated */
7122 NULL
, /* Unallocated */
7123 bssmap_ho_req
, /* 0x10 Handover Request */
7124 bssmap_ho_reqd
, /* Handover Required */
7125 bssmap_ho_req_ack
, /* Handover Request Acknowledge */
7126 bssmap_ho_cmd
, /* Handover Command */
7127 bssmap_ho_complete
, /* Handover Complete */
7128 bssmap_ho_succ
, /* Handover Succeeded */
7129 bssmap_ho_failure
, /* Handover Failure */
7130 bssmap_ho_performed
, /* Handover Performed */
7131 bssmap_ho_cand_enq
, /* Handover Candidate Enquire */
7132 bssmap_ho_cand_resp
, /* Handover Candidate Response */
7133 bssmap_ho_reqd_rej
, /* Handover Required Reject */
7134 bssmap_ho_det
, /* 0x1b Handover Detect */
7135 bssmap_vgcs_vbs_ass_res
, /* 0x1c VGCS/VBS Assignment Result */
7136 bssmap_vgcs_vbs_ass_fail
, /* 0x1d VGCS/VBS Assignment Failure */
7137 NULL
, /* 0x1e No dsta VGCS/VBS Queuing Indication */
7138 bssmap_uplink_req
, /* 0x1f Uplink Request */
7140 bssmap_clear_cmd
, /* 0x20 Clear Command */
7141 NULL
/* no associated data */, /* Clear Complete */
7142 bssmap_clear_req
, /* Clear Request */
7143 NULL
, /* Reserved */
7144 NULL
, /* Reserved */
7145 bssmap_sapi_rej
, /* SAPI 'n' Reject */
7146 bssmap_confusion
, /* Confusion */
7147 bssmap_uplink_req_ack
, /* Uplink Request Acknowledge */
7148 bssmap_sus
, /* Suspend */
7149 bssmap_res
, /* Resume */
7150 bssmap_conn_oriented
, /* Connection Oriented Information */
7151 bssmap_perf_loc_req
, /* Perform Location Request */
7152 bssmap_lsa_info
, /* LSA Information */
7153 bssmap_perf_loc_res
, /* Perform Location Response */
7154 bssmap_perf_loc_abort
, /* Perform Location Abort */
7155 bssmap_common_id
, /* Common Id */
7156 bssmap_reset
, /* Reset */
7157 bssmap_reset_ack
, /* Reset Acknowledge */
7158 bssmap_overload
, /* Overload */
7159 NULL
, /* Reserved */
7160 bssmap_reset_cct
, /* Reset Circuit */
7161 bssmap_reset_cct_ack
, /* Reset Circuit Acknowledge */
7162 bssmap_msc_invoke_trace
, /* MSC Invoke Trace */
7163 bssmap_bss_invoke_trace
, /* 0x37 BSS Invoke Trace */
7165 NULL
, /* 0x38 unallocated */
7166 NULL
, /* 0x39 unallocated */
7168 NULL
, /* 0x3a Connectionless Information */
7169 bssmap_vgcs_vbs_assign_status
, /* 0x3b VGCS/VBS ASSIGNMENT STATUS */
7170 bssmap_vgcs_vbs_area_cell_info
, /* 0x3c VGCS/VBS AREA CELL INFO */
7171 bssmap_reset_ip_res
, /* 0x3d 3.2.1.87 RESET IP RESOURCE */
7172 bssmap_reset_ip_res_ack
, /* 0x3e 3.2.1.88 RESET IP RESOURCE ACKNOWLEDGE */
7173 NULL
, /* 0x3f VGCS/VBS AREA CELL INFO */
7174 bssmap_block
, /* Block */
7175 bssmap_block_ack
, /* Blocking Acknowledge */
7176 bssmap_unblock
, /* Unblock */
7177 bssmap_unblock_ack
, /* Unblocking Acknowledge */
7178 bssmap_cct_group_block
, /* Circuit Group Block */
7179 bssmap_cct_group_block_ack
, /* Circuit Group Blocking Acknowledge */
7180 bssmap_cct_group_unblock
, /* Circuit Group Unblock */
7181 bssmap_cct_group_unblock_ack
, /* Circuit Group Unblocking Acknowledge */
7182 bssmap_unequipped_cct
, /* Unequipped Circuit */
7183 bssmap_uplink_req_conf
, /* Uplink Request Confirmation */
7184 bssmap_uplink_rel_ind
, /* Uplink Release Indication */
7185 bssmap_uplink_rej_cmd
, /* Uplink Reject Command */
7186 bssmap_uplink_rel_cmd
, /* Uplink Release Command */
7187 bssmap_uplink_seized_cmd
, /* Uplink Seized Command */
7188 bssmap_change_cct
, /* Change Circuit */
7189 bssmap_change_cct_ack
, /* Change Circuit Acknowledge */
7190 bssmap_res_req
, /* Resource Request */
7191 bssmap_res_ind
, /* Resource Indication */
7192 bssmap_paging
, /* Paging */
7193 bssmap_ciph_mode_cmd
, /* Cipher Mode Command */
7194 bssmap_cm_upd
, /* Classmark Update */
7195 bssmap_ciph_mode_complete
, /* Cipher Mode Complete */
7196 NULL
/* no associated data */, /* Queuing Indication */
7197 bssmap_cl3_info
, /* Complete Layer 3 Information */
7198 bssmap_cls_m_req
/* no associated data */, /* Classmark Request */
7199 bssmap_ciph_mode_rej
, /* Cipher Mode Reject */
7200 bssmap_load_ind
, /* 0x5a Load Indication */
7202 NULL
, /* 0x5b unallocated */
7203 NULL
, /* 0x5c unallocated */
7204 NULL
, /* 0x5d unallocated */
7205 NULL
, /* 0x5e unallocated */
7206 NULL
, /* 0x5f unallocated */
7208 bssmap_vgcs_add_inf
, /* 0x60 VGCS Additional Information */
7209 bssmap_vgcs_sms
, /* 0x61 VGCS SMS */
7210 bssmap_notification_data
, /* 0x62 Notification Data*/
7211 bssmap_uplink_app_data
, /* 0x63 Uplink Application Data */
7213 NULL
, /* 0x64 unallocated */
7214 NULL
, /* 0x65 unallocated */
7215 NULL
, /* 0x66 unallocated */
7216 NULL
, /* 0x67 unallocated */
7217 NULL
, /* 0x68 unallocated */
7218 NULL
, /* 0x69 unallocated */
7219 NULL
, /* 0x6a unallocated */
7220 NULL
, /* 0x6b unallocated */
7221 NULL
, /* 0x6c unallocated */
7222 NULL
, /* 0x6d unallocated */
7223 NULL
, /* 0x6e unallocated */
7224 NULL
, /* 0x6f unallocated */
7226 bssmap_int_ho_req
, /* 0x70 Internal Handover Required */
7227 bssmap_int_ho_req_rej
, /* 0x71 Internal Handover Required Reject */
7228 bssmap_int_ho_cmd
, /* 0x72 Internal Handover Command */
7229 bssmap_int_ho_enq
, /* 0x73 Internal Handover Enquiry */
7231 NULL
, /* 0x74 LCLS-Connect-Control */
7232 NULL
, /* 0x75 LCLS-Connect-Control-Ack */
7233 NULL
, /* 0x76 LCLS-Notification */
7234 NULL
, /* 0x77 Unallocated */
7235 bssmap_reroute_cmd
, /* 0x78 Reroute Command */
7236 bssmap_reroute_complete
, /* 0x79 Reroute Complete */
7240 #define NUM_BSSMAP_MSG_FCNS (int)(sizeof(bssmap_msg_fcn)/sizeof(bssmap_msg_fcn[0]))
7243 dissect_bssmap(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
)
7245 static gsm_a_tap_rec_t tap_rec
[4];
7246 static gsm_a_tap_rec_t
*tap_p
;
7247 static guint tap_current
= 0;
7249 guint32 offset
, saved_offset
;
7252 proto_item
*bssmap_item
= NULL
;
7253 proto_tree
*bssmap_tree
= NULL
;
7255 sccp_msg_info_t
* sccp_msg_p
;
7257 sccp_msg_p
= pinfo
->sccp_info
;
7259 if (!(sccp_msg_p
&& sccp_msg_p
->data
.co
.assoc
)) {
7263 col_append_str(pinfo
->cinfo
, COL_INFO
, "(BSSMAP) ");
7266 * set tap record pointer
7269 if (tap_current
>= 4)
7273 tap_p
= &tap_rec
[tap_current
];
7277 saved_offset
= offset
;
7281 len
= tvb_length(tvb
);
7284 * add BSSMAP message name
7286 oct
= tvb_get_guint8(tvb
, offset
++);
7288 str
= try_val_to_str_idx_ext((guint32
) oct
, &gsm_a_bssmap_msg_strings_ext
, &idx
);
7290 if (sccp_msg_p
&& !sccp_msg_p
->data
.co
.label
) {
7291 sccp_msg_p
->data
.co
.label
= wmem_strdup(wmem_file_scope(),
7292 val_to_str_ext((guint32
)oct
,
7293 &gsm_a_bssmap_msg_strings_ext
,
7294 "BSSMAP (0x%02x)"));
7298 * create the protocol tree
7300 /* The first two conditions are actually the same, i.e. if str != NULL,
7301 * idx >= 0, but checking idx makes it obvious we won' t use a potentially
7302 * negative idx in the else case.
7304 if (str
== NULL
|| idx
< 0 || idx
>= NUM_GSM_BSSMAP_MSG
)
7307 proto_tree_add_protocol_format(tree
, proto_a_bssmap
, tvb
, 0, len
,
7308 "GSM A-I/F BSSMAP - Unknown BSSMAP Message Type (0x%02x)",
7311 bssmap_tree
= proto_item_add_subtree(bssmap_item
, ett_bssmap_msg
);
7316 proto_tree_add_protocol_format(tree
, proto_a_bssmap
, tvb
, 0, -1,
7317 "GSM A-I/F BSSMAP - %s",
7320 bssmap_tree
= proto_item_add_subtree(bssmap_item
, ett_gsm_bssmap_msg
[idx
]);
7322 col_append_fstr(pinfo
->cinfo
, COL_INFO
, "%s ", str
);
7325 * add BSSMAP message name
7327 proto_tree_add_uint_format(bssmap_tree
, hf_gsm_a_bssmap_msg_type
,
7328 tvb
, saved_offset
, 1, oct
, "Message Type %s",str
);
7331 tap_p
->pdu_type
= GSM_A_PDU_TYPE_BSSMAP
;
7332 tap_p
->message_type
= oct
;
7334 tap_queue_packet(gsm_a_tap
, pinfo
, tap_p
);
7336 if (str
== NULL
) return;
7338 if ((len
- offset
) <= 0) return;
7343 if (idx
< 0 || idx
>= NUM_BSSMAP_MSG_FCNS
|| bssmap_msg_fcn
[idx
] == NULL
) {
7344 proto_tree_add_text(bssmap_tree
,
7345 tvb
, offset
, len
- offset
,
7346 "Message Elements");
7348 if (sccp_msg_p
&& ((sccp_msg_p
->data
.co
.assoc
->app_info
& 0xCD00) == 0xCD00)) {
7349 cell_discriminator
= sccp_msg_p
->data
.co
.assoc
->app_info
& 0xFF;
7351 cell_discriminator
= 0xFF;
7353 (*bssmap_msg_fcn
[idx
])(tvb
, bssmap_tree
, pinfo
, offset
, len
- offset
);
7355 sccp_msg_p
->data
.co
.assoc
->app_info
= cell_discriminator
| 0xCDF0;
7361 /* Register the protocol with Wireshark */
7363 proto_register_gsm_a_bssmap(void)
7368 /* Setup list of header fields */
7370 static hf_register_info hf
[] =
7372 { &hf_gsm_a_bssmap_msg_type
,
7373 { "BSSMAP Message Type", "gsm_a.bssmap.msgtype",
7374 FT_UINT8
, BASE_HEX
|BASE_EXT_STRING
, &gsm_a_bssmap_msg_strings_ext
, 0x0,
7377 { &hf_gsm_a_bssmap_elem_id
,
7378 { "Element ID", "gsm_a.bssmap.elem_id",
7379 FT_UINT8
, BASE_HEX
, NULL
, 0,
7382 { &hf_gsm_a_bssmap_field_elem_id
,
7383 { "Field Element ID", "gsm_a.bssmap.field_elem_id",
7384 FT_UINT8
, BASE_HEX
, VALS(bssmap_field_element_ids
), 0,
7387 { &hf_gsm_a_bssmap_cell_ci
,
7388 { "Cell CI", "gsm_a.bssmap.cell_ci",
7389 FT_UINT16
, BASE_HEX_DEC
, 0, 0x0,
7392 { &hf_gsm_a_bssmap_cell_lac
,
7393 { "Cell LAC", "gsm_a.bssmap.cell_lac",
7394 FT_UINT16
, BASE_HEX_DEC
, 0, 0x0,
7397 { &hf_gsm_a_bssmap_sac
,
7398 { "SAC", "gsm_a.bssmap.sac",
7399 FT_UINT16
, BASE_HEX
, 0, 0x0,
7402 { &hf_gsm_a_bssmap_dlci_cc
,
7403 { "Control Channel", "gsm_a.bssmap.dlci.cc",
7404 FT_UINT8
, BASE_HEX
, VALS(bssap_cc_values
), 0xc0,
7407 { &hf_gsm_a_bssmap_dlci_spare
,
7408 { "Spare", "gsm_a.bssmap.dlci.spare",
7409 FT_UINT8
, BASE_HEX
, NULL
, 0x38,
7412 { &hf_gsm_a_bssmap_dlci_sapi
,
7413 { "SAPI", "gsm_a.bssmap.dlci.sapi",
7414 FT_UINT8
, BASE_HEX
, VALS(bssap_sapi_values
), 0x07,
7417 { &hf_gsm_a_bssmap_cause
,
7418 { "BSSMAP Cause", "gsm_a.bssmap.cause",
7419 FT_UINT8
, BASE_HEX
, 0, 0x0,
7422 { &hf_gsm_a_bssmap_be_cell_id_disc
,
7423 { "Cell identification discriminator","gsm_a.bssmap.be.cell_id_disc",
7424 FT_UINT8
,BASE_DEC
|BASE_EXT_STRING
, &gsm_a_be_cell_id_disc_vals_ext
, 0x0f,
7427 { &hf_gsm_a_bssmap_pci
,
7428 { "Preemption Capability indicator(PCI)","gsm_a.bssmap.pci",
7429 FT_BOOLEAN
,8, TFS(&bssmap_pci_value
), 0x40,
7432 { &hf_gsm_a_bssmap_qa
,
7433 { "Queuing Allowed Indicator(QA)","gsm_a.bssmap.qa",
7434 FT_BOOLEAN
,8, TFS(&tfs_allowed_not_allowed
), 0x02,
7437 { &hf_gsm_a_bssmap_pvi
,
7438 { "Preemption Vulnerability Indicator(PVI)","gsm_a.bssmap.pvi",
7439 FT_BOOLEAN
,8, TFS(&bssmap_pvi_value
), 0x01,
7442 { &hf_gsm_a_bssmap_interference_bands
,
7443 { "Acceptable interference bands","gsm_a.bssmap.interference_bands",
7444 FT_UINT8
, BASE_HEX
, NULL
, 0x01f,
7447 { &hf_gsm_a_bssmap_lsa_only
,
7448 { "LSA only","gsm_a.bssmap.lsa_only",
7449 FT_BOOLEAN
,8, TFS(&bssmap_lsa_only_value
), 0x01,
7452 { &hf_gsm_a_bssmap_act
,
7453 { "Active mode support","gsm_a.bssmap.act",
7454 FT_BOOLEAN
,8, NULL
, 0x20,
7457 { &hf_gsm_a_bssmap_pref
,
7458 { "Preferential access","gsm_a.bssmap.pref",
7459 FT_BOOLEAN
,8, NULL
, 0x10,
7462 { &hf_gsm_a_bssmap_lsa_inf_prio
,
7463 { "Priority","gsm_a.bssmap.lsa_inf_prio",
7464 FT_UINT8
,BASE_DEC
, NULL
, 0x0f,
7467 { &hf_gsm_a_bssmap_seq_len
,
7468 { "Sequence Length","gsm_a.bssmap.seq_len",
7469 FT_UINT8
,BASE_DEC
, NULL
, 0xf0,
7472 { &hf_gsm_a_bssmap_seq_no
,
7473 { "Sequence Number","gsm_a.bssmap.seq_no",
7474 FT_UINT8
,BASE_DEC
, NULL
, 0xf,
7477 { &hf_gsm_a_bssap_cell_id_list_seg_cell_id_disc
,
7478 { "Cell identification discriminator","gsm_a.bssmap.cell_id_list_seg_cell_id_disc",
7479 FT_UINT8
,BASE_DEC
, VALS(gsm_a_bssap_cell_id_list_seg_cell_id_disc_vals
), 0xf,
7482 { &hf_gsm_a_bssap_res_ind_method
,
7483 { "Resource indication method","gsm_a.bssmap.res_ind_method",
7484 FT_UINT8
,BASE_DEC
, VALS(gsm_a_bssap_resource_indication_vals
), 0xf,
7487 { &hf_gsm_a_bssap_cic_list_range
,
7488 { "Range","gsm_a.bssmap.cic_list_range",
7489 FT_UINT8
, BASE_DEC
, NULL
, 0,
7492 { &hf_gsm_a_bssap_cic_list_status
,
7493 { "Status","gsm_a.bssmap.cic_list_status",
7494 FT_BYTES
, BASE_NONE
, NULL
, 0,
7497 { &hf_gsm_a_bssap_diag_error_pointer
,
7498 { "Error pointer","gsm_a.bssmap.diag_error_pointer",
7499 FT_UINT16
, BASE_HEX
, NULL
, 0,
7502 { &hf_gsm_a_bssap_diag_msg_rcv
,
7503 { "Message received","gsm_a.bssmap.cic_list_status",
7504 FT_BYTES
, BASE_NONE
, NULL
, 0,
7507 { &hf_gsm_a_bssmap_ch_mode
,
7508 { "Channel mode","gsm_a.bssmap.cch_mode",
7509 FT_UINT8
,BASE_DEC
, VALS(gsm_a_bssmap_ch_mode_vals
), 0xf0,
7512 { &hf_gsm_a_bssmap_cur_ch_mode
,
7513 { "Channel Mode", "gsm_a.bssmap.fe_cur_chan_type2.chan_mode",
7514 FT_UINT8
, BASE_HEX
, VALS(chan_mode_vals
), 0xf0,
7517 { &hf_gsm_a_bssmap_channel
,
7518 { "Channel","gsm_a.bssmap.channel",
7519 FT_UINT8
,BASE_DEC
, VALS(gsm_a_bssmap_channel_vals
), 0x0f,
7522 { &hf_gsm_a_bssmap_trace_trigger_id
,
7523 { "Priority Indication","gsm_a.bssmap.trace_trigger_id",
7524 FT_STRING
, BASE_NONE
, NULL
, 0x0,
7527 { &hf_gsm_a_bssmap_trace_priority_indication
,
7528 { "Priority Indication","gsm_a.bssmap.trace_priority_indication",
7529 FT_UINT8
,BASE_DEC
, NULL
, 0x00,
7532 { &hf_gsm_a_bssmap_trace_bss_record_type
,
7533 { "BSS Record Type","gsm_a.bssmap.bss_record__type",
7534 FT_UINT8
,BASE_DEC
, VALS(gsm_a_bssmap_trace_bss_record_type_vals
), 0x00,
7537 { &hf_gsm_a_bssmap_trace_msc_record_type
,
7538 { "MSC Record Type","gsm_a.bssmap.msc_record_type",
7539 FT_UINT8
,BASE_DEC
, VALS(gsm_a_bssmap_trace_msc_record_type_vals
), 0x00,
7542 { &hf_gsm_a_bssmap_trace_invoking_event
,
7543 { "Invoking Event","gsm_a.bssmap.trace_invoking_event",
7544 FT_UINT8
,BASE_DEC
, VALS(gsm_a_bssmap_trace_invoking_event_vals
), 0x0,
7547 { &hf_gsm_a_bssmap_trace_reference
,
7548 { "Trace Reference","gsm_a.bssmap.trace_id",
7549 FT_UINT16
,BASE_DEC
, NULL
, 0x0,
7552 { &hf_gsm_a_bssmap_trace_omc_id
,
7553 { "OMC ID","gsm_a.bssmap.trace_omc_id",
7554 FT_STRING
, BASE_NONE
, NULL
, 0x0,
7557 { &hf_gsm_a_bssmap_be_rnc_id
,
7558 { "RNC-ID","gsm_a.bssmap.be.rnc_id",
7559 FT_UINT16
,BASE_DEC
, NULL
, 0x0,
7562 { &hf_gsm_a_bssmap_apdu_protocol_id
,
7563 { "Protocol ID", "gsm_a.bssmap.apdu_protocol_id",
7564 FT_UINT8
, BASE_DEC
, VALS(gsm_a_apdu_protocol_id_strings
), 0x0,
7565 "APDU embedded protocol id", HFILL
}
7567 { &hf_gsm_a_bssmap_periodicity
,
7568 { "Periodicity", "gsm_a.bssmap.periodicity",
7569 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
7572 { &hf_gsm_a_bssmap_sm
,
7573 { "Subsequent Mode","gsm_a.bssmap.sm",
7574 FT_BOOLEAN
,8, NULL
, 0x02,
7577 { &hf_gsm_a_bssmap_tarr
,
7578 { "Total Accessible Resource Requested","gsm_a.bssmap.tarr",
7579 FT_BOOLEAN
,8, NULL
, 0x01,
7582 { &hf_gsm_a_bssmap_tot_no_of_fullr_ch
,
7583 { "Total number of accessible full rate channels", "gsm_a.bssmap.tot_no_of_fullr_ch",
7584 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7587 { &hf_gsm_a_bssmap_tot_no_of_hr_ch
,
7588 { "Total number of accessible half rate channels", "gsm_a.bssmap.tot_no_of_hr_ch",
7589 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7592 { &hf_gsm_a_bssmap_lsa_id
,
7593 { "Identification of Localised Service Area", "gsm_a.bssmap.lsa_id",
7594 FT_UINT24
, BASE_HEX
, NULL
, 0x0,
7597 { &hf_gsm_a_bssmap_ep
,
7598 { "EP", "gsm_a.bssmap.ep",
7599 FT_UINT8
, BASE_DEC
, NULL
, 0x01,
7602 { &hf_gsm_a_bssmap_smi
,
7603 { "Subsequent Modification Indication(SMI)", "gsm_a.bssmap.smi",
7604 FT_UINT8
, BASE_DEC
, VALS(gsm_a_bssmap_smi_vals
), 0x0f,
7607 { &hf_gsm_a_bssmap_lcs_pri
,
7608 { "Periodicity", "gsm_a.bssmap.lcs_pri",
7609 FT_UINT8
, BASE_DEC
, VALS(lcs_priority_vals
), 0x0,
7612 { &hf_gsm_a_bssmap_num_ms
,
7613 { "Number of handover candidates", "gsm_a.bssmap.num_ms",
7614 FT_UINT8
, BASE_DEC
,NULL
, 0x0,
7617 { &hf_gsm_a_bssmap_talker_pri
,
7618 { "Priority", "gsm_a.bssmap.talker_pri",
7619 FT_UINT8
, BASE_DEC
,VALS(gsm_a_bssmap_talker_pri_vals
), 0x03,
7622 { &hf_gsm_a_bssmap_rr_mode
,
7623 { "RR mode", "gsm_a.bssmap.rr_mode",
7624 FT_UINT8
, BASE_DEC
, VALS(gsm_a_bssmap_rr_mode_vals
), 0xc0,
7627 { &hf_gsm_a_bssmap_group_cipher_key_nb
,
7628 { "Group cipher key number", "gsm_a.bssmap.group_cipher_key_nb",
7629 FT_UINT8
, BASE_DEC
, VALS(gsm_a_bssmap_group_cipher_key_nb_vals
), 0x3c,
7632 { &hf_gsm_a_bssmap_vgcs_vbs_cell_status
,
7633 { "Status", "gsm_a.bssmap.vgcs_vbs_cell_status",
7634 FT_UINT8
, BASE_DEC
, VALS(gsm_a_bssmap_vgcs_vbs_cell_status_vals
), 0x07,
7637 { &hf_gsm_a_bssmap_paging_cause
,
7638 { "Paging Cause", "gsm_a.bssmap.paging_cause",
7639 FT_UINT8
, BASE_DEC
,VALS(gsm_a_bssmap_paging_cause_vals
), 0x06,
7642 { &hf_gsm_a_bssmap_paging_inf_flg
,
7643 { "VGCS/VBS flag","gsm_a.bssmap.paging_inf_flg",
7644 FT_BOOLEAN
,8, TFS(&bssmap_paging_inf_flg_value
), 0x01,
7645 "If 1, a member of a VGCS/VBS-group", HFILL
}
7647 { &hf_gsm_a_bssmap_serv_ho_inf
,
7648 { "Service Handover information", "gsm_a.bssmap.serv_ho_inf",
7649 FT_UINT8
, BASE_HEX
, NULL
, 0x07,
7652 { &hf_gsm_a_bssmap_max_nb_traffic_chan
,
7653 { "Maximum Number of Traffic Channels", "gsm_a.bssmap.max_nb_traffic_chan",
7654 FT_UINT8
, BASE_DEC
, VALS(gsm_a_max_nb_traffic_chan_vals
), 0x07,
7657 { &hf_gsm_a_bssmap_acceptable_chan_coding_bit5
,
7658 { "TCH/F43.2", "gsm_a.bssmap.acceptable_chan_coding_bit5",
7659 FT_BOOLEAN
, 8, TFS(&gsm_a_bssmap_accept_not_accept_vals
), 0x10,
7662 { &hf_gsm_a_bssmap_acceptable_chan_coding_bit4
,
7663 { "TCH/F43.2", "gsm_a.bssmap.acceptable_chan_coding_bit4",
7664 FT_BOOLEAN
, 8, TFS(&gsm_a_bssmap_accept_not_accept_vals
), 0x08,
7667 { &hf_gsm_a_bssmap_acceptable_chan_coding_bit3
,
7668 { "TCH/F43.2", "gsm_a.bssmap.acceptable_chan_coding_bit3",
7669 FT_BOOLEAN
, 8, TFS(&gsm_a_bssmap_accept_not_accept_vals
), 0x04,
7672 { &hf_gsm_a_bssmap_acceptable_chan_coding_bit2
,
7673 { "TCH/F43.2", "gsm_a.bssmap.acceptable_chan_coding_bit2",
7674 FT_BOOLEAN
, 8, TFS(&gsm_a_bssmap_accept_not_accept_vals
), 0x02,
7677 { &hf_gsm_a_bssmap_acceptable_chan_coding_bit1
,
7678 { "TCH/F43.2", "gsm_a.bssmap.acceptable_chan_coding_bit1",
7679 FT_BOOLEAN
, 8, TFS(&gsm_a_bssmap_accept_not_accept_vals
), 0x01,
7682 { &hf_gsm_a_bssmap_allowed_data_rate_bit8
,
7683 { "43.5 kbit/s (TCH/F43.2)", "gsm_a.bssmap.allowed_data_rate_bit8",
7684 FT_BOOLEAN
, 8, TFS(&tfs_allowed_not_allowed
), 0x80,
7687 { &hf_gsm_a_bssmap_allowed_data_rate_bit7
,
7688 { "32.0 kbit/s (TCH/F32.0)", "gsm_a.bssmap.allowed_data_rate_bit7",
7689 FT_BOOLEAN
, 8, TFS(&tfs_allowed_not_allowed
), 0x40,
7692 { &hf_gsm_a_bssmap_allowed_data_rate_bit6
,
7693 { "29.0 kbit/s (TCH/F28.8)", "gsm_a.bssmap.allowed_data_rate_bit6",
7694 FT_BOOLEAN
, 8, TFS(&tfs_allowed_not_allowed
), 0x20,
7697 { &hf_gsm_a_bssmap_allowed_data_rate_bit5
,
7698 { "14.5/14.4 kbit/s (TCH/F14.4)", "gsm_a.bssmap.allowed_data_rate_bit5",
7699 FT_BOOLEAN
, 8, TFS(&tfs_allowed_not_allowed
), 0x10,
7702 { &hf_gsm_a_bssmap_allowed_data_rate_bit4
,
7703 { "12.0/9.6 kbit/s (TCH F/9.6)", "gsm_a.bssmap.allowed_data_rate_bit4",
7704 FT_BOOLEAN
, 8, TFS(&tfs_allowed_not_allowed
), 0x08,
7707 { &hf_gsm_a_bssmap_vstk_rand
,
7708 { "VSTK_RAND", "gsm_a.bssmap.vstk_rand",
7709 FT_UINT64
, BASE_HEX
, NULL
, 0,
7712 { &hf_gsm_a_bssmap_vstk
,
7713 { "VSTK", "gsm_a.bssmap.vstk",
7714 FT_BYTES
, BASE_NONE
, NULL
, 0,
7718 { &hf_gsm_a_bssmap_spare_bits
,
7719 { "Spare bit(s)", "gsm_a.bssmap.spare_bits",
7720 FT_UINT8
, BASE_HEX
, NULL
, 0x0,
7723 { &hf_gsm_a_bssmap_tpind
,
7724 { "Talker priority indicator (TP Ind)","gsm_a.bssmap.tpind",
7725 FT_BOOLEAN
,8, TFS(&gsm_bssmap_tpind_vals
), 0x01,
7728 { &hf_gsm_a_bssmap_asind_b2
,
7729 { "A-interface resource sharing indicator (AS Ind) bit 2","gsm_a.bssmap.asind_b2",
7730 FT_BOOLEAN
,8, TFS(&gsm_bssmap_asind_b2_vals
), 0x02,
7733 { &hf_gsm_a_bssmap_asind_b3
,
7734 { "A-interface resource sharing indicator (AS Ind) bit 3","gsm_a.bssmap.asind_b3",
7735 FT_BOOLEAN
,8, TFS(&gsm_bssmap_asind_b3_vals
), 0x04,
7738 { &hf_gsm_a_bssmap_bss_res
,
7739 { "Group or broadcast call re-establishment by the BSS indicator","gsm_a.bssmap.bss_res",
7740 FT_BOOLEAN
,8, TFS(&gsm_bssmap_bss_res_vals
), 0x08,
7743 { &hf_gsm_a_bssmap_tcp
,
7744 { "Talker Channel Parameter (TCP)","gsm_a.bssmap.tcp",
7745 FT_BOOLEAN
,8, TFS(&gsm_bssmap_bss_tcp_vals
), 0x10,
7748 { &hf_gsm_a_bssmap_filler_bits
,
7749 { "Filler Bits","gsm_a.bssmap.filler_bits",
7750 FT_UINT8
, BASE_DEC
,NULL
, 0x07,
7753 { &hf_gsm_a_bssmap_method
,
7754 { "Method","gsm_a.bssmap.method",
7755 FT_UINT8
, BASE_DEC
,VALS(gsm_a_bssmap_method_vals
), 0xc0,
7758 { &hf_gsm_a_bssmap_ganss_id
,
7759 { "GANSS Id","gsm_a.bssmap.ganss_id",
7760 FT_UINT8
, BASE_DEC
,VALS(gsm_a_bssmap_ganss_id_vals
), 0x38,
7763 { &hf_gsm_a_bssmap_usage
,
7764 { "Usage","gsm_a.bssmap.usage",
7765 FT_UINT8
, BASE_DEC
,VALS(gsm_a_bssmap_usage_vals
), 0x07,
7768 { &hf_gsm_a_bssmap_data_id
,
7769 { "Data Identity","gsm_a.bssmap.data_id",
7770 FT_UINT8
, BASE_DEC_HEX
, NULL
, 0,
7773 { &hf_gsm_a_bssmap_bt_ind
,
7774 { "BT Ind","gsm_a.bssmap.bt_ind",
7775 FT_BOOLEAN
, 8, TFS(&gsm_a_bssmap_bt_ind_val
), 0x01,
7778 { &hf_gsm_a_bssmap_aoip_trans_ipv4
,
7779 { "Transport Layer Address (IPv4)","gsm_a.bssmap.aoip_trans_ipv4",
7780 FT_IPv4
,BASE_NONE
, NULL
, 0x0,
7783 { &hf_gsm_a_bssmap_aoip_trans_ipv6
,
7784 { "Transport Layer Address (IPv6)","gsm_a.bssmap.aoip_trans_ipv6",
7785 FT_IPv6
,BASE_NONE
, NULL
, 0x0,
7788 { &hf_gsm_a_bssmap_aoip_trans_port
,
7789 { "UDP Port","gsm_a.bssmap.aoip_trans_port",
7790 FT_UINT16
, BASE_DEC
,NULL
, 0x0,
7793 { &hf_gsm_a_bssmap_fi
,
7794 { "FI(Full IP)","gsm_a.bssmap.fi",
7795 FT_BOOLEAN
,8, TFS(&bssmap_fi_vals
), 0x80,
7798 { &hf_gsm_a_bssmap_pi
,
7799 { "PI","gsm_a.bssmap.pi",
7800 FT_BOOLEAN
,8, TFS(&bssmap_pi_vals
), 0x40,
7803 { &hf_gsm_a_bssmap_pt
,
7804 { "PT","gsm_a.bssmap.pt",
7805 FT_BOOLEAN
,8, TFS(&bssmap_pt_vals
), 0x20,
7808 { &hf_gsm_a_bssmap_tf
,
7809 { "TF","gsm_a.bssmap.tf",
7810 FT_BOOLEAN
,8, TFS(&bssmap_tf_vals
), 0x10,
7813 { &hf_gsm_a_bssap_speech_codec
,
7814 { "Codec Type","gsm_a.bssmap.speech_codec",
7815 FT_UINT8
, BASE_DEC
|BASE_EXT_STRING
, &bssap_speech_codec_values_ext
, 0x0f,
7818 { &hf_gsm_a_bssap_extended_codec
,
7819 { "Extended Codec Type","gsm_a.bssmap.extended_codec",
7820 FT_UINT8
, BASE_DEC
, VALS(bssap_extended_codec_values
), 0x0,
7823 { &hf_gsm_a_bssap_extended_codec_r2
,
7824 { "Redundancy Level 2","gsm_a.bssmap.r2",
7825 FT_BOOLEAN
,8, TFS(&tfs_supported_not_supported
), 0x80,
7828 { &hf_gsm_a_bssap_extended_codec_r3
,
7829 { "Redundancy Level 3","gsm_a.bssmap.r3",
7830 FT_BOOLEAN
,8, TFS(&tfs_supported_not_supported
), 0x40,
7833 { &hf_gsm_a_bssmap_fi2
,
7834 { "FI(Full IP)","gsm_a.bssmap.fi2",
7835 FT_BOOLEAN
,8, TFS(&bssmap_fi2_vals
), 0x80,
7838 { &hf_gsm_a_bssmap_pi2
,
7839 { "PI","gsm_a.bssmap.pi2",
7840 FT_BOOLEAN
,8, TFS(&bssmap_pi2_vals
), 0x40,
7843 { &hf_gsm_a_bssmap_pt2
,
7844 { "PT","gsm_a.bssmap.pt2",
7845 FT_BOOLEAN
,8, TFS(&bssmap_pt2_vals
), 0x20,
7848 { &hf_gsm_a_bssmap_tf2
,
7849 { "TF","gsm_a.bssmap.tf2",
7850 FT_BOOLEAN
,8, TFS(&bssmap_tf2_vals
), 0x10,
7853 { &hf_gsm_a_bssmap_call_id
,
7854 { "Call Identifier","gsm_a.bssmap.callid",
7855 FT_UINT32
, BASE_DEC
,NULL
, 0x0,
7858 { &hf_gsm_a_bssmap_spare
,
7859 { "Spare", "gsm_a.bssmap.spare",
7860 FT_UINT8
, BASE_HEX
, NULL
, 0x0,
7863 { &hf_gsm_a_bssmap_positioning_data_discriminator
,
7864 { "Positioning Data Discriminator", "gsm_a.bssmap.posData.discriminator",
7865 FT_UINT8
, BASE_HEX
, NULL
, 0x0,
7868 { &hf_gsm_a_bssmap_positioning_method
,
7869 { "Positioning method", "gsm_a.bssmap.posData.method",
7870 FT_UINT8
, BASE_HEX
, VALS(bssmap_positioning_methods
), 0x0,
7873 { &hf_gsm_a_bssmap_positioning_method_usage
,
7874 { "Usage", "gsm_a.bssmap.posData.usage",
7875 FT_UINT8
, BASE_HEX
, VALS(bssmap_positioning_methods_usage
), 0x0,
7878 { &hf_gsm_a_bssmap_location_type_location_information
,
7879 { "Location Information", "gsm_a.bssmap.locationType.locationInformation",
7880 FT_UINT8
, BASE_HEX
, VALS(bssmap_location_information_vals
), 0x0,
7883 { &hf_gsm_a_bssmap_location_type_positioning_method
,
7884 { "Positioning Method", "gsm_a.bssmap.locationType.positioningMethod",
7885 FT_UINT8
, BASE_HEX
, VALS(bssmap_positioning_method_vals
), 0x0,
7888 { &hf_gsm_a_bssmap_chan_type_extension
,
7889 { "Extension", "gsm_a.bssmap.chanType.permittedIndicator.extension",
7890 FT_BOOLEAN
, 8, TFS(&bssmap_chan_type_extension_value
), 0x80,
7893 { &hf_gsm_a_bssmap_cause_extension
,
7894 { "Extension", "gsm_a.bssmap.causeType.extension",
7895 FT_BOOLEAN
, 8, TFS(&bssmap_cause_extension_value
), 0x80,
7898 { &hf_gsm_a_bssmap_emlpp_prio
,
7899 { "eMLPP Priority", "gsm_a.bssmap.emlpp_priority",
7900 FT_UINT8
, BASE_HEX
, VALS(gsm_a_bssmap_call_priority_vals
), 0x07,
7903 { &hf_gsm_a_bssmap_rip
,
7904 { "RIP", "gsm_a.bssmap.rip",
7905 FT_BOOLEAN
, 8, TFS(&gsm_a_bssmap_rip_value
), 0x02,
7908 { &hf_gsm_a_bssmap_rtd
,
7909 { "RTD", "gsm_a.bssmap.rtd",
7910 FT_BOOLEAN
, 8, TFS(&gsm_a_bssmap_rtd_value
), 0x01,
7913 { &hf_gsm_a_bssmap_kc128
,
7914 { "Kc128", "gsm_a.bssmap.kc128",
7915 FT_BYTES
, BASE_NONE
, NULL
, 0,
7918 { &hf_gsm_a_bssmap_csg_id
,
7919 { "CSG Identity", "gsm_a.bssmap.csg_id",
7920 FT_UINT32
, BASE_DEC
, NULL
, 0,
7923 { &hf_gsm_a_bssmap_cell_access_mode
,
7924 { "Cell Access Mode", "gsm_a.bssmap.cell_access_mode",
7925 FT_BOOLEAN
, BASE_NONE
, TFS(&gsm_a_bssmap_cell_access_mode_value
), 0,
7929 { &hf_fe_extra_info_prec
,
7930 { "Pre-emption Recommendation", "gsm_a.bssmap.fe_extra_info.prec",
7931 FT_UINT8
, BASE_DEC
, VALS(fe_extra_info_prec_vals
), 0x01,
7934 { &hf_fe_extra_info_lcs
,
7935 { "LCS Information", "gsm_a.bssmap.fe_extra_info.lcs",
7936 FT_UINT8
, BASE_DEC
, VALS(fe_extra_info_lcs_vals
), 0x02,
7939 { &hf_fe_extra_info_ue_prob
,
7940 { "UE support of UMTS", "gsm_a.bssmap.fe_extra_info.ue_prob",
7941 FT_UINT8
, BASE_DEC
, VALS(fe_extra_info_ue_prob_vals
), 0x04,
7944 { &hf_fe_extra_info_spare
,
7945 { "Extra Information Spare bits", "gsm_a.bssmap.fe_extra_info.spare",
7946 FT_UINT8
, BASE_HEX
, NULL
, 0xf8,
7949 { &hf_fe_cur_chan_type2_chan_mode
,
7950 { "Channel Mode", "gsm_a.bssmap.fe_cur_chan_type2.chan_mode",
7951 FT_UINT8
, BASE_HEX
, VALS(chan_mode_vals
), 0x0f,
7954 { &hf_fe_cur_chan_type2_chan_mode_spare
,
7955 { "Channel Mode Spare bits", "gsm_a.bssmap.fe_cur_chan_type2_chan_mode.spare",
7956 FT_UINT8
, BASE_HEX
, NULL
, 0xf0,
7959 { &hf_fe_cur_chan_type2_chan_field
,
7960 { "Channel Field", "gsm_a.bssmap.fe_cur_chan_type2.chan_field",
7961 FT_UINT8
, BASE_HEX
, VALS(fe_cur_chan_type2_chan_field_vals
),0x0f,
7964 { &hf_fe_cur_chan_type2_chan_field_spare
,
7965 { "Channel field Spare bits", "gsm_a.bssmap.fe_cur_chan_type2_chan_field.spare",
7966 FT_UINT8
, BASE_HEX
, NULL
, 0xf0,
7969 { &hf_fe_target_radio_cell_info_rxlev_ncell
,
7970 { "RXLEV-NCELL", "gsm_a.bssmap.fe_target_radio_cell_info.rxlev_ncell",
7971 FT_UINT8
, BASE_HEX
|BASE_EXT_STRING
, &gsm_a_rr_rxlev_vals_ext
, 0x3f,
7974 { &hf_fe_target_radio_cell_info_rxlev_ncell_spare
,
7975 { "RXLEV-NCELL Spare bits", "gsm_a.bssmap.fe_target_radio_cell_info.rxlev_ncell_spare",
7976 FT_UINT8
, BASE_HEX
, NULL
, 0xc0,
7979 { &hf_fe_dtm_info_dtm_ind
,
7980 { "DTM indicator", "gsm_a.bssmap.fe_dtm_info.dtm_ind",
7981 FT_UINT8
, BASE_HEX
, VALS(gsm_a_bssmap_dtm_info_dtm_ind_vals
), 0x01,
7984 { &hf_fe_dtm_info_sto_ind
,
7985 { "Time Slot Operation indicator", "gsm_a.bssmap.fe_dtm_info.sto_ind",
7986 FT_UINT8
, BASE_HEX
, VALS(gsm_a_bssmap_dtm_info_sto_ind_vals
), 0x02,
7989 { &hf_fe_dtm_info_egprs_ind
,
7990 { "EGPRS indicator", "gsm_a.bssmap.fe_dtm_info.egprs_ind",
7991 FT_UINT8
, BASE_HEX
, VALS(gsm_a_bssmap_dtm_info_egprs_ind_vals
), 0x04,
7994 { &hf_fe_dtm_info_spare_bits
,
7995 { "DTM Info Spare bits", "gsm_a.bssmap.fe_dtm_info.spare_bits",
7996 FT_UINT8
, BASE_HEX
, NULL
, 0xf8,
7999 { &hf_fe_cell_load_info_cell_capacity_class
,
8000 { "Cell capacity class", "gsm_a.bssmap.fe_cell_load_info.cell_capacity_class",
8001 FT_UINT8
, BASE_DEC
, NULL
, 0,
8004 { &hf_fe_cell_load_info_load_value
,
8005 { "Load value", "gsm_a.bssmap.fe_cell_load_info.load_info",
8006 FT_UINT8
, BASE_DEC
, NULL
, 0,
8009 { &hf_fe_cell_load_info_rt_load_value
,
8010 { "Realtime load value", "gsm_a.bssmap.fe_cell_load_info.rt_load_value",
8011 FT_UINT8
, BASE_DEC
, NULL
, 0,
8014 { &hf_fe_cell_load_info_nrt_load_information_value
,
8015 { "Non-Realtime load information value", "gsm_a.bssmap.fe_cell_load_info.nrt_load_info_value",
8016 FT_UINT8
, BASE_HEX
, VALS(gsm_a_bssmap_cell_load_nrt_vals
), 0,
8019 { &hf_fe_ps_indication
,
8020 { "PS Indication", "gsm_a.bssmap.fe_ps_indication.value",
8021 FT_UINT8
, BASE_HEX
, NULL
, 0,
8024 { &hf_fe_dtm_ho_command_ind_spare
,
8025 { "Spare octet", "gsm_a.bssmap.fe_dtm_ho_command_ind.spare",
8026 FT_UINT8
, BASE_HEX
, NULL
, 0,
8029 { &hf_gsm_a_bssmap_speech_data_ind
,
8030 { "Speech/Data Indicator", "gsm_a.bssmap.speech_data_ind",
8031 FT_UINT8
, BASE_DEC
, VALS(gsm_a_bssap_speech_data_ind_vals
), 0x0f,
8034 { &hf_gsm_a_bssmap_channel_rate_and_type
,
8035 { "Channel Rate and Type", "gsm_a.bssmap.perm_speech_v_ind",
8036 FT_UINT8
, BASE_DEC
, VALS(gsm_a_bssap_channel_rate_and_type_vals
), 0x0,
8039 { &hf_gsm_a_bssmap_perm_speech_v_ind
,
8040 { "Permitted speech version indication", "gsm_a.bssmap.perm_speech_v_ind",
8041 FT_UINT8
, BASE_HEX
, VALS(gsm_a_bssap_perm_speech_v_ind_vals
), 0x7f,
8044 { &hf_gsm_a_bssmap_reroute_rej_cause
,
8045 { "Reroute Reject cause", "gsm_a.bssmap.reroute_rej_cause",
8046 FT_UINT8
, BASE_HEX
, VALS(gsm_a_bssap_reroute_rej_cause_vals
), 0x0,
8049 { &hf_gsm_a_bssmap_send_seqn
,
8050 { "Send Sequence Number", "gsm_a.bssmap.reroute_rej_cause",
8051 FT_UINT8
, BASE_HEX
, NULL
, 0xc0,
8054 { &hf_gsm_a_bssmap_reroute_outcome
,
8055 { "Outcome", "gsm_a.bssmap.reroute_outcome",
8056 FT_UINT8
, BASE_HEX
, VALS(gsm_a_bssap_reroute_outcome_vals
), 0x0,
8059 { &hf_gsm_a_bssmap_lcls_conf
,
8060 { "LCLS-Configuration", "gsm_a.bssmap.lcls_conf",
8061 FT_UINT8
, BASE_HEX
, VALS(gsm_a_bssap_lcls_conf_vals
), 0x0f,
8064 { &hf_gsm_a_bssmap_lcls_con_status_control
,
8065 { "LCLS-Connection-Status-Control", "gsm_a.bssmap.lcls_con_status_control",
8066 FT_UINT8
, BASE_HEX
, VALS(gsm_a_bssap_lcls_con_status_control_vals
), 0x0f,
8069 { &hf_gsm_a_bssmap_lcls_bss_status
,
8070 { "LCLS-BSS-Status", "gsm_a.bssmap.lcls_bss_status",
8071 FT_UINT8
, BASE_HEX
, VALS(gsm_a_bssmap_lcls_bss_status_vals
), 0x0f,
8074 { &hf_gsm_a_bssmap_selected_plmn_id
,
8075 { "Selected PLMN ID", "gsm_a.bssmap.selected_plmn_id",
8076 FT_STRING
, BASE_NONE
, NULL
, 0,
8082 expert_module_t
* expert_gsm_a_bssmap
;
8084 static ei_register_info ei
[] = {
8085 { &ei_gsm_a_bssmap_extraneous_data
, { "gsm_a_bssmap.extraneous_data", PI_PROTOCOL
, PI_NOTE
, "Extraneous Data, dissector bug or later version spec(report to wireshark.org)", EXPFILL
}},
8088 /* Setup protocol subtree array */
8089 #define NUM_INDIVIDUAL_ELEMS 5
8090 gint
*ett
[NUM_INDIVIDUAL_ELEMS
+ NUM_GSM_BSSMAP_MSG
+
8091 NUM_GSM_BSSMAP_ELEM
];
8093 ett
[0] = &ett_bssmap_msg
;
8094 ett
[1] = &ett_cell_list
;
8096 ett
[3] = &ett_codec_lst
,
8097 ett
[4] = &ett_bss_to_bss_info
,
8099 last_offset
= NUM_INDIVIDUAL_ELEMS
;
8101 for (i
=0; i
< NUM_GSM_BSSMAP_MSG
; i
++, last_offset
++)
8103 ett_gsm_bssmap_msg
[i
] = -1;
8104 ett
[last_offset
] = &ett_gsm_bssmap_msg
[i
];
8107 for (i
=0; i
< NUM_GSM_BSSMAP_ELEM
; i
++, last_offset
++)
8109 ett_gsm_bssmap_elem
[i
] = -1;
8110 ett
[last_offset
] = &ett_gsm_bssmap_elem
[i
];
8113 /* Register the protocol name and description */
8116 proto_register_protocol("GSM A-I/F BSSMAP", "GSM BSSMAP", "gsm_a.bssmap");
8118 proto_register_field_array(proto_a_bssmap
, hf
, array_length(hf
));
8120 proto_register_subtree_array(ett
, array_length(ett
));
8122 expert_gsm_a_bssmap
= expert_register_protocol(proto_a_bssmap
);
8123 expert_register_field_array(expert_gsm_a_bssmap
, ei
, array_length(ei
));
8125 register_dissector("gsm_a_bssmap", dissect_bssmap
, proto_a_bssmap
);
8130 proto_reg_handoff_gsm_a_bssmap(void)
8132 dissector_handle_t bssmap_handle
;
8134 bssmap_handle
= find_dissector("gsm_a_bssmap");
8135 dissector_add_uint("bssap.pdu_type", GSM_A_PDU_TYPE_BSSMAP
, bssmap_handle
);
8137 dtap_handle
= find_dissector("gsm_a_dtap");
8138 gsm_bsslap_handle
= find_dissector("gsm_bsslap");
8139 bssgp_handle
= find_dissector ("bssgp");
8140 rrc_handle
= find_dissector ("rrc");