Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / epan / dissectors / packet-ansi_a.c
blob2503fe11c3f07cafb43dff2df7ee181f5499e596
1 /* packet-ansi_a.c
2 * Routines for ANSI A Interface (IS-634/IOS) dissection
4 * Copyright 2003, Michael Lum <mlum [AT] telostech.com>
5 * In association with Telos Technology Inc.
6 * Copyright 2008, Michael Lum <michael.lum [AT] starsolutions.com>
7 * In association with Star Solutions
9 * Title 3GPP2 Other
11 * Inter-operability Specification (IOS) for CDMA
12 * 2000 Access Network Interfaces
13 * 3GPP2 A.S0001-1 TIA/EIA-2001
15 * 3GPP2 C.R1001-H v1.0 TSB-58-I (or J?)
17 * RFC 5188
18 * RTP Payload Format for the Enhanced Variable Rate Wideband Codec (EVRC-WB)
19 * and the Media Subtype Updates for EVRC-B Codec
21 * Wireshark - Network traffic analyzer
22 * By Gerald Combs <gerald@wireshark.org>
23 * Copyright 1998 Gerald Combs
25 * SPDX-License-Identifier: GPL-2.0-or-later
28 #include "config.h"
30 #include <epan/packet.h>
31 #include <epan/prefs.h>
32 #include <epan/tap.h>
33 #include <epan/stat_tap_ui.h>
34 #include <epan/expert.h>
35 #include <epan/tfs.h>
37 #include <wsutil/array.h>
38 #include <wsutil/str_util.h>
40 #include "packet-rtp.h"
41 #include "packet-bssap.h"
42 #include "packet-ansi_a.h"
45 * IOS 4, probably most common
47 static int global_a_variant = A_VARIANT_IOS401;
48 static bool global_a_info_display = true;
50 /* PROTOTYPES/FORWARDS */
52 void proto_register_ansi_a(void);
53 void proto_reg_handoff_ansi_a(void);
55 static const char *
56 my_try_val_to_str_idx(uint32_t val, const ext_value_string_t *vs, int *dec_idx)
58 int i = 0;
60 while (vs[i].strptr)
62 if (vs[i].value == val)
64 *dec_idx = vs[i].dec_index;
65 return vs[i].strptr;
68 i++;
71 *dec_idx = -1;
72 return NULL;
75 static const true_false_string tfs_l2_reset_dont_reset =
77 "Reset Layer 2 Ack",
78 "Do not reset Layer 2 Ack"
81 static const true_false_string tfs_fpc_reset_dont_reset =
83 "Reset counters",
84 "Do not reset counters"
87 static const true_false_string tfs_use_dont_use =
89 "Use",
90 "Do not use"
93 static const true_false_string tfs_prio_incl_yes_no =
95 "MSC should include priority in Assignment Request",
96 "MSC does not need to include priority in Assignment Request"
99 static const true_false_string tfs_alloc_yes_no =
101 "Resources are allocated",
102 "Resources are not allocated"
105 static const true_false_string tfs_avail_yes_no =
107 "Resources are available",
108 "Resources are not available"
111 static const true_false_string tfs_reoi_pri_reorig_no_reorig =
113 "Reorigination",
114 "Not reorigination"
117 static const true_false_string tfs_ansi_a_xmode_tfo_mode =
119 "TFO",
120 "tandem"
123 static const true_false_string tfs_reserved_no_voice_privacy =
125 "Reserved",
126 "No voice privacy supported"
129 static const true_false_string tfs_reserved_aes =
131 "Reserved",
132 "Advanced Encryption Standard (AES)"
135 static const true_false_string tfs_reserved_private_long_code =
137 "Reserved",
138 "Private long code"
141 static const true_false_string tfs_a2p_bearer_form_format_bearer_addr_flag =
143 "Override Bearer Session IP Address",
144 "Use Bearer Session IP Address"
147 static const true_false_string tfs_a2p_bearer_sess_addr_flag =
149 "Session IP Address is present",
150 "Session IP Address is not present"
153 const ext_value_string_t ansi_a_ios401_bsmap_strings[] =
155 { 0x69, "Additional Service Notification", 0 },
156 { 0x65, "ADDS Page", 1 },
157 { 0x66, "ADDS Page Ack", 2 },
158 { 0x67, "ADDS Transfer", 3 },
159 { 0x68, "ADDS Transfer Ack", 4 },
160 { 0x02, "Assignment Complete", 5 },
161 { 0x03, "Assignment Failure", 6 },
162 { 0x01, "Assignment Request", 7 },
163 { 0x45, "Authentication Request", 8 },
164 { 0x46, "Authentication Response", 9 },
165 { 0x48, "Base Station Challenge", 10 },
166 { 0x49, "Base Station Challenge Response", 11 },
167 { 0x40, "Block", 12 },
168 { 0x41, "Block Acknowledge", 13 },
169 { 0x09, "BS Service Request", 14 },
170 { 0x0A, "BS Service Response", 15 },
171 { 0x20, "Clear Command", 16 },
172 { 0x21, "Clear Complete", 17 },
173 { 0x22, "Clear Request", 18 },
174 { 0x57, "Complete Layer 3 Information", 19 },
175 { 0x60, "Feature Notification", 20 },
176 { 0x61, "Feature Notification Ack", 21 },
177 { 0x13, "Handoff Command", 22 },
178 { 0x15, "Handoff Commenced", 23 },
179 { 0x14, "Handoff Complete", 24 },
180 { 0x16, "Handoff Failure", 25 },
181 { 0x17, "Handoff Performed", 26 },
182 { 0x10, "Handoff Request", 27 },
183 { 0x12, "Handoff Request Acknowledge", 28 },
184 { 0x11, "Handoff Required", 29 },
185 { 0x1A, "Handoff Required Reject", 30 },
186 { 0x6C, "PACA Command", 31 },
187 { 0x6D, "PACA Command Ack", 32 },
188 { 0x6E, "PACA Update", 33 },
189 { 0x6F, "PACA Update Ack", 34 },
190 { 0x52, "Paging Request", 35 },
191 { 0x53, "Privacy Mode Command", 36 },
192 { 0x55, "Privacy Mode Complete", 37 },
193 { 0x23, "Radio Measurements for Position Request", 38 },
194 { 0x25, "Radio Measurements for Position Response", 39 },
195 { 0x56, "Rejection", 40 },
196 { 0x05, "Registration Request", 41 },
197 { 0x30, "Reset", 42 },
198 { 0x31, "Reset Acknowledge", 43 },
199 { 0x34, "Reset Circuit", 44 },
200 { 0x35, "Reset Circuit Acknowledge", 45 },
201 { 0x47, "SSD Update Request", 46 },
202 { 0x4A, "SSD Update Response", 47 },
203 { 0x6A, "Status Request", 48 },
204 { 0x6B, "Status Response", 49 },
205 { 0x39, "Transcoder Control Acknowledge", 50 },
206 { 0x38, "Transcoder Control Request", 51 },
207 { 0x42, "Unblock", 52 },
208 { 0x43, "Unblock Acknowledge", 53 },
209 { 0x0B, "User Zone Reject", 54 },
210 { 0x04, "User Zone Update", 55 },
211 { 0, NULL, 0 }
214 const ext_value_string_t ansi_a_ios401_dtap_strings[] =
216 { 0x62, "Additional Service Request", 0 },
217 { 0x53, "ADDS Deliver", 1 },
218 { 0x54, "ADDS Deliver Ack", 2 },
219 { 0x26, "Alert With Information", 3 },
220 { 0x45, "Authentication Request", 4 },
221 { 0x46, "Authentication Response", 5 },
222 { 0x48, "Base Station Challenge", 6 },
223 { 0x49, "Base Station Challenge Response", 7 },
224 { 0x24, "CM Service Request", 8 },
225 { 0x25, "CM Service Request Continuation", 9 },
226 { 0x07, "Connect", 10 },
227 { 0x10, "Flash with Information", 11 },
228 { 0x50, "Flash with Information Ack", 12 },
229 { 0x02, "Location Updating Accept", 13 },
230 { 0x04, "Location Updating Reject", 14 },
231 { 0x08, "Location Updating Request", 15 },
232 { 0x27, "Paging Response", 16 },
233 { 0x2B, "Parameter Update Confirm", 17 },
234 { 0x2C, "Parameter Update Request", 18 },
235 { 0x56, "Rejection", 19 },
236 { 0x03, "Progress", 20 },
237 { 0x70, "Service Redirection", 21 },
238 { 0x2E, "Service Release", 22 },
239 { 0x2F, "Service Release Complete", 23 },
240 { 0x47, "SSD Update Request", 24 },
241 { 0x4A, "SSD Update Response", 25 },
242 { 0x6A, "Status Request", 26 },
243 { 0x6B, "Status Response", 27 },
244 { 0x0B, "User Zone Reject", 28 },
245 { 0x0C, "User Zone Update", 29 },
246 { 0x0D, "User Zone Update Request", 30 },
247 { 0x33, "Send Burst DTMF", 31 }, /* IS-634.400A 6.1.3.1 */
248 { 0x34, "Send Burst DTMF Ack", 32 }, /* IS-634.400A 6.1.3.2 */
249 { 0x35, "Start DTMF", 33 }, /* IS-634.400A 6.1.3.3 */
250 { 0x36, "Start DTMF Ack", 34 }, /* IS-634.400A 6.1.3.4 */
251 { 0x31, "Stop DTMF", 35 }, /* IS-634.400A 6.1.3.5 */
252 { 0x32, "Stop DTMF Ack", 36 }, /* IS-634.400A 6.1.3.6 */
253 { 0, NULL, 0 }
256 const ext_value_string_t ansi_a_ios401_elem_1_strings[] =
258 { 0x20, "Access Network Identifiers", 0 },
259 { 0x3D, "ADDS User Part", 1 },
260 { 0x25, "AMPS Hard Handoff Parameters", 2 },
261 { 0x30, "Anchor PDSN Address", 3 },
262 { 0x7C, "Anchor P-P Address", 4 },
263 { 0x41, "Authentication Challenge Parameter", 5 },
264 { 0x28, "Authentication Confirmation Parameter (RANDC)", 6 },
265 { 0x59, "Authentication Data", 7 },
266 { 0x4A, "Authentication Event", 8 },
267 { 0x40, "Authentication Parameter COUNT", 9 },
268 { 0x42, "Authentication Response Parameter", 10 },
269 { 0x37, "Band Class", 11 },
270 { 0x5B, "Called Party ASCII Number", 12 },
271 { 0x5E, "Called Party BCD Number", 13 },
272 { 0x4B, "Calling Party ASCII Number", 14 },
273 { 0x04, "Cause", 15 },
274 { 0x08, "Cause Layer 3", 16 },
275 { 0x0C, "CDMA Serving One Way Delay", 17 },
276 { 0x05, "Cell Identifier", 18 },
277 { 0x1A, "Cell Identifier List", 19 },
278 { 0x23, "Channel Number", 20 },
279 { 0x0B, "Channel Type", 21 },
280 { 0x19, "Circuit Group", 22 },
281 { 0x01, "Circuit Identity Code", 23 },
282 { 0x24, "Circuit Identity Code Extension", 24 },
283 { 0x12, "Classmark Information Type 2", 25 },
284 { 0x29, "Downlink Radio Environment", 26 },
285 { 0x2B, "Downlink Radio Environment List", 27 },
286 { 0x0A, "Encryption Information", 28 },
287 { 0x10, "Extended Handoff Direction Parameters", 29 },
288 { 0x2C, "Geographic Location", 30 },
289 { 0x5A, "Special Service Call Indicator", 31 },
290 { 0x26, "Handoff Power Level", 32 },
291 { 0x16, "Hard Handoff Parameters", 33 },
292 { 0x2E, "Information Element Requested", 34 },
293 { 0x09, "IS-2000 Channel Identity", 35 },
294 { 0x27, "IS-2000 Channel Identity 3X", 36 },
295 { 0x11, "IS-2000 Mobile Capabilities", 37 },
296 { 0x0F, "IS-2000 Non-Negotiable Service Configuration Record", 38 },
297 { 0x0E, "IS-2000 Service Configuration Record", 39 },
298 { 0x62, "IS-95/IS-2000 Cause Value", 40 },
299 { 0x67, "IS-2000 Redirection Record", 41 },
300 { 0x22, "IS-95 Channel Identity", 42 },
301 { 0x64, "IS-95 MS Measured Channel Identity", 43 },
302 { 0x17, "Layer 3 Information", 44 },
303 { 0x13, "Location Area Information", 45 },
304 { 0x38, "Message Waiting Indication", 46 },
305 { 0x0D, "Mobile Identity", 47 },
306 { 0x15, "MS Information Records (Forward)", 48 },
307 { 0xA0, "Origination Continuation Indicator", 49 },
308 { 0x5F, "PACA Order", 50 },
309 { 0x60, "PACA Reorigination Indicator", 51 },
310 { 0x4E, "PACA Timestamp", 52 },
311 { 0x70, "Packet Session Parameters", 53 },
312 { 0x14, "PDSN IP Address", 54 },
313 { 0xA2, "Power Down Indicator", 55 },
314 { 0x06, "Priority", 56 },
315 { 0x3B, "Protocol Revision", 57 },
316 { 0x18, "Protocol Type", 58 },
317 { 0x2D, "PSMM Count", 59 },
318 { 0x07, "Quality of Service Parameters", 60 },
319 { 0x1D, "Radio Environment and Resources", 61 },
320 { 0x1F, "Registration Type", 62 },
321 { 0x44, "Reject Cause", 63 },
322 { 0x1B, "Response Request", 64 },
323 { 0x68, "Return Cause", 65 },
324 { 0x21, "RF Channel Identity", 66 },
325 { 0x03, "Service Option", 67 },
326 { 0x1E, "Service Option Connection Identifier (SOCI)", 68 },
327 { 0x2A, "Service Option List", 69 },
328 { 0x69, "Service Redirection Info", 70 },
329 { 0x71, "Service Reference Identifier (SR_ID)", 71 },
330 { 0x32, "SID", 72 },
331 { 0x34, "Signal", 73 },
332 { 0x35, "Slot Cycle Index", 74 },
333 { 0x31, "Software Version", 75 },
334 { 0x39, "Source RNC to Target RNC Transparent Container", 76 },
335 { 0x14, "Source PDSN Address", 77 },
336 { 0x33, "Tag", 78 },
337 { 0x3A, "Target RNC to Source RNC Transparent Container", 79 },
338 { 0x36, "Transcoder Mode", 80 }, /* XXX 0x1C in IOS 4.0.1 */
339 { 0x02, "User Zone ID", 81 },
340 { 0xA1, "Voice Privacy Request", 82 },
341 { 0x15, "MS Information Records (Reverse)", 83 },
342 { 0x2C, "Burst DTMF Transmission Information", 84 }, /* duplicate but never used because this elem is always MANDATORY in DTAP */
343 { 0x2D, "DTMF Characters", 85 }, /* duplicate but never used because this elem is always MANDATORY in DTAP */
344 { 0, NULL, 0 }
347 const ext_value_string_t ansi_a_ios501_bsmap_strings[] =
349 { 0x69, "Additional Service Notification", 0 },
350 { 0x65, "ADDS Page", 1 },
351 { 0x66, "ADDS Page Ack", 2 },
352 { 0x67, "ADDS Transfer", 3 },
353 { 0x68, "ADDS Transfer Ack", 4 },
354 { 0x02, "Assignment Complete", 5 },
355 { 0x03, "Assignment Failure", 6 },
356 { 0x01, "Assignment Request", 7 },
357 { 0x45, "Authentication Request", 8 },
358 { 0x46, "Authentication Response", 9 },
359 { 0x48, "Base Station Challenge", 10 },
360 { 0x49, "Base Station Challenge Response", 11 },
361 { 0x40, "Block", 12 },
362 { 0x41, "Block Acknowledge", 13 },
363 { 0x09, "BS Service Request", 14 },
364 { 0x0A, "BS Service Response", 15 },
365 { 0x20, "Clear Command", 16 },
366 { 0x21, "Clear Complete", 17 },
367 { 0x22, "Clear Request", 18 },
368 { 0x57, "Complete Layer 3 Information", 19 },
369 { 0x60, "Feature Notification", 20 },
370 { 0x61, "Feature Notification Ack", 21 },
371 { 0x13, "Handoff Command", 22 },
372 { 0x15, "Handoff Commenced", 23 },
373 { 0x14, "Handoff Complete", 24 },
374 { 0x16, "Handoff Failure", 25 },
375 { 0x17, "Handoff Performed", 26 },
376 { 0x10, "Handoff Request", 27 },
377 { 0x12, "Handoff Request Acknowledge", 28 },
378 { 0x11, "Handoff Required", 29 },
379 { 0x1A, "Handoff Required Reject", 30 },
380 { 0x6C, "PACA Command", 31 },
381 { 0x6D, "PACA Command Ack", 32 },
382 { 0x6E, "PACA Update", 33 },
383 { 0x6F, "PACA Update Ack", 34 },
384 { 0x52, "Paging Request", 35 },
385 { 0x53, "Privacy Mode Command", 36 },
386 { 0x55, "Privacy Mode Complete", 37 },
387 { 0x23, "Radio Measurements for Position Request", 38 },
388 { 0x25, "Radio Measurements for Position Response", 39 },
389 { 0x56, "Rejection", 40 },
390 { 0x05, "Registration Request", 41 },
391 { 0x30, "Reset", 42 },
392 { 0x31, "Reset Acknowledge", 43 },
393 { 0x34, "Reset Circuit", 44 },
394 { 0x35, "Reset Circuit Acknowledge", 45 },
395 { 0x47, "SSD Update Request", 46 },
396 { 0x4A, "SSD Update Response", 47 },
397 { 0x6A, "Status Request", 48 },
398 { 0x6B, "Status Response", 49 },
399 { 0x39, "Transcoder Control Acknowledge", 50 },
400 { 0x38, "Transcoder Control Request", 51 },
401 { 0x42, "Unblock", 52 },
402 { 0x43, "Unblock Acknowledge", 53 },
403 { 0x0B, "User Zone Reject", 54 },
404 { 0x04, "User Zone Update", 55 },
405 { 0x58, "Bearer Update Request", 56 },
406 { 0x5A, "Bearer Update Required", 57 },
407 { 0x59, "Bearer Update Response", 58 },
408 { 0x71, "Mobile Station Registered Notification", 59 },
409 { 0x07, "BS Authentication Request", 60 },
410 { 0x08, "BS Authentication Request Ack", 61 },
411 { 0, NULL, 0 }
414 const ext_value_string_t ansi_a_ios501_dtap_strings[] =
416 { 0x62, "Additional Service Request", 0 },
417 { 0x53, "ADDS Deliver", 1 },
418 { 0x54, "ADDS Deliver Ack", 2 },
419 { 0x26, "Alert With Information", 3 },
420 { 0x45, "Authentication Request", 4 },
421 { 0x46, "Authentication Response", 5 },
422 { 0x48, "Base Station Challenge", 6 },
423 { 0x49, "Base Station Challenge Response", 7 },
424 { 0x24, "CM Service Request", 8 },
425 { 0x25, "CM Service Request Continuation", 9 },
426 { 0x07, "Connect", 10 },
427 { 0x10, "Flash with Information", 11 },
428 { 0x50, "Flash with Information Ack", 12 },
429 { 0x02, "Location Updating Accept", 13 },
430 { 0x04, "Location Updating Reject", 14 },
431 { 0x08, "Location Updating Request", 15 },
432 { 0x27, "Paging Response", 16 },
433 { 0x2B, "Parameter Update Confirm", 17 },
434 { 0x2C, "Parameter Update Request", 18 },
435 { 0x56, "Rejection", 19 },
436 { 0x03, "Progress", 20 },
437 { 0x70, "Service Redirection", 21 },
438 { 0x2E, "Service Release", 22 },
439 { 0x2F, "Service Release Complete", 23 },
440 { 0x47, "SSD Update Request", 24 },
441 { 0x4A, "SSD Update Response", 25 },
442 { 0x6A, "Status Request", 26 },
443 { 0x6B, "Status Response", 27 },
444 { 0x0B, "User Zone Reject", 28 },
445 { 0x0C, "User Zone Update", 29 },
446 { 0x0D, "User Zone Update Request", 30 },
447 { 0x33, "Send Burst DTMF", 31 }, /* IS-634.400A 6.1.3.1 */
448 { 0x34, "Send Burst DTMF Ack", 32 }, /* IS-634.400A 6.1.3.2 */
449 { 0x35, "Start DTMF", 33 }, /* IS-634.400A 6.1.3.3 */
450 { 0x36, "Start DTMF Ack", 34 }, /* IS-634.400A 6.1.3.4 */
451 { 0x31, "Stop DTMF", 35 }, /* IS-634.400A 6.1.3.5 */
452 { 0x32, "Stop DTMF Ack", 36 }, /* IS-634.400A 6.1.3.6 */
453 { 0, NULL, 0 }
457 * ORDER MUST MATCH
458 * ansi_a_ios401_elem_1_strings when the same element
459 * is being described.
461 const ext_value_string_t ansi_a_ios501_elem_1_strings[] =
463 { 0x20, "Access Network Identifiers", 0 },
464 { 0x3D, "ADDS User Part", 1 },
465 { 0x25, "AMPS Hard Handoff Parameters", 2 },
466 { 0x30, "Anchor PDSN Address", 3 },
467 { 0x7C, "Anchor P-P Address", 4 },
468 { 0x41, "Authentication Challenge Parameter", 5 },
469 { 0x28, "Authentication Confirmation Parameter (RANDC)", 6 },
470 { 0x59, "Authentication Data", 7 },
471 { 0x4A, "Authentication Event", 8 },
472 { 0x40, "Authentication Parameter COUNT", 9 },
473 { 0x42, "Authentication Response Parameter", 10 },
474 { 0x37, "Band Class", 11 },
475 { 0x5B, "Called Party ASCII Number", 12 },
476 { 0x5E, "Called Party BCD Number", 13 },
477 { 0x4B, "Calling Party ASCII Number", 14 },
478 { 0x04, "Cause", 15 },
479 { 0x08, "Cause Layer 3", 16 },
480 { 0x0C, "CDMA Serving One Way Delay", 17 },
481 { 0x05, "Cell Identifier", 18 },
482 { 0x1A, "Cell Identifier List", 19 },
483 { 0x23, "Channel Number", 20 },
484 { 0x0B, "Channel Type", 21 },
485 { 0x19, "Circuit Group", 22 },
486 { 0x01, "Circuit Identity Code", 23 },
487 { 0x24, "Circuit Identity Code Extension", 24 },
488 { 0x12, "Classmark Information Type 2", 25 },
489 { 0x29, "Downlink Radio Environment", 26 },
490 { 0x2B, "Downlink Radio Environment List", 27 },
491 { 0x0A, "Encryption Information", 28 },
492 { 0x10, "Extended Handoff Direction Parameters", 29 },
493 { 0x2C, "Geographic Location", 30 },
494 { 0x5A, "Special Service Call Indicator", 31 },
495 { 0x26, "Handoff Power Level", 32 },
496 { 0x16, "Hard Handoff Parameters", 33 },
497 { 0x2E, "Information Element Requested", 34 },
498 { 0x09, "IS-2000 Channel Identity", 35 },
499 { 0x27, "IS-2000 Channel Identity 3X", 36 },
500 { 0x11, "IS-2000 Mobile Capabilities", 37 },
501 { 0x0F, "IS-2000 Non-Negotiable Service Configuration Record", 38 },
502 { 0x0E, "IS-2000 Service Configuration Record", 39 },
503 { 0x62, "IS-95/IS-2000 Cause Value", 40 },
504 { 0x67, "IS-2000 Redirection Record", 41 },
505 { 0x22, "IS-95 Channel Identity", 42 },
506 { 0x64, "IS-95 MS Measured Channel Identity", 43 },
507 { 0x17, "Layer 3 Information", 44 },
508 { 0x13, "Location Area Information", 45 },
509 { 0x38, "Message Waiting Indication", 46 },
510 { 0x0D, "Mobile Identity", 47 },
511 { 0x15, "MS Information Records (Forward)", 48 },
512 { 0xA0, "Origination Continuation Indicator", 49 },
513 { 0x5F, "PACA Order", 50 },
514 { 0x60, "PACA Reorigination Indicator", 51 },
515 { 0x4E, "PACA Timestamp", 52 },
516 { 0x70, "Packet Session Parameters", 53 },
517 { 0x14, "PDSN IP Address", 54 },
518 { 0xA2, "Power Down Indicator", 55 },
519 { 0x06, "Priority", 56 },
520 { 0x3B, "Protocol Revision", 57 },
521 { 0x18, "Protocol Type", 58 },
522 { 0x2D, "PSMM Count", 59 },
523 { 0x07, "Quality of Service Parameters", 60 },
524 { 0x1D, "Radio Environment and Resources", 61 },
525 { 0x1F, "Registration Type", 62 },
526 { 0x44, "Reject Cause", 63 },
527 { 0x1B, "Response Request", 64 },
528 { 0x68, "Return Cause", 65 },
529 { 0x21, "RF Channel Identity", 66 },
530 { 0x03, "Service Option", 67 },
531 { 0x1E, "Service Option Connection Identifier (SOCI)", 68 },
532 { 0x2A, "Service Option List", 69 },
533 { 0x69, "Service Redirection Info", 70 },
534 { 0x71, "Service Reference Identifier (SR_ID)", 71 },
535 { 0x32, "SID", 72 },
536 { 0x34, "Signal", 73 },
537 { 0x35, "Slot Cycle Index", 74 },
538 { 0x31, "Software Version", 75 },
539 { 0x39, "Source RNC to Target RNC Transparent Container", 76 },
540 { 0x14, "Source PDSN Address", 77 },
541 { 0x33, "Tag", 78 },
542 { 0x3A, "Target RNC to Source RNC Transparent Container", 79 },
543 { 0x36, "Transcoder Mode", 80 }, /* XXX 0x1C in IOS 4.0.1 */
544 { 0x02, "User Zone ID", 81 },
545 { 0xA1, "Voice Privacy Request", 82 },
546 { 0x15, "MS Information Records (Reverse)", 83 },
547 { 0x2C, "Burst DTMF Transmission Information", 84 }, /* duplicate but never used because this elem is always MANDATORY in DTAP */
548 { 0x2D, "DTMF Characters", 85 }, /* duplicate but never used because this elem is always MANDATORY in DTAP */
549 { 0x45, "A2p Bearer Session-Level Parameters", 86 },
550 { 0x46, "A2p Bearer Format-Specific Parameters", 87 },
551 { 0x73, "MS Designated Frequency", 88 },
552 { 0x7D, "Mobile Subscription Information", 89 },
553 { 0x72, "Public Long Code Mask Identification", 90 },
554 { 0, NULL, 0 }
558 * From Table 3.7.5-1 C.S0005-D v1.0 L3
560 #define ANSI_FWD_MS_INFO_REC_DISPLAY 0x01
561 #define ANSI_FWD_MS_INFO_REC_CLD_PN 0x02
562 #define ANSI_FWD_MS_INFO_REC_CLG_PN 0x03
563 #define ANSI_FWD_MS_INFO_REC_CONN_N 0x04
564 #define ANSI_FWD_MS_INFO_REC_SIGNAL 0x05
565 #define ANSI_FWD_MS_INFO_REC_MW 0x06
566 #define ANSI_FWD_MS_INFO_REC_SC 0x07
567 #define ANSI_FWD_MS_INFO_REC_CLD_PSA 0x08
568 #define ANSI_FWD_MS_INFO_REC_CLG_PSA 0x09
569 #define ANSI_FWD_MS_INFO_REC_CONN_SA 0x0a
570 #define ANSI_FWD_MS_INFO_REC_RED_N 0x0b
571 #define ANSI_FWD_MS_INFO_REC_RED_SA 0x0c
572 #define ANSI_FWD_MS_INFO_REC_MP 0x0d
573 #define ANSI_FWD_MS_INFO_REC_PA 0x0e
574 #define ANSI_FWD_MS_INFO_REC_LC 0x0f
575 #define ANSI_FWD_MS_INFO_REC_EDISPLAY 0x10
576 #define ANSI_FWD_MS_INFO_REC_NNSC 0x13
577 #define ANSI_FWD_MS_INFO_REC_MC_EDISPLAY 0x14
578 #define ANSI_FWD_MS_INFO_REC_CWI 0x15
579 #define ANSI_FWD_MS_INFO_REC_EMC_EDISPLAY 0x16
580 #define ANSI_FWD_MS_INFO_REC_ERTI 0xfe
582 static const value_string ansi_fwd_ms_info_rec_str[] =
584 { ANSI_FWD_MS_INFO_REC_DISPLAY, "Display" },
585 { ANSI_FWD_MS_INFO_REC_CLD_PN, "Called Party Number" },
586 { ANSI_FWD_MS_INFO_REC_CLG_PN, "Calling Party Number" },
587 { ANSI_FWD_MS_INFO_REC_CONN_N, "Connected Number" },
588 { ANSI_FWD_MS_INFO_REC_SIGNAL, "Signal" },
589 { ANSI_FWD_MS_INFO_REC_MW, "Message Waiting" },
590 { ANSI_FWD_MS_INFO_REC_SC, "Service Configuration" },
591 { ANSI_FWD_MS_INFO_REC_CLD_PSA, "Called Party Subaddress" },
592 { ANSI_FWD_MS_INFO_REC_CLG_PSA, "Calling Party Subaddress" },
593 { ANSI_FWD_MS_INFO_REC_CONN_SA, "Connected Subaddress" },
594 { ANSI_FWD_MS_INFO_REC_RED_N, "Redirecting Number" },
595 { ANSI_FWD_MS_INFO_REC_RED_SA, "Redirecting Subaddress" },
596 { ANSI_FWD_MS_INFO_REC_MP, "Meter Pulses" },
597 { ANSI_FWD_MS_INFO_REC_PA, "Parametric Alerting" },
598 { ANSI_FWD_MS_INFO_REC_LC, "Line Control" },
599 { ANSI_FWD_MS_INFO_REC_EDISPLAY, "Extended Display" },
600 { ANSI_FWD_MS_INFO_REC_NNSC, "Non-Negotiable Service Configuration" },
601 { ANSI_FWD_MS_INFO_REC_MC_EDISPLAY, "Multiple Character Extended Display" },
602 { ANSI_FWD_MS_INFO_REC_CWI, "Call Waiting Indicator" },
603 { ANSI_FWD_MS_INFO_REC_EMC_EDISPLAY, "Enhanced Multiple Character Extended Display" },
604 { ANSI_FWD_MS_INFO_REC_ERTI, "Extended Record Type International" },
605 { 0, NULL }
607 #define NUM_FWD_MS_INFO_REC array_length(ansi_fwd_ms_info_rec_str)
608 static int ett_ansi_fwd_ms_info_rec[NUM_FWD_MS_INFO_REC];
611 * From Table 2.7.4-1 C.S0005-D v1.0 L3
613 #define ANSI_REV_MS_INFO_REC_KEYPAD_FAC 0x03
614 #define ANSI_REV_MS_INFO_REC_CLD_PN 0x04
615 #define ANSI_REV_MS_INFO_REC_CLG_PN 0x05
616 #define ANSI_REV_MS_INFO_REC_CALL_MODE 0x07
617 #define ANSI_REV_MS_INFO_REC_TERM_INFO 0x08
618 #define ANSI_REV_MS_INFO_REC_ROAM_INFO 0x09
619 #define ANSI_REV_MS_INFO_REC_SECUR_STS 0x0a
620 #define ANSI_REV_MS_INFO_REC_CONN_N 0x0b
621 #define ANSI_REV_MS_INFO_REC_IMSI 0x0c
622 #define ANSI_REV_MS_INFO_REC_ESN 0x0d
623 #define ANSI_REV_MS_INFO_REC_BAND_INFO 0x0e
624 #define ANSI_REV_MS_INFO_REC_POWER_INFO 0x0f
625 #define ANSI_REV_MS_INFO_REC_OP_MODE_INFO 0x10
626 #define ANSI_REV_MS_INFO_REC_SO_INFO 0x11
627 #define ANSI_REV_MS_INFO_REC_MO_INFO 0x12
628 #define ANSI_REV_MS_INFO_REC_SC_INFO 0x13
629 #define ANSI_REV_MS_INFO_REC_CLD_PSA 0x14
630 #define ANSI_REV_MS_INFO_REC_CLG_PSA 0x15
631 #define ANSI_REV_MS_INFO_REC_CONN_SA 0x16
632 #define ANSI_REV_MS_INFO_REC_PCI 0x17
633 #define ANSI_REV_MS_INFO_REC_IMSI_M 0x18
634 #define ANSI_REV_MS_INFO_REC_IMSI_T 0x19
635 #define ANSI_REV_MS_INFO_REC_CAP_INFO 0x1a
636 #define ANSI_REV_MS_INFO_REC_CCC_INFO 0x1b
637 #define ANSI_REV_MS_INFO_REC_EMO_INFO 0x1c
638 #define ANSI_REV_MS_INFO_REC_GEO_CAP 0x1e
639 #define ANSI_REV_MS_INFO_REC_BAND_SUB 0x1f
640 #define ANSI_REV_MS_INFO_REC_GECO 0x20
641 #define ANSI_REV_MS_INFO_REC_HOOK 0x21
642 #define ANSI_REV_MS_INFO_REC_QOS_PARAM 0x22
643 #define ANSI_REV_MS_INFO_REC_ENCRYPT_CAP 0x23
644 #define ANSI_REV_MS_INFO_REC_SMI_CAP 0x24
645 #define ANSI_REV_MS_INFO_REC_UIM_ID 0x25
646 #define ANSI_REV_MS_INFO_REC_ESN_ME 0x26
647 #define ANSI_REV_MS_INFO_REC_MEID 0x27
648 #define ANSI_REV_MS_INFO_REC_EKEYPAD_FAC 0x28
649 #define ANSI_REV_MS_INFO_REC_SYNC_ID 0x29
650 #define ANSI_REV_MS_INFO_REC_ERTI 0xfe
652 static const value_string ansi_rev_ms_info_rec_str[] =
654 { ANSI_REV_MS_INFO_REC_KEYPAD_FAC, "Keypad Facility" },
655 { ANSI_REV_MS_INFO_REC_CLD_PN, "Called Party Number" },
656 { ANSI_REV_MS_INFO_REC_CLG_PN, "Calling Party Number" },
657 { ANSI_REV_MS_INFO_REC_CALL_MODE, "Call Mode" },
658 { ANSI_REV_MS_INFO_REC_TERM_INFO, "Terminal Information" },
659 { ANSI_REV_MS_INFO_REC_ROAM_INFO, "Roaming Information" },
660 { ANSI_REV_MS_INFO_REC_SECUR_STS, "Security Status" },
661 { ANSI_REV_MS_INFO_REC_CONN_N, "Connected Number" },
662 { ANSI_REV_MS_INFO_REC_IMSI, "IMSI" },
663 { ANSI_REV_MS_INFO_REC_ESN, "ESN" },
664 { ANSI_REV_MS_INFO_REC_BAND_INFO, "Band Class Information" },
665 { ANSI_REV_MS_INFO_REC_POWER_INFO, "Power Class Information" },
666 { ANSI_REV_MS_INFO_REC_OP_MODE_INFO, "Operating Mode Information" },
667 { ANSI_REV_MS_INFO_REC_SO_INFO, "Service Option Information" },
668 { ANSI_REV_MS_INFO_REC_MO_INFO, "Multiplex Option Information" },
669 { ANSI_REV_MS_INFO_REC_SC_INFO, "Service Configuration Information" },
670 { ANSI_REV_MS_INFO_REC_CLD_PSA, "Called Party Subaddress" },
671 { ANSI_REV_MS_INFO_REC_CLG_PSA, "Calling Party Subaddress" },
672 { ANSI_REV_MS_INFO_REC_CONN_SA, "Connected Subaddress" },
673 { ANSI_REV_MS_INFO_REC_PCI, "Power Control Information" },
674 { ANSI_REV_MS_INFO_REC_IMSI_M, "IMSI_M" },
675 { ANSI_REV_MS_INFO_REC_IMSI_T, "IMSI_T" },
676 { ANSI_REV_MS_INFO_REC_CAP_INFO, "Capability Information" },
677 { ANSI_REV_MS_INFO_REC_CCC_INFO, "Channel Configuration Capability Information" },
678 { ANSI_REV_MS_INFO_REC_EMO_INFO, "Extended Multiplex Option Information" },
679 { ANSI_REV_MS_INFO_REC_GEO_CAP, "Geo-Location Capability" },
680 { ANSI_REV_MS_INFO_REC_BAND_SUB, "Band Subclass Information" },
681 { ANSI_REV_MS_INFO_REC_GECO, "Global Emergency Call" },
682 { ANSI_REV_MS_INFO_REC_HOOK, "Hook Status" },
683 { ANSI_REV_MS_INFO_REC_QOS_PARAM, "QoS Parameters" },
684 { ANSI_REV_MS_INFO_REC_ENCRYPT_CAP, "Encryption Capability" },
685 { ANSI_REV_MS_INFO_REC_SMI_CAP, "Signaling Message Integrity Capability" },
686 { ANSI_REV_MS_INFO_REC_UIM_ID, "UIM_ID" },
687 { ANSI_REV_MS_INFO_REC_ESN_ME, "ESN_ME" },
688 { ANSI_REV_MS_INFO_REC_MEID, "MEID" },
689 { ANSI_REV_MS_INFO_REC_EKEYPAD_FAC, "Extended Keypad Facility" },
690 { ANSI_REV_MS_INFO_REC_SYNC_ID, "SYNC_ID" },
691 { ANSI_REV_MS_INFO_REC_ERTI, "Extended Record Type International" },
692 { 0, NULL }
694 #define NUM_REV_MS_INFO_REC array_length(ansi_rev_ms_info_rec_str)
695 static int ett_ansi_rev_ms_info_rec[NUM_REV_MS_INFO_REC];
698 * C.S0057 Table 1.5-1
700 static const value_string ansi_a_band_class_vals[] = {
701 { 0x00, "800 MHz Cellular System" },
702 { 0x01, "1.850 to 1.990 GHz Broadband PCS" },
703 { 0x02, "872 to 960 MHz TACS Band" },
704 { 0x03, "832 to 925 MHz JTACS Band" },
705 { 0x04, "1.750 to 1.870 GHz Korean PCS" },
706 { 0x05, "450 MHz NMT" },
707 { 0x06, "2 GHz IMT-2000" },
708 { 0x07, "Upper 700 MHz" },
709 { 0x08, "1.710 to 1.880 GHz PCS" },
710 { 0x09, "880 to 960 MHz" },
711 { 0x0a, "Secondary 800 MHz" },
712 { 0x0b, "400 MHz European PAMR" },
713 { 0x0c, "800 MHz European PAMR" },
714 { 0x0d, "2.5 GHz IMT-2000 Extension" },
715 { 0x0e, "US PCS 1.9 GHz" },
716 { 0x0f, "AWS" },
717 { 0x10, "US 2.5 GHz" },
718 { 0x11, "US 2.5 GHz Forward Link Only" },
719 { 0x12, "700 MHz Public Safety" },
720 { 0x13, "Lower 700 MHz" },
721 { 0, NULL }
724 static const value_string ansi_a_ip_addr_type_vals[] = {
725 { 0x00, "IPv4" },
726 { 0x01, "IPv6" },
727 { 0x02, "Reserved" },
728 { 0x03, "Reserved" },
729 { 0, NULL }
733 * C.S0005-E v2.0 Table 2.6.6.2.1-1
735 static const value_string ansi_a_srch_win_sizes_vals[] = {
736 { 0x00, "4 PN chips" },
737 { 0x01, "6 PN chips" },
738 { 0x02, "8 PN chips" },
739 { 0x03, "10 PN chips" },
740 { 0x04, "14 PN chips" },
741 { 0x05, "20 PN chips" },
742 { 0x06, "28 PN chips" },
743 { 0x07, "40 PN chips" },
744 { 0x08, "60 PN chips" },
745 { 0x09, "80 PN chips" },
746 { 0x0a, "100 PN chips" },
747 { 0x0b, "130 PN chips" },
748 { 0x0c, "160 PN chips" },
749 { 0x0d, "226 PN chips" },
750 { 0x0e, "320 PN chips" },
751 { 0x0f, "452 PN chips" },
752 { 0, NULL }
756 * C.S0005-E v2.0 Table 2.6.6.2.3-1
758 static const value_string ansi_a_t_tdrop_vals[] = {
759 { 0x00, "100 milliseconds" },
760 { 0x01, "1 second" },
761 { 0x02, "2 seconds" },
762 { 0x03, "4 seconds" },
763 { 0x04, "6 seconds" },
764 { 0x05, "9 seconds" },
765 { 0x06, "13 seconds" },
766 { 0x07, "19 seconds" },
767 { 0x08, "27 seconds" },
768 { 0x09, "39 seconds" },
769 { 0x0a, "55 seconds" },
770 { 0x0b, "79 seconds" },
771 { 0x0c, "112 seconds" },
772 { 0x0d, "159 seconds" },
773 { 0x0e, "225 seconds" },
774 { 0x0f, "319 seconds" },
775 { 0, NULL }
778 static const value_string cell_disc_vals[] = {
779 { 0, "whole Cell Global Identification (CGI)" },
780 { 1, "LAC/CI" },
781 { 2, "Cell Identity (CI)" },
782 { 3, "None" },
783 { 4, "Location Area Identification (LAI)" },
784 { 5, "Location Area Code (LAC)" },
785 { 6, "ALL" },
786 { 7, "IS-41 whole Cell Global Identification (ICGI)" },
787 { 8, "Enhanced whole Cell Global Identification (ECGI)" },
788 { 0, NULL }
792 * Not strictly A-interface info, but put here to avoid file pollution
794 * Title 3GPP2 Other
796 * Administration of Parameter Value Assignments for
797 * cdma2000 Spread Spectrum Standards
798 * 3GPP2 C.R1001-H v1.0 TSB-58-I (or J?)
802 * 9.1 Data Field Encoding Assignments
804 const value_string ansi_tsb58_encoding_vals[] = {
805 { 0x0000, "Octet, unspecified" },
806 { 0x0001, "Extended Protocol Message" },
807 { 0x0002, "7-bit ASCII" },
808 { 0x0003, "IA5" },
809 { 0x0004, "UNICODE" },
810 { 0x0005, "Shift-JIS" },
811 { 0x0006, "Korean" },
812 { 0x0007, "Latin/Hebrew" },
813 { 0x0008, "Latin" },
814 { 0x0009, "GSM 7-bit default alphabet" },
815 { 0x0010, "KSC5601 (Korean)" },
816 { 0, NULL }
820 * 9.2 Language Indicator Value Assignments
822 const value_string ansi_tsb58_language_ind_vals[] = {
823 { 0x0000, "Unknown or unspecified" },
824 { 0x0001, "English" },
825 { 0x0002, "French" },
826 { 0x0003, "Spanish" },
827 { 0x0004, "Japanese" },
828 { 0x0005, "Korean" },
829 { 0x0006, "Chinese" },
830 { 0x0007, "Hebrew" },
831 { 0x0008, "Portuguese" },
832 { 0x0009, "Hindi" },
833 { 0x000a, "Turkish" },
834 { 0x000b, "Hungarian" },
835 { 0x000c, "Polish" },
836 { 0x000d, "Czech" },
837 { 0x000e, "Arabic" },
838 { 0x000f, "Russian" },
839 { 0x0010, "Icelandic" },
840 { 0x0011, "German" },
841 { 0x0012, "Italian" },
842 { 0x0013, "Dutch" },
843 { 0x0014, "Swedish" },
844 { 0x0015, "Danish" },
845 { 0x0016, "Unassigned"}, /* N.B. no entry spec, but include to allow direct lookup */
846 { 0x0017, "Finnish" },
847 { 0x0018, "Norwegian" },
848 { 0x0019, "Greek" },
849 { 0x001a, "Bengali" },
850 { 0x001b, "Gujarati" },
851 { 0x001c, "Kannada" },
852 { 0x001d, "Malayalam" },
853 { 0x001e, "Oriya" },
854 { 0x001f, "Punjabi" },
855 { 0x0020, "Tamil" },
856 { 0x0021, "Telugu" },
857 { 0x0022, "Urdu" },
858 { 0x0023, "Bahasa" },
859 { 0x0024, "Thai" },
860 { 0x0025, "Tagalog" },
861 { 0x0026, "Swahili" },
862 { 0x0027, "Afrikaans" },
863 { 0x0028, "Hausa" },
864 { 0x0029, "Vietnamese" },
865 { 0, NULL }
868 value_string_ext ansi_tsb58_language_ind_vals_ext = VALUE_STRING_EXT_INIT(ansi_tsb58_language_ind_vals);
870 /* NOTE: Table 160 of 3GPP2 N.S0005 may specify different values */
873 * 9.3 Service Category Assignments
875 const value_string ansi_tsb58_srvc_cat_vals[] = {
876 { 0x0000, "Unknown or unspecified" },
877 { 0x0001, "Emergency Broadcasts" },
878 { 0x0002, "Administrative" },
879 { 0x0003, "Maintenance" },
880 { 0x0004, "General News - Local" },
881 { 0x0005, "General News - Regional" },
882 { 0x0006, "General News - National" },
883 { 0x0007, "General News - International" },
884 { 0x0008, "Business/Financial News - Local" },
885 { 0x0009, "Business/Financial News - Regional" },
886 { 0x000A, "Business/Financial News - National" },
887 { 0x000B, "Business/Financial News - International" },
888 { 0x000C, "Sports News - Local" },
889 { 0x000D, "Sports News - Regional" },
890 { 0x000E, "Sports News - National" },
891 { 0x000F, "Sports News - International" },
892 { 0x0010, "Entertainment News - Local" },
893 { 0x0011, "Entertainment News - Regional" },
894 { 0x0012, "Entertainment News - National" },
895 { 0x0013, "Entertainment News - International" },
896 { 0x0014, "Local Weather" },
897 { 0x0015, "Area Traffic Reports" },
898 { 0x0016, "Local Airport Flight Schedules" },
899 { 0x0017, "Restaurants" },
900 { 0x0018, "Lodgings" },
901 { 0x0019, "Retail Directory" },
902 { 0x001A, "Advertisements" },
903 { 0x001B, "Stock Quotes" },
904 { 0x001C, "Employment Opportunities" },
905 { 0x001D, "Medical/Health/Hospitals" },
906 { 0x001E, "Technology News" },
907 { 0x001F, "Multi-category" },
908 { 0x0020, "Card Application Toolkit Protocol Teleservice (CATPT)" },
909 { 0x1000, "Presidential-Level Alert" },
910 { 0x1001, "Extreme Threat to Life and Property" },
911 { 0x1002, "Severe Threat to Life and Property" },
912 { 0x1003, "AMBER (Child Abduction Emergency)" },
913 { 0x1004, "CMAS Test Message" },
914 { 0, NULL }
917 value_string_ext ansi_tsb58_srvc_cat_vals_ext = VALUE_STRING_EXT_INIT(ansi_tsb58_srvc_cat_vals);
920 * END Not strictly A-interface info
924 /* Initialize the protocol and registered fields */
925 static int proto_a_bsmap;
926 static int proto_a_dtap;
928 const ext_value_string_t *ansi_a_bsmap_strings;
929 const ext_value_string_t *ansi_a_dtap_strings;
930 const ext_value_string_t *ansi_a_elem_1_strings;
932 static int ansi_a_tap;
934 static int hf_ansi_a_bsmap_msgtype;
935 static int hf_ansi_a_dtap_msgtype;
936 static int hf_ansi_a_protocol_disc;
937 static int hf_ansi_a_reserved_octet;
938 static int hf_ansi_a_ti_flag;
939 static int hf_ansi_a_ti_ti;
940 static int hf_ansi_a_cm_svrc_type;
941 static int hf_ansi_a_elem_id;
942 static int hf_ansi_a_elem_id_f0;
943 static int hf_ansi_a_length;
944 static int hf_ansi_a_esn;
945 static int hf_ansi_a_imsi;
946 static int hf_ansi_a_meid;
947 static int hf_ansi_a_cld_party_bcd_num;
948 static int hf_ansi_a_cld_party_ascii_num;
949 static int hf_ansi_a_clg_party_ascii_num;
950 static int hf_ansi_a_cell_ci;
951 static int hf_ansi_a_cell_lac;
952 static int hf_ansi_a_cell_mscid;
953 static int hf_ansi_a_pdsn_ip_addr;
954 static int hf_ansi_a_s_pdsn_ip_addr;
955 static int hf_ansi_a_anchor_ip_addr;
956 static int hf_ansi_a_anchor_pp_ip_addr;
957 static int hf_ansi_a_so;
958 static int hf_ansi_a_cause_1; /* 1 octet cause */
959 static int hf_ansi_a_cause_2; /* 2 octet cause */
960 static int hf_ansi_a_ms_info_rec_signal_type;
961 static int hf_ansi_a_ms_info_rec_signal_alert_pitch;
962 static int hf_ansi_a_ms_info_rec_signal_tone;
963 static int hf_ansi_a_ms_info_rec_signal_isdn_alert;
964 static int hf_ansi_a_ms_info_rec_signal_is54b_alert;
965 static int hf_ansi_a_ms_info_rec_call_waiting_ind;
966 static int hf_ansi_a_extension_8_80;
967 static int hf_ansi_a_reserved_bits_8_generic;
968 static int hf_ansi_a_reserved_bits_8_01;
969 static int hf_ansi_a_reserved_bits_8_07;
970 static int hf_ansi_a_reserved_bits_8_0c;
971 static int hf_ansi_a_reserved_bits_8_0f;
972 static int hf_ansi_a_reserved_bits_8_10;
973 static int hf_ansi_a_reserved_bits_8_18;
974 static int hf_ansi_a_reserved_bits_8_1c;
975 static int hf_ansi_a_reserved_bits_8_1f;
976 static int hf_ansi_a_reserved_bits_8_3f;
977 static int hf_ansi_a_reserved_bits_8_7f;
978 static int hf_ansi_a_reserved_bits_8_80;
979 static int hf_ansi_a_reserved_bits_8_c0;
980 static int hf_ansi_a_reserved_bits_8_e0;
981 static int hf_ansi_a_reserved_bits_8_f0;
982 static int hf_ansi_a_reserved_bits_8_f8;
983 static int hf_ansi_a_reserved_bits_8_fc;
984 static int hf_ansi_a_reserved_bits_8_fe;
985 static int hf_ansi_a_reserved_bits_8_ff;
986 static int hf_ansi_a_reserved_bits_16_001f;
987 static int hf_ansi_a_reserved_bits_16_003f;
988 static int hf_ansi_a_reserved_bits_16_8000;
989 static int hf_ansi_a_reserved_bits_16_f800;
990 static int hf_ansi_a_reserved_bits_24_001800;
991 static int hf_ansi_a_reserved_bits_24_006000;
992 static int hf_ansi_a_reserved_bits_24_007000;
993 static int hf_ansi_a_speech_or_data_indicator;
994 static int hf_ansi_a_channel_number;
995 static int hf_ansi_a_IOS5_channel_number;
996 static int hf_ansi_a_chan_rate_and_type;
997 static int hf_ansi_a_speech_enc_or_data_rate;
998 static int hf_ansi_a_chan_type_data_ext;
999 static int hf_ansi_a_chan_type_data_transparent;
1000 static int hf_ansi_a_return_cause;
1001 static int hf_ansi_a_rf_chan_id_color_code;
1002 static int hf_ansi_a_rf_chan_id_n_amps_based;
1003 static int hf_ansi_a_rf_chan_id_amps_based;
1004 static int hf_ansi_a_rf_chan_id_timeslot;
1005 static int hf_ansi_a_rf_chan_id_channel_number;
1006 static int hf_ansi_a_sr_id;
1007 static int hf_ansi_a_sid;
1008 static int hf_ansi_a_is95_chan_id_hho;
1009 static int hf_ansi_a_is95_chan_id_num_chans_add;
1010 static int hf_ansi_a_is95_chan_id_frame_offset;
1011 static int hf_ansi_a_is95_chan_id_walsh_code_chan_idx;
1012 static int hf_ansi_a_is95_chan_id_pilot_pn;
1013 static int hf_ansi_a_is95_chan_id_power_combined;
1014 static int hf_ansi_a_is95_chan_id_freq_incl;
1015 static int hf_ansi_a_is95_chan_id_channel_number;
1016 static int hf_ansi_a_enc_info_enc_parm_id;
1017 static int hf_ansi_a_enc_info_status;
1018 static int hf_ansi_a_enc_info_available;
1019 static int hf_ansi_a_cm2_mob_p_rev;
1020 static int hf_ansi_a_cm2_see_list;
1021 static int hf_ansi_a_cm2_rf_power_cap;
1022 static int hf_ansi_a_cm2_nar_an_cap;
1023 static int hf_ansi_a_cm2_is95;
1024 static int hf_ansi_a_cm2_slotted;
1025 static int hf_ansi_a_cm2_dtx;
1026 static int hf_ansi_a_cm2_mobile_term;
1027 static int hf_ansi_a_cm2_analog_cap;
1028 static int hf_ansi_a_cm2_psi;
1029 static int hf_ansi_a_cm2_scm_len;
1030 static int hf_ansi_a_cm2_scm;
1031 static int hf_ansi_a_cm2_scm_ext_scm_ind;
1032 static int hf_ansi_a_cm2_scm_dual_mode;
1033 static int hf_ansi_a_cm2_scm_slotted;
1034 static int hf_ansi_a_cm2_scm_meid_configured;
1035 static int hf_ansi_a_cm2_scm_25MHz_bandwidth;
1036 static int hf_ansi_a_cm2_scm_transmission;
1037 static int hf_ansi_a_cm2_scm_power_class;
1038 static int hf_ansi_a_cm2_scm_band_class_count;
1039 static int hf_ansi_a_cm2_scm_band_class_entry_len;
1040 static int hf_ansi_a_scm_band_class_entry_band_class;
1041 static int hf_ansi_a_scm_band_class_entry_opmode0_1;
1042 static int hf_ansi_a_scm_band_class_entry_opmode1_1;
1043 static int hf_ansi_a_scm_band_class_entry_opmode2_1;
1044 static int hf_ansi_a_scm_band_class_entry_opmode3_1;
1045 static int hf_ansi_a_scm_band_class_entry_opmode4_1;
1046 static int hf_ansi_a_scm_band_class_entry_opmode0_2;
1047 static int hf_ansi_a_scm_band_class_entry_opmode1_2;
1048 static int hf_ansi_a_scm_band_class_entry_opmode2_2;
1049 static int hf_ansi_a_scm_band_class_entry_opmode3_2;
1050 static int hf_ansi_a_scm_band_class_entry_opmode4_2;
1051 static int hf_ansi_a_scm_band_class_entry_opmode5_2;
1052 static int hf_ansi_a_scm_band_class_entry_opmode6_2;
1053 static int hf_ansi_a_scm_band_class_entry_p_rev;
1054 static int hf_ansi_a_meid_mid_digit_1;
1055 static int hf_ansi_a_imsi_mid_digit_1;
1056 static int hf_ansi_a_mid_odd_even_ind;
1057 static int hf_ansi_a_mid_type_of_id;
1058 static int hf_ansi_a_mid_broadcast_priority;
1059 static int hf_ansi_a_mid_broadcast_message_id;
1060 static int hf_ansi_a_mid_broadcast_zone_id;
1061 static int hf_ansi_a_mid_broadcast_srvc_cat;
1062 static int hf_ansi_a_mid_broadcast_language;
1063 static int hf_ansi_a_mid_unused;
1064 static int hf_ansi_a_sci_sign;
1065 static int hf_ansi_a_sci;
1066 static int hf_ansi_a_prio_call_priority;
1067 static int hf_ansi_a_prio_queue_allowed;
1068 static int hf_ansi_a_prio_preempt_allowed;
1069 static int hf_ansi_a_mob_p_rev;
1070 static int hf_ansi_a_cause_1_ext;
1071 static int hf_ansi_a_cause_2_ext;
1072 static int hf_ansi_a_cell_id_disc;
1073 static int hf_ansi_a_cic;
1074 static int hf_ansi_a_cic_pcm_multi;
1075 static int hf_ansi_a_cic_timeslot;
1076 static int hf_ansi_a_cic_ext_cic;
1077 static int hf_ansi_a_cic_ext_pcm_multi;
1078 static int hf_ansi_a_cic_ext_timeslot;
1079 static int hf_ansi_a_cic_ext_circuit_mode;
1080 static int hf_ansi_a_ssci_mopd;
1081 static int hf_ansi_a_ssci_geci;
1082 static int hf_ansi_a_downlink_re_num_cells;
1083 static int hf_ansi_a_downlink_re_sig_str_raw;
1084 static int hf_ansi_a_downlink_re_cdma_towd;
1085 static int hf_ansi_a_downlink_re_entry_env_len;
1086 static int hf_ansi_a_ho_pow_lev_num_cells;
1087 static int hf_ansi_a_ho_pow_lev_id_type;
1088 static int hf_ansi_a_ho_pow_lev_pow_lev;
1089 static int hf_ansi_a_uz_id;
1090 static int hf_ansi_a_info_rec_req;
1091 static int hf_ansi_a_is2000_chan_id_otd;
1092 static int hf_ansi_a_is2000_chan_id_chan_count;
1093 static int hf_ansi_a_is2000_chan_id_frame_offset;
1094 static int hf_ansi_a_is2000_chan_id_chan_chan_type;
1095 static int hf_ansi_a_is2000_chan_id_chan_rev_fch_gating;
1096 static int hf_ansi_a_is2000_chan_id_chan_rev_pilot_gating_rate;
1097 static int hf_ansi_a_is2000_chan_id_chan_qof_mask;
1098 static int hf_ansi_a_is2000_chan_id_chan_walsh_code_chan_idx;
1099 static int hf_ansi_a_is2000_chan_id_chan_pilot_pn_code;
1100 static int hf_ansi_a_is2000_chan_id_chan_power_combined;
1101 static int hf_ansi_a_is2000_chan_id_chan_freq_incl;
1102 static int hf_ansi_a_is2000_chan_id_chan_channel_number;
1103 static int hf_ansi_a_is2000_chan_id_chan_fdc_length;
1104 static int hf_ansi_a_is2000_chan_id_chan_fdc_band_class;
1105 static int hf_ansi_a_is2000_chan_id_chan_fdc_fwd_chan_freq;
1106 static int hf_ansi_a_is2000_chan_id_chan_fdc_rev_chan_freq;
1107 static int hf_ansi_a_is95_ms_meas_chan_id_band_class;
1108 static int hf_ansi_a_is95_ms_meas_chan_id_channel_number;
1109 static int hf_ansi_a_clg_party_ascii_num_ton;
1110 static int hf_ansi_a_clg_party_ascii_num_plan;
1111 static int hf_ansi_a_clg_party_ascii_num_pi;
1112 static int hf_ansi_a_clg_party_ascii_num_si;
1113 static int hf_ansi_a_lai_mcc;
1114 static int hf_ansi_a_lai_mnc;
1115 static int hf_ansi_a_lai_lac;
1116 static int hf_ansi_a_rej_cause;
1117 static int hf_ansi_a_auth_chlg_param_rand_num_type;
1118 static int hf_ansi_a_auth_chlg_param_rand;
1119 static int hf_ansi_a_auth_resp_param_sig_type;
1120 static int hf_ansi_a_auth_resp_param_sig;
1121 static int hf_ansi_a_auth_param_count_count;
1122 static int hf_ansi_a_mwi_num_messages;
1123 static int hf_ansi_a_signal_signal_value;
1124 static int hf_ansi_a_signal_alert_pitch;
1125 static int hf_ansi_a_clg_party_bcd_num_ton;
1126 static int hf_ansi_a_clg_party_bcd_num_plan;
1127 static int hf_ansi_a_qos_params_packet_priority;
1128 static int hf_ansi_a_cause_l3_coding_standard;
1129 static int hf_ansi_a_cause_l3_location;
1130 static int hf_ansi_a_cause_l3_class;
1131 static int hf_ansi_a_cause_l3_value_without_class;
1132 static int hf_ansi_a_cause_l3_value;
1133 static int hf_ansi_a_auth_conf_param_randc;
1134 static int hf_ansi_a_xmode_tfo_mode;
1135 static int hf_ansi_a_reg_type_type;
1136 static int hf_ansi_a_tag_value;
1137 static int hf_ansi_a_hho_params_band_class;
1138 static int hf_ansi_a_hho_params_num_pream_frames;
1139 static int hf_ansi_a_hho_params_reset_l2;
1140 static int hf_ansi_a_hho_params_reset_fpc;
1141 static int hf_ansi_a_hho_params_enc_mode;
1142 static int hf_ansi_a_hho_params_private_lcm;
1143 static int hf_ansi_a_hho_params_rev_pwr_cntl_delay_incl;
1144 static int hf_ansi_a_hho_params_rev_pwr_cntl_delay;
1145 static int hf_ansi_a_hho_params_nom_pwr_ext;
1146 static int hf_ansi_a_hho_params_nom_pwr;
1147 static int hf_ansi_a_hho_params_fpc_subchan_info;
1148 static int hf_ansi_a_hho_params_fpc_subchan_info_incl;
1149 static int hf_ansi_a_hho_params_pwr_cntl_step;
1150 static int hf_ansi_a_hho_params_pwr_cntl_step_incl;
1151 static int hf_ansi_a_sw_ver_major;
1152 static int hf_ansi_a_sw_ver_minor;
1153 static int hf_ansi_a_sw_ver_point;
1154 static int hf_ansi_a_so_proprietary_ind;
1155 static int hf_ansi_a_so_revision;
1156 static int hf_ansi_a_so_base_so_num;
1157 static int hf_ansi_a_soci;
1158 static int hf_ansi_a_so_list_num;
1159 static int hf_ansi_a_so_list_sr_id;
1160 static int hf_ansi_a_so_list_soci;
1161 static int hf_ansi_a_nid;
1162 static int hf_ansi_a_pzid;
1163 static int hf_ansi_a_adds_user_part_burst_type;
1164 static int hf_ansi_a_adds_user_part_ext_burst_type;
1165 static int hf_ansi_a_adds_user_part_ext_data;
1166 static int hf_ansi_a_adds_user_part_unknown_data;
1167 static int hf_ansi_a_amps_hho_params_enc_mode;
1168 static int hf_ansi_a_is2000_scr_num_fill_bits;
1169 static int hf_ansi_a_is2000_scr_for_mux_option;
1170 static int hf_ansi_a_is2000_scr_rev_mux_option;
1171 static int hf_ansi_a_is2000_scr_for_fch_rate;
1172 static int hf_ansi_a_is2000_scr_rev_fch_rate;
1173 static int hf_ansi_a_is2000_scr_num_socr;
1174 static int hf_ansi_a_is2000_scr_socr_soc_ref;
1175 static int hf_ansi_a_is2000_scr_socr_so;
1176 static int hf_ansi_a_is2000_scr_socr_for_chan_type;
1177 static int hf_ansi_a_is2000_scr_socr_rev_chan_type;
1178 static int hf_ansi_a_is2000_scr_socr_ui_enc_mode;
1179 static int hf_ansi_a_is2000_scr_socr_sr_id;
1180 static int hf_ansi_a_is2000_scr_socr_rlp_info_incl;
1181 static int hf_ansi_a_is2000_scr_socr_rlp_blob_len;
1182 static int hf_ansi_a_is2000_scr_socr_rlp_blob_msb;
1183 static int hf_ansi_a_is2000_scr_socr_rlp_blob;
1184 static int hf_ansi_a_is2000_scr_socr_rlp_blob_lsb;
1185 static int hf_ansi_a_is2000_scr_socr_fch_cc_incl;
1186 static int hf_ansi_a_is2000_scr_socr_fch_frame_size_support_ind;
1187 static int hf_ansi_a_is2000_scr_socr_for_fch_rc;
1188 static int hf_ansi_a_is2000_scr_socr_rev_fch_rc;
1189 static int hf_ansi_a_is2000_nn_scr_num_fill_bits;
1190 static int hf_ansi_a_is2000_nn_scr_content;
1191 static int hf_ansi_a_is2000_nn_scr_fill_bits;
1192 static int hf_ansi_a_is2000_mob_cap_rev_pdch_support_ind;
1193 static int hf_ansi_a_is2000_mob_cap_for_pdch_support_ind;
1194 static int hf_ansi_a_is2000_mob_cap_eram_support_ind;
1195 static int hf_ansi_a_is2000_mob_cap_dcch_support_ind;
1196 static int hf_ansi_a_is2000_mob_cap_fch_support_ind;
1197 static int hf_ansi_a_is2000_mob_cap_otd_support_ind;
1198 static int hf_ansi_a_is2000_mob_cap_enh_rc_cfg_support_ind;
1199 static int hf_ansi_a_is2000_mob_cap_qpch_support_ind;
1200 static int hf_ansi_a_is2000_mob_cap_fch_info_octet_len;
1201 static int hf_ansi_a_is2000_mob_cap_fch_info_geo_loc_type;
1202 static int hf_ansi_a_is2000_mob_cap_fch_info_geo_loc_incl;
1203 static int hf_ansi_a_is2000_mob_cap_fch_info_num_fill_bits;
1204 static int hf_ansi_a_is2000_mob_cap_fch_info_content;
1205 static int hf_ansi_a_is2000_mob_cap_fch_info_fill_bits;
1206 static int hf_ansi_a_is2000_mob_cap_dcch_info_octet_len;
1207 static int hf_ansi_a_is2000_mob_cap_dcch_info_num_fill_bits;
1208 static int hf_ansi_a_is2000_mob_cap_dcch_info_content;
1209 static int hf_ansi_a_is2000_mob_cap_dcch_info_fill_bits;
1210 static int hf_ansi_a_is2000_mob_cap_for_pdch_info_octet_len;
1211 static int hf_ansi_a_is2000_mob_cap_for_pdch_info_num_fill_bits;
1212 static int hf_ansi_a_is2000_mob_cap_for_pdch_info_content;
1213 static int hf_ansi_a_is2000_mob_cap_for_pdch_info_fill_bits;
1214 static int hf_ansi_a_is2000_mob_cap_rev_pdch_info_octet_len;
1215 static int hf_ansi_a_is2000_mob_cap_rev_pdch_info_num_fill_bits;
1216 static int hf_ansi_a_is2000_mob_cap_rev_pdch_info_content;
1217 static int hf_ansi_a_is2000_mob_cap_rev_pdch_info_fill_bits;
1218 static int hf_ansi_a_is2000_mob_cap_vp_support;
1219 static int hf_ansi_a_is2000_mob_cap_vp_support_a7;
1220 static int hf_ansi_a_is2000_mob_cap_vp_support_a6;
1221 static int hf_ansi_a_is2000_mob_cap_vp_support_a5;
1222 static int hf_ansi_a_is2000_mob_cap_vp_support_a4;
1223 static int hf_ansi_a_is2000_mob_cap_vp_support_a3;
1224 static int hf_ansi_a_is2000_mob_cap_vp_support_a2;
1225 static int hf_ansi_a_is2000_mob_cap_vp_support_a1;
1226 static int hf_ansi_a_protocol_type;
1227 static int hf_ansi_a_fwd_ms_info_rec_cld_pn_num_type;
1228 static int hf_ansi_a_fwd_ms_info_rec_cld_pn_num_plan;
1229 static int hf_ansi_a_fwd_ms_info_rec_cld_pn_num;
1230 static int hf_ansi_a_fwd_ms_info_rec_clg_pn_num_type;
1231 static int hf_ansi_a_fwd_ms_info_rec_clg_pn_num_plan;
1232 static int hf_ansi_a_fwd_ms_info_rec_clg_pn_num;
1233 static int hf_ansi_a_fwd_ms_info_rec_clg_pn_pi;
1234 static int hf_ansi_a_fwd_ms_info_rec_clg_pn_si;
1235 static int hf_ansi_a_fwd_ms_info_rec_mw_num;
1236 static int hf_ansi_a_fwd_ms_info_rec_content;
1237 static int hf_ansi_a_rev_ms_info_rec_cld_pn_num_type;
1238 static int hf_ansi_a_rev_ms_info_rec_cld_pn_num_plan;
1239 static int hf_ansi_a_rev_ms_info_rec_cld_pn_num;
1240 static int hf_ansi_a_rev_ms_info_rec_clg_pn_num_type;
1241 static int hf_ansi_a_rev_ms_info_rec_clg_pn_num_plan;
1242 static int hf_ansi_a_rev_ms_info_rec_clg_pn_num;
1243 static int hf_ansi_a_rev_ms_info_rec_clg_pn_pi;
1244 static int hf_ansi_a_rev_ms_info_rec_clg_pn_si;
1245 static int hf_ansi_a_rev_ms_info_rec_so_info_fwd_support;
1246 static int hf_ansi_a_rev_ms_info_rec_so_info_rev_support;
1247 static int hf_ansi_a_rev_ms_info_rec_so_info_so;
1248 static int hf_ansi_a_rev_ms_info_rec_content;
1249 static int hf_ansi_a_ext_ho_dir_params_srch_win_a;
1250 static int hf_ansi_a_ext_ho_dir_params_srch_win_n;
1251 static int hf_ansi_a_ext_ho_dir_params_srch_win_r;
1252 static int hf_ansi_a_ext_ho_dir_params_t_add;
1253 static int hf_ansi_a_ext_ho_dir_params_t_drop;
1254 static int hf_ansi_a_ext_ho_dir_params_t_comp;
1255 static int hf_ansi_a_ext_ho_dir_params_t_tdrop;
1256 static int hf_ansi_a_ext_ho_dir_params_nghbor_max_age;
1257 static int hf_ansi_a_ext_ho_dir_params_target_bs_values_incl;
1258 static int hf_ansi_a_ext_ho_dir_params_soft_slope;
1259 static int hf_ansi_a_ext_ho_dir_params_add_intercept;
1260 static int hf_ansi_a_ext_ho_dir_params_drop_intercept;
1261 static int hf_ansi_a_ext_ho_dir_params_target_bs_p_rev;
1262 static int hf_ansi_a_cdma_sowd_sowd;
1263 static int hf_ansi_a_cdma_sowd_resolution;
1264 static int hf_ansi_a_cdma_sowd_timestamp;
1265 static int hf_ansi_a_re_res_prio_incl;
1266 static int hf_ansi_a_re_res_forward;
1267 static int hf_ansi_a_re_res_reverse;
1268 static int hf_ansi_a_re_res_alloc;
1269 static int hf_ansi_a_re_res_avail;
1270 static int hf_ansi_a_cld_party_ascii_num_ton;
1271 static int hf_ansi_a_cld_party_ascii_num_plan;
1272 static int hf_ansi_a_band_class;
1273 static int hf_ansi_a_is2000_cause;
1274 static int hf_ansi_a_auth_event;
1275 static int hf_ansi_a_psmm_count;
1276 static int hf_ansi_a_geo_loc;
1277 static int hf_ansi_a_cct_group_all_circuits;
1278 static int hf_ansi_a_cct_group_inclusive;
1279 static int hf_ansi_a_cct_group_count;
1280 static int hf_ansi_a_cct_group_first_cic;
1281 static int hf_ansi_a_cct_group_first_cic_pcm_multi;
1282 static int hf_ansi_a_cct_group_first_cic_timeslot;
1283 static int hf_ansi_a_paca_timestamp_queuing_time;
1284 static int hf_ansi_a_paca_order_action_reqd;
1285 static int hf_ansi_a_paca_reoi_pri;
1286 static int hf_ansi_a_a2p_bearer_sess_max_frames;
1287 static int hf_ansi_a_a2p_bearer_sess_ip_addr_type;
1288 static int hf_ansi_a_a2p_bearer_sess_addr_flag;
1289 static int hf_ansi_a_a2p_bearer_sess_ipv4_addr;
1290 static int hf_ansi_a_a2p_bearer_sess_ipv6_addr;
1291 static int hf_ansi_a_a2p_bearer_sess_udp_port;
1292 static int hf_ansi_a_a2p_bearer_form_num_formats;
1293 static int hf_ansi_a_a2p_bearer_form_ip_addr_type;
1294 static int hf_ansi_a_a2p_bearer_form_format_len;
1295 static int hf_ansi_a_a2p_bearer_form_format_tag_type;
1296 static int hf_ansi_a_a2p_bearer_form_format_format_id;
1297 static int hf_ansi_a_a2p_bearer_form_format_rtp_payload_type;
1298 static int hf_ansi_a_a2p_bearer_form_format_bearer_addr_flag;
1299 static int hf_ansi_a_a2p_bearer_form_format_ipv4_addr;
1300 static int hf_ansi_a_a2p_bearer_form_format_ipv6_addr;
1301 static int hf_ansi_a_a2p_bearer_form_format_udp_port;
1302 static int hf_ansi_a_a2p_bearer_form_format_ext_len;
1303 static int hf_ansi_a_a2p_bearer_form_format_ext_id;
1304 static int hf_ansi_a_ms_des_freq_band_class;
1305 static int hf_ansi_a_ms_des_freq_cdma_channel;
1306 static int hf_ansi_a_plcm_id_plcm_type;
1307 static int hf_ansi_a_bdtmf_trans_info_dtmf_off_len;
1308 static int hf_ansi_a_bdtmf_trans_info_dtmf_on_len;
1309 static int hf_ansi_a_bdtmf_chars_num_chars;
1310 static int hf_ansi_a_bdtmf_chars_digits;
1311 static int hf_ansi_a_encryption_parameter_value;
1312 static int hf_ansi_a_layer3_info;
1313 static int hf_ansi_a_manufacturer_software_info;
1314 static int hf_ansi_a_circuit_bitmap;
1315 static int hf_ansi_a_extension_parameter_value;
1316 static int hf_ansi_a_msb_first_digit;
1317 static int hf_ansi_a_dcch_cc_incl;
1318 static int hf_ansi_a_for_sch_cc_incl;
1319 static int hf_ansi_a_rev_sch_cc_incl;
1320 static int hf_ansi_a_plcm42;
1323 /* Initialize the subtree pointers */
1324 static int ett_bsmap;
1325 static int ett_dtap;
1326 static int ett_elems;
1327 static int ett_elem;
1328 static int ett_dtap_oct_1;
1329 static int ett_cm_srvc_type;
1330 static int ett_ansi_ms_info_rec_reserved;
1331 static int ett_ansi_enc_info;
1332 static int ett_scm;
1333 static int ett_cell_list;
1334 static int ett_bearer_list;
1335 static int ett_re_list;
1336 static int ett_so_list;
1337 static int ett_adds_user_part;
1338 static int ett_scr;
1339 static int ett_scr_socr;
1340 static int ett_cm2_band_class;
1341 static int ett_vp_algs;
1342 static int ett_chan_list;
1343 static int ett_cic;
1344 static int ett_is2000_mob_cap_fch_info;
1345 static int ett_is2000_mob_cap_dcch_info;
1346 static int ett_is2000_mob_cap_for_pdch_info;
1347 static int ett_is2000_mob_cap_rev_pdch_info;
1349 static expert_field ei_ansi_a_extraneous_data;
1350 static expert_field ei_ansi_a_short_data;
1351 static expert_field ei_ansi_a_missing_mand_elem;
1352 static expert_field ei_ansi_a_unknown_format;
1353 static expert_field ei_ansi_a_no_tlv_elem_diss;
1354 static expert_field ei_ansi_a_no_tv_elem_diss;
1355 static expert_field ei_ansi_a_no_lv_elem_diss;
1356 static expert_field ei_ansi_a_no_v_elem_diss;
1357 static expert_field ei_ansi_a_miss_dtap_msg_diss;
1358 static expert_field ei_ansi_a_miss_bsmap_msg_diss;
1359 static expert_field ei_ansi_a_is2000_chan_id_pilot_pn;
1360 static expert_field ei_ansi_a_unknown_dtap_msg;
1361 static expert_field ei_ansi_a_unknown_bsmap_msg;
1362 static expert_field ei_ansi_a_undecoded;
1364 static dissector_handle_t dtap_handle;
1365 static dissector_handle_t bsmap_handle;
1366 static dissector_handle_t sip_dtap_bsmap_handle;
1368 static dissector_table_t is637_dissector_table; /* IS-637-A Transport Layer (SMS) */
1369 static dissector_table_t is683_dissector_table; /* IS-683-A (OTA) */
1370 static dissector_table_t is801_dissector_table; /* IS-801 (PLD) */
1372 typedef struct ansi_a_shared_data_t
1375 * top level tree
1377 proto_tree *g_tree;
1380 * item pointer for BSMAP or DTAP message
1381 * (may be NULL in the case that the IS41 MAP dissector called dissect_cdma2000_a1_elements())
1383 proto_item *message_item;
1384 proto_item *elem_item;
1387 * message direction
1388 * true means from the BSC to MSC
1390 bool is_reverse;
1393 * IOS message was carried in SIP
1395 bool from_sip;
1397 address rtp_src_addr;
1398 uint32_t rtp_ipv4_addr;
1399 ws_in6_addr rtp_ipv6_addr;
1400 uint16_t rtp_port;
1402 bool meid_configured;
1404 ansi_a_shared_data_t;
1407 * As per A.S0001 Called Party BCD Number
1409 static dgt_set_t Dgt_tbcd = {
1411 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
1412 '0','1','2','3','4','5','6','7','8','9','*','#','a','b','c', 0
1416 static dgt_set_t Dgt_msid = {
1418 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
1419 '0','1','2','3','4','5','6','7','8','9','?','?','?','?','?', 0
1423 static dgt_set_t Dgt_meid = {
1425 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
1426 '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
1431 * As per C.S0005 Table 2.7.1.3.2.4-4 and IS-634.400A 6.2.2.57
1433 static dgt_set_t Dgt_dtmf = {
1435 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
1436 '?','1','2','3','4','5','6','7','8','9','0','*','#','?','?', 0
1440 /* FUNCTIONS */
1442 static const value_string ansi_a_so_str_vals[] = {
1443 { 1, "Basic Variable Rate Voice Service (8 kbps)" },
1444 { 2, "Mobile Station Loopback (8 kbps)" },
1445 { 3, "(EVRC) Enhanced Variable Rate Voice Service (8 kbps)" },
1446 { 4, "Asynchronous Data Service (9.6 kbps)" },
1447 { 5, "Group 3 Facsimile (9.6 kbps)" },
1448 { 6, "Short Message Services (Rate Set 1)" },
1449 { 7, "Packet Data Service: Internet or ISO Protocol Stack (9.6 kbps)" },
1450 { 8, "Packet Data Service: CDPD Protocol Stack (9.6 kbps)" },
1451 { 9, "Mobile Station Loopback (13 kbps)" },
1452 { 10, "STU-III Transparent Service" },
1453 { 11, "STU-III Non-Transparent Service" },
1454 { 12, "Asynchronous Data Service (14.4 or 9.6 kbps)" },
1455 { 13, "Group 3 Facsimile (14.4 or 9.6 kbps)" },
1456 { 14, "Short Message Services (Rate Set 2)" },
1457 { 15, "Packet Data Service: Internet or ISO Protocol Stack (14.4 kbps)" },
1458 { 16, "Packet Data Service: CDPD Protocol Stack (14.4 kbps)" },
1459 { 17, "High Rate Voice Service (13 kbps)" },
1460 { 18, "Over-the-Air Parameter Administration (Rate Set 1)" },
1461 { 19, "Over-the-Air Parameter Administration (Rate Set 2)" },
1462 { 20, "Group 3 Analog Facsimile (Rate Set 1)" },
1463 { 21, "Group 3 Analog Facsimile (Rate Set 2)" },
1464 { 22, "High Speed Packet Data Service: Internet or ISO Protocol Stack (RS1 forward, RS1 reverse)" },
1465 { 23, "High Speed Packet Data Service: Internet or ISO Protocol Stack (RS1 forward, RS2 reverse)" },
1466 { 24, "High Speed Packet Data Service: Internet or ISO Protocol Stack (RS2 forward, RS1 reverse)" },
1467 { 25, "High Speed Packet Data Service: Internet or ISO Protocol Stack (RS2 forward, RS2 reverse)" },
1468 { 26, "High Speed Packet Data Service: CDPD Protocol Stack (RS1 forward, RS1 reverse)" },
1469 { 27, "High Speed Packet Data Service: CDPD Protocol Stack (RS1 forward, RS2 reverse)" },
1470 { 28, "High Speed Packet Data Service: CDPD Protocol Stack (RS2 forward, RS1 reverse)" },
1471 { 29, "High Speed Packet Data Service: CDPD Protocol Stack (RS2 forward, RS2 reverse)" },
1472 { 30, "Supplemental Channel Loopback Test for Rate Set 1" },
1473 { 31, "Supplemental Channel Loopback Test for Rate Set 2" },
1474 { 32, "Test Data Service Option (TDSO)" },
1475 { 33, "CDMA2000 High Speed Packet Data Service, Internet or ISO Protocol Stack" },
1476 { 34, "CDMA2000 High Speed Packet Data Service, CDPD Protocol Stack" },
1477 { 35, "Location Services (PDS), Rate Set 1 (9.6 kbps)" },
1478 { 36, "Location Services (PDS), Rate Set 2 (14.4 kbps)" },
1479 { 37, "ISDN Interworking Service (64 kbps)" },
1480 { 38, "GSM Voice" },
1481 { 39, "GSM Circuit Data" },
1482 { 40, "GSM Packet Data" },
1483 { 41, "GSM Short Message Service" },
1484 { 42, "None Reserved for MC-MAP standard service options" },
1485 { 54, "Markov Service Option (MSO)" },
1486 { 55, "Loopback Service Option (LSO)" },
1487 { 56, "Selectable Mode Vocoder" },
1488 { 57, "32 kbps Circuit Video Conferencing" },
1489 { 58, "64 kbps Circuit Video Conferencing" },
1490 { 59, "HRPD Accounting Records Identifier" },
1491 { 60, "Link Layer Assisted Robust Header Compression (LLA ROHC) - Header Removal" },
1492 { 61, "Link Layer Assisted Robust Header Compression (LLA ROHC) - Header Compression" },
1493 { 62, "- 4099 None Reserved for standard service options" },
1494 { 68, "(EVRC-B NB) Enhanced Variable Rate Voice Service" },
1495 { 70, "(EVRC-B WB) Enhanced Variable Rate Voice Service" },
1496 { 73, "(EVRC-NW) Enhanced Variable Rate Voice Service" },
1497 { 74, "Flexible Markov Service Option" },
1498 { 75, "Enhanced Loopback Service Option" },
1499 { 76, "Tunneled forward link SMS based on Application Data Delivery Service trigger support in E-UTRAN - 1x Interworking" },
1500 { 77, "(EVRC-NW2k) EVRC-NW including a 2kbps maximum mode" },
1501 { 78, "Unstructured Supplementary Service Data, Rate Set 1 (9.6 kbps)" },
1502 { 79, "Unstructured Supplementary Service Data, Rate Set 2 (14.4 kbps)" },
1503 { 4100, "Asynchronous Data Service, Revision 1 (9.6 or 14.4 kbps)" },
1504 { 4101, "Group 3 Facsimile, Revision 1 (9.6 or 14.4 kbps)" },
1505 { 4102, "Reserved for standard service option" },
1506 { 4103, "Packet Data Service: Internet or ISO Protocol Stack, Revision 1 (9.6 or 14.4 kbps)" },
1507 { 4104, "Packet Data Service: CDPD Protocol Stack, Revision 1 (9.6 or 14.4 kbps)" },
1508 { 4169, "EVRC-NW with capacity operating point 0 support over the A1 interface" },
1509 { 32760, "Identifies service reference identifier 0" },
1510 { 32761, "Identifies service reference identifier 1" },
1511 { 32762, "Identifies service reference identifier 2" },
1512 { 32763, "Identifies service reference identifier 3" },
1513 { 32764, "Identifies service reference identifier 4" },
1514 { 32765, "Identifies service reference identifier 5" },
1515 { 32766, "Identifies service reference identifier 6" },
1516 { 32767, "Identifies service reference identifier 7" },
1517 { 32768, "QCELP (13 kbps)" },
1518 { 32769, "Proprietary QUALCOMM Incorporated" },
1519 { 32770, "Proprietary QUALCOMM Incorporated" },
1520 { 32771, "Proprietary QUALCOMM Incorporated" },
1521 { 32772, "Proprietary OKI Telecom" },
1522 { 32773, "Proprietary OKI Telecom" },
1523 { 32774, "Proprietary OKI Telecom" },
1524 { 32775, "Proprietary OKI Telecom" },
1525 { 32776, "Proprietary Lucent Technologies" },
1526 { 32777, "Proprietary Lucent Technologies" },
1527 { 32778, "Proprietary Lucent Technologies" },
1528 { 32779, "Proprietary Lucent Technologies" },
1529 { 32780, "Nokia" },
1530 { 32781, "Nokia" },
1531 { 32782, "Nokia" },
1532 { 32783, "Nokia" },
1533 { 32784, "NORTEL NETWORKS" },
1534 { 32785, "NORTEL NETWORKS" },
1535 { 32786, "NORTEL NETWORKS" },
1536 { 32787, "NORTEL NETWORKS" },
1537 { 32788, "Sony Electronics Inc." },
1538 { 32789, "Sony Electronics Inc." },
1539 { 32790, "Sony Electronics Inc." },
1540 { 32791, "Sony Electronics Inc." },
1541 { 32792, "Motorola" },
1542 { 32793, "Motorola" },
1543 { 32794, "Motorola" },
1544 { 32795, "Motorola" },
1545 { 32796, "QUALCOMM Incorporated" },
1546 { 32797, "QUALCOMM Incorporated" },
1547 { 32798, "Qualcomm Loopback" },
1548 { 32799, "Qualcomm Markov 8 kbps Loopback" },
1549 { 32800, "Qualcomm Packet Data" },
1550 { 32801, "Qualcomm Async Data" },
1551 { 32802, "QUALCOMM Incorporated" },
1552 { 32803, "QUALCOMM Incorporated" },
1553 { 32804, "QUALCOMM Incorporated" },
1554 { 32805, "QUALCOMM Incorporated" },
1555 { 32806, "QUALCOMM Incorporated" },
1556 { 32807, "QUALCOMM Incorporated" },
1557 { 32808, "QUALCOMM Incorporated" },
1558 { 32809, "QUALCOMM Incorporated" },
1559 { 32810, "QUALCOMM Incorporated" },
1560 { 32811, "QUALCOMM Incorporated" },
1561 { 32812, "Lucent Technologies" },
1562 { 32813, "Lucent Technologies" },
1563 { 32814, "Lucent Technologies" },
1564 { 32815, "Lucent Technologies" },
1565 { 32816, "Denso International" },
1566 { 32817, "Denso International" },
1567 { 32818, "Denso International" },
1568 { 32819, "Denso International" },
1569 { 32820, "Motorola" },
1570 { 32821, "Motorola" },
1571 { 32822, "Motorola" },
1572 { 32823, "Motorola" },
1573 { 32824, "Denso International" },
1574 { 32825, "Denso International" },
1575 { 32826, "Denso International" },
1576 { 32827, "Denso International" },
1577 { 32828, "Denso International" },
1578 { 32829, "Denso International" },
1579 { 32830, "Denso International" },
1580 { 32831, "Denso International" },
1581 { 32832, "Denso International" },
1582 { 32833, "Denso International" },
1583 { 32834, "Denso International" },
1584 { 32835, "Denso International" },
1585 { 32836, "NEC America" },
1586 { 32837, "NEC America" },
1587 { 32838, "NEC America" },
1588 { 32839, "NEC America" },
1589 { 32840, "Samsung Electronics" },
1590 { 32841, "Samsung Electronics" },
1591 { 32842, "Samsung Electronics" },
1592 { 32843, "Samsung Electronics" },
1593 { 32844, "Texas Instruments Incorporated" },
1594 { 32845, "Texas Instruments Incorporated" },
1595 { 32846, "Texas Instruments Incorporated" },
1596 { 32847, "Texas Instruments Incorporated" },
1597 { 32848, "Toshiba Corporation" },
1598 { 32849, "Toshiba Corporation" },
1599 { 32850, "Toshiba Corporation" },
1600 { 32851, "Toshiba Corporation" },
1601 { 32852, "LG Electronics Inc." },
1602 { 32853, "LG Electronics Inc." },
1603 { 32854, "LG Electronics Inc." },
1604 { 32855, "LG Electronics Inc." },
1605 { 32856, "VIA Telecom Inc." },
1606 { 32857, "VIA Telecom Inc." },
1607 { 32858, "VIA Telecom Inc." },
1608 { 32859, "VIA Telecom Inc." },
1609 { 32860, "Verizon Wireless" },
1610 { 32861, "Verizon Wireless" },
1611 { 32862, "Verizon Wireless" },
1612 { 32863, "Verizon Wireless" },
1613 { 32864, "Huawei Technologies" },
1614 { 32865, "Huawei Technologies" },
1615 { 32866, "Huawei Technologies" },
1616 { 32867, "Huawei Technologies" },
1617 { 32868, "QUALCOMM Incorporated" },
1618 { 32869, "QUALCOMM Incorporated" },
1619 { 32870, "QUALCOMM Incorporated" },
1620 { 32871, "QUALCOMM Incorporated" },
1621 { 32872, "ZTE Corporation" },
1622 { 32873, "ZTE Corporation" },
1623 { 32874, "ZTE Corporation" },
1624 { 32875, "ZTE Corporation" },
1625 { 32876, "China Telecom" },
1626 { 32877, "China Telecom" },
1627 { 32878, "China Telecom" },
1628 { 32879, "China Telecom" },
1629 { 0, NULL }
1632 static value_string_ext ansi_a_so_str_vals_ext = VALUE_STRING_EXT_INIT(ansi_a_so_str_vals);
1634 static const char *ansi_a_so_int_to_str(int32_t so)
1636 const char *str = try_val_to_str_ext(so, &ansi_a_so_str_vals_ext);
1638 if (str == NULL)
1640 if ((so >= 4105) && (so <= 32767))
1642 str = "Reserved for standard service options";
1644 else
1646 str = "Reserved";
1650 return str;
1653 static void
1654 content_fill_aux(
1655 tvbuff_t *tvb,
1656 proto_tree *tree,
1657 uint32_t offset,
1658 uint8_t content_len,
1659 uint8_t fill_bits,
1660 int hf_content,
1661 int hf_content_fill_bits)
1663 proto_tree_add_item(tree, hf_content, tvb, offset, content_len, ENC_NA);
1665 offset += content_len;
1667 if (fill_bits)
1669 proto_tree_add_bits_item(tree, hf_content_fill_bits, tvb, (offset - 1)*8, fill_bits-1, ENC_NA);
1674 /* ELEMENT FUNCTIONS */
1676 #define EXTRANEOUS_DATA_CHECK(edc_len, edc_max_len) \
1677 if ((edc_len) > (edc_max_len)) \
1679 proto_tree_add_expert(tree, pinfo, &ei_ansi_a_extraneous_data, \
1680 tvb, curr_offset, (edc_len) - (edc_max_len)); \
1681 curr_offset += ((edc_len) - (edc_max_len)); \
1684 #define SHORT_DATA_CHECK(sdc_len, sdc_min_len) \
1685 if ((sdc_len) < (sdc_min_len)) \
1687 proto_tree_add_expert(tree, pinfo, &ei_ansi_a_short_data, \
1688 tvb, curr_offset, (sdc_len)); \
1689 curr_offset += (sdc_len); \
1690 return curr_offset - offset; \
1693 #define NO_MORE_DATA_CHECK(nmdc_len) \
1694 if ((nmdc_len) <= (curr_offset - offset)) return nmdc_len;
1698 * IOS 6.2.2.6
1700 static uint8_t
1701 elem_chan_num(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, uint32_t offset, unsigned len _U_, ansi_a_shared_data_t *data_p)
1703 uint32_t value;
1704 uint32_t curr_offset;
1706 curr_offset = offset;
1708 value = tvb_get_ntohs(tvb, curr_offset);
1710 switch (global_a_variant)
1712 case A_VARIANT_IOS401:
1713 proto_tree_add_item(tree, hf_ansi_a_channel_number, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
1715 proto_item_append_text(data_p->elem_item, " - (%u)", value);
1716 break;
1718 case A_VARIANT_IOS501:
1719 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_16_f800, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
1720 proto_tree_add_item(tree, hf_ansi_a_IOS5_channel_number, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
1722 proto_item_append_text(data_p->elem_item, " - (ARFCN: %u)", value & 0x07ff);
1723 break;
1726 curr_offset += 2;
1728 /* no length check possible */
1730 return curr_offset - offset;
1734 * IOS 6.2.2.7
1737 static const value_string ansi_a_speech_or_data_indicator_vals[] = {
1738 { 0x0, "No Alert" },
1739 { 0x1, "Speech" },
1740 { 0x2, "Data" },
1741 { 0x3, "Signaling" },
1742 { 0, NULL }
1745 static const value_string ansi_a_channel_rate_and_type_vals[] = {
1746 { 0x00, "Reserved (invalid)" },
1747 { 0x01, "DCCH" },
1748 { 0x02, "Reserved for future use (invalid)" },
1749 { 0x08, "Full rate TCH channel Bm" },
1750 { 0x09, "Half rate TCH channel Lm" },
1751 { 0, NULL }
1754 static const value_string ansi_a_speech_enc_or_data_rate_vals[] = {
1755 { 0x00, "No Resources Required (invalid)" },
1756 { 0x01, "Reserved" },
1757 { 0x02, "Reserved" },
1758 { 0x03, "TIA/EIA-IS-2000 8 kb/s vocoder" },
1759 { 0x04, "8 kb/s enhanced vocoder (EVRC)" },
1760 { 0x05, "13 kb/s vocoder" },
1761 { 0x06, "Adaptive Differential PCM" },
1762 { 0, NULL }
1765 static uint8_t
1766 elem_chan_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
1768 uint8_t oct;
1769 uint32_t curr_offset;
1771 curr_offset = offset;
1773 proto_tree_add_item(tree, hf_ansi_a_speech_or_data_indicator, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1775 oct = tvb_get_uint8(tvb, curr_offset);
1777 proto_item_append_text(data_p->elem_item, " - (%s)",
1778 val_to_str_const(oct, ansi_a_speech_or_data_indicator_vals, "Unknown"));
1780 curr_offset++;
1782 NO_MORE_DATA_CHECK(len);
1784 proto_tree_add_item(tree, hf_ansi_a_chan_rate_and_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1786 curr_offset++;
1788 NO_MORE_DATA_CHECK(len);
1790 if (oct == 0x02)
1792 proto_tree_add_item(tree, hf_ansi_a_chan_type_data_ext, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1793 proto_tree_add_item(tree, hf_ansi_a_chan_type_data_transparent, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1794 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_3f, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1796 else
1798 proto_tree_add_item(tree, hf_ansi_a_speech_enc_or_data_rate, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1801 curr_offset++;
1803 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
1805 return curr_offset - offset;
1809 * IOS 5 4.2.83
1812 static const value_string ansi_a_return_cause_vals[] = {
1813 { 0x00, "Normal access" },
1814 { 0x01, "Service redirection failed as a result of system not found" },
1815 { 0x02, "Service redirection failed as a result of protocol mismatch" },
1816 { 0x03, "Service redirection failed as a result of registration rejection" },
1817 { 0x04, "Service redirection failed as a result of wrong SID" },
1818 { 0x05, "Service redirection failed as a result of wrong NID" },
1819 { 0, NULL }
1822 static uint8_t
1823 elem_return_cause(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, uint32_t offset, unsigned len _U_, ansi_a_shared_data_t *data_p _U_)
1825 uint32_t curr_offset;
1827 curr_offset = offset;
1829 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1830 proto_tree_add_item(tree, hf_ansi_a_return_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1832 curr_offset++;
1834 /* no length check possible */
1836 return curr_offset - offset;
1840 * IOS 6.2.2.8
1843 static const value_string ansi_a_rf_chan_id_timeslot_number_vals[] = {
1844 { 0x00, "Centered on N" },
1845 { 0x01, "Channel below N" },
1846 { 0x02, "Channel above N" },
1847 { 0x03, "Reserved" },
1848 { 0, NULL }
1851 static uint8_t
1852 elem_rf_chan_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, uint32_t offset, unsigned len _U_, ansi_a_shared_data_t *data_p)
1854 uint32_t value;
1855 uint32_t curr_offset;
1857 curr_offset = offset;
1859 proto_tree_add_item(tree, hf_ansi_a_rf_chan_id_color_code, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1861 curr_offset++;
1863 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_fc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1864 proto_tree_add_item(tree, hf_ansi_a_rf_chan_id_n_amps_based, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1865 proto_tree_add_item(tree, hf_ansi_a_rf_chan_id_amps_based, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1867 curr_offset++;
1869 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_fc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1870 proto_tree_add_item(tree, hf_ansi_a_rf_chan_id_timeslot, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1872 curr_offset++;
1874 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_16_f800, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
1875 proto_tree_add_item(tree, hf_ansi_a_rf_chan_id_channel_number, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
1877 value = tvb_get_ntohs(tvb, curr_offset);
1879 proto_item_append_text(data_p->elem_item, " - (ARFCN: %u)", value & 0x07ff);
1881 curr_offset += 2;
1883 /* no length check possible */
1885 return curr_offset - offset;
1889 * IOS 5 4.2.86
1891 static uint8_t
1892 elem_sr_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
1894 uint8_t oct;
1895 uint32_t curr_offset;
1897 curr_offset = offset;
1899 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f8, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1900 proto_tree_add_item(tree, hf_ansi_a_sr_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1902 oct = tvb_get_uint8(tvb, curr_offset);
1904 proto_item_append_text(data_p->elem_item, " - (%u)", oct);
1906 curr_offset++;
1908 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
1910 return curr_offset - offset;
1914 * IOS 6.2.2.9
1916 static uint8_t
1917 elem_sid(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, uint32_t offset, unsigned len _U_, ansi_a_shared_data_t *data_p)
1919 uint32_t value;
1920 uint32_t curr_offset;
1922 curr_offset = offset;
1924 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_16_8000, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
1925 proto_tree_add_item(tree, hf_ansi_a_sid, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
1927 value = tvb_get_ntohs(tvb, curr_offset);
1929 proto_item_append_text(data_p->elem_item, " - (SID: %u)", value & 0x7fff);
1931 curr_offset += 2;
1933 /* no length check possible */
1935 return curr_offset - offset;
1939 * IOS 6.2.2.10
1941 static uint8_t
1942 elem_is95_chan_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
1944 uint8_t oct;
1945 uint8_t num_chans;
1946 uint8_t chan_num;
1947 uint32_t value;
1948 uint32_t curr_offset;
1949 proto_tree *subtree;
1951 curr_offset = offset;
1953 proto_tree_add_item(tree, hf_ansi_a_is95_chan_id_hho, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1954 proto_tree_add_item(tree, hf_ansi_a_is95_chan_id_num_chans_add, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1956 oct = tvb_get_uint8(tvb, curr_offset);
1958 proto_tree_add_uint_format_value(tree, hf_ansi_a_is95_chan_id_frame_offset, tvb, curr_offset, 1,
1959 oct, "%u (%.2f ms)", oct & 0x0f, (oct & 0x0f) * 1.25);
1961 num_chans = (oct & 0x70) >> 4;
1963 curr_offset++;
1965 NO_MORE_DATA_CHECK(len);
1967 if (num_chans > 0)
1969 SHORT_DATA_CHECK(len - (curr_offset - offset), 4);
1971 chan_num = 0;
1974 subtree =
1975 proto_tree_add_subtree_format(tree, tvb, curr_offset, 4,
1976 ett_chan_list, NULL, "Channel [%u]", chan_num + 1);
1978 proto_tree_add_item(subtree, hf_ansi_a_is95_chan_id_walsh_code_chan_idx, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
1980 curr_offset += 1;
1982 proto_tree_add_item(subtree, hf_ansi_a_is95_chan_id_pilot_pn, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
1983 proto_tree_add_item(subtree, hf_ansi_a_is95_chan_id_power_combined, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
1984 proto_tree_add_item(subtree, hf_ansi_a_is95_chan_id_freq_incl, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
1985 proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_24_001800, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
1986 proto_tree_add_item(subtree, hf_ansi_a_is95_chan_id_channel_number, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
1989 * only use the first channel number
1991 if (chan_num == 0)
1993 value = tvb_get_ntohs(tvb, curr_offset + 1);
1995 proto_item_append_text(data_p->elem_item, " - (ARFCN: %u)", value & 0x07ff);
1998 curr_offset += 3;
2000 chan_num++;
2002 while (((len - (curr_offset - offset)) >= 4) &&
2003 (chan_num < num_chans));
2006 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
2008 return curr_offset - offset;
2012 * IOS 6.2.2.11
2013 * UNUSED
2017 * IOS 6.2.2.12
2020 static const value_string ansi_a_enc_info_ident_vals[] = {
2021 { 0x00, "Not Used - Invalid value" },
2022 { 0x01, "SME Key: Signaling Message Encryption Key" },
2023 { 0x02, "Reserved (VPM: Voice Privacy Mask)" },
2024 { 0x03, "Reserved" },
2025 { 0x04, "Private Longcode" },
2026 { 0x05, "Data Key (ORYX)" },
2027 { 0x06, "Initial RAND" },
2028 { 0, NULL }
2031 static const value_string ansi_a_enc_info_status_vals[] = {
2032 { 0x00, "Active" },
2033 { 0x01, "Inactive" },
2034 { 0, NULL }
2037 static const value_string ansi_a_enc_info_available_vals[] = {
2038 { 0x00, "Available" },
2039 { 0x01, "Not available" },
2040 { 0, NULL }
2043 static uint8_t
2044 elem_enc_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
2046 uint8_t oct;
2047 uint32_t curr_offset, saved_offset;
2048 uint8_t num_recs;
2049 proto_item *item;
2050 proto_tree *subtree;
2052 curr_offset = offset;
2054 num_recs = 0;
2056 while ((len - (curr_offset - offset)) >= 2)
2058 saved_offset = curr_offset;
2060 oct = tvb_get_uint8(tvb, curr_offset);
2062 subtree =
2063 proto_tree_add_subtree_format(tree,
2064 tvb, curr_offset, -1, ett_ansi_enc_info, &item,
2065 "Encryption Info [%u]: %s (%u)",
2066 num_recs + 1,
2067 val_to_str_const((oct & 0x7c) >> 2, ansi_a_enc_info_ident_vals, "Reserved"),
2068 (oct & 0x7c) >> 2);
2070 proto_tree_add_item(subtree, hf_ansi_a_extension_8_80, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2071 proto_tree_add_item(subtree, hf_ansi_a_enc_info_enc_parm_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2072 proto_tree_add_item(subtree, hf_ansi_a_enc_info_status, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2073 proto_tree_add_item(subtree, hf_ansi_a_enc_info_available, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2075 curr_offset++;
2077 if (oct & 0x80)
2079 oct = tvb_get_uint8(tvb, curr_offset);
2081 proto_tree_add_uint(subtree, hf_ansi_a_length, tvb,
2082 curr_offset, 1, oct);
2084 curr_offset++;
2086 if (oct > 0)
2088 SHORT_DATA_CHECK(len - (curr_offset - offset), oct);
2090 proto_tree_add_item(subtree, hf_ansi_a_encryption_parameter_value, tvb, curr_offset, oct, ENC_NA);
2092 curr_offset += oct;
2096 proto_item_set_len(item, curr_offset - saved_offset);
2098 num_recs++;
2101 proto_item_append_text(data_p->elem_item, " - %u record%s", num_recs, plurality(num_recs, "", "s"));
2103 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
2105 return curr_offset - offset;
2109 * IOS 6.2.2.13
2110 * NO ASSOCIATED DATA
2114 * IOS 6.2.2.14
2115 * A3/A7
2119 * IOS 6.2.2.15
2121 * IOS 5 4.2.12
2124 static const value_string ansi_a_cm2_rf_power_cap_vals[] = {
2125 { 0x00, "Class 1, vehicle and portable" },
2126 { 0x01, "Class 2, portable" },
2127 { 0x02, "Class 3, handheld" },
2128 { 0x03, "Class 4, handheld" },
2129 { 0x04, "Class 5, handheld" },
2130 { 0x05, "Class 6, handheld" },
2131 { 0x06, "Class 7, handheld" },
2132 { 0x07, "Class 8, handheld" },
2133 { 0, NULL }
2136 static const value_string ansi_a_cm2_scm_ext_scm_ind_vals[] = {
2137 { 0x00, "Band Classes 1, 4, 14" },
2138 { 0x01, "Other bands" },
2139 { 0, NULL }
2142 static const value_string ansi_a_cm2_scm_dual_mode_vals[] = {
2143 { 0x00, "CDMA Only (Always)" },
2144 { 0x01, "Dual Mode (invalid)" },
2145 { 0, NULL }
2148 static const value_string ansi_a_cm2_scm_slotted_class_vals[] = {
2149 { 0x00, "Non-Slotted" },
2150 { 0x01, "Slotted" },
2151 { 0, NULL }
2154 static const value_string ansi_a_cm2_scm_meid_configured_vals[] = {
2155 { 0x00, "MEID not configured" },
2156 { 0x01, "MEID configured" },
2157 { 0, NULL }
2160 static const value_string ansi_a_cm2_scm_transmission_vals[] = {
2161 { 0x00, "Continuous" },
2162 { 0x01, "Discontinuous" },
2163 { 0, NULL }
2166 static const value_string ansi_a_cm2_scm_power_class_vals[] = {
2167 { 0x00, "Class I" },
2168 { 0x01, "Class II" },
2169 { 0x02, "Class III" },
2170 { 0x03, "Reserved" },
2171 { 0, NULL }
2174 static uint8_t
2175 elem_cm_info_type_2(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
2177 uint8_t oct;
2178 uint8_t num_bands, band_class_count, band_class_entry_len, p_rev;
2179 uint32_t curr_offset;
2180 int band_class;
2181 proto_item *item;
2182 proto_tree *subtree;
2184 curr_offset = offset;
2186 proto_tree_add_item(tree, hf_ansi_a_cm2_mob_p_rev, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2187 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_10, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2188 proto_tree_add_item(tree, hf_ansi_a_cm2_see_list, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2189 proto_tree_add_item(tree, hf_ansi_a_cm2_rf_power_cap, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2191 oct = tvb_get_uint8(tvb, curr_offset);
2193 proto_item_append_text(data_p->elem_item, " - P_REV (%u)", (oct & 0xe0) >> 5);
2195 curr_offset++;
2197 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_ff, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2199 curr_offset++;
2201 proto_tree_add_item(tree, hf_ansi_a_cm2_nar_an_cap, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2202 proto_tree_add_item(tree, hf_ansi_a_cm2_is95, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2203 proto_tree_add_item(tree, hf_ansi_a_cm2_slotted, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2204 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_18, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2205 proto_tree_add_item(tree, hf_ansi_a_cm2_dtx, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2206 proto_tree_add_item(tree, hf_ansi_a_cm2_mobile_term, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2207 proto_tree_add_item(tree, hf_ansi_a_cm2_analog_cap, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2209 curr_offset++;
2211 NO_MORE_DATA_CHECK(len);
2213 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_ff, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2215 curr_offset++;
2217 NO_MORE_DATA_CHECK(len);
2219 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_fc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2220 proto_tree_add_item(tree, hf_ansi_a_cm2_mobile_term, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2221 proto_tree_add_item(tree, hf_ansi_a_cm2_psi, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2223 curr_offset++;
2225 NO_MORE_DATA_CHECK(len);
2227 proto_tree_add_item(tree, hf_ansi_a_cm2_scm_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2229 curr_offset++;
2231 item =
2232 proto_tree_add_item(tree, hf_ansi_a_cm2_scm, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2235 * following SCM decode is from:
2236 * 3GPP2 C.S0005-0 section 2.3.3
2237 * 3GPP2 C.S0072-0 section 2.1.2
2239 subtree = proto_item_add_subtree(item, ett_scm);
2241 proto_tree_add_item(subtree, hf_ansi_a_cm2_scm_ext_scm_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2242 proto_tree_add_item(subtree, hf_ansi_a_cm2_scm_dual_mode, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2243 proto_tree_add_item(subtree, hf_ansi_a_cm2_scm_slotted, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2244 proto_tree_add_item(subtree, hf_ansi_a_cm2_scm_meid_configured, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2245 proto_tree_add_item(subtree, hf_ansi_a_cm2_scm_25MHz_bandwidth, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2246 proto_tree_add_item(subtree, hf_ansi_a_cm2_scm_transmission, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2247 proto_tree_add_item(subtree, hf_ansi_a_cm2_scm_power_class, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2249 oct = tvb_get_uint8(tvb, curr_offset);
2251 if (oct & 0x10)
2253 proto_item_append_text(data_p->elem_item, " (MEID configured)");
2254 data_p->meid_configured = true;
2257 curr_offset++;
2259 NO_MORE_DATA_CHECK(len);
2261 proto_tree_add_item(tree, hf_ansi_a_cm2_scm_band_class_count, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2263 band_class_count = tvb_get_uint8(tvb, curr_offset);
2265 curr_offset++;
2267 proto_tree_add_item(tree, hf_ansi_a_cm2_scm_band_class_entry_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2269 band_class_entry_len = tvb_get_uint8(tvb, curr_offset);
2271 curr_offset++;
2273 NO_MORE_DATA_CHECK(len);
2275 if (band_class_entry_len > 0)
2277 SHORT_DATA_CHECK(len - (curr_offset - offset), band_class_entry_len);
2279 num_bands = 0;
2282 subtree =
2283 proto_tree_add_subtree_format(tree, tvb, curr_offset, band_class_entry_len,
2284 ett_cm2_band_class, NULL, "Band Class Entry [%u]", num_bands + 1);
2286 proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_8_e0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2287 proto_tree_add_item(subtree, hf_ansi_a_scm_band_class_entry_band_class, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2289 oct = tvb_get_uint8(tvb, curr_offset);
2291 band_class = oct & 0x1f;
2293 curr_offset++;
2295 p_rev = tvb_get_uint8(tvb, curr_offset + 1);
2297 if (p_rev < 4)
2300 * As per C.S0005 Table 2.7.4.15-1
2302 proto_tree_add_item(subtree, hf_ansi_a_scm_band_class_entry_opmode0_1, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2303 proto_tree_add_item(subtree, hf_ansi_a_scm_band_class_entry_opmode1_1, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2304 proto_tree_add_item(subtree, hf_ansi_a_scm_band_class_entry_opmode2_1, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2305 proto_tree_add_item(subtree, hf_ansi_a_scm_band_class_entry_opmode3_1, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2306 proto_tree_add_item(subtree, hf_ansi_a_scm_band_class_entry_opmode4_1, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2307 proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_8_07, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2309 else
2312 * As per C.S0005 Table 2.7.4.15-2
2314 proto_tree_add_item(subtree, hf_ansi_a_scm_band_class_entry_opmode0_2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2315 proto_tree_add_item(subtree, hf_ansi_a_scm_band_class_entry_opmode1_2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2316 proto_tree_add_item(subtree, hf_ansi_a_scm_band_class_entry_opmode2_2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2317 proto_tree_add_item(subtree, hf_ansi_a_scm_band_class_entry_opmode3_2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2318 proto_tree_add_item(subtree, hf_ansi_a_scm_band_class_entry_opmode4_2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2319 proto_tree_add_item(subtree, hf_ansi_a_scm_band_class_entry_opmode5_2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2320 proto_tree_add_item(subtree, hf_ansi_a_scm_band_class_entry_opmode6_2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2321 proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_8_01, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2324 curr_offset++;
2326 proto_tree_add_item(subtree, hf_ansi_a_scm_band_class_entry_p_rev, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2328 curr_offset++;
2330 proto_item_append_text(item, ": (%d)", band_class);
2332 num_bands++;
2334 while (((len - (curr_offset - offset)) >= band_class_entry_len) &&
2335 (num_bands < band_class_count));
2338 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
2340 return curr_offset - offset;
2344 * IOS 6.2.2.16
2346 * IOS 5 4.2.13
2349 static const value_string ansi_a_mid_odd_even_ind_vals[] = {
2350 { 0x00, "Even" },
2351 { 0x01, "Odd" },
2352 { 0, NULL }
2355 static const value_string ansi_a_mid_type_vals[] = {
2356 { 0x01, "MEID" },
2357 { 0x02, "Broadcast Address" },
2358 { 0x05, "ESN" },
2359 { 0x06, "IMSI" },
2360 { 0, NULL }
2363 static const value_string ansi_a_mid_broadcast_priority_vals[] = {
2364 { 0x00, "Normal" },
2365 { 0x01, "Interactive" },
2366 { 0x02, "Urgent" },
2367 { 0x03, "Emergency" },
2368 { 0, NULL }
2371 static uint8_t
2372 elem_mid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
2374 uint8_t oct;
2375 uint32_t value;
2376 uint32_t curr_offset;
2377 const char *str;
2379 curr_offset = offset;
2381 oct = tvb_get_uint8(tvb, curr_offset);
2383 switch (oct & 0x07)
2385 case 1: /* MEID */
2386 proto_tree_add_item(tree, hf_ansi_a_meid_mid_digit_1, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2387 proto_tree_add_item(tree, hf_ansi_a_mid_odd_even_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2388 proto_tree_add_item(tree, hf_ansi_a_mid_type_of_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2390 if (curr_offset - offset >= len) /* Sanity check */
2391 return (curr_offset - offset);
2393 str = tvb_bcd_dig_to_str(pinfo->pool, tvb, curr_offset, len - (curr_offset - offset), &Dgt_meid, true);
2394 proto_tree_add_string(tree, hf_ansi_a_meid, tvb, curr_offset, len - (curr_offset - offset), str);
2396 proto_item_append_text(data_p->elem_item, " - MEID (%s)", str);
2397 curr_offset += len - (curr_offset - offset);
2398 break;
2400 case 2: /* Broadcast Address */
2401 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f8, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2402 proto_tree_add_item(tree, hf_ansi_a_mid_type_of_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2404 curr_offset++;
2406 proto_tree_add_item(tree, hf_ansi_a_mid_broadcast_priority, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2407 proto_tree_add_item(tree, hf_ansi_a_mid_broadcast_message_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2409 curr_offset++;
2411 proto_tree_add_item(tree, hf_ansi_a_mid_broadcast_zone_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2413 oct = tvb_get_uint8(tvb, curr_offset);
2415 proto_item_append_text(data_p->elem_item, " - Broadcast (Zone ID: %u)", oct);
2417 curr_offset++;
2419 value = tvb_get_ntohs(tvb, curr_offset);
2421 str = val_to_str_ext_const(value, &ansi_tsb58_srvc_cat_vals_ext, "Reserved");
2423 proto_tree_add_uint_format_value(tree, hf_ansi_a_mid_broadcast_srvc_cat, tvb, curr_offset, 2,
2424 value,
2425 "%s (%u)",
2426 str,
2427 value);
2429 curr_offset += 2;
2431 oct = tvb_get_uint8(tvb, curr_offset);
2433 str = val_to_str_ext_const(oct, &ansi_tsb58_language_ind_vals_ext, "Reserved");
2435 proto_tree_add_uint_format_value(tree, hf_ansi_a_mid_broadcast_language, tvb, curr_offset, 1,
2436 oct,
2437 "%s (%u)",
2438 str,
2439 oct);
2441 curr_offset++;
2442 break;
2444 case 5: /* ESN */
2445 proto_tree_add_item(tree, hf_ansi_a_mid_unused, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2446 proto_tree_add_item(tree, hf_ansi_a_mid_odd_even_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2447 proto_tree_add_item(tree, hf_ansi_a_mid_type_of_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2449 curr_offset++;
2451 value = tvb_get_ntohl(tvb, curr_offset);
2453 proto_tree_add_uint(tree, hf_ansi_a_esn,
2454 tvb, curr_offset, 4,
2455 value);
2457 proto_item_append_text(data_p->elem_item, " - %sESN (0x%04x)",
2458 data_p->meid_configured ? "p" : "",
2459 value);
2461 curr_offset += 4;
2462 break;
2464 case 6: /* IMSI */
2465 proto_tree_add_uint_format_value(tree, hf_ansi_a_imsi_mid_digit_1, tvb, curr_offset, 1,
2466 oct, "%c", Dgt_msid.out[(oct & 0xf0) >> 4]);
2468 proto_tree_add_item(tree, hf_ansi_a_mid_odd_even_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2469 proto_tree_add_item(tree, hf_ansi_a_mid_type_of_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2471 if (curr_offset - offset >= len) /* Sanity check */
2472 return (curr_offset - offset);
2474 str = tvb_bcd_dig_to_str(pinfo->pool, tvb, curr_offset, len - (curr_offset - offset), &Dgt_msid, true);
2475 proto_tree_add_string_format(tree, hf_ansi_a_imsi, tvb, curr_offset, len - (curr_offset - offset),
2476 str, "BCD Digits: %s", str);
2478 proto_item_append_text(data_p->elem_item, " - IMSI (%s)", str);
2479 if (data_p->message_item)
2481 proto_item_append_text(data_p->message_item, " MID=%s", str);
2483 if (global_a_info_display)
2485 col_append_fstr(pinfo->cinfo, COL_INFO, "MID=%s ", str);
2488 curr_offset += len - (curr_offset - offset);
2489 break;
2491 default:
2492 proto_tree_add_expert_format(tree, pinfo, &ei_ansi_a_unknown_format, tvb, curr_offset, len,
2493 "Mobile Identity ID type, %u, unknown/unsupported",
2494 (oct & 0x07));
2496 proto_item_append_text(data_p->elem_item, " - Format Unknown/Unsupported");
2498 curr_offset += len;
2499 break;
2502 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
2504 return curr_offset - offset;
2508 * IOS 6.2.2.17
2510 * IOS 5 4.2.14
2512 static uint8_t
2513 elem_sci(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, uint32_t offset, unsigned len _U_, ansi_a_shared_data_t *data_p)
2515 uint8_t oct;
2516 uint32_t curr_offset;
2518 curr_offset = offset;
2520 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2521 proto_tree_add_item(tree, hf_ansi_a_sci_sign, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2523 oct = tvb_get_uint8(tvb, curr_offset);
2525 proto_tree_add_uint_format_value(tree, hf_ansi_a_sci, tvb, curr_offset, 1,
2526 oct, "%s%u", (oct & 0x08) ? "-" : "", oct & 0x07);
2528 proto_item_append_text(data_p->elem_item, " - (%s%u)",
2529 (oct & 0x08) ? "-" : "", oct & 0x07);
2531 curr_offset++;
2533 /* no length check possible */
2535 return curr_offset - offset;
2539 * IOS 6.2.2.18
2541 * IOS 5 4.2.15
2543 static uint8_t
2544 elem_prio(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
2546 uint8_t oct;
2547 uint32_t curr_offset;
2549 curr_offset = offset;
2551 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_c0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2553 oct = tvb_get_uint8(tvb, curr_offset);
2555 proto_tree_add_uint_format_value(tree, hf_ansi_a_prio_call_priority, tvb, curr_offset, 1,
2556 oct, "Priority Level %u", (oct & 0x3c) >> 2);
2558 proto_tree_add_item(tree, hf_ansi_a_prio_queue_allowed, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2559 proto_tree_add_item(tree, hf_ansi_a_prio_preempt_allowed, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2561 proto_item_append_text(data_p->elem_item, " - (%u)", (oct & 0x3c) >> 2);
2563 curr_offset++;
2565 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
2567 return curr_offset - offset;
2571 * IOS 5 4.2.79
2573 static uint8_t
2574 elem_p_rev(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
2576 uint8_t oct;
2577 uint32_t curr_offset;
2579 curr_offset = offset;
2581 proto_tree_add_item(tree, hf_ansi_a_mob_p_rev, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2583 oct = tvb_get_uint8(tvb, curr_offset);
2585 proto_item_append_text(data_p->elem_item, " - (%u)", oct);
2587 curr_offset++;
2589 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
2591 return curr_offset - offset;
2595 * IOS 6.2.2.19
2597 static const value_string ansi_a_elem_cause_vals[] = {
2598 { 0x00, "Radio interface message failure" },
2599 { 0x01, "Radio interface failure" },
2600 { 0x02, "Uplink Quality" },
2601 { 0x03, "Uplink strength" },
2602 { 0x04, "Downlink quality" },
2603 { 0x05, "Downlink strength" },
2604 { 0x06, "Distance" },
2605 { 0x07, "OAM&P intervention" },
2606 { 0x08, "MS busy" },
2607 { 0x09, "Call processing" },
2608 { 0x0A, "Reversion to old channel" },
2609 { 0x0B, "Handoff successful" },
2610 { 0x0C, "No response from MS" },
2611 { 0x0D, "Timer expired" },
2612 { 0x0E, "Better cell (power budget)" },
2613 { 0x0F, "Interference" },
2614 { 0x10, "Packet call going dormant" },
2615 { 0x11, "Service option not available" },
2617 { 0x12, "Invalid Call" },
2618 { 0x13, "Successful operation" },
2619 { 0x14, "Normal call release" },
2621 /* IOS 5 */
2622 { 0x15, "Short data burst authentication failure" },
2623 { 0x17, "Time critical relocation/handoff" },
2624 { 0x18, "Network optimization" },
2625 { 0x19, "Power down from dormant state" },
2626 { 0x1A, "Authentication failure" },
2628 { 0x1B, "Inter-BS Soft Handoff Drop Target" },
2629 { 0x1D, "Intra-BS Soft Handoff Drop Target" },
2631 /* IOS 5 */
2632 { 0x1E, "Autonomous Registration by the Network" },
2634 { 0x20, "Equipment failure" },
2635 { 0x21, "No radio resource available" },
2636 { 0x22, "Requested terrestrial resource unavailable" },
2638 /* IOS 5 */
2639 { 0x23, "A2p RTP Payload Type not available" },
2640 { 0x24, "A2p Bearer Format Address Type not available" },
2642 { 0x25, "BS not equipped" },
2643 { 0x26, "MS not equipped (or incapable)" },
2645 /* IOS 5 */
2646 { 0x27, "2G only sector" },
2647 { 0x28, "3G only sector" },
2649 { 0x29, "PACA Call Queued" },
2651 /* IOS 5 */
2652 { 0x2A, "Handoff Blocked" },
2654 { 0x2B, "Alternate signaling type reject" },
2656 /* IOS 5 */
2657 { 0x2C, "A2p Resource not available" },
2659 { 0x2D, "PACA Queue Overflow" },
2660 { 0x2E, "PACA Cancel Request Rejected" },
2661 { 0x30, "Requested transcoding/rate adaptation unavailable" },
2662 { 0x31, "Lower priority radio resources not available" },
2663 { 0x32, "PCF resources not available" }, /* IOS 4 */
2664 { 0x33, "TFO Control request Failed" },
2666 /* IOS 5 */
2667 { 0x34, "MS rejected order" },
2669 { 0x40, "Ciphering algorithm not supported" },
2670 { 0x41, "Private Long Code not available or not supported." },
2671 { 0x42, "Requested MUX option or rates not available." },
2672 { 0x43, "Requested Privacy Configuration unavailable" },
2674 /* IOS 5 */
2675 { 0x45, "PDS-related capability not available or not supported" },
2677 { 0x50, "Terrestrial circuit already allocated" },
2678 { 0x60, "Protocol Error between BS and MSC" },
2679 { 0x71, "ADDS message too long for delivery on the paging channel" },
2680 { 0x72, "MS-to-IWF TCP connection failure" },
2681 { 0x73, "ATH0 (Modem hang up) Command" },
2682 { 0x74, "+FSH/+FHNG (Fax session ended) Command" },
2683 { 0x75, "No carrier" },
2684 { 0x76, "PPP protocol failure" },
2685 { 0x77, "PPP session closed by the MS" },
2686 { 0x78, "Do not notify MS" },
2687 { 0x79, "PCF (or PDSN) resources are not available" },
2688 { 0x7A, "Data ready to send" },
2690 /* IOS 5 */
2691 { 0x7B, "Concurrent authentication" },
2693 { 0x7F, "Handoff procedure time-out" },
2694 { 0, NULL }
2697 static value_string_ext ansi_a_elem_cause_vals_ext = VALUE_STRING_EXT_INIT(ansi_a_elem_cause_vals);
2699 static uint8_t
2700 elem_cause(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
2702 uint8_t oct;
2703 uint32_t curr_offset;
2704 const char *str = NULL;
2706 curr_offset = offset;
2708 oct = tvb_get_uint8(tvb, curr_offset);
2710 if (oct & 0x80)
2712 /* 2 octet cause */
2714 proto_tree_add_item(tree, hf_ansi_a_cause_2_ext, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
2715 proto_tree_add_item(tree, hf_ansi_a_cause_2, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
2717 curr_offset += 2;
2719 else
2721 proto_tree_add_item(tree, hf_ansi_a_cause_1_ext, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2723 str = val_to_str_ext_const(oct & 0x7f, &ansi_a_elem_cause_vals_ext, "Reserved for future use");
2725 proto_tree_add_uint_format_value(tree, hf_ansi_a_cause_1, tvb, curr_offset, 1, oct,
2726 "%s (%u)", str, oct & 0x7f);
2728 proto_item_append_text(data_p->elem_item, " - (%u) %s", oct & 0x7f, str);
2730 curr_offset++;
2733 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
2735 return curr_offset - offset;
2739 * IOS 6.2.2.20
2740 * Formats everything after the discriminator, shared function.
2742 static uint8_t
2743 elem_cell_id_aux(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, uint8_t disc, proto_item *parent_item_p)
2745 uint32_t value;
2746 uint32_t market_id;
2747 uint32_t switch_num;
2748 uint32_t curr_offset;
2750 curr_offset = offset;
2752 switch (disc)
2754 case 0x02:
2755 value = tvb_get_ntohs(tvb, curr_offset);
2757 proto_tree_add_uint(tree, hf_ansi_a_cell_ci, tvb, curr_offset, 2, value);
2759 curr_offset += 2;
2761 if (parent_item_p)
2763 proto_item_append_text(parent_item_p, " - CI (%u)", value);
2765 break;
2767 case 0x05:
2768 value = tvb_get_ntohs(tvb, curr_offset);
2770 proto_tree_add_uint(tree, hf_ansi_a_cell_lac, tvb, curr_offset, 2, value);
2772 curr_offset += 2;
2774 if (parent_item_p)
2776 proto_item_append_text(parent_item_p, " - LAC (%u)", value);
2778 break;
2780 case 0x07:
2781 market_id = tvb_get_ntohs(tvb, curr_offset);
2782 switch_num = tvb_get_uint8(tvb, curr_offset + 2);
2784 value = tvb_get_ntoh24(tvb, curr_offset);
2786 proto_tree_add_uint_format(tree, hf_ansi_a_cell_mscid, tvb, curr_offset, 3,
2787 value,
2788 "Market ID %u Switch Number %u",
2789 market_id, switch_num);
2791 curr_offset += 3;
2793 value = tvb_get_ntohs(tvb, curr_offset);
2795 proto_tree_add_uint(tree, hf_ansi_a_cell_ci, tvb, curr_offset, 2, value);
2797 curr_offset += 2;
2799 if (parent_item_p)
2801 proto_item_append_text(parent_item_p, " - Market ID (%u) Switch Number (%u) CI (%u)",
2802 market_id, switch_num, value);
2804 break;
2806 default:
2807 proto_tree_add_expert_format(tree, pinfo, &ei_ansi_a_unknown_format, tvb, curr_offset, len,
2808 "Cell ID - Non IOS format");
2810 curr_offset += len;
2811 break;
2814 return curr_offset - offset;
2817 static uint8_t
2818 elem_cell_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
2820 uint8_t oct;
2821 uint32_t curr_offset;
2823 curr_offset = offset;
2825 proto_tree_add_item(tree, hf_ansi_a_cell_id_disc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2827 oct = tvb_get_uint8(tvb, curr_offset);
2829 curr_offset += 1;
2831 curr_offset +=
2832 elem_cell_id_aux(tvb, pinfo, tree, curr_offset, len - (curr_offset - offset), oct, data_p->elem_item);
2834 /* no length check possible */
2836 return curr_offset - offset;
2840 * IOS 6.2.2.21
2842 static uint8_t
2843 elem_cell_id_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
2845 uint8_t oct;
2846 uint16_t consumed;
2847 uint8_t num_cells;
2848 uint32_t curr_offset;
2849 proto_item *item;
2850 proto_tree *subtree;
2852 curr_offset = offset;
2854 proto_tree_add_item(tree, hf_ansi_a_cell_id_disc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2856 oct = tvb_get_uint8(tvb, curr_offset);
2858 curr_offset++;
2860 NO_MORE_DATA_CHECK(len);
2862 num_cells = 0;
2866 subtree =
2867 proto_tree_add_subtree_format(tree, tvb, curr_offset, -1,
2868 ett_cell_list, &item, "Cell [%u]", num_cells + 1);
2870 consumed =
2871 elem_cell_id_aux(tvb, pinfo, subtree, curr_offset, len - (curr_offset - offset), oct, item);
2873 proto_item_set_len(item, consumed);
2875 curr_offset += consumed;
2877 num_cells++;
2879 while ((len - (curr_offset - offset)) > 0);
2881 proto_item_append_text(data_p->elem_item, " - %u cell%s", num_cells, plurality(num_cells, "", "s"));
2883 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
2885 return curr_offset - offset;
2889 * IOS 6.2.2.22
2891 static uint8_t
2892 elem_cic(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, uint32_t offset, unsigned len _U_, ansi_a_shared_data_t *data_p)
2894 uint32_t value;
2895 uint32_t curr_offset;
2896 proto_item *item;
2897 proto_tree *subtree;
2899 curr_offset = offset;
2901 item =
2902 proto_tree_add_item(tree, hf_ansi_a_cic, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
2904 subtree = proto_item_add_subtree(item, ett_cic);
2906 proto_tree_add_item(subtree, hf_ansi_a_cic_pcm_multi, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
2907 proto_tree_add_item(subtree, hf_ansi_a_cic_timeslot, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
2909 value = tvb_get_ntohs(tvb, curr_offset);
2911 proto_item_append_text(data_p->elem_item, " - (%u) (0x%04x)", value, value);
2913 curr_offset += 2;
2915 /* no length check possible */
2917 return curr_offset - offset;
2921 * IOS 6.2.2.23
2923 static uint8_t
2924 elem_cic_ext(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, uint32_t offset, unsigned len _U_, ansi_a_shared_data_t *data_p)
2926 uint8_t oct;
2927 uint32_t value;
2928 uint32_t curr_offset;
2929 proto_item *item;
2930 proto_tree *subtree;
2931 const char *str;
2933 curr_offset = offset;
2935 item =
2936 proto_tree_add_item(tree, hf_ansi_a_cic_ext_cic, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
2938 subtree = proto_item_add_subtree(item, ett_cic);
2940 proto_tree_add_item(subtree, hf_ansi_a_cic_ext_pcm_multi, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
2941 proto_tree_add_item(subtree, hf_ansi_a_cic_ext_timeslot, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
2943 value = tvb_get_ntohs(tvb, curr_offset);
2945 proto_item_append_text(data_p->elem_item, " - (%u) (0x%04x)", value, value);
2947 curr_offset += 2;
2949 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2951 oct = tvb_get_uint8(tvb, curr_offset);
2953 switch (oct & 0x0f)
2955 case 0x00: str = "Full-rate"; break;
2956 default:
2957 str = "Reserved";
2958 break;
2961 proto_tree_add_uint_format_value(tree, hf_ansi_a_cic_ext_circuit_mode, tvb, curr_offset, 1,
2962 oct, "%s (%u)", str, oct);
2964 curr_offset++;
2966 /* no length check possible */
2968 return curr_offset - offset;
2972 * IOS 5 4.2.21
2974 static uint8_t
2975 elem_ssci(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p _U_)
2977 uint32_t curr_offset;
2979 curr_offset = offset;
2981 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_fc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2982 proto_tree_add_item(tree, hf_ansi_a_ssci_mopd, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2983 proto_tree_add_item(tree, hf_ansi_a_ssci_geci, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2985 curr_offset++;
2987 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
2989 return curr_offset - offset;
2993 * IOS 6.2.2.24
2994 * UNUSED
2997 #define ANSI_A_CELL_ID_LEN(_disc) ((_disc == 7) ? 5 : 2)
3000 * IOS 6.2.2.25
3001 * Formats everything no length check
3003 static uint8_t
3004 elem_downlink_re_aux(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, proto_item *parent_item_p)
3006 uint8_t disc;
3007 uint16_t consumed;
3008 uint8_t num_cells;
3009 uint8_t curr_cell;
3010 uint32_t curr_offset;
3011 proto_item *item;
3012 proto_tree *subtree;
3014 curr_offset = offset;
3016 proto_tree_add_item(tree, hf_ansi_a_downlink_re_num_cells, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3018 num_cells = tvb_get_uint8(tvb, curr_offset);
3020 curr_offset += 1;
3022 NO_MORE_DATA_CHECK(len);
3024 proto_tree_add_item(tree, hf_ansi_a_cell_id_disc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3026 disc = tvb_get_uint8(tvb, curr_offset);
3028 curr_offset += 1;
3030 NO_MORE_DATA_CHECK(len);
3032 curr_cell = 0;
3036 SHORT_DATA_CHECK(len - (curr_offset - offset), (uint32_t) 3 + ANSI_A_CELL_ID_LEN(disc));
3038 subtree =
3039 proto_tree_add_subtree_format(tree, tvb, curr_offset, -1,
3040 ett_cell_list, &item, "Cell [%u]", curr_cell + 1);
3042 consumed =
3043 elem_cell_id_aux(tvb, pinfo, subtree, curr_offset, len - (curr_offset - offset), disc, item);
3045 proto_item_set_len(item, consumed);
3047 curr_offset += consumed;
3049 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_c0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3050 proto_tree_add_item(tree, hf_ansi_a_downlink_re_sig_str_raw, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3052 curr_offset += 1;
3054 proto_tree_add_item(tree, hf_ansi_a_downlink_re_cdma_towd, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
3056 curr_offset += 2;
3058 curr_cell++;
3060 while (curr_cell < num_cells);
3062 proto_item_append_text(parent_item_p, " - %u cell%s", num_cells, plurality(num_cells, "", "s"));
3064 return curr_offset - offset;
3068 * IOS 6.2.2.25
3070 static uint8_t
3071 elem_downlink_re(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
3073 uint32_t curr_offset;
3075 curr_offset = offset;
3077 curr_offset +=
3078 elem_downlink_re_aux(tvb, pinfo, tree, offset, len, data_p->elem_item);
3080 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
3082 return curr_offset - offset;
3086 * IOS 6.2.2.140
3088 static uint8_t
3089 elem_downlink_re_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
3091 uint16_t consumed;
3092 uint8_t num_envs;
3093 uint32_t curr_offset;
3094 proto_item *item;
3095 proto_tree *subtree;
3097 curr_offset = offset;
3099 num_envs = 0;
3101 while ((len - (curr_offset - offset)) > 0)
3103 subtree =
3104 proto_tree_add_subtree_format(tree, tvb, curr_offset, -1,
3105 ett_re_list, &item, "Environment [%u]",
3106 num_envs + 1);
3108 proto_tree_add_item(subtree, hf_ansi_a_downlink_re_entry_env_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3110 curr_offset++;
3112 consumed =
3113 elem_downlink_re_aux(tvb, pinfo, subtree, curr_offset, len - (curr_offset - offset), item);
3116 * +1 is for environment length
3118 proto_item_set_len(item, consumed + 1);
3120 curr_offset += consumed;
3122 num_envs++;
3125 proto_item_append_text(data_p->elem_item, " - %u environment%s", num_envs, plurality(num_envs, "", "s"));
3127 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
3129 return curr_offset - offset;
3133 * IOS 6.2.2.26
3134 * UNUSED
3138 * IOS 6.2.2.27
3139 * UNUSED
3143 * IOS 6.2.2.28
3144 * UNUSED
3148 * IOS 6.2.2.29
3149 * UNUSED
3153 * IOS 6.2.2.30
3155 static uint8_t
3156 elem_pdsn_ip_addr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p _U_)
3158 uint32_t curr_offset;
3160 curr_offset = offset;
3162 proto_tree_add_item(tree, hf_ansi_a_pdsn_ip_addr, tvb, curr_offset, len, ENC_BIG_ENDIAN);
3164 curr_offset += len;
3166 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
3168 return curr_offset - offset;
3172 * IOS 5 4.2.24
3174 static uint8_t
3175 elem_s_pdsn_ip_addr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p _U_)
3177 uint32_t curr_offset;
3179 curr_offset = offset;
3181 proto_tree_add_item(tree, hf_ansi_a_s_pdsn_ip_addr, tvb, curr_offset, len, ENC_BIG_ENDIAN);
3183 curr_offset += len;
3185 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
3187 return curr_offset - offset;
3191 * IOS 6.2.2.31
3193 * IOS 5 4.2.25
3195 static uint8_t
3196 elem_ho_pow_lev(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
3198 uint16_t consumed;
3199 uint8_t num_cells;
3200 proto_item *item;
3201 proto_tree *subtree;
3202 uint32_t curr_offset;
3204 curr_offset = offset;
3206 proto_tree_add_item(tree, hf_ansi_a_ho_pow_lev_num_cells, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3208 curr_offset++;
3210 SHORT_DATA_CHECK(len - (curr_offset - offset), (uint32_t) 6);
3212 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_80, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3213 proto_tree_add_item(tree, hf_ansi_a_ho_pow_lev_id_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3214 proto_tree_add_item(tree, hf_ansi_a_ho_pow_lev_pow_lev, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3216 curr_offset++;
3218 subtree =
3219 proto_tree_add_subtree_format(tree, tvb, curr_offset, -1,
3220 ett_cell_list, &item, "Cell [1]");
3222 consumed =
3223 elem_cell_id_aux(tvb, pinfo, subtree, curr_offset, len - (curr_offset - offset), 0x7, item);
3225 proto_item_set_len(item, consumed);
3227 curr_offset += consumed;
3229 num_cells = 0;
3231 while ((len - (curr_offset - offset)) >= 3)
3233 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_e0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3234 proto_tree_add_item(tree, hf_ansi_a_ho_pow_lev_pow_lev, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3236 curr_offset++;
3238 subtree =
3239 proto_tree_add_subtree_format(tree, tvb, curr_offset, -1,
3240 ett_cell_list, &item, "Cell [%u]", num_cells + 1);
3242 consumed =
3243 elem_cell_id_aux(tvb, pinfo, subtree, curr_offset, len - (curr_offset - offset), 0x2, item);
3245 proto_item_set_len(item, consumed);
3247 curr_offset += consumed;
3249 num_cells++;
3252 proto_item_append_text(data_p->elem_item, " - %u cell%s", num_cells, plurality(num_cells, "", "s"));
3254 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
3256 return curr_offset - offset;
3260 * IOS 6.2.2.32
3262 static uint8_t
3263 elem_uz_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
3265 uint32_t value;
3266 uint32_t curr_offset;
3268 curr_offset = offset;
3270 proto_tree_add_item(tree, hf_ansi_a_uz_id, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
3272 value = tvb_get_ntohs(tvb, curr_offset);
3274 proto_item_append_text(data_p->elem_item, " - (%u)", value);
3276 curr_offset += 2;
3278 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
3280 return curr_offset - offset;
3284 * IOS 6.2.2.33
3285 * UNUSED
3289 * IOS 5 4.2.77
3291 static uint8_t
3292 elem_info_rec_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
3294 uint8_t oct;
3295 uint32_t curr_offset;
3296 uint8_t num_recs;
3297 const char *str;
3299 curr_offset = offset;
3301 num_recs = 0;
3303 while ((len - (curr_offset - offset)) > 0)
3305 oct = tvb_get_uint8(tvb, curr_offset);
3307 str = val_to_str_const((uint32_t) oct, ansi_rev_ms_info_rec_str, "Reserved");
3309 proto_tree_add_uint_format(tree, hf_ansi_a_info_rec_req, tvb, curr_offset, 1,
3310 oct,
3311 "Information Record Type - %u: %s (%u)",
3312 num_recs + 1, str, oct);
3314 curr_offset++;
3316 num_recs++;
3319 proto_item_append_text(data_p->elem_item, " - %u request%s", num_recs, plurality(num_recs, "", "s"));
3321 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
3323 return curr_offset - offset;
3327 * IOS 6.2.2.34
3329 static const value_string ansi_a_is2000_chan_id_chan_rev_pilot_gating_rate_vals[] = {
3330 { 0x00, "Gating rate 1" },
3331 { 0x01, "Gating rate 1/2" },
3332 { 0x02, "Gating rate 1/4" },
3333 { 0x03, "Reserved" },
3334 { 0, NULL }
3337 static uint8_t
3338 elem_is2000_chan_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p _U_)
3340 uint8_t oct;
3341 uint8_t num_chans;
3342 uint8_t chan_num;
3343 uint32_t curr_offset;
3344 proto_tree *subtree;
3345 const char *str;
3347 curr_offset = offset;
3349 proto_tree_add_item(tree, hf_ansi_a_is2000_chan_id_otd, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3350 proto_tree_add_item(tree, hf_ansi_a_is2000_chan_id_chan_count, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3352 oct = tvb_get_uint8(tvb, curr_offset);
3354 proto_tree_add_uint_format_value(tree, hf_ansi_a_is2000_chan_id_frame_offset, tvb, curr_offset, 1,
3355 oct, "%u (%.2f ms)", oct & 0x0f, (oct & 0x0f) * 1.25);
3357 num_chans = (oct & 0x70) >> 4;
3359 curr_offset++;
3361 NO_MORE_DATA_CHECK(len);
3363 SHORT_DATA_CHECK(len - (curr_offset - offset), 6);
3365 chan_num = 0;
3369 subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, 6,
3370 ett_chan_list, NULL, "Channel [%u]", chan_num + 1);
3372 oct = tvb_get_uint8(tvb, curr_offset);
3374 switch (oct)
3376 case 0x01: str = "Fundamental Channel (FCH) TIA/EIA/IS-2000"; break;
3377 case 0x02: str = "Dedicated Control Channel (DCCH) TIA/EIA/IS-2000"; break;
3378 case 0x03: str = "Supplemental Channel (SCH) TIA/EIA/IS-2000"; break;
3379 default:
3380 str = "Reserved";
3381 break;
3384 proto_tree_add_uint_format_value(subtree, hf_ansi_a_is2000_chan_id_chan_chan_type, tvb, curr_offset, 1,
3385 oct, "%s", str);
3387 curr_offset += 1;
3389 switch (global_a_variant)
3391 case A_VARIANT_IOS401:
3392 proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_16_8000, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
3393 break;
3395 case A_VARIANT_IOS501:
3396 proto_tree_add_item(subtree, hf_ansi_a_is2000_chan_id_chan_rev_fch_gating, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
3397 break;
3400 proto_tree_add_item(subtree, hf_ansi_a_is2000_chan_id_chan_rev_pilot_gating_rate, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
3401 proto_tree_add_item(subtree, hf_ansi_a_is2000_chan_id_chan_qof_mask, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
3402 proto_tree_add_item(subtree, hf_ansi_a_is2000_chan_id_chan_walsh_code_chan_idx, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
3404 curr_offset += 2;
3407 * this field is odd in the IOS specification
3408 * one place (only as far as I can tell) that the bits are not MSB first
3410 * SEE THE SPEC BEFORE CHANGING
3412 proto_tree_add_expert(subtree, pinfo, &ei_ansi_a_is2000_chan_id_pilot_pn, tvb, curr_offset, 2);
3413 proto_tree_add_item(subtree, hf_ansi_a_is2000_chan_id_chan_pilot_pn_code, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
3415 * SEE THE SPEC BEFORE CHANGING
3417 * the field above has an odd encoding
3420 switch (global_a_variant)
3422 case A_VARIANT_IOS401:
3423 proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_24_007000, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
3424 break;
3426 case A_VARIANT_IOS501:
3427 proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_24_006000, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
3428 proto_tree_add_item(subtree, hf_ansi_a_is2000_chan_id_chan_power_combined, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
3429 break;
3432 proto_tree_add_item(subtree, hf_ansi_a_is2000_chan_id_chan_freq_incl, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
3433 proto_tree_add_item(subtree, hf_ansi_a_is2000_chan_id_chan_channel_number, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
3435 curr_offset += 3;
3437 chan_num++;
3439 while (((len - (curr_offset - offset)) >= 6) &&
3440 (chan_num < num_chans));
3442 switch (global_a_variant)
3444 case A_VARIANT_IOS501:
3445 SHORT_DATA_CHECK(len - (curr_offset - offset), 5);
3447 proto_tree_add_item(tree, hf_ansi_a_is2000_chan_id_chan_fdc_length, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3448 proto_tree_add_item(tree, hf_ansi_a_is2000_chan_id_chan_fdc_band_class, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
3449 proto_tree_add_item(tree, hf_ansi_a_is2000_chan_id_chan_fdc_fwd_chan_freq, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
3450 proto_tree_add_item(tree, hf_ansi_a_is2000_chan_id_chan_fdc_rev_chan_freq, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
3451 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_16_001f, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
3452 break;
3455 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
3457 return curr_offset - offset;
3461 * IOS 6.2.2.35
3462 * NO ASSOCIATED DATA
3466 * IOS 6.2.2.36
3468 * IOS 5 4.2.29
3470 static uint8_t
3471 elem_is95_ms_meas_chan_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
3473 uint32_t curr_offset;
3475 curr_offset = offset;
3477 proto_tree_add_item(tree, hf_ansi_a_is95_ms_meas_chan_id_band_class, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
3478 proto_tree_add_item(tree, hf_ansi_a_is95_ms_meas_chan_id_channel_number, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
3480 proto_item_append_text(data_p->elem_item, " - (ARFCN: %u)", tvb_get_ntohs(tvb, curr_offset) & 0x07ff);
3482 curr_offset += 2;
3484 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
3486 return curr_offset - offset;
3490 * IOS 5 4.2.33
3492 static uint8_t
3493 elem_auth_conf_param(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, uint32_t offset, unsigned len _U_, ansi_a_shared_data_t *data_p _U_)
3495 uint32_t curr_offset;
3497 curr_offset = offset;
3499 proto_tree_add_item(tree, hf_ansi_a_auth_conf_param_randc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3501 curr_offset++;
3503 /* no length check possible */
3505 return curr_offset - offset;
3509 * IOS 6.2.2.37
3511 static const value_string ansi_a_clg_party_ascii_num_ton_vals[] = {
3512 { 0, "Unknown" },
3513 { 1, "International number" },
3514 { 2, "National number" },
3515 { 3, "Network-specific number" },
3516 { 4, "Dedicated PAD access, short code" },
3517 { 5, "Reserved" },
3518 { 6, "Reserved" },
3519 { 7, "Reserved for extension" },
3520 { 0, NULL }
3523 static const value_string ansi_a_clg_party_ascii_num_plan_vals[] = {
3524 { 0, "Unknown" },
3525 { 1, "ISDN/Telephony Numbering (ITU recommendation E.164/E.163)" },
3526 { 2, "Reserved" },
3527 { 3, "Data Numbering (ITU-T Rec. X.121)" },
3528 { 4, "Telex Numbering (ITU-T Rec. F.69)" },
3529 { 5, "Reserved" },
3530 { 6, "Reserved" },
3531 { 7, "Reserved for extension" },
3532 { 8, "National Numbering" },
3533 { 9, "Private Numbering" },
3534 { 10, "Reserved" },
3535 { 11, "Reserved" },
3536 { 12, "Reserved" },
3537 { 13, "Reserved" },
3538 { 14, "Reserved" },
3539 { 15, "Reserved" },
3540 { 0, NULL }
3543 static uint8_t
3544 elem_clg_party_ascii_num(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
3546 uint8_t oct;
3547 uint32_t curr_offset;
3548 uint8_t *poctets;
3550 curr_offset = offset;
3552 proto_tree_add_item(tree, hf_ansi_a_extension_8_80, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3553 proto_tree_add_item(tree, hf_ansi_a_clg_party_ascii_num_ton, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3554 proto_tree_add_item(tree, hf_ansi_a_clg_party_ascii_num_plan, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3556 oct = tvb_get_uint8(tvb, curr_offset);
3558 curr_offset++;
3560 if (!(oct & 0x80))
3562 /* octet 3a */
3564 proto_tree_add_item(tree, hf_ansi_a_extension_8_80, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3565 proto_tree_add_item(tree, hf_ansi_a_clg_party_ascii_num_pi, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3566 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_1c, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3567 proto_tree_add_item(tree, hf_ansi_a_clg_party_ascii_num_si, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3569 curr_offset++;
3572 poctets = tvb_get_string_enc(pinfo->pool, tvb, curr_offset, len - (curr_offset - offset), ENC_ASCII|ENC_NA);
3574 proto_tree_add_string_format(tree, hf_ansi_a_clg_party_ascii_num, tvb, curr_offset, len - (curr_offset - offset),
3575 (char *) poctets,
3576 "Digits: %s",
3577 (char *) format_text(pinfo->pool, poctets, len - (curr_offset - offset)));
3579 proto_item_append_text(data_p->elem_item, " - (%s)", poctets);
3581 curr_offset += len - (curr_offset - offset);
3583 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
3585 return curr_offset - offset;
3589 * IOS 6.2.2.38
3591 static uint8_t
3592 elem_l3_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
3594 uint32_t curr_offset;
3595 tvbuff_t *l3_tvb;
3597 curr_offset = offset;
3599 proto_tree_add_item(tree, hf_ansi_a_layer3_info, tvb, curr_offset, len, ENC_NA);
3602 * dissect the embedded DTAP message
3604 l3_tvb = tvb_new_subset_length(tvb, curr_offset, len);
3606 call_dissector(dtap_handle, l3_tvb, pinfo, data_p->g_tree);
3608 curr_offset += len;
3610 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
3612 return curr_offset - offset;
3616 * IOS 6.2.2.39
3617 * Protocol Discriminator
3621 * IOS 6.2.2.40
3622 * Reserved Octet
3626 * IOS 6.2.2.41
3627 * Location Updating Type
3628 * UNUSED in SPEC!
3632 * IOS 6.2.2.42
3633 * Simple data no decode required
3637 * IOS 6.2.2.43
3639 static uint8_t
3640 elem_lai(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, uint32_t offset, unsigned len _U_, ansi_a_shared_data_t *data_p _U_)
3642 uint8_t oct;
3643 uint32_t curr_offset;
3644 char mcc[4];
3645 char mnc[4];
3647 curr_offset = offset;
3649 oct = tvb_get_uint8(tvb, curr_offset);
3651 mcc[0] = Dgt_tbcd.out[oct & 0x0f];
3652 mcc[1] = Dgt_tbcd.out[(oct & 0xf0) >> 4];
3654 oct = tvb_get_uint8(tvb, curr_offset+1);
3656 mcc[2] = Dgt_tbcd.out[(oct & 0x0f)];
3657 mcc[3] = '\0';
3659 proto_tree_add_string(tree, hf_ansi_a_lai_mcc, tvb, curr_offset, 2, mcc);
3661 mnc[2] = Dgt_tbcd.out[(oct & 0xf0) >> 4];
3663 oct = tvb_get_uint8(tvb, curr_offset+2);
3665 mnc[0] = Dgt_tbcd.out[(oct & 0x0f)];
3666 mnc[1] = Dgt_tbcd.out[(oct & 0xf0) >> 4];
3667 mnc[3] = '\0';
3669 proto_tree_add_string(tree, hf_ansi_a_lai_mnc, tvb, curr_offset + 1, 2, mnc);
3671 curr_offset += 3;
3673 proto_tree_add_item(tree, hf_ansi_a_lai_lac, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
3675 curr_offset += 2;
3677 /* no length check possible */
3679 return curr_offset - offset;
3683 * IOS 6.2.2.44
3685 static const value_string ansi_a_rej_cause_vals[] = {
3686 { 0x01, "Reserved" },
3687 { 0x02, "MIN/IMSI unknown in HLR" },
3688 { 0x03, "Illegal MS" },
3689 { 0x04, "TMSI/IMSI/MIN unknown in VLR" },
3690 { 0x05, "Reserved" },
3691 { 0x0b, "Roaming not allowed" },
3692 { 0x0c, "Location area not allowed" },
3693 { 0x20, "Service option not supported" },
3694 { 0x21, "Requested service option not subscribed" },
3695 { 0x22, "Service option temporarily out of order" },
3696 { 0x26, "Call cannot be identified" },
3697 { 0x51, "Network failure" },
3698 { 0x56, "Congestion" },
3699 { 0x62, "Message type non-existent or not implemented" },
3700 { 0x63, "Information element non-existent or not implemented" },
3701 { 0x64, "Invalid information element contents" },
3702 { 0x65, "Message not compatible with the call state" },
3703 { 0x66, "Protocol error, unspecified" },
3704 { 0x6e, "Invalid message, unspecified" },
3705 { 0x6f, "Mandatory information element error" },
3706 { 0, NULL }
3709 static uint8_t
3710 elem_rej_cause(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, uint32_t offset, unsigned len _U_, ansi_a_shared_data_t *data_p)
3712 uint8_t oct;
3713 uint32_t curr_offset;
3714 const char *str;
3716 curr_offset = offset;
3718 oct = tvb_get_uint8(tvb, curr_offset);
3720 str = val_to_str_const(oct, ansi_a_rej_cause_vals, "Reserved");
3721 proto_tree_add_uint_format_value(tree, hf_ansi_a_rej_cause, tvb, curr_offset, 1,
3722 oct, "%s (%u)", str, oct);
3724 if (data_p->message_item)
3726 proto_item_append_text(data_p->message_item, " - (%s)", str);
3729 curr_offset++;
3731 /* no length check possible */
3733 return curr_offset - offset;
3737 * IOS 5 4.2.78
3739 static uint8_t
3740 elem_anchor_pdsn_addr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p _U_)
3742 uint32_t curr_offset;
3744 curr_offset = offset;
3746 proto_tree_add_item(tree, hf_ansi_a_anchor_ip_addr, tvb, curr_offset, len, ENC_BIG_ENDIAN);
3748 curr_offset += len;
3750 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
3752 return curr_offset - offset;
3756 * IOS 5 4.2.80
3758 static uint8_t
3759 elem_anchor_pp_addr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p _U_)
3761 uint32_t curr_offset;
3763 curr_offset = offset;
3765 proto_tree_add_item(tree, hf_ansi_a_anchor_pp_ip_addr, tvb, curr_offset, len, ENC_BIG_ENDIAN);
3767 curr_offset += len;
3769 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
3771 return curr_offset - offset;
3775 * IOS 6.2.2.45
3777 static const value_string ansi_a_auth_chlg_param_rand_num_type_vals[] = {
3778 { 1, "RAND 32 bits" },
3779 { 2, "RANDU 24 bits" },
3780 { 4, "RANDSSD 56 bits" },
3781 { 8, "RANDBS 32 bits" },
3782 { 0, NULL }
3785 static uint8_t
3786 elem_auth_chlg_param(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
3788 uint8_t oct;
3789 uint32_t curr_offset;
3790 const char *str;
3792 curr_offset = offset;
3794 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3796 oct = tvb_get_uint8(tvb, curr_offset);
3798 str = val_to_str_const(oct & 0x0F, ansi_a_auth_chlg_param_rand_num_type_vals, "Reserved");
3799 proto_tree_add_uint_format_value(tree, hf_ansi_a_auth_chlg_param_rand_num_type, tvb, curr_offset, 1,
3800 oct, "%s (%u)", str, oct & 0x0f);
3802 proto_item_append_text(data_p->elem_item, " - (%s)", str);
3804 curr_offset++;
3806 proto_tree_add_item(tree, hf_ansi_a_auth_chlg_param_rand, tvb, curr_offset, len - (curr_offset - offset), ENC_NA);
3808 curr_offset += len - (curr_offset - offset);
3810 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
3812 return curr_offset - offset;
3816 * IOS 6.2.2.46
3818 static const value_string ansi_a_auth_resp_param_sig_type_vals[] = {
3819 { 1, "AUTHR" },
3820 { 2, "AUTHU" },
3821 { 4, "AUTHBS" },
3822 { 0, NULL }
3825 static uint8_t
3826 elem_auth_resp_param(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
3828 uint8_t oct;
3829 uint32_t curr_offset;
3830 const char *str;
3832 curr_offset = offset;
3834 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3836 oct = tvb_get_uint8(tvb, curr_offset);
3838 str = val_to_str_const(oct & 0x0F, ansi_a_auth_resp_param_sig_type_vals, "Reserved");
3839 proto_tree_add_uint_format_value(tree, hf_ansi_a_auth_resp_param_sig_type, tvb, curr_offset, 1,
3840 oct, "%s (%u)", str, oct & 0x0f);
3842 proto_item_append_text(data_p->elem_item, " - (%s)", str);
3844 curr_offset++;
3846 proto_tree_add_item(tree, hf_ansi_a_auth_resp_param_sig, tvb, curr_offset, len - (curr_offset - offset), ENC_NA);
3848 curr_offset += len - (curr_offset - offset);
3850 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
3852 return curr_offset - offset;
3856 * IOS 6.2.2.47
3858 static uint8_t
3859 elem_auth_param_count(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, uint32_t offset, unsigned len _U_, ansi_a_shared_data_t *data_p)
3861 uint8_t oct;
3862 uint32_t curr_offset;
3864 curr_offset = offset;
3866 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_c0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3867 proto_tree_add_item(tree, hf_ansi_a_auth_param_count_count, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3869 oct = tvb_get_uint8(tvb, curr_offset);
3871 proto_item_append_text(data_p->elem_item, " - (%u)", oct & 0x3f);
3873 curr_offset++;
3875 /* no length check possible */
3877 return curr_offset - offset;
3881 * IOS 6.2.2.48
3883 static uint8_t
3884 elem_mwi(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, uint32_t offset, unsigned len _U_, ansi_a_shared_data_t *data_p)
3886 uint8_t oct;
3887 uint32_t curr_offset;
3889 curr_offset = offset;
3891 proto_tree_add_item(tree, hf_ansi_a_mwi_num_messages, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3893 oct = tvb_get_uint8(tvb, curr_offset);
3895 proto_item_append_text(data_p->elem_item, " - (%u)", oct);
3897 curr_offset++;
3899 /* no length check possible */
3901 return curr_offset - offset;
3905 * IOS 6.2.2.49
3906 * Progress
3907 * UNUSED in SPEC and no IEI!
3911 * IOS 6.2.2.50
3915 * from the IOS specification and MAY not be the exact same as the ones defined in
3916 * the cdma2000 specification
3917 * (and even if they are you shouldn't share the definitions in case one or the other changes)
3919 static const value_string ansi_a_signal_signal_vals[] = {
3920 { 0x00, "Dial tone on" },
3921 { 0x01, "Ring back tone on" },
3922 { 0x02, "Intercept tone on" },
3923 { 0x03, "Network congestion (reorder) tone on" },
3924 { 0x04, "Busy tone on" },
3925 { 0x05, "Confirm tone on" },
3926 { 0x06, "Answer tone on" },
3927 { 0x07, "Call waiting tone on" },
3928 { 0x08, "Off-hook warning tone on" },
3929 { 0x3f, "Tones off" },
3930 { 0x40, "Normal Alerting" },
3931 { 0x41, "Inter-group Alerting" },
3932 { 0x42, "Special/Priority Alerting" },
3933 { 0x43, "Reserved (ISDN Alerting pattern 3)" },
3934 { 0x44, "Ping Ring (abbreviated alert)" },
3935 { 0x45, "Reserved (ISDN Alerting pattern 5)" },
3936 { 0x46, "Reserved (ISDN Alerting pattern 6)" },
3937 { 0x47, "Reserved (ISDN Alerting pattern 7)" },
3938 { 0x4f, "Alerting off" },
3939 { 0x63, "Abbreviated intercept" },
3940 { 0x65, "Abbreviated reorder" },
3941 { 0, NULL }
3944 static const value_string ansi_a_signal_alert_pitch_vals[] = {
3945 { 0x00, "Medium pitch (standard alert)" },
3946 { 0x01, "High pitch" },
3947 { 0x02, "Low pitch" },
3948 { 0x03, "Reserved" },
3949 { 0, NULL }
3952 static uint8_t
3953 elem_signal(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, uint32_t offset, unsigned len _U_, ansi_a_shared_data_t *data_p)
3955 uint8_t oct;
3956 uint32_t curr_offset;
3957 const char *str;
3959 curr_offset = offset;
3961 oct = tvb_get_uint8(tvb, curr_offset);
3963 str = val_to_str_const(oct, ansi_a_signal_signal_vals, "Unknown");
3964 proto_tree_add_item(tree, hf_ansi_a_signal_signal_value, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3966 proto_item_append_text(data_p->elem_item, " - (%s)", str);
3968 curr_offset++;
3970 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_fc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3971 proto_tree_add_item(tree, hf_ansi_a_signal_alert_pitch, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3973 curr_offset++;
3975 /* no length check possible */
3977 return curr_offset - offset;
3981 * IOS 6.2.2.51
3982 * CM Service Type
3986 * IOS 6.2.2.52
3988 * IOS 5 4.2.40
3991 * IS-634-A Table 6.62
3992 * IOS 5 Table 4.2.40-1
3994 static const value_string ansi_a_cld_party_bcd_num_ton_vals[] = {
3995 { 0, "Unknown" },
3996 { 1, "International number" },
3997 { 2, "National number" },
3998 { 3, "Network specific number" },
3999 { 4, "Dedicated PAD access, short code" },
4000 { 5, "Reserved" },
4001 { 6, "Reserved" },
4002 { 7, "Reserved for extension" },
4003 { 0, NULL }
4007 * IS-634-A Table 6.63
4008 * IOS 5 Table 4.2.40-2
4010 static const value_string ansi_a_cld_party_bcd_num_plan_vals[] = {
4011 { 0x00, "Unknown" },
4012 { 0x01, "ISDN/telephony number plan (ITU recommendation E.164/E.163)" },
4013 { 0x02, "Reserved" },
4014 { 0x03, "Data number plan (ITU recommendation X.121)" },
4015 { 0x04, "Telex numbering plan (ITU recommendation F.69)" },
4016 { 0x05, "Reserved" },
4017 { 0x06, "Reserved" },
4018 { 0x07, "Reserved for extension" },
4019 { 0x08, "National numbering plan" },
4020 { 0x09, "Private numbering plan" },
4021 { 0x0a, "Reserved" },
4022 { 0x0b, "Reserved" },
4023 { 0x0c, "Reserved" },
4024 { 0x0d, "Reserved" },
4025 { 0x0e, "Reserved" },
4026 { 0x0f, "Reserved" },
4027 { 0, NULL }
4030 static uint8_t
4031 elem_cld_party_bcd_num(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
4033 uint32_t curr_offset;
4034 const char *str;
4036 curr_offset = offset;
4038 proto_tree_add_item(tree, hf_ansi_a_extension_8_80, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4039 proto_tree_add_item(tree, hf_ansi_a_clg_party_bcd_num_ton, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4040 proto_tree_add_item(tree, hf_ansi_a_clg_party_bcd_num_plan, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4042 curr_offset++;
4044 if (curr_offset - offset >= len) /* Sanity check */
4045 return (curr_offset - offset);
4047 str = tvb_bcd_dig_to_str(pinfo->pool, tvb, curr_offset, len - (curr_offset - offset), &Dgt_tbcd, false);
4048 proto_tree_add_string(tree, hf_ansi_a_cld_party_bcd_num, tvb, curr_offset, len - (curr_offset - offset), str);
4050 proto_item_append_text(data_p->elem_item, " - (%s)", str);
4052 curr_offset += len - (curr_offset - offset);
4054 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
4056 return curr_offset - offset;
4060 * IOS 6.2.2.54
4062 static uint8_t
4063 elem_qos_params(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
4065 uint8_t oct;
4066 uint32_t curr_offset;
4068 curr_offset = offset;
4070 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4071 proto_tree_add_item(tree, hf_ansi_a_qos_params_packet_priority, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4073 oct = tvb_get_uint8(tvb, curr_offset);
4075 proto_item_append_text(data_p->elem_item, " - (%u)", oct & 0x0f);
4077 curr_offset++;
4079 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
4081 return curr_offset - offset;
4085 * IOS 6.2.2.55
4087 static const value_string ansi_a_cause_l3_coding_standard_vals[] = {
4088 { 0, "Standard as described in ITU Recommendation Q.931" },
4089 { 1, "Reserved for other international standards" },
4090 { 2, "National standard" },
4091 { 3, "Reserved for other international standards" },
4092 { 0, NULL }
4095 static const value_string ansi_a_cause_l3_location_vals[] = {
4096 { 0, "User" },
4097 { 1, "Private network serving the local user" },
4098 { 2, "Public network serving the local user" },
4099 { 3, "Transit network" },
4100 { 4, "Public network serving the remote user" },
4101 { 5, "Private network serving the remote user" },
4102 { 6, "Reserved" },
4103 { 7, "International network" },
4104 { 8, "Reserved" },
4105 { 9, "Reserved" },
4106 { 10, "Network beyond interworking point" },
4107 { 11, "Reserved" },
4108 { 12, "Reserved" },
4109 { 13, "Reserved" },
4110 { 14, "Reserved" },
4111 { 15, "Reserved" },
4112 { 0, NULL }
4115 static const value_string ansi_a_cause_l3_class_vals[] = {
4116 { 0, "normal event" },
4117 { 1, "normal event" },
4118 { 2, "resource unavailable" },
4119 { 3, "service or option not available" },
4120 { 4, "service or option not implemented" },
4121 { 5, "invalid message (e.g., parameter out of range)" },
4122 { 6, "protocol error (e.g., unknown message)" },
4123 { 7, "interworking" },
4124 { 0, NULL }
4127 static const value_string ansi_a_cause_l3_value_vals[] = {
4128 { 0x01, "Unassigned (unallocated) number" },
4129 { 0x03, "No route to destination" },
4130 { 0x06, "Channel unacceptable" },
4131 { 0x0F, "Procedure failed" },
4132 { 0x10, "Normal Clearing" },
4133 { 0x11, "User busy" },
4134 { 0x12, "No user responding" },
4135 { 0x13, "User alerting, no answer" },
4136 { 0x15, "Call rejected" },
4137 { 0x16, "Number changed New destination" },
4138 { 0x1A, "Non selected user clearing" },
4139 { 0x1B, "Destination out of order" },
4140 { 0x1C, "Invalid number format (incomplete number)" },
4141 { 0x1D, "Facility rejected" },
4142 { 0x1F, "Normal, unspecified" },
4143 { 0x22, "No circuit/channel available" },
4144 { 0x26, "Network out of order" },
4145 { 0x29, "Temporary failure" },
4146 { 0x2A, "Switching equipment congestion" },
4147 { 0x2B, "Access information discarded information element ids" },
4148 { 0x2C, "requested circuit/channel not available" },
4149 { 0x2F, "Resources unavailable, unspecified" },
4150 { 0x31, "Quality of service unavailable" },
4151 { 0x32, "Requested facility not subscribed" },
4152 { 0x33, "Request MUX option or rates unavailable" },
4153 { 0x39, "Bearer capability not authorized" },
4154 { 0x3A, "Bearer capability not presently available" },
4155 { 0x3B, "SSD Update Rejected" },
4156 { 0x3F, "Service or option not available, unspecified" },
4157 { 0x41, "Bearer service not implemented" },
4158 { 0x45, "Requested facility not implement" },
4159 { 0x46, "Only restricted digital information bearer capability is available" },
4160 { 0x4F, "Service or option not implemented, unspecified" },
4161 { 0x51, "Reserved" },
4162 { 0x58, "Incompatible destination incompatible parameter" },
4163 { 0x5B, "Invalid transit network selection" },
4164 { 0x5F, "Invalid message, unspecified" },
4165 { 0x60, "Mandatory information element error information element identifier(s)" },
4166 { 0x61, "Message type nonexistent or not implemented message type" },
4167 { 0x62, "Message not compatible with control state message type or message type nonexistent or not implemented" },
4168 { 0x64, "Invalid information element contents Information element Identifier(s)" },
4169 { 0x65, "Message not compatible with call state message type" },
4170 { 0x6F, "Protocol error, unspecified" },
4171 { 0x7F, "Interworking, unspecified" },
4172 { 0, NULL }
4175 static value_string_ext ansi_a_cause_l3_value_vals_ext = VALUE_STRING_EXT_INIT(ansi_a_cause_l3_value_vals);
4177 static uint8_t
4178 elem_cause_l3(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
4180 uint8_t oct;
4181 uint32_t curr_offset;
4182 const char *str = NULL;
4184 curr_offset = offset;
4186 proto_tree_add_item(tree, hf_ansi_a_extension_8_80, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4187 proto_tree_add_item(tree, hf_ansi_a_cause_l3_coding_standard, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4188 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_10, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4189 proto_tree_add_item(tree, hf_ansi_a_cause_l3_location, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4191 curr_offset++;
4193 proto_tree_add_item(tree, hf_ansi_a_extension_8_80, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4195 proto_tree_add_item(tree, hf_ansi_a_cause_l3_class, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4196 proto_tree_add_item(tree, hf_ansi_a_cause_l3_value_without_class, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4198 oct = tvb_get_uint8(tvb, curr_offset);
4200 str = val_to_str_ext_const(oct & 0x7f, &ansi_a_cause_l3_value_vals_ext, "Reserved");
4201 proto_tree_add_uint_format_value(tree, hf_ansi_a_cause_l3_value, tvb, curr_offset, 1,
4202 oct & 0x7f, "%s (%u)", str, oct & 0x7f);
4204 proto_item_append_text(data_p->elem_item, " - (%u) %s", oct & 0x7f, str);
4206 curr_offset++;
4208 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
4210 return curr_offset - offset;
4214 * IOS 6.2.2.56
4215 * A3/A7
4219 * IOS 6.2.2.57
4220 * A3/A7
4224 * IOS 6.2.2.58
4226 static uint8_t
4227 elem_xmode(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
4229 uint8_t oct;
4230 uint32_t curr_offset;
4232 curr_offset = offset;
4234 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_fe, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4236 oct = tvb_get_uint8(tvb, curr_offset);
4238 proto_tree_add_item(tree, hf_ansi_a_xmode_tfo_mode, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4240 proto_item_append_text(data_p->elem_item, " - (%s)",
4241 tfs_get_string(oct & 0x01, &tfs_ansi_a_xmode_tfo_mode));
4243 curr_offset++;
4245 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
4247 return curr_offset - offset;
4251 * IOS 6.2.2.59
4252 * UNUSED
4256 * IOS 6.2.2.60
4257 * NO ASSOCIATED DATA
4261 * IOS 6.2.2.61
4263 * IOS 5 4.2.45
4265 static const value_string ansi_a_reg_type_type_vals[] = {
4266 { 0, "Timer-based" },
4267 { 1, "Power-up" },
4268 { 2, "Zone-based" },
4269 { 3, "Power-down" },
4270 { 4, "Parameter-change" },
4271 { 5, "Ordered" },
4272 { 6, "Distance-based" },
4273 { 7, "User Zone-based" },
4274 { 9, "BCMC Registration" },
4275 { 0, NULL }
4278 static uint8_t
4279 elem_reg_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, uint32_t offset, unsigned len _U_, ansi_a_shared_data_t *data_p)
4281 uint8_t oct;
4282 uint32_t curr_offset;
4283 const char *str;
4285 curr_offset = offset;
4287 oct = tvb_get_uint8(tvb, curr_offset);
4289 str = val_to_str_const(oct, ansi_a_reg_type_type_vals, "Reserved");
4290 proto_tree_add_uint_format_value(tree, hf_ansi_a_reg_type_type, tvb, curr_offset, 1,
4291 oct, "%s", str);
4293 proto_item_append_text(data_p->elem_item, " - (%s)", str);
4295 curr_offset++;
4297 /* no length check possible */
4299 return curr_offset - offset;
4303 * IOS 6.2.2.62
4305 * IOS 5 4.2.46
4307 static uint8_t
4308 elem_tag(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, uint32_t offset, unsigned len _U_, ansi_a_shared_data_t *data_p)
4310 uint32_t value;
4311 uint32_t curr_offset;
4313 curr_offset = offset;
4315 proto_tree_add_item(tree, hf_ansi_a_tag_value, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
4317 value = tvb_get_ntohl(tvb, curr_offset);
4319 proto_item_append_text(data_p->elem_item, " - (%u)", value);
4321 curr_offset += 4;
4323 /* no length check possible */
4325 return curr_offset - offset;
4329 * IOS 6.2.2.63
4331 * IOS 5 4.2.47
4333 static uint8_t
4334 elem_hho_params(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, uint32_t offset, unsigned len _U_, ansi_a_shared_data_t *data_p)
4336 uint8_t oct;
4337 uint32_t curr_offset;
4338 const char *str;
4340 curr_offset = offset;
4342 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_e0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4343 proto_tree_add_item(tree, hf_ansi_a_hho_params_band_class, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4345 oct = tvb_get_uint8(tvb, curr_offset);
4347 str = val_to_str_const(oct & 0x1f, ansi_a_band_class_vals, "Reserved");
4349 proto_item_append_text(data_p->elem_item, " - (%s)", str);
4351 curr_offset++;
4353 proto_tree_add_item(tree, hf_ansi_a_hho_params_num_pream_frames, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4354 proto_tree_add_item(tree, hf_ansi_a_hho_params_reset_l2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4355 proto_tree_add_item(tree, hf_ansi_a_hho_params_reset_fpc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4356 proto_tree_add_item(tree, hf_ansi_a_hho_params_enc_mode, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4357 proto_tree_add_item(tree, hf_ansi_a_hho_params_private_lcm, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4359 curr_offset++;
4361 switch (global_a_variant)
4363 case A_VARIANT_IOS401:
4364 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_e0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4365 break;
4367 case A_VARIANT_IOS501:
4368 proto_tree_add_item(tree, hf_ansi_a_hho_params_rev_pwr_cntl_delay_incl, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4369 proto_tree_add_item(tree, hf_ansi_a_hho_params_rev_pwr_cntl_delay, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4370 break;
4373 proto_tree_add_item(tree, hf_ansi_a_hho_params_nom_pwr_ext, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4374 proto_tree_add_item(tree, hf_ansi_a_hho_params_nom_pwr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4376 curr_offset++;
4378 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_c0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4379 proto_tree_add_item(tree, hf_ansi_a_hho_params_fpc_subchan_info, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4380 proto_tree_add_item(tree, hf_ansi_a_hho_params_fpc_subchan_info_incl, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4382 curr_offset++;
4384 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4385 proto_tree_add_item(tree, hf_ansi_a_hho_params_pwr_cntl_step, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4386 proto_tree_add_item(tree, hf_ansi_a_hho_params_pwr_cntl_step_incl, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4388 curr_offset++;
4390 /* no length check possible */
4392 return curr_offset - offset;
4396 * IOS 6.2.2.64
4397 * UNUSED
4401 * IOS 6.2.2.65
4403 static uint8_t
4404 elem_sw_ver(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
4406 uint8_t major, minor, point;
4407 uint32_t curr_offset;
4409 curr_offset = offset;
4411 proto_tree_add_item(tree, hf_ansi_a_sw_ver_major, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4413 major = tvb_get_uint8(tvb, curr_offset);
4415 curr_offset++;
4417 proto_tree_add_item(tree, hf_ansi_a_sw_ver_minor, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4419 minor = tvb_get_uint8(tvb, curr_offset);
4421 curr_offset++;
4423 proto_tree_add_item(tree, hf_ansi_a_sw_ver_point, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4425 point = tvb_get_uint8(tvb, curr_offset);
4427 proto_item_append_text(data_p->elem_item, " - (IOS %u.%u.%u)", major, minor, point);
4429 curr_offset++;
4431 if (len > 3)
4433 proto_tree_add_item(tree, hf_ansi_a_manufacturer_software_info, tvb, curr_offset, len - 3, ENC_NA);
4435 curr_offset += len - 3;
4438 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
4440 return curr_offset - offset;
4444 * IOS 6.2.2.66
4446 static uint8_t
4447 elem_so_aux(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, uint32_t offset, unsigned len _U_, uint16_t *value_p)
4449 proto_tree_add_item(tree, hf_ansi_a_so_proprietary_ind, tvb, offset, 2, ENC_BIG_ENDIAN);
4450 proto_tree_add_item(tree, hf_ansi_a_so_revision, tvb, offset, 2, ENC_BIG_ENDIAN);
4451 proto_tree_add_item(tree, hf_ansi_a_so_base_so_num, tvb, offset, 2, ENC_BIG_ENDIAN);
4453 *value_p = tvb_get_ntohs(tvb, offset);
4455 proto_tree_add_uint_format(tree, hf_ansi_a_so, tvb, offset, 2,
4456 *value_p,
4457 "%s",
4458 ansi_a_so_int_to_str(*value_p));
4460 /* no length check possible */
4462 return 2;
4465 static uint8_t
4466 elem_so(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
4468 uint16_t value;
4469 uint32_t curr_offset;
4471 curr_offset = offset + elem_so_aux(tvb, pinfo, tree, offset, len, &value);
4473 proto_item_append_text(data_p->elem_item, " - (%u) %s", value, ansi_a_so_int_to_str(value));
4474 if (data_p->message_item)
4476 proto_item_append_text(data_p->message_item, " - SO (%u)", value);
4478 if (global_a_info_display)
4480 col_append_fstr(pinfo->cinfo, COL_INFO, "- SO (%u)", value);
4483 /* no length check possible */
4485 return curr_offset - offset;
4489 * IOS 5 4.2.73
4491 static uint8_t
4492 elem_soci(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
4494 uint8_t oct;
4495 uint32_t curr_offset;
4497 curr_offset = offset;
4499 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f8, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4500 proto_tree_add_item(tree, hf_ansi_a_soci, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4502 oct = tvb_get_uint8(tvb, curr_offset);
4504 proto_item_append_text(data_p->elem_item, " - (%u)", oct);
4506 curr_offset++;
4508 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
4510 return curr_offset - offset;
4514 * IOS 5 4.2.74
4516 static uint8_t
4517 elem_so_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
4519 uint8_t num_so;
4520 uint8_t inst;
4521 uint32_t curr_offset;
4522 proto_item *item;
4523 proto_tree *subtree;
4525 curr_offset = offset;
4527 proto_tree_add_item(tree, hf_ansi_a_so_list_num, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4529 num_so = tvb_get_uint8(tvb, curr_offset);
4531 proto_item_append_text(data_p->elem_item, " - %u service options", num_so);
4533 curr_offset += 1;
4535 NO_MORE_DATA_CHECK(len);
4537 SHORT_DATA_CHECK(len - (curr_offset - offset), 3);
4539 inst = 0;
4543 uint16_t value;
4545 subtree =
4546 proto_tree_add_subtree_format(tree, tvb, curr_offset, 3,
4547 ett_so_list, &item, "Service Option [%u]",
4548 inst + 1);
4550 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_c0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4551 proto_tree_add_item(tree, hf_ansi_a_so_list_sr_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4552 proto_tree_add_item(tree, hf_ansi_a_so_list_soci, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4554 curr_offset += 1;
4556 curr_offset += elem_so_aux(tvb, pinfo, subtree, curr_offset, len, &value);
4558 proto_item_append_text(item, " - (%u) %s", value, ansi_a_so_int_to_str(value));
4560 inst++;
4562 while (((len - (curr_offset - offset)) >= 3) &&
4563 (inst < num_so));
4565 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
4567 return curr_offset - offset;
4571 * IOS 5 4.2.70
4573 static uint8_t
4574 elem_acc_net_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
4576 uint32_t sid, nid, pzid;
4577 uint32_t curr_offset;
4579 curr_offset = offset;
4581 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_16_8000, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
4582 proto_tree_add_item(tree, hf_ansi_a_sid, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
4583 proto_tree_add_item(tree, hf_ansi_a_nid, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
4584 proto_tree_add_item(tree, hf_ansi_a_pzid, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4586 sid = tvb_get_ntohs(tvb, curr_offset) & 0x7fff;
4588 curr_offset += 2;
4590 nid = tvb_get_ntohs(tvb, curr_offset);
4592 curr_offset += 2;
4594 pzid = tvb_get_uint8(tvb, curr_offset);
4596 proto_item_append_text(data_p->elem_item, " - (SID/NID/PZID: %u/%u/%u)", sid, nid, pzid);
4598 curr_offset += 1;
4600 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
4602 return curr_offset - offset;
4606 #define ADDS_APP_UNKNOWN 0x00
4607 #define ADDS_APP_ADS 0x01
4608 #define ADDS_APP_FAX 0x02
4609 #define ADDS_APP_SMS 0x03
4610 #define ADDS_APP_OTA 0x04
4611 #define ADDS_APP_PDS 0x05 /* aka PLD */
4612 #define ADDS_APP_SDB 0x06
4613 #define ADDS_APP_HRPD 0x07
4614 #define ADDS_APP_EXT_INTL 0x3E
4615 #define ADDS_APP_EXT 0x3F
4617 static const value_string ansi_a_adds_vals[] = {
4618 { ADDS_APP_UNKNOWN, "UNKNOWN" },
4619 { ADDS_APP_ADS, "ADS" },
4620 { ADDS_APP_FAX, "FAX" },
4621 { ADDS_APP_SMS, "SMS" },
4622 { ADDS_APP_OTA, "OTA" },
4623 { ADDS_APP_PDS, "PDS" },
4624 { ADDS_APP_SDB, "SDB" },
4625 { ADDS_APP_HRPD, "HRPD" },
4626 { ADDS_APP_EXT_INTL, "EXT_INTL" },
4627 { ADDS_APP_EXT, "EXT" },
4628 { 0, NULL }
4632 * IOS 6.2.2.67
4634 static uint8_t
4635 elem_adds_user_part(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
4637 uint8_t oct;
4638 uint32_t curr_offset;
4639 tvbuff_t *adds_tvb;
4640 proto_tree *subtree;
4642 curr_offset = offset;
4644 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_c0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4645 proto_tree_add_item(tree, hf_ansi_a_adds_user_part_burst_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4647 oct = tvb_get_uint8(tvb, curr_offset);
4649 proto_item_append_text(data_p->elem_item, " - (%s)",
4650 val_to_str_const(oct & 0x3f, ansi_a_adds_vals, "Reserved"));
4652 curr_offset++;
4654 subtree = proto_tree_add_subtree(tree, tvb, curr_offset, len - 1, ett_adds_user_part, NULL, "Application Data Message");
4656 switch (oct & 0x3f)
4658 case ADDS_APP_SMS:
4659 adds_tvb = tvb_new_subset_length(tvb, curr_offset, len - 1);
4661 dissector_try_uint(is637_dissector_table, 0, adds_tvb, pinfo, data_p->g_tree);
4662 curr_offset += (len - 1);
4663 break;
4665 case ADDS_APP_OTA:
4666 adds_tvb = tvb_new_subset_length(tvb, curr_offset, len - 1);
4668 dissector_try_uint(is683_dissector_table, data_p->is_reverse, adds_tvb, pinfo, data_p->g_tree);
4670 curr_offset += (len - 1);
4671 break;
4673 case ADDS_APP_PDS:
4674 adds_tvb = tvb_new_subset_length(tvb, curr_offset, len - 1);
4676 dissector_try_uint(is801_dissector_table, data_p->is_reverse, adds_tvb, pinfo, data_p->g_tree);
4678 curr_offset += (len - 1);
4679 break;
4681 case ADDS_APP_SDB:
4683 * no SDB dissector, push to GRE/A11 dissector ?
4685 curr_offset += (len - 1);
4686 break;
4688 case ADDS_APP_EXT_INTL:
4690 /* FALLTHROUGH */
4692 case ADDS_APP_EXT:
4694 * no generic External International dissector
4695 * no generic External dissector
4697 proto_tree_add_item(subtree, hf_ansi_a_adds_user_part_ext_burst_type, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
4699 curr_offset += 2;
4701 proto_tree_add_item(subtree, hf_ansi_a_adds_user_part_ext_data, tvb, curr_offset, len - (curr_offset - offset), ENC_NA);
4703 curr_offset += len - (curr_offset - offset);
4704 break;
4706 default:
4708 * no sub-dissectors
4710 proto_tree_add_item(subtree, hf_ansi_a_adds_user_part_unknown_data, tvb, curr_offset, len - 1, ENC_NA);
4712 curr_offset += (len - 1);
4713 break;
4716 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
4718 return curr_offset - offset;
4722 * IOS 5 4.2.75
4724 static uint8_t
4725 elem_amps_hho_params(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p _U_)
4727 uint32_t curr_offset;
4729 curr_offset = offset;
4731 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_fc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4732 proto_tree_add_item(tree, hf_ansi_a_amps_hho_params_enc_mode, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4734 curr_offset++;
4736 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
4738 return curr_offset - offset;
4742 * IOS 6.2.2.68
4744 static const value_string ansi_a_is2000_scr_socr_for_chan_type_vals[] = {
4745 { 0x00, "The service option connection does not use Forward Traffic Channel traffic." },
4746 { 0x01, "The service option connection uses primary traffic on the Forward Traffic Channel." },
4747 { 0x02, "The service option connection uses secondary traffic on the Forward Traffic Channel." },
4748 { 0, NULL }
4751 static const value_string ansi_a_is2000_scr_socr_rev_chan_type_vals[] = {
4752 { 0x00, "The service option connection does not use Reverse Traffic Channel traffic." },
4753 { 0x01, "The service option connection uses primary traffic on the Reverse Traffic Channel." },
4754 { 0x02, "The service option connection uses secondary traffic on the Reverse Traffic Channel." },
4755 { 0, NULL }
4758 static uint8_t
4759 elem_is2000_scr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p _U_)
4761 uint8_t oct, num_con_rec, ii;
4762 uint8_t bit_mask, bit_offset;
4763 uint32_t curr_offset, saved_offset;
4764 uint32_t value;
4765 unsigned is2000_portion_len;
4766 proto_tree *scr_subtree, *subtree;
4767 const char *str = NULL;
4769 curr_offset = offset;
4771 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f8, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4772 proto_tree_add_item(tree, hf_ansi_a_is2000_scr_num_fill_bits, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4774 curr_offset++;
4776 NO_MORE_DATA_CHECK(len);
4778 is2000_portion_len = len - (curr_offset - offset);
4780 SHORT_DATA_CHECK(is2000_portion_len, 7);
4782 saved_offset = curr_offset;
4784 scr_subtree = proto_tree_add_subtree(tree, tvb, curr_offset, is2000_portion_len,
4785 ett_scr, NULL, "IS-2000 Service Configuration Record Content");
4787 proto_tree_add_item(scr_subtree, hf_ansi_a_is2000_scr_for_mux_option, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
4788 curr_offset += 2;
4790 proto_tree_add_item(scr_subtree, hf_ansi_a_is2000_scr_rev_mux_option, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
4791 curr_offset += 2;
4793 proto_tree_add_item(scr_subtree, hf_ansi_a_is2000_scr_for_fch_rate, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4794 curr_offset += 1;
4796 proto_tree_add_item(scr_subtree, hf_ansi_a_is2000_scr_rev_fch_rate, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4797 curr_offset += 1;
4799 proto_tree_add_item(scr_subtree, hf_ansi_a_is2000_scr_num_socr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4800 num_con_rec = tvb_get_uint8(tvb, curr_offset);
4801 curr_offset += 1;
4803 for (ii=0; ii < num_con_rec; ii++)
4805 oct = tvb_get_uint8(tvb, curr_offset);
4807 subtree = proto_tree_add_subtree_format(scr_subtree, tvb,
4808 curr_offset, oct /* !!! oct already includes the length octet itself */,
4809 ett_scr_socr, NULL, "Service option connection record [%u]", ii+1);
4810 curr_offset += 1;
4812 proto_tree_add_item(subtree, hf_ansi_a_is2000_scr_socr_soc_ref, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4813 curr_offset += 1;
4815 value = tvb_get_ntohs(tvb, curr_offset);
4817 proto_tree_add_uint_format_value(subtree, hf_ansi_a_is2000_scr_socr_so, tvb, curr_offset, 2,
4818 value,
4819 "%s (%u)",
4820 ansi_a_so_int_to_str(value), value);
4822 curr_offset += 2;
4824 oct = tvb_get_uint8(tvb, curr_offset);
4826 str = val_to_str_const((oct & 0xf0) >> 4, ansi_a_is2000_scr_socr_for_chan_type_vals, "Reserved");
4827 proto_tree_add_uint_format_value(subtree, hf_ansi_a_is2000_scr_socr_for_chan_type, tvb, curr_offset, 1,
4828 oct, "Forward Traffic Channel traffic type, %s", str);
4830 str = val_to_str_const(oct & 0x0f, ansi_a_is2000_scr_socr_rev_chan_type_vals, "Reserved");
4831 proto_tree_add_uint_format_value(subtree, hf_ansi_a_is2000_scr_socr_rev_chan_type, tvb, curr_offset, 1,
4832 oct, "Reverse Traffic Channel traffic type, %s", str);
4833 curr_offset += 1;
4835 proto_tree_add_item(subtree, hf_ansi_a_is2000_scr_socr_ui_enc_mode, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4836 proto_tree_add_item(subtree, hf_ansi_a_is2000_scr_socr_sr_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4837 proto_tree_add_item(subtree, hf_ansi_a_is2000_scr_socr_rlp_info_incl, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4839 oct = tvb_get_uint8(tvb, curr_offset);
4841 if (oct & 0x02)
4843 value = (oct & 0x01) << 3;
4845 curr_offset += 1;
4847 oct = tvb_get_uint8(tvb, curr_offset);
4849 value |= (oct & 0xe0) >> 5;
4851 proto_tree_add_item(subtree, hf_ansi_a_is2000_scr_socr_rlp_blob_len, tvb, curr_offset - 1, 2, ENC_BIG_ENDIAN);
4852 proto_tree_add_item(subtree, hf_ansi_a_is2000_scr_socr_rlp_blob_msb, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4854 curr_offset += 1;
4856 if (value > 1)
4858 proto_tree_add_item(subtree, hf_ansi_a_is2000_scr_socr_rlp_blob, tvb, curr_offset, value - 1, ENC_NA);
4859 curr_offset += value - 1;
4862 proto_tree_add_item(subtree, hf_ansi_a_is2000_scr_socr_rlp_blob_lsb, tvb, curr_offset, 1, ENC_NA);
4863 proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_8_1f, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4865 else
4867 proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_8_01, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4870 curr_offset += 1;
4873 proto_tree_add_item(scr_subtree, hf_ansi_a_is2000_scr_socr_fch_cc_incl, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4875 oct = tvb_get_uint8(tvb, curr_offset);
4877 if (oct & 0x80)
4879 proto_tree_add_item(scr_subtree, hf_ansi_a_is2000_scr_socr_fch_frame_size_support_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4880 proto_tree_add_item(scr_subtree, hf_ansi_a_is2000_scr_socr_for_fch_rc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4882 curr_offset += 1;
4884 oct = tvb_get_uint8(tvb, curr_offset);
4886 proto_tree_add_item(scr_subtree, hf_ansi_a_is2000_scr_socr_rev_fch_rc, tvb, curr_offset - 1, 2, ENC_BIG_ENDIAN);
4887 bit_mask = 0x08;
4888 bit_offset = 3;
4890 else
4892 bit_offset = 6;
4893 bit_mask = 0x40;
4896 proto_tree_add_bits_item(scr_subtree, hf_ansi_a_dcch_cc_incl, tvb, (curr_offset*8)+(8-bit_offset), 1, ENC_NA);
4897 if (oct & bit_mask)
4899 /* can't be bothered to do the rest of the decode */
4901 proto_tree_add_expert_format(scr_subtree, pinfo, &ei_ansi_a_undecoded, tvb, curr_offset, (is2000_portion_len - (curr_offset - saved_offset)), "DCCH + ? + Reserved");
4903 curr_offset += (is2000_portion_len - (curr_offset - saved_offset));
4905 else
4907 bit_mask >>= 1;
4908 bit_offset--;
4910 proto_tree_add_bits_item(scr_subtree, hf_ansi_a_for_sch_cc_incl, tvb, (curr_offset*8)+(8-bit_offset), 1, ENC_NA);
4911 if (oct & bit_mask)
4913 /* can't be bothered to do the rest of the decode */
4915 proto_tree_add_expert_format(scr_subtree, pinfo, &ei_ansi_a_undecoded, tvb, curr_offset, (is2000_portion_len - (curr_offset - saved_offset)), "FOR_SCH + ? + Reserved");
4917 curr_offset += (is2000_portion_len - (curr_offset - saved_offset));
4919 else
4921 bit_mask >>= 1;
4922 bit_offset--;
4924 proto_tree_add_bits_item(scr_subtree, hf_ansi_a_rev_sch_cc_incl, tvb, (curr_offset*8)+(8-bit_offset), 1, ENC_NA);
4926 if (oct & bit_mask)
4928 /* can't be bothered to do the rest of the decode */
4930 proto_tree_add_expert_format(scr_subtree, pinfo, &ei_ansi_a_undecoded, tvb, curr_offset, (is2000_portion_len - (curr_offset - saved_offset)), "REV_SCH + ? + Reserved");
4932 curr_offset += (is2000_portion_len - (curr_offset - saved_offset));
4934 else
4936 proto_tree_add_bits_item(scr_subtree, hf_ansi_a_reserved_bits_8_generic, tvb, (curr_offset*8)+(8-bit_offset), bit_offset, ENC_NA);
4937 curr_offset += 1;
4942 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
4944 return curr_offset - offset;
4948 * IOS 6.2.2.69
4950 static uint8_t
4951 elem_is2000_nn_scr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p _U_)
4953 uint32_t curr_offset;
4954 unsigned is2000_portion_len;
4955 uint8_t fill_bits;
4957 curr_offset = offset;
4959 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f8, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4960 proto_tree_add_item(tree, hf_ansi_a_is2000_nn_scr_num_fill_bits, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4962 fill_bits = tvb_get_uint8(tvb, curr_offset) & 0x07;
4964 curr_offset++;
4966 NO_MORE_DATA_CHECK(len);
4968 is2000_portion_len = len - (curr_offset - offset);
4970 if (is2000_portion_len > 0)
4972 SHORT_DATA_CHECK(len - (curr_offset - offset), is2000_portion_len);
4974 content_fill_aux(tvb, tree, curr_offset, is2000_portion_len, fill_bits,
4975 hf_ansi_a_is2000_nn_scr_content,
4976 hf_ansi_a_is2000_nn_scr_fill_bits);
4978 curr_offset += is2000_portion_len;
4980 NO_MORE_DATA_CHECK(len);
4983 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
4985 return curr_offset - offset;
4989 * IOS 6.2.2.70
4991 * IOS 5 4.2.53
4993 static const value_string ansi_a_is2000_mob_cap_fch_info_geo_loc_type_vals[] = {
4994 { 0, "No mobile assisted geo-location capabilities" },
4995 { 1, "IS801 capable (Advanced Forward Link Triangulation only (AFLT))" },
4996 { 2, "IS801 capable (Advanced Forward Link Triangulation and Global Positioning Systems)" },
4997 { 3, "Global Positioning Systems Only" },
4998 { 4, "Reserved" },
4999 { 5, "Reserved" },
5000 { 6, "Reserved" },
5001 { 7, "Reserved" },
5002 { 0, NULL }
5005 static uint8_t
5006 elem_is2000_mob_cap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p _U_)
5008 uint8_t oct;
5009 uint8_t oct_len;
5010 uint32_t curr_offset;
5011 uint8_t fill_bits;
5012 proto_item *item;
5013 proto_tree *subtree;
5015 curr_offset = offset;
5017 switch (global_a_variant)
5019 case A_VARIANT_IOS401:
5020 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_e0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5021 break;
5023 case A_VARIANT_IOS501:
5024 proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_rev_pdch_support_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5025 proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_for_pdch_support_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5026 proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_eram_support_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5027 break;
5030 proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_dcch_support_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5031 proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_fch_support_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5032 proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_otd_support_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5033 proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_enh_rc_cfg_support_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5034 proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_qpch_support_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5036 curr_offset++;
5038 proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_fch_info_octet_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5040 oct_len = tvb_get_uint8(tvb, curr_offset);
5042 curr_offset++;
5045 * The octet following the FCH/DCCH/... Information Bit-Exact Length - Octet Count
5046 * field is NOT counted in that length and is required.
5048 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_80, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5050 proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_fch_info_geo_loc_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5051 proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_fch_info_geo_loc_incl, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5052 proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_fch_info_num_fill_bits, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5054 fill_bits = tvb_get_uint8(tvb, curr_offset) & 0x07;
5056 curr_offset++;
5058 if (oct_len > 0)
5060 SHORT_DATA_CHECK(len - (curr_offset - offset), oct_len);
5062 subtree =
5063 proto_tree_add_subtree(tree, tvb, curr_offset, oct_len,
5064 ett_is2000_mob_cap_fch_info, NULL, "FCH Information");
5066 content_fill_aux(tvb, subtree, curr_offset, oct_len, fill_bits,
5067 hf_ansi_a_is2000_mob_cap_fch_info_content,
5068 hf_ansi_a_is2000_mob_cap_fch_info_fill_bits);
5070 curr_offset += oct_len;
5074 * DCCH
5076 proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_dcch_info_octet_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5078 oct_len = tvb_get_uint8(tvb, curr_offset);
5080 curr_offset++;
5082 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f8, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5083 proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_dcch_info_num_fill_bits, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5085 fill_bits = tvb_get_uint8(tvb, curr_offset) & 0x07;
5087 curr_offset++;
5089 if (oct_len > 0)
5091 SHORT_DATA_CHECK(len - (curr_offset - offset), oct_len);
5093 subtree = proto_tree_add_subtree(tree, tvb, curr_offset, oct_len,
5094 ett_is2000_mob_cap_dcch_info, NULL, "DCCH Information");
5096 content_fill_aux(tvb, subtree, curr_offset, oct_len, fill_bits,
5097 hf_ansi_a_is2000_mob_cap_dcch_info_content,
5098 hf_ansi_a_is2000_mob_cap_dcch_info_fill_bits);
5100 curr_offset += oct_len;
5103 NO_MORE_DATA_CHECK(len);
5106 * FOR_PDCH
5108 proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_for_pdch_info_octet_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5110 oct_len = tvb_get_uint8(tvb, curr_offset);
5112 curr_offset++;
5114 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f8, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5115 proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_for_pdch_info_num_fill_bits, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5117 fill_bits = tvb_get_uint8(tvb, curr_offset) & 0x07;
5119 curr_offset++;
5121 if (oct_len > 0)
5123 SHORT_DATA_CHECK(len - (curr_offset - offset), oct_len);
5125 subtree = proto_tree_add_subtree(tree, tvb, curr_offset, oct_len,
5126 ett_is2000_mob_cap_for_pdch_info, NULL, "FOR_PDCH Information");
5128 content_fill_aux(tvb, subtree, curr_offset, oct_len, fill_bits,
5129 hf_ansi_a_is2000_mob_cap_for_pdch_info_content,
5130 hf_ansi_a_is2000_mob_cap_for_pdch_info_fill_bits);
5132 curr_offset += oct_len;
5135 NO_MORE_DATA_CHECK(len);
5138 * REV_PDCH
5140 proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_rev_pdch_info_octet_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5142 oct_len = tvb_get_uint8(tvb, curr_offset);
5144 curr_offset++;
5146 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f8, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5147 proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_rev_pdch_info_num_fill_bits, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5149 fill_bits = tvb_get_uint8(tvb, curr_offset) & 0x07;
5151 curr_offset++;
5153 if (oct_len > 0)
5155 SHORT_DATA_CHECK(len - (curr_offset - offset), oct_len);
5157 subtree = proto_tree_add_subtree(tree, tvb, curr_offset, oct_len,
5158 ett_is2000_mob_cap_rev_pdch_info, NULL, "REV_PDCH Information");
5160 content_fill_aux(tvb, subtree, curr_offset, oct_len, fill_bits,
5161 hf_ansi_a_is2000_mob_cap_rev_pdch_info_content,
5162 hf_ansi_a_is2000_mob_cap_rev_pdch_info_fill_bits);
5164 curr_offset += oct_len;
5167 NO_MORE_DATA_CHECK(len);
5169 oct = tvb_get_uint8(tvb, curr_offset);
5171 item = proto_tree_add_uint_format(tree, hf_ansi_a_is2000_mob_cap_vp_support, tvb, curr_offset, 1,
5172 oct & 0x7f,
5173 "VP Algorithms Supported%s",
5174 (oct & 0x7f) ? "" : ": No voice privacy supported");
5176 if (oct & 0x7f)
5178 subtree = proto_item_add_subtree(item, ett_vp_algs);
5180 proto_tree_add_item(subtree, hf_ansi_a_extension_8_80, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5181 proto_tree_add_item(subtree, hf_ansi_a_is2000_mob_cap_vp_support_a7, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5182 proto_tree_add_item(subtree, hf_ansi_a_is2000_mob_cap_vp_support_a6, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5183 proto_tree_add_item(subtree, hf_ansi_a_is2000_mob_cap_vp_support_a5, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5184 proto_tree_add_item(subtree, hf_ansi_a_is2000_mob_cap_vp_support_a4, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5185 proto_tree_add_item(subtree, hf_ansi_a_is2000_mob_cap_vp_support_a3, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5186 proto_tree_add_item(subtree, hf_ansi_a_is2000_mob_cap_vp_support_a2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5187 proto_tree_add_item(subtree, hf_ansi_a_is2000_mob_cap_vp_support_a1, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5190 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
5192 return curr_offset - offset;
5196 * IOS 6.2.2.71
5198 static uint8_t
5199 elem_ptype(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
5201 uint32_t value;
5202 uint32_t curr_offset;
5203 const char *str;
5205 curr_offset = offset;
5207 value = tvb_get_ntohs(tvb, curr_offset);
5209 switch (value)
5211 case 0x880b: str = "PPP"; break;
5212 case 0x8881: str = "Unstructured Byte Stream"; break;
5213 default:
5214 str = "Unknown";
5215 break;
5218 proto_tree_add_uint_format(tree, hf_ansi_a_protocol_type, tvb, curr_offset, 2,
5219 value,
5220 "%s (%u)",
5221 str, value);
5223 proto_item_append_text(data_p->elem_item, " - (%s)", str);
5225 curr_offset += 2;
5227 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
5229 return curr_offset - offset;
5233 * IOS 6.2.2.72
5235 static const value_string ansi_a_ms_info_rec_signal_type_vals[] = {
5236 { 0x0, "Tone signal" },
5237 { 0x1, "ISDN Alerting" },
5238 { 0x2, "IS-54B Alerting" },
5239 { 0x3, "Reserved" },
5240 { 0, NULL }
5243 static const value_string ansi_a_ms_info_rec_signal_alert_pitch_vals[] = {
5244 { 0x0, "Medium pitch (standard alert)" },
5245 { 0x1, "High pitch" },
5246 { 0x2, "Low pitch" },
5247 { 0x3, "Reserved" },
5248 { 0, NULL }
5251 static const value_string ansi_a_ms_info_rec_signal_tone_vals[] = {
5252 { 0x00, "Dial tone on" },
5253 { 0x01, "Ring back tone on" },
5254 { 0x02, "Intercept tone on" },
5255 { 0x03, "Abbreviated intercept" },
5256 { 0x04, "Network congestion (reorder) tone on" },
5257 { 0x05, "Abbreviated network congestion (reorder)" },
5258 { 0x06, "Busy tone on" },
5259 { 0x07, "Confirm tone on" },
5260 { 0x08, "Answer tone on" },
5261 { 0x09, "Call waiting tone on" },
5262 { 0x0a, "Pip tone on" },
5263 { 0x3f, "Tones off" },
5264 { 0, NULL }
5267 static const value_string ansi_a_ms_info_rec_signal_isdn_alert_vals[] = {
5268 { 0x0, "Normal Alerting" },
5269 { 0x1, "Intergroup Alerting" },
5270 { 0x2, "Special/Priority Alerting" },
5271 { 0x3, "Reserved (ISDN Alerting pattern 3)" },
5272 { 0x4, "Ping ring" },
5273 { 0x5, "Reserved (ISDN Alerting pattern 5)" },
5274 { 0x6, "Reserved (ISDN Alerting pattern 6)" },
5275 { 0x7, "Reserved (ISDN Alerting pattern 7)" },
5276 { 0xf, "Alerting off" },
5277 { 0, NULL }
5280 static const value_string ansi_a_ms_info_rec_signal_is54b_alert_vals[] = {
5281 { 0x0, "No Tone" },
5282 { 0x1, "Long" },
5283 { 0x2, "Short-Short" },
5284 { 0x3, "Short-Short-Long" },
5285 { 0x4, "Short-Short-2" },
5286 { 0x5, "Short-Long-Short" },
5287 { 0x6, "Short-Short-Short-Short" },
5288 { 0x7, "PBX Long" },
5289 { 0x8, "PBX Short-Short" },
5290 { 0x9, "PBX Short-Short-Long" },
5291 { 0xa, "PBX Short-Long-Short" },
5292 { 0xb, "PBX Short-Short-Short-Short" },
5293 { 0xc, "Pip-Pip-Pip-Pip" },
5294 { 0, NULL }
5298 * C.S0005 Table 2.7.1.3.2.4-2 Number Types
5300 const value_string ansi_a_ms_info_rec_num_type_vals[] = {
5301 { 0, "Unknown" },
5302 { 1, "International number" },
5303 { 2, "National number" },
5304 { 3, "Network-specific number" },
5305 { 4, "Subscriber number" },
5306 { 5, "Reserved" },
5307 { 6, "Abbreviated number" },
5308 { 7, "Reserved for extension" },
5309 { 0, NULL }
5313 * C.S0005 Table 2.7.1.3.2.4-3 Numbering Plan Identification
5315 const value_string ansi_a_ms_info_rec_num_plan_vals[] = {
5316 { 0x00, "Unknown" },
5317 { 0x01, "ISDN/Telephony Numbering" },
5318 { 0x02, "Reserved" },
5319 { 0x03, "Data Numbering (ITU-T Rec. X.121)" },
5320 { 0x04, "Telex Numbering (ITU-T Rec. F.69)" },
5321 { 0x05, "Reserved" },
5322 { 0x06, "Reserved" },
5323 { 0x07, "Reserved" },
5324 { 0x08, "Reserved" },
5325 { 0x09, "Private Numbering" },
5326 { 0x0a, "Reserved" },
5327 { 0x0b, "Reserved" },
5328 { 0x0c, "Reserved" },
5329 { 0x0d, "Reserved" },
5330 { 0x0e, "Reserved" },
5331 { 0x0f, "Reserved for extension" },
5332 { 0, NULL }
5336 * C.S0005 Table 2.7.4.4-1 Presentation Indicator
5338 static const value_string ansi_a_ms_info_rec_clg_pn_pi_vals[] = {
5339 { 0, "Presentation allowed" },
5340 { 1, "Presentation restricted" },
5341 { 2, "Number not available" },
5342 { 3, "Reserved" },
5343 { 0, NULL }
5347 * C.S0005 Table 2.7.4.4-2 Screening Indicator
5349 static const value_string ansi_a_ms_info_rec_clg_pn_si_vals[] = {
5350 { 0, "User-provided, not screened" },
5351 { 1, "User-provided, verified and passed" },
5352 { 2, "User-provided, verified and failed" },
5353 { 3, "Network-provided" },
5354 { 0, NULL }
5357 static uint8_t
5358 elem_fwd_ms_info_recs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
5360 uint8_t oct;
5361 uint8_t oct_len;
5362 uint8_t rec_type;
5363 uint8_t num_recs;
5364 uint32_t value;
5365 uint32_t curr_offset, saved_offset;
5366 const char *str;
5367 char *str_num;
5368 int ett_elem_idx, idx, i;
5369 proto_item *item;
5370 proto_tree *subtree;
5372 curr_offset = offset;
5374 num_recs = 0;
5376 while ((len - (curr_offset - offset)) >= 2)
5378 saved_offset = curr_offset;
5380 rec_type = tvb_get_uint8(tvb, curr_offset);
5382 str = try_val_to_str_idx((uint32_t) rec_type, ansi_fwd_ms_info_rec_str, &idx);
5384 if (str == NULL)
5386 str = "Reserved";
5387 ett_elem_idx = ett_ansi_ms_info_rec_reserved;
5389 else
5391 ett_elem_idx = ett_ansi_fwd_ms_info_rec[idx];
5394 subtree =
5395 proto_tree_add_subtree_format(tree, tvb, curr_offset, -1,
5396 ett_elem_idx, &item,
5397 "Information Record Type [%u]: (%u) %s",
5398 num_recs + 1,
5399 rec_type,
5400 str);
5402 curr_offset++;
5404 oct_len = tvb_get_uint8(tvb, curr_offset);
5406 proto_tree_add_uint(subtree, hf_ansi_a_length, tvb, curr_offset, 1, oct_len);
5408 curr_offset++;
5410 if (oct_len > 0)
5412 SHORT_DATA_CHECK(len - (curr_offset - offset), oct_len);
5414 switch (rec_type)
5416 case ANSI_FWD_MS_INFO_REC_CLD_PN:
5417 proto_tree_add_item(subtree, hf_ansi_a_fwd_ms_info_rec_cld_pn_num_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5418 proto_tree_add_item(subtree, hf_ansi_a_fwd_ms_info_rec_cld_pn_num_plan, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5420 if (oct_len > 1)
5422 oct = tvb_get_uint8(tvb, curr_offset);
5424 proto_tree_add_bits_item(subtree, hf_ansi_a_msb_first_digit, tvb, (curr_offset*8)+7, 1, ENC_NA);
5426 curr_offset++;
5428 str_num = (char*)wmem_alloc(pinfo->pool, oct_len);
5429 for (i=0; i < (oct_len - 1); i++)
5431 str_num[i] = (oct & 0x01) << 7;
5433 oct = tvb_get_uint8(tvb, curr_offset + i);
5435 str_num[i] |= (oct & 0xfe) >> 1;
5437 str_num[i] = '\0';
5439 proto_tree_add_string_format(subtree, hf_ansi_a_fwd_ms_info_rec_cld_pn_num, tvb,
5440 curr_offset, oct_len - 1, str_num, "Digits: %s", str_num);
5442 curr_offset += (oct_len - 2);
5445 proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_8_01, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5446 curr_offset++;
5447 break;
5449 case ANSI_FWD_MS_INFO_REC_CLG_PN:
5450 proto_tree_add_item(subtree, hf_ansi_a_fwd_ms_info_rec_clg_pn_num_type, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
5451 proto_tree_add_item(subtree, hf_ansi_a_fwd_ms_info_rec_clg_pn_num_plan, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
5452 proto_tree_add_item(subtree, hf_ansi_a_fwd_ms_info_rec_clg_pn_pi, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
5453 proto_tree_add_item(subtree, hf_ansi_a_fwd_ms_info_rec_clg_pn_si, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
5455 if (oct_len > 2)
5457 value = tvb_get_ntohs(tvb, curr_offset);
5459 oct = (value & 0x00ff);
5461 proto_tree_add_bits_item(subtree, hf_ansi_a_msb_first_digit, tvb, (curr_offset*8)+11, 5, ENC_NA);
5463 curr_offset += 2;
5465 str_num = (char*)wmem_alloc(pinfo->pool, oct_len - 1);
5466 for (i=0; i < (oct_len - 2); i++)
5468 str_num[i] = (oct & 0x1f) << 3;
5470 oct = tvb_get_uint8(tvb, curr_offset + i);
5472 str_num[i] |= (oct & 0xe0) >> 5;
5474 str_num[i] = '\0';
5476 proto_tree_add_string_format(subtree, hf_ansi_a_fwd_ms_info_rec_clg_pn_num, tvb,
5477 curr_offset, oct_len - 2, str_num, "Digits: %s", str_num);
5479 curr_offset += (oct_len - 3);
5481 proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_8_1f, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5482 curr_offset++;
5484 else
5486 proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_16_001f, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
5487 curr_offset += 2;
5489 break;
5491 case ANSI_FWD_MS_INFO_REC_MW:
5492 proto_tree_add_item(subtree, hf_ansi_a_fwd_ms_info_rec_mw_num, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5493 curr_offset++;
5494 break;
5496 case ANSI_FWD_MS_INFO_REC_SIGNAL:
5497 proto_tree_add_item(subtree, hf_ansi_a_ms_info_rec_signal_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5498 proto_tree_add_item(subtree, hf_ansi_a_ms_info_rec_signal_alert_pitch, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5500 oct = tvb_get_uint8(tvb, curr_offset);
5502 switch (oct & 0xc0)
5504 case 0x00:
5505 proto_tree_add_item(subtree, hf_ansi_a_ms_info_rec_signal_tone, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
5506 break;
5508 case 0x40:
5509 proto_tree_add_item(subtree, hf_ansi_a_ms_info_rec_signal_isdn_alert, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
5510 break;
5512 case 0x80:
5513 proto_tree_add_item(subtree, hf_ansi_a_ms_info_rec_signal_is54b_alert, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
5514 break;
5516 default:
5517 /* DO NOTHING */
5518 break;
5521 proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_16_003f, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
5523 curr_offset += oct_len;
5524 break;
5526 case ANSI_FWD_MS_INFO_REC_CWI:
5527 proto_tree_add_item(subtree, hf_ansi_a_ms_info_rec_call_waiting_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5529 proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_8_7f, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5531 curr_offset += oct_len;
5532 break;
5534 default:
5535 proto_tree_add_item(subtree, hf_ansi_a_fwd_ms_info_rec_content, tvb, curr_offset, oct_len, ENC_NA);
5537 curr_offset += oct_len;
5538 break;
5542 proto_item_set_len(item, curr_offset - saved_offset);
5544 num_recs++;
5547 proto_item_append_text(data_p->elem_item, " - %u record%s", num_recs, plurality(num_recs, "", "s"));
5549 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
5551 return curr_offset - offset;
5555 * IOS 6.2.2.72
5557 static uint8_t
5558 elem_rev_ms_info_recs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
5560 uint8_t oct;
5561 uint8_t oct_len;
5562 uint8_t rec_type;
5563 uint8_t num_recs;
5564 uint32_t value;
5565 uint32_t curr_offset, saved_offset, saved_offset2;
5566 const char *str;
5567 char *str_num;
5568 int ett_elem_idx, idx, i;
5569 proto_item *item, *item2;
5570 proto_tree *subtree, *subtree2;
5571 uint8_t *poctets;
5573 curr_offset = offset;
5575 num_recs = 0;
5577 while ((len - (curr_offset - offset)) >= 2)
5579 saved_offset = curr_offset;
5581 rec_type = tvb_get_uint8(tvb, curr_offset);
5583 str = try_val_to_str_idx((uint32_t) rec_type, ansi_rev_ms_info_rec_str, &idx);
5585 if (str == NULL)
5587 str = "Reserved";
5588 ett_elem_idx = ett_ansi_ms_info_rec_reserved;
5590 else
5592 ett_elem_idx = ett_ansi_rev_ms_info_rec[idx];
5595 subtree =
5596 proto_tree_add_subtree_format(tree, tvb, curr_offset, -1,
5597 ett_elem_idx, &item,
5598 "Information Record Type [%u]: (%u) %s",
5599 num_recs + 1,
5600 rec_type,
5601 str);
5603 curr_offset++;
5605 oct_len = tvb_get_uint8(tvb, curr_offset);
5607 proto_tree_add_uint(subtree, hf_ansi_a_length, tvb, curr_offset, 1, oct_len);
5609 curr_offset++;
5611 if (oct_len > 0)
5613 SHORT_DATA_CHECK(len - (curr_offset - offset), oct_len);
5615 switch (rec_type)
5617 case ANSI_REV_MS_INFO_REC_KEYPAD_FAC:
5618 poctets = tvb_get_string_enc(pinfo->pool, tvb, curr_offset, oct_len, ENC_ASCII|ENC_NA);
5620 proto_tree_add_string_format(subtree, hf_ansi_a_cld_party_ascii_num, tvb, curr_offset, oct_len,
5621 (char *) poctets,
5622 "Digits: %s",
5623 (char *) format_text(pinfo->pool, poctets, oct_len));
5625 curr_offset += oct_len;
5626 break;
5628 case ANSI_REV_MS_INFO_REC_CLD_PN:
5629 proto_tree_add_item(subtree, hf_ansi_a_rev_ms_info_rec_cld_pn_num_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5630 proto_tree_add_item(subtree, hf_ansi_a_rev_ms_info_rec_cld_pn_num_plan, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5632 if (oct_len > 1)
5634 oct = tvb_get_uint8(tvb, curr_offset);
5636 proto_tree_add_bits_item(subtree, hf_ansi_a_msb_first_digit, tvb, (curr_offset*8)+7, 1, ENC_NA);
5638 curr_offset++;
5640 str_num = (char*)wmem_alloc(pinfo->pool, oct_len);
5641 for (i=0; i < (oct_len - 1); i++)
5643 str_num[i] = (oct & 0x01) << 7;
5645 oct = tvb_get_uint8(tvb, curr_offset + i);
5647 str_num[i] |= (oct & 0xfe) >> 1;
5649 str_num[i] = '\0';
5651 proto_tree_add_string_format(subtree, hf_ansi_a_rev_ms_info_rec_cld_pn_num, tvb,
5652 curr_offset, oct_len - 1, str_num, "Digits: %s", str_num);
5654 curr_offset += (oct_len - 2);
5657 proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_8_01, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5659 curr_offset++;
5660 break;
5662 case ANSI_REV_MS_INFO_REC_CLG_PN:
5663 proto_tree_add_item(subtree, hf_ansi_a_rev_ms_info_rec_clg_pn_num_type, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
5664 proto_tree_add_item(subtree, hf_ansi_a_rev_ms_info_rec_clg_pn_num_plan, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
5665 proto_tree_add_item(subtree, hf_ansi_a_rev_ms_info_rec_clg_pn_pi, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
5666 proto_tree_add_item(subtree, hf_ansi_a_rev_ms_info_rec_clg_pn_si, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
5668 if (oct_len > 2)
5670 value = tvb_get_ntohs(tvb, curr_offset);
5672 oct = (value & 0x00ff);
5674 proto_tree_add_bits_item(subtree, hf_ansi_a_msb_first_digit, tvb, (curr_offset*8)+11, 5, ENC_NA);
5676 curr_offset += 2;
5678 str_num = (char*)wmem_alloc(pinfo->pool, oct_len - 1);
5679 for (i=0; i < (oct_len - 2); i++)
5681 str_num[i] = (oct & 0x1f) << 3;
5683 oct = tvb_get_uint8(tvb, curr_offset + i);
5685 str_num[i] |= (oct & 0xe0) >> 5;
5687 str_num[i] = '\0';
5689 proto_tree_add_string_format(subtree, hf_ansi_a_rev_ms_info_rec_clg_pn_num, tvb,
5690 curr_offset, oct_len - 2, str_num, "Digits: %s", str_num);
5692 curr_offset += (oct_len - 3);
5694 proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_8_1f, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5696 curr_offset++;
5698 else
5700 proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_16_001f, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
5702 curr_offset += 2;
5704 break;
5706 case ANSI_REV_MS_INFO_REC_SO_INFO:
5707 i = 0;
5708 saved_offset2 = curr_offset;
5710 while ((oct_len - (curr_offset - saved_offset2)) > 2)
5712 subtree2 = proto_tree_add_subtree_format(subtree, tvb, curr_offset, 3,
5713 ett_so_list, &item2, "Service Option [%u]", i + 1);
5715 proto_tree_add_item(subtree2, hf_ansi_a_reserved_bits_8_fc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5716 proto_tree_add_item(subtree2, hf_ansi_a_rev_ms_info_rec_so_info_fwd_support, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5717 proto_tree_add_item(subtree2, hf_ansi_a_rev_ms_info_rec_so_info_rev_support, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5719 curr_offset++;
5721 value = tvb_get_ntohs(tvb, curr_offset);
5723 str = ansi_a_so_int_to_str(value);
5725 proto_tree_add_uint_format(subtree2, hf_ansi_a_rev_ms_info_rec_so_info_so, tvb, curr_offset, 2,
5726 value,
5727 "%s",
5728 str);
5730 proto_item_append_text(item2, " - (%u) %s", value, str);
5732 i++;
5733 curr_offset += 2;
5735 break;
5737 default:
5738 proto_tree_add_item(subtree, hf_ansi_a_rev_ms_info_rec_content, tvb, curr_offset, oct_len, ENC_NA);
5740 curr_offset += oct_len;
5741 break;
5745 proto_item_set_len(item, curr_offset - saved_offset);
5747 num_recs++;
5750 proto_item_append_text(data_p->elem_item, " - %u record%s", num_recs, plurality(num_recs, "", "s"));
5752 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
5754 return curr_offset - offset;
5758 * IOS 6.2.2.73
5760 * IOS 5 4.2.56
5762 static const value_string ansi_a_ext_ho_dir_params_target_bs_values_incl_vals[] = {
5763 { 0, "Only Search Window A Size is valid" },
5764 { 1, "Subset is valid" },
5765 { 2, "All fields valid" },
5766 { 3, "Reserved" },
5767 { 0, NULL }
5770 static uint8_t
5771 elem_ext_ho_dir_params(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p _U_)
5773 uint32_t curr_offset = offset;
5775 proto_tree_add_item(tree, hf_ansi_a_ext_ho_dir_params_srch_win_a, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5776 proto_tree_add_item(tree, hf_ansi_a_ext_ho_dir_params_srch_win_n, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5778 curr_offset++;
5780 NO_MORE_DATA_CHECK(len);
5782 proto_tree_add_item(tree, hf_ansi_a_ext_ho_dir_params_srch_win_r, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5783 proto_tree_add_item(tree, hf_ansi_a_ext_ho_dir_params_t_add, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
5784 curr_offset++;
5786 proto_tree_add_item(tree, hf_ansi_a_ext_ho_dir_params_t_drop, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5787 curr_offset++;
5789 NO_MORE_DATA_CHECK(len);
5791 proto_tree_add_item(tree, hf_ansi_a_ext_ho_dir_params_t_comp, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5792 proto_tree_add_item(tree, hf_ansi_a_ext_ho_dir_params_t_tdrop, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5794 curr_offset++;
5796 NO_MORE_DATA_CHECK(len);
5798 proto_tree_add_item(tree, hf_ansi_a_ext_ho_dir_params_nghbor_max_age, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5800 switch (global_a_variant)
5802 case A_VARIANT_IOS401:
5803 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_0f, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5804 break;
5806 case A_VARIANT_IOS501:
5807 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_0c, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5808 proto_tree_add_item(tree, hf_ansi_a_ext_ho_dir_params_target_bs_values_incl, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5809 break;
5812 curr_offset++;
5814 NO_MORE_DATA_CHECK(len);
5816 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_c0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5817 proto_tree_add_item(tree, hf_ansi_a_ext_ho_dir_params_soft_slope, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5818 curr_offset++;
5820 NO_MORE_DATA_CHECK(len);
5822 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_c0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5823 proto_tree_add_item(tree, hf_ansi_a_ext_ho_dir_params_add_intercept, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5824 curr_offset++;
5826 NO_MORE_DATA_CHECK(len);
5828 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_c0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5829 proto_tree_add_item(tree, hf_ansi_a_ext_ho_dir_params_drop_intercept, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5830 curr_offset++;
5832 NO_MORE_DATA_CHECK(len);
5834 proto_tree_add_item(tree, hf_ansi_a_ext_ho_dir_params_target_bs_p_rev, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5835 curr_offset++;
5837 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
5839 return curr_offset - offset;
5843 * IOS 6.2.2.74
5844 * UNUSED in SPEC and no IEI!
5848 * IOS 6.2.2.75
5849 * UNUSED in SPEC and no IEI!
5853 * IOS 6.2.2.76
5854 * UNUSED
5858 * IOS 6.2.2.77
5859 * UNUSED in SPEC and no IEI!
5863 * IOS 6.2.2.78
5864 * UNUSED in SPEC and no IEI!
5868 * IOS 6.2.2.79
5870 static const value_string ansi_a_cdma_sowd_resolution_vals[] = {
5871 { 0, "100 nsec" },
5872 { 1, "50 nsec" },
5873 { 2, "1/16 CDMA PN Chip" },
5874 { 3, "Reserved" },
5875 { 0, NULL }
5878 static uint8_t
5879 elem_cdma_sowd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p _U_)
5881 uint8_t disc;
5882 uint32_t curr_offset;
5884 curr_offset = offset;
5886 proto_tree_add_item(tree, hf_ansi_a_cell_id_disc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5888 disc = tvb_get_uint8(tvb, curr_offset);
5890 curr_offset += 1;
5892 curr_offset +=
5893 elem_cell_id_aux(tvb, pinfo, tree, curr_offset, len - (curr_offset - offset), disc, NULL);
5895 proto_tree_add_item(tree, hf_ansi_a_cdma_sowd_sowd, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
5896 curr_offset += 2;
5898 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_fc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5899 proto_tree_add_item(tree, hf_ansi_a_cdma_sowd_resolution, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5900 curr_offset++;
5902 if ((len - (curr_offset - offset)) > 1)
5904 proto_tree_add_item(tree, hf_ansi_a_cdma_sowd_timestamp, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
5906 curr_offset += 2;
5909 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
5911 return curr_offset - offset;
5915 * IOS 6.2.2.80
5916 * UNUSED
5920 * IOS 6.2.2.81
5921 * UNUSED
5925 * IOS 6.2.2.82
5927 static const value_string ansi_a_re_res_vals[] = {
5928 { 0, "Not reported" },
5929 { 1, "Radio environment is acceptable" },
5930 { 2, "Radio environment is marginally acceptable" },
5931 { 3, "Radio environment is poor" },
5932 { 0, NULL }
5935 static uint8_t
5936 elem_re_res(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, uint32_t offset, unsigned len _U_, ansi_a_shared_data_t *data_p _U_)
5938 uint32_t curr_offset;
5940 curr_offset = offset;
5942 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_80, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5943 proto_tree_add_item(tree, hf_ansi_a_re_res_prio_incl, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5944 proto_tree_add_item(tree, hf_ansi_a_re_res_forward, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5945 proto_tree_add_item(tree, hf_ansi_a_re_res_reverse, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5946 proto_tree_add_item(tree, hf_ansi_a_re_res_alloc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5947 proto_tree_add_item(tree, hf_ansi_a_re_res_avail, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5949 curr_offset++;
5951 /* no length check possible */
5953 return curr_offset - offset;
5957 * IOS 6.2.2.83
5958 * UNUSED in SPEC and no IEI!
5962 * IOS 6.2.2.84
5963 * UNUSED
5967 * IOS 6.2.2.85
5968 * UNUSED
5972 * IOS 6.2.2.86
5973 * UNUSED
5977 * IOS 6.2.2.87
5978 * UNUSED
5982 * IOS 6.2.2.88
5983 * UNUSED
5987 * IOS 6.2.2.89
5988 * A3/A7
5992 * IOS 6.2.2.90
5993 * UNUSED in SPEC and no IEI!
5997 * IOS 6.2.2.91
5998 * A3/A7
6002 * IOS 6.2.2.92
6003 * UNUSED
6007 * IOS 6.2.2.93
6008 * UNUSED
6012 * IOS 6.2.2.94
6013 * UNUSED
6017 * IOS 6.2.2.95
6018 * UNUSED
6022 * IOS 6.2.2.96
6023 * A3/A7
6027 * IOS 6.2.2.97
6028 * A3/A7
6032 * IOS 6.2.2.98
6033 * A3/A7
6037 * IOS 6.2.2.99
6038 * A3/A7
6042 * IOS 6.2.2.100
6043 * UNUSED
6047 * IOS 6.2.2.101
6048 * UNUSED
6052 * IOS 6.2.2.102
6053 * UNUSED
6057 * IOS 6.2.2.103
6058 * UNUSED
6062 * IOS 6.2.2.104
6063 * UNUSED
6067 * IOS 6.2.2.105
6069 * IOS 5 4.2.59
6071 static uint8_t
6072 elem_cld_party_ascii_num(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
6074 uint32_t curr_offset;
6075 uint8_t *poctets;
6077 curr_offset = offset;
6079 proto_tree_add_item(tree, hf_ansi_a_extension_8_80, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6081 proto_tree_add_item(tree, hf_ansi_a_cld_party_ascii_num_ton, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6082 proto_tree_add_item(tree, hf_ansi_a_cld_party_ascii_num_plan, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6083 curr_offset++;
6085 poctets = tvb_get_string_enc(pinfo->pool, tvb, curr_offset, len - (curr_offset - offset), ENC_ASCII|ENC_NA);
6087 proto_tree_add_string_format(tree, hf_ansi_a_cld_party_ascii_num, tvb, curr_offset, len - (curr_offset - offset),
6088 (char *) poctets,
6089 "Digits: %s",
6090 (char *) format_text(pinfo->pool, poctets, len - (curr_offset - offset)));
6092 proto_item_append_text(data_p->elem_item, " - (%s)", poctets);
6094 curr_offset += len - (curr_offset - offset);
6096 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
6098 return curr_offset - offset;
6102 * IOS 6.2.2.106
6104 static uint8_t
6105 elem_band_class(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
6107 uint8_t oct;
6108 uint32_t curr_offset;
6110 curr_offset = offset;
6112 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_e0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6113 proto_tree_add_item(tree, hf_ansi_a_band_class, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6115 oct = tvb_get_uint8(tvb, curr_offset);
6117 proto_item_append_text(data_p->elem_item, " - (%s)",
6118 val_to_str_const(oct & 0x1f, ansi_a_band_class_vals, "Reserved"));
6120 curr_offset++;
6122 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
6124 return curr_offset - offset;
6128 * IOS 6.2.2.107
6129 * UNUSED
6133 * IOS 6.2.2.108
6134 * A3/A7
6138 * IOS 6.2.2.109
6139 * A3/A7
6143 * IOS 6.2.2.110
6145 * IOS 5 4.2.60
6147 static uint8_t
6148 elem_is2000_cause(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p _U_)
6150 uint32_t curr_offset;
6152 curr_offset = offset;
6154 proto_tree_add_item(tree, hf_ansi_a_is2000_cause, tvb, curr_offset, len, ENC_NA);
6156 curr_offset += len;
6158 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
6160 return curr_offset - offset;
6164 * IOS 6.2.2.111
6165 * UNUSED
6169 * IOS 6.2.2.112
6170 * UNUSED
6174 * IOS 6.2.2.113
6175 * UNUSED
6179 * IOS 6.2.2.114
6181 static uint8_t
6182 elem_auth_event(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p _U_)
6184 uint8_t oct;
6185 uint32_t curr_offset;
6186 const char *str;
6188 curr_offset = offset;
6190 if (len == 1)
6192 oct = tvb_get_uint8(tvb, curr_offset);
6194 switch (oct)
6196 case 0x01: str = "Event: Authentication parameters were NOT received from mobile"; break;
6197 case 0x02: str = "Event: RANDC mis-match"; break;
6198 case 0x03: str = "Event: Recently requested"; break;
6199 case 0x04: str = "Event: Direct channel assignment"; break;
6200 default:
6201 str = "Event";
6202 break;
6205 proto_tree_add_bytes_format(tree, hf_ansi_a_auth_event, tvb, curr_offset, len,
6206 NULL,
6207 "%s",
6208 str);
6210 else
6212 proto_tree_add_item(tree, hf_ansi_a_auth_event, tvb, curr_offset, len, ENC_NA);
6215 curr_offset += len;
6217 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
6219 return curr_offset - offset;
6223 * IOS 6.2.2.115
6224 * UNUSED
6228 * IOS 6.2.2.116
6229 * UNUSED
6233 * IOS 6.2.2.117
6234 * UNUSED
6238 * IOS 6.2.2.118
6239 * UNUSED
6243 * IOS 6.2.2.119
6244 * A3/A7
6248 * IOS 6.2.2.120
6249 * A3/A7
6253 * IOS 6.2.2.121
6254 * A3/A7
6258 * IOS 6.2.2.122
6259 * UNUSED
6263 * IOS 6.2.2.123
6264 * UNUSED
6268 * IOS 6.2.2.124
6269 * UNUSED
6273 * IOS 6.2.2.125
6274 * A3/A7
6278 * IOS 6.2.2.126
6279 * UNUSED
6283 * IOS 6.2.2.127
6284 * UNUSED
6288 * IOS 6.2.2.128
6289 * A3/A7
6293 * IOS 6.2.2.129
6294 * UNUSED
6298 * IOS 6.2.2.130
6299 * UNUSED
6303 * IOS 6.2.2.131
6304 * UNUSED
6308 * IOS 6.2.2.132
6309 * A3/A7
6313 * IOS 6.2.2.133
6314 * UNUSED
6318 * IOS 6.2.2.134
6319 * A3/A7
6323 * IOS 6.2.2.135
6324 * UNUSED
6328 * IOS 6.2.2.136
6329 * UNUSED
6333 * IOS 6.2.2.137
6334 * IOS 5 4.2.62
6335 * Generic decode is good enough
6339 * IOS 6.2.2.138
6341 static uint8_t
6342 elem_psmm_count(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p _U_)
6344 uint32_t curr_offset;
6346 curr_offset = offset;
6348 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6349 proto_tree_add_item(tree, hf_ansi_a_psmm_count, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6351 curr_offset++;
6353 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
6355 return curr_offset - offset;
6359 * IOS 6.2.2.139
6361 static uint8_t
6362 elem_geo_loc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p _U_)
6364 uint32_t curr_offset;
6366 curr_offset = offset;
6368 proto_tree_add_item(tree, hf_ansi_a_geo_loc, tvb, curr_offset, len, ENC_NA);
6370 curr_offset += len;
6372 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
6374 return curr_offset - offset;
6378 * IOS 6.2.2.140
6379 * UNUSED
6383 * IOS 6.2.2.141
6384 * A3/A7
6388 * IOS 6.2.2.142
6389 * A3/A7
6393 * IOS 6.2.2.143
6394 * A3/A7
6398 * IOS 6.2.2.144
6399 * A3/A7
6403 * IOS 6.2.2.145
6404 * A3/A7
6408 * IOS 6.2.2.146
6409 * A3/A7
6413 * IOS 6.2.2.147
6414 * A3/A7
6418 * IOS 6.2.2.148
6420 static uint8_t
6421 elem_cct_group(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
6423 uint8_t oct;
6424 uint32_t curr_offset;
6425 proto_item *item;
6426 proto_tree *subtree;
6428 curr_offset = offset;
6430 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_fc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6431 proto_tree_add_item(tree, hf_ansi_a_cct_group_all_circuits, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6432 proto_tree_add_item(tree, hf_ansi_a_cct_group_inclusive, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6434 curr_offset++;
6436 NO_MORE_DATA_CHECK(len);
6438 oct = tvb_get_uint8(tvb, curr_offset);
6440 proto_tree_add_uint_format(tree, hf_ansi_a_cct_group_count, tvb, curr_offset, 1,
6441 oct,
6442 "Count: %u circuit%s",
6443 oct,
6444 plurality(oct, "", "s"));
6446 proto_item_append_text(data_p->elem_item, " - %u circuit%s", oct, plurality(oct, "", "s"));
6448 curr_offset++;
6450 item = proto_tree_add_item(tree, hf_ansi_a_cct_group_first_cic, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
6451 subtree = proto_item_add_subtree(item, ett_cic);
6453 proto_tree_add_item(subtree, hf_ansi_a_cct_group_first_cic_pcm_multi, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
6454 proto_tree_add_item(subtree, hf_ansi_a_cct_group_first_cic_timeslot, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
6456 curr_offset += 2;
6458 NO_MORE_DATA_CHECK(len);
6460 proto_tree_add_item(tree, hf_ansi_a_circuit_bitmap, tvb, curr_offset, len - (curr_offset - offset), ENC_NA);
6462 curr_offset += len - (curr_offset - offset);
6464 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
6466 return curr_offset - offset;
6470 * IOS 6.2.2.149
6472 static uint8_t
6473 elem_paca_ts(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p _U_)
6475 uint32_t curr_offset;
6477 curr_offset = offset;
6479 proto_tree_add_item(tree, hf_ansi_a_paca_timestamp_queuing_time, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
6481 curr_offset += len;
6483 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
6485 return curr_offset - offset;
6489 * IOS 6.2.2.150
6491 static const value_string ansi_a_paca_order_action_reqd_vals[] = {
6492 { 0, "Reserved" },
6493 { 1, "Update Queue Position and notify MS" },
6494 { 2, "Remove MS from the queue and release MS" },
6495 { 3, "Remove MS from the queue" },
6496 { 4, "MS Requested PACA Cancel" },
6497 { 5, "BS Requested PACA Cancel" },
6498 { 6, "Reserved" },
6499 { 7, "Reserved" },
6500 { 0, NULL }
6503 static uint8_t
6504 elem_paca_order(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
6506 uint8_t oct;
6507 uint32_t curr_offset;
6509 curr_offset = offset;
6511 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f8, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6512 proto_tree_add_item(tree, hf_ansi_a_paca_order_action_reqd, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6514 oct = tvb_get_uint8(tvb, curr_offset);
6516 proto_item_append_text(data_p->elem_item, " - (%s)",
6517 val_to_str_const(oct & 0x07, ansi_a_paca_order_action_reqd_vals, "Reserved"));
6519 curr_offset++;
6521 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
6523 return curr_offset - offset;
6527 * IOS 6.2.2.151
6529 static uint8_t
6530 elem_paca_reoi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
6532 uint8_t oct;
6533 uint32_t curr_offset;
6535 curr_offset = offset;
6537 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_fe, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6538 proto_tree_add_item(tree, hf_ansi_a_paca_reoi_pri, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6540 oct = tvb_get_uint8(tvb, curr_offset);
6542 proto_item_append_text(data_p->elem_item, " - (%sReorigination)", (oct & 0x01) ? "" : "Not ");
6544 curr_offset++;
6546 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
6548 return curr_offset - offset;
6552 * IOS 5 4.2.89
6554 static uint8_t
6555 elem_a2p_bearer_session(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
6557 uint8_t oct;
6558 uint32_t curr_offset;
6560 curr_offset = offset;
6562 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_c0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6563 proto_tree_add_item(tree, hf_ansi_a_a2p_bearer_sess_max_frames, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6564 proto_tree_add_item(tree, hf_ansi_a_a2p_bearer_sess_ip_addr_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6565 proto_tree_add_item(tree, hf_ansi_a_a2p_bearer_sess_addr_flag, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6567 oct = tvb_get_uint8(tvb, curr_offset);
6569 curr_offset++;
6571 if (oct & 0x01)
6573 /* session address included */
6575 if ((oct & 0x06) >> 1)
6577 SHORT_DATA_CHECK(len - (curr_offset - offset), 18);
6579 proto_tree_add_item(tree, hf_ansi_a_a2p_bearer_sess_ipv6_addr, tvb, curr_offset, 16, ENC_NA);
6581 data_p->rtp_src_addr.type = AT_IPv6;
6582 data_p->rtp_src_addr.len = 16;
6583 data_p->rtp_src_addr.data = (uint8_t *) &data_p->rtp_ipv6_addr;
6585 tvb_get_ipv6(tvb, curr_offset, &data_p->rtp_ipv6_addr);
6587 curr_offset += 16;
6589 else
6591 SHORT_DATA_CHECK(len - (curr_offset - offset), 6);
6593 proto_tree_add_item(tree, hf_ansi_a_a2p_bearer_sess_ipv4_addr, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
6595 data_p->rtp_src_addr.type = AT_IPv4;
6596 data_p->rtp_src_addr.len = 4;
6597 data_p->rtp_src_addr.data = (uint8_t *) &data_p->rtp_ipv4_addr;
6599 data_p->rtp_ipv4_addr = tvb_get_ipv4(tvb, curr_offset);
6601 curr_offset += 4;
6604 proto_tree_add_item(tree, hf_ansi_a_a2p_bearer_sess_udp_port, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
6606 data_p->rtp_port = tvb_get_ntohs(tvb, curr_offset);
6608 curr_offset += 2;
6611 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
6613 return curr_offset - offset;
6617 * IOS 5 4.2.90
6619 static const value_string ansi_a_a2p_bearer_form_format_tag_type_vals[] = {
6620 { 0, "Unknown" },
6621 { 1, "In-band signaling" },
6622 { 2, "Assigned" },
6623 { 3, "Unassigned" },
6624 { 4, "Transcoded" },
6625 { 5, "Reserved" },
6626 { 6, "Reserved" },
6627 { 7, "Reserved" },
6628 { 0, NULL }
6632 * IOS 5 Table 4.2.90-3
6633 * Bearer Format ID, Encoding Name from IANA
6635 static const value_string ansi_a_a2p_bearer_form_format_format_id_vals[] = {
6636 { 0, "PCMU" },
6637 { 1, "PCMA" },
6638 { 2, "13K Vocoder" }, /* aka QCELP */
6639 { 3, "EVRC" },
6640 { 4, "EVRC0" },
6641 { 5, "SMV" },
6642 { 6, "SMV0" },
6643 { 7, "telephone-event" },
6645 * the following Bearer Format IDs have been assumed/used by Star Solutions, however,
6646 * 3GPP2 has not yet updated the IOS specifications for these vocoders
6647 * (the MIME types are in IANA)
6649 { 8, "EVRCB" },
6650 { 9, "EVRCB0" },
6651 { 10, "EVRCWB" },
6652 { 11, "EVRCWB0" },
6653 { 12, "EVRCNW" },
6654 { 13, "EVRCNW0" },
6655 { 14, "EVRCNW2K" },
6656 { 15, "EVRCNW2K0" },
6657 { 0, NULL }
6660 static uint8_t
6661 elem_a2p_bearer_format(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
6663 uint8_t oct;
6664 proto_item *item;
6665 proto_tree *subtree;
6666 uint8_t num_bearers;
6667 uint32_t curr_offset, orig_offset;
6668 uint8_t ip_addr_type;
6669 bool ext;
6670 uint8_t ext_len;
6671 const char *mime_type;
6672 int sample_rate;
6673 bool format_assigned;
6674 bool in_band_format_assigned;
6675 bool first_assigned_found;
6676 bool rtp_dyn_payload_used;
6677 uint8_t rtp_payload_type;
6678 rtp_dyn_payload_t *rtp_dyn_payload;
6680 rtp_dyn_payload = rtp_dyn_payload_new();
6681 rtp_dyn_payload_used = false;
6683 first_assigned_found = false;
6685 curr_offset = offset;
6687 proto_tree_add_item(tree, hf_ansi_a_a2p_bearer_form_num_formats, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6688 proto_tree_add_item(tree, hf_ansi_a_a2p_bearer_form_ip_addr_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6690 ip_addr_type = tvb_get_uint8(tvb, curr_offset) & 0x03;
6692 curr_offset++;
6694 num_bearers = 0;
6696 while ((len - (curr_offset - offset)) > 0)
6698 orig_offset = curr_offset;
6700 subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1,
6701 ett_bearer_list, &item, "Bearer Format [%u]", num_bearers + 1);
6703 proto_tree_add_item(subtree, hf_ansi_a_a2p_bearer_form_format_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6704 curr_offset++;
6706 NO_MORE_DATA_CHECK(len);
6708 proto_tree_add_item(subtree, hf_ansi_a_extension_8_80, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6709 proto_tree_add_item(subtree, hf_ansi_a_a2p_bearer_form_format_tag_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6710 proto_tree_add_item(subtree, hf_ansi_a_a2p_bearer_form_format_format_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6712 oct = tvb_get_uint8(tvb, curr_offset);
6714 ext = (oct & 0x80) ? true : false;
6716 format_assigned = false;
6717 in_band_format_assigned = false;
6719 switch ((oct & 0x70) >> 4)
6721 case 1:
6722 in_band_format_assigned = true;
6723 break;
6724 case 2:
6725 format_assigned = true;
6726 break;
6730 * sampling rates are based on the specific vocoder RFCs
6731 * (example subset RFC4788, RFC5188, RFC6884)
6733 if (((oct & 0x0f) >= 10))
6735 sample_rate = 16000;
6737 else
6739 sample_rate = 8000;
6742 mime_type = val_to_str_const(oct & 0xf, ansi_a_a2p_bearer_form_format_format_id_vals, "Reserved");
6743 proto_item_append_text(item, " - (%s)", mime_type);
6744 curr_offset++;
6746 NO_MORE_DATA_CHECK(len);
6748 proto_tree_add_item(subtree, hf_ansi_a_a2p_bearer_form_format_rtp_payload_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6749 proto_tree_add_item(subtree, hf_ansi_a_a2p_bearer_form_format_bearer_addr_flag, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6751 oct = tvb_get_uint8(tvb, curr_offset);
6753 rtp_payload_type = (oct & 0xfe) >> 1;
6755 curr_offset++;
6757 if (oct & 0x01)
6759 /* bearer address included */
6761 if (ip_addr_type != 0)
6763 SHORT_DATA_CHECK(len - (curr_offset - offset), 18);
6765 proto_tree_add_item(subtree, hf_ansi_a_a2p_bearer_form_format_ipv6_addr, tvb, curr_offset, 16, ENC_NA);
6767 if (format_assigned)
6769 data_p->rtp_src_addr.type = AT_IPv6;
6770 data_p->rtp_src_addr.len = 16;
6771 data_p->rtp_src_addr.data = (uint8_t *) &data_p->rtp_ipv6_addr;
6773 tvb_get_ipv6(tvb, curr_offset, &data_p->rtp_ipv6_addr);
6776 curr_offset += 16;
6778 else
6780 SHORT_DATA_CHECK(len - (curr_offset - offset), 6);
6782 proto_tree_add_item(subtree, hf_ansi_a_a2p_bearer_form_format_ipv4_addr, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
6784 if (format_assigned)
6786 data_p->rtp_src_addr.type = AT_IPv4;
6787 data_p->rtp_src_addr.len = 4;
6788 data_p->rtp_src_addr.data = (uint8_t *) &data_p->rtp_ipv4_addr;
6790 data_p->rtp_ipv4_addr = tvb_get_ipv4(tvb, curr_offset);
6793 curr_offset += 4;
6796 proto_tree_add_item(subtree, hf_ansi_a_a2p_bearer_form_format_udp_port, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
6798 if (format_assigned)
6800 data_p->rtp_port = tvb_get_ntohs(tvb, curr_offset);
6803 curr_offset += 2;
6806 if (ext)
6808 SHORT_DATA_CHECK(len - (curr_offset - offset), 1);
6810 proto_tree_add_item(subtree, hf_ansi_a_a2p_bearer_form_format_ext_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6811 proto_tree_add_item(subtree, hf_ansi_a_a2p_bearer_form_format_ext_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6813 oct = tvb_get_uint8(tvb, curr_offset);
6815 ext_len = (oct & 0xf0) >> 4;
6817 curr_offset++;
6819 if (ext_len > 0)
6821 SHORT_DATA_CHECK(len - (curr_offset - offset), ext_len);
6823 proto_tree_add_item(subtree, hf_ansi_a_extension_parameter_value, tvb, curr_offset, ext_len, ENC_NA);
6825 curr_offset += ext_len;
6829 proto_item_set_len(item, curr_offset - orig_offset);
6831 if (format_assigned &&
6832 (first_assigned_found == false))
6834 rtp_dyn_payload_insert(rtp_dyn_payload, rtp_payload_type, mime_type, sample_rate, 1);
6835 rtp_dyn_payload_used = true;
6837 first_assigned_found = true;
6838 rtp_add_address(pinfo, PT_UDP, &data_p->rtp_src_addr, data_p->rtp_port, 0, "IOS5",
6839 pinfo->num, false, rtp_dyn_payload);
6842 if (in_band_format_assigned)
6844 rtp_dyn_payload_insert(rtp_dyn_payload, rtp_payload_type, "telephone-event", sample_rate, 1);
6845 rtp_dyn_payload_used = true;
6848 num_bearers++;
6851 if (rtp_dyn_payload_used == false)
6853 rtp_dyn_payload_free(rtp_dyn_payload);
6856 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
6858 return curr_offset - offset;
6862 * IOS 5 4.2.88
6864 static uint8_t
6865 elem_ms_des_freq(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
6867 uint32_t curr_offset;
6869 curr_offset = offset;
6871 proto_tree_add_item(tree, hf_ansi_a_ms_des_freq_band_class, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
6872 proto_tree_add_item(tree, hf_ansi_a_ms_des_freq_cdma_channel, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
6874 proto_item_append_text(data_p->elem_item, " - (CDMA Channel: %u)",
6875 tvb_get_ntohs(tvb, curr_offset) & 0x07ff);
6877 curr_offset++;
6879 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
6881 return curr_offset - offset;
6885 * IOS 5 4.2.87
6887 static const value_string ansi_a_plcm_id_plcm_type_vals[] = {
6888 { 0, "PLCM derived from ESN or MEID" },
6889 { 1, "PLCM specified by the base station" },
6890 { 2, "PLCM derived from IMSI_O_S when IMSI_O is derived from IMSI_M" },
6891 { 3, "PLCM derived from IMSI_O_S when IMSI_O is derived from IMSI_T" },
6892 { 0, NULL }
6895 static uint8_t
6896 elem_plcm_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p _U_)
6898 uint8_t oct;
6899 uint32_t curr_offset;
6900 const char *str;
6902 curr_offset = offset;
6904 oct = tvb_get_uint8(tvb, curr_offset);
6907 * from C.S0005-D v1.0 L3 Table 3.7.2.3.2.21-5
6909 str = val_to_str_const((oct & 0xf0) >> 4, ansi_a_plcm_id_plcm_type_vals, "Reserved");
6910 proto_tree_add_uint_format_value(tree, hf_ansi_a_plcm_id_plcm_type, tvb, curr_offset, 1,
6911 oct, "%s", str);
6913 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_0c, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6914 proto_tree_add_item(tree, hf_ansi_a_plcm42, tvb, curr_offset, 6, ENC_BIG_ENDIAN);
6916 curr_offset += 6;
6918 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
6920 return curr_offset - offset;
6924 * IOS 6.2.2.152
6925 * A3/A7
6929 * IOS 6.2.2.153
6930 * A3/A7
6934 * IS-634.400A 6.2.2.56
6936 static const value_string ansi_a_bdtmf_trans_info_dtmf_off_len_vals[] = {
6937 { 0, "60ms" },
6938 { 1, "100ms" },
6939 { 2, "150ms" },
6940 { 3, "200ms" },
6941 { 4, "Reserved" },
6942 { 5, "Reserved" },
6943 { 6, "Reserved" },
6944 { 7, "Reserved" },
6945 { 0, NULL }
6948 static const value_string ansi_a_bdtmf_trans_info_dtmf_on_len_vals[] = {
6949 { 0, "95ms" },
6950 { 1, "150ms" },
6951 { 2, "200ms" },
6952 { 3, "250ms" },
6953 { 4, "300ms" },
6954 { 5, "350ms" },
6955 { 6, "Reserved" },
6956 { 7, "Reserved" },
6957 { 0, NULL }
6960 static uint8_t
6961 elem_bdtmf_trans_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p _U_)
6963 uint32_t curr_offset;
6965 curr_offset = offset;
6967 proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_c0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6968 proto_tree_add_item(tree, hf_ansi_a_bdtmf_trans_info_dtmf_off_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6969 proto_tree_add_item(tree, hf_ansi_a_bdtmf_trans_info_dtmf_on_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6970 curr_offset++;
6972 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
6974 return curr_offset - offset;
6978 * IS-634.400A 6.2.2.57
6980 * XXX - is this specified in some document that doesn't cost over
6981 * USD 500 for either a dead-tree copy or a "Secure PDF" that probably
6982 * can only be read with the help of a Windows-only plugin for Adobe
6983 * Acrobat reader?
6985 static uint8_t
6986 elem_dtmf_chars(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
6988 uint8_t oct;
6989 uint32_t curr_offset;
6990 uint8_t packed_len;
6991 char *str;
6993 curr_offset = offset;
6995 proto_tree_add_item(tree, hf_ansi_a_bdtmf_chars_num_chars, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6996 oct = tvb_get_uint8(tvb, curr_offset);
6997 curr_offset++;
6999 if (curr_offset - offset >= len) /* Sanity check */
7000 return (curr_offset - offset);
7002 packed_len = len - (curr_offset - offset);
7003 str = (char*)tvb_bcd_dig_to_str(pinfo->pool, tvb, curr_offset, packed_len, &Dgt_dtmf, false);
7005 * the packed DTMF digits are not "terminated" with a '0xF' for an odd
7006 * number of digits but the unpack routine expects it
7008 * XXX - is "oct" a count of digits? If so, we could use it, although
7009 * we'd also need to check whether it claims that there are more
7010 * digits than are present in the information element based on its
7011 * length.
7013 if (oct & 0x01)
7015 str[(2*packed_len)-1] = '\0';
7018 proto_tree_add_string(tree, hf_ansi_a_bdtmf_chars_digits, tvb, curr_offset, packed_len, str);
7019 proto_item_append_text(data_p->elem_item, " - (%s)", str);
7021 curr_offset += packed_len;
7023 EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
7025 return curr_offset - offset;
7029 * ORDER MUST BE MAINTAINED
7031 * The value of this enum is used as an index into
7032 * elem_1_fcn[]
7035 typedef enum
7037 ANSI_A_E_ACC_NET_ID, /* Access Network Identifiers */
7038 ANSI_A_E_ADDS_USER_PART, /* ADDS User Part */
7039 ANSI_A_E_AMPS_HHO_PARAM, /* AMPS Hard Handoff Parameters */
7040 ANSI_A_E_ANCH_PDSN_ADDR, /* Anchor PDSN Address */
7041 ANSI_A_E_ANCH_PP_ADDR, /* Anchor P-P Address */
7042 ANSI_A_E_AUTH_CHLG_PARAM, /* Authentication Challenge Parameter */
7043 ANSI_A_E_AUTH_CNF_PARAM, /* Authentication Confirmation Parameter (RANDC) */
7044 ANSI_A_E_AUTH_DATA, /* Authentication Data */
7045 ANSI_A_E_AUTH_EVENT, /* Authentication Event */
7046 ANSI_A_E_AUTH_PARAM_COUNT, /* Authentication Parameter COUNT */
7047 ANSI_A_E_AUTH_RESP_PARAM, /* Authentication Response Parameter */
7048 ANSI_A_E_BAND_CLASS, /* Band Class */
7049 ANSI_A_E_CLD_PARTY_ASCII_NUM, /* Called Party ASCII Number */
7050 ANSI_A_E_CLD_PARTY_BCD_NUM, /* Called Party BCD Number */
7051 ANSI_A_E_CLG_PARTY_ASCII_NUM, /* Calling Party ASCII Number */
7052 ANSI_A_E_CAUSE, /* Cause */
7053 ANSI_A_E_CAUSE_L3, /* Cause Layer 3 */
7054 ANSI_A_E_CDMA_SOWD, /* CDMA Serving One Way Delay */
7055 ANSI_A_E_CELL_ID, /* Cell Identifier */
7056 ANSI_A_E_CELL_ID_LIST, /* Cell Identifier List */
7057 ANSI_A_E_CHAN_NUM, /* Channel Number */
7058 ANSI_A_E_CHAN_TYPE, /* Channel Type */
7059 ANSI_A_E_CCT_GROUP, /* Circuit Group */
7060 ANSI_A_E_CIC, /* Circuit Identity Code */
7061 ANSI_A_E_CIC_EXT, /* Circuit Identity Code Extension */
7062 ANSI_A_E_CM_INFO_TYPE_2, /* Classmark Information Type 2 */
7063 ANSI_A_E_DOWNLINK_RE, /* Downlink Radio Environment */
7064 ANSI_A_E_DOWNLINK_RE_LIST, /* Downlink Radio Environment List */
7065 ANSI_A_E_ENC_INFO, /* Encryption Information */
7066 ANSI_A_E_EXT_HO_DIR_PARAMS, /* Extended Handoff Direction Parameters */
7067 ANSI_A_E_GEO_LOC, /* Geographic Location */
7068 ANSI_A_E_SSCI, /* Special Service Call Indicator */
7069 ANSI_A_E_HO_POW_LEV, /* Handoff Power Level */
7070 ANSI_A_E_HHO_PARAMS, /* Hard Handoff Parameters */
7071 ANSI_A_E_IE_REQD, /* Information Element Requested */
7072 ANSI_A_E_IS2000_CHAN_ID, /* IS-2000 Channel Identity */
7073 ANSI_A_E_IS2000_CHAN_ID_3X, /* IS-2000 Channel Identity 3X */
7074 ANSI_A_E_IS2000_MOB_CAP, /* IS-2000 Mobile Capabilities */
7075 ANSI_A_E_IS2000_NN_SCR, /* IS-2000 Non-Negotiable Service Configuration Record */
7076 ANSI_A_E_IS2000_SCR, /* IS-2000 Service Configuration Record */
7077 ANSI_A_E_IS2000_CAUSE, /* IS-95/IS-2000 Cause Value */
7078 ANSI_A_E_IS2000_RED_RECORD, /* IS-2000 Redirection Record */
7079 ANSI_A_E_IS95_CHAN_ID, /* IS-95 Channel Identity */
7080 ANSI_A_E_IS95_MS_MEAS_CHAN_ID, /* IS-95 MS Measured Channel Identity */
7081 ANSI_A_E_L3_INFO, /* Layer 3 Information */
7082 ANSI_A_E_LAI, /* Location Area Information */
7083 ANSI_A_E_MWI, /* Message Waiting Indication */
7084 ANSI_A_E_MID, /* Mobile Identity */
7085 ANSI_A_E_FWD_MS_INFO_RECS, /* (Forward) MS Information Records */
7086 ANSI_A_E_ORIG_CI, /* Origination Continuation Indicator */
7087 ANSI_A_E_PACA_ORDER, /* PACA Order */
7088 ANSI_A_E_PACA_REOI, /* PACA Reorigination Indicator */
7089 ANSI_A_E_PACA_TS, /* PACA Timestamp */
7090 ANSI_A_E_PSP, /* Packet Session Parameters */
7091 ANSI_A_E_PDSN_IP_ADDR, /* PDSN IP Address */
7092 ANSI_A_E_PDI, /* Power Down Indicator */
7093 ANSI_A_E_PRIO, /* Priority */
7094 ANSI_A_E_P_REV, /* Protocol Revision */
7095 ANSI_A_E_PTYPE, /* Protocol Type */
7096 ANSI_A_E_PSMM_COUNT, /* PSMM Count */
7097 ANSI_A_E_QOS_PARAMS, /* Quality of Service Parameters */
7098 ANSI_A_E_RE_RES, /* Radio Environment and Resources */
7099 ANSI_A_E_REG_TYPE, /* Registration Type */
7100 ANSI_A_E_REJ_CAUSE, /* Reject Cause */
7101 ANSI_A_E_RESP_REQ, /* Response Request */
7102 ANSI_A_E_RETURN_CAUSE, /* Return Cause */
7103 ANSI_A_E_RF_CHAN_ID, /* RF Channel Identity */
7104 ANSI_A_E_SO, /* Service Option */
7105 ANSI_A_E_SOCI, /* Service Option Connection Identifier (SOCI) */
7106 ANSI_A_E_SO_LIST, /* Service Option List */
7107 ANSI_A_E_S_RED_INFO, /* Service Redirection Info */
7108 ANSI_A_E_SR_ID, /* Service Reference Identifier (SR_ID) */
7109 ANSI_A_E_SID, /* SID */
7110 ANSI_A_E_SIGNAL, /* Signal */
7111 ANSI_A_E_SCI, /* Slot Cycle Index */
7112 ANSI_A_E_SW_VER, /* Software Version */
7113 ANSI_A_E_SRNC_TRNC_TC, /* Source RNC to Target RNC Transparent Container */
7114 ANSI_A_E_S_PDSN_ADDR, /* Source PDSN Address */
7115 ANSI_A_E_TAG, /* Tag */
7116 ANSI_A_E_TRNC_SRNC_TC, /* Target RNC to Source RNC Transparent Container */
7117 ANSI_A_E_XMODE, /* Transcoder Mode */
7118 ANSI_A_E_UZ_ID, /* User Zone ID */
7119 ANSI_A_E_VP_REQ, /* Voice Privacy Request */
7120 ANSI_A_E_REV_MS_INFO_RECS, /* (Reverse) MS Information Records */
7121 ANSI_A_E_BDTMF_TRANS_INFO, /* Burst DTMF Transmission Information IS-634.400A 6.2.2.56 */
7122 ANSI_A_E_DTMF_CHARS, /* DTMF Characters IS-634.400A 6.2.2.57 */
7123 ANSI_A_E_A2P_BEARER_SESSION, /* A2p Bearer Session-Level Parameters */
7124 ANSI_A_E_A2P_BEARER_FORMAT, /* A2p Bearer Format-Specific Parameters */
7125 ANSI_A_E_MS_DES_FREQ, /* MS Designated Frequency */
7126 ANSI_A_E_MOB_SUB_INFO, /* Mobile Subscription Information */
7127 ANSI_A_E_PLCM_ID, /* Public Long Code Mask Identifier */
7128 ANSI_A_E_NONE /* NONE */
7130 elem_idx_t;
7131 static elem_idx_t ansi_a_elem_1_max = (elem_idx_t) 0;
7133 #define MAX_IOS401_NUM_ELEM_1 array_length(ansi_a_ios401_elem_1_strings)
7134 #define MAX_IOS501_NUM_ELEM_1 array_length(ansi_a_ios501_elem_1_strings)
7135 static int ett_ansi_elem_1[MAX(MAX_IOS401_NUM_ELEM_1, MAX_IOS501_NUM_ELEM_1)];
7136 static uint8_t (*elem_1_fcn[])(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p) =
7138 elem_acc_net_id, /* Access Network Identifiers */
7139 elem_adds_user_part, /* ADDS User Part */
7140 elem_amps_hho_params, /* AMPS Hard Handoff Parameters */
7141 elem_anchor_pdsn_addr, /* Anchor PDSN Address */
7142 elem_anchor_pp_addr, /* Anchor P-P Address */
7143 elem_auth_chlg_param, /* Authentication Challenge Parameter */
7144 elem_auth_conf_param, /* Authentication Confirmation Parameter (RANDC) */
7145 NULL /* no decode required */, /* Authentication Data */
7146 elem_auth_event, /* Authentication Event */
7147 elem_auth_param_count, /* Authentication Parameter COUNT */
7148 elem_auth_resp_param, /* Authentication Response Parameter */
7149 elem_band_class, /* Band Class */
7150 elem_cld_party_ascii_num, /* Called Party ASCII Number */
7151 elem_cld_party_bcd_num, /* Called Party BCD Number */
7152 elem_clg_party_ascii_num, /* Calling Party ASCII Number */
7153 elem_cause, /* Cause */
7154 elem_cause_l3, /* Cause Layer 3 */
7155 elem_cdma_sowd, /* CDMA Serving One Way Delay */
7156 elem_cell_id, /* Cell Identifier */
7157 elem_cell_id_list, /* Cell Identifier List */
7158 elem_chan_num, /* Channel Number */
7159 elem_chan_type, /* Channel Type */
7160 elem_cct_group, /* Circuit Group */
7161 elem_cic, /* Circuit Identity Code */
7162 elem_cic_ext, /* Circuit Identity Code Extension */
7163 elem_cm_info_type_2, /* Classmark Information Type 2 */
7164 elem_downlink_re, /* Downlink Radio Environment */
7165 elem_downlink_re_list, /* Downlink Radio Environment List */
7166 elem_enc_info, /* Encryption Information */
7167 elem_ext_ho_dir_params, /* Extended Handoff Direction Parameters */
7168 elem_geo_loc, /* Geographic Location */
7169 elem_ssci, /* Special Service Call Indicator */
7170 elem_ho_pow_lev, /* Handoff Power Level */
7171 elem_hho_params, /* Hard Handoff Parameters */
7172 elem_info_rec_req, /* Information Element Requested */
7173 elem_is2000_chan_id, /* IS-2000 Channel Identity */
7174 NULL, /* IS-2000 Channel Identity 3X */
7175 elem_is2000_mob_cap, /* IS-2000 Mobile Capabilities */
7176 elem_is2000_nn_scr, /* IS-2000 Non-Negotiable Service Configuration Record */
7177 elem_is2000_scr, /* IS-2000 Service Configuration Record */
7178 elem_is2000_cause, /* IS-95/IS-2000 Cause Value */
7179 NULL, /* IS-2000 Redirection Record */
7180 elem_is95_chan_id, /* IS-95 Channel Identity */
7181 elem_is95_ms_meas_chan_id, /* IS-95 MS Measured Channel Identity */
7182 elem_l3_info, /* Layer 3 Information */
7183 elem_lai, /* Location Area Information */
7184 elem_mwi, /* Message Waiting Indication */
7185 elem_mid, /* Mobile Identity */
7186 elem_fwd_ms_info_recs, /* (Forward) MS Information Records */
7187 NULL /* no associated data */, /* Origination Continuation Indicator */
7188 elem_paca_order, /* PACA Order */
7189 elem_paca_reoi, /* PACA Reorigination Indicator */
7190 elem_paca_ts, /* PACA Timestamp */
7191 NULL, /* Packet Session Parameters */
7192 elem_pdsn_ip_addr, /* PDSN IP Address */
7193 NULL /* no associated data */, /* Power Down Indicator */
7194 elem_prio, /* Priority */
7195 elem_p_rev, /* Protocol Revision */
7196 elem_ptype, /* Protocol Type */
7197 elem_psmm_count, /* PSMM Count */
7198 elem_qos_params, /* Quality of Service Parameters */
7199 elem_re_res, /* Radio Environment and Resources */
7200 elem_reg_type, /* Registration Type */
7201 elem_rej_cause, /* Reject Cause */
7202 NULL /* no associated data */, /* Response Request */
7203 elem_return_cause, /* Return Cause */
7204 elem_rf_chan_id, /* RF Channel Identity */
7205 elem_so, /* Service Option */
7206 elem_soci, /* Service Option Connection Identifier (SOCI) */
7207 elem_so_list, /* Service Option List */
7208 NULL, /* Service Redirection Info */
7209 elem_sr_id, /* Service Reference Identifier (SR_ID) */
7210 elem_sid, /* SID */
7211 elem_signal, /* Signal */
7212 elem_sci, /* Slot Cycle Index */
7213 elem_sw_ver, /* Software Version */
7214 NULL /* transparent */, /* Source RNC to Target RNC Transparent Container */
7215 elem_s_pdsn_ip_addr, /* Source PDSN Address */
7216 elem_tag, /* Tag */
7217 NULL /* transparent */, /* Target RNC to Source RNC Transparent Container */
7218 elem_xmode, /* Transcoder Mode */
7219 elem_uz_id, /* User Zone ID */
7220 NULL /* no associated data */, /* Voice Privacy Request */
7221 elem_rev_ms_info_recs, /* (Reverse) MS Information Records */
7222 elem_bdtmf_trans_info, /* Burst DTMF Transmission Information */
7223 elem_dtmf_chars, /* DTMF Characters */
7224 elem_a2p_bearer_session, /* A2p Bearer Session-Level Parameters */
7225 elem_a2p_bearer_format, /* A2p Bearer Format-Specific Parameters */
7226 elem_ms_des_freq, /* MS Designated Frequency */
7227 NULL, /* Mobile Subscription Information */
7228 elem_plcm_id, /* Public Long Code Mask Identification */
7229 NULL /* NONE */
7232 /* MESSAGE FUNCTIONS */
7235 * Type Length Value (TLV) element dissector
7237 static uint16_t
7238 elem_tlv(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, elem_idx_t idx, uint32_t offset, unsigned len _U_, const char *name_add, ansi_a_shared_data_t *data_p)
7240 uint8_t oct, parm_len;
7241 uint16_t consumed;
7242 uint32_t curr_offset;
7243 proto_tree *subtree;
7244 int dec_idx;
7246 curr_offset = offset;
7247 consumed = 0;
7249 if ((int) idx < 0 || idx >= ansi_a_elem_1_max-1)
7251 /* Unknown index, skip the element */
7252 return tvb_reported_length_remaining(tvb, offset);
7255 oct = tvb_get_uint8(tvb, curr_offset);
7257 if (oct == (uint8_t) ansi_a_elem_1_strings[idx].value)
7259 dec_idx = ansi_a_elem_1_strings[idx].dec_index;
7261 parm_len = tvb_get_uint8(tvb, curr_offset + 1);
7263 subtree =
7264 proto_tree_add_subtree_format(tree, tvb, curr_offset, parm_len + 2,
7265 ett_ansi_elem_1[idx], &data_p->elem_item, "%s%s",
7266 ansi_a_elem_1_strings[idx].strptr,
7267 (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add);
7269 proto_tree_add_uint(subtree, hf_ansi_a_elem_id, tvb, curr_offset, 1, oct);
7271 proto_tree_add_uint(subtree, hf_ansi_a_length, tvb, curr_offset + 1, 1, parm_len);
7273 if (parm_len > 0)
7275 if (elem_1_fcn[dec_idx] == NULL)
7277 proto_tree_add_expert_format(subtree, pinfo, &ei_ansi_a_no_tlv_elem_diss, tvb, curr_offset + 2, parm_len,
7278 "Element Value");
7280 consumed = parm_len;
7282 else
7284 consumed = (*elem_1_fcn[dec_idx])(tvb, pinfo, subtree, curr_offset + 2, parm_len, data_p);
7288 consumed += 2;
7291 return consumed;
7295 * Type Value (TV) element dissector
7297 * Length cannot be used in these functions, big problem if a element dissector
7298 * is not defined for these.
7300 static uint16_t
7301 elem_tv(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, elem_idx_t idx, uint32_t offset, const char *name_add, ansi_a_shared_data_t *data_p)
7303 uint8_t oct;
7304 uint16_t consumed;
7305 uint32_t curr_offset;
7306 proto_tree *subtree;
7307 int dec_idx;
7310 curr_offset = offset;
7311 consumed = 0;
7313 if ((int) idx < 0 || idx >= ansi_a_elem_1_max-1)
7315 /* Unknown index, skip the element */
7316 return tvb_reported_length_remaining(tvb, offset);
7319 oct = tvb_get_uint8(tvb, curr_offset);
7321 if (oct == (uint8_t) ansi_a_elem_1_strings[idx].value)
7323 dec_idx = ansi_a_elem_1_strings[idx].dec_index;
7325 subtree =
7326 proto_tree_add_subtree_format(tree,
7327 tvb, curr_offset, -1,
7328 ett_ansi_elem_1[idx], &data_p->elem_item, "%s%s",
7329 ansi_a_elem_1_strings[idx].strptr,
7330 (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add);
7332 proto_tree_add_uint(subtree, hf_ansi_a_elem_id, tvb, curr_offset, 1, oct);
7334 if (elem_1_fcn[dec_idx] == NULL)
7336 /* BAD THING, CANNOT DETERMINE LENGTH */
7338 proto_tree_add_expert_format(subtree, pinfo, &ei_ansi_a_no_tv_elem_diss, tvb, curr_offset + 1, 1,
7339 "No element dissector, rest of dissection may be incorrect");
7341 consumed = 1;
7343 else
7345 consumed = (*elem_1_fcn[dec_idx])(tvb, pinfo, subtree, curr_offset + 1, -1, data_p);
7348 consumed++;
7350 proto_item_set_len(data_p->elem_item, consumed);
7353 return consumed;
7357 * Type (T) element dissector
7359 * Length cannot be used in these functions, big problem if a element dissector
7360 * is not defined for these.
7362 static uint16_t
7363 elem_t(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, elem_idx_t idx, uint32_t offset, const char *name_add, ansi_a_shared_data_t *data_p _U_)
7365 uint8_t oct;
7366 uint32_t curr_offset;
7367 uint16_t consumed;
7370 curr_offset = offset;
7371 consumed = 0;
7373 if ((int) idx < 0 || idx >= ansi_a_elem_1_max-1)
7375 /* Unknown index, skip the element */
7376 return tvb_reported_length_remaining(tvb, offset);
7379 oct = tvb_get_uint8(tvb, curr_offset);
7381 if (oct == (uint8_t) ansi_a_elem_1_strings[idx].value)
7383 proto_tree_add_uint_format(tree, hf_ansi_a_elem_id, tvb, curr_offset, 1, oct,
7384 "%s%s",
7385 ansi_a_elem_1_strings[idx].strptr,
7386 (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add);
7388 consumed = 1;
7391 return consumed;
7395 * Length Value (LV) element dissector
7397 static uint16_t
7398 elem_lv(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, elem_idx_t idx, uint32_t offset, unsigned len _U_, const char *name_add, ansi_a_shared_data_t *data_p)
7400 uint8_t parm_len;
7401 uint16_t consumed;
7402 uint32_t curr_offset;
7403 proto_tree *subtree;
7404 int dec_idx;
7407 curr_offset = offset;
7408 consumed = 0;
7410 if ((int) idx < 0 || idx >= ansi_a_elem_1_max-1)
7412 /* Unknown index, skip the element */
7413 return tvb_reported_length_remaining(tvb, offset);
7416 dec_idx = ansi_a_elem_1_strings[idx].dec_index;
7418 parm_len = tvb_get_uint8(tvb, curr_offset);
7420 subtree =
7421 proto_tree_add_subtree_format(tree, tvb, curr_offset, parm_len + 1,
7422 ett_ansi_elem_1[idx], &data_p->elem_item, "%s%s",
7423 ansi_a_elem_1_strings[idx].strptr,
7424 (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add);
7426 proto_tree_add_uint(subtree, hf_ansi_a_length, tvb,
7427 curr_offset, 1, parm_len);
7429 if (parm_len > 0)
7431 if (elem_1_fcn[dec_idx] == NULL)
7433 proto_tree_add_expert_format(subtree, pinfo, &ei_ansi_a_no_lv_elem_diss, tvb, curr_offset + 1, parm_len,
7434 "Element Value");
7436 consumed = parm_len;
7438 else
7440 consumed = (*elem_1_fcn[dec_idx])(tvb, pinfo, subtree, curr_offset + 1, parm_len, data_p);
7444 return consumed + 1;
7448 * Value (V) element dissector
7450 * Length cannot be used in these functions, big problem if a element dissector
7451 * is not defined for these.
7453 static uint16_t
7454 elem_v(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, elem_idx_t idx, uint32_t offset, ansi_a_shared_data_t *data_p)
7456 uint16_t consumed;
7457 uint32_t curr_offset;
7458 int dec_idx;
7460 curr_offset = offset;
7462 if ((int) idx < 0 || idx >= ansi_a_elem_1_max-1)
7464 /* Unknown index, skip the element */
7465 return tvb_reported_length_remaining(tvb, offset) ;
7468 dec_idx = ansi_a_elem_1_strings[idx].dec_index;
7470 data_p->elem_item = NULL;
7472 if (elem_1_fcn[dec_idx] == NULL)
7474 /* BAD THING, CANNOT DETERMINE LENGTH */
7476 proto_tree_add_expert_format(tree, pinfo, &ei_ansi_a_no_v_elem_diss, tvb, curr_offset, 1,
7477 "No element dissector, rest of dissection may be incorrect");
7479 consumed = 1;
7481 else
7483 consumed = (*elem_1_fcn[dec_idx])(tvb, pinfo, tree, curr_offset, -1, data_p);
7486 return consumed;
7490 #define ELEM_MAND_TLV(elem_idx, elem_name_addition) \
7492 if ((consumed = elem_tlv(tvb, pinfo, tree, elem_idx, curr_offset, curr_len, elem_name_addition, data_p)) > 0) \
7494 curr_offset += consumed; \
7495 curr_len -= consumed; \
7497 else \
7499 proto_tree_add_expert_format(tree, pinfo, &ei_ansi_a_missing_mand_elem, \
7500 tvb, curr_offset, 0, \
7501 "Missing Mandatory element (0x%02x) %s%s, rest of dissection is suspect", \
7502 ansi_a_elem_1_strings[elem_idx].value, \
7503 ansi_a_elem_1_strings[elem_idx].strptr, \
7504 elem_name_addition \
7505 ); \
7507 if (curr_len <= 0) return; \
7510 #define ELEM_OPT_TLV(elem_idx, elem_name_addition) \
7512 if ((consumed = elem_tlv(tvb, pinfo, tree, elem_idx, curr_offset, curr_len, elem_name_addition, data_p)) > 0) \
7514 curr_offset += consumed; \
7515 curr_len -= consumed; \
7517 if (curr_len <= 0) return; \
7520 #define ELEM_MAND_TV(elem_idx, elem_name_addition) \
7522 if ((consumed = elem_tv(tvb, pinfo, tree, elem_idx, curr_offset, elem_name_addition, data_p)) > 0) \
7524 curr_offset += consumed; \
7525 curr_len -= consumed; \
7527 else \
7529 proto_tree_add_expert_format(tree, pinfo, &ei_ansi_a_missing_mand_elem, \
7530 tvb, curr_offset, 0, \
7531 "Missing Mandatory element (0x%02x) %s%s, rest of dissection is suspect", \
7532 ansi_a_elem_1_strings[elem_idx].value, \
7533 ansi_a_elem_1_strings[elem_idx].strptr, \
7534 elem_name_addition \
7535 ); \
7537 if (curr_len <= 0) return; \
7540 #define ELEM_OPT_TV(elem_idx, elem_name_addition) \
7542 if ((consumed = elem_tv(tvb, pinfo, tree, elem_idx, curr_offset, elem_name_addition, data_p)) > 0) \
7544 curr_offset += consumed; \
7545 curr_len -= consumed; \
7547 if (curr_len <= 0) return; \
7550 #define ELEM_OPT_T(elem_idx, elem_name_addition) \
7552 if ((consumed = elem_t(tvb, pinfo, tree, elem_idx, curr_offset, elem_name_addition, data_p)) > 0) \
7554 curr_offset += consumed; \
7555 curr_len -= consumed; \
7557 if (curr_len <= 0) return; \
7560 #define ELEM_MAND_LV(elem_idx, elem_name_addition) \
7562 if ((consumed = (data_p->from_sip ? \
7563 elem_tlv(tvb, pinfo, tree, elem_idx, curr_offset, curr_len, elem_name_addition, data_p) : \
7564 elem_lv(tvb, pinfo, tree, elem_idx, curr_offset, curr_len, elem_name_addition, data_p))) > 0) \
7566 curr_offset += consumed; \
7567 curr_len -= consumed; \
7569 else \
7571 /* Mandatory, but nothing we can do */ \
7573 if (curr_len <= 0) return; \
7576 #define ELEM_MAND_V(elem_idx) \
7578 if ((consumed = (data_p->from_sip ? \
7579 elem_tv(tvb, pinfo, tree, elem_idx, curr_offset, "", data_p) : \
7580 elem_v(tvb, pinfo, tree, elem_idx, curr_offset, data_p))) > 0) \
7582 curr_offset += consumed; \
7583 curr_len -= consumed; \
7585 else \
7587 /* Mandatory, but nothing we can do */ \
7589 if (curr_len <= 0) return; \
7594 * IOS 6.1.2.1
7596 static void
7597 bsmap_cl3_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
7599 uint32_t curr_offset;
7600 uint16_t consumed;
7601 unsigned curr_len;
7603 curr_offset = offset;
7604 curr_len = len;
7606 if (!data_p->from_sip)
7609 * With femtoInterfaceMsg application, the Information Elements for the
7610 * Complete Layer 3 Information message shall not be included
7612 ELEM_MAND_TLV(ANSI_A_E_CELL_ID, "");
7614 ELEM_MAND_TLV(ANSI_A_E_L3_INFO, "");
7617 EXTRANEOUS_DATA_CHECK(curr_len, 0);
7621 * IOS 6.1.2.2
7623 static const value_string dtap_cm_service_type_vals[] = {
7624 { 1, "Mobile Originating Call" },
7625 { 2, "Emergency call establishment" },
7626 { 4, "Short Message transfer" },
7627 { 8, "Supplementary Service activation" },
7628 { 0, NULL }
7631 static void
7632 dtap_cm_srvc_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
7634 uint32_t curr_offset;
7635 uint32_t consumed;
7636 unsigned curr_len;
7637 uint8_t oct;
7638 proto_tree *subtree;
7640 curr_offset = offset;
7641 curr_len = len;
7644 * special dissection for CM Service Type
7646 oct = tvb_get_uint8(tvb, curr_offset);
7647 subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, 1, ett_cm_srvc_type, NULL,
7648 "CM Service Type: %s", val_to_str_const(oct & 0x0f, dtap_cm_service_type_vals, "Unknown"));
7650 proto_tree_add_item(subtree, hf_ansi_a_elem_id_f0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
7651 proto_tree_add_item(subtree, hf_ansi_a_cm_svrc_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
7653 curr_offset++;
7654 curr_len--;
7656 ELEM_MAND_LV(ANSI_A_E_CM_INFO_TYPE_2, "");
7658 ELEM_MAND_LV(ANSI_A_E_MID, "");
7660 ELEM_OPT_TLV(ANSI_A_E_CLD_PARTY_BCD_NUM, "");
7662 ELEM_OPT_TLV(ANSI_A_E_MID, "");
7664 ELEM_OPT_TV(ANSI_A_E_SCI, "");
7666 ELEM_OPT_TLV(ANSI_A_E_AUTH_RESP_PARAM, "");
7668 ELEM_OPT_TV(ANSI_A_E_AUTH_CNF_PARAM, "");
7670 ELEM_OPT_TV(ANSI_A_E_AUTH_PARAM_COUNT, "");
7672 ELEM_OPT_TLV(ANSI_A_E_AUTH_CHLG_PARAM, "");
7674 ELEM_OPT_TV(ANSI_A_E_SO, "");
7676 ELEM_OPT_T(ANSI_A_E_VP_REQ, "");
7678 ELEM_OPT_TV(ANSI_A_E_RE_RES, "");
7680 ELEM_OPT_TLV(ANSI_A_E_CLD_PARTY_ASCII_NUM, "");
7682 ELEM_OPT_TV(ANSI_A_E_CIC, "");
7684 ELEM_OPT_TLV(ANSI_A_E_AUTH_EVENT, "");
7686 ELEM_OPT_TLV(ANSI_A_E_AUTH_DATA, "");
7688 ELEM_OPT_TLV(ANSI_A_E_PACA_REOI, "");
7690 ELEM_OPT_TLV(ANSI_A_E_UZ_ID, "");
7692 ELEM_OPT_TLV(ANSI_A_E_IS2000_MOB_CAP, "");
7694 ELEM_OPT_TLV(ANSI_A_E_CDMA_SOWD, "");
7696 switch (global_a_variant)
7698 case A_VARIANT_IOS501:
7699 ELEM_OPT_TLV(ANSI_A_E_SSCI, "");
7701 ELEM_OPT_TLV(ANSI_A_E_SOCI, "");
7703 ELEM_OPT_T(ANSI_A_E_ORIG_CI, "");
7705 ELEM_OPT_TV(ANSI_A_E_RETURN_CAUSE, "");
7707 ELEM_OPT_TLV(ANSI_A_E_MID, "");
7709 ELEM_OPT_TLV(ANSI_A_E_A2P_BEARER_SESSION, "");
7711 ELEM_OPT_TLV(ANSI_A_E_A2P_BEARER_FORMAT, "");
7713 ELEM_OPT_TLV(ANSI_A_E_MOB_SUB_INFO, "");
7714 break;
7717 EXTRANEOUS_DATA_CHECK(curr_len, 0);
7721 * IOS 5 3.1.3
7723 static void
7724 dtap_cm_srvc_req_cont(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
7726 uint32_t curr_offset;
7727 uint32_t consumed;
7728 unsigned curr_len;
7730 curr_offset = offset;
7731 curr_len = len;
7733 ELEM_OPT_TLV(ANSI_A_E_CLD_PARTY_BCD_NUM, "");
7735 ELEM_OPT_TLV(ANSI_A_E_CLD_PARTY_ASCII_NUM, "");
7737 ELEM_OPT_TLV(ANSI_A_E_REV_MS_INFO_RECS, "");
7739 EXTRANEOUS_DATA_CHECK(curr_len, 0);
7743 * IOS 6.1.2.3
7745 static void
7746 bsmap_page_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
7748 uint32_t curr_offset;
7749 uint32_t consumed;
7750 unsigned curr_len;
7752 curr_offset = offset;
7753 curr_len = len;
7755 ELEM_MAND_TLV(ANSI_A_E_MID, "");
7757 ELEM_OPT_TV(ANSI_A_E_TAG, "");
7759 ELEM_OPT_TLV(ANSI_A_E_CELL_ID_LIST, "");
7761 ELEM_OPT_TV(ANSI_A_E_SCI, "");
7763 ELEM_OPT_TV(ANSI_A_E_SO, "");
7765 ELEM_OPT_TLV(ANSI_A_E_IS2000_MOB_CAP, "");
7767 switch (global_a_variant)
7769 case A_VARIANT_IOS501:
7770 ELEM_OPT_TLV(ANSI_A_E_P_REV, "");
7772 ELEM_OPT_TLV(ANSI_A_E_MS_DES_FREQ, "");
7774 ELEM_OPT_TLV(ANSI_A_E_A2P_BEARER_FORMAT, "");
7776 ELEM_OPT_TLV(ANSI_A_E_MID, "");
7778 ELEM_OPT_TLV(ANSI_A_E_MOB_SUB_INFO, "");
7779 break;
7782 EXTRANEOUS_DATA_CHECK(curr_len, 0);
7786 * IOS 6.1.2.4
7788 static void
7789 dtap_page_resp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
7791 uint32_t curr_offset;
7792 uint32_t consumed;
7793 unsigned curr_len;
7795 curr_offset = offset;
7796 curr_len = len;
7798 ELEM_MAND_LV(ANSI_A_E_CM_INFO_TYPE_2, "");
7800 ELEM_MAND_LV(ANSI_A_E_MID, "");
7802 ELEM_OPT_TV(ANSI_A_E_TAG, "");
7804 ELEM_OPT_TLV(ANSI_A_E_MID, "");
7806 ELEM_OPT_TV(ANSI_A_E_SCI, "");
7808 ELEM_OPT_TLV(ANSI_A_E_AUTH_RESP_PARAM, "");
7810 ELEM_OPT_TV(ANSI_A_E_AUTH_CNF_PARAM, "");
7812 ELEM_OPT_TV(ANSI_A_E_AUTH_PARAM_COUNT, "");
7814 ELEM_OPT_TLV(ANSI_A_E_AUTH_CHLG_PARAM, "");
7816 ELEM_OPT_TV(ANSI_A_E_SO, "");
7818 ELEM_OPT_T(ANSI_A_E_VP_REQ, "");
7820 ELEM_OPT_TV(ANSI_A_E_CIC, "");
7822 ELEM_OPT_TLV(ANSI_A_E_AUTH_EVENT, "");
7824 ELEM_OPT_TV(ANSI_A_E_RE_RES, "");
7826 ELEM_OPT_TLV(ANSI_A_E_UZ_ID, "");
7828 ELEM_OPT_TLV(ANSI_A_E_IS2000_MOB_CAP, "");
7830 ELEM_OPT_TLV(ANSI_A_E_CDMA_SOWD, "");
7832 switch (global_a_variant)
7834 case A_VARIANT_IOS501:
7835 ELEM_OPT_TLV(ANSI_A_E_SOCI, "");
7837 ELEM_OPT_TLV(ANSI_A_E_MID, "");
7839 ELEM_OPT_TLV(ANSI_A_E_A2P_BEARER_SESSION, "");
7841 ELEM_OPT_TLV(ANSI_A_E_A2P_BEARER_FORMAT, "");
7842 break;
7845 EXTRANEOUS_DATA_CHECK(curr_len, 0);
7849 * IOS 6.1.2.12
7851 static void
7852 dtap_progress(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
7854 uint32_t curr_offset;
7855 uint32_t consumed;
7856 unsigned curr_len;
7858 curr_offset = offset;
7859 curr_len = len;
7861 ELEM_OPT_TV(ANSI_A_E_SIGNAL, "");
7863 ELEM_OPT_TLV(ANSI_A_E_FWD_MS_INFO_RECS, "");
7865 ELEM_OPT_TLV(ANSI_A_E_SOCI, "");
7867 EXTRANEOUS_DATA_CHECK(curr_len, 0);
7871 * IOS 5 3.8.1
7873 static void
7874 dtap_srvc_redirection(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
7876 uint32_t curr_offset;
7877 uint32_t consumed;
7878 unsigned curr_len;
7880 curr_offset = offset;
7881 curr_len = len;
7883 ELEM_MAND_TLV(ANSI_A_E_IS2000_RED_RECORD, "");
7885 ELEM_MAND_TLV(ANSI_A_E_S_RED_INFO, "");
7887 ELEM_MAND_TLV(ANSI_A_E_MID, "");
7889 ELEM_OPT_TLV(ANSI_A_E_MID, "");
7891 ELEM_OPT_TLV(ANSI_A_E_P_REV, "");
7893 ELEM_OPT_TLV(ANSI_A_E_MID, "");
7895 EXTRANEOUS_DATA_CHECK(curr_len, 0);
7899 * IOS 5 3.1.11
7901 static void
7902 dtap_srvc_release(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
7904 uint32_t curr_offset;
7905 uint32_t consumed;
7906 unsigned curr_len;
7908 curr_offset = offset;
7909 curr_len = len;
7911 ELEM_MAND_TLV(ANSI_A_E_SOCI, "");
7913 ELEM_MAND_TLV(ANSI_A_E_CAUSE, "");
7915 ELEM_OPT_TLV(ANSI_A_E_CAUSE_L3, "");
7917 EXTRANEOUS_DATA_CHECK(curr_len, 0);
7921 * IOS 5 3.1.12
7923 static void
7924 dtap_srvc_release_complete(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
7926 uint32_t curr_offset;
7927 uint32_t consumed;
7928 unsigned curr_len;
7930 curr_offset = offset;
7931 curr_len = len;
7933 ELEM_MAND_TLV(ANSI_A_E_SOCI, "");
7935 EXTRANEOUS_DATA_CHECK(curr_len, 0);
7939 * IOS 6.1.2.15
7941 static void
7942 bsmap_ass_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
7944 uint16_t consumed;
7945 uint32_t curr_offset;
7946 unsigned curr_len;
7948 curr_offset = offset;
7949 curr_len = len;
7951 ELEM_MAND_TLV(ANSI_A_E_CHAN_TYPE, "");
7953 ELEM_OPT_TV(ANSI_A_E_CIC, "");
7955 ELEM_OPT_TLV(ANSI_A_E_ENC_INFO, "");
7957 ELEM_OPT_TV(ANSI_A_E_SO, "");
7959 ELEM_OPT_TV(ANSI_A_E_SIGNAL, "");
7961 ELEM_OPT_TLV(ANSI_A_E_CLG_PARTY_ASCII_NUM, "");
7963 ELEM_OPT_TLV(ANSI_A_E_FWD_MS_INFO_RECS, "");
7965 ELEM_OPT_TLV(ANSI_A_E_PRIO, "");
7967 ELEM_OPT_TLV(ANSI_A_E_PACA_TS, "");
7969 ELEM_OPT_TLV(ANSI_A_E_QOS_PARAMS, "");
7971 switch (global_a_variant)
7973 case A_VARIANT_IOS501:
7974 ELEM_OPT_TLV(ANSI_A_E_SOCI, "");
7976 ELEM_OPT_TLV(ANSI_A_E_SR_ID, "");
7978 ELEM_OPT_TLV(ANSI_A_E_A2P_BEARER_SESSION, "");
7980 ELEM_OPT_TLV(ANSI_A_E_A2P_BEARER_FORMAT, "");
7982 ELEM_OPT_TLV(ANSI_A_E_MID, "");
7984 ELEM_OPT_TLV(ANSI_A_E_MOB_SUB_INFO, "");
7985 break;
7988 EXTRANEOUS_DATA_CHECK(curr_len, 0);
7992 * IOS 6.1.2.16
7994 static void
7995 bsmap_ass_complete(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
7997 uint16_t consumed;
7998 uint32_t curr_offset;
7999 unsigned curr_len;
8001 curr_offset = offset;
8002 curr_len = len;
8004 ELEM_MAND_TV(ANSI_A_E_CHAN_NUM, "");
8006 ELEM_OPT_TLV(ANSI_A_E_ENC_INFO, "");
8008 ELEM_OPT_TV(ANSI_A_E_SO, "");
8010 switch (global_a_variant)
8012 case A_VARIANT_IOS501:
8013 ELEM_OPT_TLV(ANSI_A_E_SOCI, "");
8015 ELEM_OPT_TLV(ANSI_A_E_A2P_BEARER_SESSION, "");
8017 ELEM_OPT_TLV(ANSI_A_E_A2P_BEARER_FORMAT, "");
8019 ELEM_OPT_TLV(ANSI_A_E_MID, "");
8020 break;
8023 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8027 * IOS 6.1.2.17
8029 static void
8030 bsmap_ass_failure(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8032 uint16_t consumed;
8033 uint32_t curr_offset;
8034 unsigned curr_len;
8036 curr_offset = offset;
8037 curr_len = len;
8039 ELEM_MAND_TLV(ANSI_A_E_CAUSE, "");
8041 ELEM_OPT_TLV(ANSI_A_E_SOCI, "");
8043 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8047 * IOS 6.1.2.20
8049 static void
8050 bsmap_clr_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8052 uint16_t consumed;
8053 uint32_t curr_offset;
8054 unsigned curr_len;
8056 curr_offset = offset;
8057 curr_len = len;
8059 ELEM_MAND_TLV(ANSI_A_E_CAUSE, "");
8061 ELEM_OPT_TLV(ANSI_A_E_CAUSE_L3, "");
8063 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8067 * IOS 6.1.2.21
8069 static void
8070 bsmap_clr_command(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8072 uint16_t consumed;
8073 uint32_t curr_offset;
8074 unsigned curr_len;
8076 curr_offset = offset;
8077 curr_len = len;
8079 ELEM_MAND_TLV(ANSI_A_E_CAUSE, "");
8081 ELEM_OPT_TLV(ANSI_A_E_CAUSE_L3, "");
8083 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8087 * IOS 6.1.2.22
8089 static void
8090 bsmap_clr_complete(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8092 uint16_t consumed;
8093 uint32_t curr_offset;
8094 unsigned curr_len;
8096 curr_offset = offset;
8097 curr_len = len;
8099 ELEM_OPT_T(ANSI_A_E_PDI, "");
8101 ELEM_OPT_TLV(ANSI_A_E_MOB_SUB_INFO, "");
8103 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8107 * IOS 6.1.2.24
8109 static void
8110 dtap_alert_with_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8112 uint32_t curr_offset;
8113 uint32_t consumed;
8114 unsigned curr_len;
8116 curr_offset = offset;
8117 curr_len = len;
8119 ELEM_OPT_TLV(ANSI_A_E_FWD_MS_INFO_RECS, "");
8121 ELEM_OPT_TLV(ANSI_A_E_SOCI, "");
8123 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8127 * IOS 6.1.2.28
8129 static void
8130 bsmap_bs_srvc_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8132 uint32_t curr_offset;
8133 uint32_t consumed;
8134 unsigned curr_len;
8136 curr_offset = offset;
8137 curr_len = len;
8139 ELEM_MAND_TLV(ANSI_A_E_MID, "");
8141 ELEM_OPT_TLV(ANSI_A_E_MID, "");
8143 ELEM_OPT_TV(ANSI_A_E_SO, "");
8145 ELEM_OPT_TV(ANSI_A_E_TAG, "");
8147 ELEM_OPT_TLV(ANSI_A_E_ADDS_USER_PART, "");
8149 ELEM_OPT_TLV(ANSI_A_E_SR_ID, "");
8151 ELEM_OPT_TLV(ANSI_A_E_MID, "");
8153 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8157 * IOS 6.1.2.29
8159 static void
8160 bsmap_bs_srvc_resp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8162 uint32_t curr_offset;
8163 uint32_t consumed;
8164 unsigned curr_len;
8166 curr_offset = offset;
8167 curr_len = len;
8169 ELEM_MAND_TLV(ANSI_A_E_MID, "");
8171 ELEM_OPT_TLV(ANSI_A_E_MID, "");
8173 ELEM_OPT_TV(ANSI_A_E_TAG, "");
8175 ELEM_OPT_TLV(ANSI_A_E_CAUSE, "");
8177 ELEM_OPT_TLV(ANSI_A_E_MID, "");
8179 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8183 * IOS 5 3.1.19
8185 static void
8186 bsmap_add_srvc_noti(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8188 uint32_t curr_offset;
8189 uint32_t consumed;
8190 unsigned curr_len;
8192 curr_offset = offset;
8193 curr_len = len;
8195 ELEM_MAND_TLV(ANSI_A_E_MID, "");
8197 ELEM_MAND_TV(ANSI_A_E_SO, "");
8199 ELEM_OPT_TLV(ANSI_A_E_A2P_BEARER_SESSION, "");
8201 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8205 * IOS 5 3.1.20
8207 static void
8208 dtap_add_srvc_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8210 uint32_t curr_offset;
8211 uint32_t consumed;
8212 unsigned curr_len;
8214 curr_offset = offset;
8215 curr_len = len;
8217 ELEM_MAND_TLV(ANSI_A_E_SOCI, "");
8219 ELEM_OPT_TLV(ANSI_A_E_CLD_PARTY_BCD_NUM, "");
8221 ELEM_MAND_TV(ANSI_A_E_SO, "");
8223 ELEM_OPT_T(ANSI_A_E_VP_REQ, "");
8225 ELEM_OPT_TLV(ANSI_A_E_CLD_PARTY_ASCII_NUM, "");
8227 ELEM_OPT_TV(ANSI_A_E_CIC, "");
8229 ELEM_OPT_TLV(ANSI_A_E_SSCI, "");
8231 ELEM_OPT_TLV(ANSI_A_E_A2P_BEARER_SESSION, "");
8233 ELEM_OPT_TLV(ANSI_A_E_A2P_BEARER_FORMAT, "");
8235 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8239 * IOS 5 3.1.10
8241 static void
8242 dtap_connect(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8244 uint32_t curr_offset;
8245 uint32_t consumed;
8246 unsigned curr_len;
8248 curr_offset = offset;
8249 curr_len = len;
8251 ELEM_OPT_TLV(ANSI_A_E_SOCI, "");
8253 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8257 * IOS 6.1.3.7
8259 static void
8260 dtap_flash_with_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8262 uint32_t curr_offset;
8263 uint32_t consumed;
8264 unsigned curr_len;
8266 curr_offset = offset;
8267 curr_len = len;
8269 ELEM_OPT_TLV(ANSI_A_E_CLD_PARTY_BCD_NUM, "");
8271 ELEM_OPT_TV(ANSI_A_E_SIGNAL, "");
8273 ELEM_OPT_TV(ANSI_A_E_MWI, "");
8275 ELEM_OPT_TLV(ANSI_A_E_CLG_PARTY_ASCII_NUM, "");
8277 ELEM_OPT_TV(ANSI_A_E_TAG, "");
8279 if (data_p->is_reverse)
8281 ELEM_OPT_TLV(ANSI_A_E_REV_MS_INFO_RECS, "");
8283 else
8285 ELEM_OPT_TLV(ANSI_A_E_FWD_MS_INFO_RECS, "");
8288 ELEM_OPT_TLV(ANSI_A_E_SSCI, "");
8290 ELEM_OPT_TLV(ANSI_A_E_SOCI, "");
8292 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8296 * IOS 6.1.3.8
8298 static void
8299 dtap_flash_with_info_ack(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8301 uint32_t curr_offset;
8302 uint32_t consumed;
8303 unsigned curr_len;
8305 curr_offset = offset;
8306 curr_len = len;
8308 ELEM_OPT_TV(ANSI_A_E_TAG, "");
8310 ELEM_OPT_TLV(ANSI_A_E_SOCI, "");
8312 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8316 * IOS 6.1.3.9
8318 static void
8319 bsmap_feat_noti(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8321 uint32_t curr_offset;
8322 uint32_t consumed;
8323 unsigned curr_len;
8325 curr_offset = offset;
8326 curr_len = len;
8328 ELEM_MAND_TLV(ANSI_A_E_MID, "");
8330 ELEM_OPT_TV(ANSI_A_E_TAG, "");
8332 ELEM_OPT_TLV(ANSI_A_E_CELL_ID_LIST, "");
8334 ELEM_OPT_TV(ANSI_A_E_SCI, "");
8336 ELEM_OPT_TV(ANSI_A_E_SIGNAL, "");
8338 ELEM_OPT_TV(ANSI_A_E_MWI, "");
8340 ELEM_OPT_TLV(ANSI_A_E_CLG_PARTY_ASCII_NUM, "");
8342 ELEM_OPT_TLV(ANSI_A_E_FWD_MS_INFO_RECS, "");
8344 ELEM_OPT_TLV(ANSI_A_E_IS2000_MOB_CAP, "");
8346 ELEM_OPT_TLV(ANSI_A_E_P_REV, "");
8348 ELEM_OPT_TLV(ANSI_A_E_MS_DES_FREQ, "");
8350 ELEM_OPT_TLV(ANSI_A_E_MOB_SUB_INFO, "");
8352 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8356 * IOS 6.1.3.10
8358 static void
8359 bsmap_feat_noti_ack(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8361 uint32_t curr_offset;
8362 uint32_t consumed;
8363 unsigned curr_len;
8365 curr_offset = offset;
8366 curr_len = len;
8368 ELEM_MAND_TLV(ANSI_A_E_MID, "");
8370 ELEM_OPT_TV(ANSI_A_E_TAG, "");
8372 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8376 * IOS 6.1.3.11
8378 static void
8379 bsmap_paca_command(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8381 uint32_t curr_offset;
8382 uint32_t consumed;
8383 unsigned curr_len;
8385 curr_offset = offset;
8386 curr_len = len;
8388 ELEM_OPT_TLV(ANSI_A_E_PRIO, "");
8390 ELEM_OPT_TLV(ANSI_A_E_PACA_TS, "");
8392 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8396 * IOS 6.1.3.12
8398 static void
8399 bsmap_paca_command_ack(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8401 uint32_t curr_offset;
8402 uint32_t consumed;
8403 unsigned curr_len;
8405 curr_offset = offset;
8406 curr_len = len;
8408 ELEM_OPT_TLV(ANSI_A_E_CAUSE, "");
8410 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8414 * IOS 6.1.3.13
8416 static void
8417 bsmap_paca_update(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8419 uint32_t curr_offset;
8420 uint32_t consumed;
8421 unsigned curr_len;
8423 curr_offset = offset;
8424 curr_len = len;
8426 ELEM_OPT_TLV(ANSI_A_E_MID, "");
8428 ELEM_OPT_TLV(ANSI_A_E_MID, "");
8430 ELEM_OPT_TLV(ANSI_A_E_PACA_ORDER, "");
8432 ELEM_OPT_TLV(ANSI_A_E_PRIO, "");
8434 ELEM_OPT_TLV(ANSI_A_E_AUTH_RESP_PARAM, "");
8436 ELEM_OPT_TV(ANSI_A_E_AUTH_CNF_PARAM, "");
8438 ELEM_OPT_TV(ANSI_A_E_AUTH_PARAM_COUNT, "");
8440 ELEM_OPT_TLV(ANSI_A_E_AUTH_CHLG_PARAM, "");
8442 ELEM_OPT_TLV(ANSI_A_E_AUTH_EVENT, "");
8444 ELEM_OPT_TLV(ANSI_A_E_MID, "");
8446 ELEM_OPT_TLV(ANSI_A_E_MS_DES_FREQ, "");
8448 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8452 * IOS 6.1.3.14
8454 static void
8455 bsmap_paca_update_ack(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8457 uint32_t curr_offset;
8458 uint32_t consumed;
8459 unsigned curr_len;
8461 curr_offset = offset;
8462 curr_len = len;
8464 ELEM_OPT_TLV(ANSI_A_E_MID, "");
8466 ELEM_OPT_TLV(ANSI_A_E_PRIO, "");
8468 ELEM_OPT_TLV(ANSI_A_E_CAUSE, "");
8470 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8474 * IOS 5 3.2.9
8476 static void
8477 bsmap_rm_pos_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8479 uint32_t curr_offset;
8480 uint32_t consumed;
8481 unsigned curr_len;
8483 curr_offset = offset;
8484 curr_len = len;
8486 ELEM_MAND_TLV(ANSI_A_E_PSMM_COUNT, "");
8488 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8492 * IOS 5 3.2.10
8494 static void
8495 bsmap_rm_pos_resp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8497 uint32_t curr_offset;
8498 uint32_t consumed;
8499 unsigned curr_len;
8501 curr_offset = offset;
8502 curr_len = len;
8504 ELEM_OPT_TLV(ANSI_A_E_CDMA_SOWD, "");
8506 ELEM_OPT_TLV(ANSI_A_E_CAUSE, "");
8508 ELEM_OPT_TLV(ANSI_A_E_DOWNLINK_RE_LIST, "");
8510 ELEM_OPT_TLV(ANSI_A_E_GEO_LOC, "");
8512 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8516 * IOS 6.1.4.1
8518 static void
8519 bsmap_auth_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8521 uint32_t curr_offset;
8522 uint32_t consumed;
8523 unsigned curr_len;
8525 curr_offset = offset;
8526 curr_len = len;
8528 ELEM_MAND_TLV(ANSI_A_E_AUTH_CHLG_PARAM, "");
8530 ELEM_OPT_TLV(ANSI_A_E_MID, "");
8532 ELEM_OPT_TV(ANSI_A_E_TAG, "");
8534 ELEM_OPT_TLV(ANSI_A_E_CELL_ID_LIST, "");
8536 ELEM_OPT_TV(ANSI_A_E_SCI, "");
8538 ELEM_OPT_TLV(ANSI_A_E_IS2000_MOB_CAP, "");
8540 ELEM_OPT_TLV(ANSI_A_E_P_REV, "");
8542 ELEM_OPT_TLV(ANSI_A_E_MS_DES_FREQ, "");
8544 ELEM_OPT_TLV(ANSI_A_E_MOB_SUB_INFO, "");
8546 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8549 static void
8550 dtap_auth_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8552 uint32_t curr_offset;
8553 uint32_t consumed;
8554 unsigned curr_len;
8556 curr_offset = offset;
8557 curr_len = len;
8559 ELEM_MAND_LV(ANSI_A_E_AUTH_CHLG_PARAM, "");
8561 ELEM_OPT_TLV(ANSI_A_E_IS2000_MOB_CAP, "");
8563 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8567 * IOS 6.1.4.2
8569 static void
8570 bsmap_auth_resp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8572 uint32_t curr_offset;
8573 uint32_t consumed;
8574 unsigned curr_len;
8576 curr_offset = offset;
8577 curr_len = len;
8579 ELEM_MAND_TLV(ANSI_A_E_AUTH_RESP_PARAM, "");
8581 ELEM_MAND_TLV(ANSI_A_E_MID, "");
8583 ELEM_MAND_TV(ANSI_A_E_TAG, "");
8585 ELEM_OPT_TLV(ANSI_A_E_MID, "");
8587 ELEM_OPT_TLV(ANSI_A_E_MID, "");
8589 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8593 * IOS 5
8594 * Section 3.1.21
8596 static void
8597 bsmap_bearer_upd_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8599 uint32_t curr_offset;
8600 uint32_t consumed;
8601 unsigned curr_len;
8603 curr_offset = offset;
8604 curr_len = len;
8606 ELEM_OPT_TLV(ANSI_A_E_A2P_BEARER_SESSION, "");
8608 ELEM_OPT_TLV(ANSI_A_E_A2P_BEARER_FORMAT, "");
8610 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8614 * IOS 5
8615 * Section 3.1.22
8617 static void
8618 bsmap_bearer_upd_resp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8620 uint32_t curr_offset;
8621 uint32_t consumed;
8622 unsigned curr_len;
8624 curr_offset = offset;
8625 curr_len = len;
8627 ELEM_OPT_TLV(ANSI_A_E_CAUSE, "");
8629 ELEM_OPT_TLV(ANSI_A_E_A2P_BEARER_SESSION, "");
8631 ELEM_OPT_TLV(ANSI_A_E_A2P_BEARER_FORMAT, "");
8633 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8637 * IOS 5
8638 * Section 3.1.23
8640 static void
8641 bsmap_bearer_upd_reqd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8643 uint32_t curr_offset;
8644 uint32_t consumed;
8645 unsigned curr_len;
8647 curr_offset = offset;
8648 curr_len = len;
8650 ELEM_OPT_TLV(ANSI_A_E_CAUSE, "");
8652 ELEM_OPT_TLV(ANSI_A_E_A2P_BEARER_SESSION, "");
8654 ELEM_OPT_TLV(ANSI_A_E_A2P_BEARER_FORMAT, "");
8656 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8659 static void
8660 dtap_auth_resp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8662 uint32_t curr_offset;
8663 uint32_t consumed;
8664 unsigned curr_len;
8666 curr_offset = offset;
8667 curr_len = len;
8669 ELEM_MAND_LV(ANSI_A_E_AUTH_RESP_PARAM, "");
8671 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8675 * IOS 6.1.4.3
8677 static void
8678 bsmap_user_zone_update(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8680 uint32_t curr_offset;
8681 uint32_t consumed;
8682 unsigned curr_len;
8684 curr_offset = offset;
8685 curr_len = len;
8687 ELEM_OPT_TLV(ANSI_A_E_UZ_ID, "");
8689 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8693 * IOS 5 3.3.16
8695 static void
8696 dtap_user_zone_update_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8698 uint32_t curr_offset;
8699 uint32_t consumed;
8700 unsigned curr_len;
8702 curr_offset = offset;
8703 curr_len = len;
8705 ELEM_MAND_TLV(ANSI_A_E_UZ_ID, "");
8707 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8711 * IOS 5 3.3.17
8713 static void
8714 dtap_user_zone_update(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8716 uint32_t curr_offset;
8717 uint32_t consumed;
8718 unsigned curr_len;
8720 curr_offset = offset;
8721 curr_len = len;
8723 ELEM_MAND_TLV(ANSI_A_E_UZ_ID, "");
8725 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8729 * IS-634.400A 6.1.3.1
8731 static void
8732 dtap_send_burst_dtmf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8734 uint32_t curr_offset;
8735 uint32_t consumed;
8736 unsigned curr_len;
8738 curr_offset = offset;
8739 curr_len = len;
8741 ELEM_MAND_LV(ANSI_A_E_BDTMF_TRANS_INFO, "");
8743 ELEM_MAND_LV(ANSI_A_E_DTMF_CHARS, "");
8745 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8749 * IS-634.400A 6.1.3.2
8751 static void
8752 dtap_send_burst_dtmf_ack(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8754 uint32_t curr_offset;
8755 uint32_t consumed;
8756 unsigned curr_len;
8758 curr_offset = offset;
8759 curr_len = len;
8761 ELEM_OPT_TLV(ANSI_A_E_CAUSE, "");
8763 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8767 * IS-634.400A 6.1.3.3
8769 static void
8770 dtap_start_dtmf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8772 uint32_t curr_offset;
8773 uint32_t consumed;
8774 unsigned curr_len;
8776 curr_offset = offset;
8777 curr_len = len;
8779 ELEM_MAND_LV(ANSI_A_E_DTMF_CHARS, "");
8781 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8785 * IS-634.400A 6.1.3.4
8787 static void
8788 dtap_start_dtmf_ack(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8790 uint32_t curr_offset;
8791 uint32_t consumed;
8792 unsigned curr_len;
8794 curr_offset = offset;
8795 curr_len = len;
8797 ELEM_OPT_TLV(ANSI_A_E_CAUSE, "");
8799 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8803 * IS-634.400A 6.1.3.6
8805 static void
8806 dtap_stop_dtmf_ack(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8808 uint32_t curr_offset;
8809 uint32_t consumed;
8810 unsigned curr_len;
8812 curr_offset = offset;
8813 curr_len = len;
8815 ELEM_OPT_TLV(ANSI_A_E_CAUSE, "");
8817 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8821 * IOS 5 3.3.18
8823 static void
8824 bsmap_user_zone_reject(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8826 uint32_t curr_offset;
8827 uint32_t consumed;
8828 unsigned curr_len;
8830 curr_offset = offset;
8831 curr_len = len;
8833 ELEM_OPT_TLV(ANSI_A_E_UZ_ID, "");
8835 ELEM_MAND_TLV(ANSI_A_E_MID, "");
8837 ELEM_OPT_TLV(ANSI_A_E_CELL_ID_LIST, "");
8839 ELEM_OPT_TV(ANSI_A_E_SCI, "");
8841 ELEM_OPT_TLV(ANSI_A_E_IS2000_MOB_CAP, "");
8843 ELEM_OPT_TLV(ANSI_A_E_P_REV, "");
8845 ELEM_OPT_TLV(ANSI_A_E_MS_DES_FREQ, "");
8847 ELEM_OPT_TLV(ANSI_A_E_MOB_SUB_INFO, "");
8849 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8853 * IOS 5 3.3.18
8855 static void
8856 dtap_user_zone_reject(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8858 uint32_t curr_offset;
8859 uint32_t consumed;
8860 unsigned curr_len;
8862 curr_offset = offset;
8863 curr_len = len;
8865 ELEM_OPT_TLV(ANSI_A_E_UZ_ID, "");
8867 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8871 * IOS 5 3.3.19
8873 static void
8874 bsmap_reg_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8876 uint32_t curr_offset;
8877 uint32_t consumed;
8878 unsigned curr_len;
8880 curr_offset = offset;
8881 curr_len = len;
8883 ELEM_MAND_TLV(ANSI_A_E_MID, "");
8885 ELEM_OPT_TLV(ANSI_A_E_CELL_ID_LIST, "");
8887 ELEM_OPT_TV(ANSI_A_E_SCI, "");
8889 ELEM_OPT_TLV(ANSI_A_E_P_REV, "");
8891 ELEM_OPT_TLV(ANSI_A_E_IS2000_MOB_CAP, "");
8893 ELEM_OPT_TLV(ANSI_A_E_MS_DES_FREQ, "");
8895 ELEM_OPT_TLV(ANSI_A_E_MOB_SUB_INFO, "");
8897 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8901 * IOS 5 3.3.20
8903 static void
8904 bsmap_ms_reg_noti(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8906 uint32_t curr_offset;
8907 uint32_t consumed;
8908 unsigned curr_len;
8910 curr_offset = offset;
8911 curr_len = len;
8913 ELEM_MAND_TLV(ANSI_A_E_CAUSE, "");
8915 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8919 * IOS 5 3.3.21
8921 static void
8922 bsmap_bs_auth_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8924 uint32_t curr_offset;
8925 uint32_t consumed;
8926 unsigned curr_len;
8928 curr_offset = offset;
8929 curr_len = len;
8931 ELEM_MAND_TLV(ANSI_A_E_MID, "");
8933 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8937 * IOS 5 3.3.22
8939 static void
8940 bsmap_bs_auth_req_ack(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8942 uint32_t curr_offset;
8943 uint32_t consumed;
8944 unsigned curr_len;
8946 curr_offset = offset;
8947 curr_len = len;
8949 ELEM_MAND_TLV(ANSI_A_E_MID, "");
8951 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8955 * IOS 6.1.4.4
8957 static void
8958 dtap_ssd_update_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8960 uint32_t curr_offset;
8961 uint32_t consumed;
8962 unsigned curr_len;
8964 curr_offset = offset;
8965 curr_len = len;
8967 ELEM_MAND_LV(ANSI_A_E_AUTH_CHLG_PARAM, "");
8969 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8973 * IOS 6.1.4.5
8975 static void
8976 dtap_bs_challenge(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8978 uint32_t curr_offset;
8979 uint32_t consumed;
8980 unsigned curr_len;
8982 curr_offset = offset;
8983 curr_len = len;
8985 ELEM_MAND_LV(ANSI_A_E_AUTH_CHLG_PARAM, "");
8987 EXTRANEOUS_DATA_CHECK(curr_len, 0);
8991 * IOS 6.1.4.6
8993 static void
8994 dtap_bs_challenge_resp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
8996 uint32_t curr_offset;
8997 uint32_t consumed;
8998 unsigned curr_len;
9000 curr_offset = offset;
9001 curr_len = len;
9003 ELEM_MAND_LV(ANSI_A_E_AUTH_RESP_PARAM, "");
9005 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9009 * IOS 6.1.4.7
9011 static void
9012 dtap_ssd_update_resp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9014 uint32_t curr_offset;
9015 uint32_t consumed;
9016 unsigned curr_len;
9018 curr_offset = offset;
9019 curr_len = len;
9021 ELEM_OPT_TLV(ANSI_A_E_CAUSE_L3, "");
9023 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9027 * IOS 6.1.4.8
9029 static void
9030 dtap_lu_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9032 uint32_t curr_offset;
9033 uint32_t consumed;
9034 unsigned curr_len;
9036 curr_offset = offset;
9037 curr_len = len;
9039 ELEM_MAND_LV(ANSI_A_E_MID, "");
9041 ELEM_OPT_TV(ANSI_A_E_LAI, "");
9043 ELEM_OPT_TLV(ANSI_A_E_CM_INFO_TYPE_2, "");
9045 ELEM_OPT_TV(ANSI_A_E_REG_TYPE, "");
9047 ELEM_OPT_TLV(ANSI_A_E_MID, "");
9049 ELEM_OPT_TV(ANSI_A_E_SCI, "");
9051 ELEM_OPT_TLV(ANSI_A_E_AUTH_RESP_PARAM, "");
9053 ELEM_OPT_TV(ANSI_A_E_AUTH_CNF_PARAM, "");
9055 ELEM_OPT_TV(ANSI_A_E_AUTH_PARAM_COUNT, "");
9057 ELEM_OPT_TLV(ANSI_A_E_AUTH_CHLG_PARAM, "");
9059 ELEM_OPT_TLV(ANSI_A_E_AUTH_EVENT, "");
9061 ELEM_OPT_TLV(ANSI_A_E_UZ_ID, "");
9063 ELEM_OPT_TLV(ANSI_A_E_IS2000_MOB_CAP, "");
9065 ELEM_OPT_TV(ANSI_A_E_RETURN_CAUSE, "");
9067 ELEM_OPT_TLV(ANSI_A_E_MS_DES_FREQ, "");
9069 ELEM_OPT_TLV(ANSI_A_E_MID, "");
9071 ELEM_OPT_TLV(ANSI_A_E_MOB_SUB_INFO, "");
9073 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9077 * IOS 6.1.4.9
9079 static void
9080 dtap_lu_accept(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9082 uint32_t curr_offset;
9083 uint32_t consumed;
9084 unsigned curr_len;
9086 curr_offset = offset;
9087 curr_len = len;
9089 switch (global_a_variant)
9091 case A_VARIANT_IOS401:
9092 ELEM_OPT_TV(ANSI_A_E_LAI, "");
9093 break;
9095 case A_VARIANT_IOS501:
9096 ELEM_OPT_TLV(ANSI_A_E_CAUSE, "");
9098 ELEM_OPT_TLV(ANSI_A_E_P_REV, "");
9100 ELEM_OPT_TLV(ANSI_A_E_MS_DES_FREQ, "");
9101 break;
9104 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9108 * IOS 6.1.4.10
9110 static void
9111 dtap_lu_reject(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9113 uint32_t curr_offset;
9114 uint32_t consumed;
9115 unsigned curr_len;
9117 curr_offset = offset;
9118 curr_len = len;
9120 ELEM_MAND_V(ANSI_A_E_REJ_CAUSE);
9122 switch (global_a_variant)
9124 case A_VARIANT_IOS501:
9125 ELEM_OPT_TLV(ANSI_A_E_P_REV, "");
9127 ELEM_OPT_TLV(ANSI_A_E_MS_DES_FREQ, "");
9128 break;
9131 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9135 * IOS 6.1.4.18
9137 static void
9138 bsmap_priv_mode_command(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9140 uint32_t curr_offset;
9141 uint32_t consumed;
9142 unsigned curr_len;
9144 curr_offset = offset;
9145 curr_len = len;
9147 ELEM_MAND_TLV(ANSI_A_E_ENC_INFO, "");
9149 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9153 * IOS 6.1.4.19
9155 static void
9156 bsmap_priv_mode_complete(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9158 uint32_t curr_offset;
9159 uint32_t consumed;
9160 unsigned curr_len;
9162 curr_offset = offset;
9163 curr_len = len;
9165 ELEM_OPT_TLV(ANSI_A_E_ENC_INFO, "");
9167 ELEM_OPT_T(ANSI_A_E_VP_REQ, "");
9169 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9173 * IOS 5 3.3.14
9175 static void
9176 bsmap_status_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9178 uint32_t curr_offset;
9179 uint32_t consumed;
9180 unsigned curr_len;
9182 curr_offset = offset;
9183 curr_len = len;
9185 ELEM_MAND_TLV(ANSI_A_E_IE_REQD, "");
9187 ELEM_OPT_TLV(ANSI_A_E_MID, "");
9189 ELEM_OPT_TLV(ANSI_A_E_MID, "");
9191 ELEM_OPT_TV(ANSI_A_E_SCI, "");
9193 ELEM_OPT_TLV(ANSI_A_E_CELL_ID_LIST, "");
9195 ELEM_OPT_TLV(ANSI_A_E_IS2000_MOB_CAP, "");
9197 ELEM_OPT_TLV(ANSI_A_E_P_REV, "");
9199 ELEM_OPT_TLV(ANSI_A_E_MS_DES_FREQ, "");
9201 ELEM_OPT_TLV(ANSI_A_E_MID, "");
9203 ELEM_OPT_TV(ANSI_A_E_TAG, "");
9205 ELEM_OPT_TLV(ANSI_A_E_MOB_SUB_INFO, "");
9207 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9211 * IOS 5 3.3.14
9213 static void
9214 dtap_status_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9216 uint32_t curr_offset;
9217 uint32_t consumed;
9218 unsigned curr_len;
9220 curr_offset = offset;
9221 curr_len = len;
9223 ELEM_MAND_LV(ANSI_A_E_IE_REQD, "");
9225 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9230 * IOS 5 3.3.15
9232 static void
9233 bsmap_status_resp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9235 uint32_t curr_offset;
9236 uint32_t consumed;
9237 unsigned curr_len;
9239 curr_offset = offset;
9240 curr_len = len;
9242 ELEM_MAND_TLV(ANSI_A_E_REV_MS_INFO_RECS, "");
9244 ELEM_OPT_TLV(ANSI_A_E_MID, "");
9246 ELEM_OPT_TLV(ANSI_A_E_MID, "");
9248 ELEM_OPT_TLV(ANSI_A_E_MID, "");
9250 ELEM_OPT_TV(ANSI_A_E_TAG, "");
9252 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9256 * IOS 5 3.3.15
9258 static void
9259 dtap_status_resp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9261 uint32_t curr_offset;
9262 uint32_t consumed;
9263 unsigned curr_len;
9265 curr_offset = offset;
9266 curr_len = len;
9268 ELEM_MAND_LV(ANSI_A_E_REV_MS_INFO_RECS, "");
9270 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9274 * IOS 6.1.5.4
9276 static void
9277 bsmap_ho_reqd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9279 uint32_t curr_offset;
9280 uint32_t consumed;
9281 unsigned curr_len;
9283 curr_offset = offset;
9284 curr_len = len;
9286 ELEM_MAND_TLV(ANSI_A_E_CAUSE, "");
9288 ELEM_MAND_TLV(ANSI_A_E_CELL_ID_LIST, " (Target)");
9290 ELEM_OPT_TLV(ANSI_A_E_CM_INFO_TYPE_2, "");
9292 ELEM_OPT_T(ANSI_A_E_RESP_REQ, "");
9294 ELEM_OPT_TLV(ANSI_A_E_ENC_INFO, "");
9296 ELEM_OPT_TLV(ANSI_A_E_IS95_CHAN_ID, "");
9298 ELEM_OPT_TLV(ANSI_A_E_MID, "");
9300 ELEM_OPT_TLV(ANSI_A_E_DOWNLINK_RE, "");
9302 ELEM_OPT_TV(ANSI_A_E_SO, "");
9304 ELEM_OPT_TLV(ANSI_A_E_CDMA_SOWD, "");
9306 ELEM_OPT_TLV(ANSI_A_E_IS95_MS_MEAS_CHAN_ID, "");
9308 ELEM_OPT_TLV(ANSI_A_E_IS2000_CHAN_ID, "");
9310 ELEM_OPT_TLV(ANSI_A_E_QOS_PARAMS, "");
9312 ELEM_OPT_TLV(ANSI_A_E_IS2000_MOB_CAP, "");
9314 ELEM_OPT_TLV(ANSI_A_E_IS2000_SCR, "");
9316 switch (global_a_variant)
9318 case A_VARIANT_IOS401:
9319 ELEM_OPT_TLV(ANSI_A_E_PDSN_IP_ADDR, "");
9320 break;
9322 case A_VARIANT_IOS501:
9323 ELEM_OPT_TLV(ANSI_A_E_S_PDSN_ADDR, "");
9324 break;
9327 ELEM_OPT_TLV(ANSI_A_E_PTYPE, "");
9329 ELEM_OPT_TLV(ANSI_A_E_SRNC_TRNC_TC, "");
9331 ELEM_OPT_TV(ANSI_A_E_SCI, "");
9333 ELEM_OPT_TV(ANSI_A_E_ACC_NET_ID, "");
9335 ELEM_OPT_TLV(ANSI_A_E_SO_LIST, "");
9337 ELEM_OPT_TLV(ANSI_A_E_IS2000_CHAN_ID_3X, "");
9339 ELEM_OPT_TLV(ANSI_A_E_IS2000_NN_SCR, "");
9341 ELEM_OPT_TLV(ANSI_A_E_ANCH_PDSN_ADDR, "");
9343 ELEM_OPT_TLV(ANSI_A_E_ANCH_PP_ADDR, "");
9345 ELEM_OPT_TLV(ANSI_A_E_PSP, "");
9347 ELEM_OPT_TLV(ANSI_A_E_PLCM_ID, "");
9349 ELEM_OPT_TLV(ANSI_A_E_MID, "");
9351 ELEM_OPT_TLV(ANSI_A_E_MOB_SUB_INFO, "");
9353 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9357 * IOS 6.1.5.5
9359 static void
9360 bsmap_ho_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9362 uint32_t curr_offset;
9363 uint32_t consumed;
9364 unsigned curr_len;
9366 curr_offset = offset;
9367 curr_len = len;
9369 ELEM_MAND_TLV(ANSI_A_E_CHAN_TYPE, "");
9371 ELEM_MAND_TLV(ANSI_A_E_ENC_INFO, "");
9373 ELEM_MAND_TLV(ANSI_A_E_CM_INFO_TYPE_2, "");
9375 ELEM_MAND_TLV(ANSI_A_E_CELL_ID_LIST, "(Target)");
9377 ELEM_OPT_TLV(ANSI_A_E_CIC_EXT, "");
9379 ELEM_OPT_TLV(ANSI_A_E_IS95_CHAN_ID, "");
9381 ELEM_OPT_TLV(ANSI_A_E_MID, "");
9383 ELEM_OPT_TLV(ANSI_A_E_MID, "");
9385 ELEM_OPT_TLV(ANSI_A_E_DOWNLINK_RE, "");
9387 ELEM_OPT_TV(ANSI_A_E_SO, "");
9389 ELEM_OPT_TLV(ANSI_A_E_CDMA_SOWD, "");
9391 ELEM_OPT_TLV(ANSI_A_E_IS95_MS_MEAS_CHAN_ID, "");
9393 ELEM_OPT_TLV(ANSI_A_E_IS2000_CHAN_ID, "");
9395 ELEM_OPT_TLV(ANSI_A_E_QOS_PARAMS, "");
9397 ELEM_OPT_TLV(ANSI_A_E_IS2000_MOB_CAP, "");
9399 ELEM_OPT_TLV(ANSI_A_E_IS2000_SCR, "");
9401 switch (global_a_variant)
9403 case A_VARIANT_IOS401:
9404 ELEM_OPT_TLV(ANSI_A_E_PDSN_IP_ADDR, "");
9405 break;
9407 case A_VARIANT_IOS501:
9408 ELEM_OPT_TLV(ANSI_A_E_S_PDSN_ADDR, "");
9409 break;
9412 ELEM_OPT_TLV(ANSI_A_E_PTYPE, "");
9414 switch (global_a_variant)
9416 case A_VARIANT_IOS501:
9417 ELEM_OPT_TLV(ANSI_A_E_SRNC_TRNC_TC, "");
9419 ELEM_OPT_TV(ANSI_A_E_SCI, "");
9421 ELEM_OPT_TV(ANSI_A_E_ACC_NET_ID, "");
9423 ELEM_OPT_TLV(ANSI_A_E_SO_LIST, "");
9425 ELEM_OPT_TLV(ANSI_A_E_IS2000_CHAN_ID_3X, "");
9427 ELEM_OPT_TLV(ANSI_A_E_IS2000_NN_SCR, "");
9429 ELEM_OPT_TLV(ANSI_A_E_ANCH_PDSN_ADDR, "");
9431 ELEM_OPT_TLV(ANSI_A_E_ANCH_PP_ADDR, "");
9433 ELEM_OPT_TLV(ANSI_A_E_PSP, "");
9435 ELEM_OPT_TLV(ANSI_A_E_PLCM_ID, "");
9437 ELEM_OPT_TLV(ANSI_A_E_A2P_BEARER_SESSION, "");
9439 ELEM_OPT_TLV(ANSI_A_E_A2P_BEARER_FORMAT, "");
9441 ELEM_OPT_TLV(ANSI_A_E_MID, "");
9443 ELEM_OPT_TLV(ANSI_A_E_MOB_SUB_INFO, "");
9444 break;
9447 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9451 * IOS 6.1.5.6
9453 static void
9454 bsmap_ho_req_ack(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9456 uint32_t curr_offset;
9457 uint32_t consumed;
9458 unsigned curr_len;
9460 curr_offset = offset;
9461 curr_len = len;
9463 ELEM_OPT_TLV(ANSI_A_E_IS95_CHAN_ID, "");
9465 ELEM_OPT_TLV(ANSI_A_E_CELL_ID_LIST, "");
9467 ELEM_OPT_TLV(ANSI_A_E_EXT_HO_DIR_PARAMS, "");
9469 ELEM_OPT_TV(ANSI_A_E_HHO_PARAMS, "");
9471 ELEM_OPT_TLV(ANSI_A_E_IS2000_CHAN_ID, "");
9473 ELEM_OPT_TLV(ANSI_A_E_IS2000_SCR, "");
9475 ELEM_OPT_TLV(ANSI_A_E_IS2000_NN_SCR, "");
9477 switch (global_a_variant)
9479 case A_VARIANT_IOS501:
9480 ELEM_OPT_TLV(ANSI_A_E_TRNC_SRNC_TC, "");
9482 ELEM_OPT_TLV(ANSI_A_E_SO_LIST, "");
9484 ELEM_OPT_TLV(ANSI_A_E_CAUSE, "");
9486 ELEM_OPT_TLV(ANSI_A_E_IS2000_CHAN_ID_3X, "");
9488 ELEM_OPT_TLV(ANSI_A_E_PLCM_ID, "");
9490 ELEM_OPT_TLV(ANSI_A_E_A2P_BEARER_SESSION, "");
9492 ELEM_OPT_TLV(ANSI_A_E_A2P_BEARER_FORMAT, "");
9493 break;
9496 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9500 * IOS 6.1.5.7
9502 static void
9503 bsmap_ho_failure(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9505 uint32_t curr_offset;
9506 uint32_t consumed;
9507 unsigned curr_len;
9509 curr_offset = offset;
9510 curr_len = len;
9512 ELEM_MAND_TLV(ANSI_A_E_CAUSE, "");
9514 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9518 * IOS 6.1.5.8
9520 static void
9521 bsmap_ho_command(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9523 uint32_t curr_offset;
9524 uint32_t consumed;
9525 unsigned curr_len;
9527 curr_offset = offset;
9528 curr_len = len;
9530 ELEM_OPT_TV(ANSI_A_E_RF_CHAN_ID, "");
9532 ELEM_OPT_TLV(ANSI_A_E_IS95_CHAN_ID, "");
9534 ELEM_OPT_TLV(ANSI_A_E_CELL_ID_LIST, "");
9536 ELEM_OPT_TLV(ANSI_A_E_HO_POW_LEV, "");
9538 ELEM_OPT_TV(ANSI_A_E_SID, "");
9540 ELEM_OPT_TLV(ANSI_A_E_EXT_HO_DIR_PARAMS, "");
9542 ELEM_OPT_TV(ANSI_A_E_HHO_PARAMS, "");
9544 ELEM_OPT_TLV(ANSI_A_E_IS2000_CHAN_ID, "");
9546 ELEM_OPT_TLV(ANSI_A_E_IS2000_SCR, "");
9548 ELEM_OPT_TLV(ANSI_A_E_IS2000_NN_SCR, "");
9550 switch (global_a_variant)
9552 case A_VARIANT_IOS501:
9553 ELEM_OPT_TLV(ANSI_A_E_TRNC_SRNC_TC, "");
9555 ELEM_OPT_TLV(ANSI_A_E_SO_LIST, "");
9557 ELEM_OPT_TLV(ANSI_A_E_CAUSE, "");
9559 ELEM_OPT_TLV(ANSI_A_E_AMPS_HHO_PARAM, "");
9561 ELEM_OPT_TLV(ANSI_A_E_IS2000_CHAN_ID_3X, "");
9563 ELEM_OPT_TLV(ANSI_A_E_PLCM_ID, "");
9564 break;
9567 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9571 * IOS 5 3.4.6
9573 static void
9574 bsmap_ho_complete(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9576 uint32_t curr_offset;
9577 uint32_t consumed;
9578 unsigned curr_len;
9580 curr_offset = offset;
9581 curr_len = len;
9583 ELEM_OPT_TV(ANSI_A_E_SO, "");
9585 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9589 * IOS 6.1.5.9
9591 static void
9592 bsmap_ho_reqd_rej(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9594 uint32_t curr_offset;
9595 uint32_t consumed;
9596 unsigned curr_len;
9598 curr_offset = offset;
9599 curr_len = len;
9601 ELEM_MAND_TLV(ANSI_A_E_CAUSE, "");
9603 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9607 * IOS 6.1.5.12
9609 static void
9610 bsmap_ho_performed(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9612 uint32_t curr_offset;
9613 uint32_t consumed;
9614 unsigned curr_len;
9616 curr_offset = offset;
9617 curr_len = len;
9619 ELEM_MAND_TLV(ANSI_A_E_CAUSE, "");
9621 ELEM_OPT_TLV(ANSI_A_E_CELL_ID_LIST, "");
9623 ELEM_OPT_TV(ANSI_A_E_CHAN_NUM, "");
9625 ELEM_OPT_TLV(ANSI_A_E_BAND_CLASS, "");
9627 ELEM_OPT_TLV(ANSI_A_E_MOB_SUB_INFO, "");
9629 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9633 * IOS 6.1.6.2
9635 static void
9636 bsmap_block(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9638 uint32_t curr_offset;
9639 uint32_t consumed;
9640 unsigned curr_len;
9642 curr_offset = offset;
9643 curr_len = len;
9645 ELEM_MAND_TV(ANSI_A_E_CIC, "");
9647 ELEM_MAND_TLV(ANSI_A_E_CAUSE, "");
9649 ELEM_OPT_TLV(ANSI_A_E_CCT_GROUP, "");
9651 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9655 * IOS 6.1.6.3
9657 static void
9658 bsmap_block_ack(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9660 uint32_t curr_offset;
9661 uint32_t consumed;
9662 unsigned curr_len;
9664 curr_offset = offset;
9665 curr_len = len;
9667 ELEM_MAND_TV(ANSI_A_E_CIC, "");
9669 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9673 * IOS 6.1.6.4
9675 static void
9676 bsmap_unblock(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9678 uint32_t curr_offset;
9679 uint32_t consumed;
9680 unsigned curr_len;
9682 curr_offset = offset;
9683 curr_len = len;
9685 ELEM_MAND_TV(ANSI_A_E_CIC, "");
9687 ELEM_OPT_TLV(ANSI_A_E_CCT_GROUP, "");
9689 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9693 * IOS 6.1.6.5
9695 static void
9696 bsmap_unblock_ack(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9698 uint32_t curr_offset;
9699 uint32_t consumed;
9700 unsigned curr_len;
9702 curr_offset = offset;
9703 curr_len = len;
9705 ELEM_MAND_TV(ANSI_A_E_CIC, "");
9707 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9711 * IOS 6.1.6.6
9713 static void
9714 bsmap_reset(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9716 uint32_t curr_offset;
9717 uint32_t consumed;
9718 unsigned curr_len;
9720 curr_offset = offset;
9721 curr_len = len;
9723 ELEM_MAND_TLV(ANSI_A_E_CAUSE, "");
9725 ELEM_OPT_TLV(ANSI_A_E_SW_VER, "");
9727 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9731 * IOS 6.1.6.7
9733 static void
9734 bsmap_reset_ack(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9736 uint32_t curr_offset;
9737 uint32_t consumed;
9738 unsigned curr_len;
9740 curr_offset = offset;
9741 curr_len = len;
9743 ELEM_OPT_TLV(ANSI_A_E_SW_VER, "");
9745 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9749 * IOS 6.1.6.8
9751 static void
9752 bsmap_reset_cct(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9754 uint32_t curr_offset;
9755 uint32_t consumed;
9756 unsigned curr_len;
9758 curr_offset = offset;
9759 curr_len = len;
9761 ELEM_MAND_TV(ANSI_A_E_CIC, "");
9763 ELEM_MAND_TLV(ANSI_A_E_CAUSE, "");
9765 ELEM_OPT_TLV(ANSI_A_E_CCT_GROUP, "");
9767 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9771 * IOS 6.1.6.9
9773 static void
9774 bsmap_reset_cct_ack(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9776 uint32_t curr_offset;
9777 uint32_t consumed;
9778 unsigned curr_len;
9780 curr_offset = offset;
9781 curr_len = len;
9783 ELEM_MAND_TV(ANSI_A_E_CIC, "");
9785 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9789 * IOS 6.1.6.10
9791 static void
9792 bsmap_xmode_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9794 uint32_t curr_offset;
9795 uint32_t consumed;
9796 unsigned curr_len;
9798 curr_offset = offset;
9799 curr_len = len;
9801 ELEM_MAND_TLV(ANSI_A_E_XMODE, "");
9803 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9807 * IOS 6.1.6.11
9809 static void
9810 bsmap_xmode_ack(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9812 uint32_t curr_offset;
9813 uint32_t consumed;
9814 unsigned curr_len;
9816 curr_offset = offset;
9817 curr_len = len;
9819 ELEM_MAND_TLV(ANSI_A_E_CAUSE, "");
9821 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9825 * IOS 6.1.7.1
9827 static void
9828 bsmap_adds_page(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9830 uint32_t curr_offset;
9831 uint32_t consumed;
9832 unsigned curr_len;
9834 curr_offset = offset;
9835 curr_len = len;
9837 ELEM_MAND_TLV(ANSI_A_E_MID, "");
9839 ELEM_MAND_TLV(ANSI_A_E_ADDS_USER_PART, "");
9841 ELEM_OPT_TV(ANSI_A_E_TAG, "");
9843 ELEM_OPT_TLV(ANSI_A_E_CELL_ID_LIST, "");
9845 ELEM_OPT_TV(ANSI_A_E_SCI, "");
9847 ELEM_OPT_TLV(ANSI_A_E_IS2000_MOB_CAP, "");
9849 ELEM_OPT_TLV(ANSI_A_E_P_REV, "");
9851 ELEM_OPT_TLV(ANSI_A_E_MS_DES_FREQ, "");
9853 ELEM_OPT_TLV(ANSI_A_E_MOB_SUB_INFO, "");
9855 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9859 * IOS 6.1.7.2
9861 static void
9862 bsmap_adds_transfer(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9864 uint32_t curr_offset;
9865 uint32_t consumed;
9866 unsigned curr_len;
9868 curr_offset = offset;
9869 curr_len = len;
9871 ELEM_MAND_TLV(ANSI_A_E_MID, "");
9873 ELEM_MAND_TLV(ANSI_A_E_ADDS_USER_PART, "");
9875 ELEM_OPT_TLV(ANSI_A_E_MID, "");
9877 ELEM_OPT_TLV(ANSI_A_E_AUTH_RESP_PARAM, "");
9879 ELEM_OPT_TV(ANSI_A_E_AUTH_CNF_PARAM, "");
9881 ELEM_OPT_TV(ANSI_A_E_AUTH_PARAM_COUNT, "");
9883 ELEM_OPT_TLV(ANSI_A_E_AUTH_CHLG_PARAM, "");
9885 ELEM_OPT_TLV(ANSI_A_E_AUTH_EVENT, "");
9887 ELEM_OPT_TLV(ANSI_A_E_CELL_ID, "");
9889 ELEM_OPT_TLV(ANSI_A_E_CDMA_SOWD, "");
9891 ELEM_OPT_TLV(ANSI_A_E_AUTH_DATA, "");
9893 ELEM_OPT_TV(ANSI_A_E_TAG, "");
9895 ELEM_OPT_TLV(ANSI_A_E_CM_INFO_TYPE_2, "");
9897 ELEM_OPT_TV(ANSI_A_E_SCI, "");
9899 ELEM_OPT_TV(ANSI_A_E_SO, "");
9901 ELEM_OPT_TLV(ANSI_A_E_UZ_ID, "");
9903 ELEM_OPT_TLV(ANSI_A_E_IS2000_MOB_CAP, "");
9905 ELEM_OPT_TLV(ANSI_A_E_MID, "");
9907 ELEM_OPT_TLV(ANSI_A_E_MOB_SUB_INFO, "");
9909 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9913 * IOS 5 3.6.4
9915 static void
9916 bsmap_adds_transfer_ack(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9918 uint32_t curr_offset;
9919 uint32_t consumed;
9920 unsigned curr_len;
9922 curr_offset = offset;
9923 curr_len = len;
9925 ELEM_MAND_TLV(ANSI_A_E_MID, "");
9927 ELEM_OPT_TV(ANSI_A_E_TAG, "");
9929 ELEM_OPT_TLV(ANSI_A_E_CAUSE, "");
9931 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9935 * IOS 6.1.7.3
9937 static void
9938 dtap_adds_deliver(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9940 uint32_t curr_offset;
9941 uint32_t consumed;
9942 unsigned curr_len;
9944 curr_offset = offset;
9945 curr_len = len;
9947 ELEM_MAND_LV(ANSI_A_E_ADDS_USER_PART, "");
9949 ELEM_OPT_TV(ANSI_A_E_TAG, "");
9951 ELEM_OPT_TLV(ANSI_A_E_CDMA_SOWD, "");
9953 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9957 * IOS 6.1.7.4
9959 static void
9960 bsmap_adds_page_ack(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9962 uint32_t curr_offset;
9963 uint32_t consumed;
9964 unsigned curr_len;
9966 curr_offset = offset;
9967 curr_len = len;
9969 ELEM_MAND_TLV(ANSI_A_E_MID, "");
9971 ELEM_OPT_TV(ANSI_A_E_TAG, "");
9973 ELEM_OPT_TLV(ANSI_A_E_MID, "");
9975 ELEM_OPT_TLV(ANSI_A_E_CAUSE, "");
9977 ELEM_OPT_TLV(ANSI_A_E_CELL_ID, "");
9979 ELEM_OPT_TLV(ANSI_A_E_MID, "");
9981 EXTRANEOUS_DATA_CHECK(curr_len, 0);
9985 * IOS 6.1.7.5
9987 static void
9988 dtap_adds_deliver_ack(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
9990 uint32_t curr_offset;
9991 uint32_t consumed;
9992 unsigned curr_len;
9994 curr_offset = offset;
9995 curr_len = len;
9997 ELEM_OPT_TV(ANSI_A_E_TAG, "");
9999 ELEM_OPT_TLV(ANSI_A_E_CAUSE, "");
10001 EXTRANEOUS_DATA_CHECK(curr_len, 0);
10005 * IOS 6.1.8.1
10007 static void
10008 bsmap_rejection(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
10010 uint32_t curr_offset;
10011 uint32_t consumed;
10012 unsigned curr_len;
10014 curr_offset = offset;
10015 curr_len = len;
10017 ELEM_OPT_TLV(ANSI_A_E_MID, "");
10019 ELEM_OPT_TLV(ANSI_A_E_MID, "");
10021 ELEM_OPT_TLV(ANSI_A_E_IS2000_CAUSE, "");
10023 ELEM_OPT_TLV(ANSI_A_E_MID, "");
10025 EXTRANEOUS_DATA_CHECK(curr_len, 0);
10028 static void
10029 dtap_rejection(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p)
10031 uint32_t curr_offset;
10032 uint32_t consumed;
10033 unsigned curr_len;
10035 curr_offset = offset;
10036 curr_len = len;
10038 ELEM_OPT_TLV(ANSI_A_E_MID, "");
10040 ELEM_OPT_TLV(ANSI_A_E_IS2000_CAUSE, "");
10042 ELEM_OPT_TLV(ANSI_A_E_SOCI, "");
10044 ELEM_OPT_TLV(ANSI_A_E_MID, "");
10046 EXTRANEOUS_DATA_CHECK(curr_len, 0);
10049 #define ANSI_A_IOS401_BSMAP_NUM_MSG array_length(ansi_a_ios401_bsmap_strings)
10050 #define ANSI_A_IOS501_BSMAP_NUM_MSG array_length(ansi_a_ios501_bsmap_strings)
10051 static int ett_bsmap_msg[MAX(ANSI_A_IOS401_BSMAP_NUM_MSG, ANSI_A_IOS501_BSMAP_NUM_MSG)];
10052 static void (*bsmap_msg_fcn[])(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p) =
10054 bsmap_add_srvc_noti, /* Additional Service Notification */
10055 bsmap_adds_page, /* ADDS Page */
10056 bsmap_adds_page_ack, /* ADDS Page Ack */
10057 bsmap_adds_transfer, /* ADDS Transfer */
10058 bsmap_adds_transfer_ack, /* ADDS Transfer Ack */
10059 bsmap_ass_complete, /* Assignment Complete */
10060 bsmap_ass_failure, /* Assignment Failure */
10061 bsmap_ass_req, /* Assignment Request */
10062 bsmap_auth_req, /* Authentication Request */
10063 bsmap_auth_resp, /* Authentication Response */
10064 NULL /* no BSMAP definition */, /* Base Station Challenge */
10065 NULL /* no BSMAP definition */, /* Base Station Challenge Response */
10066 bsmap_block, /* Block */
10067 bsmap_block_ack, /* Block Acknowledge */
10068 bsmap_bs_srvc_req, /* BS Service Request */
10069 bsmap_bs_srvc_resp, /* BS Service Response */
10070 bsmap_clr_command, /* Clear Command */
10071 bsmap_clr_complete, /* Clear Complete */
10072 bsmap_clr_req, /* Clear Request */
10073 bsmap_cl3_info, /* Complete Layer 3 Information */
10074 bsmap_feat_noti, /* Feature Notification */
10075 bsmap_feat_noti_ack, /* Feature Notification Ack */
10076 bsmap_ho_command, /* Handoff Command */
10077 NULL /* no associated data */, /* Handoff Commenced */
10078 bsmap_ho_complete, /* Handoff Complete */
10079 bsmap_ho_failure, /* Handoff Failure */
10080 bsmap_ho_performed, /* Handoff Performed */
10081 bsmap_ho_req, /* Handoff Request */
10082 bsmap_ho_req_ack, /* Handoff Request Acknowledge */
10083 bsmap_ho_reqd, /* Handoff Required */
10084 bsmap_ho_reqd_rej, /* Handoff Required Reject */
10085 bsmap_paca_command, /* PACA Command */
10086 bsmap_paca_command_ack, /* PACA Command Ack */
10087 bsmap_paca_update, /* PACA Update */
10088 bsmap_paca_update_ack, /* PACA Update Ack */
10089 bsmap_page_req, /* Paging Request */
10090 bsmap_priv_mode_command, /* Privacy Mode Command */
10091 bsmap_priv_mode_complete, /* Privacy Mode Complete */
10092 bsmap_rm_pos_req, /* Radio Measurements for Position Request */
10093 bsmap_rm_pos_resp, /* Radio Measurements for Position Response */
10094 bsmap_rejection, /* Rejection */
10095 bsmap_reg_req, /* Registration Request */
10096 bsmap_reset, /* Reset */
10097 bsmap_reset_ack, /* Reset Acknowledge */
10098 bsmap_reset_cct, /* Reset Circuit */
10099 bsmap_reset_cct_ack, /* Reset Circuit Acknowledge */
10100 NULL /* no BSMAP definition */, /* SSD Update Request */
10101 NULL /* no BSMAP definition */, /* SSD Update Response */
10102 bsmap_status_req, /* Status Request */
10103 bsmap_status_resp, /* Status Response */
10104 bsmap_xmode_ack, /* Transcoder Control Acknowledge */
10105 bsmap_xmode_req, /* Transcoder Control Request */
10106 bsmap_unblock, /* Unblock */
10107 bsmap_unblock_ack, /* Unblock Acknowledge */
10108 bsmap_user_zone_reject, /* User Zone Reject */
10109 bsmap_user_zone_update, /* User Zone Update */
10110 bsmap_bearer_upd_req, /* Bearer Update Request *//* IOS 5.0.1 */
10111 bsmap_bearer_upd_resp, /* Bearer Update Response *//* IOS 5.0.1 */
10112 bsmap_bearer_upd_reqd, /* Bearer Update Required *//* IOS 5.0.1 */
10113 bsmap_ms_reg_noti, /* Mobile Station Registered Notification *//* IOS 5.0.1 */
10114 bsmap_bs_auth_req, /* BS Authentication Request *//* IOS 5.0.1 */
10115 bsmap_bs_auth_req_ack, /* BS Authentication Request Ack *//* IOS 5.0.1 */
10116 NULL /* NONE */
10119 #define ANSI_A_IOS401_DTAP_NUM_MSG array_length(ansi_a_ios401_dtap_strings)
10120 #define ANSI_A_IOS501_DTAP_NUM_MSG array_length(ansi_a_ios501_dtap_strings)
10121 static int ett_dtap_msg[MAX(ANSI_A_IOS401_DTAP_NUM_MSG, ANSI_A_IOS501_DTAP_NUM_MSG)];
10122 static void (*dtap_msg_fcn[])(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len, ansi_a_shared_data_t *data_p) =
10124 dtap_add_srvc_req, /* Additional Service Request */
10125 dtap_adds_deliver, /* ADDS Deliver */
10126 dtap_adds_deliver_ack, /* ADDS Deliver Ack */
10127 dtap_alert_with_info, /* Alert With Information */
10128 dtap_auth_req, /* Authentication Request */
10129 dtap_auth_resp, /* Authentication Response */
10130 dtap_bs_challenge, /* Base Station Challenge */
10131 dtap_bs_challenge_resp, /* Base Station Challenge Response */
10132 dtap_cm_srvc_req, /* CM Service Request */
10133 dtap_cm_srvc_req_cont, /* CM Service Request Continuation */
10134 dtap_connect, /* Connect */
10135 dtap_flash_with_info, /* Flash with Information */
10136 dtap_flash_with_info_ack, /* Flash with Information Ack */
10137 dtap_lu_accept, /* Location Updating Accept */
10138 dtap_lu_reject, /* Location Updating Reject */
10139 dtap_lu_req, /* Location Updating Request */
10140 dtap_page_resp, /* Paging Response */
10141 NULL /* no associated data */, /* Parameter Update Confirm */
10142 NULL /* no associated data */, /* Parameter Update Request */
10143 dtap_rejection, /* Rejection */
10144 dtap_progress, /* Progress */
10145 dtap_srvc_redirection, /* Service Redirection */
10146 dtap_srvc_release, /* Service Release */
10147 dtap_srvc_release_complete, /* Service Release Complete */
10148 dtap_ssd_update_req, /* SSD Update Request */
10149 dtap_ssd_update_resp, /* SSD Update Response */
10150 dtap_status_req, /* Status Request */
10151 dtap_status_resp, /* Status Response */
10152 dtap_user_zone_reject, /* User Zone Reject */
10153 dtap_user_zone_update, /* User Zone Update */
10154 dtap_user_zone_update_req, /* User Zone Update Request */
10155 dtap_send_burst_dtmf, /* Send Burst DTMF */
10156 dtap_send_burst_dtmf_ack, /* Send Burst DTMF Ack */
10157 dtap_start_dtmf, /* Start DTMF */
10158 dtap_start_dtmf_ack, /* Start DTMF Ack */
10159 NULL /* no associated data */, /* Stop DTMF */
10160 dtap_stop_dtmf_ack, /* Stop DTMF Ack */
10161 NULL /* NONE */
10164 /* Utillity function to dissect CDMA200 A1 elements in ANSI MAP messages */
10165 void
10166 dissect_cdma2000_a1_elements(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, uint32_t offset, unsigned len)
10168 uint32_t curr_offset;
10169 uint32_t consumed;
10170 unsigned curr_len;
10171 unsigned idx;
10172 uint8_t oct;
10173 ansi_a_shared_data_t shared_data;
10174 ansi_a_shared_data_t *data_p;
10176 memset((void *) &shared_data, 0, sizeof(shared_data));
10177 data_p = &shared_data;
10179 shared_data.g_tree = tree;
10181 curr_offset = offset;
10182 curr_len = len;
10185 * require at least 2 octets for T(ype) and L(ength)
10187 while (curr_len > 1)
10190 * peeking at T(ype)
10192 oct = tvb_get_uint8(tvb, curr_offset);
10194 for (idx=0; idx < (unsigned) ansi_a_elem_1_max; idx++)
10196 if (oct == (uint8_t) ansi_a_elem_1_strings[idx].value)
10198 ELEM_OPT_TLV((elem_idx_t) idx, "");
10199 break;
10203 if (idx == (elem_idx_t) ansi_a_elem_1_max)
10206 * didn't recognize the T(ype)
10207 * assuming it is in TLV form, step over
10209 consumed = 2 + tvb_get_uint8(tvb, curr_offset + 1);
10210 curr_offset += consumed;
10211 curr_len -= consumed;
10215 EXTRANEOUS_DATA_CHECK(curr_len, 0);
10218 /* GENERIC DISSECTOR FUNCTIONS */
10220 static void
10221 dissect_bsmap_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, bool from_sip)
10223 static ansi_a_tap_rec_t tap_rec[16];
10224 static ansi_a_tap_rec_t *tap_p;
10225 static int tap_current = 0;
10226 uint8_t oct;
10227 uint32_t offset;
10228 uint32_t len;
10229 int dec_idx;
10230 proto_item *bsmap_item = NULL;
10231 proto_tree *bsmap_tree = NULL;
10232 const char *msg_str;
10233 ansi_a_shared_data_t shared_data;
10235 memset((void *) &shared_data, 0, sizeof(shared_data));
10237 shared_data.g_tree = tree;
10238 shared_data.from_sip = from_sip;
10241 * determine if this is a REVERSE link message (from BSC/mobile)
10243 shared_data.is_reverse = (pinfo->p2p_dir == P2P_DIR_RECV);
10245 col_append_str(pinfo->cinfo, COL_INFO, "(BSMAP) ");
10248 * set tap record pointer
10250 tap_current++;
10251 if (tap_current == array_length(tap_rec))
10253 tap_current = 0;
10255 tap_p = &tap_rec[tap_current];
10257 len = tvb_reported_length(tvb);
10258 offset = 0;
10261 * add BSMAP message name
10263 oct = tvb_get_uint8(tvb, offset);
10265 msg_str = my_try_val_to_str_idx((uint32_t) oct, ansi_a_bsmap_strings, &dec_idx);
10268 * create the a protocol tree
10270 if (msg_str == NULL)
10272 bsmap_item =
10273 proto_tree_add_expert_format(tree, pinfo, &ei_ansi_a_unknown_bsmap_msg, tvb, 0, len,
10274 "ANSI A-I/F BSMAP - Unknown BSMAP Message Type (%u)",
10275 oct);
10277 bsmap_tree = proto_item_add_subtree(bsmap_item, ett_bsmap);
10279 else
10281 bsmap_item =
10282 proto_tree_add_protocol_format(tree, proto_a_bsmap, tvb, 0, len,
10283 "ANSI A-I/F BSMAP - %s",
10284 msg_str);
10286 bsmap_tree = proto_item_add_subtree(bsmap_item, ett_bsmap_msg[dec_idx]);
10288 col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", msg_str);
10291 shared_data.message_item = bsmap_item;
10293 proto_tree_add_item(bsmap_tree, hf_ansi_a_bsmap_msgtype, tvb, offset, 1, ENC_BIG_ENDIAN);
10295 offset++;
10297 tap_p->pdu_type = BSSAP_PDU_TYPE_BSMAP;
10298 tap_p->message_type = oct;
10300 tap_queue_packet(ansi_a_tap, pinfo, tap_p);
10302 if (msg_str == NULL) return;
10304 if ((len - offset) <= 0) return;
10307 * decode elements
10309 if (bsmap_msg_fcn[dec_idx] == NULL)
10311 proto_tree_add_expert_format(bsmap_tree, pinfo, &ei_ansi_a_miss_bsmap_msg_diss, tvb, offset, len - offset,
10312 "Message Elements");
10314 else
10316 (*bsmap_msg_fcn[dec_idx])(tvb, pinfo, bsmap_tree, offset, len - offset, &shared_data);
10320 static int
10321 dissect_bsmap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
10323 dissect_bsmap_common(tvb, pinfo, tree, false);
10324 return tvb_captured_length(tvb);
10327 static void
10328 dissect_dtap_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, bool from_sip)
10330 static ansi_a_tap_rec_t tap_rec[16];
10331 static ansi_a_tap_rec_t *tap_p;
10332 static int tap_current = 0;
10333 uint8_t oct, oct_1 = 0;
10334 uint32_t offset;
10335 uint32_t len;
10336 int dec_idx;
10337 proto_item *dtap_item = NULL;
10338 proto_tree *dtap_tree = NULL;
10339 proto_item *oct_1_item = NULL;
10340 proto_tree *oct_1_tree = NULL;
10341 const char *msg_str;
10342 const char *str;
10343 ansi_a_shared_data_t shared_data;
10345 len = tvb_reported_length(tvb);
10347 if ((len < 3) && !from_sip)
10350 * too short to be DTAP
10352 call_data_dissector(tvb, pinfo, tree);
10353 return;
10356 memset((void *) &shared_data, 0, sizeof(shared_data));
10358 shared_data.g_tree = tree;
10359 shared_data.from_sip = from_sip;
10362 * determine if this is a REVERSE link message (from BSC/mobile)
10364 shared_data.is_reverse = (pinfo->p2p_dir == P2P_DIR_RECV);
10366 col_append_str(pinfo->cinfo, COL_INFO, "(DTAP) ");
10369 * set tap record pointer
10371 tap_current++;
10372 if (tap_current == array_length(tap_rec))
10374 tap_current = 0;
10376 tap_p = &tap_rec[tap_current];
10378 offset = 0;
10381 * get protocol discriminator
10383 if (!from_sip)
10385 oct_1 = tvb_get_uint8(tvb, offset);
10386 offset++;
10387 offset++; /* octet '2' */
10391 * add DTAP message name
10393 oct = tvb_get_uint8(tvb, offset);
10395 msg_str = my_try_val_to_str_idx((uint32_t) oct, ansi_a_dtap_strings, &dec_idx);
10398 * create the a protocol tree
10400 if (msg_str == NULL)
10402 dtap_item =
10403 proto_tree_add_expert_format(tree, pinfo, &ei_ansi_a_unknown_dtap_msg, tvb, 0, len,
10404 "ANSI A-I/F DTAP - Unknown DTAP Message Type (%u)",
10405 oct);
10407 dtap_tree = proto_item_add_subtree(dtap_item, ett_dtap);
10409 else
10411 dtap_item =
10412 proto_tree_add_protocol_format(tree, proto_a_dtap, tvb, 0, len,
10413 "ANSI A-I/F DTAP - %s",
10414 msg_str);
10416 dtap_tree = proto_item_add_subtree(dtap_item, ett_dtap_msg[dec_idx]);
10418 col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", msg_str);
10421 shared_data.message_item = dtap_item;
10423 if (!from_sip)
10426 * octet 1
10428 switch (oct_1 & 0x0f)
10430 case 3: str = "Call Control, call related SS"; break;
10431 case 5: str = "Mobility Management"; break;
10432 case 6: str = "Radio Resource Management"; break;
10433 case 9: str = "Facility Management"; break;
10434 case 11: str = "Other Signaling Procedures"; break;
10435 case 15: str = "Reserved for tests"; break;
10436 default:
10437 str = "Unknown";
10438 break;
10441 oct_1_item =
10442 proto_tree_add_uint_format(dtap_tree, hf_ansi_a_protocol_disc, tvb, 0, 1,
10443 (oct_1 & 0x0f),
10444 "Protocol Discriminator: %s",
10445 str);
10447 oct_1_tree = proto_item_add_subtree(oct_1_item, ett_dtap_oct_1);
10449 proto_tree_add_item(oct_1_tree, hf_ansi_a_reserved_bits_8_f0, tvb, 0, 1, ENC_BIG_ENDIAN);
10450 proto_tree_add_item(oct_1_tree, hf_ansi_a_protocol_disc, tvb, 0, 1, ENC_BIG_ENDIAN);
10453 * octet 2
10455 switch (global_a_variant)
10457 case A_VARIANT_IS634:
10458 proto_tree_add_item(dtap_tree, hf_ansi_a_ti_flag, tvb, 1, 1, ENC_BIG_ENDIAN);
10459 proto_tree_add_item(dtap_tree, hf_ansi_a_ti_ti, tvb, 1, 1, ENC_BIG_ENDIAN);
10460 proto_tree_add_item(dtap_tree, hf_ansi_a_reserved_bits_8_0f, tvb, 1, 1, ENC_BIG_ENDIAN);
10461 break;
10463 default:
10464 proto_tree_add_item(dtap_tree, hf_ansi_a_reserved_octet, tvb, 1, 1, ENC_BIG_ENDIAN);
10465 break;
10469 proto_tree_add_item(dtap_tree, hf_ansi_a_dtap_msgtype, tvb, offset, 1, ENC_BIG_ENDIAN);
10471 offset++;
10473 tap_p->pdu_type = BSSAP_PDU_TYPE_DTAP;
10474 tap_p->message_type = oct;
10476 tap_queue_packet(ansi_a_tap, pinfo, tap_p);
10478 if (msg_str == NULL) return;
10480 if ((len - offset) <= 0) return;
10483 * decode elements
10485 if (dtap_msg_fcn[dec_idx] == NULL)
10487 proto_tree_add_expert_format(dtap_tree, pinfo, &ei_ansi_a_miss_dtap_msg_diss, tvb, offset, len - offset,
10488 "Message Elements");
10490 else
10492 (*dtap_msg_fcn[dec_idx])(tvb, pinfo, dtap_tree, offset, len - offset, &shared_data);
10496 static int
10497 dissect_dtap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
10499 dissect_dtap_common(tvb, pinfo, tree, false);
10500 return tvb_captured_length(tvb);
10503 static int
10504 dissect_sip_dtap_bsmap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
10506 int linelen, offset, next_offset, begin;
10507 uint8_t *msg_type;
10508 tvbuff_t *ansi_a_tvb;
10509 bool is_dtap = true;
10511 offset = 0;
10513 if ((linelen = tvb_find_line_end(tvb, offset, -1, &next_offset, true)) > 0)
10515 if (linelen >= 2)
10517 ansi_a_tvb = tvb_new_composite();
10518 msg_type = (uint8_t *) wmem_alloc(pinfo->pool, 1);
10519 msg_type[0] = (uint8_t) strtoul(tvb_get_string_enc(pinfo->pool, tvb, offset, 2, ENC_ASCII|ENC_NA), NULL, 16);
10521 if ((begin = tvb_find_uint8(tvb, offset, linelen, '"')) > 0)
10523 if (tvb_get_uint8(tvb, begin + 1) == '1')
10525 is_dtap = false;
10528 else
10530 if (my_try_val_to_str_idx((uint32_t) msg_type[0], ansi_a_dtap_strings, &linelen) == NULL)
10532 is_dtap = false;
10536 tvb_composite_append(ansi_a_tvb, tvb_new_child_real_data(tvb, msg_type, 1, 1));
10538 offset = next_offset;
10540 while ((linelen = tvb_find_line_end(tvb, offset, -1, &next_offset, true)) > 0)
10542 if ((begin = tvb_find_uint8(tvb, offset, linelen, '=')) > 0)
10544 begin++;
10545 tvb_composite_append(ansi_a_tvb, base64_to_tvb(tvb, tvb_get_string_enc(pinfo->pool, tvb, begin, offset + linelen - begin, ENC_ASCII|ENC_NA)));
10548 offset = next_offset;
10551 tvb_composite_finalize(ansi_a_tvb);
10553 if (is_dtap)
10555 add_new_data_source(pinfo, ansi_a_tvb, "ANSI DTAP");
10556 dissect_dtap_common(ansi_a_tvb, pinfo, tree, true);
10558 else
10560 add_new_data_source(pinfo, ansi_a_tvb, "ANSI BSMAP");
10561 dissect_bsmap_common(ansi_a_tvb, pinfo, tree, true);
10565 return tvb_captured_length(tvb);
10568 /* TAP STAT INFO */
10569 typedef enum
10571 IEI_COLUMN = 0,
10572 MESSAGE_NAME_COLUMN,
10573 COUNT_COLUMN
10574 } ansi_a_stat_columns;
10576 static stat_tap_table_item dtap_stat_fields[] =
10578 {TABLE_ITEM_UINT, TAP_ALIGN_RIGHT, "IEI", "0x%02x "},
10579 {TABLE_ITEM_STRING, TAP_ALIGN_LEFT, "Message Name", "%-50s"},
10580 {TABLE_ITEM_UINT, TAP_ALIGN_RIGHT, "Count", "%d"}
10583 static void ansi_a_dtap_stat_init(stat_tap_table_ui* new_stat)
10585 const char *table_name = "ANSI A-I/F DTAP Statistics";
10586 int num_fields = array_length(dtap_stat_fields);
10587 stat_tap_table *table;
10588 int i = 0;
10589 stat_tap_table_item_type items[array_length(dtap_stat_fields)];
10591 items[IEI_COLUMN].type = TABLE_ITEM_UINT;
10592 items[MESSAGE_NAME_COLUMN].type = TABLE_ITEM_STRING;
10593 items[COUNT_COLUMN].type = TABLE_ITEM_UINT;
10594 items[COUNT_COLUMN].value.uint_value = 0;
10596 /* N.B. user-data field not used by this protocol, but init anyway */
10597 items[IEI_COLUMN].user_data.uint_value = 0;
10598 items[MESSAGE_NAME_COLUMN].user_data.uint_value = 0;
10599 items[COUNT_COLUMN].user_data.uint_value = 0;
10601 /* Look for existing table */
10602 table = stat_tap_find_table(new_stat, table_name);
10603 if (table) {
10604 if (new_stat->stat_tap_reset_table_cb) {
10605 new_stat->stat_tap_reset_table_cb(table);
10607 /* Nothing more to do */
10608 return;
10611 /* Initialize table */
10612 table = stat_tap_init_table(table_name, num_fields, 0, NULL);
10613 stat_tap_add_table(new_stat, table);
10615 /* Add a row for each value type */
10616 while (ansi_a_dtap_strings[i].strptr)
10618 items[IEI_COLUMN].value.uint_value = ansi_a_dtap_strings[i].value;
10619 items[MESSAGE_NAME_COLUMN].value.string_value = ansi_a_dtap_strings[i].strptr;
10621 stat_tap_init_table_row(table, i, num_fields, items);
10622 i++;
10626 static tap_packet_status
10627 ansi_a_dtap_stat_packet(void *tapdata, packet_info *pinfo _U_, epan_dissect_t *edt _U_, const void *data, tap_flags_t flags _U_)
10629 stat_data_t* stat_data = (stat_data_t*)tapdata;
10630 const ansi_a_tap_rec_t *data_p = (const ansi_a_tap_rec_t *)data;
10631 stat_tap_table_item_type* dtap_data;
10632 stat_tap_table* table;
10633 unsigned idx;
10635 if (data_p->pdu_type == BSSAP_PDU_TYPE_DTAP)
10637 if (my_try_val_to_str_idx(data_p->message_type, ansi_a_dtap_strings, &idx) == NULL)
10638 return TAP_PACKET_DONT_REDRAW;
10640 table = g_array_index(stat_data->stat_tap_data->tables, stat_tap_table*, 0);
10642 dtap_data = stat_tap_get_field_data(table, idx, COUNT_COLUMN);
10643 dtap_data->value.uint_value++;
10644 stat_tap_set_field_data(table, idx, COUNT_COLUMN, dtap_data);
10646 return TAP_PACKET_REDRAW;
10649 return TAP_PACKET_DONT_REDRAW;
10652 static void
10653 ansi_a_stat_reset(stat_tap_table* table)
10655 unsigned element;
10656 stat_tap_table_item_type* item_data;
10658 for (element = 0; element < table->num_elements; element++)
10660 item_data = stat_tap_get_field_data(table, element, COUNT_COLUMN);
10661 item_data->value.uint_value = 0;
10662 stat_tap_set_field_data(table, element, COUNT_COLUMN, item_data);
10667 static stat_tap_table_item bsmap_stat_fields[] = {{TABLE_ITEM_UINT, TAP_ALIGN_RIGHT, "IEI", "0x%02x "}, {TABLE_ITEM_STRING, TAP_ALIGN_LEFT, "Message Name", "%-50s"},
10668 {TABLE_ITEM_UINT, TAP_ALIGN_RIGHT, "Count", "%d"}};
10670 static void ansi_a_bsmap_stat_init(stat_tap_table_ui* new_stat)
10672 const char *table_name = "ANSI A-I/F BSMAP Statistics";
10673 int num_fields = array_length(bsmap_stat_fields);
10674 stat_tap_table *table;
10675 int i = 0;
10676 stat_tap_table_item_type items[array_length(bsmap_stat_fields)];
10678 items[IEI_COLUMN].type = TABLE_ITEM_UINT;
10679 items[MESSAGE_NAME_COLUMN].type = TABLE_ITEM_STRING;
10680 items[COUNT_COLUMN].type = TABLE_ITEM_UINT;
10681 items[COUNT_COLUMN].value.uint_value = 0;
10683 table = stat_tap_find_table(new_stat, table_name);
10684 if (table) {
10685 if (new_stat->stat_tap_reset_table_cb) {
10686 new_stat->stat_tap_reset_table_cb(table);
10688 return;
10691 table = stat_tap_init_table(table_name, num_fields, 0, NULL);
10692 stat_tap_add_table(new_stat, table);
10694 /* Add a row for each value type */
10695 while (ansi_a_bsmap_strings[i].strptr)
10697 items[IEI_COLUMN].value.uint_value = ansi_a_bsmap_strings[i].value;
10698 items[MESSAGE_NAME_COLUMN].value.string_value = ansi_a_bsmap_strings[i].strptr;
10700 stat_tap_init_table_row(table, i, num_fields, items);
10701 i++;
10705 static tap_packet_status
10706 ansi_a_bsmap_stat_packet(void *tapdata, packet_info *pinfo _U_, epan_dissect_t *edt _U_, const void *data, tap_flags_t flags _U_)
10708 stat_data_t* stat_data = (stat_data_t*)tapdata;
10709 const ansi_a_tap_rec_t *data_p = (const ansi_a_tap_rec_t *)data;
10710 stat_tap_table_item_type* dtap_data;
10711 stat_tap_table* table;
10712 unsigned idx;
10714 if (data_p->pdu_type == BSSAP_PDU_TYPE_BSMAP)
10716 if (my_try_val_to_str_idx(data_p->message_type, ansi_a_bsmap_strings, &idx) == NULL)
10717 return TAP_PACKET_DONT_REDRAW;
10719 table = g_array_index(stat_data->stat_tap_data->tables, stat_tap_table*, 0);
10721 dtap_data = stat_tap_get_field_data(table, idx, COUNT_COLUMN);
10722 dtap_data->value.uint_value++;
10723 stat_tap_set_field_data(table, idx, COUNT_COLUMN, dtap_data);
10725 return TAP_PACKET_REDRAW;
10728 return TAP_PACKET_DONT_REDRAW;
10731 /* Register the protocol with Wireshark */
10732 void
10733 proto_register_ansi_a(void)
10735 module_t *ansi_a_module;
10736 unsigned i;
10737 int last_offset;
10739 /* Setup list of header fields */
10741 static hf_register_info hf[] = {
10742 { &hf_ansi_a_bsmap_msgtype,
10743 { "BSMAP Message Type", "ansi_a_bsmap.msgtype",
10744 FT_UINT8, BASE_HEX, NULL, 0x0,
10745 NULL, HFILL }
10747 { &hf_ansi_a_dtap_msgtype,
10748 { "DTAP Message Type", "ansi_a_bsmap.dtap_msgtype",
10749 FT_UINT8, BASE_HEX, NULL, 0x0,
10750 NULL, HFILL }
10752 { &hf_ansi_a_protocol_disc,
10753 { "Protocol Discriminator", "ansi_a_bsmap.protocol_disc",
10754 FT_UINT8, BASE_DEC, NULL, 0x0f,
10755 NULL, HFILL }
10757 { &hf_ansi_a_reserved_octet,
10758 { "Reserved Octet", "ansi_a_bsmap.reserved_octet",
10759 FT_UINT8, BASE_DEC, NULL, 0,
10760 NULL, HFILL }
10762 { &hf_ansi_a_ti_flag,
10763 { "Transaction Identifier (TI) Flag", "ansi_a_bsmap.ti.flag",
10764 FT_BOOLEAN, 8, TFS(&tfs_allocated_by_receiver_sender), 0x80,
10765 NULL, HFILL }
10767 { &hf_ansi_a_ti_ti,
10768 { "Transaction Identifier (TI)", "ansi_a_bsmap.ti.ti",
10769 FT_UINT8, BASE_DEC, NULL, 0x70,
10770 NULL, HFILL }
10772 { &hf_ansi_a_cm_svrc_type,
10773 { "CM Service Type", "ansi_a_bsmap.cm_srvc_type",
10774 FT_UINT8, BASE_DEC, VALS(dtap_cm_service_type_vals), 0x0f,
10775 NULL, HFILL }
10777 { &hf_ansi_a_elem_id,
10778 { "Element ID", "ansi_a_bsmap.elem_id",
10779 FT_UINT8, BASE_HEX, NULL, 0,
10780 NULL, HFILL }
10782 { &hf_ansi_a_elem_id_f0,
10783 { "Element ID", "ansi_a_bsmap.elem_id",
10784 FT_UINT8, BASE_HEX, NULL, 0xf0,
10785 NULL, HFILL }
10787 { &hf_ansi_a_length,
10788 { "Length", "ansi_a_bsmap.len",
10789 FT_UINT8, BASE_DEC, NULL, 0,
10790 NULL, HFILL }
10792 { &hf_ansi_a_esn,
10793 { "ESN", "ansi_a_bsmap.esn",
10794 FT_UINT32, BASE_HEX, 0, 0x0,
10795 NULL, HFILL }
10797 { &hf_ansi_a_imsi,
10798 { "IMSI", "ansi_a_bsmap.imsi",
10799 FT_STRING, BASE_NONE, 0, 0,
10800 NULL, HFILL }
10802 { &hf_ansi_a_meid,
10803 { "MEID", "ansi_a_bsmap.meid",
10804 FT_STRING, BASE_NONE, 0, 0,
10805 NULL, HFILL }
10807 { &hf_ansi_a_cld_party_bcd_num,
10808 { "Called Party BCD Number", "ansi_a_bsmap.cld_party_bcd_num",
10809 FT_STRING, BASE_NONE, 0, 0,
10810 NULL, HFILL }
10812 { &hf_ansi_a_cld_party_ascii_num,
10813 { "Called Party ASCII Number", "ansi_a_bsmap.cld_party_ascii_num",
10814 FT_STRING, BASE_NONE, 0, 0,
10815 NULL, HFILL }
10817 { &hf_ansi_a_clg_party_ascii_num,
10818 { "Calling Party ASCII Number", "ansi_a_bsmap.clg_party_ascii_num",
10819 FT_STRING, BASE_NONE, 0, 0,
10820 NULL, HFILL }
10822 { &hf_ansi_a_cell_ci,
10823 { "Cell CI", "ansi_a_bsmap.cell_ci",
10824 FT_UINT16, BASE_HEX, 0, 0x0,
10825 NULL, HFILL }
10827 { &hf_ansi_a_cell_lac,
10828 { "Cell LAC", "ansi_a_bsmap.cell_lac",
10829 FT_UINT16, BASE_HEX, 0, 0x0,
10830 NULL, HFILL }
10832 { &hf_ansi_a_cell_mscid,
10833 { "Cell MSCID", "ansi_a_bsmap.cell_mscid",
10834 FT_UINT24, BASE_HEX, 0, 0x0,
10835 NULL, HFILL }
10837 { &hf_ansi_a_pdsn_ip_addr,
10838 { "PDSN IP Address", "ansi_a_bsmap.pdsn_ip_addr",
10839 FT_IPv4, BASE_NONE, NULL, 0,
10840 NULL, HFILL }
10842 { &hf_ansi_a_s_pdsn_ip_addr,
10843 { "Source PDSN Address", "ansi_a_bsmap.s_pdsn_ip_addr",
10844 FT_IPv4, BASE_NONE, NULL, 0,
10845 "IP Address", HFILL }
10847 { &hf_ansi_a_anchor_ip_addr,
10848 { "Anchor PDSN Address", "ansi_a_bsmap.anchor_pdsn_ip_addr",
10849 FT_IPv4, BASE_NONE, NULL, 0,
10850 "IP Address", HFILL }
10852 { &hf_ansi_a_anchor_pp_ip_addr,
10853 { "Anchor P-P Address", "ansi_a_bsmap.anchor_pp_ip_addr",
10854 FT_IPv4, BASE_NONE, NULL, 0,
10855 "IP Address", HFILL }
10857 { &hf_ansi_a_so,
10858 { "Service Option", "ansi_a_bsmap.so",
10859 FT_UINT16, BASE_DEC, NULL, 0,
10860 NULL, HFILL }
10862 { &hf_ansi_a_cause_1,
10863 { "Cause", "ansi_a_bsmap.cause_1",
10864 FT_UINT8, BASE_DEC, NULL, 0,
10865 NULL, HFILL }
10867 { &hf_ansi_a_cause_2,
10868 { "Cause", "ansi_a_bsmap.cause_2",
10869 FT_UINT16, BASE_DEC, NULL, 0x7fff,
10870 NULL, HFILL }
10872 { &hf_ansi_a_ms_info_rec_signal_type,
10873 { "Signal Type", "ansi_a_bsmap.ms_info_rec.signal.type",
10874 FT_UINT8, BASE_HEX, VALS(ansi_a_ms_info_rec_signal_type_vals), 0xc0,
10875 NULL, HFILL }
10877 { &hf_ansi_a_ms_info_rec_signal_alert_pitch,
10878 { "Alert Type", "ansi_a_bsmap.ms_info_rec.signal.alert_pitch",
10879 FT_UINT8, BASE_HEX, VALS(ansi_a_ms_info_rec_signal_alert_pitch_vals), 0x30,
10880 NULL, HFILL }
10882 { &hf_ansi_a_ms_info_rec_signal_tone,
10883 { "Signal", "ansi_a_bsmap.ms_info_rec.signal.tone",
10884 FT_UINT16, BASE_HEX, VALS(ansi_a_ms_info_rec_signal_tone_vals), 0x0fc0,
10885 NULL, HFILL }
10887 { &hf_ansi_a_ms_info_rec_signal_isdn_alert,
10888 { "Signal", "ansi_a_bsmap.ms_info_rec.signal.isdn_alert",
10889 FT_UINT16, BASE_HEX, VALS(ansi_a_ms_info_rec_signal_isdn_alert_vals), 0x0fc0,
10890 NULL, HFILL }
10892 { &hf_ansi_a_ms_info_rec_signal_is54b_alert,
10893 { "Signal", "ansi_a_bsmap.ms_info_rec.signal.is54b_alert",
10894 FT_UINT16, BASE_HEX, VALS(ansi_a_ms_info_rec_signal_is54b_alert_vals), 0x0fc0,
10895 NULL, HFILL }
10897 { &hf_ansi_a_ms_info_rec_call_waiting_ind,
10898 { "Call Waiting Indicator", "ansi_a_bsmap.ms_info_rec.call_waiting_ind",
10899 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x80,
10900 NULL, HFILL }
10902 { &hf_ansi_a_extension_8_80,
10903 { "Extended", "ansi_a_bsmap.extended",
10904 FT_UINT8, BASE_DEC, NULL, 0x80,
10905 NULL, HFILL }
10907 { &hf_ansi_a_reserved_bits_8_generic,
10908 { "Reserved bit(s)", "ansi_a_bsmap.reserved",
10909 FT_UINT8, BASE_DEC, NULL, 0,
10910 NULL, HFILL }
10912 { &hf_ansi_a_reserved_bits_8_01,
10913 { "Reserved bit(s)", "ansi_a_bsmap.reserved",
10914 FT_UINT8, BASE_DEC, NULL, 0x01,
10915 NULL, HFILL }
10917 { &hf_ansi_a_reserved_bits_8_07,
10918 { "Reserved bit(s)", "ansi_a_bsmap.reserved",
10919 FT_UINT8, BASE_DEC, NULL, 0x07,
10920 NULL, HFILL }
10922 { &hf_ansi_a_reserved_bits_8_0c,
10923 { "Reserved bit(s)", "ansi_a_bsmap.reserved",
10924 FT_UINT8, BASE_DEC, NULL, 0x0c,
10925 NULL, HFILL }
10927 { &hf_ansi_a_reserved_bits_8_0f,
10928 { "Reserved bit(s)", "ansi_a_bsmap.reserved",
10929 FT_UINT8, BASE_DEC, NULL, 0x0f,
10930 NULL, HFILL }
10932 { &hf_ansi_a_reserved_bits_8_10,
10933 { "Reserved bit(s)", "ansi_a_bsmap.reserved",
10934 FT_UINT8, BASE_DEC, NULL, 0x10,
10935 NULL, HFILL }
10937 { &hf_ansi_a_reserved_bits_8_18,
10938 { "Reserved bit(s)", "ansi_a_bsmap.reserved",
10939 FT_UINT8, BASE_DEC, NULL, 0x18,
10940 NULL, HFILL }
10942 { &hf_ansi_a_reserved_bits_8_1c,
10943 { "Reserved bit(s)", "ansi_a_bsmap.reserved",
10944 FT_UINT8, BASE_DEC, NULL, 0x1c,
10945 NULL, HFILL }
10947 { &hf_ansi_a_reserved_bits_8_1f,
10948 { "Reserved bit(s)", "ansi_a_bsmap.reserved",
10949 FT_UINT8, BASE_DEC, NULL, 0x1f,
10950 NULL, HFILL }
10952 { &hf_ansi_a_reserved_bits_8_3f,
10953 { "Reserved bit(s)", "ansi_a_bsmap.reserved",
10954 FT_UINT8, BASE_DEC, NULL, 0x3f,
10955 NULL, HFILL }
10957 { &hf_ansi_a_reserved_bits_8_7f,
10958 { "Reserved bit(s)", "ansi_a_bsmap.reserved",
10959 FT_UINT8, BASE_DEC, NULL, 0x7f,
10960 NULL, HFILL }
10962 { &hf_ansi_a_reserved_bits_8_80,
10963 { "Reserved bit(s)", "ansi_a_bsmap.reserved",
10964 FT_UINT8, BASE_DEC, NULL, 0x80,
10965 NULL, HFILL }
10967 { &hf_ansi_a_reserved_bits_8_c0,
10968 { "Reserved bit(s)", "ansi_a_bsmap.reserved",
10969 FT_UINT8, BASE_DEC, NULL, 0xc0,
10970 NULL, HFILL }
10972 { &hf_ansi_a_reserved_bits_8_e0,
10973 { "Reserved bit(s)", "ansi_a_bsmap.reserved",
10974 FT_UINT8, BASE_DEC, NULL, 0xe0,
10975 NULL, HFILL }
10977 { &hf_ansi_a_reserved_bits_8_f0,
10978 { "Reserved bit(s)", "ansi_a_bsmap.reserved",
10979 FT_UINT8, BASE_DEC, NULL, 0xf0,
10980 NULL, HFILL }
10982 { &hf_ansi_a_reserved_bits_8_f8,
10983 { "Reserved bit(s)", "ansi_a_bsmap.reserved",
10984 FT_UINT8, BASE_DEC, NULL, 0xf8,
10985 NULL, HFILL }
10987 { &hf_ansi_a_reserved_bits_8_fc,
10988 { "Reserved bit(s)", "ansi_a_bsmap.reserved",
10989 FT_UINT8, BASE_DEC, NULL, 0xfc,
10990 NULL, HFILL }
10992 { &hf_ansi_a_reserved_bits_8_fe,
10993 { "Reserved bit(s)", "ansi_a_bsmap.reserved",
10994 FT_UINT8, BASE_DEC, NULL, 0xfe,
10995 NULL, HFILL }
10997 { &hf_ansi_a_reserved_bits_8_ff,
10998 { "Reserved bit(s)", "ansi_a_bsmap.reserved",
10999 FT_UINT8, BASE_DEC, NULL, 0xff,
11000 NULL, HFILL }
11002 { &hf_ansi_a_reserved_bits_16_001f,
11003 { "Reserved bit(s)", "ansi_a_bsmap.reserved",
11004 FT_UINT16, BASE_DEC, NULL, 0x001f,
11005 NULL, HFILL }
11007 { &hf_ansi_a_reserved_bits_16_003f,
11008 { "Reserved bit(s)", "ansi_a_bsmap.reserved",
11009 FT_UINT16, BASE_DEC, NULL, 0x003f,
11010 NULL, HFILL }
11012 { &hf_ansi_a_reserved_bits_16_8000,
11013 { "Reserved bit(s)", "ansi_a_bsmap.reserved",
11014 FT_UINT16, BASE_DEC, NULL, 0x8000,
11015 NULL, HFILL }
11017 { &hf_ansi_a_reserved_bits_16_f800,
11018 { "Reserved bit(s)", "ansi_a_bsmap.reserved",
11019 FT_UINT16, BASE_DEC, NULL, 0xf800,
11020 NULL, HFILL }
11022 { &hf_ansi_a_reserved_bits_24_001800,
11023 { "Reserved bit(s)", "ansi_a_bsmap.reserved",
11024 FT_UINT24, BASE_DEC, NULL, 0x001800,
11025 NULL, HFILL }
11027 { &hf_ansi_a_reserved_bits_24_006000,
11028 { "Reserved bit(s)", "ansi_a_bsmap.reserved",
11029 FT_UINT24, BASE_DEC, NULL, 0x006000,
11030 NULL, HFILL }
11032 { &hf_ansi_a_reserved_bits_24_007000,
11033 { "Reserved bit(s)", "ansi_a_bsmap.reserved",
11034 FT_UINT24, BASE_DEC, NULL, 0x007000,
11035 NULL, HFILL }
11037 { &hf_ansi_a_channel_number,
11038 { "Channel Number", "ansi_a_bsmap.channel_number.channel_number",
11039 FT_UINT16, BASE_DEC, NULL, 0x0,
11040 NULL, HFILL }
11042 { &hf_ansi_a_IOS5_channel_number,
11043 { "Channel Number", "ansi_a_bsmap.channel_number.channel_number",
11044 FT_UINT16, BASE_DEC, NULL, 0x07ff,
11045 NULL, HFILL }
11047 { &hf_ansi_a_speech_or_data_indicator,
11048 { "Speech or Data Indicator", "ansi_a_bsmap.channel_type.speech_or_data_indicator",
11049 FT_UINT8, BASE_HEX, VALS(ansi_a_speech_or_data_indicator_vals), 0x00,
11050 NULL, HFILL }
11052 { &hf_ansi_a_chan_rate_and_type,
11053 { "Channel Rate and Type", "ansi_a_bsmap.channel_type.rate_and_type",
11054 FT_UINT8, BASE_HEX, VALS(ansi_a_channel_rate_and_type_vals), 0x00,
11055 NULL, HFILL }
11057 { &hf_ansi_a_speech_enc_or_data_rate,
11058 { "Speech Encoding Algorithm/data rate + Transparency Indicator", "ansi_a_bsmap.channel_type.speech_enc_or_data_rate",
11059 FT_UINT8, BASE_HEX, VALS(ansi_a_speech_enc_or_data_rate_vals), 0x00,
11060 NULL, HFILL }
11062 { &hf_ansi_a_chan_type_data_ext,
11063 { "Extension", "ansi_a_bsmap.channel_type.data_ext",
11064 FT_UINT8, BASE_DEC, NULL, 0x80,
11065 NULL, HFILL }
11067 { &hf_ansi_a_chan_type_data_transparent,
11068 { "Transparent", "ansi_a_bsmap.channel_type.data_transparent",
11069 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x40,
11070 NULL, HFILL }
11072 { &hf_ansi_a_return_cause,
11073 { "Return Cause", "ansi_a_bsmap.return_cause.cause",
11074 FT_UINT8, BASE_DEC, VALS(ansi_a_return_cause_vals), 0x0f,
11075 NULL, HFILL }
11077 { &hf_ansi_a_rf_chan_id_color_code,
11078 { "Color Code", "ansi_a_bsmap.rf_channel_id.color_code",
11079 FT_UINT8, BASE_DEC, NULL, 0,
11080 NULL, HFILL }
11082 { &hf_ansi_a_rf_chan_id_n_amps_based,
11083 { "N-AMPS", "ansi_a_bsmap.rf_channel_id.n_amps_based",
11084 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
11085 NULL, HFILL }
11087 { &hf_ansi_a_rf_chan_id_amps_based,
11088 { "ANSI/EIA/TIA-553", "ansi_a_bsmap.rf_channel_id.amps_based",
11089 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x01,
11090 NULL, HFILL }
11092 { &hf_ansi_a_rf_chan_id_timeslot,
11093 { "Timeslot Number", "ansi_a_bsmap.rf_channel_id.timeslot",
11094 FT_UINT8, BASE_DEC, VALS(ansi_a_rf_chan_id_timeslot_number_vals), 0x03,
11095 NULL, HFILL }
11097 { &hf_ansi_a_rf_chan_id_channel_number,
11098 { "Channel Number", "ansi_a_bsmap.rf_channel_id.channel_number",
11099 FT_UINT16, BASE_DEC, NULL, 0x07ff,
11100 NULL, HFILL }
11102 { &hf_ansi_a_sr_id,
11103 { "SR_ID", "ansi_a_bsmap.sr_id",
11104 FT_UINT8, BASE_DEC, NULL, 0x07,
11105 NULL, HFILL }
11107 { &hf_ansi_a_sid,
11108 { "SID", "ansi_a_bsmap.sid",
11109 FT_UINT16, BASE_DEC, NULL, 0x7fff,
11110 NULL, HFILL }
11112 { &hf_ansi_a_is95_chan_id_hho,
11113 { "Hard Handoff", "ansi_a_bsmap.is95_chan_id.hho",
11114 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x80,
11115 NULL, HFILL }
11117 { &hf_ansi_a_is95_chan_id_num_chans_add,
11118 { "Number of Channels to Add", "ansi_a_bsmap.is95_chan_id.num_chans_add",
11119 FT_UINT8, BASE_DEC, NULL, 0x70,
11120 NULL, HFILL }
11122 { &hf_ansi_a_is95_chan_id_frame_offset,
11123 { "Frame Offset", "ansi_a_bsmap.is95_chan_id.frame_offset",
11124 FT_UINT8, BASE_DEC, NULL, 0x0f,
11125 NULL, HFILL }
11127 { &hf_ansi_a_is95_chan_id_walsh_code_chan_idx,
11128 { "Walsh Code Channel Index", "ansi_a_bsmap.is95_chan_id.walsh_code_chan_idx",
11129 FT_UINT8, BASE_DEC, NULL, 0,
11130 NULL, HFILL }
11132 { &hf_ansi_a_is95_chan_id_pilot_pn,
11133 { "Pilot PN Code", "ansi_a_bsmap.is95_chan_id.pilot_pn",
11134 FT_UINT24, BASE_DEC, NULL, 0xff8000,
11135 NULL, HFILL }
11137 { &hf_ansi_a_is95_chan_id_power_combined,
11138 { "Power Combined", "ansi_a_bsmap.is95_chan_id.power_combined",
11139 FT_BOOLEAN, 24, TFS(&tfs_yes_no), 0x004000,
11140 NULL, HFILL }
11142 { &hf_ansi_a_is95_chan_id_freq_incl,
11143 { "Frequency Included", "ansi_a_bsmap.is95_chan_id.freq_incl",
11144 FT_BOOLEAN, 24, TFS(&tfs_yes_no), 0x002000,
11145 NULL, HFILL }
11147 { &hf_ansi_a_is95_chan_id_channel_number,
11148 { "Channel Number", "ansi_a_bsmap.is95_chan_id.channel_number",
11149 FT_UINT24, BASE_DEC, NULL, 0x0007ff,
11150 NULL, HFILL }
11152 { &hf_ansi_a_enc_info_enc_parm_id,
11153 { "Encryption Parameter Identifier", "ansi_a_bsmap.enc_info.parm_id",
11154 FT_UINT8, BASE_DEC, VALS(ansi_a_enc_info_ident_vals), 0x7c,
11155 NULL, HFILL }
11157 { &hf_ansi_a_enc_info_status,
11158 { "Status", "ansi_a_bsmap.enc_info.status",
11159 FT_UINT8, BASE_DEC, VALS(ansi_a_enc_info_status_vals), 0x02,
11160 NULL, HFILL }
11162 { &hf_ansi_a_enc_info_available,
11163 { "Available", "ansi_a_bsmap.enc_info.available",
11164 FT_UINT8, BASE_DEC, VALS(ansi_a_enc_info_available_vals), 0x01,
11165 NULL, HFILL }
11167 { &hf_ansi_a_cm2_mob_p_rev,
11168 { "MOB_P_REV", "ansi_a_bsmap.cm2.mob_p_rev",
11169 FT_UINT8, BASE_DEC, NULL, 0xe0,
11170 NULL, HFILL }
11172 { &hf_ansi_a_cm2_see_list,
11173 { "See List of Entries", "ansi_a_bsmap.cm2.see_list",
11174 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x08,
11175 NULL, HFILL }
11177 { &hf_ansi_a_cm2_rf_power_cap,
11178 { "RF Power Capability", "ansi_a_bsmap.cm2.rf_power_cap",
11179 FT_UINT8, BASE_DEC, VALS(ansi_a_cm2_rf_power_cap_vals), 0x07,
11180 NULL, HFILL }
11182 { &hf_ansi_a_cm2_nar_an_cap,
11183 { "NAR_AN_CAP", "ansi_a_bsmap.cm2.nar_an_cap",
11184 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x80,
11185 NULL, HFILL }
11187 { &hf_ansi_a_cm2_is95,
11188 { "IS-95 supported", "ansi_a_bsmap.cm2.is95",
11189 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x40,
11190 NULL, HFILL }
11192 { &hf_ansi_a_cm2_slotted,
11193 { "Operating in slotted mode", "ansi_a_bsmap.cm2.slotted",
11194 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x20,
11195 NULL, HFILL }
11197 { &hf_ansi_a_cm2_dtx,
11198 { "DTX capable", "ansi_a_bsmap.cm2.dtx",
11199 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x04,
11200 NULL, HFILL }
11202 { &hf_ansi_a_cm2_mobile_term,
11203 { "Mobile Term; can receive incoming calls", "ansi_a_bsmap.cm2.mobile_term",
11204 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
11205 NULL, HFILL }
11207 { &hf_ansi_a_cm2_analog_cap,
11208 { "ANSI/EIA/TIA-553; supports analog capabilities", "ansi_a_bsmap.cm2.ansi_eia_tia_553",
11209 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x01,
11210 NULL, HFILL }
11212 { &hf_ansi_a_cm2_psi,
11213 { "PACA Supported Indicator (PSI)", "ansi_a_bsmap.cm2.psi",
11214 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x01,
11215 NULL, HFILL }
11217 { &hf_ansi_a_cm2_scm_len,
11218 { "SCM Length", "ansi_a_bsmap.cm2.scm_len",
11219 FT_UINT8, BASE_DEC, NULL, 0,
11220 NULL, HFILL }
11222 { &hf_ansi_a_cm2_scm,
11223 { "Station Class Mark", "ansi_a_bsmap.cm2.scm",
11224 FT_UINT8, BASE_DEC, NULL, 0,
11225 NULL, HFILL }
11227 { &hf_ansi_a_cm2_scm_ext_scm_ind,
11228 { "Extended SCM Indicator", "ansi_a_bsmap.cm2.scm.ext_scm_ind",
11229 FT_UINT8, BASE_DEC, VALS(ansi_a_cm2_scm_ext_scm_ind_vals), 0x80,
11230 NULL, HFILL }
11232 { &hf_ansi_a_cm2_scm_dual_mode,
11233 { "Dual Mode", "ansi_a_bsmap.cm2.scm.dual_mode",
11234 FT_UINT8, BASE_DEC, VALS(ansi_a_cm2_scm_dual_mode_vals), 0x40,
11235 NULL, HFILL }
11237 { &hf_ansi_a_cm2_scm_slotted,
11238 { "Slotted Class", "ansi_a_bsmap.cm2.scm.slotted_class",
11239 FT_UINT8, BASE_DEC, VALS(ansi_a_cm2_scm_slotted_class_vals), 0x20,
11240 NULL, HFILL }
11242 { &hf_ansi_a_cm2_scm_meid_configured,
11243 { "MEID support indicator", "ansi_a_bsmap.cm2.scm.meid_configured",
11244 FT_UINT8, BASE_DEC, VALS(ansi_a_cm2_scm_meid_configured_vals), 0x10,
11245 NULL, HFILL }
11247 { &hf_ansi_a_cm2_scm_25MHz_bandwidth,
11248 { "25 MHz Bandwidth", "ansi_a_bsmap.cm2.scm.25MHz_bandwidth",
11249 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x08,
11250 NULL, HFILL }
11252 { &hf_ansi_a_cm2_scm_transmission,
11253 { "Transmission", "ansi_a_bsmap.cm2.scm.transmission",
11254 FT_UINT8, BASE_DEC, VALS(ansi_a_cm2_scm_transmission_vals), 0x04,
11255 NULL, HFILL }
11257 { &hf_ansi_a_cm2_scm_power_class,
11258 { "Power Class for Band Class 0 Analog Operation", "ansi_a_bsmap.cm2.scm.power_class",
11259 FT_UINT8, BASE_DEC, VALS(ansi_a_cm2_scm_power_class_vals), 0x03,
11260 NULL, HFILL }
11262 { &hf_ansi_a_cm2_scm_band_class_count,
11263 { "Count of Band Class Entries", "ansi_a_bsmap.cm2.scm.band_class_count",
11264 FT_UINT8, BASE_DEC, NULL, 0,
11265 NULL, HFILL }
11267 { &hf_ansi_a_cm2_scm_band_class_entry_len,
11268 { "Band Class Entry Length", "ansi_a_bsmap.cm2.scm.band_class_entry_len",
11269 FT_UINT8, BASE_DEC, NULL, 0,
11270 NULL, HFILL }
11272 { &hf_ansi_a_scm_band_class_entry_band_class,
11273 { "Band Class", "ansi_a_bsmap.cm2.scm.bc_entry.band_class",
11274 FT_UINT8, BASE_DEC, VALS(ansi_a_band_class_vals), 0x1f,
11275 NULL, HFILL }
11277 { &hf_ansi_a_scm_band_class_entry_opmode0_1,
11278 { "Air Interface OP_MODE0: CDMA mode in Band Class 1 and Band Class 4", "ansi_a_bsmap.cm2.scm.bc_entry.opmode0",
11279 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x80,
11280 NULL, HFILL }
11282 { &hf_ansi_a_scm_band_class_entry_opmode1_1,
11283 { "Air Interface OP_MODE1: CDMA mode in Band Class 0 and Band Class 3", "ansi_a_bsmap.cm2.scm.bc_entry.opmode1",
11284 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x40,
11285 NULL, HFILL }
11287 { &hf_ansi_a_scm_band_class_entry_opmode2_1,
11288 { "Air Interface OP_MODE2: Reserved (Previously Analog mode)", "ansi_a_bsmap.cm2.scm.bc_entry.opmode2",
11289 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x20,
11290 NULL, HFILL }
11292 { &hf_ansi_a_scm_band_class_entry_opmode3_1,
11293 { "Air Interface OP_MODE3: Reserved (Previously Wide analog mode)", "ansi_a_bsmap.cm2.scm.bc_entry.opmode3",
11294 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x10,
11295 NULL, HFILL }
11297 { &hf_ansi_a_scm_band_class_entry_opmode4_1,
11298 { "Air Interface OP_MODE4: Reserved (Previously Narrow analog mode)", "ansi_a_bsmap.cm2.scm.bc_entry.opmode4",
11299 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x08,
11300 NULL, HFILL }
11302 { &hf_ansi_a_scm_band_class_entry_opmode0_2,
11303 { "Air Interface OP_MODE0: CDMA mode", "ansi_a_bsmap.cm2.scm.bc_entry.opmode0",
11304 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x80,
11305 NULL, HFILL }
11307 { &hf_ansi_a_scm_band_class_entry_opmode1_2,
11308 { "Air Interface OP_MODE1: CDMA mode", "ansi_a_bsmap.cm2.scm.bc_entry.opmode1",
11309 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x40,
11310 NULL, HFILL }
11312 { &hf_ansi_a_scm_band_class_entry_opmode2_2,
11313 { "Air Interface OP_MODE2: Reserved (Previously Analog mode)", "ansi_a_bsmap.cm2.scm.bc_entry.opmode2",
11314 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x20,
11315 NULL, HFILL }
11317 { &hf_ansi_a_scm_band_class_entry_opmode3_2,
11318 { "Air Interface OP_MODE3: Reserved (Previously Wide analog mode)", "ansi_a_bsmap.cm2.scm.bc_entry.opmode3",
11319 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x10,
11320 NULL, HFILL }
11322 { &hf_ansi_a_scm_band_class_entry_opmode4_2,
11323 { "Air Interface OP_MODE4: Reserved (Previously Narrow analog mode)", "ansi_a_bsmap.cm2.scm.bc_entry.opmode4",
11324 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x08,
11325 NULL, HFILL }
11327 { &hf_ansi_a_scm_band_class_entry_opmode5_2,
11328 { "Air Interface OP_MODE5: DS-41", "ansi_a_bsmap.cm2.scm.bc_entry.opmode5",
11329 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x04,
11330 NULL, HFILL }
11332 { &hf_ansi_a_scm_band_class_entry_opmode6_2,
11333 { "Air Interface OP_MODE6: MC-MAP", "ansi_a_bsmap.cm2.scm.bc_entry.opmode6",
11334 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
11335 NULL, HFILL }
11337 { &hf_ansi_a_scm_band_class_entry_p_rev,
11338 { "Band Class MS Protocol Level", "ansi_a_bsmap.cm2.scm.bc_entry.p_rev",
11339 FT_UINT8, BASE_DEC, NULL, 0,
11340 NULL, HFILL }
11342 { &hf_ansi_a_meid_mid_digit_1,
11343 { "MEID Hex Digit 1", "ansi_a_bsmap.mid.digit_1",
11344 FT_UINT8, BASE_DEC, NULL, 0xf0,
11345 NULL, HFILL }
11347 { &hf_ansi_a_imsi_mid_digit_1,
11348 { "Identity Digit 1", "ansi_a_bsmap.mid.digit_1",
11349 FT_UINT8, BASE_DEC, NULL, 0xf0,
11350 NULL, HFILL }
11352 { &hf_ansi_a_mid_odd_even_ind,
11353 { "Odd/Even Indicator", "ansi_a_bsmap.mid.odd_even_ind",
11354 FT_UINT8, BASE_DEC, VALS(ansi_a_mid_odd_even_ind_vals), 0x08,
11355 NULL, HFILL }
11357 { &hf_ansi_a_mid_type_of_id,
11358 { "Type of Identity", "ansi_a_bsmap.mid.type_of_identity",
11359 FT_UINT8, BASE_DEC, VALS(ansi_a_mid_type_vals), 0x07,
11360 NULL, HFILL }
11362 { &hf_ansi_a_mid_broadcast_priority,
11363 { "Priority", "ansi_a_bsmap.mid.broadcast.priority",
11364 FT_UINT8, BASE_DEC, VALS(ansi_a_mid_broadcast_priority_vals), 0xc0,
11365 NULL, HFILL }
11367 { &hf_ansi_a_mid_broadcast_message_id,
11368 { "Message ID", "ansi_a_bsmap.mid.broadcast.message_id",
11369 FT_UINT8, BASE_DEC, NULL, 0x3f,
11370 NULL, HFILL }
11372 { &hf_ansi_a_mid_broadcast_zone_id,
11373 { "Zone ID", "ansi_a_bsmap.mid.broadcast.zone_id",
11374 FT_UINT8, BASE_DEC, NULL, 0,
11375 NULL, HFILL }
11377 { &hf_ansi_a_mid_broadcast_srvc_cat,
11378 { "Service Category", "ansi_a_bsmap.mid.broadcast.srvc_cat",
11379 FT_UINT16, BASE_DEC, NULL, 0,
11380 NULL, HFILL }
11382 { &hf_ansi_a_mid_broadcast_language,
11383 { "Language", "ansi_a_bsmap.mid.broadcast.language",
11384 FT_UINT8, BASE_DEC, NULL, 0,
11385 NULL, HFILL }
11387 { &hf_ansi_a_mid_unused,
11388 { "Unused", "ansi_a_bsmap.mid.unused",
11389 FT_UINT8, BASE_DEC, NULL, 0xf0,
11390 NULL, HFILL }
11392 { &hf_ansi_a_sci_sign,
11393 { "SCI Sign", "ansi_a_bsmap.slot_cycle_index_sign",
11394 FT_UINT8, BASE_DEC, NULL, 0x08,
11395 "1 indicates a negative sign is associated with the SCI", HFILL }
11397 { &hf_ansi_a_sci,
11398 { "Slot Cycle Index", "ansi_a_bsmap.slot_cycle_index",
11399 FT_UINT8, BASE_DEC, NULL, 0x07,
11400 NULL, HFILL }
11402 { &hf_ansi_a_prio_call_priority,
11403 { "Call Priority Level", "ansi_a_bsmap.prio.call_priority",
11404 FT_UINT8, BASE_DEC, NULL, 0x3c,
11405 NULL, HFILL }
11407 { &hf_ansi_a_prio_queue_allowed,
11408 { "Queuing allowed", "ansi_a_bsmap.prio.queuing_allowed",
11409 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
11410 NULL, HFILL }
11412 { &hf_ansi_a_prio_preempt_allowed,
11413 { "Preemption allowed", "ansi_a_bsmap.prio.preempt_allowed",
11414 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x01,
11415 NULL, HFILL }
11417 { &hf_ansi_a_mob_p_rev,
11418 { "MOB_P_REV", "ansi_a_bsmap.mob_p_rev",
11419 FT_UINT8, BASE_DEC, NULL, 0x00,
11420 NULL, HFILL }
11422 { &hf_ansi_a_cause_1_ext,
11423 { "Extension", "ansi_a_bsmap.cause.ext",
11424 FT_UINT8, BASE_DEC, NULL, 0x80,
11425 NULL, HFILL }
11427 { &hf_ansi_a_cause_2_ext,
11428 { "Extension", "ansi_a_bsmap.cause.ext",
11429 FT_UINT16, BASE_DEC, NULL, 0x8000,
11430 NULL, HFILL }
11432 { &hf_ansi_a_cell_id_disc,
11433 { "Cell Identification Discriminator", "ansi_a_bsmap.cell_id_discriminator",
11434 FT_UINT8, BASE_DEC, VALS(cell_disc_vals), 0x00,
11435 NULL, HFILL }
11437 { &hf_ansi_a_cic,
11438 { "CIC", "ansi_a_bsmap.cic",
11439 FT_UINT16, BASE_DEC, NULL, 0,
11440 NULL, HFILL }
11442 { &hf_ansi_a_cic_pcm_multi,
11443 { "PCM Multiplexer", "ansi_a_bsmap.cic.pcm_multi",
11444 FT_UINT16, BASE_DEC, NULL, 0xffe0,
11445 NULL, HFILL }
11447 { &hf_ansi_a_cic_timeslot,
11448 { "Timeslot", "ansi_a_bsmap.cic.timeslot",
11449 FT_UINT16, BASE_DEC, NULL, 0x001f,
11450 NULL, HFILL }
11452 { &hf_ansi_a_cic_ext_cic,
11453 { "CIC", "ansi_a_bsmap.cic_ext.cic",
11454 FT_UINT16, BASE_DEC, NULL, 0,
11455 NULL, HFILL }
11457 { &hf_ansi_a_cic_ext_pcm_multi,
11458 { "PCM Multiplexer", "ansi_a_bsmap.cic_ext.pcm_multi",
11459 FT_UINT16, BASE_DEC, NULL, 0xffe0,
11460 NULL, HFILL }
11462 { &hf_ansi_a_cic_ext_timeslot,
11463 { "Timeslot", "ansi_a_bsmap.cic_ext.timeslot",
11464 FT_UINT16, BASE_DEC, NULL, 0x001f,
11465 NULL, HFILL }
11467 { &hf_ansi_a_cic_ext_circuit_mode,
11468 { "Circuit Mode", "ansi_a_bsmap.cic_ext.circuit_mode",
11469 FT_UINT8, BASE_DEC, NULL, 0x0f,
11470 NULL, HFILL }
11472 { &hf_ansi_a_ssci_mopd,
11473 { "Mobile Originated Position Determination", "ansi_a_bsmap.ssci.mopd",
11474 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
11475 NULL, HFILL }
11477 { &hf_ansi_a_ssci_geci,
11478 { "Global Emergency Call Indication", "ansi_a_bsmap.ssci.geci",
11479 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x01,
11480 NULL, HFILL }
11482 { &hf_ansi_a_downlink_re_num_cells,
11483 { "Number of Cells", "ansi_a_bsmap.downlink_re.num_cells",
11484 FT_UINT8, BASE_DEC, NULL, 0,
11485 NULL, HFILL }
11487 { &hf_ansi_a_downlink_re_sig_str_raw,
11488 { "Downlink Signal Strength Raw", "ansi_a_bsmap.downlink_re.sig_str_raw",
11489 FT_UINT8, BASE_DEC, NULL, 0x3f,
11490 NULL, HFILL }
11492 { &hf_ansi_a_downlink_re_cdma_towd,
11493 { "CDMA Target One Way Delay", "ansi_a_bsmap.downlink_re.cdma_towd",
11494 FT_UINT16, BASE_DEC, NULL, 0,
11495 NULL, HFILL }
11497 { &hf_ansi_a_downlink_re_entry_env_len,
11498 { "Environment Length", "ansi_a_bsmap.downlink_re.entry.env_len",
11499 FT_UINT8, BASE_DEC, NULL, 0,
11500 NULL, HFILL }
11502 { &hf_ansi_a_ho_pow_lev_num_cells,
11503 { "Number of Cells", "ansi_a_bsmap.ho_pow_lev.num_cells",
11504 FT_UINT8, BASE_DEC, NULL, 0,
11505 NULL, HFILL }
11507 { &hf_ansi_a_ho_pow_lev_id_type,
11508 { "ID Type", "ansi_a_bsmap.ho_pow_lev.id_type",
11509 FT_UINT8, BASE_DEC, NULL, 0x60,
11510 NULL, HFILL }
11512 { &hf_ansi_a_ho_pow_lev_pow_lev,
11513 { "Handoff Power Level", "ansi_a_bsmap.ho_pow_lev.pow_lev",
11514 FT_UINT8, BASE_DEC, NULL, 0x1f,
11515 NULL, HFILL }
11517 { &hf_ansi_a_uz_id,
11518 { "UZID", "ansi_a_bsmap.uzid",
11519 FT_UINT16, BASE_DEC, NULL, 0,
11520 NULL, HFILL }
11522 { &hf_ansi_a_info_rec_req,
11523 { "Information Record Type", "ansi_a_bsmap.info_rec.rev_ms",
11524 FT_UINT8, BASE_DEC, NULL, 0,
11525 NULL, HFILL }
11527 { &hf_ansi_a_is2000_chan_id_otd,
11528 { "OTD", "ansi_a_bsmap.is2000_chan_id.otd",
11529 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x80,
11530 "1 indicates mobile is using OTD", HFILL }
11532 { &hf_ansi_a_is2000_chan_id_chan_count,
11533 { "Physical Channel Count", "ansi_a_bsmap.is2000_chan_id.chan_count",
11534 FT_UINT8, BASE_DEC, NULL, 0x70,
11535 NULL, HFILL }
11537 { &hf_ansi_a_is2000_chan_id_frame_offset,
11538 { "Frame Offset", "ansi_a_bsmap.is2000_chan_id.frame_offset",
11539 FT_UINT8, BASE_DEC, NULL, 0x0f,
11540 NULL, HFILL }
11542 { &hf_ansi_a_is2000_chan_id_chan_chan_type,
11543 { "Physical Channel Type", "ansi_a_bsmap.is2000_chan_id.chan.chan_type",
11544 FT_UINT8, BASE_DEC, NULL, 0,
11545 NULL, HFILL }
11547 { &hf_ansi_a_is2000_chan_id_chan_rev_fch_gating,
11548 { "Rev_FCH_Gating", "ansi_a_bsmap.is2000_chan_id.chan.rev_fch_gating",
11549 FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x8000,
11550 NULL, HFILL }
11552 { &hf_ansi_a_is2000_chan_id_chan_rev_pilot_gating_rate,
11553 { "Reverse Pilot Gating Rate", "ansi_a_bsmap.is2000_chan_id.chan.rev_pilot_gating_rate",
11554 FT_UINT16, BASE_DEC, VALS(ansi_a_is2000_chan_id_chan_rev_pilot_gating_rate_vals), 0x6000,
11555 NULL, HFILL }
11557 { &hf_ansi_a_is2000_chan_id_chan_qof_mask,
11558 { "QOF Mask", "ansi_a_bsmap.is2000_chan_id.chan.qof_mask",
11559 FT_UINT16, BASE_DEC, NULL, 0x1800,
11560 NULL, HFILL }
11562 { &hf_ansi_a_is2000_chan_id_chan_walsh_code_chan_idx,
11563 { "Walsh Code Channel Index", "ansi_a_bsmap.is2000_chan_id.chan.walsh_code_chan_idx",
11564 FT_UINT16, BASE_DEC, NULL, 0x07ff,
11565 NULL, HFILL }
11567 { &hf_ansi_a_is2000_chan_id_chan_pilot_pn_code,
11568 { "Pilot PN Code", "ansi_a_bsmap.is2000_chan_id.chan.pilot_pn_code",
11569 FT_UINT24, BASE_DEC, NULL, 0xff8000,
11570 NULL, HFILL }
11572 { &hf_ansi_a_is2000_chan_id_chan_power_combined,
11573 { "Power Combined", "ansi_a_bsmap.is2000_chan_id.chan.power_combined",
11574 FT_BOOLEAN, 24, TFS(&tfs_yes_no), 0x001000,
11575 NULL, HFILL }
11577 { &hf_ansi_a_is2000_chan_id_chan_freq_incl,
11578 { "Frequency Included", "ansi_a_bsmap.is2000_chan_id.chan.freq_incl",
11579 FT_BOOLEAN, 24, TFS(&tfs_yes_no), 0x000800,
11580 NULL, HFILL }
11582 { &hf_ansi_a_is2000_chan_id_chan_channel_number,
11583 { "Channel Number (ARFCN)", "ansi_a_bsmap.is2000_chan_id.chan.channel_number",
11584 FT_UINT24, BASE_DEC, NULL, 0x0007ff,
11585 NULL, HFILL }
11587 { &hf_ansi_a_is2000_chan_id_chan_fdc_length,
11588 { "FDC Length", "ansi_a_bsmap.is2000_chan_id.chan.fdc_length",
11589 FT_UINT8, BASE_DEC, NULL, 0,
11590 NULL, HFILL }
11592 { &hf_ansi_a_is2000_chan_id_chan_fdc_band_class,
11593 { "FDC Length", "ansi_a_bsmap.is2000_chan_id.chan.fdc_band_class",
11594 FT_UINT16, BASE_DEC, VALS(ansi_a_band_class_vals), 0xf800,
11595 NULL, HFILL }
11597 { &hf_ansi_a_is2000_chan_id_chan_fdc_fwd_chan_freq,
11598 { "FDC Forward Channel Frequency", "ansi_a_bsmap.is2000_chan_id.chan.fdc_fwd_chan_freq",
11599 FT_UINT16, BASE_DEC, NULL, 0x07ff,
11600 NULL, HFILL }
11602 { &hf_ansi_a_is2000_chan_id_chan_fdc_rev_chan_freq,
11603 { "FDC Reverse Channel Frequency", "ansi_a_bsmap.is2000_chan_id.chan.fdc_rev_chan_freq",
11604 FT_UINT16, BASE_DEC, NULL, 0xffe0,
11605 NULL, HFILL }
11607 { &hf_ansi_a_is95_ms_meas_chan_id_band_class, /* IOS 5 (MS Measured Channel Identity) */
11608 { "Band Class", "ansi_a_bsmap.is95_ms_meas_chan_id.band_class",
11609 FT_UINT16, BASE_DEC, VALS(ansi_a_band_class_vals), 0xf800,
11610 NULL, HFILL }
11612 { &hf_ansi_a_is95_ms_meas_chan_id_channel_number,
11613 { "Channel Number (ARFCN)", "ansi_a_bsmap.is95_ms_meas_chan_id.channel_number",
11614 FT_UINT16, BASE_DEC, NULL, 0x07ff,
11615 NULL, HFILL }
11617 { &hf_ansi_a_clg_party_ascii_num_ton,
11618 { "Type of Number", "ansi_a_bsmap.clg_party_ascii_num.ton",
11619 FT_UINT8, BASE_DEC, VALS(ansi_a_clg_party_ascii_num_ton_vals), 0x70,
11620 NULL, HFILL }
11622 { &hf_ansi_a_clg_party_ascii_num_plan,
11623 { "Numbering Plan Identification", "ansi_a_bsmap.clg_party_ascii_num.plan",
11624 FT_UINT8, BASE_DEC, VALS(ansi_a_clg_party_ascii_num_plan_vals), 0x0f,
11625 NULL, HFILL }
11627 { &hf_ansi_a_clg_party_ascii_num_pi,
11628 { "Presentation Indicator", "ansi_a_bsmap.clg_party_ascii_num.pi",
11629 /* not a typo, MS Info Rec and CLG Party ASCII have the same definition for this field */
11630 FT_UINT8, BASE_DEC, VALS(ansi_a_ms_info_rec_clg_pn_pi_vals), 0x60,
11631 NULL, HFILL }
11633 { &hf_ansi_a_clg_party_ascii_num_si,
11634 { "Screening Indicator", "ansi_a_bsmap.clg_party_ascii_num.si",
11635 /* not a typo, MS Info Rec and CLG Party ASCII have the same definition for this field */
11636 FT_UINT8, BASE_DEC, VALS(ansi_a_ms_info_rec_clg_pn_si_vals), 0x03,
11637 NULL, HFILL }
11639 { &hf_ansi_a_lai_mcc,
11640 { "Mobile Country Code (MCC)", "ansi_a_bsmap.lai.mcc",
11641 FT_STRING, BASE_NONE, NULL, 0,
11642 NULL, HFILL }
11644 { &hf_ansi_a_lai_mnc,
11645 { "Mobile Network Code (MNC)", "ansi_a_bsmap.lai.mnc",
11646 FT_STRING, BASE_NONE, NULL, 0,
11647 NULL, HFILL }
11649 { &hf_ansi_a_lai_lac,
11650 { "Location Area Code", "ansi_a_bsmap.lai.lac",
11651 FT_UINT16, BASE_DEC, NULL, 0,
11652 NULL, HFILL }
11654 { &hf_ansi_a_rej_cause,
11655 { "Reject Cause Value", "ansi_a_bsmap.rej_cause",
11656 FT_UINT8, BASE_DEC, NULL, 0,
11657 NULL, HFILL }
11659 { &hf_ansi_a_auth_chlg_param_rand_num_type,
11660 { "Random Number Type", "ansi_a_bsmap.auth_chlg_param.rand_num_type",
11661 FT_UINT8, BASE_DEC, NULL, 0x0f,
11662 NULL, HFILL }
11664 { &hf_ansi_a_auth_chlg_param_rand,
11665 { "RAND/RANDU/RANDBS/RANDSSD Value", "ansi_a_bsmap.auth_chlg_param.rand",
11666 FT_BYTES, BASE_NONE, NULL, 0,
11667 NULL, HFILL }
11669 { &hf_ansi_a_auth_resp_param_sig_type,
11670 { "Auth Signature Type", "ansi_a_bsmap.auth_resp_param.sig_type",
11671 FT_UINT8, BASE_DEC, NULL, 0x0f,
11672 NULL, HFILL }
11674 { &hf_ansi_a_auth_resp_param_sig,
11675 { "Auth Signature", "ansi_a_bsmap.auth_resp_param.sig",
11676 FT_BYTES, BASE_NONE, NULL, 0,
11677 NULL, HFILL }
11679 { &hf_ansi_a_auth_param_count_count,
11680 { "Count", "ansi_a_bsmap.auth_param_count.count",
11681 FT_UINT8, BASE_DEC, NULL, 0x3f,
11682 NULL, HFILL }
11684 { &hf_ansi_a_mwi_num_messages,
11685 { "Number of Messages", "ansi_a_bsmap.mwi.num_messages",
11686 FT_UINT8, BASE_DEC, NULL, 0,
11687 NULL, HFILL }
11689 { &hf_ansi_a_signal_signal_value,
11690 { "Signal Value", "ansi_a_bsmap.signal.signal_value",
11691 FT_UINT8, BASE_DEC, VALS(ansi_a_signal_signal_vals), 0,
11692 NULL, HFILL }
11694 { &hf_ansi_a_signal_alert_pitch,
11695 { "Alert Pitch", "ansi_a_bsmap.signal.alert_pitch",
11696 FT_UINT8, BASE_DEC, VALS(ansi_a_signal_alert_pitch_vals), 0x03,
11697 NULL, HFILL }
11699 { &hf_ansi_a_clg_party_bcd_num_ton,
11700 { "Type of Number", "ansi_a_bsmap.clg_party_bcd_num.ton",
11701 /* not a typo, CLG and CLD have the same definition for this field */
11702 FT_UINT8, BASE_DEC, VALS(ansi_a_cld_party_bcd_num_ton_vals), 0x70,
11703 NULL, HFILL }
11705 { &hf_ansi_a_clg_party_bcd_num_plan,
11706 { "Numbering Plan Identification", "ansi_a_bsmap.clg_party_bcd_num.plan",
11707 /* not a typo, CLG and CLD have the same definition for this field */
11708 FT_UINT8, BASE_DEC, VALS(ansi_a_cld_party_bcd_num_plan_vals), 0x0f,
11709 NULL, HFILL }
11711 { &hf_ansi_a_qos_params_packet_priority,
11712 { "Packet Priority", "ansi_a_bsmap.qos_params.packet_priority",
11713 FT_UINT8, BASE_DEC, NULL, 0x0f,
11714 NULL, HFILL }
11716 { &hf_ansi_a_cause_l3_coding_standard,
11717 { "Coding Standard", "ansi_a_bsmap.cause_l3.coding_standard",
11718 FT_UINT8, BASE_DEC, VALS(ansi_a_cause_l3_coding_standard_vals), 0x60,
11719 NULL, HFILL }
11721 { &hf_ansi_a_cause_l3_location,
11722 { "Location", "ansi_a_bsmap.cause_l3.location",
11723 FT_UINT8, BASE_DEC, VALS(ansi_a_cause_l3_location_vals), 0x0f,
11724 NULL, HFILL }
11726 { &hf_ansi_a_cause_l3_class,
11727 { "Class", "ansi_a_bsmap.cause_l3.class",
11728 FT_UINT8, BASE_DEC, VALS(ansi_a_cause_l3_class_vals), 0x70,
11729 NULL, HFILL }
11731 { &hf_ansi_a_cause_l3_value_without_class,
11732 { "Value (Without class)", "ansi_a_bsmap.cause_l3.value_without_class",
11733 FT_UINT8, BASE_DEC, NULL, 0x0f,
11734 NULL, HFILL }
11736 { &hf_ansi_a_cause_l3_value,
11737 { "Value", "ansi_a_bsmap.cause_l3.value",
11738 FT_UINT8, BASE_DEC, NULL, 0,
11739 NULL, HFILL }
11741 { &hf_ansi_a_auth_conf_param_randc,
11742 { "RANDC", "ansi_a_bsmap.auth_conf_param.randc",
11743 FT_UINT8, BASE_DEC, NULL, 0,
11744 NULL, HFILL }
11746 { &hf_ansi_a_xmode_tfo_mode,
11747 { "TFO Mode", "ansi_a_bsmap.xmode.tfo_mode",
11748 FT_BOOLEAN, 8, TFS(&tfs_ansi_a_xmode_tfo_mode), 0x01,
11749 NULL, HFILL }
11751 { &hf_ansi_a_reg_type_type,
11752 { "Location Registration Type", "ansi_a_bsmap.reg_type.type",
11753 FT_UINT8, BASE_DEC, NULL, 0,
11754 NULL, HFILL }
11756 { &hf_ansi_a_tag_value,
11757 { "Tag value", "ansi_a_bsmap.tag.value",
11758 FT_UINT32, BASE_DEC, NULL, 0,
11759 NULL, HFILL }
11761 { &hf_ansi_a_hho_params_band_class,
11762 { "Band Class", "ansi_a_bsmap.hho_params.band_class",
11763 FT_UINT8, BASE_DEC, VALS(ansi_a_band_class_vals), 0x1f,
11764 NULL, HFILL }
11766 { &hf_ansi_a_hho_params_num_pream_frames,
11767 { "Number of Preamble Frames", "ansi_a_bsmap.hho_params.num_pream_frames",
11768 FT_UINT8, BASE_DEC, NULL, 0xe0,
11769 NULL, HFILL }
11771 { &hf_ansi_a_hho_params_reset_l2,
11772 { "Reset L2", "ansi_a_bsmap.hho_params.reset_l2",
11773 FT_BOOLEAN, 8, TFS(&tfs_l2_reset_dont_reset), 0x10,
11774 "1 means reset Layer 2 Ack", HFILL }
11776 { &hf_ansi_a_hho_params_reset_fpc,
11777 { "Reset FPC", "ansi_a_bsmap.hho_params.reset_fpc",
11778 FT_BOOLEAN, 8, TFS(&tfs_fpc_reset_dont_reset), 0x08,
11779 "1 means reset counters", HFILL }
11781 { &hf_ansi_a_hho_params_enc_mode,
11782 { "Encryption Mode", "ansi_a_bsmap.hho_params.enc_mode",
11783 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x06,
11784 NULL, HFILL }
11786 { &hf_ansi_a_hho_params_private_lcm,
11787 { "Private LCM", "ansi_a_bsmap.hho_params.private_lcm",
11788 FT_BOOLEAN, 8, TFS(&tfs_use_dont_use), 0x01,
11789 NULL, HFILL }
11791 { &hf_ansi_a_hho_params_rev_pwr_cntl_delay_incl,
11792 { "Rev_Pwr_Cntl_Delay_Incl", "ansi_a_bsmap.hho_params.rev_pwr_cntl_delay_incl",
11793 FT_BOOLEAN, 8, TFS(&tfs_use_dont_use), 0x80,
11794 NULL, HFILL }
11796 { &hf_ansi_a_hho_params_rev_pwr_cntl_delay,
11797 { "Rev_Pwr_Cntl_Delay", "ansi_a_bsmap.hho_params.rev_pwr_cntl_delay",
11798 FT_UINT8, BASE_DEC, NULL, 0x60,
11799 NULL, HFILL }
11801 { &hf_ansi_a_hho_params_nom_pwr_ext,
11802 { "Nom_Pwr_Ext", "ansi_a_bsmap.hho_params.nom_pwr_ext",
11803 FT_UINT8, BASE_DEC, NULL, 0x10,
11804 NULL, HFILL }
11806 { &hf_ansi_a_hho_params_nom_pwr,
11807 { "Nom_Pwr", "ansi_a_bsmap.hho_params.nom_pwr",
11808 FT_UINT8, BASE_DEC, NULL, 0x0f,
11809 NULL, HFILL }
11811 { &hf_ansi_a_hho_params_fpc_subchan_info,
11812 { "FPC Subchannel Information", "ansi_a_bsmap.hho_params.fpc_subchan_info",
11813 FT_UINT8, BASE_DEC, NULL, 0x3e,
11814 NULL, HFILL }
11816 { &hf_ansi_a_hho_params_fpc_subchan_info_incl,
11817 { "FPC Subchannel Info Included", "ansi_a_bsmap.hho_params.fpc_subchan_info_incl",
11818 FT_BOOLEAN, 8, TFS(&tfs_use_dont_use), 0x01,
11819 NULL, HFILL }
11821 { &hf_ansi_a_hho_params_pwr_cntl_step,
11822 { "Power Control Step", "ansi_a_bsmap.hho_params.pwr_cntl_step",
11823 FT_UINT8, BASE_DEC, NULL, 0x0e,
11824 NULL, HFILL }
11826 { &hf_ansi_a_hho_params_pwr_cntl_step_incl,
11827 { "Power Control Step Included", "ansi_a_bsmap.hho_params.pwr_cntl_step_incl",
11828 FT_BOOLEAN, 8, TFS(&tfs_use_dont_use), 0x01,
11829 NULL, HFILL }
11831 { &hf_ansi_a_sw_ver_major,
11832 { "IOS Major Revision Level", "ansi_a_bsmap.sw_ver.major",
11833 FT_UINT8, BASE_DEC, NULL, 0,
11834 NULL, HFILL }
11836 { &hf_ansi_a_sw_ver_minor,
11837 { "IOS Minor Revision Level", "ansi_a_bsmap.sw_ver.minor",
11838 FT_UINT8, BASE_DEC, NULL, 0,
11839 NULL, HFILL }
11841 { &hf_ansi_a_sw_ver_point,
11842 { "IOS Point Release Level", "ansi_a_bsmap.sw_ver.point",
11843 FT_UINT8, BASE_DEC, NULL, 0,
11844 NULL, HFILL }
11846 { &hf_ansi_a_so_proprietary_ind,
11847 { "Proprietary Indicator", "ansi_a_bsmap.so.proprietary_ind",
11848 FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x8000,
11849 NULL, HFILL }
11851 { &hf_ansi_a_so_revision,
11852 { "Service Option Revision", "ansi_a_bsmap.so.revision",
11853 FT_UINT16, BASE_DEC, NULL, 0x7000,
11854 NULL, HFILL }
11856 { &hf_ansi_a_so_base_so_num,
11857 { "Base Service Option Number", "ansi_a_bsmap.so.base_so_num",
11858 FT_UINT16, BASE_DEC, NULL, 0x0fff,
11859 NULL, HFILL }
11861 { &hf_ansi_a_soci,
11862 { "Service Option Connection Identifier", "ansi_a_bsmap.soci",
11863 FT_UINT8, BASE_DEC, NULL, 0x07,
11864 NULL, HFILL }
11866 { &hf_ansi_a_so_list_num,
11867 { "Number of Service Option instances", "ansi_a_bsmap.so_list.num",
11868 FT_UINT8, BASE_DEC, NULL, 0,
11869 NULL, HFILL }
11871 { &hf_ansi_a_so_list_sr_id,
11872 { "SR_ID", "ansi_a_bsmap.so_list.sr_id",
11873 FT_UINT8, BASE_DEC, NULL, 0x38,
11874 NULL, HFILL }
11876 { &hf_ansi_a_so_list_soci,
11877 { "SOCI", "ansi_a_bsmap.so_list.soci",
11878 FT_UINT8, BASE_DEC, NULL, 0x07,
11879 NULL, HFILL }
11881 { &hf_ansi_a_nid,
11882 { "NID", "ansi_a_bsmap.nid",
11883 FT_UINT16, BASE_DEC, NULL, 0,
11884 NULL, HFILL }
11886 { &hf_ansi_a_pzid,
11887 { "PZID", "ansi_a_bsmap.pzid",
11888 FT_UINT8, BASE_DEC, NULL, 0,
11889 NULL, HFILL }
11891 { &hf_ansi_a_adds_user_part_burst_type,
11892 { "Data Burst Type", "ansi_a_bsmap.adds_user_part.burst_type",
11893 FT_UINT8, BASE_DEC, VALS(ansi_a_adds_vals), 0x3f,
11894 NULL, HFILL }
11896 { &hf_ansi_a_adds_user_part_ext_burst_type,
11897 { "Extended Burst Type", "ansi_a_bsmap.adds_user_part.ext_burst_type",
11898 FT_UINT16, BASE_DEC, NULL, 0,
11899 NULL, HFILL }
11901 { &hf_ansi_a_adds_user_part_ext_data,
11902 { "Data", "ansi_a_bsmap.adds_user_part.ext_data",
11903 FT_BYTES, BASE_NONE, NULL, 0,
11904 NULL, HFILL }
11906 { &hf_ansi_a_adds_user_part_unknown_data,
11907 { "Data", "ansi_a_bsmap.adds_user_part.unknown_data",
11908 FT_BYTES, BASE_NONE, NULL, 0,
11909 NULL, HFILL }
11911 { &hf_ansi_a_amps_hho_params_enc_mode,
11912 { "Encryption Mode", "ansi_a_bsmap.amps_hho_params.enc_mode",
11913 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x03,
11914 NULL, HFILL }
11916 { &hf_ansi_a_is2000_scr_num_fill_bits,
11917 { "Bit-Exact Length Fill Bits", "ansi_a_bsmap.is2000_scr.num_fill_bits",
11918 FT_UINT8, BASE_DEC, NULL, 0x07,
11919 NULL, HFILL }
11921 { &hf_ansi_a_is2000_scr_for_mux_option,
11922 { "FOR_MUX_OPTION: Forward Traffic Channel multiplex option", "ansi_a_bsmap.is2000_scr.for_mux_opt",
11923 FT_UINT16, BASE_DEC, NULL, 0,
11924 NULL, HFILL }
11926 { &hf_ansi_a_is2000_scr_rev_mux_option,
11927 { "REV_MUX_OPTION: Reverse Traffic Channel multiplex option", "ansi_a_bsmap.is2000_scr.rev_mux_opt",
11928 FT_UINT16, BASE_DEC, NULL, 0,
11929 NULL, HFILL }
11931 { &hf_ansi_a_is2000_scr_for_fch_rate,
11932 { "FOR_RATES: Transmission rates of the Forward Fundamental Channel", "ansi_a_bsmap.is2000_scr.for_fch_rate",
11933 FT_UINT8, BASE_DEC, NULL, 0,
11934 NULL, HFILL }
11936 { &hf_ansi_a_is2000_scr_rev_fch_rate,
11937 { "REV_RATES: Transmission rates of the Reverse Fundamental Channel", "ansi_a_bsmap.is2000_scr.rev_fch_rate",
11938 FT_UINT8, BASE_DEC, NULL, 0,
11939 NULL, HFILL }
11941 { &hf_ansi_a_is2000_scr_num_socr,
11942 { "NUM_CON_REC: Number of service option connection records", "ansi_a_bsmap.is2000_scr.num_socr",
11943 FT_UINT8, BASE_DEC, NULL, 0,
11944 NULL, HFILL }
11946 { &hf_ansi_a_is2000_scr_socr_soc_ref,
11947 { "CON_REF: Service option connection reference", "ansi_a_bsmap.is2000_scr.socr.soc_ref",
11948 FT_UINT8, BASE_DEC, NULL, 0,
11949 NULL, HFILL }
11951 { &hf_ansi_a_is2000_scr_socr_so,
11952 { "SERVICE_OPTION", "ansi_a_bsmap.is2000_scr.socr.so",
11953 FT_UINT16, BASE_DEC, NULL, 0,
11954 NULL, HFILL }
11956 { &hf_ansi_a_is2000_scr_socr_for_chan_type,
11957 { "FOR_TRAFFIC", "ansi_a_bsmap.is2000_scr.socr.for_chan_type",
11958 FT_UINT8, BASE_DEC, NULL, 0xf0,
11959 NULL, HFILL }
11961 { &hf_ansi_a_is2000_scr_socr_rev_chan_type,
11962 { "REV_TRAFFIC", "ansi_a_bsmap.is2000_scr.socr.rev_chan_type",
11963 FT_UINT8, BASE_DEC, NULL, 0x0f,
11964 NULL, HFILL }
11966 { &hf_ansi_a_is2000_scr_socr_ui_enc_mode,
11967 { "UI_ENCRYPT_MODE: Encryption mode indicator for user information privacy", "ansi_a_bsmap.is2000_scr.socr.ui_enc_mode",
11968 FT_UINT8, BASE_DEC, NULL, 0xe0,
11969 NULL, HFILL }
11971 { &hf_ansi_a_is2000_scr_socr_sr_id,
11972 { "SR_ID: Service reference identifier", "ansi_a_bsmap.is2000_scr.socr.sr_id",
11973 FT_UINT8, BASE_DEC, NULL, 0x1c,
11974 NULL, HFILL }
11976 { &hf_ansi_a_is2000_scr_socr_rlp_info_incl,
11977 { "RLP_INFO_INCL: RLP information included indicator", "ansi_a_bsmap.is2000_scr.socr.rlp_info_incl",
11978 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
11979 NULL, HFILL }
11981 { &hf_ansi_a_is2000_scr_socr_rlp_blob_len,
11982 { "RLP_BLOB_LEN", "ansi_a_bsmap.is2000_scr.socr.rlp_blob_len",
11983 FT_UINT16, BASE_DEC, NULL, 0x01E0,
11984 NULL, HFILL }
11986 { &hf_ansi_a_is2000_scr_socr_rlp_blob_msb,
11987 { "RLP_BLOB (MSB)", "ansi_a_bsmap.is2000_scr.socr.rlp_blob_msb",
11988 FT_UINT8, BASE_DEC, NULL, 0x1f,
11989 NULL, HFILL }
11991 { &hf_ansi_a_is2000_scr_socr_rlp_blob,
11992 { "RLP_BLOB", "ansi_a_bsmap.is2000_scr.socr.rlp_blob",
11993 FT_BYTES, BASE_NONE, NULL, 0x0,
11994 NULL, HFILL }
11996 { &hf_ansi_a_is2000_scr_socr_rlp_blob_lsb,
11997 { "RLP_BLOB (LSB)", "ansi_a_bsmap.is2000_scr.socr.rlp_blob_lsb",
11998 FT_UINT8, BASE_DEC, NULL, 0xe0,
11999 NULL, HFILL }
12001 { &hf_ansi_a_is2000_scr_socr_fch_cc_incl,
12002 { "FCH_CC_INCL: Channel configuration for the Fundamental Channel included indicator", "ansi_a_bsmap.is2000_scr.socr.fch_cc_incl",
12003 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x80,
12004 NULL, HFILL }
12006 { &hf_ansi_a_is2000_scr_socr_fch_frame_size_support_ind,
12007 { "FCH_FRAME_SIZE: Fundamental Channel frame size supported indicator", "ansi_a_bsmap.is2000_scr.socr.fch_frame_size_support_ind",
12008 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x40,
12009 NULL, HFILL }
12011 { &hf_ansi_a_is2000_scr_socr_for_fch_rc,
12012 { "FOR_FCH_RC: Forward Fundamental Channel Radio Configuration", "ansi_a_bsmap.is2000_scr.socr.for_fch_rc",
12013 FT_UINT8, BASE_DEC, NULL, 0x3e,
12014 NULL, HFILL }
12016 { &hf_ansi_a_is2000_scr_socr_rev_fch_rc,
12017 { "REV_FCH_RC", "ansi_a_bsmap.is2000_scr.socr.rev_fch_rc",
12018 FT_UINT16, BASE_DEC, NULL, 0x01F0,
12019 NULL, HFILL }
12021 { &hf_ansi_a_is2000_nn_scr_num_fill_bits,
12022 { "Bit-Exact Length Fill Bits", "ansi_a_bsmap.is2000_nn_scr.num_fill_bits",
12023 FT_UINT8, BASE_DEC, NULL, 0x07,
12024 NULL, HFILL }
12026 { &hf_ansi_a_is2000_nn_scr_content,
12027 { "IS-2000 Non-Negotiable Service Configuration Record Content", "ansi_a_bsmap.is2000_nn_scr.content",
12028 FT_BYTES, BASE_NONE, NULL, 0,
12029 NULL, HFILL }
12031 { &hf_ansi_a_is2000_nn_scr_fill_bits,
12032 { "Fill Bits", "ansi_a_bsmap.is2000_nn_scr.fill_bits",
12033 FT_UINT8, BASE_DEC, NULL, 0,
12034 NULL, HFILL }
12036 { &hf_ansi_a_is2000_mob_cap_rev_pdch_support_ind,
12037 { "REV_PDCH: IS-2000 R-PDCH supported", "ansi_a_bsmap.is2000_mob_cap.rev_pdch_support_ind",
12038 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x80,
12039 NULL, HFILL }
12041 { &hf_ansi_a_is2000_mob_cap_for_pdch_support_ind,
12042 { "FOR_PDCH: IS-2000 F-PDCH supported", "ansi_a_bsmap.is2000_mob_cap.for_pdch_support_ind",
12043 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x40,
12044 NULL, HFILL }
12046 { &hf_ansi_a_is2000_mob_cap_eram_support_ind,
12047 { "ERAM: Enhanced Rate Adaptation Mode supported", "ansi_a_bsmap.is2000_mob_cap.eram_support_ind",
12048 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x20,
12049 NULL, HFILL }
12051 { &hf_ansi_a_is2000_mob_cap_dcch_support_ind,
12052 { "DCCH: IS-2000 DCCH supported", "ansi_a_bsmap.is2000_mob_cap.dcch_support_ind",
12053 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x10,
12054 NULL, HFILL }
12056 { &hf_ansi_a_is2000_mob_cap_fch_support_ind,
12057 { "FCH: IS-2000 FCH supported", "ansi_a_bsmap.is2000_mob_cap.fch_support_ind",
12058 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x08,
12059 NULL, HFILL }
12061 { &hf_ansi_a_is2000_mob_cap_otd_support_ind,
12062 { "OTD: Orthogonal Transmit Diversity supported", "ansi_a_bsmap.is2000_mob_cap.otd_support_ind",
12063 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x04,
12064 NULL, HFILL }
12066 { &hf_ansi_a_is2000_mob_cap_enh_rc_cfg_support_ind,
12067 { "Enhanced RC CFG Supported: Radio configuration in radio class 2 supported", "ansi_a_bsmap.is2000_mob_cap.enh_rc_cfg_support_ind",
12068 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
12069 NULL, HFILL }
12071 { &hf_ansi_a_is2000_mob_cap_qpch_support_ind,
12072 { "QPCH Supported: Quick Paging Channel supported", "ansi_a_bsmap.is2000_mob_cap.qpch_support_ind",
12073 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x01,
12074 NULL, HFILL }
12076 { &hf_ansi_a_is2000_mob_cap_fch_info_octet_len,
12077 { "FCH Information: Bit-Exact Length Octet Count", "ansi_a_bsmap.is2000_mob_cap.fch_info.octet_len",
12078 FT_UINT8, BASE_DEC, NULL, 0,
12079 NULL, HFILL }
12081 { &hf_ansi_a_is2000_mob_cap_fch_info_geo_loc_type,
12082 { "Geo Location Type", "ansi_a_bsmap.is2000_mob_cap.fch_info.geo_loc_type",
12083 FT_UINT8, BASE_DEC, VALS(ansi_a_is2000_mob_cap_fch_info_geo_loc_type_vals), 0x70,
12084 NULL, HFILL }
12086 { &hf_ansi_a_is2000_mob_cap_fch_info_geo_loc_incl,
12087 { "Geo Location Included", "ansi_a_bsmap.is2000_mob_cap.fch_info.geo_loc_incl",
12088 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x08,
12089 NULL, HFILL }
12091 { &hf_ansi_a_is2000_mob_cap_fch_info_num_fill_bits,
12092 { "Bit-Exact Length Fill Bits", "ansi_a_bsmap.is2000_mob_cap.fch_info.num_fill_bits",
12093 FT_UINT8, BASE_DEC, NULL, 0x07,
12094 NULL, HFILL }
12096 { &hf_ansi_a_is2000_mob_cap_fch_info_content,
12097 { "FCH Information Content", "ansi_a_bsmap.is2000_mob_cap.fch_info.content",
12098 FT_BYTES, BASE_NONE, NULL, 0,
12099 NULL, HFILL }
12101 { &hf_ansi_a_is2000_mob_cap_fch_info_fill_bits,
12102 { "Fill Bits", "ansi_a_bsmap.is2000_mob_cap.fch_info.fill_bits",
12103 FT_UINT8, BASE_DEC, NULL, 0,
12104 NULL, HFILL }
12106 { &hf_ansi_a_is2000_mob_cap_dcch_info_octet_len,
12107 { "DCCH Information: Bit-Exact Length Octet Count", "ansi_a_bsmap.is2000_mob_cap.dcch_info.octet_len",
12108 FT_UINT8, BASE_DEC, NULL, 0,
12109 NULL, HFILL }
12111 { &hf_ansi_a_is2000_mob_cap_dcch_info_num_fill_bits,
12112 { "Bit-Exact Length Fill Bits", "ansi_a_bsmap.is2000_mob_cap.dcch_info.num_fill_bits",
12113 FT_UINT8, BASE_DEC, NULL, 0x07,
12114 NULL, HFILL }
12116 { &hf_ansi_a_is2000_mob_cap_dcch_info_content,
12117 { "DCCH Information Content", "ansi_a_bsmap.is2000_mob_cap.dcch_info.content",
12118 FT_BYTES, BASE_NONE, NULL, 0,
12119 NULL, HFILL }
12121 { &hf_ansi_a_is2000_mob_cap_dcch_info_fill_bits,
12122 { "Fill Bits", "ansi_a_bsmap.is2000_mob_cap.dcch_info.fill_bits",
12123 FT_UINT8, BASE_DEC, NULL, 0,
12124 NULL, HFILL }
12126 { &hf_ansi_a_is2000_mob_cap_for_pdch_info_octet_len,
12127 { "FOR_PDCH Information: Bit-Exact Length Octet Count", "ansi_a_bsmap.is2000_mob_cap.for_pdch_info.octet_len",
12128 FT_UINT8, BASE_DEC, NULL, 0,
12129 NULL, HFILL }
12131 { &hf_ansi_a_is2000_mob_cap_for_pdch_info_num_fill_bits,
12132 { "Bit-Exact Length Fill Bits", "ansi_a_bsmap.is2000_mob_cap.for_pdch_info.num_fill_bits",
12133 FT_UINT8, BASE_DEC, NULL, 0x07,
12134 NULL, HFILL }
12136 { &hf_ansi_a_is2000_mob_cap_for_pdch_info_content,
12137 { "FOR_PDCH Information Content", "ansi_a_bsmap.is2000_mob_cap.for_pdch_info.content",
12138 FT_BYTES, BASE_NONE, NULL, 0,
12139 NULL, HFILL }
12141 { &hf_ansi_a_is2000_mob_cap_for_pdch_info_fill_bits,
12142 { "Fill Bits", "ansi_a_bsmap.is2000_mob_cap.for_pdch_info.fill_bits",
12143 FT_UINT8, BASE_DEC, NULL, 0,
12144 NULL, HFILL }
12146 { &hf_ansi_a_is2000_mob_cap_rev_pdch_info_octet_len,
12147 { "REV_PDCH Information: Bit-Exact Length Octet Count", "ansi_a_bsmap.is2000_mob_cap.rev_pdch_info.octet_len",
12148 FT_UINT8, BASE_DEC, NULL, 0,
12149 NULL, HFILL }
12151 { &hf_ansi_a_is2000_mob_cap_rev_pdch_info_num_fill_bits,
12152 { "Bit-Exact Length Fill Bits", "ansi_a_bsmap.is2000_mob_cap.rev_pdch_info.num_fill_bits",
12153 FT_UINT8, BASE_DEC, NULL, 0x07,
12154 NULL, HFILL }
12156 { &hf_ansi_a_is2000_mob_cap_rev_pdch_info_content,
12157 { "REV_PDCH Information Content", "ansi_a_bsmap.is2000_mob_cap.rev_pdch_info.content",
12158 FT_BYTES, BASE_NONE, NULL, 0,
12159 NULL, HFILL }
12161 { &hf_ansi_a_is2000_mob_cap_rev_pdch_info_fill_bits,
12162 { "Fill Bits", "ansi_a_bsmap.is2000_mob_cap.rev_pdch_info.fill_bits",
12163 FT_UINT8, BASE_DEC, NULL, 0,
12164 NULL, HFILL }
12166 { &hf_ansi_a_is2000_mob_cap_vp_support,
12167 { "VP Algorithms Supported", "ansi_a_bsmap.is2000_mob_cap.vp_support",
12168 FT_UINT8, BASE_DEC, NULL, 0,
12169 NULL, HFILL }
12171 { &hf_ansi_a_is2000_mob_cap_vp_support_a7,
12172 { "VP Algorithm A7", "ansi_a_bsmap.is2000_mob_cap.vp_support.a7",
12173 FT_BOOLEAN, 8, TFS(&tfs_reserved_no_voice_privacy), 0x40,
12174 NULL, HFILL }
12176 { &hf_ansi_a_is2000_mob_cap_vp_support_a6,
12177 { "VP Algorithm A6", "ansi_a_bsmap.is2000_mob_cap.vp_support.a6",
12178 FT_BOOLEAN, 8, TFS(&tfs_reserved_no_voice_privacy), 0x20,
12179 NULL, HFILL }
12181 { &hf_ansi_a_is2000_mob_cap_vp_support_a5,
12182 { "VP Algorithm A5", "ansi_a_bsmap.is2000_mob_cap.vp_support.a5",
12183 FT_BOOLEAN, 8, TFS(&tfs_reserved_no_voice_privacy), 0x10,
12184 NULL, HFILL }
12186 { &hf_ansi_a_is2000_mob_cap_vp_support_a4,
12187 { "VP Algorithm A4", "ansi_a_bsmap.is2000_mob_cap.vp_support.a4",
12188 FT_BOOLEAN, 8, TFS(&tfs_reserved_no_voice_privacy), 0x08,
12189 NULL, HFILL }
12191 { &hf_ansi_a_is2000_mob_cap_vp_support_a3,
12192 { "VP Algorithm A3", "ansi_a_bsmap.is2000_mob_cap.vp_support.a3",
12193 FT_BOOLEAN, 8, TFS(&tfs_reserved_no_voice_privacy), 0x04,
12194 NULL, HFILL }
12196 { &hf_ansi_a_is2000_mob_cap_vp_support_a2,
12197 { "VP Algorithm A2", "ansi_a_bsmap.is2000_mob_cap.vp_support.a2",
12198 FT_BOOLEAN, 8, TFS(&tfs_reserved_aes), 0x02,
12199 NULL, HFILL }
12201 { &hf_ansi_a_is2000_mob_cap_vp_support_a1,
12202 { "VP Algorithm A1", "ansi_a_bsmap.is2000_mob_cap.vp_support.a1",
12203 FT_BOOLEAN, 8, TFS(&tfs_reserved_private_long_code), 0x01,
12204 NULL, HFILL }
12206 { &hf_ansi_a_protocol_type,
12207 { "Protocol Type", "ansi_a_bsmap.protocol_type",
12208 FT_UINT16, BASE_DEC, NULL, 0,
12209 NULL, HFILL }
12211 { &hf_ansi_a_fwd_ms_info_rec_cld_pn_num_type,
12212 { "Forward MS Information Record Called Party Number: Number Type", "ansi_a_bsmap.fwd_ms_info_rec.cld_pn.num_type",
12213 FT_UINT8, BASE_DEC, VALS(ansi_a_ms_info_rec_num_type_vals), 0xe0,
12214 NULL, HFILL }
12216 { &hf_ansi_a_fwd_ms_info_rec_cld_pn_num_plan,
12217 { "Forward MS Information Record Called Party Number: Number Plan", "ansi_a_bsmap.fwd_ms_info_rec.cld_pn.num_plan",
12218 FT_UINT8, BASE_DEC, VALS(ansi_a_ms_info_rec_num_plan_vals), 0x1e,
12219 NULL, HFILL }
12221 { &hf_ansi_a_fwd_ms_info_rec_cld_pn_num,
12222 { "Forward MS Information Record Called Party Number: Number", "ansi_a_bsmap.fwd_ms_info_rec.cld_pn.num",
12223 FT_STRING, BASE_NONE, NULL, 0,
12224 NULL, HFILL }
12226 { &hf_ansi_a_fwd_ms_info_rec_clg_pn_num_type,
12227 { "Forward MS Information Record Calling Party Number: Number Type", "ansi_a_bsmap.fwd_ms_info_rec.clg_pn.num_type",
12228 FT_UINT16, BASE_DEC, VALS(ansi_a_ms_info_rec_num_type_vals), 0xe000,
12229 NULL, HFILL }
12231 { &hf_ansi_a_fwd_ms_info_rec_clg_pn_num_plan,
12232 { "Forward MS Information Record Calling Party Number: Number Plan", "ansi_a_bsmap.fwd_ms_info_rec.clg_pn.num_plan",
12233 FT_UINT16, BASE_DEC, VALS(ansi_a_ms_info_rec_num_plan_vals), 0x1e00,
12234 NULL, HFILL }
12236 { &hf_ansi_a_fwd_ms_info_rec_clg_pn_num,
12237 { "Forward MS Information Record Calling Party Number: Number", "ansi_a_bsmap.fwd_ms_info_rec.clg_pn.num",
12238 FT_STRING, BASE_NONE, NULL, 0,
12239 NULL, HFILL }
12241 { &hf_ansi_a_fwd_ms_info_rec_clg_pn_pi,
12242 { "Forward MS Information Record Calling Party Number: PI", "ansi_a_bsmap.fwd_ms_info_rec.clg_pn.pi",
12243 FT_UINT16, BASE_DEC, VALS(ansi_a_ms_info_rec_clg_pn_pi_vals), 0x0180,
12244 NULL, HFILL }
12246 { &hf_ansi_a_fwd_ms_info_rec_clg_pn_si,
12247 { "Forward MS Information Record Calling Party Number: SI", "ansi_a_bsmap.fwd_ms_info_rec.clg_pn.si",
12248 FT_UINT16, BASE_DEC, VALS(ansi_a_ms_info_rec_clg_pn_si_vals), 0x0060,
12249 NULL, HFILL }
12251 { &hf_ansi_a_fwd_ms_info_rec_mw_num,
12252 { "Number of messages waiting", "ansi_a_bsmap.fwd_ms_info_rec.mw.num",
12253 FT_UINT8, BASE_DEC, NULL, 0,
12254 NULL, HFILL }
12256 { &hf_ansi_a_fwd_ms_info_rec_content,
12257 { "Forward MS Information Record Content", "ansi_a_bsmap.fwd_ms_info_rec.content",
12258 FT_BYTES, BASE_NONE, NULL, 0,
12259 NULL, HFILL }
12261 { &hf_ansi_a_rev_ms_info_rec_cld_pn_num_type,
12262 { "Reverse MS Information Record Called Party Number: Number Type", "ansi_a_bsmap.rev_ms_info_rec.cld_pn.num_type",
12263 FT_UINT8, BASE_DEC, VALS(ansi_a_ms_info_rec_num_type_vals), 0xe0,
12264 NULL, HFILL }
12266 { &hf_ansi_a_rev_ms_info_rec_cld_pn_num_plan,
12267 { "Reverse MS Information Record Called Party Number: Number Plan", "ansi_a_bsmap.rev_ms_info_rec.cld_pn.num_plan",
12268 FT_UINT8, BASE_DEC, VALS(ansi_a_ms_info_rec_num_plan_vals), 0x1e,
12269 NULL, HFILL }
12271 { &hf_ansi_a_rev_ms_info_rec_cld_pn_num,
12272 { "Reverse MS Information Record Called Party Number: Number", "ansi_a_bsmap.rev_ms_info_rec.cld_pn.num",
12273 FT_STRING, BASE_NONE, NULL, 0,
12274 NULL, HFILL }
12276 { &hf_ansi_a_rev_ms_info_rec_clg_pn_num_type,
12277 { "Reverse MS Information Record Calling Party Number: Number Type", "ansi_a_bsmap.rev_ms_info_rec.clg_pn.num_type",
12278 FT_UINT16, BASE_DEC, VALS(ansi_a_ms_info_rec_num_type_vals), 0xe000,
12279 NULL, HFILL }
12281 { &hf_ansi_a_rev_ms_info_rec_clg_pn_num_plan,
12282 { "Reverse MS Information Record Calling Party Number: Number Plan", "ansi_a_bsmap.rev_ms_info_rec.clg_pn.num_plan",
12283 FT_UINT16, BASE_DEC, VALS(ansi_a_ms_info_rec_num_plan_vals), 0x1e00,
12284 NULL, HFILL }
12286 { &hf_ansi_a_rev_ms_info_rec_clg_pn_pi,
12287 { "Reverse MS Information Record Calling Party Number: PI", "ansi_a_bsmap.rev_ms_info_rec.clg_pn.pi",
12288 FT_UINT16, BASE_DEC, VALS(ansi_a_ms_info_rec_clg_pn_pi_vals), 0x0180,
12289 NULL, HFILL }
12291 { &hf_ansi_a_rev_ms_info_rec_clg_pn_si,
12292 { "Reverse MS Information Record Calling Party Number: SI", "ansi_a_bsmap.rev_ms_info_rec.clg_pn.si",
12293 FT_UINT16, BASE_DEC, VALS(ansi_a_ms_info_rec_clg_pn_si_vals), 0x0060,
12294 NULL, HFILL }
12296 { &hf_ansi_a_rev_ms_info_rec_clg_pn_num,
12297 { "Reverse MS Information Record Calling Party Number: Number", "ansi_a_bsmap.rev_ms_info_rec.clg_pn.num",
12298 FT_STRING, BASE_NONE, NULL, 0,
12299 NULL, HFILL }
12301 { &hf_ansi_a_rev_ms_info_rec_so_info_fwd_support,
12302 { "Forward Support", "ansi_a_bsmap.rev_ms_info_rec.so_info.fwd_support",
12303 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
12304 NULL, HFILL }
12306 { &hf_ansi_a_rev_ms_info_rec_so_info_rev_support,
12307 { "Reverse Support", "ansi_a_bsmap.rev_ms_info_rec.so_info.rev_support",
12308 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x01,
12309 NULL, HFILL }
12311 { &hf_ansi_a_rev_ms_info_rec_so_info_so,
12312 { "Service Option", "ansi_a_bsmap.rev_ms_info_rec.so_info.so",
12313 FT_UINT16, BASE_DEC, NULL, 0,
12314 NULL, HFILL }
12316 { &hf_ansi_a_rev_ms_info_rec_content,
12317 { "Reverse MS Information Record Content", "ansi_a_bsmap.rev_ms_info_rec.content",
12318 FT_BYTES, BASE_NONE, NULL, 0,
12319 NULL, HFILL }
12321 { &hf_ansi_a_ext_ho_dir_params_srch_win_a,
12322 { "Search Window A Size (Srch_Win_A)", "ansi_a_bsmap.ext_ho_dir_params.srch_win_a",
12323 FT_UINT8, BASE_DEC, VALS(ansi_a_srch_win_sizes_vals), 0xf0,
12324 NULL, HFILL }
12326 { &hf_ansi_a_ext_ho_dir_params_srch_win_n,
12327 { "Search Window N Size (Srch_Win_N)", "ansi_a_bsmap.ext_ho_dir_params.srch_win_n",
12328 FT_UINT8, BASE_DEC, VALS(ansi_a_srch_win_sizes_vals), 0x0f,
12329 NULL, HFILL }
12331 { &hf_ansi_a_ext_ho_dir_params_srch_win_r,
12332 { "Search Window R Size (Srch_Win_R)", "ansi_a_bsmap.ext_ho_dir_params.srch_win_r",
12333 FT_UINT8, BASE_DEC, VALS(ansi_a_srch_win_sizes_vals), 0xf0,
12334 NULL, HFILL }
12336 { &hf_ansi_a_ext_ho_dir_params_t_add,
12337 { "Add Pilot Threshold (T_Add)", "ansi_a_bsmap.ext_ho_dir_params.t_add",
12338 FT_UINT16, BASE_DEC, NULL, 0x0fc0,
12339 NULL, HFILL }
12341 { &hf_ansi_a_ext_ho_dir_params_t_drop,
12342 { "Drop Pilot Threshold (T_Drop)", "ansi_a_bsmap.ext_ho_dir_params.t_drop",
12343 FT_UINT8, BASE_DEC, NULL, 0x3f,
12344 NULL, HFILL }
12346 { &hf_ansi_a_ext_ho_dir_params_t_comp,
12347 { "Compare Threshold (T_Comp)", "ansi_a_bsmap.ext_ho_dir_params.t_comp",
12348 FT_UINT8, BASE_DEC, NULL, 0xf0,
12349 NULL, HFILL }
12351 { &hf_ansi_a_ext_ho_dir_params_t_tdrop,
12352 { "Drop Timer Value (T_TDrop)", "ansi_a_bsmap.ext_ho_dir_params.t_tdrop",
12353 FT_UINT8, BASE_DEC, VALS(ansi_a_t_tdrop_vals), 0x0f,
12354 NULL, HFILL }
12356 { &hf_ansi_a_ext_ho_dir_params_nghbor_max_age,
12357 { "Neighbor Max Age (Nghbor_Max_AGE)", "ansi_a_bsmap.ext_ho_dir_params.nghbor_max_age",
12358 FT_UINT8, BASE_DEC, NULL, 0xf0,
12359 NULL, HFILL }
12361 { &hf_ansi_a_ext_ho_dir_params_target_bs_values_incl,
12362 { "Target BS Values Included", "ansi_a_bsmap.ext_ho_dir_params.target_bs_values_incl",
12363 FT_UINT8, BASE_DEC, VALS(ansi_a_ext_ho_dir_params_target_bs_values_incl_vals), 0x03,
12364 NULL, HFILL }
12366 { &hf_ansi_a_ext_ho_dir_params_soft_slope,
12367 { "SOFT_SLOPE", "ansi_a_bsmap.ext_ho_dir_params.soft_slope",
12368 FT_UINT8, BASE_DEC, NULL, 0x3f,
12369 NULL, HFILL }
12371 { &hf_ansi_a_ext_ho_dir_params_add_intercept,
12372 { "ADD_INTERCEPT", "ansi_a_bsmap.ext_ho_dir_params.add_intercept",
12373 FT_UINT8, BASE_DEC, NULL, 0x3f,
12374 NULL, HFILL }
12376 { &hf_ansi_a_ext_ho_dir_params_drop_intercept,
12377 { "DROP_INTERCEPT", "ansi_a_bsmap.ext_ho_dir_params.drop_intercept",
12378 FT_UINT8, BASE_DEC, NULL, 0x3f,
12379 NULL, HFILL }
12381 { &hf_ansi_a_ext_ho_dir_params_target_bs_p_rev,
12382 { "Target BS P_REV", "ansi_a_bsmap.ext_ho_dir_params.target_bs_p_rev",
12383 FT_UINT8, BASE_DEC, NULL, 0,
12384 NULL, HFILL }
12386 { &hf_ansi_a_cdma_sowd_sowd,
12387 { "CDMA Serving One Way Delay", "ansi_a_bsmap.cdma_sowd.sowd",
12388 FT_UINT16, BASE_DEC, NULL, 0,
12389 NULL, HFILL }
12391 { &hf_ansi_a_cdma_sowd_resolution,
12392 { "Resolution", "ansi_a_bsmap.cdma_sowd.resolution",
12393 FT_UINT8, BASE_DEC, VALS(ansi_a_cdma_sowd_resolution_vals), 0x03,
12394 NULL, HFILL }
12396 { &hf_ansi_a_cdma_sowd_timestamp,
12397 { "CDMA Serving One Way Delay Time Stamp", "ansi_a_bsmap.cdma_sowd.timestamp",
12398 FT_UINT16, BASE_DEC, NULL, 0,
12399 NULL, HFILL }
12401 { &hf_ansi_a_re_res_prio_incl,
12402 { "Include Priority", "ansi_a_bsmap.re_res.prio_incl",
12403 FT_BOOLEAN, 8, TFS(&tfs_prio_incl_yes_no), 0x40,
12404 NULL, HFILL }
12406 { &hf_ansi_a_re_res_forward,
12407 { "Forward", "ansi_a_bsmap.re_res.forward",
12408 FT_UINT8, BASE_DEC, VALS(ansi_a_re_res_vals), 0x30,
12409 NULL, HFILL }
12411 { &hf_ansi_a_re_res_reverse,
12412 { "Reverse", "ansi_a_bsmap.re_res.reverse",
12413 FT_UINT8, BASE_DEC, VALS(ansi_a_re_res_vals), 0x0c,
12414 NULL, HFILL }
12416 { &hf_ansi_a_re_res_alloc,
12417 { "Alloc", "ansi_a_bsmap.re_res.alloc",
12418 FT_BOOLEAN, 8, TFS(&tfs_alloc_yes_no), 0x02,
12419 NULL, HFILL }
12421 { &hf_ansi_a_re_res_avail,
12422 { "Avail", "ansi_a_bsmap.re_res.avail",
12423 FT_BOOLEAN, 8, TFS(&tfs_avail_yes_no), 0x01,
12424 NULL, HFILL }
12426 { &hf_ansi_a_cld_party_ascii_num_ton,
12427 { "Type of Number", "ansi_a_bsmap.cld_party_ascii_num.ton",
12428 /* Should actually be as defined by ATIS-1000607.2000 (but I don't have that) */
12429 FT_UINT8, BASE_DEC, VALS(ansi_a_cld_party_bcd_num_ton_vals), 0x70,
12430 NULL, HFILL }
12432 { &hf_ansi_a_cld_party_ascii_num_plan,
12433 { "Numbering Plan Identification", "ansi_a_bsmap.cld_party_ascii_num.plan",
12434 /* Should actually be as defined by ATIS-1000607.2000 (but I don't have that) */
12435 FT_UINT8, BASE_DEC, VALS(ansi_a_cld_party_bcd_num_plan_vals), 0x0f,
12436 NULL, HFILL }
12438 { &hf_ansi_a_band_class,
12439 { "Band Class", "ansi_a_bsmap.band_class",
12440 FT_UINT8, BASE_DEC, VALS(ansi_a_band_class_vals), 0x1f,
12441 NULL, HFILL }
12443 { &hf_ansi_a_is2000_cause,
12444 { "Cause", "ansi_a_bsmap.is2000_cause",
12445 FT_BYTES, BASE_NONE, NULL, 0,
12446 NULL, HFILL }
12448 { &hf_ansi_a_auth_event,
12449 { "Event", "ansi_a_bsmap.auth_event",
12450 FT_BYTES, BASE_NONE, NULL, 0,
12451 NULL, HFILL }
12453 { &hf_ansi_a_psmm_count,
12454 { "PSMM Count", "ansi_a_bsmap.psmm_count",
12455 FT_UINT8, BASE_DEC, NULL, 0x0f,
12456 NULL, HFILL }
12458 { &hf_ansi_a_geo_loc,
12459 { "Calling Geodetic Location (CGL)", "ansi_a_bsmap.geo_loc",
12460 FT_BYTES, BASE_NONE, NULL, 0,
12461 NULL, HFILL }
12463 { &hf_ansi_a_cct_group_all_circuits,
12464 { "All Circuits", "ansi_a_bsmap.cct_group.all_circuits",
12465 FT_BOOLEAN, 8, TFS(&tfs_avail_yes_no), 0x02,
12466 NULL, HFILL }
12468 { &hf_ansi_a_cct_group_inclusive,
12469 { "Inclusive", "ansi_a_bsmap.cct_group.inclusive",
12470 FT_BOOLEAN, 8, TFS(&tfs_avail_yes_no), 0x01,
12471 NULL, HFILL }
12473 { &hf_ansi_a_cct_group_count,
12474 { "Count", "ansi_a_bsmap.cct_group.count",
12475 FT_UINT8, BASE_DEC, NULL, 0,
12476 NULL, HFILL }
12478 { &hf_ansi_a_cct_group_first_cic,
12479 { "First CIC", "ansi_a_bsmap.cct_group.first_cic",
12480 FT_UINT16, BASE_DEC, NULL, 0,
12481 NULL, HFILL }
12483 { &hf_ansi_a_cct_group_first_cic_pcm_multi,
12484 { "First CIC PCM Multiplexer", "ansi_a_bsmap.cct_group.first_cic.pcm_multi",
12485 FT_UINT16, BASE_DEC, NULL, 0xffe0,
12486 NULL, HFILL }
12488 { &hf_ansi_a_cct_group_first_cic_timeslot,
12489 { "First CIC Timeslot", "ansi_a_bsmap.cct_group.first_cic.timeslot",
12490 FT_UINT16, BASE_DEC, NULL, 0x001f,
12491 NULL, HFILL }
12493 { &hf_ansi_a_paca_timestamp_queuing_time,
12494 { "PACA Queuing Time", "ansi_a_bsmap.paca_timestamp.queuing_time",
12495 FT_UINT32, BASE_DEC, NULL, 0,
12496 NULL, HFILL }
12498 { &hf_ansi_a_paca_order_action_reqd,
12499 { "PACA Action Required", "ansi_a_bsmap.paca_order.action_reqd",
12500 FT_UINT8, BASE_DEC, VALS(ansi_a_paca_order_action_reqd_vals), 0x07,
12501 NULL, HFILL }
12503 { &hf_ansi_a_paca_reoi_pri,
12504 { "PACA Reorigination Indicator (PRI)", "ansi_a_bsmap.paca_reoi.pri",
12505 FT_BOOLEAN, 8, TFS(&tfs_reoi_pri_reorig_no_reorig), 0x01,
12506 NULL, HFILL }
12508 { &hf_ansi_a_a2p_bearer_sess_max_frames,
12509 { "Max Frames", "ansi_a_bsmap.a2p_bearer_sess.max_frames",
12510 FT_UINT8, BASE_DEC, NULL, 0x38,
12511 NULL, HFILL }
12513 { &hf_ansi_a_a2p_bearer_sess_ip_addr_type,
12514 { "Session IP Address Type", "ansi_a_bsmap.a2p_bearer_sess.ip_addr_type",
12515 FT_UINT8, BASE_DEC, VALS(ansi_a_ip_addr_type_vals), 0x06,
12516 NULL, HFILL }
12518 { &hf_ansi_a_a2p_bearer_sess_addr_flag,
12519 { "Session Address Flag", "ansi_a_bsmap.a2p_bearer_sess.addr_flag",
12520 FT_BOOLEAN, 8, TFS(&tfs_a2p_bearer_sess_addr_flag), 0x01,
12521 NULL, HFILL }
12523 { &hf_ansi_a_a2p_bearer_sess_ipv4_addr,
12524 { "Session IP Address", "ansi_a_bsmap.a2p_bearer_sess.ipv4_addr",
12525 FT_IPv4, BASE_NONE, NULL, 0,
12526 NULL, HFILL }
12528 { &hf_ansi_a_a2p_bearer_sess_ipv6_addr,
12529 { "Session IP Address", "ansi_a_bsmap.a2p_bearer_sess.ipv6_addr",
12530 FT_IPv6, BASE_NONE, NULL, 0,
12531 NULL, HFILL }
12533 { &hf_ansi_a_a2p_bearer_sess_udp_port,
12534 { "Session UDP Port", "ansi_a_bsmap.a2p_bearer_sess.udp_port",
12535 FT_UINT16, BASE_DEC, NULL, 0,
12536 NULL, HFILL }
12538 { &hf_ansi_a_a2p_bearer_form_num_formats,
12539 { "Number of Bearer Formats", "ansi_a_bsmap.a2p_bearer_form.num_formats",
12540 FT_UINT8, BASE_DEC, NULL, 0xfc,
12541 NULL, HFILL }
12543 { &hf_ansi_a_a2p_bearer_form_ip_addr_type,
12544 { "Bearer IP Address Type", "ansi_a_bsmap.a2p_bearer_form.ip_addr_type",
12545 FT_UINT8, BASE_DEC, VALS(ansi_a_ip_addr_type_vals), 0x03,
12546 NULL, HFILL }
12548 { &hf_ansi_a_a2p_bearer_form_format_len,
12549 { "Bearer Format Length", "ansi_a_bsmap.a2p_bearer_form.format.len",
12550 FT_UINT8, BASE_DEC, NULL, 0,
12551 NULL, HFILL }
12553 { &hf_ansi_a_a2p_bearer_form_format_tag_type,
12554 { "Bearer Format Tag Type", "ansi_a_bsmap.a2p_bearer_form.format.tag_type",
12555 FT_UINT8, BASE_DEC, VALS(ansi_a_a2p_bearer_form_format_tag_type_vals), 0x70,
12556 NULL, HFILL }
12558 { &hf_ansi_a_a2p_bearer_form_format_format_id,
12559 { "Bearer Format ID", "ansi_a_bsmap.a2p_bearer_form.format.format_id",
12560 FT_UINT8, BASE_DEC, VALS(ansi_a_a2p_bearer_form_format_format_id_vals), 0x0f,
12561 NULL, HFILL }
12563 { &hf_ansi_a_a2p_bearer_form_format_rtp_payload_type,
12564 { "RTP Payload Type", "ansi_a_bsmap.a2p_bearer_form.format.rtp_payload_type",
12565 FT_UINT8, BASE_DEC, NULL, 0xfe,
12566 NULL, HFILL }
12568 { &hf_ansi_a_a2p_bearer_form_format_bearer_addr_flag,
12569 { "Bearer Address Flag", "ansi_a_bsmap.a2p_bearer_form.format.bearer_addr_flag",
12570 FT_BOOLEAN, 8, TFS(&tfs_a2p_bearer_form_format_bearer_addr_flag), 0x01,
12571 NULL, HFILL }
12573 { &hf_ansi_a_a2p_bearer_form_format_ipv4_addr,
12574 { "Bearer IP Address", "ansi_a_bsmap.a2p_bearer_form.format.ipv4_addr",
12575 FT_IPv4, BASE_NONE, NULL, 0,
12576 NULL, HFILL }
12578 { &hf_ansi_a_a2p_bearer_form_format_ipv6_addr,
12579 { "Bearer IP Address", "ansi_a_bsmap.a2p_bearer_form.format.ipv6_addr",
12580 FT_IPv6, BASE_NONE, NULL, 0,
12581 NULL, HFILL }
12583 { &hf_ansi_a_a2p_bearer_form_format_udp_port,
12584 { "Bearer UDP Port", "ansi_a_bsmap.a2p_bearer_form.format.udp_port",
12585 FT_UINT16, BASE_DEC, NULL, 0,
12586 NULL, HFILL }
12588 { &hf_ansi_a_a2p_bearer_form_format_ext_len,
12589 { "Extension Length", "ansi_a_bsmap.a2p_bearer_form.format.ext_len",
12590 FT_UINT8, BASE_DEC, NULL, 0xf0,
12591 NULL, HFILL }
12593 { &hf_ansi_a_a2p_bearer_form_format_ext_id,
12594 { "Extension ID", "ansi_a_bsmap.a2p_bearer_form.format.ext_id",
12595 FT_UINT8, BASE_DEC, NULL, 0x0f,
12596 NULL, HFILL }
12598 { &hf_ansi_a_ms_des_freq_band_class,
12599 { "Band Class", "ansi_a_bsmap.ms_des_freq.band_class",
12600 FT_UINT16, BASE_DEC, VALS(ansi_a_band_class_vals), 0xf800,
12601 NULL, HFILL }
12603 { &hf_ansi_a_ms_des_freq_cdma_channel,
12604 { "CDMA Channel", "ansi_a_bsmap.ms_des_freq.cdma_channel",
12605 FT_UINT16, BASE_DEC, NULL, 0x07ff,
12606 NULL, HFILL }
12608 { &hf_ansi_a_plcm_id_plcm_type,
12609 { "PLCM_TYPE", "ansi_a_bsmap.plcm_id.plcm_type",
12610 FT_UINT8, BASE_DEC, NULL, 0xf0,
12611 NULL, HFILL }
12613 { &hf_ansi_a_bdtmf_trans_info_dtmf_off_len,
12614 { "DTMF Off Length", "ansi_a_bsmap.bdtmf_trans_info.dtmf_off_len",
12615 FT_UINT8, BASE_DEC, VALS(ansi_a_bdtmf_trans_info_dtmf_off_len_vals), 0x38,
12616 NULL, HFILL }
12618 { &hf_ansi_a_bdtmf_trans_info_dtmf_on_len,
12619 { "DTMF On Length", "ansi_a_bsmap.bdtmf_trans_info.dtmf_on_len",
12620 FT_UINT8, BASE_DEC, VALS(ansi_a_bdtmf_trans_info_dtmf_on_len_vals), 0x07,
12621 NULL, HFILL }
12623 { &hf_ansi_a_bdtmf_chars_num_chars,
12624 { "DTMF Number of Characters", "ansi_a_bsmap.bdtmf_chars.num_chars",
12625 FT_UINT8, BASE_DEC, NULL, 0,
12626 NULL, HFILL }
12628 { &hf_ansi_a_bdtmf_chars_digits,
12629 { "DTMF Digits", "ansi_a_bsmap.bdtmf_chars.digits",
12630 FT_STRING, BASE_NONE, NULL, 0,
12631 NULL, HFILL }
12633 { &hf_ansi_a_encryption_parameter_value,
12634 { "Encryption Parameter value", "ansi_a_bsmap.encryption_parameter_value",
12635 FT_BYTES, BASE_NONE, NULL, 0,
12636 NULL, HFILL }
12638 { &hf_ansi_a_layer3_info,
12639 { "Layer 3 Information", "ansi_a_bsmap.layer3_info",
12640 FT_BYTES, BASE_NONE, NULL, 0,
12641 NULL, HFILL }
12643 { &hf_ansi_a_manufacturer_software_info,
12644 { "Manufacturer/Carrier Software Information", "ansi_a_bsmap.manufacturer_software_info",
12645 FT_BYTES, BASE_NONE, NULL, 0,
12646 NULL, HFILL }
12648 { &hf_ansi_a_circuit_bitmap,
12649 { "Circuit Bitmap", "ansi_a_bsmap.circuit_bitmap",
12650 FT_BYTES, BASE_NONE, NULL, 0,
12651 NULL, HFILL }
12653 { &hf_ansi_a_extension_parameter_value,
12654 { "Extension Parameter value", "ansi_a_bsmap.extension_parameter_value",
12655 FT_BYTES, BASE_NONE, NULL, 0,
12656 NULL, HFILL }
12658 { &hf_ansi_a_msb_first_digit,
12659 { "MSB of first digit", "ansi_a_bsmap.msb_first_digit",
12660 FT_UINT8, BASE_HEX, NULL, 0,
12661 NULL, HFILL }
12663 { &hf_ansi_a_dcch_cc_incl,
12664 { "DCCH_CC_INCL (Channel configuration for the Dedicated Control Channel included indicator)", "ansi_a_bsmap.dcch_cc_incl",
12665 FT_UINT8, BASE_HEX, NULL, 0,
12666 NULL, HFILL }
12668 { &hf_ansi_a_for_sch_cc_incl,
12669 { "FOR_SCH_CC_INCL (Channel configuration for the Dedicated Control Channel included indicator)", "ansi_a_bsmap.for_sch_cc_incl",
12670 FT_UINT8, BASE_HEX, NULL, 0,
12671 NULL, HFILL }
12673 { &hf_ansi_a_rev_sch_cc_incl,
12674 { "REV_SCH_CC_INCL (Channel configuration for the Dedicated Control Channel included indicator)", "ansi_a_bsmap.rev_sch_cc_incl",
12675 FT_UINT8, BASE_HEX, NULL, 0,
12676 NULL, HFILL }
12678 { &hf_ansi_a_plcm42,
12679 { "PLCM_42", "ansi_a_bsmap.plcm42",
12680 FT_BOOLEAN, 56, NULL, UINT64_C(0x3FFFFFFFFFF),
12681 NULL, HFILL }
12685 static ei_register_info ei[] = {
12686 { &ei_ansi_a_extraneous_data,
12687 { "ansi_a.extraneous_data", PI_PROTOCOL, PI_NOTE,
12688 "Extraneous Data - try checking decoder variant preference or dissector bug/later version spec (report to wireshark.org)",
12689 EXPFILL }
12691 { &ei_ansi_a_short_data,
12692 { "ansi_a.short_data", PI_PROTOCOL, PI_NOTE,
12693 "Short Data (?) - try checking decoder variant preference or dissector bug/later version spec (report to wireshark.org)",
12694 EXPFILL }
12696 { &ei_ansi_a_missing_mand_elem,
12697 { "ansi_a.missing_mand_elem", PI_PROTOCOL, PI_WARN,
12698 "Missing Mandatory element, rest of dissection is suspect - try checking decoder variant preference or dissector bug/later version spec (report to wireshark.org)",
12699 EXPFILL }
12701 { &ei_ansi_a_unknown_format,
12702 { "ansi_a.unknown_format", PI_PROTOCOL, PI_WARN,
12703 "Format Unknown/Unsupported - try checking decoder variant preference or dissector bug/later version spec (report to wireshark.org)",
12704 EXPFILL }
12706 { &ei_ansi_a_no_tlv_elem_diss,
12707 { "ansi_a.no_tlv_elem_dissector", PI_PROTOCOL, PI_NOTE,
12708 "No TLV element dissector - try checking decoder variant preference or dissector bug/later version spec (report to wireshark.org)",
12709 EXPFILL }
12711 { &ei_ansi_a_no_tv_elem_diss,
12712 { "ansi_a.no_tv_elem_dissector", PI_PROTOCOL, PI_WARN /* because we don't know length */,
12713 "No TV element dissector, rest of dissection is suspect - try checking decoder variant preference or dissector bug/later version spec (report to wireshark.org)",
12714 EXPFILL }
12716 { &ei_ansi_a_no_lv_elem_diss,
12717 { "ansi_a.no_lv_elem_dissector", PI_PROTOCOL, PI_NOTE,
12718 "No LV element dissector - try checking decoder variant preference or dissector bug/later version spec (report to wireshark.org)",
12719 EXPFILL }
12721 { &ei_ansi_a_no_v_elem_diss,
12722 { "ansi_a.no_v_elem_dissector", PI_PROTOCOL, PI_WARN /* because we don't know length */,
12723 "No V element dissector, rest of dissection is suspect - try checking decoder variant preference or dissector bug/later version spec (report to wireshark.org)",
12724 EXPFILL }
12726 { &ei_ansi_a_miss_dtap_msg_diss,
12727 { "ansi_a.miss_dtap_msg_dissector", PI_PROTOCOL, PI_NOTE,
12728 "Missing DTAP message dissector - try checking decoder variant preference or dissector bug/later version spec (report to wireshark.org)",
12729 EXPFILL }
12731 { &ei_ansi_a_miss_bsmap_msg_diss,
12732 { "ansi_a.miss_bsmap_msg_dissector", PI_PROTOCOL, PI_NOTE,
12733 "Missing BSMAP message dissector - try checking decoder variant preference or dissector bug/later version spec (report to wireshark.org)",
12734 EXPFILL }
12736 { &ei_ansi_a_is2000_chan_id_pilot_pn,
12737 { "ansi_a.is2000_chan_id_pilot_pn", PI_PROTOCOL, PI_NOTE,
12738 "This parameter has a unique encoding. The most significant bit comes after the LSBs unlike typical IOS octet split values.",
12739 EXPFILL }
12741 { &ei_ansi_a_unknown_dtap_msg,
12742 { "ansi_a.unknown_dtap_msg", PI_PROTOCOL, PI_WARN,
12743 "DTAP Message Unknown/Unsupported - try checking decoder variant preference or dissector bug/later version spec (report to wireshark.org)",
12744 EXPFILL }
12746 { &ei_ansi_a_unknown_bsmap_msg,
12747 { "ansi_a.unknown_bsmap_msg", PI_PROTOCOL, PI_WARN,
12748 "BSMAP Message Unknown/Unsupported - try checking decoder variant preference or dissector bug/later version spec (report to wireshark.org)",
12749 EXPFILL }
12751 { &ei_ansi_a_undecoded,
12752 { "ansi_a.undecoded", PI_UNDECODED, PI_WARN,
12753 "Can't be bothered to do the rest of the decode",
12754 EXPFILL }
12758 expert_module_t *expert_a_bsmap;
12760 static const enum_val_t a_variant_options[] = {
12761 { "is-634-rev0", "IS-634 rev. 0", A_VARIANT_IS634 },
12762 { "tsb-80", "TSB-80", A_VARIANT_TSB80 },
12763 { "is-634-a", "IS-634-A", A_VARIANT_IS634A },
12764 { "ios-2.x", "IOS 2.x", A_VARIANT_IOS2 },
12765 { "ios-3.x", "IOS 3.x", A_VARIANT_IOS3 },
12766 { "ios-4.0.1", "IOS 4.0.1", A_VARIANT_IOS401 },
12767 { "ios-5.0.1", "IOS 5.0.1", A_VARIANT_IOS501 },
12768 { NULL, NULL, 0 }
12771 /* Setup protocol subtree array */
12772 #define MAX_NUM_DTAP_MSG MAX(ANSI_A_IOS401_DTAP_NUM_MSG, ANSI_A_IOS501_DTAP_NUM_MSG)
12773 #define MAX_NUM_BSMAP_MSG MAX(ANSI_A_IOS401_BSMAP_NUM_MSG, ANSI_A_IOS501_BSMAP_NUM_MSG)
12774 #define MAX_NUM_ELEM_1 MAX(MAX_IOS401_NUM_ELEM_1, MAX_IOS501_NUM_ELEM_1)
12775 #define NUM_INDIVIDUAL_ELEMS 24
12776 int *ett[NUM_INDIVIDUAL_ELEMS+MAX_NUM_DTAP_MSG+MAX_NUM_BSMAP_MSG+MAX_NUM_ELEM_1+NUM_FWD_MS_INFO_REC+NUM_REV_MS_INFO_REC];
12778 static stat_tap_table_ui dtap_stat_table = {
12779 REGISTER_TELEPHONY_GROUP_ANSI,
12780 "A-I/F DTAP Statistics",
12781 "ansi_a",
12782 "ansi_a,dtap",
12783 ansi_a_dtap_stat_init,
12784 ansi_a_dtap_stat_packet,
12785 ansi_a_stat_reset,
12786 NULL,
12787 NULL,
12788 array_length(dtap_stat_fields), dtap_stat_fields,
12789 0, NULL,
12790 NULL,
12794 static stat_tap_table_ui bsmap_stat_table = {
12795 REGISTER_TELEPHONY_GROUP_ANSI,
12796 "A-I/F BSMAP Statistics",
12797 "ansi_a",
12798 "ansi_a,bsmap",
12799 ansi_a_bsmap_stat_init,
12800 ansi_a_bsmap_stat_packet,
12801 ansi_a_stat_reset,
12802 NULL,
12803 NULL,
12804 array_length(bsmap_stat_fields), bsmap_stat_fields,
12805 0, NULL,
12806 NULL,
12810 ett[0] = &ett_bsmap;
12811 ett[1] = &ett_dtap;
12812 ett[2] = &ett_elems;
12813 ett[3] = &ett_elem;
12814 ett[4] = &ett_dtap_oct_1;
12815 ett[5] = &ett_cm_srvc_type;
12816 ett[6] = &ett_ansi_ms_info_rec_reserved;
12817 ett[7] = &ett_ansi_enc_info;
12818 ett[8] = &ett_cell_list;
12819 ett[9] = &ett_bearer_list;
12820 ett[10] = &ett_re_list;
12821 ett[11] = &ett_so_list;
12822 ett[12] = &ett_scm;
12823 ett[13] = &ett_adds_user_part;
12824 ett[14] = &ett_scr;
12825 ett[15] = &ett_scr_socr;
12826 ett[16] = &ett_cm2_band_class;
12827 ett[17] = &ett_vp_algs;
12828 ett[18] = &ett_chan_list;
12829 ett[19] = &ett_cic;
12830 ett[20] = &ett_is2000_mob_cap_fch_info;
12831 ett[21] = &ett_is2000_mob_cap_dcch_info;
12832 ett[22] = &ett_is2000_mob_cap_for_pdch_info;
12833 ett[23] = &ett_is2000_mob_cap_rev_pdch_info;
12835 last_offset = NUM_INDIVIDUAL_ELEMS;
12837 for (i=0; i < MAX_NUM_DTAP_MSG; i++, last_offset++)
12839 ett[last_offset] = &ett_dtap_msg[i];
12842 for (i=0; i < MAX_NUM_BSMAP_MSG; i++, last_offset++)
12844 ett[last_offset] = &ett_bsmap_msg[i];
12847 for (i=0; i < MAX_NUM_ELEM_1; i++, last_offset++)
12849 ett[last_offset] = &ett_ansi_elem_1[i];
12852 for (i=0; i < NUM_FWD_MS_INFO_REC; i++, last_offset++)
12854 ett[last_offset] = &ett_ansi_fwd_ms_info_rec[i];
12857 for (i=0; i < NUM_REV_MS_INFO_REC; i++, last_offset++)
12859 ett[last_offset] = &ett_ansi_rev_ms_info_rec[i];
12862 /* Register the protocol name and description */
12864 proto_a_bsmap =
12865 proto_register_protocol("ANSI A-I/F BSMAP", "ANSI BSMAP", "ansi_a_bsmap");
12866 proto_register_field_array(proto_a_bsmap, hf, array_length(hf));
12868 expert_a_bsmap =
12869 expert_register_protocol(proto_a_bsmap);
12870 expert_register_field_array(expert_a_bsmap, ei, array_length(ei));
12872 bsmap_handle = register_dissector("ansi_a_bsmap", dissect_bsmap, proto_a_bsmap);
12874 proto_a_dtap =
12875 proto_register_protocol("ANSI A-I/F DTAP", "ANSI DTAP", "ansi_a_dtap");
12877 dtap_handle = register_dissector("ansi_a_dtap", dissect_dtap, proto_a_dtap);
12878 sip_dtap_bsmap_handle = register_dissector("ansi_a_dtap_bsmap", dissect_sip_dtap_bsmap, proto_a_dtap);
12880 is637_dissector_table =
12881 register_dissector_table("ansi_a.sms", "IS-637-A (SMS)",
12882 proto_a_bsmap, FT_UINT8, BASE_DEC);
12884 is683_dissector_table =
12885 register_dissector_table("ansi_a.ota", "IS-683-A (OTA)",
12886 proto_a_bsmap, FT_UINT8, BASE_DEC);
12888 is801_dissector_table =
12889 register_dissector_table("ansi_a.pld", "IS-801 (PLD)",
12890 proto_a_bsmap, FT_UINT8, BASE_DEC);
12892 proto_register_subtree_array(ett, array_length(ett));
12894 ansi_a_tap = register_tap("ansi_a");
12897 * setup for preferences
12899 ansi_a_module = prefs_register_protocol(proto_a_bsmap, proto_reg_handoff_ansi_a);
12901 prefs_register_enum_preference(ansi_a_module,
12902 "global_variant",
12903 "Dissect PDU as",
12904 "(if other than the default of IOS 4.0.1)",
12905 &global_a_variant,
12906 a_variant_options,
12907 false);
12909 prefs_register_bool_preference(ansi_a_module,
12910 "top_display_mid_so",
12911 "Show mobile ID and service option in the INFO column",
12912 "Whether the mobile ID and service options are displayed in the INFO column",
12913 &global_a_info_display);
12915 register_stat_tap_table_ui(&dtap_stat_table);
12916 register_stat_tap_table_ui(&bsmap_stat_table);
12920 void
12921 proto_reg_handoff_ansi_a(void)
12923 static bool ansi_a_prefs_initialized = false;
12925 if (!ansi_a_prefs_initialized)
12927 dissector_add_uint("bsap.pdu_type", BSSAP_PDU_TYPE_BSMAP, bsmap_handle);
12928 dissector_add_uint("bsap.pdu_type", BSSAP_PDU_TYPE_DTAP, dtap_handle);
12929 dissector_add_string("media_type", "application/femtointerfacemsg", sip_dtap_bsmap_handle);
12930 dissector_add_string("media_type", "application/vnd.3gpp2.femtointerfacemsg", sip_dtap_bsmap_handle);
12932 ansi_a_prefs_initialized = true;
12935 switch (global_a_variant)
12937 case A_VARIANT_IOS501:
12938 ansi_a_bsmap_strings = ansi_a_ios501_bsmap_strings;
12939 ansi_a_dtap_strings = ansi_a_ios501_dtap_strings;
12940 ansi_a_elem_1_strings = ansi_a_ios501_elem_1_strings;
12941 ansi_a_elem_1_max = (elem_idx_t) MAX_IOS501_NUM_ELEM_1;
12942 break;
12944 default:
12945 ansi_a_bsmap_strings = ansi_a_ios401_bsmap_strings;
12946 ansi_a_dtap_strings = ansi_a_ios401_dtap_strings;
12947 ansi_a_elem_1_strings = ansi_a_ios401_elem_1_strings;
12948 ansi_a_elem_1_max = (elem_idx_t) MAX_IOS401_NUM_ELEM_1;
12949 break;
12954 * Editor modelines - https://www.wireshark.org/tools/modelines.html
12956 * Local variables:
12957 * c-basic-offset: 4
12958 * tab-width: 8
12959 * indent-tabs-mode: nil
12960 * End:
12962 * vi: set shiftwidth=4 tabstop=8 expandtab:
12963 * :indentSize=4:tabSize=8:noTabs=true: