aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-ansi_a.c
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2013-12-16 21:39:44 +0000
committerMichael Mann <mmann78@netscape.net>2013-12-16 21:39:44 +0000
commit54c272466f362a169421c9d8f7571c4c0459d117 (patch)
tree78c9fd6c3bc4dc44c9cd76a8efb830cf2c967595 /epan/dissectors/packet-ansi_a.c
parent09ce0cf43cb40361a5f97abb75fdda2f991a9270 (diff)
ANSI A-interface enhancements. Bug 9471 (https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9471)
From Michael Lum: 1. Allow mobile ID and service option to be shown in the INFO line for various messages. 2. proto_tree_add_text -> proto_tree_add_item conversions. From me: 1. Even more proto_tree_add_text -> proto_tree_add_item conversions. svn path=/trunk/; revision=54157
Diffstat (limited to 'epan/dissectors/packet-ansi_a.c')
-rw-r--r--epan/dissectors/packet-ansi_a.c10125
1 files changed, 5512 insertions, 4613 deletions
diff --git a/epan/dissectors/packet-ansi_a.c b/epan/dissectors/packet-ansi_a.c
index 379e90e0be..0a7861a457 100644
--- a/epan/dissectors/packet-ansi_a.c
+++ b/epan/dissectors/packet-ansi_a.c
@@ -3,8 +3,6 @@
*
* Copyright 2003, Michael Lum <mlum [AT] telostech.com>
* In association with Telos Technology Inc.
- * Copyright 2008, Michael Lum <michael.lum [AT] utstar.com>
- * In association with UTStarcom Inc.
* Copyright 2008, Michael Lum <michael.lum [AT] starsolutions.com>
* In association with Star Solutions
*
@@ -14,6 +12,12 @@
* 2000 Access Network Interfaces
* 3GPP2 A.S0001-1 TIA/EIA-2001
*
+ * 3GPP2 C.R1001-H v1.0 TSB-58-I (or J?)
+ *
+ * RFC 5188
+ * RTP Payload Format for the Enhanced Variable Rate Wideband Codec (EVRC-WB)
+ * and the Media Subtype Updates for EVRC-B Codec
+ *
* $Id$
*
* Wireshark - Network traffic analyzer
@@ -49,16 +53,16 @@
#include <epan/base64.h>
#include <epan/tfs.h>
+#include "packet-mtp3.h"
#include "packet-rtp.h"
#include "packet-bssap.h"
#include "packet-ansi_a.h"
-
/*
* IOS 4, probably most common
*/
static gint global_a_variant = A_VARIANT_IOS401;
-
+static gboolean global_a_info_display = TRUE;
/* PROTOTYPES/FORWARDS */
@@ -85,292 +89,348 @@ my_try_val_to_str_idx(guint32 val, const ext_value_string_t *vs, gint *dec_idx)
return(NULL);
}
+static const true_false_string tfs_l2_reset_dont_reset =
+{
+ "Reset Layer 2 Ack",
+ "Do not reset Layer 2 Ack"
+};
+
+static const true_false_string tfs_fpc_reset_dont_reset =
+{
+ "Reset counters",
+ "Do not reset counters"
+};
+
+static const true_false_string tfs_use_dont_use =
+{
+ "Use",
+ "Do not use"
+};
+
+static const true_false_string tfs_prio_incl_yes_no =
+{
+ "MSC should include priority in Assignment Request",
+ "MSC does not need to include priority in Assignment Request"
+};
+
+static const true_false_string tfs_alloc_yes_no =
+{
+ "Resources are allocated",
+ "Resources are not allocated"
+};
+
+static const true_false_string tfs_avail_yes_no =
+{
+ "Resources are available",
+ "Resources are not available"
+};
+
+static const true_false_string tfs_reoi_pri_reorig_no_reorig =
+{
+ "Reorigination",
+ "Not reorigination"
+};
+
const ext_value_string_t ansi_a_ios401_bsmap_strings[] =
{
- { 0x69, "Additional Service Notification", 0 },
- { 0x65, "ADDS Page", 1 },
- { 0x66, "ADDS Page Ack", 2 },
- { 0x67, "ADDS Transfer", 3 },
- { 0x68, "ADDS Transfer Ack", 4 },
- { 0x02, "Assignment Complete", 5 },
- { 0x03, "Assignment Failure", 6 },
- { 0x01, "Assignment Request", 7 },
- { 0x45, "Authentication Request", 8 },
- { 0x46, "Authentication Response", 9 },
- { 0x48, "Base Station Challenge", 10 },
- { 0x49, "Base Station Challenge Response", 11 },
- { 0x40, "Block", 12 },
- { 0x41, "Block Acknowledge", 13 },
- { 0x09, "BS Service Request", 14 },
- { 0x0A, "BS Service Response", 15 },
- { 0x20, "Clear Command", 16 },
- { 0x21, "Clear Complete", 17 },
- { 0x22, "Clear Request", 18 },
- { 0x57, "Complete Layer 3 Information", 19 },
- { 0x60, "Feature Notification", 20 },
- { 0x61, "Feature Notification Ack", 21 },
- { 0x13, "Handoff Command", 22 },
- { 0x15, "Handoff Commenced", 23 },
- { 0x14, "Handoff Complete", 24 },
- { 0x16, "Handoff Failure", 25 },
- { 0x17, "Handoff Performed", 26 },
- { 0x10, "Handoff Request", 27 },
- { 0x12, "Handoff Request Acknowledge", 28 },
- { 0x11, "Handoff Required", 29 },
- { 0x1A, "Handoff Required Reject", 30 },
- { 0x6C, "PACA Command", 31 },
- { 0x6D, "PACA Command Ack", 32 },
- { 0x6E, "PACA Update", 33 },
- { 0x6F, "PACA Update Ack", 34 },
- { 0x52, "Paging Request", 35 },
- { 0x53, "Privacy Mode Command", 36 },
- { 0x55, "Privacy Mode Complete", 37 },
+ { 0x69, "Additional Service Notification", 0 },
+ { 0x65, "ADDS Page", 1 },
+ { 0x66, "ADDS Page Ack", 2 },
+ { 0x67, "ADDS Transfer", 3 },
+ { 0x68, "ADDS Transfer Ack", 4 },
+ { 0x02, "Assignment Complete", 5 },
+ { 0x03, "Assignment Failure", 6 },
+ { 0x01, "Assignment Request", 7 },
+ { 0x45, "Authentication Request", 8 },
+ { 0x46, "Authentication Response", 9 },
+ { 0x48, "Base Station Challenge", 10 },
+ { 0x49, "Base Station Challenge Response", 11 },
+ { 0x40, "Block", 12 },
+ { 0x41, "Block Acknowledge", 13 },
+ { 0x09, "BS Service Request", 14 },
+ { 0x0A, "BS Service Response", 15 },
+ { 0x20, "Clear Command", 16 },
+ { 0x21, "Clear Complete", 17 },
+ { 0x22, "Clear Request", 18 },
+ { 0x57, "Complete Layer 3 Information", 19 },
+ { 0x60, "Feature Notification", 20 },
+ { 0x61, "Feature Notification Ack", 21 },
+ { 0x13, "Handoff Command", 22 },
+ { 0x15, "Handoff Commenced", 23 },
+ { 0x14, "Handoff Complete", 24 },
+ { 0x16, "Handoff Failure", 25 },
+ { 0x17, "Handoff Performed", 26 },
+ { 0x10, "Handoff Request", 27 },
+ { 0x12, "Handoff Request Acknowledge", 28 },
+ { 0x11, "Handoff Required", 29 },
+ { 0x1A, "Handoff Required Reject", 30 },
+ { 0x6C, "PACA Command", 31 },
+ { 0x6D, "PACA Command Ack", 32 },
+ { 0x6E, "PACA Update", 33 },
+ { 0x6F, "PACA Update Ack", 34 },
+ { 0x52, "Paging Request", 35 },
+ { 0x53, "Privacy Mode Command", 36 },
+ { 0x55, "Privacy Mode Complete", 37 },
{ 0x23, "Radio Measurements for Position Request", 38 },
{ 0x25, "Radio Measurements for Position Response", 39 },
- { 0x56, "Rejection", 40 },
- { 0x05, "Registration Request", 41 },
- { 0x30, "Reset", 42 },
- { 0x31, "Reset Acknowledge", 43 },
- { 0x34, "Reset Circuit", 44 },
- { 0x35, "Reset Circuit Acknowledge", 45 },
- { 0x47, "SSD Update Request", 46 },
- { 0x4A, "SSD Update Response", 47 },
- { 0x6A, "Status Request", 48 },
- { 0x6B, "Status Response", 49 },
- { 0x39, "Transcoder Control Acknowledge", 50 },
- { 0x38, "Transcoder Control Request", 51 },
- { 0x42, "Unblock", 52 },
- { 0x43, "Unblock Acknowledge", 53 },
- { 0x0B, "User Zone Reject", 54 },
- { 0x04, "User Zone Update", 55 },
+ { 0x56, "Rejection", 40 },
+ { 0x05, "Registration Request", 41 },
+ { 0x30, "Reset", 42 },
+ { 0x31, "Reset Acknowledge", 43 },
+ { 0x34, "Reset Circuit", 44 },
+ { 0x35, "Reset Circuit Acknowledge", 45 },
+ { 0x47, "SSD Update Request", 46 },
+ { 0x4A, "SSD Update Response", 47 },
+ { 0x6A, "Status Request", 48 },
+ { 0x6B, "Status Response", 49 },
+ { 0x39, "Transcoder Control Acknowledge", 50 },
+ { 0x38, "Transcoder Control Request", 51 },
+ { 0x42, "Unblock", 52 },
+ { 0x43, "Unblock Acknowledge", 53 },
+ { 0x0B, "User Zone Reject", 54 },
+ { 0x04, "User Zone Update", 55 },
{ 0, NULL, 0 }
};
const ext_value_string_t ansi_a_ios401_dtap_strings[] =
{
- { 0x62, "Additional Service Request", 0 },
- { 0x53, "ADDS Deliver", 1 },
- { 0x54, "ADDS Deliver Ack", 2 },
- { 0x26, "Alert With Information", 3 },
- { 0x45, "Authentication Request", 4 },
- { 0x46, "Authentication Response", 5 },
- { 0x48, "Base Station Challenge", 6 },
+ { 0x62, "Additional Service Request", 0 },
+ { 0x53, "ADDS Deliver", 1 },
+ { 0x54, "ADDS Deliver Ack", 2 },
+ { 0x26, "Alert With Information", 3 },
+ { 0x45, "Authentication Request", 4 },
+ { 0x46, "Authentication Response", 5 },
+ { 0x48, "Base Station Challenge", 6 },
{ 0x49, "Base Station Challenge Response", 7 },
- { 0x24, "CM Service Request", 8 },
+ { 0x24, "CM Service Request", 8 },
{ 0x25, "CM Service Request Continuation", 9 },
- { 0x07, "Connect", 10 },
- { 0x10, "Flash with Information", 11 },
- { 0x50, "Flash with Information Ack", 12 },
- { 0x02, "Location Updating Accept", 13 },
- { 0x04, "Location Updating Reject", 14 },
- { 0x08, "Location Updating Request", 15 },
- { 0x27, "Paging Response", 16 },
- { 0x2B, "Parameter Update Confirm", 17 },
- { 0x2C, "Parameter Update Request", 18 },
- { 0x56, "Rejection", 19 },
- { 0x03, "Progress", 20 },
- { 0x70, "Service Redirection", 21 },
- { 0x2E, "Service Release", 22 },
- { 0x2F, "Service Release Complete", 23 },
- { 0x47, "SSD Update Request", 24 },
- { 0x4A, "SSD Update Response", 25 },
- { 0x6A, "Status Request", 26 },
- { 0x6B, "Status Response", 27 },
- { 0x0B, "User Zone Reject", 28 },
- { 0x0C, "User Zone Update", 29 },
- { 0x0D, "User Zone Update Request", 30 },
+ { 0x07, "Connect", 10 },
+ { 0x10, "Flash with Information", 11 },
+ { 0x50, "Flash with Information Ack", 12 },
+ { 0x02, "Location Updating Accept", 13 },
+ { 0x04, "Location Updating Reject", 14 },
+ { 0x08, "Location Updating Request", 15 },
+ { 0x27, "Paging Response", 16 },
+ { 0x2B, "Parameter Update Confirm", 17 },
+ { 0x2C, "Parameter Update Request", 18 },
+ { 0x56, "Rejection", 19 },
+ { 0x03, "Progress", 20 },
+ { 0x70, "Service Redirection", 21 },
+ { 0x2E, "Service Release", 22 },
+ { 0x2F, "Service Release Complete", 23 },
+ { 0x47, "SSD Update Request", 24 },
+ { 0x4A, "SSD Update Response", 25 },
+ { 0x6A, "Status Request", 26 },
+ { 0x6B, "Status Response", 27 },
+ { 0x0B, "User Zone Reject", 28 },
+ { 0x0C, "User Zone Update", 29 },
+ { 0x0D, "User Zone Update Request", 30 },
+ { 0x33, "Send Burst DTMF", 31 }, /* IS-634.400A 6.1.3.1 */
+ { 0x34, "Send Burst DTMF Ack", 32 }, /* IS-634.400A 6.1.3.2 */
+ { 0x35, "Start DTMF", 33 }, /* IS-634.400A 6.1.3.3 */
+ { 0x36, "Start DTMF Ack", 34 }, /* IS-634.400A 6.1.3.4 */
+ { 0x31, "Stop DTMF", 35 }, /* IS-634.400A 6.1.3.5 */
+ { 0x32, "Stop DTMF Ack", 36 }, /* IS-634.400A 6.1.3.6 */
{ 0, NULL, 0 }
};
const ext_value_string_t ansi_a_ios401_elem_1_strings[] =
{
- { 0x20, "Access Network Identifiers", 0 },
- { 0x3D, "ADDS User Part", 1 },
- { 0x25, "AMPS Hard Handoff Parameters", 2 },
- { 0x30, "Anchor PDSN Address", 3 },
- { 0x7C, "Anchor P-P Address", 4 },
- { 0x41, "Authentication Challenge Parameter", 5 },
- { 0x28, "Authentication Confirmation Parameter (RANDC)", 6 },
- { 0x59, "Authentication Data", 7 },
- { 0x4A, "Authentication Event", 8 },
- { 0x40, "Authentication Parameter COUNT", 9 },
- { 0x42, "Authentication Response Parameter", 10 },
- { 0x37, "Band Class", 11 },
- { 0x5B, "Called Party ASCII Number", 12 },
- { 0x5E, "Called Party BCD Number", 13 },
- { 0x4B, "Calling Party ASCII Number", 14 },
- { 0x04, "Cause", 15 },
- { 0x08, "Cause Layer 3", 16 },
- { 0x0C, "CDMA Serving One Way Delay", 17 },
- { 0x05, "Cell Identifier", 18 },
- { 0x1A, "Cell Identifier List", 19 },
- { 0x23, "Channel Number", 20 },
- { 0x0B, "Channel Type", 21 },
- { 0x19, "Circuit Group", 22 },
- { 0x01, "Circuit Identity Code", 23 },
- { 0x24, "Circuit Identity Code Extension", 24 },
- { 0x12, "Classmark Information Type 2", 25 },
- { 0x29, "Downlink Radio Environment", 26 },
- { 0x2B, "Downlink Radio Environment List", 27 },
- { 0x0A, "Encryption Information", 28 },
- { 0x10, "Extended Handoff Direction Parameters", 29 },
- { 0x2C, "Geographic Location", 30 },
- { 0x5A, "Special Service Call Indicator", 31 },
- { 0x26, "Handoff Power Level", 32 },
- { 0x16, "Hard Handoff Parameters", 33 },
- { 0x2E, "Information Element Requested", 34 },
- { 0x09, "IS-2000 Channel Identity", 35 },
- { 0x27, "IS-2000 Channel Identity 3X", 36 },
- { 0x11, "IS-2000 Mobile Capabilities", 37 },
- { 0x0F, "IS-2000 Non-Negotiable Service Configuration Record", 38 },
- { 0x0E, "IS-2000 Service Configuration Record", 39 },
- { 0x62, "IS-95/IS-2000 Cause Value", 40 },
- { 0x67, "IS-2000 Redirection Record", 41 },
- { 0x22, "IS-95 Channel Identity", 42 },
- { 0x64, "IS-95 MS Measured Channel Identity", 43 },
- { 0x17, "Layer 3 Information", 44 },
- { 0x13, "Location Area Information", 45 },
- { 0x38, "Message Waiting Indication", 46 },
- { 0x0D, "Mobile Identity", 47 },
- { 0x15, "MS Information Records (Forward)", 48 },
- { 0xA0, "Origination Continuation Indicator", 49 },
- { 0x5F, "PACA Order", 50 },
- { 0x60, "PACA Reorigination Indicator", 51 },
- { 0x4E, "PACA Timestamp", 52 },
- { 0x70, "Packet Session Parameters", 53 },
- { 0x14, "PDSN IP Address", 54 },
- { 0xA2, "Power Down Indicator", 55 },
- { 0x06, "Priority", 56 },
- { 0x3B, "Protocol Revision", 57 },
- { 0x18, "Protocol Type", 58 },
- { 0x2D, "PSMM Count", 59 },
- { 0x07, "Quality of Service Parameters", 60 },
- { 0x1D, "Radio Environment and Resources", 61 },
- { 0x1F, "Registration Type", 62 },
- { 0x44, "Reject Cause", 63 },
- { 0x1B, "Response Request", 64 },
- { 0x68, "Return Cause", 65 },
- { 0x21, "RF Channel Identity", 66 },
- { 0x03, "Service Option", 67 },
- { 0x1E, "Service Option Connection Identifier (SOCI)", 68 },
- { 0x2A, "Service Option List", 69 },
- { 0x69, "Service Redirection Info", 70 },
- { 0x71, "Service Reference Identifier (SR_ID)", 71 },
- { 0x32, "SID", 72 },
- { 0x34, "Signal", 73 },
- { 0x35, "Slot Cycle Index", 74 },
- { 0x31, "Software Version", 75 },
- { 0x39, "Source RNC to Target RNC Transparent Container", 76 },
- { 0x14, "Source PDSN Address", 77 },
- { 0x33, "Tag", 78 },
- { 0x3A, "Target RNC to Source RNC Transparent Container", 79 },
- { 0x36, "Transcoder Mode", 80 }, /* XXX 0x1C in IOS 4.0.1 */
- { 0x02, "User Zone ID", 81 },
- { 0xA1, "Voice Privacy Request", 82 },
- { 0x15, "MS Information Records (Reverse)", 88 },
+ { 0x20, "Access Network Identifiers", 0 },
+ { 0x3D, "ADDS User Part", 1 },
+ { 0x25, "AMPS Hard Handoff Parameters", 2 },
+ { 0x30, "Anchor PDSN Address", 3 },
+ { 0x7C, "Anchor P-P Address", 4 },
+ { 0x41, "Authentication Challenge Parameter", 5 },
+ { 0x28, "Authentication Confirmation Parameter (RANDC)", 6 },
+ { 0x59, "Authentication Data", 7 },
+ { 0x4A, "Authentication Event", 8 },
+ { 0x40, "Authentication Parameter COUNT", 9 },
+ { 0x42, "Authentication Response Parameter", 10 },
+ { 0x37, "Band Class", 11 },
+ { 0x5B, "Called Party ASCII Number", 12 },
+ { 0x5E, "Called Party BCD Number", 13 },
+ { 0x4B, "Calling Party ASCII Number", 14 },
+ { 0x04, "Cause", 15 },
+ { 0x08, "Cause Layer 3", 16 },
+ { 0x0C, "CDMA Serving One Way Delay", 17 },
+ { 0x05, "Cell Identifier", 18 },
+ { 0x1A, "Cell Identifier List", 19 },
+ { 0x23, "Channel Number", 20 },
+ { 0x0B, "Channel Type", 21 },
+ { 0x19, "Circuit Group", 22 },
+ { 0x01, "Circuit Identity Code", 23 },
+ { 0x24, "Circuit Identity Code Extension", 24 },
+ { 0x12, "Classmark Information Type 2", 25 },
+ { 0x29, "Downlink Radio Environment", 26 },
+ { 0x2B, "Downlink Radio Environment List", 27 },
+ { 0x0A, "Encryption Information", 28 },
+ { 0x10, "Extended Handoff Direction Parameters", 29 },
+ { 0x2C, "Geographic Location", 30 },
+ { 0x5A, "Special Service Call Indicator", 31 },
+ { 0x26, "Handoff Power Level", 32 },
+ { 0x16, "Hard Handoff Parameters", 33 },
+ { 0x2E, "Information Element Requested", 34 },
+ { 0x09, "IS-2000 Channel Identity", 35 },
+ { 0x27, "IS-2000 Channel Identity 3X", 36 },
+ { 0x11, "IS-2000 Mobile Capabilities", 37 },
+ { 0x0F, "IS-2000 Non-Negotiable Service Configuration Record", 38 },
+ { 0x0E, "IS-2000 Service Configuration Record", 39 },
+ { 0x62, "IS-95/IS-2000 Cause Value", 40 },
+ { 0x67, "IS-2000 Redirection Record", 41 },
+ { 0x22, "IS-95 Channel Identity", 42 },
+ { 0x64, "IS-95 MS Measured Channel Identity", 43 },
+ { 0x17, "Layer 3 Information", 44 },
+ { 0x13, "Location Area Information", 45 },
+ { 0x38, "Message Waiting Indication", 46 },
+ { 0x0D, "Mobile Identity", 47 },
+ { 0x15, "MS Information Records (Forward)", 48 },
+ { 0xA0, "Origination Continuation Indicator", 49 },
+ { 0x5F, "PACA Order", 50 },
+ { 0x60, "PACA Reorigination Indicator", 51 },
+ { 0x4E, "PACA Timestamp", 52 },
+ { 0x70, "Packet Session Parameters", 53 },
+ { 0x14, "PDSN IP Address", 54 },
+ { 0xA2, "Power Down Indicator", 55 },
+ { 0x06, "Priority", 56 },
+ { 0x3B, "Protocol Revision", 57 },
+ { 0x18, "Protocol Type", 58 },
+ { 0x2D, "PSMM Count", 59 },
+ { 0x07, "Quality of Service Parameters", 60 },
+ { 0x1D, "Radio Environment and Resources", 61 },
+ { 0x1F, "Registration Type", 62 },
+ { 0x44, "Reject Cause", 63 },
+ { 0x1B, "Response Request", 64 },
+ { 0x68, "Return Cause", 65 },
+ { 0x21, "RF Channel Identity", 66 },
+ { 0x03, "Service Option", 67 },
+ { 0x1E, "Service Option Connection Identifier (SOCI)", 68 },
+ { 0x2A, "Service Option List", 69 },
+ { 0x69, "Service Redirection Info", 70 },
+ { 0x71, "Service Reference Identifier (SR_ID)", 71 },
+ { 0x32, "SID", 72 },
+ { 0x34, "Signal", 73 },
+ { 0x35, "Slot Cycle Index", 74 },
+ { 0x31, "Software Version", 75 },
+ { 0x39, "Source RNC to Target RNC Transparent Container", 76 },
+ { 0x14, "Source PDSN Address", 77 },
+ { 0x33, "Tag", 78 },
+ { 0x3A, "Target RNC to Source RNC Transparent Container", 79 },
+ { 0x36, "Transcoder Mode", 80 }, /* XXX 0x1C in IOS 4.0.1 */
+ { 0x02, "User Zone ID", 81 },
+ { 0xA1, "Voice Privacy Request", 82 },
+ { 0x15, "MS Information Records (Reverse)", 83 },
+ { 0x2C, "Burst DTMF Transmission Information", 84 }, /* duplicate but never used because this elem is always MANDATORY in DTAP */
+ { 0x2D, "DTMF Characters", 85 }, /* duplicate but never used because this elem is always MANDATORY in DTAP */
{ 0, NULL, 0 }
};
const ext_value_string_t ansi_a_ios501_bsmap_strings[] =
{
- { 0x69, "Additional Service Notification", 0 },
- { 0x65, "ADDS Page", 1 },
- { 0x66, "ADDS Page Ack", 2 },
- { 0x67, "ADDS Transfer", 3 },
- { 0x68, "ADDS Transfer Ack", 4 },
- { 0x02, "Assignment Complete", 5 },
- { 0x03, "Assignment Failure", 6 },
- { 0x01, "Assignment Request", 7 },
- { 0x45, "Authentication Request", 8 },
- { 0x46, "Authentication Response", 9 },
- { 0x48, "Base Station Challenge", 10 },
- { 0x49, "Base Station Challenge Response", 11 },
- { 0x40, "Block", 12 },
- { 0x41, "Block Acknowledge", 13 },
- { 0x09, "BS Service Request", 14 },
- { 0x0A, "BS Service Response", 15 },
- { 0x20, "Clear Command", 16 },
- { 0x21, "Clear Complete", 17 },
- { 0x22, "Clear Request", 18 },
- { 0x57, "Complete Layer 3 Information", 19 },
- { 0x60, "Feature Notification", 20 },
- { 0x61, "Feature Notification Ack", 21 },
- { 0x13, "Handoff Command", 22 },
- { 0x15, "Handoff Commenced", 23 },
- { 0x14, "Handoff Complete", 24 },
- { 0x16, "Handoff Failure", 25 },
- { 0x17, "Handoff Performed", 26 },
- { 0x10, "Handoff Request", 27 },
- { 0x12, "Handoff Request Acknowledge", 28 },
- { 0x11, "Handoff Required", 29 },
- { 0x1A, "Handoff Required Reject", 30 },
- { 0x6C, "PACA Command", 31 },
- { 0x6D, "PACA Command Ack", 32 },
- { 0x6E, "PACA Update", 33 },
- { 0x6F, "PACA Update Ack", 34 },
- { 0x52, "Paging Request", 35 },
- { 0x53, "Privacy Mode Command", 36 },
- { 0x55, "Privacy Mode Complete", 37 },
+ { 0x69, "Additional Service Notification", 0 },
+ { 0x65, "ADDS Page", 1 },
+ { 0x66, "ADDS Page Ack", 2 },
+ { 0x67, "ADDS Transfer", 3 },
+ { 0x68, "ADDS Transfer Ack", 4 },
+ { 0x02, "Assignment Complete", 5 },
+ { 0x03, "Assignment Failure", 6 },
+ { 0x01, "Assignment Request", 7 },
+ { 0x45, "Authentication Request", 8 },
+ { 0x46, "Authentication Response", 9 },
+ { 0x48, "Base Station Challenge", 10 },
+ { 0x49, "Base Station Challenge Response", 11 },
+ { 0x40, "Block", 12 },
+ { 0x41, "Block Acknowledge", 13 },
+ { 0x09, "BS Service Request", 14 },
+ { 0x0A, "BS Service Response", 15 },
+ { 0x20, "Clear Command", 16 },
+ { 0x21, "Clear Complete", 17 },
+ { 0x22, "Clear Request", 18 },
+ { 0x57, "Complete Layer 3 Information", 19 },
+ { 0x60, "Feature Notification", 20 },
+ { 0x61, "Feature Notification Ack", 21 },
+ { 0x13, "Handoff Command", 22 },
+ { 0x15, "Handoff Commenced", 23 },
+ { 0x14, "Handoff Complete", 24 },
+ { 0x16, "Handoff Failure", 25 },
+ { 0x17, "Handoff Performed", 26 },
+ { 0x10, "Handoff Request", 27 },
+ { 0x12, "Handoff Request Acknowledge", 28 },
+ { 0x11, "Handoff Required", 29 },
+ { 0x1A, "Handoff Required Reject", 30 },
+ { 0x6C, "PACA Command", 31 },
+ { 0x6D, "PACA Command Ack", 32 },
+ { 0x6E, "PACA Update", 33 },
+ { 0x6F, "PACA Update Ack", 34 },
+ { 0x52, "Paging Request", 35 },
+ { 0x53, "Privacy Mode Command", 36 },
+ { 0x55, "Privacy Mode Complete", 37 },
{ 0x23, "Radio Measurements for Position Request", 38 },
{ 0x25, "Radio Measurements for Position Response", 39 },
- { 0x56, "Rejection", 40 },
- { 0x05, "Registration Request", 41 },
- { 0x30, "Reset", 42 },
- { 0x31, "Reset Acknowledge", 43 },
- { 0x34, "Reset Circuit", 44 },
- { 0x35, "Reset Circuit Acknowledge", 45 },
- { 0x47, "SSD Update Request", 46 },
- { 0x4A, "SSD Update Response", 47 },
- { 0x6A, "Status Request", 48 },
- { 0x6B, "Status Response", 49 },
- { 0x39, "Transcoder Control Acknowledge", 50 },
- { 0x38, "Transcoder Control Request", 51 },
- { 0x42, "Unblock", 52 },
- { 0x43, "Unblock Acknowledge", 53 },
- { 0x0B, "User Zone Reject", 54 },
- { 0x04, "User Zone Update", 55 },
- { 0x58, "Bearer Update Request", 56 },
- { 0x59, "Bearer Update Response", 58 },
- { 0x5A, "Bearer Update Required", 57 },
+ { 0x56, "Rejection", 40 },
+ { 0x05, "Registration Request", 41 },
+ { 0x30, "Reset", 42 },
+ { 0x31, "Reset Acknowledge", 43 },
+ { 0x34, "Reset Circuit", 44 },
+ { 0x35, "Reset Circuit Acknowledge", 45 },
+ { 0x47, "SSD Update Request", 46 },
+ { 0x4A, "SSD Update Response", 47 },
+ { 0x6A, "Status Request", 48 },
+ { 0x6B, "Status Response", 49 },
+ { 0x39, "Transcoder Control Acknowledge", 50 },
+ { 0x38, "Transcoder Control Request", 51 },
+ { 0x42, "Unblock", 52 },
+ { 0x43, "Unblock Acknowledge", 53 },
+ { 0x0B, "User Zone Reject", 54 },
+ { 0x04, "User Zone Update", 55 },
+ { 0x58, "Bearer Update Request", 56 },
+ { 0x5A, "Bearer Update Required", 57 },
+ { 0x59, "Bearer Update Response", 58 },
{ 0x71, "Mobile Station Registered Notification", 59 },
- { 0x07, "BS Authentication Request", 60 },
- { 0x08, "BS Authentication Request Ack", 61 },
+ { 0x07, "BS Authentication Request", 60 },
+ { 0x08, "BS Authentication Request Ack", 61 },
{ 0, NULL, 0 }
};
const ext_value_string_t ansi_a_ios501_dtap_strings[] =
{
- { 0x62, "Additional Service Request", 0 },
- { 0x53, "ADDS Deliver", 1 },
- { 0x54, "ADDS Deliver Ack", 2 },
- { 0x26, "Alert With Information", 3 },
- { 0x45, "Authentication Request", 4 },
- { 0x46, "Authentication Response", 5 },
- { 0x48, "Base Station Challenge", 6 },
- { 0x49, "Base Station Challenge Response", 7 },
- { 0x24, "CM Service Request", 8 },
- { 0x25, "CM Service Request Continuation", 9 },
- { 0x07, "Connect", 10 },
- { 0x10, "Flash with Information", 11 },
- { 0x50, "Flash with Information Ack", 12 },
- { 0x02, "Location Updating Accept", 13 },
- { 0x04, "Location Updating Reject", 14 },
- { 0x08, "Location Updating Request", 15 },
- { 0x27, "Paging Response", 16 },
- { 0x2B, "Parameter Update Confirm", 17 },
- { 0x2C, "Parameter Update Request", 18 },
- { 0x56, "Rejection", 19 },
- { 0x03, "Progress", 20 },
- { 0x70, "Service Redirection", 21 },
- { 0x2E, "Service Release", 22 },
- { 0x2F, "Service Release Complete", 23 },
- { 0x47, "SSD Update Request", 24 },
- { 0x4A, "SSD Update Response", 25 },
- { 0x6A, "Status Request", 26 },
- { 0x6B, "Status Response", 27 },
- { 0x0B, "User Zone Reject", 28 },
- { 0x0C, "User Zone Update", 29 },
- { 0x0D, "User Zone Update Request", 30 },
+ { 0x62, "Additional Service Request", 0 },
+ { 0x53, "ADDS Deliver", 1 },
+ { 0x54, "ADDS Deliver Ack", 2 },
+ { 0x26, "Alert With Information", 3 },
+ { 0x45, "Authentication Request", 4 },
+ { 0x46, "Authentication Response", 5 },
+ { 0x48, "Base Station Challenge", 6 },
+ { 0x49, "Base Station Challenge Response", 7 },
+ { 0x24, "CM Service Request", 8 },
+ { 0x25, "CM Service Request Continuation", 9 },
+ { 0x07, "Connect", 10 },
+ { 0x10, "Flash with Information", 11 },
+ { 0x50, "Flash with Information Ack", 12 },
+ { 0x02, "Location Updating Accept", 13 },
+ { 0x04, "Location Updating Reject", 14 },
+ { 0x08, "Location Updating Request", 15 },
+ { 0x27, "Paging Response", 16 },
+ { 0x2B, "Parameter Update Confirm", 17 },
+ { 0x2C, "Parameter Update Request", 18 },
+ { 0x56, "Rejection", 19 },
+ { 0x03, "Progress", 20 },
+ { 0x70, "Service Redirection", 21 },
+ { 0x2E, "Service Release", 22 },
+ { 0x2F, "Service Release Complete", 23 },
+ { 0x47, "SSD Update Request", 24 },
+ { 0x4A, "SSD Update Response", 25 },
+ { 0x6A, "Status Request", 26 },
+ { 0x6B, "Status Response", 27 },
+ { 0x0B, "User Zone Reject", 28 },
+ { 0x0C, "User Zone Update", 29 },
+ { 0x0D, "User Zone Update Request", 30 },
+ { 0x33, "Send Burst DTMF", 31 }, /* IS-634.400A 6.1.3.1 */
+ { 0x34, "Send Burst DTMF Ack", 32 }, /* IS-634.400A 6.1.3.2 */
+ { 0x35, "Start DTMF", 33 }, /* IS-634.400A 6.1.3.3 */
+ { 0x36, "Start DTMF Ack", 34 }, /* IS-634.400A 6.1.3.4 */
+ { 0x31, "Stop DTMF", 35 }, /* IS-634.400A 6.1.3.5 */
+ { 0x32, "Stop DTMF Ack", 36 }, /* IS-634.400A 6.1.3.6 */
{ 0, NULL, 0 }
};
@@ -381,95 +441,97 @@ const ext_value_string_t ansi_a_ios501_dtap_strings[] =
*/
const ext_value_string_t ansi_a_ios501_elem_1_strings[] =
{
- { 0x20, "Access Network Identifiers", 0 },
- { 0x3D, "ADDS User Part", 1 },
- { 0x25, "AMPS Hard Handoff Parameters", 2 },
- { 0x30, "Anchor PDSN Address", 3 },
- { 0x7C, "Anchor P-P Address", 4 },
- { 0x41, "Authentication Challenge Parameter", 5 },
- { 0x28, "Authentication Confirmation Parameter (RANDC)", 6 },
- { 0x59, "Authentication Data", 7 },
- { 0x4A, "Authentication Event", 8 },
- { 0x40, "Authentication Parameter COUNT", 9 },
- { 0x42, "Authentication Response Parameter", 10 },
- { 0x37, "Band Class", 11 },
- { 0x5B, "Called Party ASCII Number", 12 },
- { 0x5E, "Called Party BCD Number", 13 },
- { 0x4B, "Calling Party ASCII Number", 14 },
- { 0x04, "Cause", 15 },
- { 0x08, "Cause Layer 3", 16 },
- { 0x0C, "CDMA Serving One Way Delay", 17 },
- { 0x05, "Cell Identifier", 18 },
- { 0x1A, "Cell Identifier List", 19 },
- { 0x23, "Channel Number", 20 },
- { 0x0B, "Channel Type", 21 },
- { 0x19, "Circuit Group", 22 },
- { 0x01, "Circuit Identity Code", 23 },
- { 0x24, "Circuit Identity Code Extension", 24 },
- { 0x12, "Classmark Information Type 2", 25 },
- { 0x29, "Downlink Radio Environment", 26 },
- { 0x2B, "Downlink Radio Environment List", 27 },
- { 0x0A, "Encryption Information", 28 },
- { 0x10, "Extended Handoff Direction Parameters", 29 },
- { 0x2C, "Geographic Location", 30 },
- { 0x5A, "Special Service Call Indicator", 31 },
- { 0x26, "Handoff Power Level", 32 },
- { 0x16, "Hard Handoff Parameters", 33 },
- { 0x2E, "Information Element Requested", 34 },
- { 0x09, "IS-2000 Channel Identity", 35 },
- { 0x27, "IS-2000 Channel Identity 3X", 36 },
- { 0x11, "IS-2000 Mobile Capabilities", 37 },
- { 0x0F, "IS-2000 Non-Negotiable Service Configuration Record", 38 },
- { 0x0E, "IS-2000 Service Configuration Record", 39 },
- { 0x62, "IS-95/IS-2000 Cause Value", 40 },
- { 0x67, "IS-2000 Redirection Record", 41 },
- { 0x22, "IS-95 Channel Identity", 42 },
- { 0x64, "IS-95 MS Measured Channel Identity", 43 },
- { 0x17, "Layer 3 Information", 44 },
- { 0x13, "Location Area Information", 45 },
- { 0x38, "Message Waiting Indication", 46 },
- { 0x0D, "Mobile Identity", 47 },
- { 0x15, "MS Information Records (Forward)", 48 },
- { 0xA0, "Origination Continuation Indicator", 49 },
- { 0x5F, "PACA Order", 50 },
- { 0x60, "PACA Reorigination Indicator", 51 },
- { 0x4E, "PACA Timestamp", 52 },
- { 0x70, "Packet Session Parameters", 53 },
- { 0x14, "PDSN IP Address", 54 },
- { 0xA2, "Power Down Indicator", 55 },
- { 0x06, "Priority", 56 },
- { 0x3B, "Protocol Revision", 57 },
- { 0x18, "Protocol Type", 58 },
- { 0x2D, "PSMM Count", 59 },
- { 0x07, "Quality of Service Parameters", 60 },
- { 0x1D, "Radio Environment and Resources", 61 },
- { 0x1F, "Registration Type", 62 },
- { 0x44, "Reject Cause", 63 },
- { 0x1B, "Response Request", 64 },
- { 0x68, "Return Cause", 65 },
- { 0x21, "RF Channel Identity", 66 },
- { 0x03, "Service Option", 67 },
- { 0x1E, "Service Option Connection Identifier (SOCI)", 68 },
- { 0x2A, "Service Option List", 69 },
- { 0x69, "Service Redirection Info", 70 },
- { 0x71, "Service Reference Identifier (SR_ID)", 71 },
- { 0x32, "SID", 72 },
- { 0x34, "Signal", 73 },
- { 0x35, "Slot Cycle Index", 74 },
- { 0x31, "Software Version", 75 },
- { 0x39, "Source RNC to Target RNC Transparent Container", 76 },
- { 0x14, "Source PDSN Address", 77 },
- { 0x33, "Tag", 78 },
- { 0x3A, "Target RNC to Source RNC Transparent Container", 79 },
- { 0x36, "Transcoder Mode", 80 }, /* XXX 0x1C in IOS 4.0.1 */
- { 0x02, "User Zone ID", 81 },
- { 0xA1, "Voice Privacy Request", 82 },
- { 0x45, "A2p Bearer Session-Level Parameters", 83 },
- { 0x46, "A2p Bearer Format-Specific Parameters", 84 },
- { 0x73, "MS Designated Frequency", 85 },
- { 0x7D, "Mobile Subscription Information", 86 },
- { 0x72, "Public Long Code Mask Identification", 87 },
- { 0x15, "MS Information Records (Reverse)", 88 },
+ { 0x20, "Access Network Identifiers", 0 },
+ { 0x3D, "ADDS User Part", 1 },
+ { 0x25, "AMPS Hard Handoff Parameters", 2 },
+ { 0x30, "Anchor PDSN Address", 3 },
+ { 0x7C, "Anchor P-P Address", 4 },
+ { 0x41, "Authentication Challenge Parameter", 5 },
+ { 0x28, "Authentication Confirmation Parameter (RANDC)", 6 },
+ { 0x59, "Authentication Data", 7 },
+ { 0x4A, "Authentication Event", 8 },
+ { 0x40, "Authentication Parameter COUNT", 9 },
+ { 0x42, "Authentication Response Parameter", 10 },
+ { 0x37, "Band Class", 11 },
+ { 0x5B, "Called Party ASCII Number", 12 },
+ { 0x5E, "Called Party BCD Number", 13 },
+ { 0x4B, "Calling Party ASCII Number", 14 },
+ { 0x04, "Cause", 15 },
+ { 0x08, "Cause Layer 3", 16 },
+ { 0x0C, "CDMA Serving One Way Delay", 17 },
+ { 0x05, "Cell Identifier", 18 },
+ { 0x1A, "Cell Identifier List", 19 },
+ { 0x23, "Channel Number", 20 },
+ { 0x0B, "Channel Type", 21 },
+ { 0x19, "Circuit Group", 22 },
+ { 0x01, "Circuit Identity Code", 23 },
+ { 0x24, "Circuit Identity Code Extension", 24 },
+ { 0x12, "Classmark Information Type 2", 25 },
+ { 0x29, "Downlink Radio Environment", 26 },
+ { 0x2B, "Downlink Radio Environment List", 27 },
+ { 0x0A, "Encryption Information", 28 },
+ { 0x10, "Extended Handoff Direction Parameters", 29 },
+ { 0x2C, "Geographic Location", 30 },
+ { 0x5A, "Special Service Call Indicator", 31 },
+ { 0x26, "Handoff Power Level", 32 },
+ { 0x16, "Hard Handoff Parameters", 33 },
+ { 0x2E, "Information Element Requested", 34 },
+ { 0x09, "IS-2000 Channel Identity", 35 },
+ { 0x27, "IS-2000 Channel Identity 3X", 36 },
+ { 0x11, "IS-2000 Mobile Capabilities", 37 },
+ { 0x0F, "IS-2000 Non-Negotiable Service Configuration Record", 38 },
+ { 0x0E, "IS-2000 Service Configuration Record", 39 },
+ { 0x62, "IS-95/IS-2000 Cause Value", 40 },
+ { 0x67, "IS-2000 Redirection Record", 41 },
+ { 0x22, "IS-95 Channel Identity", 42 },
+ { 0x64, "IS-95 MS Measured Channel Identity", 43 },
+ { 0x17, "Layer 3 Information", 44 },
+ { 0x13, "Location Area Information", 45 },
+ { 0x38, "Message Waiting Indication", 46 },
+ { 0x0D, "Mobile Identity", 47 },
+ { 0x15, "MS Information Records (Forward)", 48 },
+ { 0xA0, "Origination Continuation Indicator", 49 },
+ { 0x5F, "PACA Order", 50 },
+ { 0x60, "PACA Reorigination Indicator", 51 },
+ { 0x4E, "PACA Timestamp", 52 },
+ { 0x70, "Packet Session Parameters", 53 },
+ { 0x14, "PDSN IP Address", 54 },
+ { 0xA2, "Power Down Indicator", 55 },
+ { 0x06, "Priority", 56 },
+ { 0x3B, "Protocol Revision", 57 },
+ { 0x18, "Protocol Type", 58 },
+ { 0x2D, "PSMM Count", 59 },
+ { 0x07, "Quality of Service Parameters", 60 },
+ { 0x1D, "Radio Environment and Resources", 61 },
+ { 0x1F, "Registration Type", 62 },
+ { 0x44, "Reject Cause", 63 },
+ { 0x1B, "Response Request", 64 },
+ { 0x68, "Return Cause", 65 },
+ { 0x21, "RF Channel Identity", 66 },
+ { 0x03, "Service Option", 67 },
+ { 0x1E, "Service Option Connection Identifier (SOCI)", 68 },
+ { 0x2A, "Service Option List", 69 },
+ { 0x69, "Service Redirection Info", 70 },
+ { 0x71, "Service Reference Identifier (SR_ID)", 71 },
+ { 0x32, "SID", 72 },
+ { 0x34, "Signal", 73 },
+ { 0x35, "Slot Cycle Index", 74 },
+ { 0x31, "Software Version", 75 },
+ { 0x39, "Source RNC to Target RNC Transparent Container", 76 },
+ { 0x14, "Source PDSN Address", 77 },
+ { 0x33, "Tag", 78 },
+ { 0x3A, "Target RNC to Source RNC Transparent Container", 79 },
+ { 0x36, "Transcoder Mode", 80 }, /* XXX 0x1C in IOS 4.0.1 */
+ { 0x02, "User Zone ID", 81 },
+ { 0xA1, "Voice Privacy Request", 82 },
+ { 0x15, "MS Information Records (Reverse)", 83 },
+ { 0x2C, "Burst DTMF Transmission Information", 84 }, /* duplicate but never used because this elem is always MANDATORY in DTAP */
+ { 0x2D, "DTMF Characters", 85 }, /* duplicate but never used because this elem is always MANDATORY in DTAP */
+ { 0x45, "A2p Bearer Session-Level Parameters", 86 },
+ { 0x46, "A2p Bearer Format-Specific Parameters", 87 },
+ { 0x73, "MS Designated Frequency", 88 },
+ { 0x7D, "Mobile Subscription Information", 89 },
+ { 0x72, "Public Long Code Mask Identification", 90 },
{ 0, NULL, 0 }
};
@@ -498,7 +560,8 @@ const ext_value_string_t ansi_a_ios501_elem_1_strings[] =
#define ANSI_FWD_MS_INFO_REC_EMC_EDISPLAY 0x16
#define ANSI_FWD_MS_INFO_REC_ERTI 0xfe
-static const value_string ansi_fwd_ms_info_rec_str[] = {
+static const value_string ansi_fwd_ms_info_rec_str[] =
+{
{ ANSI_FWD_MS_INFO_REC_DISPLAY, "Display" },
{ ANSI_FWD_MS_INFO_REC_CLD_PN, "Called Party Number" },
{ ANSI_FWD_MS_INFO_REC_CLG_PN, "Calling Party Number" },
@@ -567,7 +630,8 @@ static gint ett_ansi_fwd_ms_info_rec[NUM_FWD_MS_INFO_REC];
#define ANSI_REV_MS_INFO_REC_SYNC_ID 0x29
#define ANSI_REV_MS_INFO_REC_ERTI 0xfe
-static const value_string ansi_rev_ms_info_rec_str[] = {
+static const value_string ansi_rev_ms_info_rec_str[] =
+{
{ ANSI_REV_MS_INFO_REC_KEYPAD_FAC, "Keypad Facility" },
{ ANSI_REV_MS_INFO_REC_CLD_PN, "Called Party Number" },
{ ANSI_REV_MS_INFO_REC_CLG_PN, "Calling Party Number" },
@@ -614,66 +678,252 @@ static gint ett_ansi_rev_ms_info_rec[NUM_REV_MS_INFO_REC];
/*
* C.S0057 Table 1.5-1
*/
-static const gchar *band_class_str[] = {
- "800 MHz Cellular System",
- "1.850 to 1.990 GHz Broadband PCS",
- "872 to 960 MHz TACS Band",
- "832 to 925 MHz JTACS Band",
- "1.750 to 1.870 GHz Korean PCS",
- "450 MHz NMT",
- "2 GHz IMT-2000",
- "Upper 700 MHz",
- "1.710 to 1.880 GHz PCS",
- "880 to 960 MHz",
- "Secondary 800 MHz",
- "400 MHz European PAMR",
- "800 MHz European PAMR",
- "2.5 GHz IMT-2000 Extension",
- "US PCS 1.9 GHz",
- "AWS",
- "US 2.5 GHz",
- "US 2.5 GHz Forward Link Only",
- "700 MHz Public Safety",
- "Lower 700 MHz"
+static const value_string ansi_a_band_class_vals[] =
+{
+ { 0x00, "800 MHz Cellular System" },
+ { 0x01, "1.850 to 1.990 GHz Broadband PCS" },
+ { 0x02, "872 to 960 MHz TACS Band" },
+ { 0x03, "832 to 925 MHz JTACS Band" },
+ { 0x04, "1.750 to 1.870 GHz Korean PCS" },
+ { 0x05, "450 MHz NMT" },
+ { 0x06, "2 GHz IMT-2000" },
+ { 0x07, "Upper 700 MHz" },
+ { 0x08, "1.710 to 1.880 GHz PCS" },
+ { 0x09, "880 to 960 MHz" },
+ { 0x0a, "Secondary 800 MHz" },
+ { 0x0b, "400 MHz European PAMR" },
+ { 0x0c, "800 MHz European PAMR" },
+ { 0x0d, "2.5 GHz IMT-2000 Extension" },
+ { 0x0e, "US PCS 1.9 GHz" },
+ { 0x0f, "AWS" },
+ { 0x10, "US 2.5 GHz" },
+ { 0x11, "US 2.5 GHz Forward Link Only" },
+ { 0x12, "700 MHz Public Safety" },
+ { 0x13, "Lower 700 MHz" },
+ { 0, NULL }
+};
+
+static const value_string ansi_a_ip_addr_type_vals[] = {
+ { 0x00, "IPv4" },
+ { 0x01, "IPv6" },
+ { 0, NULL }
+};
+
+/*
+ * C.S0005-E v2.0 Table 2.6.6.2.1-1
+ */
+static const value_string ansi_a_srch_win_sizes_vals[] =
+{
+ { 0x00, "4 PN chips" },
+ { 0x01, "6 PN chips" },
+ { 0x02, "8 PN chips" },
+ { 0x03, "10 PN chips" },
+ { 0x04, "14 PN chips" },
+ { 0x05, "20 PN chips" },
+ { 0x06, "28 PN chips" },
+ { 0x07, "40 PN chips" },
+ { 0x08, "60 PN chips" },
+ { 0x09, "80 PN chips" },
+ { 0x0a, "100 PN chips" },
+ { 0x0b, "130 PN chips" },
+ { 0x0c, "160 PN chips" },
+ { 0x0d, "226 PN chips" },
+ { 0x0e, "320 PN chips" },
+ { 0x0f, "452 PN chips" },
+ { 0, NULL }
+};
+
+/*
+ * C.S0005-E v2.0 Table 2.6.6.2.3-1
+ */
+static const value_string ansi_a_t_tdrop_vals[] =
+{
+ { 0x00, "100 milliseconds" },
+ { 0x01, "1 second" },
+ { 0x02, "2 seconds" },
+ { 0x03, "4 seconds" },
+ { 0x04, "6 seconds" },
+ { 0x05, "9 seconds" },
+ { 0x06, "13 seconds" },
+ { 0x07, "19 seconds" },
+ { 0x08, "27 seconds" },
+ { 0x09, "39 seconds" },
+ { 0x0a, "55 seconds" },
+ { 0x0b, "79 seconds" },
+ { 0x0c, "112 seconds" },
+ { 0x0d, "159 seconds" },
+ { 0x0e, "225 seconds" },
+ { 0x0f, "319 seconds" },
+ { 0, NULL }
+};
+
+static const value_string cell_disc_str[] = {
+ {0, "whole Cell Global Identification (CGI)"},
+ {1, "LAC/CI"},
+ {2, "Cell Identity (CI)"},
+ {3, "None"},
+ {4, "Location Area Identification (LAI)"},
+ {5, "Location Area Code (LAC)"},
+ {6, "ALL"},
+ {7, "IS-41 whole Cell Global Identification (ICGI)"},
+ {8, "Enhanced whole Cell Global Identification (ECGI)"},
+ { 0, NULL }
+};
+
+/*
+ * Not strictly A-interface info, but put here to avoid file polution
+ */
+
+/*
+ * 9.1 Data Field Encoding Assignments
+ */
+const value_string ansi_tsb58_encoding_strings[] = {
+ { 0x0000, "Octet, unspecified" },
+ { 0x0001, "Extended Protocol Message (Unexpected, not supported)" },
+ { 0x0002, "7-bit ASCII" },
+ { 0x0003, "IA5" },
+ { 0x0004, "UNICODE" },
+ { 0x0005, "Shift-JIS" },
+ { 0x0006, "Korean" },
+ { 0x0007, "Latin/Hebrew" },
+ { 0x0008, "Latin" },
+ { 0x0009, "GSM 7-bit default alphabet" },
+ { 0, NULL }
+};
+
+/*
+ * 9.2 Language Indicator Value Assignments
+ */
+static const value_string ansi_tsb58_language_ind_strings[] = {
+ { 0x0000, "Unknown or unspecified" },
+ { 0x0001, "English" },
+ { 0x0002, "French" },
+ { 0x0003, "Spanish" },
+ { 0x0004, "Japanese" },
+ { 0x0005, "Korean" },
+ { 0x0006, "Chinese" },
+ { 0x0007, "Hebrew" },
+ { 0x0008, "Portuguese" },
+ { 0x0009, "Hindi" },
+ { 0x000a, "Turkish" },
+ { 0x000b, "Hungarian" },
+ { 0x000c, "Polish" },
+ { 0x000d, "Czech" },
+ { 0x000e, "Arabic" },
+ { 0x000f, "Russian" },
+ { 0x0010, "Icelandic" },
+ { 0x0011, "German" },
+ { 0x0012, "Italian" },
+ { 0x0013, "Dutch" },
+ { 0x0014, "Swedish" },
+ { 0x0015, "Danish" },
+ { 0x0017, "Finnish" },
+ { 0x0018, "Norwegian" },
+ { 0x0019, "Greek" },
+ { 0x001a, "Bengali" },
+ { 0x001b, "Gujarati" },
+ { 0x001c, "Kannada" },
+ { 0x001d, "Malayalam" },
+ { 0x001e, "Oriya" },
+ { 0x001f, "Punjabi" },
+ { 0x0020, "Tamil" },
+ { 0x0021, "Telugu" },
+ { 0x0022, "Urdu" },
+ { 0x0023, "Bahasa" },
+ { 0x0024, "Thai" },
+ { 0x0025, "Tagalog" },
+ { 0x0026, "Swahili" },
+ { 0x0027, "Afrikaans" },
+ { 0x0028, "Hausa" },
+ { 0x0029, "Vietnamese" },
+ { 0, NULL }
};
-#define NUM_BAND_CLASS_STR (sizeof(band_class_str)/sizeof(gchar *))
-
-static const gchar *cell_disc_str[] = {
- "whole Cell Global Identification (CGI)",
- "LAC/CI",
- "Cell Identity (CI)",
- "None",
- "Location Area Identification (LAI)",
- "Location Area Code (LAC)",
- "ALL",
- "IS-41 whole Cell Global Identification (ICGI)",
- "Enhanced whole Cell Global Identification (ECGI)"
+
+const value_string_ext ansi_tsb58_language_ind_strings_ext = VALUE_STRING_EXT_INIT(ansi_tsb58_language_ind_strings);
+
+/* NOTE: Table 160 of 3GPP2 N.S0005 may specify different values */
+
+/*
+ * 9.3 Service Category Assignments
+ */
+const value_string ansi_tsb58_srvc_cat_strings[] = {
+ { 0x0000, "Unknown or unspecified" },
+ { 0x0001, "Emergency Broadcasts" },
+ { 0x0002, "Administrative" },
+ { 0x0003, "Maintenance" },
+ { 0x0004, "General News - Local" },
+ { 0x0005, "General News - Regional" },
+ { 0x0006, "General News - National" },
+ { 0x0007, "General News - International" },
+ { 0x0008, "Business/Financial News - Local" },
+ { 0x0009, "Business/Financial News - Regional" },
+ { 0x000A, "Business/Financial News - National" },
+ { 0x000B, "Business/Financial News - International" },
+ { 0x000C, "Sports News - Local" },
+ { 0x000D, "Sports News - Regional" },
+ { 0x000E, "Sports News - National" },
+ { 0x000F, "Sports News - International" },
+ { 0x0010, "Entertainment News - Local" },
+ { 0x0011, "Entertainment News - Regional" },
+ { 0x0012, "Entertainment News - National" },
+ { 0x0013, "Entertainment News - International" },
+ { 0x0014, "Local Weather" },
+ { 0x0015, "Area Traffic Reports" },
+ { 0x0016, "Local Airport Flight Schedules" },
+ { 0x0017, "Restaurants" },
+ { 0x0018, "Lodgings" },
+ { 0x0019, "Retail Directory" },
+ { 0x001A, "Advertisements" },
+ { 0x001B, "Stock Quotes" },
+ { 0x001C, "Employment Opportunities" },
+ { 0x001D, "Medical/Health/Hospitals" },
+ { 0x001E, "Technology News" },
+ { 0x001F, "Multi-category" },
+ { 0x0020, "Card Application Toolkit Protocol Teleservice (CATPT)" },
+ { 0x1000, "Presidential-Level Alert" },
+ { 0x1001, "Extreme Threat to Life and Property" },
+ { 0x1002, "Severe Threat to Life and Property" },
+ { 0x1003, "AMBER (Child Abduction Emergency)" },
+ { 0x1004, "CMAS Test Message" },
+ { 0, NULL }
};
-#define NUM_CELL_DISC_STR (sizeof(cell_disc_str)/sizeof(gchar *))
+
+const value_string_ext ansi_tsb58_srvc_cat_strings_ext = VALUE_STRING_EXT_INIT(ansi_tsb58_srvc_cat_strings);
+
+/*
+ * END Not strictly A-interface info
+ */
+
/* Initialize the protocol and registered fields */
static int proto_a_bsmap = -1;
static int proto_a_dtap = -1;
+/* Used to add the service option to the message name */
+static proto_item *ansi_a_message_item = NULL;
+static gchar ansi_a_so_add_string[30];
+static gchar ansi_a_mid_add_string[30];
+
const ext_value_string_t *ansi_a_bsmap_strings = NULL;
const ext_value_string_t *ansi_a_dtap_strings = NULL;
const ext_value_string_t *ansi_a_elem_1_strings = NULL;
static int ansi_a_tap = -1;
-/* static int hf_ansi_a_none = -1; */
static int hf_ansi_a_bsmap_msgtype = -1;
static int hf_ansi_a_dtap_msgtype = -1;
-static int hf_ansi_a_length = -1;
+static int hf_ansi_a_protocol_disc = -1;
+static int hf_ansi_a_reserved_octet = -1;
+static int hf_ansi_a_ti_flag = -1;
+static int hf_ansi_a_ti_ti = -1;
+static int hf_ansi_a_cm_svrc_type = -1;
static int hf_ansi_a_elem_id = -1;
+static int hf_ansi_a_elem_id_70 = -1;
+static int hf_ansi_a_length = -1;
static int hf_ansi_a_esn = -1;
static int hf_ansi_a_imsi = -1;
-static int hf_ansi_a_min = -1;
static int hf_ansi_a_meid = -1;
static int hf_ansi_a_cld_party_bcd_num = -1;
-#ifdef MAYBE_USED_FOR_OLDER_CODECS
-static int hf_ansi_a_clg_party_bcd_num = -1;
-#endif
static int hf_ansi_a_cld_party_ascii_num = -1;
static int hf_ansi_a_clg_party_ascii_num = -1;
static int hf_ansi_a_cell_ci = -1;
@@ -683,19 +933,357 @@ static int hf_ansi_a_pdsn_ip_addr = -1;
static int hf_ansi_a_s_pdsn_ip_addr = -1;
static int hf_ansi_a_anchor_ip_addr = -1;
static int hf_ansi_a_anchor_pp_ip_addr = -1;
-static int hf_ansi_a_a2p_bearer_ipv4_addr = -1;
-static int hf_ansi_a_a2p_bearer_ipv6_addr = -1;
-static int hf_ansi_a_a2p_bearer_udp_port = -1;
static int hf_ansi_a_so = -1;
static int hf_ansi_a_cause_1 = -1; /* 1 octet cause */
static int hf_ansi_a_cause_2 = -1; /* 2 octet cause */
-static int hf_ansi_a_meid_configured = -1;
static int hf_ansi_a_ms_info_rec_signal_type = -1;
static int hf_ansi_a_ms_info_rec_signal_alert_pitch = -1;
static int hf_ansi_a_ms_info_rec_signal_tone = -1;
static int hf_ansi_a_ms_info_rec_signal_isdn_alert = -1;
static int hf_ansi_a_ms_info_rec_signal_is54b_alert = -1;
static int hf_ansi_a_ms_info_rec_call_waiting_ind = -1;
+static int hf_ansi_a_extension_8_80 = -1;
+static int hf_ansi_a_reserved_bits_8_generic = -1;
+static int hf_ansi_a_reserved_bits_8_01 = -1;
+static int hf_ansi_a_reserved_bits_8_07 = -1;
+static int hf_ansi_a_reserved_bits_8_0c = -1;
+static int hf_ansi_a_reserved_bits_8_0f = -1;
+static int hf_ansi_a_reserved_bits_8_10 = -1;
+static int hf_ansi_a_reserved_bits_8_18 = -1;
+static int hf_ansi_a_reserved_bits_8_1c = -1;
+static int hf_ansi_a_reserved_bits_8_1f = -1;
+static int hf_ansi_a_reserved_bits_8_3f = -1;
+static int hf_ansi_a_reserved_bits_8_7f = -1;
+static int hf_ansi_a_reserved_bits_8_80 = -1;
+static int hf_ansi_a_reserved_bits_8_c0 = -1;
+static int hf_ansi_a_reserved_bits_8_e0 = -1;
+static int hf_ansi_a_reserved_bits_8_f0 = -1;
+static int hf_ansi_a_reserved_bits_8_f8 = -1;
+static int hf_ansi_a_reserved_bits_8_fc = -1;
+static int hf_ansi_a_reserved_bits_8_fe = -1;
+static int hf_ansi_a_reserved_bits_8_ff = -1;
+static int hf_ansi_a_reserved_bits_16_001f = -1;
+static int hf_ansi_a_reserved_bits_16_8000 = -1;
+static int hf_ansi_a_reserved_bits_16_f800 = -1;
+static int hf_ansi_a_reserved_bits_24_001800 = -1;
+static int hf_ansi_a_reserved_bits_24_006000 = -1;
+static int hf_ansi_a_reserved_bits_24_007000 = -1;
+static int hf_ansi_a_speech_or_data_indicator = -1;
+static int hf_ansi_a_channel_number = -1;
+static int hf_ansi_a_IOS5_channel_number = -1;
+static int hf_ansi_a_chan_rate_and_type = -1;
+static int hf_ansi_a_speech_enc_or_data_rate = -1;
+static int hf_ansi_a_chan_type_data_ext = -1;
+static int hf_ansi_a_chan_type_data_transparent = -1;
+static int hf_ansi_a_return_cause = -1;
+static int hf_ansi_a_rf_chan_id_color_code = -1;
+static int hf_ansi_a_rf_chan_id_n_amps_based = -1;
+static int hf_ansi_a_rf_chan_id_amps_based = -1;
+static int hf_ansi_a_rf_chan_id_timeslot = -1;
+static int hf_ansi_a_rf_chan_id_channel_number = -1;
+static int hf_ansi_a_sr_id = -1;
+static int hf_ansi_a_sid = -1;
+static int hf_ansi_a_is95_chan_id_hho = -1;
+static int hf_ansi_a_is95_chan_id_num_chans_add = -1;
+static int hf_ansi_a_is95_chan_id_frame_offset = -1;
+static int hf_ansi_a_is95_chan_id_walsh_code_chan_idx = -1;
+static int hf_ansi_a_is95_chan_id_pilot_pn = -1;
+static int hf_ansi_a_is95_chan_id_power_combined = -1;
+static int hf_ansi_a_is95_chan_id_freq_incl = -1;
+static int hf_ansi_a_is95_chan_id_channel_number = -1;
+static int hf_ansi_a_enc_info_enc_parm_id = -1;
+static int hf_ansi_a_enc_info_status = -1;
+static int hf_ansi_a_enc_info_available = -1;
+static int hf_ansi_a_cm2_mob_p_rev = -1;
+static int hf_ansi_a_cm2_see_list = -1;
+static int hf_ansi_a_cm2_rf_power_cap = -1;
+static int hf_ansi_a_cm2_nar_an_cap = -1;
+static int hf_ansi_a_cm2_is95 = -1;
+static int hf_ansi_a_cm2_slotted = -1;
+static int hf_ansi_a_cm2_dtx = -1;
+static int hf_ansi_a_cm2_mobile_term = -1;
+static int hf_ansi_a_cm2_analog_cap = -1;
+static int hf_ansi_a_cm2_psi = -1;
+static int hf_ansi_a_cm2_scm_len = -1;
+static int hf_ansi_a_cm2_scm = -1;
+static int hf_ansi_a_cm2_scm_ext_scm_ind = -1;
+static int hf_ansi_a_cm2_scm_dual_mode = -1;
+static int hf_ansi_a_cm2_scm_slotted = -1;
+static int hf_ansi_a_cm2_scm_meid_configured = -1;
+static int hf_ansi_a_cm2_scm_25MHz_bandwidth = -1;
+static int hf_ansi_a_cm2_scm_transmission = -1;
+static int hf_ansi_a_cm2_scm_power_class = -1;
+static int hf_ansi_a_cm2_scm_band_class_count = -1;
+static int hf_ansi_a_cm2_scm_band_class_entry_len = -1;
+static int hf_ansi_a_scm_band_class_entry_band_class = -1;
+static int hf_ansi_a_scm_band_class_entry_opmode0_1 = -1;
+static int hf_ansi_a_scm_band_class_entry_opmode1_1 = -1;
+static int hf_ansi_a_scm_band_class_entry_opmode2_1 = -1;
+static int hf_ansi_a_scm_band_class_entry_opmode3_1 = -1;
+static int hf_ansi_a_scm_band_class_entry_opmode4_1 = -1;
+static int hf_ansi_a_scm_band_class_entry_opmode0_2 = -1;
+static int hf_ansi_a_scm_band_class_entry_opmode1_2 = -1;
+static int hf_ansi_a_scm_band_class_entry_opmode2_2 = -1;
+static int hf_ansi_a_scm_band_class_entry_opmode3_2 = -1;
+static int hf_ansi_a_scm_band_class_entry_opmode4_2 = -1;
+static int hf_ansi_a_scm_band_class_entry_opmode5_2 = -1;
+static int hf_ansi_a_scm_band_class_entry_opmode6_2 = -1;
+static int hf_ansi_a_scm_band_class_entry_p_rev = -1;
+static int hf_ansi_a_meid_mid_digit_1 = -1;
+static int hf_ansi_a_imsi_mid_digit_1 = -1;
+static int hf_ansi_a_mid_odd_even_ind = -1;
+static int hf_ansi_a_mid_type_of_id = -1;
+static int hf_ansi_a_mid_broadcast_priority = -1;
+static int hf_ansi_a_mid_broadcast_message_id = -1;
+static int hf_ansi_a_mid_broadcast_zone_id = -1;
+static int hf_ansi_a_mid_broadcast_srvc_cat = -1;
+static int hf_ansi_a_mid_broadcast_language = -1;
+static int hf_ansi_a_mid_unused = -1;
+static int hf_ansi_a_sci_sign = -1;
+static int hf_ansi_a_sci = -1;
+static int hf_ansi_a_prio_call_priority = -1;
+static int hf_ansi_a_prio_queue_allowed = -1;
+static int hf_ansi_a_prio_preempt_allowed = -1;
+static int hf_ansi_a_mob_p_rev = -1;
+static int hf_ansi_a_cause_1_ext = -1;
+static int hf_ansi_a_cause_2_ext = -1;
+static int hf_ansi_a_cell_id_disc = -1;
+static int hf_ansi_a_cic = -1;
+static int hf_ansi_a_cic_pcm_multi = -1;
+static int hf_ansi_a_cic_timeslot = -1;
+static int hf_ansi_a_cic_ext_cic = -1;
+static int hf_ansi_a_cic_ext_pcm_multi = -1;
+static int hf_ansi_a_cic_ext_timeslot = -1;
+static int hf_ansi_a_cic_ext_circuit_mode = -1;
+static int hf_ansi_a_ssci_mopd = -1;
+static int hf_ansi_a_ssci_geci = -1;
+static int hf_ansi_a_downlink_re_num_cells = -1;
+static int hf_ansi_a_downlink_re_sig_str_raw = -1;
+static int hf_ansi_a_downlink_re_cdma_towd = -1;
+static int hf_ansi_a_downlink_re_entry_env_len = -1;
+static int hf_ansi_a_ho_pow_lev_num_cells = -1;
+static int hf_ansi_a_ho_pow_lev_id_type = -1;
+static int hf_ansi_a_ho_pow_lev_pow_lev = -1;
+static int hf_ansi_a_uz_id = -1;
+static int hf_ansi_a_info_rec_req = -1;
+static int hf_ansi_a_is2000_chan_id_otd = -1;
+static int hf_ansi_a_is2000_chan_id_chan_count = -1;
+static int hf_ansi_a_is2000_chan_id_frame_offset = -1;
+static int hf_ansi_a_is2000_chan_id_chan_chan_type = -1;
+static int hf_ansi_a_is2000_chan_id_chan_rev_fch_gating = -1;
+static int hf_ansi_a_is2000_chan_id_chan_rev_pilot_gating_rate = -1;
+static int hf_ansi_a_is2000_chan_id_chan_qof_mask = -1;
+static int hf_ansi_a_is2000_chan_id_chan_walsh_code_chan_idx = -1;
+static int hf_ansi_a_is2000_chan_id_chan_pilot_pn_code = -1;
+static int hf_ansi_a_is2000_chan_id_chan_power_combined = -1;
+static int hf_ansi_a_is2000_chan_id_chan_freq_incl = -1;
+static int hf_ansi_a_is2000_chan_id_chan_channel_number = -1;
+static int hf_ansi_a_is2000_chan_id_chan_fdc_length = -1;
+static int hf_ansi_a_is2000_chan_id_chan_fdc_band_class = -1;
+static int hf_ansi_a_is2000_chan_id_chan_fdc_fwd_chan_freq = -1;
+static int hf_ansi_a_is2000_chan_id_chan_fdc_rev_chan_freq = -1;
+static int hf_ansi_a_is95_ms_meas_chan_id_band_class = -1;
+static int hf_ansi_a_is95_ms_meas_chan_id_channel_number = -1;
+static int hf_ansi_a_clg_party_ascii_num_ton = -1;
+static int hf_ansi_a_clg_party_ascii_num_plan = -1;
+static int hf_ansi_a_clg_party_ascii_num_pi = -1;
+static int hf_ansi_a_clg_party_ascii_num_si = -1;
+static int hf_ansi_a_lai_mcc = -1;
+static int hf_ansi_a_lai_mnc = -1;
+static int hf_ansi_a_lai_lac = -1;
+static int hf_ansi_a_rej_cause = -1;
+static int hf_ansi_a_auth_chlg_param_rand_num_type = -1;
+static int hf_ansi_a_auth_chlg_param_rand = -1;
+static int hf_ansi_a_auth_resp_param_sig_type = -1;
+static int hf_ansi_a_auth_resp_param_sig = -1;
+static int hf_ansi_a_auth_param_count_count = -1;
+static int hf_ansi_a_mwi_num_messages = -1;
+static int hf_ansi_a_signal_signal_value = -1;
+static int hf_ansi_a_signal_alert_pitch = -1;
+static int hf_ansi_a_clg_party_bcd_num_ton = -1;
+static int hf_ansi_a_clg_party_bcd_num_plan = -1;
+static int hf_ansi_a_qos_params_packet_priority = -1;
+static int hf_ansi_a_cause_l3_coding_standard = -1;
+static int hf_ansi_a_cause_l3_location = -1;
+static int hf_ansi_a_cause_l3_class = -1;
+static int hf_ansi_a_cause_l3_value_without_class = -1;
+static int hf_ansi_a_cause_l3_value = -1;
+static int hf_ansi_a_auth_conf_param_randc = -1;
+static int hf_ansi_a_xmode_tfo_mode = -1;
+static int hf_ansi_a_reg_type_type = -1;
+static int hf_ansi_a_tag_value = -1;
+static int hf_ansi_a_hho_params_band_class = -1;
+static int hf_ansi_a_hho_params_num_pream_frames = -1;
+static int hf_ansi_a_hho_params_reset_l2 = -1;
+static int hf_ansi_a_hho_params_reset_fpc = -1;
+static int hf_ansi_a_hho_params_enc_mode = -1;
+static int hf_ansi_a_hho_params_private_lcm = -1;
+static int hf_ansi_a_hho_params_rev_pwr_cntl_delay_incl = -1;
+static int hf_ansi_a_hho_params_rev_pwr_cntl_delay = -1;
+static int hf_ansi_a_hho_params_nom_pwr_ext = -1;
+static int hf_ansi_a_hho_params_nom_pwr = -1;
+static int hf_ansi_a_hho_params_fpc_subchan_info = -1;
+static int hf_ansi_a_hho_params_fpc_subchan_info_incl = -1;
+static int hf_ansi_a_hho_params_pwr_cntl_step = -1;
+static int hf_ansi_a_hho_params_pwr_cntl_step_incl = -1;
+static int hf_ansi_a_sw_ver_major = -1;
+static int hf_ansi_a_sw_ver_minor = -1;
+static int hf_ansi_a_sw_ver_point = -1;
+static int hf_ansi_a_so_proprietary_ind = -1;
+static int hf_ansi_a_so_revision = -1;
+static int hf_ansi_a_so_base_so_num = -1;
+static int hf_ansi_a_soci = -1;
+static int hf_ansi_a_so_list_num = -1;
+static int hf_ansi_a_so_list_sr_id = -1;
+static int hf_ansi_a_so_list_soci = -1;
+static int hf_ansi_a_nid = -1;
+static int hf_ansi_a_pzid = -1;
+static int hf_ansi_a_adds_user_part_burst_type = -1;
+static int hf_ansi_a_adds_user_part_ext_burst_type = -1;
+static int hf_ansi_a_adds_user_part_ext_data = -1;
+static int hf_ansi_a_adds_user_part_unknown_data = -1;
+static int hf_ansi_a_amps_hho_params_enc_mode = -1;
+static int hf_ansi_a_is2000_scr_num_fill_bits = -1;
+static int hf_ansi_a_is2000_scr_for_mux_option = -1;
+static int hf_ansi_a_is2000_scr_rev_mux_option = -1;
+static int hf_ansi_a_is2000_scr_for_fch_rate = -1;
+static int hf_ansi_a_is2000_scr_rev_fch_rate = -1;
+static int hf_ansi_a_is2000_scr_num_socr = -1;
+static int hf_ansi_a_is2000_scr_socr_soc_ref = -1;
+static int hf_ansi_a_is2000_scr_socr_so = -1;
+static int hf_ansi_a_is2000_scr_socr_for_chan_type = -1;
+static int hf_ansi_a_is2000_scr_socr_rev_chan_type = -1;
+static int hf_ansi_a_is2000_scr_socr_ui_enc_mode = -1;
+static int hf_ansi_a_is2000_scr_socr_sr_id = -1;
+static int hf_ansi_a_is2000_scr_socr_rlp_info_incl = -1;
+static int hf_ansi_a_is2000_scr_socr_rlp_blob_len = -1;
+static int hf_ansi_a_is2000_scr_socr_rlp_blob_msb = -1;
+static int hf_ansi_a_is2000_scr_socr_fch_cc_incl = -1;
+static int hf_ansi_a_is2000_scr_socr_fch_frame_size_support_ind = -1;
+static int hf_ansi_a_is2000_scr_socr_for_fch_rc = -1;
+static int hf_ansi_a_is2000_scr_socr_rev_fch_rc = -1;
+static int hf_ansi_a_is2000_nn_scr_num_fill_bits = -1;
+static int hf_ansi_a_is2000_nn_scr_content = -1;
+static int hf_ansi_a_is2000_nn_scr_fill_bits = -1;
+static int hf_ansi_a_is2000_mob_cap_rev_pdch_support_ind = -1;
+static int hf_ansi_a_is2000_mob_cap_for_pdch_support_ind = -1;
+static int hf_ansi_a_is2000_mob_cap_eram_support_ind = -1;
+static int hf_ansi_a_is2000_mob_cap_dcch_support_ind = -1;
+static int hf_ansi_a_is2000_mob_cap_fch_support_ind = -1;
+static int hf_ansi_a_is2000_mob_cap_otd_support_ind = -1;
+static int hf_ansi_a_is2000_mob_cap_enh_rc_cfg_support_ind = -1;
+static int hf_ansi_a_is2000_mob_cap_qpch_support_ind = -1;
+static int hf_ansi_a_is2000_mob_cap_fch_info_octet_len = -1;
+static int hf_ansi_a_is2000_mob_cap_fch_info_geo_loc_type = -1;
+static int hf_ansi_a_is2000_mob_cap_fch_info_geo_loc_incl = -1;
+static int hf_ansi_a_is2000_mob_cap_fch_info_num_fill_bits = -1;
+static int hf_ansi_a_is2000_mob_cap_fch_info_content = -1;
+static int hf_ansi_a_is2000_mob_cap_fch_info_fill_bits = -1;
+static int hf_ansi_a_is2000_mob_cap_dcch_info_octet_len = -1;
+static int hf_ansi_a_is2000_mob_cap_dcch_info_num_fill_bits = -1;
+static int hf_ansi_a_is2000_mob_cap_dcch_info_content = -1;
+static int hf_ansi_a_is2000_mob_cap_dcch_info_fill_bits = -1;
+static int hf_ansi_a_is2000_mob_cap_for_pdch_info_octet_len = -1;
+static int hf_ansi_a_is2000_mob_cap_for_pdch_info_num_fill_bits = -1;
+static int hf_ansi_a_is2000_mob_cap_for_pdch_info_content = -1;
+static int hf_ansi_a_is2000_mob_cap_for_pdch_info_fill_bits = -1;
+static int hf_ansi_a_is2000_mob_cap_rev_pdch_info_octet_len = -1;
+static int hf_ansi_a_is2000_mob_cap_rev_pdch_info_num_fill_bits = -1;
+static int hf_ansi_a_is2000_mob_cap_rev_pdch_info_content = -1;
+static int hf_ansi_a_is2000_mob_cap_rev_pdch_info_fill_bits = -1;
+static int hf_ansi_a_is2000_mob_cap_vp_support = -1;
+static int hf_ansi_a_is2000_mob_cap_vp_support_a7 = -1;
+static int hf_ansi_a_is2000_mob_cap_vp_support_a6 = -1;
+static int hf_ansi_a_is2000_mob_cap_vp_support_a5 = -1;
+static int hf_ansi_a_is2000_mob_cap_vp_support_a4 = -1;
+static int hf_ansi_a_is2000_mob_cap_vp_support_a3 = -1;
+static int hf_ansi_a_is2000_mob_cap_vp_support_a2 = -1;
+static int hf_ansi_a_is2000_mob_cap_vp_support_a1 = -1;
+static int hf_ansi_a_protocol_type = -1;
+static int hf_ansi_a_fwd_ms_info_rec_cld_pn_num_type = -1;
+static int hf_ansi_a_fwd_ms_info_rec_cld_pn_num_plan = -1;
+static int hf_ansi_a_fwd_ms_info_rec_cld_pn_num = -1;
+static int hf_ansi_a_fwd_ms_info_rec_clg_pn_num_type = -1;
+static int hf_ansi_a_fwd_ms_info_rec_clg_pn_num_plan = -1;
+static int hf_ansi_a_fwd_ms_info_rec_clg_pn_num = -1;
+static int hf_ansi_a_fwd_ms_info_rec_clg_pn_pi = -1;
+static int hf_ansi_a_fwd_ms_info_rec_clg_pn_si = -1;
+static int hf_ansi_a_fwd_ms_info_rec_mw_num = -1;
+static int hf_ansi_a_fwd_ms_info_rec_content = -1;
+static int hf_ansi_a_rev_ms_info_rec_cld_pn_num_type = -1;
+static int hf_ansi_a_rev_ms_info_rec_cld_pn_num_plan = -1;
+static int hf_ansi_a_rev_ms_info_rec_cld_pn_num = -1;
+static int hf_ansi_a_rev_ms_info_rec_clg_pn_num_type = -1;
+static int hf_ansi_a_rev_ms_info_rec_clg_pn_num_plan = -1;
+static int hf_ansi_a_rev_ms_info_rec_clg_pn_num = -1;
+static int hf_ansi_a_rev_ms_info_rec_clg_pn_pi = -1;
+static int hf_ansi_a_rev_ms_info_rec_clg_pn_si = -1;
+static int hf_ansi_a_rev_ms_info_rec_so_info_fwd_support = -1;
+static int hf_ansi_a_rev_ms_info_rec_so_info_rev_support = -1;
+static int hf_ansi_a_rev_ms_info_rec_so_info_so = -1;
+static int hf_ansi_a_rev_ms_info_rec_content = -1;
+static int hf_ansi_a_ext_ho_dir_params_srch_win_a = -1;
+static int hf_ansi_a_ext_ho_dir_params_srch_win_n = -1;
+static int hf_ansi_a_ext_ho_dir_params_srch_win_r = -1;
+static int hf_ansi_a_ext_ho_dir_params_t_add = -1;
+static int hf_ansi_a_ext_ho_dir_params_t_drop = -1;
+static int hf_ansi_a_ext_ho_dir_params_t_comp = -1;
+static int hf_ansi_a_ext_ho_dir_params_t_tdrop = -1;
+static int hf_ansi_a_ext_ho_dir_params_nghbor_max_age = -1;
+static int hf_ansi_a_ext_ho_dir_params_target_bs_values_incl = -1;
+static int hf_ansi_a_ext_ho_dir_params_soft_slope = -1;
+static int hf_ansi_a_ext_ho_dir_params_add_intercept = -1;
+static int hf_ansi_a_ext_ho_dir_params_drop_intercept = -1;
+static int hf_ansi_a_ext_ho_dir_params_target_bs_p_rev = -1;
+static int hf_ansi_a_cdma_sowd_sowd = -1;
+static int hf_ansi_a_cdma_sowd_resolution = -1;
+static int hf_ansi_a_cdma_sowd_timestamp = -1;
+static int hf_ansi_a_re_res_prio_incl = -1;
+static int hf_ansi_a_re_res_forward = -1;
+static int hf_ansi_a_re_res_reverse = -1;
+static int hf_ansi_a_re_res_alloc = -1;
+static int hf_ansi_a_re_res_avail = -1;
+static int hf_ansi_a_cld_party_ascii_num_ton = -1;
+static int hf_ansi_a_cld_party_ascii_num_plan = -1;
+static int hf_ansi_a_band_class = -1;
+static int hf_ansi_a_is2000_cause = -1;
+static int hf_ansi_a_auth_event = -1;
+static int hf_ansi_a_psmm_count = -1;
+static int hf_ansi_a_geo_loc = -1;
+static int hf_ansi_a_cct_group_all_circuits = -1;
+static int hf_ansi_a_cct_group_inclusive = -1;
+static int hf_ansi_a_cct_group_count = -1;
+static int hf_ansi_a_cct_group_first_cic = -1;
+static int hf_ansi_a_cct_group_first_cic_pcm_multi = -1;
+static int hf_ansi_a_cct_group_first_cic_timeslot = -1;
+static int hf_ansi_a_paca_timestamp_queuing_time = -1;
+static int hf_ansi_a_paca_order_action_reqd = -1;
+static int hf_ansi_a_paca_reoi_pri = -1;
+static int hf_ansi_a_a2p_bearer_sess_max_frames = -1;
+static int hf_ansi_a_a2p_bearer_sess_ip_addr_type = -1;
+static int hf_ansi_a_a2p_bearer_sess_addr_flag = -1;
+static int hf_ansi_a_a2p_bearer_sess_ipv4_addr = -1;
+static int hf_ansi_a_a2p_bearer_sess_ipv6_addr = -1;
+static int hf_ansi_a_a2p_bearer_sess_udp_port = -1;
+static int hf_ansi_a_a2p_bearer_form_num_formats = -1;
+static int hf_ansi_a_a2p_bearer_form_ip_addr_type = -1;
+static int hf_ansi_a_a2p_bearer_form_format_len = -1;
+static int hf_ansi_a_a2p_bearer_form_format_tag_type = -1;
+static int hf_ansi_a_a2p_bearer_form_format_format_id = -1;
+static int hf_ansi_a_a2p_bearer_form_format_rtp_payload_type = -1;
+static int hf_ansi_a_a2p_bearer_form_format_bearer_addr_flag = -1;
+static int hf_ansi_a_a2p_bearer_form_format_ipv4_addr = -1;
+static int hf_ansi_a_a2p_bearer_form_format_ipv6_addr = -1;
+static int hf_ansi_a_a2p_bearer_form_format_udp_port = -1;
+static int hf_ansi_a_a2p_bearer_form_format_ext_len = -1;
+static int hf_ansi_a_a2p_bearer_form_format_ext_id = -1;
+static int hf_ansi_a_ms_des_freq_band_class = -1;
+static int hf_ansi_a_ms_des_freq_cdma_channel = -1;
+static int hf_ansi_a_plcm_id_plcm_type = -1;
+static int hf_ansi_a_bdtmf_trans_info_dtmf_off_len = -1;
+static int hf_ansi_a_bdtmf_trans_info_dtmf_on_len = -1;
+static int hf_ansi_a_bdtmf_chars_num_chars = -1;
+static int hf_ansi_a_bdtmf_chars_digits = -1;
/* Initialize the subtree pointers */
static gint ett_bsmap = -1;
@@ -713,11 +1301,27 @@ static gint ett_re_list = -1;
static gint ett_so_list = -1;
static gint ett_adds_user_part = -1;
static gint ett_scr = -1;
-static gint ett_srvc_con_rec = -1;
+static gint ett_scr_socr = -1;
static gint ett_cm2_band_class = -1;
static gint ett_vp_algs = -1;
+static gint ett_chan_list = -1;
+static gint ett_cic = -1;
+static gint ett_is2000_mob_cap_fch_info = -1;
+static gint ett_is2000_mob_cap_dcch_info = -1;
+static gint ett_is2000_mob_cap_for_pdch_info = -1;
+static gint ett_is2000_mob_cap_rev_pdch_info = -1;
static expert_field ei_ansi_a_extraneous_data = EI_INIT;
+static expert_field ei_ansi_a_short_data = EI_INIT;
+static expert_field ei_ansi_a_missing_mand_elem = EI_INIT;
+static expert_field ei_ansi_a_unknown_format = EI_INIT;
+static expert_field ei_ansi_a_no_tlv_elem_diss = EI_INIT;
+static expert_field ei_ansi_a_no_tv_elem_diss = EI_INIT;
+static expert_field ei_ansi_a_no_lv_elem_diss = EI_INIT;
+static expert_field ei_ansi_a_no_v_elem_diss = EI_INIT;
+static expert_field ei_ansi_a_miss_dtap_msg_diss = EI_INIT;
+static expert_field ei_ansi_a_miss_bsmap_msg_diss = EI_INIT;
+static expert_field ei_ansi_a_is2000_chan_id_pilot_pn = EI_INIT;
static char a_bigbuf[1024];
static dissector_handle_t data_handle;
@@ -767,6 +1371,16 @@ static ansi_a_dgt_set_t Dgt_meid = {
}
};
+/*
+ * As per C.S0005 Table 2.7.1.3.2.4-4 and IS-634.400A 6.2.2.57
+ */
+static ansi_a_dgt_set_t Dgt_dtmf = {
+ {
+ /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
+ '?','1','2','3','4','5','6','7','8','9','0','*','#','?','?', 0
+ }
+};
+
/* FUNCTIONS */
/*
@@ -814,122 +1428,216 @@ my_dgt_tbcd_unpack(
return(cnt);
}
-static const gchar *
-ansi_a_so_int_to_str(
- gint32 so)
+static const value_string ansi_a_so_str_vals[] = {
+ {1, "Basic Variable Rate Voice Service (8 kbps)"},
+ {2, "Mobile Station Loopback (8 kbps)"},
+ {3, "(EVRC) Enhanced Variable Rate Voice Service (8 kbps)"},
+ {4, "Asynchronous Data Service (9.6 kbps)"},
+ {5, "Group 3 Facsimile (9.6 kbps)"},
+ {6, "Short Message Services (Rate Set 1)"},
+ {7, "Packet Data Service: Internet or ISO Protocol Stack (9.6 kbps)"},
+ {8, "Packet Data Service: CDPD Protocol Stack (9.6 kbps)"},
+ {9, "Mobile Station Loopback (13 kbps)"},
+ {10, "STU-III Transparent Service"},
+ {11, "STU-III Non-Transparent Service"},
+ {12, "Asynchronous Data Service (14.4 or 9.6 kbps)"},
+ {13, "Group 3 Facsimile (14.4 or 9.6 kbps)"},
+ {14, "Short Message Services (Rate Set 2)"},
+ {15, "Packet Data Service: Internet or ISO Protocol Stack (14.4 kbps)"},
+ {16, "Packet Data Service: CDPD Protocol Stack (14.4 kbps)"},
+ {17, "High Rate Voice Service (13 kbps)"},
+ {18, "Over-the-Air Parameter Administration (Rate Set 1)"},
+ {19, "Over-the-Air Parameter Administration (Rate Set 2)"},
+ {20, "Group 3 Analog Facsimile (Rate Set 1)"},
+ {21, "Group 3 Analog Facsimile (Rate Set 2)"},
+ {22, "High Speed Packet Data Service: Internet or ISO Protocol Stack (RS1 forward, RS1 reverse)"},
+ {23, "High Speed Packet Data Service: Internet or ISO Protocol Stack (RS1 forward, RS2 reverse)"},
+ {24, "High Speed Packet Data Service: Internet or ISO Protocol Stack (RS2 forward, RS1 reverse)"},
+ {25, "High Speed Packet Data Service: Internet or ISO Protocol Stack (RS2 forward, RS2 reverse)"},
+ {26, "High Speed Packet Data Service: CDPD Protocol Stack (RS1 forward, RS1 reverse)"},
+ {27, "High Speed Packet Data Service: CDPD Protocol Stack (RS1 forward, RS2 reverse)"},
+ {28, "High Speed Packet Data Service: CDPD Protocol Stack (RS2 forward, RS1 reverse)"},
+ {29, "High Speed Packet Data Service: CDPD Protocol Stack (RS2 forward, RS2 reverse)"},
+ {30, "Supplemental Channel Loopback Test for Rate Set 1"},
+ {31, "Supplemental Channel Loopback Test for Rate Set 2"},
+ {32, "Test Data Service Option (TDSO)"},
+ {33, "cdma2000 High Speed Packet Data Service, Internet or ISO Protocol Stack"},
+ {34, "cdma2000 High Speed Packet Data Service, CDPD Protocol Stack"},
+ {35, "Location Services (PDS), Rate Set 1 (9.6 kbps)"},
+ {36, "Location Services (PDS), Rate Set 2 (14.4 kbps)"},
+ {37, "ISDN Interworking Service (64 kbps)"},
+ {38, "GSM Voice"},
+ {39, "GSM Circuit Data"},
+ {40, "GSM Packet Data"},
+ {41, "GSM Short Message Service"},
+ {42, "None Reserved for MC-MAP standard service options"},
+ {54, "Markov Service Option (MSO)"},
+ {55, "Loopback Service Option (LSO)"},
+ {56, "Selectable Mode Vocoder"},
+ {57, "32 kbps Circuit Video Conferencing"},
+ {58, "64 kbps Circuit Video Conferencing"},
+ {59, "HRPD Accounting Records Identifier"},
+ {60, "Link Layer Assisted Robust Header Compression (LLA ROHC) - Header Removal"},
+ {61, "Link Layer Assisted Robust Header Compression (LLA ROHC) - Header Compression"},
+ {62, "- 4099 None Reserved for standard service options"},
+ {68, "(EVRC-B NB) Enhanced Variable Rate Voice Service"},
+ {70, "(EVRC-B WB) Enhanced Variable Rate Voice Service"},
+ {73, "(EVRC-NW) Enhanced Variable Rate Voice Service"},
+ {77, "(EVRC-NW2k) EVRC-NW including a 2kbps maximum mode"},
+ {4100, "Asynchronous Data Service, Revision 1 (9.6 or 14.4 kbps)"},
+ {4101, "Group 3 Facsimile, Revision 1 (9.6 or 14.4 kbps)"},
+ {4102, "Reserved for standard service option"},
+ {4103, "Packet Data Service: Internet or ISO Protocol Stack, Revision 1 (9.6 or 14.4 kbps)"},
+ {4104, "Packet Data Service: CDPD Protocol Stack, Revision 1 (9.6 or 14.4 kbps)"},
+ {32768, "QCELP (13 kbps)"},
+ {32769, "Proprietary QUALCOMM Incorporated"},
+ {32770, "Proprietary QUALCOMM Incorporated"},
+ {32771, "Proprietary QUALCOMM Incorporated"},
+ {32772, "Proprietary OKI Telecom"},
+ {32773, "Proprietary OKI Telecom"},
+ {32774, "Proprietary OKI Telecom"},
+ {32775, "Proprietary OKI Telecom"},
+ {32776, "Proprietary Lucent Technologies"},
+ {32777, "Proprietary Lucent Technologies"},
+ {32778, "Proprietary Lucent Technologies"},
+ {32779, "Proprietary Lucent Technologies"},
+ {32780, "Nokia"},
+ {32781, "Nokia"},
+ {32782, "Nokia"},
+ {32783, "Nokia"},
+ {32784, "NORTEL NETWORKS"},
+ {32785, "NORTEL NETWORKS"},
+ {32786, "NORTEL NETWORKS"},
+ {32787, "NORTEL NETWORKS"},
+ {32788, "Sony Electronics Inc."},
+ {32789, "Sony Electronics Inc."},
+ {32790, "Sony Electronics Inc."},
+ {32791, "Sony Electronics Inc."},
+ {32792, "Motorola"},
+ {32793, "Motorola"},
+ {32794, "Motorola"},
+ {32795, "Motorola"},
+ {32796, "QUALCOMM Incorporated"},
+ {32797, "QUALCOMM Incorporated"},
+ {32798, "Qualcomm Loopback"},
+ {32799, "Qualcomm Markov 8 kbps Loopback"},
+ {32800, "Qualcomm Packet Data"},
+ {32801, "Qualcomm Async Data"},
+ {32802, "QUALCOMM Incorporated"},
+ {32803, "QUALCOMM Incorporated"},
+ {32804, "QUALCOMM Incorporated"},
+ {32805, "QUALCOMM Incorporated"},
+ {32806, "QUALCOMM Incorporated"},
+ {32807, "QUALCOMM Incorporated"},
+ {32808, "QUALCOMM Incorporated"},
+ {32809, "QUALCOMM Incorporated"},
+ {32810, "QUALCOMM Incorporated"},
+ {32811, "QUALCOMM Incorporated"},
+ {32812, "Lucent Technologies"},
+ {32813, "Lucent Technologies"},
+ {32814, "Lucent Technologies"},
+ {32815, "Lucent Technologies"},
+ {32816, "Denso International"},
+ {32817, "Denso International"},
+ {32818, "Denso International"},
+ {32819, "Denso International"},
+ {32820, "Motorola"},
+ {32821, "Motorola"},
+ {32822, "Motorola"},
+ {32823, "Motorola"},
+ {32824, "Denso International"},
+ {32825, "Denso International"},
+ {32826, "Denso International"},
+ {32827, "Denso International"},
+ {32828, "Denso International"},
+ {32829, "Denso International"},
+ {32830, "Denso International"},
+ {32831, "Denso International"},
+ {32832, "Denso International"},
+ {32833, "Denso International"},
+ {32834, "Denso International"},
+ {32835, "Denso International"},
+ {32836, "NEC America"},
+ {32837, "NEC America"},
+ {32838, "NEC America"},
+ {32839, "NEC America"},
+ {32840, "Samsung Electronics"},
+ {32841, "Samsung Electronics"},
+ {32842, "Samsung Electronics"},
+ {32843, "Samsung Electronics"},
+ {32844, "Texas Instruments Incorporated"},
+ {32845, "Texas Instruments Incorporated"},
+ {32846, "Texas Instruments Incorporated"},
+ {32847, "Texas Instruments Incorporated"},
+ {32848, "Toshiba Corporation"},
+ {32849, "Toshiba Corporation"},
+ {32850, "Toshiba Corporation"},
+ {32851, "Toshiba Corporation"},
+ {32852, "LG Electronics Inc."},
+ {32853, "LG Electronics Inc."},
+ {32854, "LG Electronics Inc."},
+ {32855, "LG Electronics Inc."},
+ {32856, "VIA Telecom Inc."},
+ {32857, "VIA Telecom Inc."},
+ {32858, "VIA Telecom Inc."},
+ {32859, "VIA Telecom Inc."},
+ { 0, NULL }
+};
+
+static const value_string_ext ansi_a_so_str_vals_ext = VALUE_STRING_EXT_INIT(ansi_a_so_str_vals);
+
+static const gchar* ansi_a_so_int_to_str(gint32 so)
{
- const gchar *str = NULL;
+ const gchar *str = try_val_to_str_ext(so, &ansi_a_so_str_vals_ext);
- switch (so)
- {
- case 1: str = "Basic Variable Rate Voice Service (8 kbps)"; break;
- case 2: str = "Mobile Station Loopback (8 kbps)"; break;
- case 3: str = "(EVRC) Enhanced Variable Rate Voice Service (8 kbps)"; break;
- case 4: str = "Asynchronous Data Service (9.6 kbps)"; break;
- case 5: str = "Group 3 Facsimile (9.6 kbps)"; break;
- case 6: str = "Short Message Services (Rate Set 1)"; break;
- case 7: str = "Packet Data Service: Internet or ISO Protocol Stack (9.6 kbps)"; break;
- case 8: str = "Packet Data Service: CDPD Protocol Stack (9.6 kbps)"; break;
- case 9: str = "Mobile Station Loopback (13 kbps)"; break;
- case 10: str = "STU-III Transparent Service"; break;
- case 11: str = "STU-III Non-Transparent Service"; break;
- case 12: str = "Asynchronous Data Service (14.4 or 9.6 kbps)"; break;
- case 13: str = "Group 3 Facsimile (14.4 or 9.6 kbps)"; break;
- case 14: str = "Short Message Services (Rate Set 2)"; break;
- case 15: str = "Packet Data Service: Internet or ISO Protocol Stack (14.4 kbps)"; break;
- case 16: str = "Packet Data Service: CDPD Protocol Stack (14.4 kbps)"; break;
- case 17: str = "High Rate Voice Service (13 kbps)"; break;
- case 32768: str = "QCELP (13 kbps)"; break;
- case 32798: /* 0x801e */ str = "Qualcomm Loopback"; break;
- case 32799: /* 0x801f */ str = "Qualcomm Markov 8 kbps Loopback"; break;
- case 32800: /* 0x8020 */ str = "Qualcomm Packet Data"; break;
- case 32801: /* 0x8021 */ str = "Qualcomm Async Data"; break;
- case 18: str = "Over-the-Air Parameter Administration (Rate Set 1)"; break;
- case 19: str = "Over-the-Air Parameter Administration (Rate Set 2)"; break;
- case 20: str = "Group 3 Analog Facsimile (Rate Set 1)"; break;
- case 21: str = "Group 3 Analog Facsimile (Rate Set 2)"; break;
- case 22: str = "High Speed Packet Data Service: Internet or ISO Protocol Stack (RS1 forward, RS1 reverse)"; break;
- case 23: str = "High Speed Packet Data Service: Internet or ISO Protocol Stack (RS1 forward, RS2 reverse)"; break;
- case 24: str = "High Speed Packet Data Service: Internet or ISO Protocol Stack (RS2 forward, RS1 reverse)"; break;
- case 25: str = "High Speed Packet Data Service: Internet or ISO Protocol Stack (RS2 forward, RS2 reverse)"; break;
- case 26: str = "High Speed Packet Data Service: CDPD Protocol Stack (RS1 forward, RS1 reverse)"; break;
- case 27: str = "High Speed Packet Data Service: CDPD Protocol Stack (RS1 forward, RS2 reverse)"; break;
- case 28: str = "High Speed Packet Data Service: CDPD Protocol Stack (RS2 forward, RS1 reverse)"; break;
- case 29: str = "High Speed Packet Data Service: CDPD Protocol Stack (RS2 forward, RS2 reverse)"; break;
- case 30: str = "Supplemental Channel Loopback Test for Rate Set 1"; break;
- case 31: str = "Supplemental Channel Loopback Test for Rate Set 2"; break;
- case 32: str = "Test Data Service Option (TDSO)"; break;
- case 33: str = "cdma2000 High Speed Packet Data Service, Internet or ISO Protocol Stack"; break;
- case 34: str = "cdma2000 High Speed Packet Data Service, CDPD Protocol Stack"; break;
- case 35: str = "Location Services (PDS), Rate Set 1 (9.6 kbps)"; break;
- case 36: str = "Location Services (PDS), Rate Set 2 (14.4 kbps)"; break;
- case 37: str = "ISDN Interworking Service (64 kbps)"; break;
- case 38: str = "GSM Voice"; break;
- case 39: str = "GSM Circuit Data"; break;
- case 40: str = "GSM Packet Data"; break;
- case 41: str = "GSM Short Message Service"; break;
- case 42: str = "None Reserved for MC-MAP standard service options"; break;
- case 54: str = "Markov Service Option (MSO)"; break;
- case 55: str = "Loopback Service Option (LSO)"; break;
- case 56: str = "Selectable Mode Vocoder"; break;
- case 57: str = "32 kbps Circuit Video Conferencing"; break;
- case 58: str = "64 kbps Circuit Video Conferencing"; break;
- case 59: str = "HRPD Accounting Records Identifier"; break;
- case 60: str = "Link Layer Assisted Robust Header Compression (LLA ROHC) - Header Removal"; break;
- case 61: str = "Link Layer Assisted Robust Header Compression (LLA ROHC) - Header Compression"; break;
- case 62: str = "- 4099 None Reserved for standard service options"; break;
- case 68: str = "(EVRC-B NB) Enhanced Variable Rate Voice Service"; break;
- case 70: str = "(EVRC-B WB) Enhanced Variable Rate Voice Service"; break;
- case 73: str = "(EVRC-NW) Enhanced Variable Rate Voice Service"; break;
- case 4100: str = "Asynchronous Data Service, Revision 1 (9.6 or 14.4 kbps)"; break;
- case 4101: str = "Group 3 Facsimile, Revision 1 (9.6 or 14.4 kbps)"; break;
- case 4102: str = "Reserved for standard service option"; break;
- case 4103: str = "Packet Data Service: Internet or ISO Protocol Stack, Revision 1 (9.6 or 14.4 kbps)"; break;
- case 4104: str = "Packet Data Service: CDPD Protocol Stack, Revision 1 (9.6 or 14.4 kbps)"; break;
- default:
- if ((so >= 4105) && (so <= 32767)) { str = "Reserved for standard service options"; }
- else if ((so >= 32769) && (so <= 32771)) { str = "Proprietary QUALCOMM Incorporated"; }
- else if ((so >= 32772) && (so <= 32775)) { str = "Proprietary OKI Telecom"; }
- else if ((so >= 32776) && (so <= 32779)) { str = "Proprietary Lucent Technologies"; }
- else if ((so >= 32780) && (so <=32783)) { str = "Nokia"; }
- else if ((so >= 32784) && (so <=32787)) { str = "NORTEL NETWORKS"; }
- else if ((so >= 32788) && (so <=32791)) { str = "Sony Electronics Inc."; }
- else if ((so >= 32792) && (so <=32795)) { str = "Motorola"; }
- else if ((so >= 32796) && (so <=32799)) { str = "QUALCOMM Incorporated"; }
- else if ((so >= 32800) && (so <=32803)) { str = "QUALCOMM Incorporated"; }
- else if ((so >= 32804) && (so <=32807)) { str = "QUALCOMM Incorporated"; }
- else if ((so >= 32808) && (so <=32811)) { str = "QUALCOMM Incorporated"; }
- else if ((so >= 32812) && (so <=32815)) { str = "Lucent Technologies"; }
- else if ((so >= 32816) && (so <=32819)) { str = "Denso International"; }
- else if ((so >= 32820) && (so <=32823)) { str = "Motorola"; }
- else if ((so >= 32824) && (so <=32827)) { str = "Denso International"; }
- else if ((so >= 32828) && (so <=32831)) { str = "Denso International"; }
- else if ((so >= 32832) && (so <=32835)) { str = "Denso International"; }
- else if ((so >= 32836) && (so <=32839)) { str = "NEC America"; }
- else if ((so >= 32840) && (so <=32843)) { str = "Samsung Electronics"; }
- else if ((so >= 32844) && (so <=32847)) { str = "Texas Instruments Incorporated"; }
- else if ((so >= 32848) && (so <=32851)) { str = "Toshiba Corporation"; }
- else if ((so >= 32852) && (so <=32855)) { str = "LG Electronics Inc."; }
- else if ((so >= 32856) && (so <=32859)) { str = "VIA Telecom Inc."; }
- else { str = "Reserved"; }
- break;
+ if (str == NULL)
+ {
+ if ((so >= 4105) && (so <= 32767))
+ {
+ str = "Reserved for standard service options";
+ }
+ else
+ {
+ str = "Reserved";
+ }
}
return(str);
}
+static void
+content_fill_aux(
+ tvbuff_t *tvb,
+ proto_tree *tree,
+ guint32 offset,
+ guint8 content_len,
+ guint8 fill_bits,
+ int hf_content,
+ int hf_content_fill_bits)
+{
+ static guint8 lo_masks[8] = { 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff };
+ guint8 oct;
-/* ELEMENT FUNCTIONS */
+ proto_tree_add_item(tree, hf_content, tvb, offset, content_len, ENC_NA);
-#define EXTRANEOUS_DATA_CHECK(edc_len, edc_max_len) \
- if ((edc_len) > (edc_max_len)) \
- { \
- proto_tree_add_text(tree, tvb, \
- curr_offset, (edc_len) - (edc_max_len), "Extraneous Data"); \
- curr_offset += ((edc_len) - (edc_max_len)); \
+ offset += content_len;
+
+ if (fill_bits)
+ {
+ oct = tvb_get_guint8(tvb, offset - 1);
+
+ other_decode_bitfield_value(a_bigbuf, oct, lo_masks[fill_bits-1], 8);
+ proto_tree_add_uint_format(tree, hf_content_fill_bits, tvb, offset - 1, 1,
+ oct & lo_masks[fill_bits-1],
+ "%s = Fill Bits",
+ a_bigbuf);
}
+}
+
-#define EXTRANEOUS_DATA_CHECK_EXPERT(edc_len, edc_max_len) \
+/* ELEMENT FUNCTIONS */
+
+#define EXTRANEOUS_DATA_CHECK(edc_len, edc_max_len) \
if ((edc_len) > (edc_max_len)) \
{ \
proto_tree_add_expert(tree, pinfo, &ei_ansi_a_extraneous_data, \
@@ -940,8 +1648,8 @@ ansi_a_so_int_to_str(
#define SHORT_DATA_CHECK(sdc_len, sdc_min_len) \
if ((sdc_len) < (sdc_min_len)) \
{ \
- proto_tree_add_text(tree, tvb, \
- curr_offset, (sdc_len), "Short Data (?)"); \
+ proto_tree_add_expert(tree, pinfo, &ei_ansi_a_short_data, \
+ tvb, curr_offset, (sdc_len)); \
curr_offset += (sdc_len); \
return(curr_offset - offset); \
}
@@ -975,31 +1683,14 @@ elem_chan_num(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 o
switch (global_a_variant)
{
case A_VARIANT_IOS401:
- proto_tree_add_text(tree,
- tvb, curr_offset, 2,
- "Channel Number: %u",
- value);
+ proto_tree_add_item(tree, hf_ansi_a_channel_number, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
g_snprintf(add_string, string_len, " - (%u)", value);
break;
case A_VARIANT_IOS501:
- other_decode_bitfield_value(a_bigbuf, value >> 8, 0xf8, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, value >> 8, 0x07, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : ARFCN (MSB): %u",
- a_bigbuf,
- value & 0x07ff);
-
- other_decode_bitfield_value(a_bigbuf, value & 0x00ff, 0xff, 8);
- proto_tree_add_text(tree, tvb, curr_offset + 1, 1,
- "%s : ARFCN (LSB)",
- a_bigbuf);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_16_f800, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_IOS5_channel_number, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
g_snprintf(add_string, string_len, " - (ARFCN: %u)", value & 0x07ff);
break;
@@ -1015,107 +1706,69 @@ elem_chan_num(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 o
/*
* IOS 6.2.2.7
*/
+
+static const value_string ansi_a_speech_or_data_indicator_vals[] = {
+ { 0x0, "No Alert" },
+ { 0x1, "Speech" },
+ { 0x2, "Data" },
+ { 0x3, "Signaling" },
+ { 0, NULL}
+};
+
+static const value_string ansi_a_channel_rate_and_type_vals[] = {
+ { 0x00, "Reserved (invalid)" },
+ { 0x01, "DCCH" },
+ { 0x02, "Reserved for future use (invalid)" },
+ { 0x08, "Full rate TCH channel Bm" },
+ { 0x09, "Half rate TCH channel Lm" },
+ { 0, NULL}
+};
+
+static const value_string ansi_a_speech_enc_or_data_rate_vals[] = {
+ { 0x00, "No Resources Required (invalid)" },
+ { 0x01, "Reserved" },
+ { 0x02, "Reserved" },
+ { 0x03, "TIA/EIA-IS-2000 8 kb/s vocoder" },
+ { 0x04, "8 kb/s enhanced vocoder (EVRC)" },
+ { 0x05, "13 kb/s vocoder" },
+ { 0x06, "Adaptive Differential PCM" },
+ { 0, NULL}
+};
+
static guint8
elem_chan_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
{
guint8 oct;
guint32 curr_offset;
- const gchar *str = NULL;
- gboolean data;
curr_offset = offset;
- data = FALSE;
- oct = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_ansi_a_speech_or_data_indicator, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- switch (oct)
- {
- case 0: str = "No Alert"; break;
- case 1: str = "Speech"; break;
- case 2: str = "Data"; data = TRUE; break;
- case 3: str = "Signaling"; break;
- default:
- str = "Unknown";
- break;
- }
-
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "Speech or Data Indicator: %s",
- str);
+ oct = tvb_get_guint8(tvb, curr_offset);
- g_snprintf(add_string, string_len, " - (%s)", str);
+ g_snprintf(add_string, string_len, " - (%s)",
+ val_to_str_const(oct, ansi_a_speech_or_data_indicator_vals, "Unknown"));
curr_offset++;
NO_MORE_DATA_CHECK(len);
- oct = tvb_get_guint8(tvb, curr_offset);
-
- switch (oct)
- {
- case 0: str = "Reserved (invalid)"; break;
- case 1: str = "DCCH"; break;
- case 2: str = "Reserved for future use (invalid)"; break;
- case 8: str = "Full rate TCH channel Bm"; break;
- case 9: str = "Half rate TCH channel Lm"; break;
- default:
- str = "Unknown";
- break;
- }
-
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "Channel Rate and Type: %s",
- str);
+ proto_tree_add_item(tree, hf_ansi_a_chan_rate_and_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
NO_MORE_DATA_CHECK(len);
- oct = tvb_get_guint8(tvb, curr_offset);
-
- if (data)
+ if (oct == 0x02)
{
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Extension",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : %sTransparent service",
- a_bigbuf,
- (oct & 0x40) ? "Non-" : "");
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x3f, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ proto_tree_add_item(tree, hf_ansi_a_chan_type_data_ext, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_chan_type_data_transparent, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_3f, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
}
else
{
- switch (oct)
- {
- case 0: str = "No Resources Required (invalid)"; break;
- case 1: str = "Reserved"; break;
- case 2: str = "Reserved"; break;
- case 3: str = "TIA/EIA-IS-2000 8 kb/s vocoder"; break;
- case 4: str = "8 kb/s enhanced vocoder (EVRC)"; break;
- case 5: str = "13 kb/s vocoder"; break;
- case 6: str = "ADPCM"; break;
- default:
- str = "Reserved";
- break;
- }
-
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "Speech Encoding Algorithm/data rate + Transparency Indicator: %s",
- str);
+ proto_tree_add_item(tree, hf_ansi_a_speech_enc_or_data_rate, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
}
curr_offset++;
@@ -1128,40 +1781,26 @@ elem_chan_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32
/*
* IOS 5 4.2.83
*/
+
+static const value_string ansi_a_return_cause_vals[] = {
+ { 0x00, "Normal access" },
+ { 0x01, "Service redirection failed as a result of system not found" },
+ { 0x02, "Service redirection failed as a result of protocol mismatch" },
+ { 0x03, "Service redirection failed as a result of registration rejection" },
+ { 0x04, "Service redirection failed as a result of wrong SID" },
+ { 0x05, "Service redirection failed as a result of wrong NID" },
+ { 0, NULL}
+};
+
static guint8
elem_return_cause(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint8 oct;
- const gchar *str;
guint32 curr_offset;
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- switch (oct & 0x0f)
- {
- case 0: str = "Normal access"; break;
- case 1: str = "Service redirection failed as a result of system not found"; break;
- case 2: str = "Service redirection failed as a result of protocol mismatch"; break;
- case 3: str = "Service redirection failed as a result of registration rejection"; break;
- case 4: str = "Service redirection failed as a result of wrong SID"; break;
- case 5: str = "Service redirection failed as a result of wrong NID"; break;
- default:
- str = "Reserved";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Return Cause: %s",
- a_bigbuf,
- str);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_return_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
@@ -1173,70 +1812,42 @@ elem_return_cause(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint
/*
* IOS 6.2.2.8
*/
+
+static const value_string ansi_a_rf_chan_id_timeslot_number_vals[] = {
+ { 0x00, "Centered on N" },
+ { 0x01, "Channel below N" },
+ { 0x02, "Channel above N" },
+ { 0x03, "Reserved" },
+ { 0, NULL}
+};
+
static guint8
elem_rf_chan_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string, int string_len)
{
- guint8 oct;
guint32 value;
guint32 curr_offset;
curr_offset = offset;
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "Color Code");
+ proto_tree_add_item(tree, hf_ansi_a_rf_chan_id_color_code, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xfc, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : N-AMPS",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : ANSI/EIA/TIA-553",
- a_bigbuf);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_fc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_rf_chan_id_n_amps_based, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_rf_chan_id_amps_based, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xfc, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x03, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Timeslot Number",
- a_bigbuf);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_fc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_rf_chan_id_timeslot, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
- value = tvb_get_ntohs(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_16_f800, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_rf_chan_id_channel_number, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, value >> 8, 0xf8, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, value >> 8, 0x07, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : ARFCN (MSB): %u",
- a_bigbuf,
- value & 0x07ff);
-
- other_decode_bitfield_value(a_bigbuf, value & 0x00ff, 0xff, 8);
- proto_tree_add_text(tree, tvb, curr_offset + 1, 1,
- "%s : ARFCN (LSB)",
- a_bigbuf);
+ value = tvb_get_ntohs(tvb, curr_offset);
g_snprintf(add_string, string_len, " - (ARFCN: %u)", value & 0x07ff);
@@ -1258,20 +1869,10 @@ elem_sr_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offs
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xf8, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f8, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_sr_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : SR_ID: %u",
- a_bigbuf,
- oct & 0x07);
+ oct = tvb_get_guint8(tvb, curr_offset);
g_snprintf(add_string, string_len, " - (%u)", oct);
@@ -1293,23 +1894,10 @@ elem_sid(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset
curr_offset = offset;
- value = tvb_get_ntohs(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, value >> 8, 0x80, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_16_8000, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_sid, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, value >> 8, 0x7f, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : SID (MSB), %u",
- a_bigbuf,
- value & 0x7fff);
-
- other_decode_bitfield_value(a_bigbuf, value & 0x00ff, 0xff, 8);
- proto_tree_add_text(tree, tvb, curr_offset + 1, 1,
- "%s : SID (LSB)",
- a_bigbuf);
+ value = tvb_get_ntohs(tvb, curr_offset);
g_snprintf(add_string, string_len, " - (SID: %u)", value & 0x7fff);
@@ -1327,104 +1915,70 @@ static guint8
elem_is95_chan_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
{
guint8 oct;
+ guint8 num_chans;
+ guint8 chan_num;
guint32 value;
guint32 curr_offset;
+ proto_item *item;
+ proto_tree *subtree;
curr_offset = offset;
+ proto_tree_add_item(tree, hf_ansi_a_is95_chan_id_hho, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_is95_chan_id_num_chans_add, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+
oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Hard Handoff",
- a_bigbuf);
+ proto_tree_add_uint_format_value(tree, hf_ansi_a_is95_chan_id_frame_offset, tvb, curr_offset, 1,
+ oct & 0x0f, "%u (%.2f ms)", oct & 0x0f, (oct & 0x0f) * 1.25);
- other_decode_bitfield_value(a_bigbuf, oct, 0x70, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Number of Channels to Add: %u",
- a_bigbuf,
- (oct & 0x70) >> 4);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Frame Offset: (%u), %.2f ms",
- a_bigbuf,
- oct & 0x0f,
- (oct & 0x0f) * 1.25);
+ num_chans = (oct & 0x70) >> 4;
curr_offset++;
NO_MORE_DATA_CHECK(len);
- SHORT_DATA_CHECK(len - (curr_offset - offset), 4);
-
- do
+ if (num_chans > 0)
{
- oct = tvb_get_guint8(tvb, curr_offset);
-
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "Walsh Code Channel Index: %u",
- oct);
-
- curr_offset++;
-
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xff, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Pilot PN Code (LSB)",
- a_bigbuf);
-
- curr_offset++;
-
- value = oct;
- oct = tvb_get_guint8(tvb, curr_offset);
- value |= ((guint32) (oct & 0x80)) << 1;
+ SHORT_DATA_CHECK(len - (curr_offset - offset), 4);
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Pilot PN Code (MSB): %u",
- a_bigbuf,
- value);
+ chan_num = 0;
+ do
+ {
+ item =
+ proto_tree_add_text(tree, tvb, curr_offset, 4,
+ "Channel [%u]",
+ chan_num + 1);
- other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Power Combined",
- a_bigbuf);
+ subtree = proto_item_add_subtree(item, ett_chan_list);
- other_decode_bitfield_value(a_bigbuf, oct, 0x20, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Frequency Included",
- a_bigbuf);
+ proto_tree_add_item(subtree, hf_ansi_a_is95_chan_id_walsh_code_chan_idx, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, oct, 0x18, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ curr_offset += 1;
- value = tvb_get_guint8(tvb, curr_offset + 1) | ((oct & 0x07) << 8);
+ proto_tree_add_item(subtree, hf_ansi_a_is95_chan_id_pilot_pn, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_is95_chan_id_power_combined, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_is95_chan_id_freq_incl, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_24_001800, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_is95_chan_id_channel_number, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : ARFCN (MSB): %u",
- a_bigbuf,
- value);
+ /*
+ * only use the first channel number
+ */
+ if (add_string[0] == '\0')
+ {
+ value = tvb_get_ntohs(tvb, curr_offset + 1);
- curr_offset++;
+ g_snprintf(add_string, string_len, " - (ARFCN: %u)", value & 0x07ff);
+ }
- other_decode_bitfield_value(a_bigbuf, value & 0x00ff, 0xff, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : ARFCN (LSB)",
- a_bigbuf);
+ curr_offset += 3;
- if (add_string[0] == '\0')
- {
- g_snprintf(add_string, string_len, " - (ARFCN: %u)", value);
+ chan_num++;
}
-
- curr_offset++;
+ while (((len - (curr_offset - offset)) >= 4) &&
+ (chan_num < num_chans));
}
- while ((len - (curr_offset - offset)) >= 4);
EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
@@ -1439,16 +1993,38 @@ elem_is95_chan_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint
/*
* IOS 6.2.2.12
*/
+
+static const value_string ansi_a_enc_info_ident_vals[] = {
+ { 0x00, "Not Used - Invalid value" },
+ { 0x01, "SME Key: Signaling Message Encryption Key" },
+ { 0x02, "Reserved (VPM: Voice Privacy Mask)" },
+ { 0x03, "Reserved" },
+ { 0x04, "Private Longcode" },
+ { 0x05, "Data Key (ORYX)" },
+ { 0x06, "Initial RAND" },
+ { 0, NULL}
+};
+
+static const value_string ansi_a_enc_info_status_vals[] = {
+ { 0x00, "Active" },
+ { 0x01, "Inactive" },
+ { 0, NULL}
+};
+
+static const value_string ansi_a_enc_info_available_vals[] = {
+ { 0x00, "Available" },
+ { 0x01, "Not available" },
+ { 0, NULL}
+};
+
static guint8
elem_enc_info(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
{
guint8 oct;
- guint8 oct_len;
- guint32 curr_offset;
- const gchar *str;
+ guint32 curr_offset, saved_offset;
guint8 num_recs;
- proto_tree *subtree;
proto_item *item;
+ proto_tree *subtree;
curr_offset = offset;
@@ -1456,76 +2032,50 @@ elem_enc_info(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 o
while ((len - (curr_offset - offset)) >= 2)
{
- num_recs++;
+ saved_offset = curr_offset;
oct = tvb_get_guint8(tvb, curr_offset);
- switch ((oct & 0x7c) >> 2)
- {
- case 0: str = "Not Used - Invalid value"; break;
- case 1: str = "SME Key: Signaling Message Encryption Key"; break;
- case 2: str = "Reserved (VPM: Voice Privacy Mask)"; break;
- case 3: str = "Reserved"; break;
- case 4: str = "Private Longcode"; break;
- case 5: str = "Data Key (ORYX)"; break;
- case 6: str = "Initial RAND"; break;
- default:
- str = "Reserved";
- break;
- }
-
item =
proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "Encryption Info [%u]: (%u) %s",
- num_recs,
- (oct & 0x7c) >> 2,
- str);
+ tvb, curr_offset, -1,
+ "Encryption Info [%u]: %s (%u)",
+ num_recs + 1,
+ val_to_str_const((oct & 0x7c) >> 2, ansi_a_enc_info_ident_vals, "Reserved"),
+ (oct & 0x7c) >> 2);
subtree = proto_item_add_subtree(item, ett_ansi_enc_info);
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : Extension",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x7c, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : Encryption Parameter Identifier: (%u) %s",
- a_bigbuf,
- (oct & 0x7c) >> 2,
- str);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : Status: %s",
- a_bigbuf,
- (oct & 0x02) ? "active" : "inactive");
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : Available: algorithm is %savailable",
- a_bigbuf,
- (oct & 0x01) ? "" : "not ");
+ proto_tree_add_item(subtree, hf_ansi_a_extension_8_80, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_enc_info_enc_parm_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_enc_info_status, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_enc_info_available, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
- oct_len = tvb_get_guint8(tvb, curr_offset);
+ if (oct & 0x80)
+ {
+ oct = tvb_get_guint8(tvb, curr_offset);
- proto_tree_add_uint(subtree, hf_ansi_a_length, tvb,
- curr_offset, 1, oct_len);
+ proto_tree_add_uint(subtree, hf_ansi_a_length, tvb,
+ curr_offset, 1, oct);
- curr_offset++;
+ curr_offset++;
- if (oct_len > 0)
- {
- SHORT_DATA_CHECK(len - (curr_offset - offset), oct_len);
+ if (oct > 0)
+ {
+ SHORT_DATA_CHECK(len - (curr_offset - offset), oct);
- proto_tree_add_text(subtree, tvb, curr_offset, oct_len,
- "Encryption Parameter value");
+ proto_tree_add_text(subtree, tvb, curr_offset, oct,
+ "Encryption Parameter value");
- curr_offset += oct_len;
+ curr_offset += oct;
+ }
}
+
+ proto_item_set_len(item, curr_offset - saved_offset);
+
+ num_recs++;
}
g_snprintf(add_string, string_len, " - %u record%s",
@@ -1548,157 +2098,119 @@ elem_enc_info(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 o
/*
* IOS 6.2.2.15
- */
+ *
+ * IOS 5 4.2.12
+ */
+
+static const value_string ansi_a_cm2_rf_power_cap_vals[] = {
+ { 0x00, "Class 1, vehicle and portable" },
+ { 0x01, "Class 2, portable" },
+ { 0x02, "Class 3, handheld" },
+ { 0x03, "Class 4, handheld" },
+ { 0x04, "Class 5, handheld" },
+ { 0x05, "Class 6, handheld" },
+ { 0x06, "Class 7, handheld" },
+ { 0x07, "Class 8, handheld" },
+ { 0, NULL}
+};
+
+static const value_string ansi_a_cm2_scm_ext_scm_ind_vals[] = {
+ { 0x00, "Band Classes 1, 4, 14" },
+ { 0x01, "Other bands" },
+ { 0, NULL}
+};
+
+static const value_string ansi_a_cm2_scm_dual_mode_vals[] = {
+ { 0x00, "CDMA Only (Always)" },
+ { 0x01, "Dual Mode (invalid)" },
+ { 0, NULL}
+};
+
+static const value_string ansi_a_cm2_scm_slotted_class_vals[] = {
+ { 0x00, "Non-Slotted" },
+ { 0x01, "Slotted" },
+ { 0, NULL}
+};
+
+static const value_string ansi_a_cm2_scm_meid_configured_vals[] = {
+ { 0x00, "MEID not configured" },
+ { 0x01, "MEID configured" },
+ { 0, NULL}
+};
+
+static const value_string ansi_a_cm2_scm_transmission_vals[] = {
+ { 0x00, "Continuous" },
+ { 0x01, "Discontinuous" },
+ { 0, NULL}
+};
+
+static const value_string ansi_a_cm2_scm_power_class_vals[] = {
+ { 0x00, "Class I" },
+ { 0x01, "Class II" },
+ { 0x02, "Class III" },
+ { 0x03, "Reserved" },
+ { 0, NULL}
+};
+
static guint8
elem_cm_info_type_2(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
{
- guint8 oct, oct2;
- guint8 num_bands, band_class_count;
+ guint8 oct;
+ guint8 num_bands, band_class_count, band_class_entry_len, p_rev;
guint32 curr_offset;
gint band_class;
- proto_tree *subtree;
proto_item *item;
- const gchar *str;
+ proto_tree *subtree;
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_ansi_a_cm2_mob_p_rev, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_10, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_cm2_see_list, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_cm2_rf_power_cap, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, oct, 0xe0, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Mobile P_REV: %u",
- a_bigbuf,
- (oct & 0xe0) >> 5);
+ oct = tvb_get_guint8(tvb, curr_offset);
g_snprintf(add_string, string_len, " - P_REV (%u)", (oct & 0xe0) >> 5);
- other_decode_bitfield_value(a_bigbuf, oct, 0x10, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : See List of Entries",
- a_bigbuf);
-
- switch (oct & 0x07)
- {
- case 0: str = "Class 1, vehicle and portable"; break;
- case 1: str = "Class 2, portable"; break;
- case 2: str = "Class 3, handheld"; break;
- case 3: str = "Class 4, handheld"; break;
- case 4: str = "Class 5, handheld"; break;
- case 5: str = "Class 6, handheld"; break;
- case 6: str = "Class 7, handheld"; break;
- default:
- str = "Class 8, handheld";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : RF Power Capability: %s",
- a_bigbuf,
- str);
-
curr_offset++;
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "Reserved");
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_ff, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : NAR_AN_CAP: N-AMPS %ssupported",
- a_bigbuf,
- (oct & 0x80) ? "" : "not ");
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : IS-95: %ssupported",
- a_bigbuf,
- (oct & 0x40) ? "" : "not ");
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x20, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Slotted: mobile is %sin slotted mode",
- a_bigbuf,
- (oct & 0x20) ? "" : "not ");
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x18, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x04, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : DTX: mobile is %scapable of DTX",
- a_bigbuf,
- (oct & 0x04) ? "" : "not ");
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Mobile Term: mobile is %scapable of receiving incoming calls",
- a_bigbuf,
- (oct & 0x02) ? "" : "not ");
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ proto_tree_add_item(tree, hf_ansi_a_cm2_nar_an_cap, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_cm2_is95, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_cm2_slotted, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_18, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_cm2_dtx, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_cm2_mobile_term, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_cm2_analog_cap, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
NO_MORE_DATA_CHECK(len);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "Reserved");
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_ff, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
NO_MORE_DATA_CHECK(len);
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xfc, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Mobile Term: mobile is %scapable of receiving incoming calls",
- a_bigbuf,
- (oct & 0x02) ? "" : "not ");
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : PACA Supported Indicator (PSI): mobile station %s PACA",
- a_bigbuf,
- (oct & 0x01) ? "supports" : "does not support");
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_fc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_cm2_mobile_term, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_cm2_psi, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
NO_MORE_DATA_CHECK(len);
- oct = tvb_get_guint8(tvb, curr_offset);
-
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "SCM Length: %u",
- oct);
+ proto_tree_add_item(tree, hf_ansi_a_cm2_scm_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
- oct = tvb_get_guint8(tvb, curr_offset);
-
item =
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "Station Class Mark: %u",
- oct);
+ proto_tree_add_item(tree, hf_ansi_a_cm2_scm, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
/*
* following SCM decode is from:
@@ -1707,210 +2219,95 @@ elem_cm_info_type_2(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gui
*/
subtree = proto_item_add_subtree(item, ett_scm);
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : Extended SCM Indicator: %s",
- a_bigbuf,
- (oct & 0x80) ? "Band Classes 1,4" : "Other bands");
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : %s",
- a_bigbuf,
- (oct & 0x40) ? "Dual Mode" : "CDMA Only");
+ proto_tree_add_item(subtree, hf_ansi_a_cm2_scm_ext_scm_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_cm2_scm_dual_mode, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_cm2_scm_slotted, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_cm2_scm_meid_configured, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_cm2_scm_25MHz_bandwidth, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_cm2_scm_transmission, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_cm2_scm_power_class, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, oct, 0x20, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : %s",
- a_bigbuf,
- (oct & 0x20) ? "Slotted" : "Non-Slotted");
+ oct = tvb_get_guint8(tvb, curr_offset);
if (oct & 0x10)
{
- str = "";
g_strlcat(add_string, " (MEID configured)", string_len);
a_meid_configured = TRUE;
}
- else
- {
- str = "not ";
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x10, 8);
- proto_tree_add_boolean_format(subtree, hf_ansi_a_meid_configured, tvb,
- curr_offset, 1, a_meid_configured,
- "%s : MEID %sconfigured",
- a_bigbuf,
- str);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : 25 MHz Bandwidth",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x04, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : %s Transmission",
- a_bigbuf,
- (oct & 0x04) ? "Discontinuous" : "Continuous");
-
- switch (oct & 0x03)
- {
- case 0x00: str = "Class I"; break;
- case 0x01: str = "Class II"; break;
- case 0x02: str = "Class III"; break;
- case 0x03: str = "Reserved"; break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x03, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : Power Class for Band Class 0 Analog Operation: %s",
- a_bigbuf,
- str);
curr_offset++;
NO_MORE_DATA_CHECK(len);
- band_class_count = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_ansi_a_cm2_scm_band_class_count, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "Count of Band Class Entries: %u",
- band_class_count);
+ band_class_count = tvb_get_guint8(tvb, curr_offset);
curr_offset++;
- oct = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_ansi_a_cm2_scm_band_class_entry_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "Band Class Entry Length: %u",
- oct);
+ band_class_entry_len = tvb_get_guint8(tvb, curr_offset);
curr_offset++;
NO_MORE_DATA_CHECK(len);
- if (oct > 0)
+ if (band_class_entry_len > 0)
{
- SHORT_DATA_CHECK(len - (curr_offset - offset), 3);
+ SHORT_DATA_CHECK(len - (curr_offset - offset), band_class_entry_len);
num_bands = 0;
do
{
item =
- proto_tree_add_text(tree, tvb, curr_offset, 3,
+ proto_tree_add_text(tree, tvb, curr_offset, band_class_entry_len,
"Band Class Entry [%u]",
num_bands + 1);
subtree = proto_item_add_subtree(item, ett_cm2_band_class);
- oct = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_8_e0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_scm_band_class_entry_band_class, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, oct, 0xe0, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ oct = tvb_get_guint8(tvb, curr_offset);
band_class = oct & 0x1f;
- if ((band_class < 0) || (band_class >= (gint) NUM_BAND_CLASS_STR))
- {
- str = "Reserved";
- }
- else
- {
- str = band_class_str[band_class];
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x1f, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Band Class: %s",
- a_bigbuf,
- str);
curr_offset++;
- oct2 = tvb_get_guint8(tvb, curr_offset);
- oct = tvb_get_guint8(tvb, curr_offset+1);
+ p_rev = tvb_get_guint8(tvb, curr_offset + 1);
- if (oct < 4)
+ if (p_rev < 4)
{
- other_decode_bitfield_value(a_bigbuf, oct2, 0x80, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Band Class Air Interfaces OP_MODE0 (CDMA mode in Band Class 1 and Band Class 4)",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct2, 0x40, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Band Class Air Interfaces OP_MODE1 (CDMA mode in Band Class 0 and Band Class 3)",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct2, 0x20, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Band Class Air Interfaces OP_MODE2 (Analog mode)",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct2, 0x10, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Band Class Air Interfaces OP_MODE3 (Wide analog mode)",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct2, 0x08, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Band Class Air Interfaces OP_MODE4 (Narrow analog mode)",
- a_bigbuf);
+ /*
+ * As per C.S0005 Table 2.7.4.15-1
+ */
+ proto_tree_add_item(subtree, hf_ansi_a_scm_band_class_entry_opmode0_1, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_scm_band_class_entry_opmode1_1, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_scm_band_class_entry_opmode2_1, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_scm_band_class_entry_opmode3_1, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_scm_band_class_entry_opmode4_1, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_8_07, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
}
else
{
- other_decode_bitfield_value(a_bigbuf, oct2, 0x80, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Band Class Air Interfaces OP_MODE0 (CDMA mode)",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct2, 0x40, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Band Class Air Interfaces OP_MODE1 (CDMA mode)",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct2, 0x20, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Band Class Air Interfaces OP_MODE2 (Analog mode)",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct2, 0x10, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Band Class Air Interfaces OP_MODE3 (Wide analog mode)",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct2, 0x08, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Band Class Air Interfaces OP_MODE4 (Narrow analog mode)",
- a_bigbuf);
+ /*
+ * As per C.S0005 Table 2.7.4.15-2
+ */
+ proto_tree_add_item(subtree, hf_ansi_a_scm_band_class_entry_opmode0_2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_scm_band_class_entry_opmode1_2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_scm_band_class_entry_opmode2_2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_scm_band_class_entry_opmode3_2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_scm_band_class_entry_opmode4_2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_scm_band_class_entry_opmode5_2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_scm_band_class_entry_opmode6_2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_8_01, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
}
- other_decode_bitfield_value(a_bigbuf, oct2, 0x07, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
curr_offset++;
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "Band Class MS Protocol Level: %u",
- oct);
+ proto_tree_add_item(subtree, hf_ansi_a_scm_band_class_entry_p_rev, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
@@ -1918,7 +2315,7 @@ elem_cm_info_type_2(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gui
num_bands++;
}
- while (((len - (curr_offset - offset)) >= 3) &&
+ while (((len - (curr_offset - offset)) >= band_class_entry_len) &&
(num_bands < band_class_count));
}
@@ -1929,7 +2326,32 @@ elem_cm_info_type_2(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gui
/*
* IOS 6.2.2.16
+ *
+ * IOS 5 4.2.13
*/
+
+static const value_string ansi_a_mid_odd_even_ind_vals[] = {
+ { 0x00, "Even" },
+ { 0x01, "Odd" },
+ { 0, NULL}
+};
+
+static const value_string ansi_a_mid_type_vals[] = {
+ { 0x01, "MEID" },
+ { 0x02, "Broadcast Address" },
+ { 0x05, "ESN" },
+ { 0x06, "IMSI" },
+ { 0, NULL}
+};
+
+static const value_string ansi_a_mid_broadcast_priority_vals[] = {
+ { 0x00, "Normal" },
+ { 0x01, "Interactive" },
+ { 0x02, "Urgent" },
+ { 0x03, "Emergency" },
+ { 0, NULL}
+};
+
static guint8
elem_mid(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
{
@@ -1945,26 +2367,11 @@ elem_mid(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset
switch (oct & 0x07)
{
- case 1:
+ case 1: /* MEID */
other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : MEID Hex Digit 1: %X",
- a_bigbuf,
- (oct & 0xf0) >> 4);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Odd/Even Indicator: %s",
- a_bigbuf,
- (oct & 0x08) ? "ODD" : "EVEN");
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Type of Identity: MEID",
- a_bigbuf);
+ proto_tree_add_item(tree, hf_ansi_a_meid_mid_digit_1, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_mid_odd_even_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_mid_type_of_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
a_bigbuf[0] = Dgt_meid.out[(oct & 0xf0) >> 4];
curr_offset++;
@@ -1976,67 +2383,29 @@ elem_mid(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset
curr_offset += len - (curr_offset - offset);
- proto_tree_add_string_format_value(tree,
- hf_ansi_a_meid,
- tvb, offset + 1, len - 1,
+ proto_tree_add_string_format_value(tree, hf_ansi_a_meid, tvb, offset + 1, len - 1,
a_bigbuf,
"%s",
a_bigbuf);
- g_snprintf(add_string, string_len, " - %s (%s)",
- "MEID",
+ g_snprintf(add_string, string_len, " - MEID (%s)",
a_bigbuf);
break;
- case 2:
- other_decode_bitfield_value(a_bigbuf, oct, 0xf8, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Type of Identity: Broadcast",
- a_bigbuf);
+ case 2: /* Broadcast Address */
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f8, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_mid_type_of_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- switch ((oct & 0xc0) >> 6)
- {
- case 0: str = "Normal"; break;
- case 1: str = "Interactive"; break;
- case 2: str = "Urgent"; break;
- default:
- str = "Emergency";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xc0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Priority: %s",
- a_bigbuf,
- str);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x3f, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Message ID: %u",
- a_bigbuf,
- oct & 0x3f);
+ proto_tree_add_item(tree, hf_ansi_a_mid_broadcast_priority, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_mid_broadcast_message_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
- oct = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_ansi_a_mid_broadcast_zone_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "Zone ID: %u",
- oct);
+ oct = tvb_get_guint8(tvb, curr_offset);
g_snprintf(add_string, string_len, " - Broadcast (Zone ID: %u)", oct);
@@ -2044,134 +2413,55 @@ elem_mid(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset
value = tvb_get_ntohs(tvb, curr_offset);
- switch (value)
- {
- case 0x0000: str = "Unknown or unspecified"; break;
- case 0x0001: str = "Emergency Broadcasts"; break;
- case 0x0002: str = "Administrative"; break;
- case 0x0003: str = "Maintenance"; break;
- case 0x0004: str = "General News - Local"; break;
- case 0x0005: str = "General News - Regional"; break;
- case 0x0006: str = "General News - National"; break;
- case 0x0007: str = "General News - International"; break;
- case 0x0008: str = "Business/Financial News - Local"; break;
- case 0x0009: str = "Business/Financial News - Regional"; break;
- case 0x000A: str = "Business/Financial News - National"; break;
- case 0x000B: str = "Business/Financial News - International"; break;
- case 0x000C: str = "Sports News - Local"; break;
- case 0x000D: str = "Sports News - Regional"; break;
- case 0x000E: str = "Sports News - National"; break;
- case 0x000F: str = "Sports News - International"; break;
- case 0x0010: str = "Entertainment News - Local"; break;
- case 0x0011: str = "Entertainment News - Regional"; break;
- case 0x0012: str = "Entertainment News - National"; break;
- case 0x0013: str = "Entertainment News - International"; break;
- case 0x0014: str = "Local Weather"; break;
- case 0x0015: str = "Area Traffic Reports"; break;
- case 0x0016: str = "Local Airport Flight Schedules"; break;
- case 0x0017: str = "Restaurants"; break;
- case 0x0018: str = "Lodgings"; break;
- case 0x0019: str = "Retail Directory"; break;
- case 0x001A: str = "Advertisements"; break;
- case 0x001B: str = "Stock Quotes"; break;
- case 0x001C: str = "Employment Opportunities"; break;
- case 0x001D: str = "Medical/Health/Hospitals"; break;
- case 0x001E: str = "Technology News"; break;
- case 0x001F: str = "Multi-category"; break;
- default:
- if ((value >= 0x0020) && (value <= 0x8000)) { str = "Reserved for standard service categories"; }
- else { str = "Reserved for proprietary service categories"; }
- break;
- }
+ str = val_to_str_ext_const(value, &ansi_tsb58_srvc_cat_strings_ext, "Reserved");
- proto_tree_add_text(tree,
- tvb, curr_offset, 2,
- "Service: (%u) %s",
+ proto_tree_add_uint_format_value(tree, hf_ansi_a_mid_broadcast_srvc_cat, tvb, curr_offset, 2,
value,
- str);
+ "%s (%u)",
+ str,
+ value);
curr_offset += 2;
oct = tvb_get_guint8(tvb, curr_offset);
- switch (oct)
- {
- case 0: str = "Unknown or unspecified"; break;
- case 1: str = "English"; break;
- case 2: str = "French"; break;
- case 3: str = "Spanish"; break;
- case 4: str = "Japanese"; break;
- case 5: str = "Korean"; break;
- case 6: str = "Chinese"; break;
- case 7: str = "Hebrew"; break;
- default:
- str = "Reserved";
- break;
- }
+ str = val_to_str_ext_const(oct, &ansi_tsb58_language_ind_strings_ext, "Reserved");
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "Language: (%u) %s",
+ proto_tree_add_uint_format_value(tree, hf_ansi_a_mid_broadcast_language, tvb, curr_offset, 1,
oct,
- str);
+ "%s (%u)",
+ str,
+ oct);
curr_offset++;
break;
- case 0:
- other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Unused",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Odd/Even Indicator: %s",
- a_bigbuf,
- (oct & 0x08) ? "ODD" : "EVEN");
+ case 5: /* ESN */
+ proto_tree_add_item(tree, hf_ansi_a_mid_unused, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_mid_odd_even_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_mid_type_of_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Type of Identity: No Identity Code",
- a_bigbuf);
+ curr_offset++;
- g_snprintf(add_string, string_len, " - No Identity Code");
+ value = tvb_get_ntohl(tvb, curr_offset);
- curr_offset++;
+ proto_tree_add_uint(tree, hf_ansi_a_esn,
+ tvb, curr_offset, 4,
+ value);
- if (len > 1)
- {
- proto_tree_add_text(tree, tvb, curr_offset, len - 1,
- "Format not supported");
- }
+ g_snprintf(add_string, string_len, " - %sESN (0x%04x)",
+ a_meid_configured ? "p" : "",
+ value);
- curr_offset += len - 1;
+ curr_offset += 4;
break;
- case 6:
- other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Identity Digit 1: %c",
- a_bigbuf,
- Dgt_msid.out[(oct & 0xf0) >> 4]);
+ case 6: /* IMSI */
+ proto_tree_add_uint_format_value(tree, hf_ansi_a_imsi_mid_digit_1, tvb, curr_offset, 1,
+ (oct & 0xf0) >> 4, "%c", Dgt_msid.out[(oct & 0xf0) >> 4]);
- other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Odd/Even Indicator: %s",
- a_bigbuf,
- (oct & 0x08) ? "ODD" : "EVEN");
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Type of Identity: %s",
- a_bigbuf,
- ((oct & 0x07) == 1) ? "MIN" : "IMSI");
+ proto_tree_add_item(tree, hf_ansi_a_mid_odd_even_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_mid_type_of_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
a_bigbuf[0] = Dgt_msid.out[(oct & 0xf0) >> 4];
curr_offset++;
@@ -2181,126 +2471,24 @@ elem_mid(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset
my_dgt_tbcd_unpack(&a_bigbuf[1], poctets, len - (curr_offset - offset),
&Dgt_msid);
- proto_tree_add_string_format(tree,
- ((oct & 0x07) == 1) ? hf_ansi_a_min : hf_ansi_a_imsi,
- tvb, curr_offset, len - (curr_offset - offset),
+ proto_tree_add_string_format(tree, hf_ansi_a_imsi, tvb, curr_offset, len - (curr_offset - offset),
a_bigbuf,
"BCD Digits: %s",
a_bigbuf);
- g_snprintf(add_string, string_len, " - %s (%s)",
- ((oct & 0x07) == 1) ? "MIN" : "IMSI",
+ g_snprintf(add_string, string_len, " - IMSI (%s)",
a_bigbuf);
+ g_snprintf(ansi_a_mid_add_string, sizeof(ansi_a_mid_add_string), "MID=%s", a_bigbuf);
curr_offset += len - (curr_offset - offset);
break;
- case 3:
- other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Unused",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Odd/Even Indicator: %s",
- a_bigbuf,
- (oct & 0x08) ? "ODD" : "EVEN");
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Type of Identity: Interface Directory Number",
- a_bigbuf);
-
- g_snprintf(add_string, string_len, " - Interface Directory Number");
-
- curr_offset++;
-
- if (len > 1)
- {
- proto_tree_add_text(tree, tvb, curr_offset, len - 1,
- "Format not supported");
- }
-
- curr_offset += len - 1;
- break;
-
- case 4:
- other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Unused",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Odd/Even Indicator: %s",
- a_bigbuf,
- (oct & 0x08) ? "ODD" : "EVEN");
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Type of Identity: TMSI",
- a_bigbuf);
-
- g_snprintf(add_string, string_len, " - TMSI");
-
- curr_offset++;
-
- if (len > 1)
- {
- proto_tree_add_text(tree, tvb, curr_offset, len - 1,
- "Format not supported");
- }
-
- curr_offset += len - 1;
- break;
-
- case 5:
- other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Unused",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Odd/Even Indicator: %s",
- a_bigbuf,
- (oct & 0x08) ? "ODD" : "EVEN");
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Type of Identity: ESN",
- a_bigbuf);
-
- curr_offset++;
-
- value = tvb_get_ntohl(tvb, curr_offset);
-
- proto_tree_add_uint(tree, hf_ansi_a_esn,
- tvb, curr_offset, 4,
- value);
-
- g_snprintf(add_string, string_len, " - %sESN (0x%04x)",
- a_meid_configured ? "p" : "",
- value);
-
- curr_offset += 4;
- break;
-
default:
- proto_tree_add_text(tree, tvb, curr_offset, len,
- "Format Unknown");
+ proto_tree_add_expert_format(tree, pinfo, &ei_ansi_a_unknown_format, tvb, curr_offset, len,
+ "Mobile Identity ID type, %u, unknown/unsupported",
+ (oct & 0x07));
- g_snprintf(add_string, string_len, " - Format Unknown");
+ g_snprintf(add_string, string_len, " - Format Unknown/Unsupported");
curr_offset += len;
break;
@@ -2313,6 +2501,8 @@ elem_mid(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset
/*
* IOS 6.2.2.17
+ *
+ * IOS 5 4.2.14
*/
static guint8
elem_sci(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string, int string_len)
@@ -2322,22 +2512,17 @@ elem_sci(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_sci_sign, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, oct, 0xf8, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ oct = tvb_get_guint8(tvb, curr_offset);
other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Slot Cycle Index: %u",
- a_bigbuf,
- oct & 0x07);
+ proto_tree_add_uint_format_value(tree, hf_ansi_a_sci, tvb, curr_offset, 1,
+ (oct & 0x07), "%s%u", (oct & 0x08) ? "-" : "", oct & 0x07);
- g_snprintf(add_string, string_len, " - (%u)", oct & 0x07);
+ g_snprintf(add_string, string_len, " - (%s%u)",
+ (oct & 0x08) ? "-" : "", oct & 0x07);
curr_offset++;
@@ -2348,6 +2533,8 @@ elem_sci(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset
/*
* IOS 6.2.2.18
+ *
+ * IOS 5 4.2.15
*/
static guint8
elem_prio(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
@@ -2357,34 +2544,15 @@ elem_prio(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offse
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xc0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_c0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, oct, 0x3c, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Call Priority Level: %u",
- a_bigbuf,
- (oct & 0x3c) >> 2);
+ oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Queuing %sallowed",
- a_bigbuf,
- (oct & 0x02) ? "" : "not ");
+ proto_tree_add_uint_format_value(tree, hf_ansi_a_prio_call_priority, tvb, curr_offset, 1,
+ (oct & 0x3c) >> 2, "Priority Level %u", (oct & 0x3c) >> 2);
- other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Preemption %sallowed",
- a_bigbuf,
- (oct & 0x01) ? "" : "not ");
+ proto_tree_add_item(tree, hf_ansi_a_prio_queue_allowed, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_prio_preempt_allowed, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
g_snprintf(add_string, string_len, " - (%u)", (oct & 0x3c) >> 2);
@@ -2406,10 +2574,9 @@ elem_p_rev(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offs
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_ansi_a_mob_p_rev, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "MOB_P_REV");
+ oct = tvb_get_guint8(tvb, curr_offset);
g_snprintf(add_string, string_len, " - (%u)", oct);
@@ -2423,210 +2590,146 @@ elem_p_rev(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offs
/*
* IOS 6.2.2.19
*/
-static guint8
-elem_cause(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
-{
- guint8 oct;
- guint32 value;
- guint32 curr_offset;
- const gchar *str = NULL;
-
- curr_offset = offset;
-
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Extension",
- a_bigbuf);
-
- if (oct & 0x80)
- {
- /* 2 octet cause */
-
- if ((oct & 0x0f) == 0x00)
- {
- /* national cause */
- switch ((oct & 0x70) >> 4)
- {
- case 0: str = "Normal Event"; break;
- case 1: str = "Normal Event"; break;
- case 2: str = "Resource Unavailable"; break;
- case 3: str = "Service or option not available"; break;
- case 4: str = "Service or option not implemented"; break;
- case 5: str = "Invalid message (e.g., parameter out of range)"; break;
- case 6: str = "Protocol error"; break;
- default:
- str = "Interworking";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x70, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Cause Class: %s",
- a_bigbuf,
- str);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : National Cause",
- a_bigbuf);
+static const value_string ansi_a_elem_cause_vals[] = {
+ { 0x00, "Radio interface message failure"},
+ { 0x01, "Radio interface failure"},
+ { 0x02, "Uplink Quality"},
+ { 0x03, "Uplink strength"},
+ { 0x04, "Downlink quality"},
+ { 0x05, "Downlink strength"},
+ { 0x06, "Distance"},
+ { 0x07, "OAM&P intervention"},
+ { 0x08, "MS busy"},
+ { 0x09, "Call processing"},
+ { 0x0A, "Reversion to old channel"},
+ { 0x0B, "Handoff successful"},
+ { 0x0C, "No response from MS"},
+ { 0x0D, "Timer expired"},
+ { 0x0E, "Better cell (power budget)"},
+ { 0x0F, "Interference"},
+ { 0x10, "Packet call going dormant"},
+ { 0x11, "Service option not available"},
+
+ { 0x12, "Invalid Call"},
+ { 0x13, "Successful operation"},
+ { 0x14, "Normal call release"},
- curr_offset++;
-
- value = tvb_get_guint8(tvb, curr_offset);
+ /* IOS 5 */
+ { 0x15, "Short data burst authentication failure"},
+ { 0x17, "Time critical relocation/handoff"},
+ { 0x18, "Network optimization"},
+ { 0x19, "Power down from dormant state"},
+ { 0x1A, "Authentication failure"},
- proto_tree_add_uint_format(tree, hf_ansi_a_cause_2, tvb,
- curr_offset, 1,
- ((oct & 0x7f) << 8) | value,
- "Cause Value");
+ { 0x1B, "Inter-BS Soft Handoff Drop Target"},
+ { 0x1D, "Intra-BS Soft Handoff Drop Target"},
- curr_offset++;
+ /* IOS 5 */
+ { 0x1E, "Autonomous Registration by the Network"},
- g_snprintf(add_string, string_len, " - (National Cause)");
- }
- else
- {
- value = tvb_get_guint8(tvb, curr_offset + 1);
+ { 0x20, "Equipment failure"},
+ { 0x21, "No radio resource available"},
+ { 0x22, "Requested terrestrial resource unavailable"},
- other_decode_bitfield_value(a_bigbuf, oct, 0x7f, 8);
+ /* IOS 5 */
+ { 0x23, "A2p RTP Payload Type not available"},
+ { 0x24, "A2p Bearer Format Address Type not available"},
- proto_tree_add_uint_format(tree, hf_ansi_a_cause_2, tvb,
- curr_offset, 1,
- ((oct & 0x7f) << 8) | value,
- "%s : Cause (MSB): %u",
- a_bigbuf,
- ((oct & 0x7f) << 8) | value);
+ { 0x25, "BS not equipped"},
+ { 0x26, "MS not equipped (or incapable)"},
- curr_offset++;
+ /* IOS 5 */
+ { 0x27, "2G only sector"},
+ { 0x28, "3G only sector"},
- other_decode_bitfield_value(a_bigbuf, value, 0xff, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Cause (LSB)",
- a_bigbuf);
-
- curr_offset++;
- }
- }
- else
- {
- switch (oct)
- {
- case 0x00: str = "Radio interface message failure"; break;
- case 0x01: str = "Radio interface failure"; break;
- case 0x02: str = "Uplink Quality"; break;
- case 0x03: str = "Uplink strength"; break;
- case 0x04: str = "Downlink quality"; break;
- case 0x05: str = "Downlink strength"; break;
- case 0x06: str = "Distance"; break;
- case 0x07: str = "OAM&P intervention"; break;
- case 0x08: str = "MS busy"; break;
- case 0x09: str = "Call processing"; break;
- case 0x0A: str = "Reversion to old channel"; break;
- case 0x0B: str = "Handoff successful"; break;
- case 0x0C: str = "No response from MS"; break;
- case 0x0D: str = "Timer expired"; break;
- case 0x0E: str = "Better cell (power budget)"; break;
- case 0x0F: str = "Interference"; break;
- case 0x10: str = "Packet call going dormant"; break;
- case 0x11: str = "Service option not available"; break;
-
- case 0x12: str = "Invalid Call"; break;
- case 0x13: str = "Successful operation"; break;
- case 0x14: str = "Normal call release"; break;
+ { 0x29, "PACA Call Queued"},
/* IOS 5 */
- case 0x15: str = "Short data burst authentication failure"; break;
- case 0x17: str = "Time critical relocation/handoff"; break;
- case 0x18: str = "Network optimization"; break;
- case 0x19: str = "Power down from dormant state"; break;
- case 0x1A: str = "Authentication failure"; break;
+ { 0x2A, "Handoff Blocked"},
- case 0x1B: str = "Inter-BS Soft Handoff Drop Target"; break;
- case 0x1D: str = "Intra-BS Soft Handoff Drop Target"; break;
+ { 0x2B, "Alternate signaling type reject"},
/* IOS 5 */
- case 0x1E: str = "Autonomous Registration by the Network"; break;
+ { 0x2C, "A2p Resource not available"},
- case 0x20: str = "Equipment failure"; break;
- case 0x21: str = "No radio resource available"; break;
- case 0x22: str = "Requested terrestrial resource unavailable"; break;
+ { 0x2D, "PACA Queue Overflow"},
+ { 0x2E, "PACA Cancel Request Rejected"},
+ { 0x30, "Requested transcoding/rate adaptation unavailable"},
+ { 0x31, "Lower priority radio resources not available"},
+ { 0x32, "PCF resources not available"}, /* IOS 4 */
+ { 0x33, "TFO Control request Failed"},
/* IOS 5 */
- case 0x23: str = "A2p RTP Payload Type not available"; break;
- case 0x24: str = "A2p Bearer Format Address Type not available"; break;
+ { 0x34, "MS rejected order"},
- case 0x25: str = "BS not equipped"; break;
- case 0x26: str = "MS not equipped (or incapable)"; break;
+ { 0x40, "Ciphering algorithm not supported"},
+ { 0x41, "Private Long Code not available or not supported."},
+ { 0x42, "Requested MUX option or rates not available."},
+ { 0x43, "Requested Privacy Configuration unavailable"},
/* IOS 5 */
- case 0x27: str = "2G only sector"; break;
- case 0x28: str = "3G only sector"; break;
-
- case 0x29: str = "PACA Call Queued"; break;
+ { 0x45, "PDS-related capability not available or not supported"},
+
+ { 0x50, "Terrestrial circuit already allocated"},
+ { 0x60, "Protocol Error between BS and MSC"},
+ { 0x71, "ADDS message too long for delivery on the paging channel"},
+ { 0x72, "MS-to-IWF TCP connection failure"},
+ { 0x73, "ATH0 (Modem hang up) Command"},
+ { 0x74, "+FSH/+FHNG (Fax session ended) Command"},
+ { 0x75, "No carrier"},
+ { 0x76, "PPP protocol failure"},
+ { 0x77, "PPP session closed by the MS"},
+ { 0x78, "Do not notify MS"},
+ { 0x79, "PCF (or PDSN) resources are not available"},
+ { 0x7A, "Data ready to send"},
/* IOS 5 */
- case 0x2A: str = "Handoff Blocked"; break;
+ { 0x7B, "Concurrent authentication"},
- case 0x2B: str = "Alternate signaling type reject"; break;
+ { 0x7F, "Handoff procedure time-out"},
+ { 0, NULL}
+};
- /* IOS 5 */
- case 0x2C: str = "A2p Resource not available"; break;
+static const value_string_ext ansi_a_elem_cause_vals_ext = VALUE_STRING_EXT_INIT(ansi_a_elem_cause_vals);
- case 0x2D: str = "PACA Queue Overflow"; break;
- case 0x2E: str = "PACA Cancel Request Rejected"; break;
- case 0x30: str = "Requested transcoding/rate adaptation unavailable"; break;
- case 0x31: str = "Lower priority radio resources not available"; break;
- case 0x32: str = "PCF resources not available"; break; /* IOS 4 */
- case 0x33: str = "TFO Control request Failed"; break;
+static guint8
+elem_cause(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
+{
+ guint8 oct;
+ guint32 curr_offset;
+ const gchar *str = NULL;
- /* IOS 5 */
- case 0x34: str = "MS rejected order"; break;
+ curr_offset = offset;
- case 0x40: str = "Ciphering algorithm not supported"; break;
- case 0x41: str = "Private Long Code not available or not supported."; break;
- case 0x42: str = "Requested MUX option or rates not available."; break;
- case 0x43: str = "Requested Privacy Configuration unavailable"; break;
+ oct = tvb_get_guint8(tvb, curr_offset);
- /* IOS 5 */
- case 0x45: str = "PDS-related capability not available or not supported"; break;
-
- case 0x50: str = "Terrestrial circuit already allocated"; break;
- case 0x60: str = "Protocol Error between BS and MSC"; break;
- case 0x71: str = "ADDS message too long for delivery on the paging channel"; break;
- case 0x72: str = "MS-to-IWF TCP connection failure"; break;
- case 0x73: str = "ATH0 (Modem hang up) Command"; break;
- case 0x74: str = "+FSH/+FHNG (Fax session ended) Command"; break;
- case 0x75: str = "No carrier"; break;
- case 0x76: str = "PPP protocol failure"; break;
- case 0x77: str = "PPP session closed by the MS"; break;
- case 0x78: str = "Do not notify MS"; break;
- case 0x79: str = "PCF (or PDSN) resources are not available"; break;
- case 0x7A: str = "Data ready to send"; break;
+ if (oct & 0x80)
+ {
+ /* 2 octet cause */
- /* IOS 5 */
- case 0x7B: str = "Concurrent authentication"; break;
+ proto_tree_add_item(tree, hf_ansi_a_cause_2_ext, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_cause_2, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+
+ curr_offset += 2;
+ }
+ else
+ {
+ proto_tree_add_item(tree, hf_ansi_a_cause_1_ext, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- case 0x7F: str = "Handoff procedure time-out"; break;
+ switch (oct)
+ {
default:
- str = "Reserved for future use";
break;
}
- other_decode_bitfield_value(a_bigbuf, oct, 0x7f, 8);
- proto_tree_add_uint_format(tree, hf_ansi_a_cause_1, tvb,
- curr_offset, 1, oct,
- "%s : Cause: (%u) %s",
- a_bigbuf,
- oct & 0x7f,
- str);
+ str = val_to_str_ext_const(oct & 0x7f, &ansi_a_elem_cause_vals_ext, "Reserved for future use");
- curr_offset++;
+ proto_tree_add_uint_format_value(tree, hf_ansi_a_cause_1, tvb, curr_offset, 1, oct,
+ "%s (%u)", str, oct & 0x7f);
g_snprintf(add_string, string_len, " - (%u) %s", oct & 0x7f, str);
+
+ curr_offset++;
}
EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
@@ -2639,7 +2742,7 @@ elem_cause(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offs
* Formats everything after the discriminator, shared function.
*/
static guint8
-elem_cell_id_aux(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len, guint8 disc)
+elem_cell_id_aux(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len, guint8 disc)
{
guint32 value;
guint32 market_id;
@@ -2699,7 +2802,7 @@ elem_cell_id_aux(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gch
break;
default:
- proto_tree_add_text(tree, tvb, curr_offset, len,
+ proto_tree_add_expert_format(tree, pinfo, &ei_ansi_a_unknown_format, tvb, curr_offset, len,
"Cell ID - Non IOS format");
curr_offset += len;
@@ -2710,35 +2813,20 @@ elem_cell_id_aux(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gch
}
static guint8
-elem_cell_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
+elem_cell_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
{
guint8 oct;
guint32 curr_offset;
- const gchar *str = NULL;
curr_offset = offset;
oct = tvb_get_guint8(tvb, curr_offset);
-
- if (oct >= (gint) NUM_CELL_DISC_STR)
- {
- str = "Unknown";
- }
- else
- {
- str = cell_disc_str[oct];
- }
-
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "Cell Identification Discriminator: (%u) %s",
- oct,
- str);
+ proto_tree_add_item(tree, hf_ansi_a_cell_id_disc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
curr_offset +=
- elem_cell_id_aux(tvb, tree, curr_offset, len - (curr_offset - offset), add_string, string_len, oct);
+ elem_cell_id_aux(tvb, pinfo, tree, curr_offset, len - (curr_offset - offset), add_string, string_len, oct);
/* no length check possible */
@@ -2749,45 +2837,30 @@ elem_cell_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 of
* IOS 6.2.2.21
*/
static guint8
-elem_cell_id_list(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
+elem_cell_id_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
{
guint8 oct;
guint16 consumed;
guint8 num_cells;
guint32 curr_offset;
- proto_item *item = NULL;
- proto_tree *subtree = NULL;
- const gchar *str = NULL;
+ proto_item *item;
+ proto_tree *subtree;
curr_offset = offset;
oct = tvb_get_guint8(tvb, curr_offset);
-
- if (oct >= (gint) NUM_CELL_DISC_STR)
- {
- str = "Unknown";
- }
- else
- {
- str = cell_disc_str[oct];
- }
-
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "Cell Identification Discriminator: (%u) %s",
- oct,
- str);
+ proto_tree_add_item(tree, hf_ansi_a_cell_id_disc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
NO_MORE_DATA_CHECK(len);
num_cells = 0;
+
do
{
item =
- proto_tree_add_text(tree,
- tvb, curr_offset, -1,
+ proto_tree_add_text(tree, tvb, curr_offset, -1,
"Cell [%u]",
num_cells + 1);
@@ -2795,7 +2868,7 @@ elem_cell_id_list(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint
add_string[0] = '\0';
consumed =
- elem_cell_id_aux(tvb, subtree, curr_offset, len - (curr_offset - offset), add_string, string_len, oct);
+ elem_cell_id_aux(tvb, pinfo, subtree, curr_offset, len - (curr_offset - offset), add_string, string_len, oct);
if (add_string[0] != '\0')
{
@@ -2826,29 +2899,25 @@ elem_cic(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset
{
guint32 value;
guint32 curr_offset;
+ proto_item *item = NULL;
+ proto_tree *subtree = NULL;
curr_offset = offset;
- value = tvb_get_ntohs(tvb, curr_offset);
+ item =
+ proto_tree_add_item(tree, hf_ansi_a_cic, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, value, 0xffe0, 16);
- proto_tree_add_text(tree,
- tvb, curr_offset, 2,
- "%s : PCM Multiplexer: %u",
- a_bigbuf,
- (value & 0xffe0) >> 5);
+ subtree = proto_item_add_subtree(item, ett_cic);
- other_decode_bitfield_value(a_bigbuf, value, 0x001f, 16);
- proto_tree_add_text(tree,
- tvb, curr_offset, 2,
- "%s : Timeslot: %u",
- a_bigbuf,
- value & 0x001f);
+ proto_tree_add_item(subtree, hf_ansi_a_cic_pcm_multi, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_cic_timeslot, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
- curr_offset += 2;
+ value = tvb_get_ntohs(tvb, curr_offset);
g_snprintf(add_string, string_len, " - (%u) (0x%04x)", value, value);
+ curr_offset += 2;
+
/* no length check possible */
return(curr_offset - offset);
@@ -2863,37 +2932,29 @@ elem_cic_ext(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 of
guint8 oct;
guint32 value;
guint32 curr_offset;
+ proto_item *item;
+ proto_tree *subtree;
const gchar *str;
curr_offset = offset;
- value = tvb_get_ntohs(tvb, curr_offset);
+ item =
+ proto_tree_add_item(tree, hf_ansi_a_cic_ext_cic, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, value, 0xffe0, 16);
- proto_tree_add_text(tree,
- tvb, curr_offset, 2,
- "%s : PCM Multiplexer: %u",
- a_bigbuf,
- (value & 0xffe0) >> 5);
+ subtree = proto_item_add_subtree(item, ett_cic);
- other_decode_bitfield_value(a_bigbuf, value, 0x001f, 16);
- proto_tree_add_text(tree,
- tvb, curr_offset, 2,
- "%s : Timeslot: %u",
- a_bigbuf,
- value & 0x001f);
+ proto_tree_add_item(subtree, hf_ansi_a_cic_ext_pcm_multi, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_cic_ext_timeslot, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
- curr_offset += 2;
+ value = tvb_get_ntohs(tvb, curr_offset);
g_snprintf(add_string, string_len, " - (%u) (0x%04x)", value, value);
- oct = tvb_get_guint8(tvb, curr_offset);
+ curr_offset += 2;
- other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+
+ oct = tvb_get_guint8(tvb, curr_offset);
switch (oct & 0x0f)
{
@@ -2903,12 +2964,8 @@ elem_cic_ext(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 of
break;
}
- other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Circuit Mode: %s",
- a_bigbuf,
- str);
+ proto_tree_add_uint_format_value(tree, hf_ansi_a_cic_ext_circuit_mode, tvb, curr_offset, 1,
+ oct, "%%s (%u)", str, oct);
curr_offset++;
@@ -2923,30 +2980,13 @@ elem_cic_ext(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 of
static guint8
elem_ssci(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
- guint8 oct;
guint32 curr_offset;
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xfc, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Mobile Originated Position Determination",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Global Emergency Call Indication",
- a_bigbuf);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_fc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_ssci_mopd, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_ssci_geci, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
@@ -2967,71 +3007,49 @@ elem_ssci(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offse
* Formats everything no length check
*/
static guint8
-elem_downlink_re_aux(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
+elem_downlink_re_aux(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
{
- guint8 oct;
guint8 disc;
guint16 consumed;
guint8 num_cells;
guint8 curr_cell;
- guint32 value;
guint32 curr_offset;
- proto_item *item = NULL;
- proto_tree *subtree = NULL;
- const gchar *str;
+ proto_item *item;
+ proto_tree *subtree;
curr_offset = offset;
- num_cells = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_ansi_a_downlink_re_num_cells, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "Number of Cells: %u",
- num_cells);
+ num_cells = tvb_get_guint8(tvb, curr_offset);
curr_offset++;
NO_MORE_DATA_CHECK(len);
disc = tvb_get_guint8(tvb, curr_offset);
-
- if (disc >= (gint) NUM_CELL_DISC_STR)
- {
- str = "Unknown";
- }
- else
- {
- str = cell_disc_str[disc];
- }
-
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "Cell Identification Discriminator: (%u) %s",
- disc,
- str);
+ proto_tree_add_item(tree, hf_ansi_a_cell_id_disc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
NO_MORE_DATA_CHECK(len);
- SHORT_DATA_CHECK(len - (curr_offset - offset), (guint32) 3 + ANSI_A_CELL_ID_LEN(disc));
-
curr_cell = 0;
do
{
- curr_cell++;
+ SHORT_DATA_CHECK(len - (curr_offset - offset), (guint32) 3 + ANSI_A_CELL_ID_LEN(disc));
item =
- proto_tree_add_text(tree,
- tvb, curr_offset, -1,
+ proto_tree_add_text(tree, tvb, curr_offset, -1,
"Cell [%u]",
- curr_cell);
+ curr_cell + 1);
subtree = proto_item_add_subtree(item, ett_cell_list);
add_string[0] = '\0';
consumed =
- elem_cell_id_aux(tvb, subtree, curr_offset,
+ elem_cell_id_aux(tvb, pinfo, subtree, curr_offset,
len - (curr_offset - offset), add_string, string_len, disc);
if (add_string[0] != '\0')
@@ -3043,29 +3061,16 @@ elem_downlink_re_aux(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len,
curr_offset += consumed;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xc0, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x3f, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Downlink Signal Strength Raw: %u",
- a_bigbuf,
- oct & 0x3f);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_c0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_downlink_re_sig_str_raw, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
- value = tvb_get_ntohs(tvb, curr_offset);
-
- proto_tree_add_text(tree,
- tvb, curr_offset, 2,
- "CDMA Target One Way Delay: %u",
- value);
+ proto_tree_add_item(tree, hf_ansi_a_downlink_re_cdma_towd, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
curr_offset += 2;
+
+ curr_cell++;
}
while (curr_cell < num_cells);
@@ -3079,14 +3084,14 @@ elem_downlink_re_aux(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len,
* IOS 6.2.2.25
*/
static guint8
-elem_downlink_re(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
+elem_downlink_re(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
{
guint32 curr_offset;
curr_offset = offset;
curr_offset +=
- elem_downlink_re_aux(tvb, tree, offset, len, add_string, string_len);
+ elem_downlink_re_aux(tvb, pinfo, tree, offset, len, add_string, string_len);
EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
@@ -3097,11 +3102,10 @@ elem_downlink_re(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint3
* IOS 6.2.2.140
*/
static guint8
-elem_downlink_re_list(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
+elem_downlink_re_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
{
guint16 consumed;
guint8 num_envs;
- guint8 oct_len;
guint32 curr_offset;
proto_item *item = NULL;
proto_tree *subtree = NULL;
@@ -3112,28 +3116,20 @@ elem_downlink_re_list(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, g
while ((len - (curr_offset - offset)) > 0)
{
- num_envs++;
-
item =
- proto_tree_add_text(tree,
- tvb, curr_offset, -1,
+ proto_tree_add_text(tree, tvb, curr_offset, -1,
"Environment [%u]",
- num_envs);
+ num_envs + 1);
subtree = proto_item_add_subtree(item, ett_re_list);
- oct_len = tvb_get_guint8(tvb, curr_offset);
-
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "Environment Length: %u",
- oct_len);
+ proto_tree_add_item(subtree, hf_ansi_a_downlink_re_entry_env_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
add_string[0] = '\0';
consumed =
- elem_downlink_re_aux(tvb, subtree, curr_offset, len - (curr_offset - offset), add_string, string_len);
+ elem_downlink_re_aux(tvb, pinfo, subtree, curr_offset, len - (curr_offset - offset), add_string, string_len);
if (add_string[0] != '\0')
{
@@ -3146,6 +3142,8 @@ elem_downlink_re_list(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, g
proto_item_set_len(item, consumed + 1);
curr_offset += consumed;
+
+ num_envs++;
}
g_snprintf(add_string, string_len, " - %u environment%s",
@@ -3216,11 +3214,12 @@ elem_s_pdsn_ip_addr(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gui
/*
* IOS 6.2.2.31
+ *
+ * IOS 5 4.2.25
*/
static guint8
-elem_ho_pow_lev(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
+elem_ho_pow_lev(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
{
- guint8 oct;
guint16 consumed;
guint8 num_cells;
proto_item *item = NULL;
@@ -3229,47 +3228,27 @@ elem_ho_pow_lev(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "Number of Cells: %u",
- oct);
+ proto_tree_add_item(tree, hf_ansi_a_ho_pow_lev_num_cells, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
SHORT_DATA_CHECK(len - (curr_offset - offset), (guint32) 6);
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x60, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : ID Type: %u",
- a_bigbuf,
- (oct & 0x60) >> 5);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x1f, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Handoff Power Level: %u",
- a_bigbuf,
- oct & 0x1f);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_80, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_ho_pow_lev_id_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_ho_pow_lev_pow_lev, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
item =
- proto_tree_add_text(tree,
- tvb, curr_offset, -1,
+ proto_tree_add_text(tree, tvb, curr_offset, -1,
"Cell [1]");
subtree = proto_item_add_subtree(item, ett_cell_list);
add_string[0] = '\0';
consumed =
- elem_cell_id_aux(tvb, subtree, curr_offset,
+ elem_cell_id_aux(tvb, pinfo, subtree, curr_offset,
len - (curr_offset - offset), add_string, string_len, 0x7);
if (add_string[0] != '\0')
@@ -3281,38 +3260,25 @@ elem_ho_pow_lev(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32
curr_offset += consumed;
- num_cells = 1;
+ num_cells = 0;
while ((len - (curr_offset - offset)) >= 3)
{
- num_cells++;
-
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xe0, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x1f, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Handoff Power Level: %u",
- a_bigbuf,
- oct & 0x1f);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_e0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_ho_pow_lev_pow_lev, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
item =
- proto_tree_add_text(tree,
- tvb, curr_offset, -1,
+ proto_tree_add_text(tree, tvb, curr_offset, -1,
"Cell [%u]",
- num_cells);
+ num_cells + 1);
subtree = proto_item_add_subtree(item, ett_cell_list);
add_string[0] = '\0';
consumed =
- elem_cell_id_aux(tvb, subtree, curr_offset,
+ elem_cell_id_aux(tvb, pinfo, subtree, curr_offset,
len - (curr_offset - offset), add_string, string_len, 0x2);
if (add_string[0] != '\0')
@@ -3323,6 +3289,8 @@ elem_ho_pow_lev(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32
proto_item_set_len(item, consumed);
curr_offset += consumed;
+
+ num_cells++;
}
g_snprintf(add_string, string_len, " - %u cell%s",
@@ -3344,16 +3312,14 @@ elem_uz_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offs
curr_offset = offset;
+ proto_tree_add_item(tree, hf_ansi_a_uz_id, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+
value = tvb_get_ntohs(tvb, curr_offset);
- proto_tree_add_text(tree, tvb, curr_offset, 2,
- "UZID: %u",
- value);
+ g_snprintf(add_string, string_len, " - (%u)", value);
curr_offset += 2;
- g_snprintf(add_string, string_len, " - (%u)", value);
-
EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
return(curr_offset - offset);
@@ -3370,11 +3336,10 @@ elem_uz_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offs
static guint8
elem_info_rec_req(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
{
- guint8 rec_type;
- guint8 num_recs;
+ guint8 oct;
guint32 curr_offset;
+ guint8 num_recs;
const gchar *str;
- gint idx;
curr_offset = offset;
@@ -3382,25 +3347,20 @@ elem_info_rec_req(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint
while ((len - (curr_offset - offset)) > 0)
{
- num_recs++;
-
- rec_type = tvb_get_guint8(tvb, curr_offset);
-
- str = try_val_to_str_idx((guint32) rec_type, ansi_rev_ms_info_rec_str, &idx);
+ oct = tvb_get_guint8(tvb, curr_offset);
- if (str == NULL)
- {
- str = "Reserved";
- }
+ str = val_to_str_const((guint32) oct, ansi_rev_ms_info_rec_str, "Reserved");
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "Information Record Type - %u: (%u) %s",
- num_recs,
- rec_type,
- str);
+ proto_tree_add_uint_format(tree, hf_ansi_a_info_rec_req, tvb, curr_offset, 1,
+ oct,
+ "Information Record Type - %u: %s (%u)",
+ num_recs + 1,
+ str,
+ oct);
curr_offset++;
+
+ num_recs++;
}
g_snprintf(add_string, string_len, " - %u request%s",
@@ -3414,39 +3374,35 @@ elem_info_rec_req(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint
/*
* IOS 6.2.2.34
*/
+static const value_string ansi_a_is2000_chan_id_chan_rev_pilot_gating_rate_vals[] = {
+ { 0x00, "Gating rate 1" },
+ { 0x01, "Gating rate 1/2" },
+ { 0x02, "Gating rate 1/4" },
+ { 0x03, "Reserved" },
+ { 0, NULL}
+};
+
static guint8
elem_is2000_chan_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
guint8 oct;
- guint8 num_chan;
- guint32 value;
+ guint8 num_chans;
+ guint8 chan_num;
guint32 curr_offset;
+ proto_item *item;
+ proto_tree *subtree;
const gchar *str;
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_ansi_a_is2000_chan_id_otd, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_is2000_chan_id_chan_count, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : OTD: Mobile will %sbe using OTD",
- a_bigbuf,
- (oct & 0x80) ? "" : "not ");
-
- num_chan = (oct & 0x70) >> 4;
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x70, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Channel Count: %u",
- a_bigbuf,
- num_chan);
+ oct = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_uint_format_value(tree, hf_ansi_a_is2000_chan_id_frame_offset, tvb, curr_offset, 1,
+ oct & 0x0f, "%u (%.2f ms)", oct & 0x0f, (oct & 0x0f) * 1.25);
- other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Frame Offset: (%u), %.2f ms",
- a_bigbuf,
- oct & 0x0f,
- (oct & 0x0f) * 1.25);
+ num_chans = (oct & 0x70) >> 4;
curr_offset++;
@@ -3454,8 +3410,15 @@ elem_is2000_chan_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gui
SHORT_DATA_CHECK(len - (curr_offset - offset), 6);
+ chan_num = 0;
+
do
{
+ item = proto_tree_add_text(tree, tvb, curr_offset, 6,
+ "Channel [%u]", chan_num + 1);
+
+ subtree = proto_item_add_subtree(item, ett_chan_list);
+
oct = tvb_get_guint8(tvb, curr_offset);
switch (oct)
@@ -3464,138 +3427,74 @@ elem_is2000_chan_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gui
case 0x02: str = "Dedicated Control Channel (DCCH) TIA/EIA/IS-2000"; break;
case 0x03: str = "Supplemental Channel (SCH) TIA/EIA/IS-2000"; break;
default:
- if ((oct >= 0x80) && (oct <= 0x9f)) { str = "Reserved for UMTS"; }
- else { str = "Reserved"; }
+ str = "Reserved";
break;
}
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "Physical Channel Type: %s",
- str);
+ proto_tree_add_uint_format_value(subtree, hf_ansi_a_is2000_chan_id_chan_chan_type, tvb, curr_offset, 1,
+ oct, "%s", str);
- curr_offset++;
-
- oct = tvb_get_guint8(tvb, curr_offset);
+ curr_offset += 1;
switch (global_a_variant)
{
case A_VARIANT_IOS401:
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_16_8000, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
break;
case A_VARIANT_IOS501:
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Rev_FCH_Gating",
- a_bigbuf);
+ proto_tree_add_item(subtree, hf_ansi_a_is2000_chan_id_chan_rev_fch_gating, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
break;
}
- switch ((oct & 0x60) >> 5)
- {
- case 0: str = "Gating rate 1"; break;
- case 1: str = "Gating rate 1/2"; break;
- case 2: str = "Gating rate 1/4"; break;
- default:
- str = "Reserved";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x60, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Pilot Gating Rate: %s",
- a_bigbuf,
- str);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x18, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : QOF Mask",
- a_bigbuf);
-
- value = tvb_get_guint8(tvb, curr_offset + 1);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Walsh Code Channel Index (MSB): %u",
- a_bigbuf,
- ((guint32) (oct & 0x07) << 8) | value);
-
- curr_offset++;
-
- other_decode_bitfield_value(a_bigbuf, value, 0xff, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Walsh Code Channel Index (LSB)",
- a_bigbuf);
+ proto_tree_add_item(subtree, hf_ansi_a_is2000_chan_id_chan_rev_pilot_gating_rate, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_is2000_chan_id_chan_qof_mask, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_is2000_chan_id_chan_walsh_code_chan_idx, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
- curr_offset++;
-
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xff, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Pilot PN Code (LSB)",
- a_bigbuf);
-
- curr_offset++;
-
- value = oct;
- oct = tvb_get_guint8(tvb, curr_offset);
- value |= ((guint32) (oct & 0x80)) << 1;
+ curr_offset += 2;
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Pilot PN Code (MSB): %u",
- a_bigbuf,
- value);
+ /*
+ * this field is odd in the IOS specification
+ * one place (only as far as I can tell) that the bits are not MSB first
+ *
+ * SEE THE SPEC BEFORE CHANGING
+ */
+ proto_tree_add_expert(subtree, pinfo, &ei_ansi_a_is2000_chan_id_pilot_pn, tvb, curr_offset, 2);
+ proto_tree_add_item(subtree, hf_ansi_a_is2000_chan_id_chan_pilot_pn_code, tvb, curr_offset, 3, ENC_LITTLE_ENDIAN);
switch (global_a_variant)
{
case A_VARIANT_IOS401:
- other_decode_bitfield_value(a_bigbuf, oct, 0x70, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_24_007000, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
break;
case A_VARIANT_IOS501:
- other_decode_bitfield_value(a_bigbuf, oct, 0x60, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x10, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Power Combined",
- a_bigbuf);
+ proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_24_006000, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_is2000_chan_id_chan_power_combined, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
break;
}
- other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Frequency Included",
- a_bigbuf);
-
- value = tvb_get_guint8(tvb, curr_offset + 1) | ((oct & 0x07) << 8);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : ARFCN (MSB): %u",
- a_bigbuf,
- value);
+ proto_tree_add_item(subtree, hf_ansi_a_is2000_chan_id_chan_freq_incl, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_is2000_chan_id_chan_channel_number, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
+ curr_offset += 3;
- curr_offset++;
+ chan_num++;
+ }
+ while (((len - (curr_offset - offset)) >= 6) &&
+ (chan_num < num_chans));
- other_decode_bitfield_value(a_bigbuf, value & 0x00ff, 0xff, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : ARFCN (LSB)",
- a_bigbuf);
+ switch (global_a_variant)
+ {
+ case A_VARIANT_IOS501:
+ SHORT_DATA_CHECK(len - (curr_offset - offset), 5);
- curr_offset++;
+ proto_tree_add_item(tree, hf_ansi_a_is2000_chan_id_chan_fdc_length, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_is2000_chan_id_chan_fdc_band_class, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_is2000_chan_id_chan_fdc_fwd_chan_freq, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_is2000_chan_id_chan_fdc_rev_chan_freq, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_16_001f, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+ break;
}
- while ((len - (curr_offset - offset)) >= 6);
EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
@@ -3609,57 +3508,46 @@ elem_is2000_chan_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gui
/*
* IOS 6.2.2.36
+ *
+ * IOS 5 4.2.29
*/
static guint8
elem_is95_ms_meas_chan_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
{
- guint8 oct;
guint32 value;
- gint temp_int;
guint32 curr_offset;
- const gchar *str;
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_ansi_a_is95_ms_meas_chan_id_band_class, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
- temp_int = (oct & 0xf8) >> 3;
- if ((temp_int < 0) || (temp_int >= (gint) NUM_BAND_CLASS_STR))
- {
- str = "Reserved";
- }
- else
- {
- str = band_class_str[temp_int];
- }
+ value = tvb_get_ntohs(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_ansi_a_is95_ms_meas_chan_id_channel_number, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, oct, 0xf8, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Band Class: %s",
- a_bigbuf,
- str);
+ g_snprintf(add_string, string_len, " - (ARFCN: %u)", value & 0x07ff);
- value = tvb_get_guint8(tvb, curr_offset + 1) | ((oct & 0x07) << 8);
+ curr_offset += 2;
- other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : ARFCN (MSB): %u",
- a_bigbuf,
- value);
+ EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
- curr_offset++;
+ return(curr_offset - offset);
+}
- other_decode_bitfield_value(a_bigbuf, value & 0x00ff, 0xff, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : ARFCN (LSB)",
- a_bigbuf);
+/*
+ * IOS 5 4.2.33
+ */
+static guint8
+elem_auth_conf_param(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
+{
+ guint32 curr_offset;
+
+ curr_offset = offset;
- g_snprintf(add_string, string_len, " - (ARFCN: %u)", value);
+ proto_tree_add_item(tree, hf_ansi_a_auth_conf_param_randc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
- EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
+ /* no length check possible */
return(curr_offset - offset);
}
@@ -3667,129 +3555,97 @@ elem_is95_ms_meas_chan_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tre
/*
* IOS 6.2.2.37
*/
+static const value_string ansi_a_clg_party_ascii_num_ton_vals[] = {
+ {0, "Unknown"},
+ {1, "International number"},
+ {2, "National number"},
+ {3, "Network-specific number"},
+ {4, "Dedicated PAD access, short code"},
+ {5, "Reserved"},
+ {6, "Reserved"},
+ {7, "Reserved"},
+ { 0, NULL}
+};
+
+static const value_string ansi_a_clg_party_ascii_num_plan_vals[] = {
+ {0, "Unknown"},
+ {1, "ISDN/Telephony Numbering (ITU recommendation E.164/E.163)"},
+ {2, "Reserved"},
+ {3, "Data Numbering (ITU-T Rec. X.121)"},
+ {4, "Telex Numbering (ITU-T Rec. F.69)"},
+ {5, "Reserved"},
+ {6, "Reserved"},
+ {7, "Reserved for extension"},
+ {8, "National Numbering"},
+ {9, "Private Numbering"},
+ {10, "Reserved"},
+ {11, "Reserved"},
+ {12, "Reserved"},
+ {13, "Reserved"},
+ {14, "Reserved"},
+ {15, "Reserved"},
+ { 0, NULL}
+};
+
+static const value_string ansi_a_clg_party_ascii_num_pi_vals[] = {
+ {0, "Presentation allowed"},
+ {1, "Presentation restricted"},
+ {2, "Number not available due to interworking"},
+ {3, "Reserved"},
+ { 0, NULL}
+};
+
+static const value_string ansi_a_clg_party_ascii_num_si_vals[] = {
+ {0, "User-provided, not screened"},
+ {1, "User-provided, verified and passed"},
+ {2, "User-provided, verified and failed"},
+ {3, "Network-provided"},
+ { 0, NULL}
+};
+
static guint8
elem_clg_party_ascii_num(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
{
guint8 oct;
guint32 curr_offset;
guint8 *poctets;
- const gchar *str;
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_ansi_a_extension_8_80, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Extension: %s",
- a_bigbuf,
- (oct & 0x80) ? "Not extended" : "Extended");
-
- switch ((oct & 0x70) >> 4)
- {
- case 0: str = "Unknown"; break;
- case 1: str = "International number"; break;
- case 2: str = "National number"; break;
- case 3: str = "Network-specific number"; break;
- case 4: str = "Dedicated PAD access, short code"; break;
- case 5: str = "Reserved"; break;
- case 6: str = "Reserved"; break;
- default:
- str = "Reserved for extension";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x70, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Type of Number: %s",
- a_bigbuf,
- str);
-
- switch (oct & 0x0f)
- {
- case 0x00: str = "Unknown"; break;
- case 0x01: str = "ISDN/Telephony Numbering (ITU recommendation E.164/E.163)"; break;
- case 0x03: str = "Data Numbering (ITU-T Rec. X.121)"; break;
- case 0x04: str = "Telex Numbering (ITU-T Rec. F.69)"; break;
- case 0x07: str = "Reserved for extension"; break;
- case 0x08: str = "National Numbering"; break;
- case 0x09: str = "Private Numbering"; break;
- default:
- str = "Reserved";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Number Plan Identification: %s",
- a_bigbuf,
- str);
+ oct = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_ansi_a_clg_party_ascii_num_ton, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_clg_party_ascii_num_plan, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
if (!(oct & 0x80))
{
/* octet 3a */
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Extension",
- a_bigbuf);
-
- switch ((oct & 0x60) >> 5)
- {
- case 0: str = "Presentation allowed"; break;
- case 1: str = "Presentation restricted"; break;
- case 2: str = "Number not available due to interworking"; break;
- default:
- str = "Reserved";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x60, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Presentation Indicator: %s",
- a_bigbuf,
- str);
+ proto_tree_add_item(tree, hf_ansi_a_extension_8_80, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- switch (oct & 0x03)
- {
- case 0: str = "User-provided, not screened"; break;
- case 1: str = "User-provided, verified and passed"; break;
- case 2: str = "User-provided, verified and failed"; break;
- default:
- str = "Network-provided";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x1c, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0x03, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Screening Indicator: %s",
- a_bigbuf,
- str);
+ proto_tree_add_item(tree, hf_ansi_a_clg_party_ascii_num_pi, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_1c, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_clg_party_ascii_num_si, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
}
poctets = tvb_get_string(wmem_packet_scope(), tvb, curr_offset, len - (curr_offset - offset));
- proto_tree_add_string_format(tree, hf_ansi_a_clg_party_ascii_num,
- tvb, curr_offset, len - (curr_offset - offset),
+ proto_tree_add_string_format(tree, hf_ansi_a_clg_party_ascii_num, tvb, curr_offset, len - (curr_offset - offset),
(gchar *) poctets,
"Digits: %s",
(gchar *) format_text(poctets, len - (curr_offset - offset)));
- curr_offset += len - (curr_offset - offset);
-
g_snprintf(add_string, string_len, " - (%s)", poctets);
+ curr_offset += len - (curr_offset - offset);
+
EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
return(curr_offset - offset);
@@ -3851,7 +3707,6 @@ static guint8
elem_lai(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
guint8 oct;
- guint16 value;
guint32 curr_offset;
gchar mcc[4];
gchar mnc[4];
@@ -3868,6 +3723,8 @@ elem_lai(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset
mcc[2] = Dgt_tbcd.out[(oct & 0x0f)];
mcc[3] = '\0';
+ proto_tree_add_string(tree, hf_ansi_a_lai_mcc, tvb, curr_offset, 2, mcc);
+
mnc[2] = Dgt_tbcd.out[(oct & 0xf0) >> 4];
oct = tvb_get_guint8(tvb, curr_offset+2);
@@ -3876,21 +3733,11 @@ elem_lai(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset
mnc[1] = Dgt_tbcd.out[(oct & 0xf0) >> 4];
mnc[3] = '\0';
- proto_tree_add_text(tree,
- tvb, curr_offset, 3,
- "Mobile Country Code (MCC): %s, Mobile Network Code (MNC): %s",
- mcc,
- mnc);
+ proto_tree_add_string(tree, hf_ansi_a_lai_mnc, tvb, curr_offset + 1, 2, mnc);
curr_offset += 3;
- value = tvb_get_ntohs(tvb, curr_offset);
-
- proto_tree_add_text(tree,
- tvb, curr_offset, 2,
- "Location Area Code (LAC): 0x%04x (%u)",
- value,
- value);
+ proto_tree_add_item(tree, hf_ansi_a_lai_lac, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
curr_offset += 2;
@@ -3902,6 +3749,30 @@ elem_lai(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset
/*
* IOS 6.2.2.44
*/
+static const value_string ansi_a_rej_cause_vals[] = {
+ { 0x01, "Reserved"},
+ { 0x02, "MIN/IMSI unknown in HLR"},
+ { 0x03, "Illegal MS"},
+ { 0x04, "TMSI/IMSI/MIN unknown in VLR"},
+ { 0x05, "Reserved"},
+ { 0x0b, "Roaming not allowed"},
+ { 0x0c, "Location area not allowed"},
+ { 0x20, "Service option not supported"},
+ { 0x21, "Requested service option not subscribed"},
+ { 0x22, "Service option temporarily out of order"},
+ { 0x26, "Call cannot be identified"},
+ { 0x51, "Network failure"},
+ { 0x56, "Congestion"},
+ { 0x62, "Message type non-existent or not implemented"},
+ { 0x63, "Information element non-existent or not implemented"},
+ { 0x64, "Invalid information element contents"},
+ { 0x65, "Message not compatible with the call state"},
+ { 0x66, "Protocol error, unspecified"},
+ { 0x6e, "Invalid message, unspecified"},
+ { 0x6f, "Mandatory information element error"},
+ { 0, NULL}
+};
+
static guint8
elem_rej_cause(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string, int string_len)
{
@@ -3913,43 +3784,14 @@ elem_rej_cause(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32
oct = tvb_get_guint8(tvb, curr_offset);
- switch (oct)
- {
- case 0x01: str = "Reserved"; break;
- case 0x02: str = "MIN/IMSI unknown in HLR"; break;
- case 0x03: str = "Illegal MS"; break;
- case 0x04: str = "TMSI/IMSI/MIN unknown in VLR"; break;
- case 0x05: str = "Reserved"; break;
- case 0x0b: str = "Roaming not allowed"; break;
- case 0x0c: str = "Location area not allowed"; break;
- case 0x20: str = "Service option not supported"; break;
- case 0x21: str = "Requested service option not subscribed"; break;
- case 0x22: str = "Service option temporarily out of order"; break;
- case 0x26: str = "Call cannot be identified"; break;
- case 0x51: str = "Network failure"; break;
- case 0x56: str = "Congestion"; break;
- case 0x62: str = "Message type non-existent or not implemented"; break;
- case 0x63: str = "Information element non-existent or not implemented"; break;
- case 0x64: str = "Invalid information element contents"; break;
- case 0x65: str = "Message not compatible with the call state"; break;
- case 0x66: str = "Protocol error, unspecified"; break;
- case 0x6e: str = "Invalid message, unspecified"; break;
- case 0x6f: str = "Mandatory information element error"; break;
- default:
- str = "Reserved";
- break;
- }
+ str = val_to_str_const(oct, ansi_a_rej_cause_vals, "Reserved");
+ proto_tree_add_uint_format_value(tree, hf_ansi_a_rej_cause, tvb, curr_offset, 1,
+ oct, "%s (%u)", str, oct);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "Reject Cause Value: (%u) %s",
- oct,
- str);
+ g_snprintf(add_string, string_len, " - (%s)", str);
curr_offset++;
- g_snprintf(add_string, string_len, " - (%s)", str);
-
/* no length check possible */
return(curr_offset - offset);
@@ -3996,6 +3838,14 @@ elem_anchor_pp_addr(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gui
/*
* IOS 6.2.2.45
*/
+static const value_string ansi_a_auth_chlg_param_rand_num_type_vals[] = {
+ {1, "RAND 32 bits"},
+ {2, "RANDU 24 bits"},
+ {4, "RANDSSD 56 bits"},
+ {8, "RANDBS 32 bits"},
+ { 0, NULL}
+};
+
static guint8
elem_auth_chlg_param(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
{
@@ -4005,40 +3855,18 @@ elem_auth_chlg_param(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gu
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- switch (oct & 0x0f)
- {
- case 1: str = "RAND 32 bits"; break;
- case 2: str = "RANDU 24 bits"; break;
- case 4: str = "RANDSSD 56 bits"; break;
- case 8: str = "RANDBS 32 bits"; break;
- default:
- str = "Reserved";
- break;
- }
+ oct = tvb_get_guint8(tvb, curr_offset);
+ str = val_to_str_const(oct & 0x0F, ansi_a_auth_chlg_param_rand_num_type_vals, "Reserved");
+ proto_tree_add_uint_format_value(tree, hf_ansi_a_auth_chlg_param_rand_num_type, tvb, curr_offset, 1,
+ oct & 0x0f, "%s (%u)", str, oct & 0x0f);
- other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Random Number Type: (%u) %s",
- a_bigbuf,
- oct & 0x0f,
- str);
+ g_snprintf(add_string, string_len, " - (%s)", str);
curr_offset++;
- proto_tree_add_text(tree,
- tvb, curr_offset, len - (curr_offset - offset),
- "RAND/RANDU/RANDBS/RANDSSD Value");
-
- g_snprintf(add_string, string_len, " - (%s)", str);
+ proto_tree_add_item(tree, hf_ansi_a_auth_chlg_param_rand, tvb, curr_offset, len - (curr_offset - offset), ENC_NA);
curr_offset += len - (curr_offset - offset);
@@ -4050,6 +3878,13 @@ elem_auth_chlg_param(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gu
/*
* IOS 6.2.2.46
*/
+static const value_string ansi_a_auth_resp_param_sig_type_vals[] = {
+ {1, "AUTHR"},
+ {2, "AUTHU"},
+ {4, "AUTHBS"},
+ { 0, NULL}
+};
+
static guint8
elem_auth_resp_param(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
{
@@ -4059,39 +3894,18 @@ elem_auth_resp_param(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gu
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- switch (oct & 0x0f)
- {
- case 1: str = "AUTHR"; break;
- case 2: str = "AUTHU"; break;
- case 4: str = "AUTHBS"; break;
- default:
- str = "Reserved";
- break;
- }
+ oct = tvb_get_guint8(tvb, curr_offset);
+ str = val_to_str_const(oct & 0x0F, ansi_a_auth_resp_param_sig_type_vals, "Reserved");
+ proto_tree_add_uint_format_value(tree, hf_ansi_a_auth_resp_param_sig_type, tvb, curr_offset, 1,
+ oct & 0x0f, "%s (%u)", str, oct & 0x0f);
- other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Auth Signature Type: (%u) %s",
- a_bigbuf,
- oct & 0x0f,
- str);
+ g_snprintf(add_string, string_len, " - (%s)", str);
curr_offset++;
- proto_tree_add_text(tree,
- tvb, curr_offset, len - (curr_offset - offset),
- "Auth Signature");
-
- g_snprintf(add_string, string_len, " - (%s)", str);
+ proto_tree_add_item(tree, hf_ansi_a_auth_resp_param_sig, tvb, curr_offset, len - (curr_offset - offset), ENC_NA);
curr_offset += len - (curr_offset - offset);
@@ -4111,25 +3925,15 @@ elem_auth_param_count(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, g
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_c0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_auth_param_count_count, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, oct, 0xc0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0x3f, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Count: %u",
- a_bigbuf,
- oct & 0x3f);
+ g_snprintf(add_string, string_len, " - (%u)", oct & 0x3f);
curr_offset++;
- g_snprintf(add_string, string_len, " - (%u)", oct & 0x3f);
-
/* no length check possible */
return(curr_offset - offset);
@@ -4146,17 +3950,14 @@ elem_mwi(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset
curr_offset = offset;
+ proto_tree_add_item(tree, hf_ansi_a_mwi_num_messages, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+
oct = tvb_get_guint8(tvb, curr_offset);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "Number of Messages: %u",
- oct);
+ g_snprintf(add_string, string_len, " - (%u)", oct);
curr_offset++;
- g_snprintf(add_string, string_len, " - (%u)", oct);
-
/* no length check possible */
return(curr_offset - offset);
@@ -4171,6 +3972,45 @@ elem_mwi(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset
/*
* IOS 6.2.2.50
*/
+
+ /*
+ * from the IOS specification and MAY not be the exact same as the ones defined in
+ * the cdma2000 specification
+ * (and even if they are you shouldn't share the definitions in case one of the other changes)
+ */
+static const value_string ansi_a_signal_signal_vals[] = {
+ { 0x00, "Dial tone on"},
+ { 0x01, "Ring back tone on"},
+ { 0x02, "Intercept tone on"},
+ { 0x03, "Network congestion (reorder) tone on"},
+ { 0x04, "Busy tone on"},
+ { 0x05, "Confirm tone on"},
+ { 0x06, "Answer tone on"},
+ { 0x07, "Call waiting tone on"},
+ { 0x08, "Off-hook warning tone on"},
+ { 0x3f, "Tones off"},
+ { 0x40, "Normal Alerting"},
+ { 0x41, "Inter-group Alerting"},
+ { 0x42, "Special/Priority Alerting"},
+ { 0x43, "Reserved (ISDN Alerting pattern 3)"},
+ { 0x44, "Ping Ring (abbreviated alert)"},
+ { 0x45, "Reserved (ISDN Alerting pattern 5)"},
+ { 0x46, "Reserved (ISDN Alerting pattern 6)"},
+ { 0x47, "Reserved (ISDN Alerting pattern 7)"},
+ { 0x4f, "Alerting off"},
+ { 0x63, "Abbreviated intercept"},
+ { 0x65, "Abbreviated reorder"},
+ { 0, NULL}
+};
+
+static const value_string ansi_a_signal_alert_pitch_vals[] = {
+ { 0x00, "Medium pitch (standard alert)"},
+ { 0x01, "High pitch"},
+ { 0x02, "Low pitch"},
+ { 0x03, "Reserved"},
+ { 0, NULL}
+};
+
static guint8
elem_signal(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string, int string_len)
{
@@ -4182,68 +4022,14 @@ elem_signal(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 off
oct = tvb_get_guint8(tvb, curr_offset);
- switch (oct)
- {
- case 0x00: str = "Dial tone on"; break;
- case 0x01: str = "Ring back tone on"; break;
- case 0x02: str = "Intercept tone on"; break;
- case 0x03: str = "Network congestion (reorder) tone on"; break;
- case 0x04: str = "Busy tone on"; break;
- case 0x05: str = "Confirm tone on"; break;
- case 0x06: str = "Answer tone on"; break;
- case 0x07: str = "Call waiting tone on"; break;
- case 0x08: str = "Off-hook warning tone on"; break;
- case 0x3f: str = "Tones off"; break;
- case 0x40: str = "Normal Alerting"; break;
- case 0x41: str = "Inter-group Alerting"; break;
- case 0x42: str = "Special/Priority Alerting"; break;
- case 0x43: str = "Reserved (ISDN Alerting pattern 3)"; break;
- case 0x44: str = "Ping Ring (abbreviated alert)"; break;
- case 0x45: str = "Reserved (ISDN Alerting pattern 5)"; break;
- case 0x46: str = "Reserved (ISDN Alerting pattern 6)"; break;
- case 0x47: str = "Reserved (ISDN Alerting pattern 7)"; break;
- case 0x63: str = "Abbreviated intercept"; break;
- case 0x65: str = "Abbreviated reorder"; break;
- case 0x4f: str = "Alerting off"; break;
- default:
- str = "Unknown";
- break;
- }
-
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "Signal Value: (%u) %s",
- oct,
- str);
-
+ str = val_to_str_const(oct, ansi_a_signal_signal_vals, "Unknown");
+ proto_tree_add_item(tree, hf_ansi_a_signal_signal_value, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
g_snprintf(add_string, string_len, " - (%s)", str);
curr_offset++;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xfc, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- switch (oct & 0x03)
- {
- case 0: str = "Medium pitch (standard alert)"; break;
- case 1: str = "High pitch"; break;
- case 2: str = "Low pitch"; break;
- default:
- str = "Reserved";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x03, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Alert Pitch: %s",
- a_bigbuf,
- str);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_fc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_signal_alert_pitch, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
@@ -4260,77 +4046,56 @@ elem_signal(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 off
/*
* IOS 6.2.2.52
*/
+static const value_string ansi_a_clg_party_bcd_num_ton_vals[] = {
+ { 0, "Unknown"},
+ { 1, "International number"},
+ { 2, "National number"},
+ { 3, "Network specific number"},
+ { 4, "Dedicated PAD access, short code"},
+ { 5, "Reserved"},
+ { 6, "Reserved"},
+ { 7, "Reserved for extension"},
+ { 0, NULL}
+};
+
+static const value_string ansi_a_clg_party_bcd_num_plan_vals[] = {
+ { 0x00, "Unknown"},
+ { 0x01, "ISDN/telephony number plan (ITU recommendation E.164/E.163)"},
+ { 0x02, "Reserved"},
+ { 0x03, "Data number plan (ITU recommendation X.121)"},
+ { 0x04, "Telex numbering plan (ITU recommendation F.69)"},
+ { 0x05, "Reserved"},
+ { 0x06, "Reserved"},
+ { 0x07, "Reserved for extension"},
+ { 0x08, "National numbering plan"},
+ { 0x09, "Private numbering plan"},
+ { 0x0A, "Reserved"},
+ { 0x0B, "Reserved"},
+ { 0x0C, "Reserved"},
+ { 0x0D, "Reserved"},
+ { 0x0E, "Reserved"},
+ { 0x0F, "Reserved"},
+ { 0, NULL}
+};
+
static guint8
elem_cld_party_bcd_num(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
{
- guint8 oct;
guint8 *poctets;
guint32 curr_offset;
- const gchar *str;
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Extension",
- a_bigbuf);
-
- switch ((oct & 0x70) >> 4)
- {
- case 0: str = "Unknown"; break;
- case 1: str = "International number"; break;
- case 2: str = "National number"; break;
- case 3: str = "Network specific number"; break;
- case 4: str = "Dedicated PAD access, short code"; break;
- case 7: str = "Reserved for extension"; break;
- default:
- str = "Reserved";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x70, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Type of Number: %s",
- a_bigbuf,
- str);
-
- switch (oct & 0x0f)
- {
- case 0x00: str = "Unknown"; break;
- case 0x01: str = "ISDN/telephony number plan (ITU recommendation E.164/E.163)"; break;
- case 0x03: str = "Data number plan (ITU recommendation X.121)"; break;
- case 0x04: str = "Telex numbering plan (ITU recommendation F.69)"; break;
- case 0x07: str = "Reserved for extension"; break;
- case 0x08: str = "National numbering plan"; break;
- case 0x09: str = "Private numbering plan"; break;
- default:
- str = "Reserved";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Numbering Plan Identification: %s",
- a_bigbuf,
- str);
+ proto_tree_add_item(tree, hf_ansi_a_extension_8_80, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_clg_party_bcd_num_ton, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_clg_party_bcd_num_plan, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
poctets = tvb_get_string(wmem_packet_scope(), tvb, curr_offset, len - (curr_offset - offset));
- my_dgt_tbcd_unpack(a_bigbuf, poctets, len - (curr_offset - offset),
- &Dgt_tbcd);
-
- proto_tree_add_string_format(tree, hf_ansi_a_cld_party_bcd_num,
- tvb, curr_offset, len - (curr_offset - offset),
- a_bigbuf,
- "BCD Digits: %s",
- a_bigbuf);
+ my_dgt_tbcd_unpack(a_bigbuf, poctets, len - (curr_offset - offset), &Dgt_tbcd);
+ proto_tree_add_string(tree, hf_ansi_a_cld_party_bcd_num, tvb, curr_offset, len - (curr_offset - offset), a_bigbuf);
g_snprintf(add_string, string_len, " - (%s)", a_bigbuf);
@@ -4342,181 +4107,124 @@ elem_cld_party_bcd_num(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
}
/*
- * IOS 6.2.2.53
- * UNUSED in SPEC and no IEI!
+ * IOS 6.2.2.54
*/
-#ifdef MAYBE_USED_FOR_OLDER_CODECS
static guint8
-elem_clg_party_bcd_num(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
+elem_qos_params(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
{
guint8 oct;
- guint8 *poctets;
guint32 curr_offset;
- const gchar *str;
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Extension: %s",
- a_bigbuf,
- (oct & 0x80) ? "Not extended" : "Extended");
-
- switch ((oct & 0x70) >> 4)
- {
- case 0: str = "Unknown"; break;
- case 1: str = "International number"; break;
- case 2: str = "National number"; break;
- case 3: str = "Network specific number"; break;
- case 4: str = "Dedicated PAD access, short code"; break;
- case 7: str = "Reserved for extension"; break;
- default:
- str = "Reserved";
- break;
- }
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_qos_params_packet_priority, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, oct, 0x70, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Type of Number: %s",
- a_bigbuf,
- str);
-
- switch (oct & 0x0f)
- {
- case 0x00: str = "Unknown"; break;
- case 0x01: str = "ISDN/telephony number plan (ITU recommendation E.164/E.163)"; break;
- case 0x03: str = "Data number plan (ITU recommendation X.121)"; break;
- case 0x04: str = "Telex numbering plan (ITU recommendation F.69)"; break;
- case 0x07: str = "Reserved for extension"; break;
- case 0x08: str = "National numbering plan"; break;
- case 0x09: str = "Private numbering plan"; break;
- default:
- str = "Reserved";
- break;
- }
+ oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Numbering Plan Identification: %s",
- a_bigbuf,
- str);
+ g_snprintf(add_string, string_len, " - (%u)", oct & 0x0f);
curr_offset++;
- if (!(oct & 0x80))
- {
- /* octet 3a */
-
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Extension",
- a_bigbuf);
-
- switch ((oct & 0x60) >> 5)
- {
- case 0: str = "Presentation allowed"; break;
- case 1: str = "Presentation restricted"; break;
- case 2: str = "Number not available due to interworking"; break;
- default:
- str = "Reserved";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x60, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Presentation Indicator: %s",
- a_bigbuf,
- str);
-
- switch (oct & 0x03)
- {
- case 0: str = "User-provided, not screened"; break;
- case 1: str = "User-provided, verified and passed"; break;
- case 2: str = "User-provided, verified and failed"; break;
- default:
- str = "Network-provided";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x1c, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x03, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Screening Indicator: %s",
- a_bigbuf,
- str);
-
- curr_offset++;
- }
-
- poctets = tvb_get_string(wmem_packet_scope(), tvb, curr_offset, len - (curr_offset - offset));
-
- my_dgt_tbcd_unpack(a_bigbuf, poctets, len - (curr_offset - offset),
- &Dgt_tbcd);
-
- proto_tree_add_string_format(tree, hf_ansi_a_clg_party_bcd_num,
- tvb, curr_offset, len - (curr_offset - offset),
- a_bigbuf,
- "BCD Digits: %s",
- a_bigbuf);
-
- g_snprintf(add_string, string_len, " - (%s)", a_bigbuf);
-
- curr_offset += len - (curr_offset - offset);
-
EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
return(curr_offset - offset);
}
-#endif
/*
- * IOS 6.2.2.54
+ * IOS 6.2.2.55
*/
-static guint8
-elem_qos_params(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
-{
- guint8 oct;
- guint32 curr_offset;
-
- curr_offset = offset;
-
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+static const value_string ansi_a_cause_l3_coding_standard_vals[] = {
+ { 0, "Standard as described in ITU Recommendation Q.931"},
+ { 1, "Reserved for other international standards"},
+ { 2, "National standard"},
+ { 3, "Reserved for other international standards"},
+ { 0, NULL}
+};
- other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Packet Priority: %u",
- a_bigbuf,
- oct & 0x0f);
+static const value_string ansi_a_cause_l3_location_vals[] = {
+ { 0, "User"},
+ { 1, "Private network serving the local user"},
+ { 2, "Public network serving the local user"},
+ { 3, "Transit network"},
+ { 4, "Public network serving the remote user"},
+ { 5, "Private network serving the remote user"},
+ { 6, "Reserved"},
+ { 7, "International network"},
+ { 8, "Reserved"},
+ { 9, "Reserved"},
+ { 10, "Network beyond interworking point"},
+ { 11, "Reserved"},
+ { 12, "Reserved"},
+ { 13, "Reserved"},
+ { 14, "Reserved"},
+ { 15, "Reserved"},
+ { 0, NULL}
+};
- g_snprintf(add_string, string_len, " - (%u)", oct & 0x0f);
+static const value_string ansi_a_cause_l3_class_vals[] = {
+ { 0, "normal event"},
+ { 1, "normal event"},
+ { 2, "resource unavailable"},
+ { 3, "service or option not available"},
+ { 4, "service or option not implemented"},
+ { 5, "invalid message (e.g., parameter out of range)"},
+ { 6, "protocol error (e.g., unknown message)"},
+ { 7, "interworking"},
+ { 0, NULL}
+};
- curr_offset++;
+static const value_string ansi_a_cause_l3_value_vals[] = {
+ { 0x01, "Unassigned (unallocated) number"},
+ { 0x03, "No route to destination"},
+ { 0x06, "Channel unacceptable"},
+ { 0x0F, "Procedure failed"},
+ { 0x10, "Normal Clearing"},
+ { 0x11, "User busy"},
+ { 0x12, "No user responding"},
+ { 0x13, "User alerting, no answer"},
+ { 0x15, "Call rejected"},
+ { 0x16, "Number changed New destination"},
+ { 0x1A, "Non selected user clearing"},
+ { 0x1B, "Destination out of order"},
+ { 0x1C, "Invalid number format (incomplete number)"},
+ { 0x1D, "Facility rejected"},
+ { 0x1F, "Normal, unspecified"},
+ { 0x22, "No circuit/channel available"},
+ { 0x26, "Network out of order"},
+ { 0x29, "Temporary failure"},
+ { 0x2A, "Switching equipment congestion"},
+ { 0x2B, "Access information discarded information element ids"},
+ { 0x2C, "requested circuit/channel not available"},
+ { 0x2F, "Resources unavailable, unspecified"},
+ { 0x31, "Quality of service unavailable"},
+ { 0x32, "Requested facility not subscribed"},
+ { 0x33, "Request MUX option or rates unavailable"},
+ { 0x39, "Bearer capability not authorized"},
+ { 0x3A, "Bearer capability not presently available"},
+ { 0x3B, "SSD Update Rejected"},
+ { 0x3F, "Service or option not available, unspecified"},
+ { 0x41, "Bearer service not implemented"},
+ { 0x45, "Requested facility not implement"},
+ { 0x46, "Only restricted digital information bearer capability is available"},
+ { 0x4F, "Service or option not implemented, unspecified"},
+ { 0x51, "Reserved"},
+ { 0x58, "Incompatible destination incompatible parameter"},
+ { 0x5B, "Invalid transit network selection"},
+ { 0x5F, "Invalid message, unspecified"},
+ { 0x60, "Mandatory information element error information element identifier(s)"},
+ { 0x61, "Message type nonexistent or not implemented message type"},
+ { 0x62, "Message not compatible with control state message type or message type nonexistent or not implemented"},
+ { 0x64, "Invalid information element contents Information element Identifier(s)"},
+ { 0x65, "Message not compatible with call state message type"},
+ { 0x6F, "Protocol error, unspecified"},
+ { 0x7F, "Interworking, unspecified"},
+ { 0, NULL}
+};
- EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
+static value_string_ext ansi_a_cause_l3_value_vals_ext = VALUE_STRING_EXT_INIT(ansi_a_cause_l3_value_vals);
- return(curr_offset - offset);
-}
-/*
- * IOS 6.2.2.55
- */
static guint8
elem_cause_l3(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
{
@@ -4526,148 +4234,31 @@ elem_cause_l3(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 o
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Extension",
- a_bigbuf);
-
- switch ((oct & 0x60) >> 5)
- {
- case 0: str = "Standard as described in ITU Recommendation Q.931"; break;
- case 1: str = "Reserved for other international standards"; break;
- case 2: str = "National standard"; break;
- default:
- str = "Reserved for other international standards";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x60, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Coding Standard: %s",
- a_bigbuf,
- str);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x10, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- switch (oct & 0x0f)
- {
- case 0: str = "User"; break;
- case 1: str = "Private network serving the local user"; break;
- case 2: str = "Public network serving the local user"; break;
- case 3: str = "Transit network"; break;
- case 4: str = "Public network serving the remote user"; break;
- case 5: str = "Private network serving the remote user"; break;
- case 7: str = "International network"; break;
- case 10: str = "Network beyond interworking point"; break;
- default:
- str = "Reserved";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Location: %s",
- a_bigbuf,
- str);
+ proto_tree_add_item(tree, hf_ansi_a_extension_8_80, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_cause_l3_coding_standard, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_10, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_cause_l3_location, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Extension",
- a_bigbuf);
+ proto_tree_add_item(tree, hf_ansi_a_extension_8_80, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- switch ((oct & 0x70) >> 4)
- {
- case 0: str = "normal event"; break;
- case 1: str = "normal event"; break;
- case 2: str = "resource unavailable"; break;
- case 3: str = "service or option not available"; break;
- case 4: str = "service or option not implemented"; break;
- case 5: str = "invalid message (e.g., parameter out of range)"; break;
- case 6: str = "protocol error (e.g., unknown message)"; break;
- default:
- str = "interworking";
- break;
- }
+ oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0x70, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Class: (%u) %s",
- a_bigbuf,
- (oct & 0x70) >> 4,
- str);
+ proto_tree_add_item(tree, hf_ansi_a_cause_l3_class, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
switch (oct & 0x7f)
{
- case 0x01: str = "Unassigned (unallocated) number"; break;
- case 0x03: str = "No route to destination"; break;
- case 0x06: str = "Channel unacceptable"; break;
- case 0x0F: str = "Procedure failed"; break;
- case 0x10: str = "Normal Clearing"; break;
- case 0x11: str = "User busy"; break;
- case 0x12: str = "No user responding"; break;
- case 0x13: str = "User alerting, no answer"; break;
- case 0x15: str = "Call rejected"; break;
- case 0x16: str = "Number changed New destination"; break;
- case 0x1A: str = "Non selected user clearing"; break;
- case 0x1B: str = "Destination out of order"; break;
- case 0x1C: str = "Invalid number format (incomplete number)"; break;
- case 0x1D: str = "Facility rejected"; break;
- case 0x1F: str = "Normal, unspecified"; break;
- case 0x22: str = "No circuit/channel available"; break;
- case 0x26: str = "Network out of order"; break;
- case 0x29: str = "Temporary failure"; break;
- case 0x2A: str = "Switching equipment congestion"; break;
- case 0x2B: str = "Access information discarded information element ids"; break;
- case 0x2C: str = "requested circuit/channel not available"; break;
- case 0x2F: str = "Resources unavailable, unspecified"; break;
- case 0x31: str = "Quality of service unavailable"; break;
- case 0x32: str = "Requested facility not subscribed"; break;
- case 0x33: str = "Request MUX option or rates unavailable"; break;
- case 0x39: str = "Bearer capability not authorized"; break;
- case 0x3A: str = "Bearer capability not presently available"; break;
- case 0x3B: str = "SSD Update Rejected"; break;
- case 0x3F: str = "Service or option not available, unspecified"; break;
- case 0x41: str = "Bearer service not implemented"; break;
- case 0x45: str = "Requested facility not implement"; break;
- case 0x46: str = "Only restricted digital information bearer capability is available"; break;
- case 0x4F: str = "Service or option not implemented, unspecified"; break;
- case 0x51: str = "Reserved"; break;
- case 0x58: str = "Incompatible destination incompatible parameter"; break;
- case 0x5B: str = "Invalid transit network selection"; break;
- case 0x5F: str = "Invalid message, unspecified"; break;
- case 0x60: str = "Mandatory information element error information element identifier(s)"; break;
- case 0x61: str = "Message type nonexistent or not implemented message type"; break;
- case 0x62: str = "Message not compatible with control state message type or message type nonexistent or not implemented"; break;
- case 0x64: str = "Invalid information element contents Information element Identifier(s)"; break;
- case 0x65: str = "Message not compatible with call state message type"; break;
- case 0x6F: str = "Protocol error, unspecified"; break;
- case 0x7F: str = "Interworking, unspecified"; break;
default:
str = "Reserved";
break;
}
- other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Value: (%u)",
- a_bigbuf,
- oct & 0x0f);
+ proto_tree_add_item(tree, hf_ansi_a_cause_l3_value_without_class, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+
+ str = val_to_str_ext_const(oct & 0x7f, &ansi_a_cause_l3_value_vals_ext, "Reserved");
+ proto_tree_add_uint_format_value(tree, hf_ansi_a_cause_l3_value, tvb, curr_offset, 1,
+ oct & 0x7f, "%s (%u)", str, oct & 0x7f);
g_snprintf(add_string, string_len, " - (%u) %s", oct & 0x7f, str);
@@ -4691,6 +4282,8 @@ elem_cause_l3(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 o
/*
* IOS 6.2.2.58
*/
+static const true_false_string tfs_ansi_a_xmode_tfo_mode = { "TFO", "tandem" };
+
static guint8
elem_xmode(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
{
@@ -4699,23 +4292,14 @@ elem_xmode(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offs
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_fe, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, oct, 0xfe, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : TFO Mode: %s",
- a_bigbuf,
- (oct & 0x01) ? "TFO" : "tandem");
+ proto_tree_add_item(tree, hf_ansi_a_xmode_tfo_mode, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
g_snprintf(add_string, string_len, " - (%s)",
- (oct & 0x01) ? "TFO" : "tandem");
+ (oct & 0x01) ? tfs_ansi_a_xmode_tfo_mode.true_string : tfs_ansi_a_xmode_tfo_mode.false_string);
curr_offset++;
@@ -4736,7 +4320,22 @@ elem_xmode(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offs
/*
* IOS 6.2.2.61
- */
+ *
+ * IOS 5 4.2.45
+ */
+static const value_string ansi_a_reg_type_type_vals[] = {
+ { 0, "Timer-based"},
+ { 1, "Power-up"},
+ { 2, "Zone-based"},
+ { 3, "Power-down"},
+ { 4, "Parameter-change"},
+ { 5, "Ordered"},
+ { 6, "Distance-based"},
+ { 7, "User Zone-based"},
+ { 9, "BCMC Registration"},
+ { 0, NULL}
+};
+
static guint8
elem_reg_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string, int string_len)
{
@@ -4748,26 +4347,9 @@ elem_reg_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 o
oct = tvb_get_guint8(tvb, curr_offset);
- switch (oct)
- {
- case 0x00: str = "Timer-based"; break;
- case 0x01: str = "Power-up"; break;
- case 0x02: str = "Zone-based"; break;
- case 0x03: str = "Power-down"; break;
- case 0x04: str = "Parameter-change"; break;
- case 0x05: str = "Ordered"; break;
- case 0x06: str = "Distance-based"; break;
- case 0x07: str = "User Zone-based"; break;
- case 0x09: str = "BCMC Registration"; break;
- default:
- str = "Reserved";
- break;
- }
-
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "Location Registration Type: %s",
- str);
+ str = val_to_str_const(oct, ansi_a_reg_type_type_vals, "Reserved");
+ proto_tree_add_uint_format_value(tree, hf_ansi_a_reg_type_type, tvb, curr_offset, 1,
+ oct, "%s", str);
g_snprintf(add_string, string_len, " - (%s)", str);
@@ -4780,6 +4362,8 @@ elem_reg_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 o
/*
* IOS 6.2.2.62
+ *
+ * IOS 5 4.2.46
*/
static guint8
elem_tag(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string, int string_len)
@@ -4789,12 +4373,9 @@ elem_tag(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset
curr_offset = offset;
- value = tvb_get_ntohl(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_ansi_a_tag_value, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
- proto_tree_add_text(tree,
- tvb, curr_offset, 4,
- "Tag Value: %u",
- value);
+ value = tvb_get_ntohl(tvb, curr_offset);
g_snprintf(add_string, string_len, " - (%u)", value);
@@ -4807,178 +4388,63 @@ elem_tag(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset
/*
* IOS 6.2.2.63
+ *
+ * IOS 5 4.2.47
*/
static guint8
elem_hho_params(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string, int string_len)
{
guint8 oct;
- gint temp_int;
guint32 curr_offset;
const gchar *str;
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xe0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- temp_int = oct & 0x1f;
- if ((temp_int < 0) || (temp_int >= (gint) NUM_BAND_CLASS_STR))
- {
- str = "Reserved";
- }
- else
- {
- str = band_class_str[temp_int];
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x1f, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Band Class: %s",
- a_bigbuf,
- str);
-
- curr_offset++;
-
- g_snprintf(add_string, string_len, " - (%s)", str);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_e0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_hho_params_band_class, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0xe0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Number of Preamble Frames: %u",
- a_bigbuf,
- (oct & 0xe0) >> 5);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x10, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reset L2: %s Layer 2 Acknowledgement",
- a_bigbuf,
- (oct & 0x10) ? "Reset" : "Do not reset");
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reset FPC: %s counters",
- a_bigbuf,
- (oct & 0x10) ? "Reset" : "Do not reset");
+ str = val_to_str_const(oct & 0x1f, ansi_a_band_class_vals, "Reserved");
- switch ((oct & 0x06) >> 1)
- {
- case 0: str = "Encryption disabled"; break;
- case 1: str = "Encryption enabled"; break;
- default:
- str = "Unknown";
- break;
- }
+ g_snprintf(add_string, string_len, " - (%s)", str);
- other_decode_bitfield_value(a_bigbuf, oct, 0x06, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Encryption Mode: %s",
- a_bigbuf,
- str);
+ curr_offset++;
- other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Private LCM: %s Private Long Code Mask",
- a_bigbuf,
- (oct & 0x01) ? "Use" : "Do not use");
+ proto_tree_add_item(tree, hf_ansi_a_hho_params_num_pream_frames, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_hho_params_reset_l2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_hho_params_reset_fpc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_hho_params_enc_mode, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_hho_params_private_lcm, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
- oct = tvb_get_guint8(tvb, curr_offset);
-
switch (global_a_variant)
{
case A_VARIANT_IOS401:
- other_decode_bitfield_value(a_bigbuf, oct, 0xe0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_e0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
break;
case A_VARIANT_IOS501:
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Rev_Pwr_Cntl_Delay_Incl",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x60, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Rev_Pwr_Cntl_Delay",
- a_bigbuf);
+ proto_tree_add_item(tree, hf_ansi_a_hho_params_rev_pwr_cntl_delay_incl, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_hho_params_rev_pwr_cntl_delay, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
break;
}
- other_decode_bitfield_value(a_bigbuf, oct, 0x10, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Nom_Pwr_Ext",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Nom_Pwr: %u",
- a_bigbuf,
- oct & 0x0f);
+ proto_tree_add_item(tree, hf_ansi_a_hho_params_nom_pwr_ext, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_hho_params_nom_pwr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xc0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x3e, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : FPC Subchannel Information: %u",
- a_bigbuf,
- (oct & 0x3e) >> 1);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : FPC Subchannel Information Included",
- a_bigbuf);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_c0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_hho_params_fpc_subchan_info, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_hho_params_fpc_subchan_info_incl, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x0e, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Power Control Step: %u",
- a_bigbuf,
- (oct & 0x0e) >> 1);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Power Control Step Included",
- a_bigbuf);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_hho_params_pwr_cntl_step, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_hho_params_pwr_cntl_step_incl, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
@@ -5003,35 +4469,26 @@ elem_sw_ver(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 off
curr_offset = offset;
- major = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_ansi_a_sw_ver_major, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "IOS Major Revision Level: %u",
- major);
+ major = tvb_get_guint8(tvb, curr_offset);
curr_offset++;
- minor = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_ansi_a_sw_ver_minor, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "IOS Minor Revision Level: %u",
- minor);
+ minor = tvb_get_guint8(tvb, curr_offset);
curr_offset++;
+ proto_tree_add_item(tree, hf_ansi_a_sw_ver_point, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+
point = tvb_get_guint8(tvb, curr_offset);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "IOS Point Revision Level: %u",
- point);
+ g_snprintf(add_string, string_len, " - (IOS %u.%u.%u)", major, minor, point);
curr_offset++;
- g_snprintf(add_string, string_len, " - (IOS %u.%u.%u)", major, minor, point);
-
if (len > 3)
{
proto_tree_add_text(tree, tvb, curr_offset, len - 3,
@@ -5056,30 +4513,17 @@ elem_so(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset,
curr_offset = offset;
- value = tvb_get_ntohs(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, value, 0x8000, 16);
- proto_tree_add_text(tree,
- tvb, curr_offset, 2,
- "%s : Proprietary Indicator",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, value, 0x7000, 16);
- proto_tree_add_text(tree,
- tvb, curr_offset, 2,
- "%s : Service Option Revision",
- a_bigbuf);
+ proto_tree_add_item(tree, hf_ansi_a_so_proprietary_ind, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_so_revision, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_so_base_so_num, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, value, 0x0fff, 16);
- proto_tree_add_text(tree,
- tvb, curr_offset, 2,
- "%s : Base Service Option Number",
- a_bigbuf);
+ value = tvb_get_ntohs(tvb, curr_offset);
g_snprintf(add_string, string_len, " - (%u) (0x%04x)", value, value);
+ g_snprintf(ansi_a_so_add_string, sizeof(ansi_a_so_add_string), "%s", &add_string[1]);
- proto_tree_add_uint_format(tree, hf_ansi_a_so, tvb,
- curr_offset, 2, value,
+ proto_tree_add_uint_format(tree, hf_ansi_a_so, tvb, curr_offset, 2,
+ value,
"%s %s",
&add_string[3],
ansi_a_so_int_to_str(value));
@@ -5102,20 +4546,10 @@ elem_soci(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offse
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f8, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_soci, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, oct, 0xf8, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : SOCI: %u",
- a_bigbuf,
- oct & 0x07);
+ oct = tvb_get_guint8(tvb, curr_offset);
g_snprintf(add_string, string_len, " - (%u)", oct);
@@ -5132,7 +4566,6 @@ elem_soci(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offse
static guint8
elem_so_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
{
- guint8 oct;
guint8 num_so;
guint8 inst;
guint32 curr_offset;
@@ -5141,11 +4574,9 @@ elem_so_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offset
curr_offset = offset;
- num_so = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_ansi_a_so_list_num, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "Number of Service Option instances: %u",
- num_so);
+ num_so = tvb_get_guint8(tvb, curr_offset);
/*
* this is in case we leave the function before the
@@ -5159,39 +4590,20 @@ elem_so_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offset
SHORT_DATA_CHECK(len - (curr_offset - offset), 3);
- inst = 1;
+ inst = 0;
do
{
item =
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
+ proto_tree_add_text(tree, tvb, curr_offset, 3,
"Service Option Instance [%u]",
- inst);
+ inst + 1);
subtree = proto_item_add_subtree(item, ett_so_list);
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xc0, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x38, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : SR_ID: %u",
- a_bigbuf,
- (oct & 0x38) >> 3);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : SOCI: %u",
- a_bigbuf,
- oct & 0x07);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_c0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_so_list_sr_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_so_list_soci, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
@@ -5200,7 +4612,8 @@ elem_so_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offset
inst++;
}
- while ((len - (curr_offset - offset)) >= 3);
+ while (((len - (curr_offset - offset)) >= 3) &&
+ (inst < num_so));
/*
* this is because 'add_string' was used by 'elem_so()'
@@ -5218,53 +4631,30 @@ elem_so_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offset
static guint8
elem_acc_net_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
{
- guint32 value;
guint32 sid, nid, pzid;
guint32 curr_offset;
curr_offset = offset;
- value = tvb_get_ntohs(tvb, curr_offset);
- sid = value & 0x7fff;
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_16_8000, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_sid, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_nid, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_pzid, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, value >> 8, 0x80, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, value >> 8, 0x7f, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : SID (MSB), %u",
- a_bigbuf,
- sid);
-
- other_decode_bitfield_value(a_bigbuf, value & 0x00ff, 0xff, 8);
- proto_tree_add_text(tree, tvb, curr_offset + 1, 1,
- "%s : SID (LSB)",
- a_bigbuf);
+ sid = tvb_get_ntohs(tvb, curr_offset) & 0x7fff;
curr_offset += 2;
nid = tvb_get_ntohs(tvb, curr_offset);
- proto_tree_add_text(tree,
- tvb, curr_offset, 2,
- "NID: %u",
- nid);
-
curr_offset += 2;
- pzid = tvb_get_ntohs(tvb, curr_offset);
-
- proto_tree_add_text(tree,
- tvb, curr_offset, 2,
- "PZID: %u",
- pzid);
-
- curr_offset += 2;
+ pzid = tvb_get_guint8(tvb, curr_offset);
g_snprintf(add_string, string_len, " - (SID/NID/PZID: %u/%u/%u)", sid, nid, pzid);
+ curr_offset += 1;
+
EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
return(curr_offset - offset);
@@ -5300,50 +4690,31 @@ static const value_string ansi_a_adds_strings[] = {
* IOS 6.2.2.67
*/
static guint8
-elem_adds_user_part(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
+elem_adds_user_part(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
{
guint8 oct;
- guint32 value;
guint8 adds_app;
guint32 curr_offset;
const gchar *str;
tvbuff_t *adds_tvb;
- gint idx;
- proto_tree *subtree;
proto_item *item;
+ proto_tree *subtree;
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_c0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, oct, 0xc0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ oct = tvb_get_guint8(tvb, curr_offset);
adds_app = oct & 0x3f;
-
- str = try_val_to_str_idx((guint32) adds_app, ansi_a_adds_strings, &idx);
- if (str == NULL)
- {
- str = "Reserved";
- }
+ str = val_to_str_const(adds_app, ansi_a_adds_strings, "Reserved");
g_snprintf(add_string, string_len, " - (%s)", str);
- other_decode_bitfield_value(a_bigbuf, oct, 0x3f, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Data Burst Type: %s",
- a_bigbuf,
- str);
+ proto_tree_add_item(tree, hf_ansi_a_adds_user_part_burst_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
- item =
- proto_tree_add_text(tree, tvb, curr_offset, len - 1,
- "Application Data Message");
-
+ item = proto_tree_add_text(tree, tvb, curr_offset, len - 1, "Application Data Message");
subtree = proto_item_add_subtree(item, ett_adds_user_part);
switch (adds_app)
@@ -5351,9 +4722,7 @@ elem_adds_user_part(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gui
case ADDS_APP_SMS:
adds_tvb = tvb_new_subset(tvb, curr_offset, len - 1, len - 1);
- dissector_try_uint(is637_dissector_table,
- 0, adds_tvb, pinfo, g_tree);
-
+ dissector_try_uint(is637_dissector_table, 0, adds_tvb, pinfo, g_tree);
curr_offset += (len - 1);
break;
@@ -5383,34 +4752,19 @@ elem_adds_user_part(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gui
break;
case ADDS_APP_EXT_INTL:
- /*
- * no generic External International dissector
- */
- value = tvb_get_ntohs(tvb, curr_offset);
-
- proto_tree_add_text(subtree,
- tvb, curr_offset, 2,
- "Extended Burst Type - International: 0x%04x", value);
- curr_offset += 2;
-
- proto_tree_add_text(tree, tvb, curr_offset, len - (curr_offset - offset),
- "Data");
-
- curr_offset += len - (curr_offset - offset);
- break;
+ /* FALLTHROUGH */
case ADDS_APP_EXT:
- value = tvb_get_ntohs(tvb, curr_offset);
-
- proto_tree_add_text(subtree,
- tvb, curr_offset, 2,
- "Extended Burst Type: 0x%04x", value);
+ /*
+ * no generic External International dissector
+ * no generic External dissector
+ */
+ proto_tree_add_item(subtree, hf_ansi_a_adds_user_part_ext_burst_type, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
curr_offset += 2;
- proto_tree_add_text(subtree, tvb, curr_offset, len - (curr_offset - offset),
- "Data");
+ proto_tree_add_item(subtree, hf_ansi_a_adds_user_part_ext_data, tvb, curr_offset, len - (curr_offset - offset), ENC_NA);
curr_offset += len - (curr_offset - offset);
break;
@@ -5419,6 +4773,8 @@ elem_adds_user_part(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gui
/*
* no sub-dissectors
*/
+ proto_tree_add_item(subtree, hf_ansi_a_adds_user_part_unknown_data, tvb, curr_offset, len - 1, ENC_NA);
+
curr_offset += (len - 1);
break;
}
@@ -5432,26 +4788,14 @@ elem_adds_user_part(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gui
* IOS 5 4.2.75
*/
static guint8
-elem_amps_hho_param(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
+elem_amps_hho_params(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
- guint8 oct;
guint32 curr_offset;
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xfc, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x03, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Encryption Mode: (%u) %s",
- a_bigbuf,
- oct & 0x03,
- (oct & 0x03) ? "enabled" : "disabled");
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_fc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_amps_hho_params_enc_mode, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
@@ -5463,6 +4807,20 @@ elem_amps_hho_param(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gui
/*
* IOS 6.2.2.68
*/
+static const value_string ansi_a_is2000_scr_socr_for_chan_type_vals[] = {
+ { 0x00, "The service option connection does not use Forward Traffic Channel traffic."},
+ { 0x01, "The service option connection uses primary traffic on the Forward Traffic Channel."},
+ { 0x02, "The service option connection uses secondary traffic on the Forward Traffic Channel."},
+ { 0, NULL}
+};
+
+static const value_string ansi_a_is2000_scr_socr_rev_chan_type_vals[] = {
+ { 0x00, "The service option connection does not use Reverse Traffic Channel traffic."},
+ { 0x01, "The service option connection uses primary traffic on the Reverse Traffic Channel."},
+ { 0x02, "The service option connection uses secondary traffic on the Reverse Traffic Channel."},
+ { 0, NULL}
+};
+
static guint8
elem_is2000_scr(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
@@ -5471,163 +4829,85 @@ elem_is2000_scr(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32
guint32 curr_offset, saved_offset;
guint32 value;
guint is2000_portion_len;
+ proto_item *item;
proto_tree *scr_subtree, *subtree;
- proto_item *item = NULL;
const gchar *str = NULL;
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xf8, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Bit-Exact Length Fill Bits: %u",
- a_bigbuf,
- oct & 0x07);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f8, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_is2000_scr_num_fill_bits, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
- is2000_portion_len = len - (curr_offset - offset);
+ NO_MORE_DATA_CHECK(len);
- /*
- * the following decode was modified from the packet-ansi_map.c version
- */
+ is2000_portion_len = len - (curr_offset - offset);
SHORT_DATA_CHECK(is2000_portion_len, 7);
saved_offset = curr_offset;
- item =
- proto_tree_add_text(tree, tvb, curr_offset,
- is2000_portion_len,
+ item = proto_tree_add_text(tree, tvb, curr_offset, is2000_portion_len,
"IS-2000 Service Configuration Record Content");
+ scr_subtree = proto_item_add_subtree(item, ett_scr);
- scr_subtree =
- proto_item_add_subtree(item, ett_scr);
-
- proto_tree_add_text(scr_subtree, tvb,
- curr_offset, 2,
- "FOR_MUX_OPTION: Forward Traffic Channel multiplex option");
-
+ proto_tree_add_item(scr_subtree, hf_ansi_a_is2000_scr_for_mux_option, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
curr_offset += 2;
- proto_tree_add_text(scr_subtree, tvb,
- curr_offset, 2,
- "REV_MUX_OPTION: Reverse Traffic Channel multiplex option");
-
+ proto_tree_add_item(scr_subtree, hf_ansi_a_is2000_scr_rev_mux_option, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
curr_offset += 2;
- proto_tree_add_text(scr_subtree, tvb,
- curr_offset, 1,
- "FOR_RATES: Transmission rates of the Forward Fundamental Channel");
-
+ proto_tree_add_item(scr_subtree, hf_ansi_a_is2000_scr_for_fch_rate, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset += 1;
- proto_tree_add_text(scr_subtree, tvb,
- curr_offset, 1,
- "REV_RATES: Transmission rates of the Reverse Fundamental Channel");
-
+ proto_tree_add_item(scr_subtree, hf_ansi_a_is2000_scr_rev_fch_rate, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset += 1;
+ proto_tree_add_item(scr_subtree, hf_ansi_a_is2000_scr_num_socr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
num_con_rec = tvb_get_guint8(tvb, curr_offset);
-
- proto_tree_add_text(scr_subtree, tvb,
- curr_offset, 1,
- "NUM_CON_REC: Number of service option connection records, %u",
- num_con_rec);
-
curr_offset += 1;
for (ii=0; ii < num_con_rec; ii++)
{
oct = tvb_get_guint8(tvb, curr_offset);
- item =
- proto_tree_add_text(scr_subtree, tvb,
- curr_offset, oct /* oct already includes the length octet itself */,
+ item = proto_tree_add_text(scr_subtree, tvb,
+ curr_offset, oct /* !!! oct already includes the length octet itself */,
"Service option connection record [%u]", ii+1);
-
- subtree =
- proto_item_add_subtree(item, ett_srvc_con_rec);
-
+ subtree = proto_item_add_subtree(item, ett_scr_socr);
curr_offset += 1;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- proto_tree_add_text(subtree, tvb,
- curr_offset, 1,
- "CON_REF: Service option connection reference, %u",
- oct);
-
+ proto_tree_add_item(subtree, hf_ansi_a_is2000_scr_socr_soc_ref, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset += 1;
value = tvb_get_ntohs(tvb, curr_offset);
- proto_tree_add_text(subtree, tvb,
- curr_offset, 2,
- "SERVICE_OPTION: %s",
- ansi_a_so_int_to_str(value));
+ proto_tree_add_uint_format_value(subtree, hf_ansi_a_is2000_scr_socr_so, tvb, curr_offset, 2,
+ value,
+ "%s (%u) (0x%04x)",
+ ansi_a_so_int_to_str(value),
+ value,
+ value);
curr_offset += 2;
oct = tvb_get_guint8(tvb, curr_offset);
- switch ((oct & 0xf0) >> 4)
- {
- case 0x00: str = "The service option connection does not use Forward Traffic Channel traffic."; break;
- case 0x01: str = "The service option connection uses primary traffic on the Forward Traffic Channel."; break;
- case 0x02: str = "The service option connection uses secondary traffic on the Forward Traffic Channel."; break;
- default: str = "Reserved"; break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(subtree, tvb,
- curr_offset, 1,
- "%s : FOR_TRAFFIC: Forward Traffic Channel traffic type, %s",
- a_bigbuf,
- str);
-
- switch (oct & 0x0f)
- {
- case 0x00: str = "The service option connection does not use Reverse Traffic Channel traffic."; break;
- case 0x01: str = "The service option connection uses primary traffic on the Reverse Traffic Channel."; break;
- case 0x02: str = "The service option connection uses secondary traffic on the Reverse Traffic Channel."; break;
- default: str = "Reserved"; break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8);
- proto_tree_add_text(subtree, tvb,
- curr_offset, 1,
- "%s : REV_TRAFFIC: Reverse Traffic Channel traffic type, %s",
- a_bigbuf,
- str);
+ str = val_to_str_const((oct & 0xf0) >> 4, ansi_a_is2000_scr_socr_for_chan_type_vals, "Reserved");
+ proto_tree_add_uint_format_value(subtree, hf_ansi_a_is2000_scr_socr_for_chan_type, tvb, curr_offset, 1,
+ oct, "Forward Traffic Channel traffic type, %s", str);
+ str = val_to_str_const(oct & 0x0f, ansi_a_is2000_scr_socr_rev_chan_type_vals, "Reserved");
+ proto_tree_add_uint_format_value(subtree, hf_ansi_a_is2000_scr_socr_rev_chan_type, tvb, curr_offset, 1,
+ oct, "Reverse Traffic Channel traffic type, %s", str);
curr_offset += 1;
- oct = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(subtree, hf_ansi_a_is2000_scr_socr_ui_enc_mode, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_is2000_scr_socr_sr_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_is2000_scr_socr_rlp_info_incl, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, oct, 0xe0, 8);
- proto_tree_add_text(subtree, tvb,
- curr_offset, 1,
- "%s : UI_ENCRYPT_MODE: Encryption mode indicator for user information privacy",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x1c, 8);
- proto_tree_add_text(subtree, tvb,
- curr_offset, 1,
- "%s : SR_ID: Service reference identifier",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8);
- proto_tree_add_text(subtree, tvb,
- curr_offset, 1,
- "%s : RLP_INFO_INCL: RLP information included indicator",
- a_bigbuf);
+ oct = tvb_get_guint8(tvb, curr_offset);
if (oct & 0x02)
{
@@ -5640,30 +4920,24 @@ elem_is2000_scr(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32
value |= (oct & 0xe0) >> 5;
- proto_tree_add_text(subtree, tvb,
- curr_offset - 1, 1,
- "%s : RLP_BLOB_LEN (MSB), %u",
+ proto_tree_add_uint_format(subtree, hf_ansi_a_is2000_scr_socr_rlp_blob_len, tvb, curr_offset - 1, 1,
+ value,
+ "%s = RLP_BLOB_LEN (MSB): %u",
a_bigbuf,
value);
other_decode_bitfield_value(a_bigbuf, oct, 0xe0, 8);
- proto_tree_add_text(subtree, tvb,
- curr_offset, 1,
- "%s : RLP_BLOB_LEN (LSB)",
+ proto_tree_add_text(subtree, tvb, curr_offset, 1,
+ "%s = RLP_BLOB_LEN (LSB)",
a_bigbuf);
- other_decode_bitfield_value(a_bigbuf, oct, 0x1f, 8);
- proto_tree_add_text(subtree, tvb,
- curr_offset, 1,
- "%s : RLP_BLOB (MSB)",
- a_bigbuf);
+ proto_tree_add_item(subtree, hf_ansi_a_is2000_scr_socr_rlp_blob_msb, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset += 1;
if (value > 1)
{
- proto_tree_add_text(subtree, tvb,
- curr_offset, value - 1,
+ proto_tree_add_text(subtree, tvb, curr_offset, value - 1,
"RLP_BLOB");
curr_offset += value - 1;
@@ -5672,51 +4946,28 @@ elem_is2000_scr(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32
oct = tvb_get_guint8(tvb, curr_offset);
other_decode_bitfield_value(a_bigbuf, oct, 0xe0, 8);
- proto_tree_add_text(subtree, tvb,
- curr_offset, 1,
- "%s : RLP_BLOB (LSB)",
+ proto_tree_add_text(subtree, tvb, curr_offset, 1,
+ "%s = RLP_BLOB (LSB)",
a_bigbuf);
- other_decode_bitfield_value(a_bigbuf, oct, 0x1f, 8);
- proto_tree_add_text(subtree, tvb,
- curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_8_1f, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
}
else
{
- other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
- proto_tree_add_text(subtree, tvb,
- curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_8_01, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
}
curr_offset += 1;
}
- oct = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(scr_subtree, hf_ansi_a_is2000_scr_socr_fch_cc_incl, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(scr_subtree, tvb,
- curr_offset, 1,
- "%s : FCH_CC_INCL: Channel configuration for the Fundamental Channel included indicator",
- a_bigbuf);
+ oct = tvb_get_guint8(tvb, curr_offset);
if (oct & 0x80)
{
- other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8);
- proto_tree_add_text(scr_subtree, tvb,
- curr_offset, 1,
- "%s : FCH_FRAME_SIZE: Fundamental Channel frame size supported indicator",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x3e, 8);
- proto_tree_add_text(scr_subtree, tvb,
- curr_offset, 1,
- "%s : FOR_FCH_RC: Forward Fundamental Channel Radio Configuration, %u",
- a_bigbuf,
- (oct & 0x3e) >> 1);
+ proto_tree_add_item(scr_subtree, hf_ansi_a_is2000_scr_socr_fch_frame_size_support_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(scr_subtree, hf_ansi_a_is2000_scr_socr_for_fch_rc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
value = (oct & 0x01) << 4;
@@ -5727,16 +4978,15 @@ elem_is2000_scr(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32
value |= (oct & 0xf0) >> 4;
- proto_tree_add_text(scr_subtree, tvb,
- curr_offset - 1, 1,
- "%s : REV_FCH_RC: Reverse Fundamental Channel Radio Configuration (MSB), %u",
+ proto_tree_add_uint_format(scr_subtree, hf_ansi_a_is2000_scr_socr_rev_fch_rc, tvb, curr_offset - 1, 1,
+ value,
+ "%s = REV_FCH_RC: Reverse Fundamental Channel Radio Configuration (MSB), %u",
a_bigbuf,
value);
other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(scr_subtree, tvb,
- curr_offset, 1,
- "%s : REV_FCH_RC: (LSB)",
+ proto_tree_add_text(scr_subtree, tvb, curr_offset, 1,
+ "%s = REV_FCH_RC: (LSB)",
a_bigbuf);
bit_mask = 0x08;
@@ -5749,17 +4999,15 @@ elem_is2000_scr(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32
}
other_decode_bitfield_value(a_bigbuf, oct, bit_mask, 8);
- proto_tree_add_text(scr_subtree, tvb,
- curr_offset, 1,
- "%s : DCCH_CC_INCL: Channel configuration for the Dedicated Control Channel included indicator",
+ proto_tree_add_text(scr_subtree, tvb, curr_offset, 1,
+ "%s = DCCH_CC_INCL: Channel configuration for the Dedicated Control Channel included indicator",
a_bigbuf);
if (oct & bit_mask)
{
/* can't be bothered to do the rest of the decode */
- proto_tree_add_text(scr_subtree, tvb,
- curr_offset, (is2000_portion_len - (curr_offset - saved_offset)),
+ proto_tree_add_text(scr_subtree, tvb, curr_offset, (is2000_portion_len - (curr_offset - saved_offset)),
"DCCH + ? + Reserved");
curr_offset += (is2000_portion_len - (curr_offset - saved_offset));
@@ -5770,17 +5018,15 @@ elem_is2000_scr(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32
bit_offset--;
other_decode_bitfield_value(a_bigbuf, oct, bit_mask, 8);
- proto_tree_add_text(scr_subtree, tvb,
- curr_offset, 1,
- "%s : FOR_SCH_CC_INCL: Channel configuration for the Dedicated Control Channel included indicator",
+ proto_tree_add_text(scr_subtree, tvb, curr_offset, 1,
+ "%s = FOR_SCH_CC_INCL: Channel configuration for the Dedicated Control Channel included indicator",
a_bigbuf);
if (oct & bit_mask)
{
/* can't be bothered to do the rest of the decode */
- proto_tree_add_text(scr_subtree, tvb,
- curr_offset, (is2000_portion_len - (curr_offset - saved_offset)),
+ proto_tree_add_text(scr_subtree, tvb, curr_offset, (is2000_portion_len - (curr_offset - saved_offset)),
"FOR_SCH + ? + Reserved");
curr_offset += (is2000_portion_len - (curr_offset - saved_offset));
@@ -5791,17 +5037,15 @@ elem_is2000_scr(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32
bit_offset--;
other_decode_bitfield_value(a_bigbuf, oct, bit_mask, 8);
- proto_tree_add_text(scr_subtree, tvb,
- curr_offset, 1,
- "%s : REV_SCH_CC_INCL: Channel configuration for the Dedicated Control Channel included indicator",
+ proto_tree_add_text(scr_subtree, tvb, curr_offset, 1,
+ "%s = REV_SCH_CC_INCL: Channel configuration for the Dedicated Control Channel included indicator",
a_bigbuf);
if (oct & bit_mask)
{
/* can't be bothered to do the rest of the decode */
- proto_tree_add_text(scr_subtree, tvb,
- curr_offset, (is2000_portion_len - (curr_offset - saved_offset)),
+ proto_tree_add_text(scr_subtree, tvb, curr_offset, (is2000_portion_len - (curr_offset - saved_offset)),
"REV_SCH + ? + Reserved");
curr_offset += (is2000_portion_len - (curr_offset - saved_offset));
@@ -5812,9 +5056,9 @@ elem_is2000_scr(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32
bit_mask >>= (8 - bit_offset);
other_decode_bitfield_value(a_bigbuf, oct, bit_mask, 8);
- proto_tree_add_text(scr_subtree, tvb,
- curr_offset, 1,
- "%s : Reserved",
+ proto_tree_add_uint_format(scr_subtree, hf_ansi_a_reserved_bits_8_generic, tvb, curr_offset, 1,
+ oct & bit_mask,
+ "%s = Reserved bit(s)",
a_bigbuf);
curr_offset += 1;
@@ -5822,7 +5066,7 @@ elem_is2000_scr(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32
}
}
- EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset);
+ EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
return(curr_offset - offset);
}
@@ -5833,49 +5077,35 @@ elem_is2000_scr(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32
static guint8
elem_is2000_nn_scr(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
- guint8 oct;
guint32 curr_offset;
-#ifndef MLUM
guint is2000_portion_len;
-#endif
+ guint8 fill_bits;
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xf8, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f8, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_is2000_nn_scr_num_fill_bits, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Bit-Exact Length Fill Bits: %u",
- a_bigbuf,
- oct & 0x07);
+ fill_bits = tvb_get_guint8(tvb, curr_offset) & 0x07;
curr_offset++;
-#ifndef MLUM
+ NO_MORE_DATA_CHECK(len);
is2000_portion_len = len - (curr_offset - offset);
- NO_MORE_DATA_CHECK(len);
-
if (is2000_portion_len > 0)
{
SHORT_DATA_CHECK(len - (curr_offset - offset), is2000_portion_len);
- proto_tree_add_text(tree, tvb, curr_offset, is2000_portion_len,
- "IS-2000 Non-Negotiable Service Configuration Record Content");
+ content_fill_aux(tvb, tree, curr_offset, is2000_portion_len, fill_bits,
+ hf_ansi_a_is2000_nn_scr_content,
+ hf_ansi_a_is2000_nn_scr_fill_bits);
curr_offset += is2000_portion_len;
- }
-
-#else
-
-#endif
+ NO_MORE_DATA_CHECK(len);
+ }
EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
@@ -5884,16 +5114,34 @@ elem_is2000_nn_scr(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guin
/*
* IOS 6.2.2.70
- */
+ *
+ * IOS 5 4.2.53
+ */
+static const value_string ansi_a_is2000_mob_cap_fch_info_geo_loc_type_vals[] = {
+ { 0, "No mobile assisted geo-location capabilities"},
+ { 1, "IS801 capable (Advanced Forward Link Triangulation only (AFLT))"},
+ { 2, "IS801 capable (Advanced Forward Link Triangulation and Global Positioning Systems)"},
+ { 3, "Global Positioning Systems Only"},
+ { 4, "Reserved"},
+ { 5, "Reserved"},
+ { 6, "Reserved"},
+ { 7, "Reserved"},
+ { 0, NULL}
+};
+
+const true_false_string tfs_reserved_no_voice_privacy = { "Reserved", "No voice privacy supported" };
+const true_false_string tfs_reserved_aes = { "Reserved", "Advanced Encryption Standard (AES)" };
+const true_false_string tfs_reserved_private_long_code = { "Reserved", "Private long code" };
+
static guint8
elem_is2000_mob_cap(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
guint8 oct;
guint8 oct_len;
guint32 curr_offset;
- proto_tree *subtree;
+ guint8 fill_bits;
proto_item *item = NULL;
- const gchar *str;
+ proto_tree *subtree;
curr_offset = offset;
@@ -5902,311 +5150,184 @@ elem_is2000_mob_cap(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gui
switch (global_a_variant)
{
case A_VARIANT_IOS401:
- other_decode_bitfield_value(a_bigbuf, oct, 0xe0, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_e0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
break;
case A_VARIANT_IOS501:
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : REV_PDCH Supported: IS-2000 R-PDCH %ssupported",
- a_bigbuf,
- (oct & 0x80) ? "" : "not ");
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : FOR_PDCH Supported: IS-2000 F-PDCH %ssupported",
- a_bigbuf,
- (oct & 0x40) ? "" : "not ");
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x20, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : ERAM Supported: Enhanced Rate Adaptation Mode %ssupported",
- a_bigbuf,
- (oct & 0x20) ? "" : "not ");
+ proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_rev_pdch_support_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_for_pdch_support_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_eram_support_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
break;
}
- other_decode_bitfield_value(a_bigbuf, oct, 0x10, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : DCCH Supported: IS-2000 DCCH %ssupported",
- a_bigbuf,
- (oct & 0x10) ? "" : "not ");
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : FCH Supported: IS-2000 FCH %ssupported",
- a_bigbuf,
- (oct & 0x08) ? "" : "not ");
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x04, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : OTD Supported: Orthogonal Transmit Diversity %ssupported",
- a_bigbuf,
- (oct & 0x04) ? "" : "not ");
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Enhanced RC CFG Supported: Radio configuration in radio class 2 %ssupported",
- a_bigbuf,
- (oct & 0x02) ? "" : "not ");
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : QPCH Supported: Quick Paging Channel %ssupported",
- a_bigbuf,
- (oct & 0x01) ? "" : "not ");
+ proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_dcch_support_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_fch_support_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_otd_support_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_enh_rc_cfg_support_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_qpch_support_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
- NO_MORE_DATA_CHECK(len);
+ proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_fch_info_octet_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
oct_len = tvb_get_guint8(tvb, curr_offset);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "FCH Information: Bit-Exact Length Octet Count: %u",
- oct_len);
-
curr_offset++;
- NO_MORE_DATA_CHECK(len);
+ /*
+ * The octet following the FCH/DCCH/... Information Bit-Exact Length - Octet Count
+ * field is NOT counted in that length and is required.
+ */
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_80, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
oct = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_fch_info_geo_loc_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_fch_info_geo_loc_incl, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_fch_info_num_fill_bits, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- switch ((oct & 0x70) >> 4)
- {
- case 0: str = "No mobile assisted geo-location capabilities"; break;
- case 1: str = "IS801 capable (Advanced Forward Link Triangulation only (AFLT))"; break;
- case 2: str = "IS801 capable (Advanced Forward Link Triangulation and Global Positioning Systems"; break;
- case 3: str = "Global Positioning Systems Only"; break;
- default:
- str = "Reserved";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x70, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Geo Location Type: %s",
- a_bigbuf,
- str);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Geo Location Included",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : FCH Information: Bit-Exact Length Fill Bits: %u",
- a_bigbuf,
- oct & 0x07);
+ fill_bits = oct & 0x07;
curr_offset++;
- NO_MORE_DATA_CHECK(len);
-
if (oct_len > 0)
{
SHORT_DATA_CHECK(len - (curr_offset - offset), oct_len);
- proto_tree_add_text(tree, tvb, curr_offset, oct_len,
- "FCH Information Content");
+ item =
+ proto_tree_add_text(tree, tvb, curr_offset, oct_len,
+ "FCH Information");
- curr_offset += oct_len;
+ subtree = proto_item_add_subtree(item, ett_is2000_mob_cap_fch_info);
- NO_MORE_DATA_CHECK(len);
+ content_fill_aux(tvb, subtree, curr_offset, oct_len, fill_bits,
+ hf_ansi_a_is2000_mob_cap_fch_info_content,
+ hf_ansi_a_is2000_mob_cap_fch_info_fill_bits);
+
+ curr_offset += oct_len;
}
/*
* DCCH
*/
- oct_len = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_dcch_info_octet_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "DCCH Information: Bit-Exact Length Octet Count: %u",
- oct_len);
+ oct_len = tvb_get_guint8(tvb, curr_offset);
curr_offset++;
- NO_MORE_DATA_CHECK(len);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f8, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_dcch_info_num_fill_bits, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0xf8, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : DCCH Information: Bit-Exact Length Fill Bits: %u",
- a_bigbuf,
- oct & 0x07);
+ fill_bits = oct & 0x07;
curr_offset++;
- NO_MORE_DATA_CHECK(len);
-
if (oct_len > 0)
{
SHORT_DATA_CHECK(len - (curr_offset - offset), oct_len);
- proto_tree_add_text(tree, tvb, curr_offset, oct_len,
- "DCCH Information Content");
+ item = proto_tree_add_text(tree, tvb, curr_offset, oct_len, "DCCH Information");
+ subtree = proto_item_add_subtree(item, ett_is2000_mob_cap_dcch_info);
- curr_offset += oct_len;
+ content_fill_aux(tvb, subtree, curr_offset, oct_len, fill_bits,
+ hf_ansi_a_is2000_mob_cap_dcch_info_content,
+ hf_ansi_a_is2000_mob_cap_dcch_info_fill_bits);
- NO_MORE_DATA_CHECK(len);
+ curr_offset += oct_len;
}
+ NO_MORE_DATA_CHECK(len);
+
/*
* FOR_PDCH
*/
- oct_len = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_for_pdch_info_octet_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "FOR_PDCH Information: Bit-Exact Length Octet Count: %u",
- oct_len);
+ oct_len = tvb_get_guint8(tvb, curr_offset);
curr_offset++;
- NO_MORE_DATA_CHECK(len);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f8, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_for_pdch_info_num_fill_bits, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0xf8, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : FOR_PDCH Information: Bit-Exact Length Fill Bits: %u",
- a_bigbuf,
- oct & 0x07);
+ fill_bits = oct & 0x07;
curr_offset++;
- NO_MORE_DATA_CHECK(len);
-
if (oct_len > 0)
{
SHORT_DATA_CHECK(len - (curr_offset - offset), oct_len);
- proto_tree_add_text(tree, tvb, curr_offset, oct_len,
- "FOR_PDCH Information Content");
+ item = proto_tree_add_text(tree, tvb, curr_offset, oct_len, "FOR_PDCH Information");
+ subtree = proto_item_add_subtree(item, ett_is2000_mob_cap_for_pdch_info);
- curr_offset += oct_len;
+ content_fill_aux(tvb, subtree, curr_offset, oct_len, fill_bits,
+ hf_ansi_a_is2000_mob_cap_for_pdch_info_content,
+ hf_ansi_a_is2000_mob_cap_for_pdch_info_fill_bits);
- NO_MORE_DATA_CHECK(len);
+ curr_offset += oct_len;
}
+ NO_MORE_DATA_CHECK(len);
+
/*
* REV_PDCH
*/
- oct_len = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_rev_pdch_info_octet_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "REV_PDCH Information: Bit-Exact Length Octet Count: %u",
- oct_len);
+ oct_len = tvb_get_guint8(tvb, curr_offset);
curr_offset++;
- NO_MORE_DATA_CHECK(len);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f8, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_is2000_mob_cap_rev_pdch_info_num_fill_bits, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0xf8, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : REV_PDCH Information: Bit-Exact Length Fill Bits: %u",
- a_bigbuf,
- oct & 0x07);
+ fill_bits = oct & 0x07;
curr_offset++;
- NO_MORE_DATA_CHECK(len);
-
if (oct_len > 0)
{
SHORT_DATA_CHECK(len - (curr_offset - offset), oct_len);
- proto_tree_add_text(tree, tvb, curr_offset, oct_len,
- "REV_PDCH Information Content");
+ item = proto_tree_add_text(tree, tvb, curr_offset, oct_len, "REV_PDCH Information");
- curr_offset += oct_len;
+ subtree = proto_item_add_subtree(item, ett_is2000_mob_cap_rev_pdch_info);
- NO_MORE_DATA_CHECK(len);
+ content_fill_aux(tvb, subtree, curr_offset, oct_len, fill_bits,
+ hf_ansi_a_is2000_mob_cap_rev_pdch_info_content,
+ hf_ansi_a_is2000_mob_cap_rev_pdch_info_fill_bits);
+
+ curr_offset += oct_len;
}
+ NO_MORE_DATA_CHECK(len);
+
oct = tvb_get_guint8(tvb, curr_offset);
- item =
- proto_tree_add_text(tree, tvb,
- curr_offset, 1,
+ item = proto_tree_add_uint_format(tree, hf_ansi_a_is2000_mob_cap_vp_support, tvb, curr_offset, 1,
+ oct & 0x7f,
"VP Algorithms Supported%s",
- oct ? "" : ": No voice privacy supported");
+ (oct & 0x7f) ? "" : ": No voice privacy supported");
- if (oct)
+ if (oct & 0x7f)
{
- subtree =
- proto_item_add_subtree(item, ett_vp_algs);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : %s",
- a_bigbuf,
- (oct & 0x80) ? "No extension" : "Extended");
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : A7: Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x20, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : A6: Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x10, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : A5: Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : A4: Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x04, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : A3: Reserved",
- a_bigbuf);
+ subtree = proto_item_add_subtree(item, ett_vp_algs);
- other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : A2: Advanced Encryption Standard (AES)",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : A1: Private long code",
- a_bigbuf);
+ proto_tree_add_item(subtree, hf_ansi_a_extension_8_80, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_is2000_mob_cap_vp_support_a7, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_is2000_mob_cap_vp_support_a6, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_is2000_mob_cap_vp_support_a5, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_is2000_mob_cap_vp_support_a4, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_is2000_mob_cap_vp_support_a3, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_is2000_mob_cap_vp_support_a2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_is2000_mob_cap_vp_support_a1, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
}
EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
@@ -6237,11 +5358,11 @@ elem_ptype(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offs
break;
}
- proto_tree_add_text(tree,
- tvb, curr_offset, 2,
- "(%u) %s",
+ proto_tree_add_uint_format(tree, hf_ansi_a_protocol_type, tvb, curr_offset, 2,
value,
- str);
+ "%s (%u)",
+ str,
+ value);
g_snprintf(add_string, string_len, " - (%s)", str);
@@ -6256,66 +5377,97 @@ elem_ptype(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offs
* IOS 6.2.2.72
*/
static const value_string ansi_a_ms_info_rec_signal_type_vals[] = {
- { 0x0, "Tone signal"},
- { 0x1, "ISDN Alerting"},
- { 0x2, "IS-54B Alerting"},
- { 0x3, "Reserved"},
+ { 0x0, "Tone signal"},
+ { 0x1, "ISDN Alerting"},
+ { 0x2, "IS-54B Alerting"},
+ { 0x3, "Reserved"},
{ 0, NULL}
- };
+};
static const value_string ansi_a_ms_info_rec_signal_alert_pitch_vals[] = {
- { 0x0, "Medium pitch (standard alert)"},
- { 0x1, "High pitch"},
- { 0x2, "Low pitch"},
- { 0x3, "Reserved"},
+ { 0x0, "Medium pitch (standard alert)"},
+ { 0x1, "High pitch"},
+ { 0x2, "Low pitch"},
+ { 0x3, "Reserved"},
{ 0, NULL}
- };
+};
static const value_string ansi_a_ms_info_rec_signal_tone_vals[] = {
- { 0x00, "Dial tone on"},
- { 0x01, "Ring back tone on"},
- { 0x02, "Intercept tone on"},
- { 0x03, "Abbreviated intercept"},
- { 0x04, "Network congestion (reorder) tone on"},
- { 0x05, "Abbreviated network congestion (reorder)"},
- { 0x06, "Busy tone on"},
- { 0x07, "Confirm tone on"},
- { 0x08, "Answer tone on"},
- { 0x09, "Call waiting tone on"},
- { 0x0a, "Pip tone on"},
- { 0x3f, "Tones off"},
+ { 0x00, "Dial tone on"},
+ { 0x01, "Ring back tone on"},
+ { 0x02, "Intercept tone on"},
+ { 0x03, "Abbreviated intercept"},
+ { 0x04, "Network congestion (reorder) tone on"},
+ { 0x05, "Abbreviated network congestion (reorder)"},
+ { 0x06, "Busy tone on"},
+ { 0x07, "Confirm tone on"},
+ { 0x08, "Answer tone on"},
+ { 0x09, "Call waiting tone on"},
+ { 0x0a, "Pip tone on"},
+ { 0x3f, "Tones off"},
{ 0, NULL}
- };
-
-const value_string ansi_a_ms_info_rec_signal_isdn_alert_vals[] = {
- { 0x0, "Normal Alerting"},
- { 0x1, "Intergroup Alerting"},
- { 0x2, "Special/Priority Alerting"},
- { 0x3, "Reserved (ISDN Alerting pattern 3)"},
- { 0x4, "Ping ring"},
- { 0x5, "Reserved (ISDN Alerting pattern 5)"},
- { 0x6, "Reserved (ISDN Alerting pattern 6)"},
- { 0x7, "Reserved (ISDN Alerting pattern 7)"},
- { 0xf, "Alerting off"},
+};
+
+static const value_string ansi_a_ms_info_rec_signal_isdn_alert_vals[] = {
+ { 0x0, "Normal Alerting"},
+ { 0x1, "Intergroup Alerting"},
+ { 0x2, "Special/Priority Alerting"},
+ { 0x3, "Reserved (ISDN Alerting pattern 3)"},
+ { 0x4, "Ping ring"},
+ { 0x5, "Reserved (ISDN Alerting pattern 5)"},
+ { 0x6, "Reserved (ISDN Alerting pattern 6)"},
+ { 0x7, "Reserved (ISDN Alerting pattern 7)"},
+ { 0xf, "Alerting off"},
{ 0, NULL}
- };
+};
static const value_string ansi_a_ms_info_rec_signal_is54b_alert_vals[] = {
- { 0x0, "No Tone"},
- { 0x1, "Long"},
- { 0x2, "Short-Short"},
- { 0x3, "Short-Short-Long"},
- { 0x4, "Short-Short-2"},
- { 0x5, "Short-Long-Short"},
- { 0x6, "Short-Short-Short-Short"},
- { 0x7, "PBX Long"},
- { 0x8, "PBX Short-Short"},
- { 0x9, "PBX Short-Short-Long"},
- { 0xa, "PBX Short-Long-Short"},
- { 0xb, "PBX Short-Short-Short-Short"},
- { 0xc, "Pip-Pip-Pip-Pip"},
+ { 0x0, "No Tone"},
+ { 0x1, "Long"},
+ { 0x2, "Short-Short"},
+ { 0x3, "Short-Short-Long"},
+ { 0x4, "Short-Short-2"},
+ { 0x5, "Short-Long-Short"},
+ { 0x6, "Short-Short-Short-Short"},
+ { 0x7, "PBX Long"},
+ { 0x8, "PBX Short-Short"},
+ { 0x9, "PBX Short-Short-Long"},
+ { 0xa, "PBX Short-Long-Short"},
+ { 0xb, "PBX Short-Short-Short-Short"},
+ { 0xc, "Pip-Pip-Pip-Pip"},
{ 0, NULL}
- };
+};
+
+static const value_string ansi_a_fwd_ms_info_rec_cld_pn_num_type_vals[] = {
+ { 0, "Unknown"},
+ { 1, "International number"},
+ { 2, "National number"},
+ { 3, "Network-specific number"},
+ { 4, "Subscriber number"},
+ { 5, "Reserved"},
+ { 6, "Abbreviated number"},
+ { 0, NULL}
+};
+
+static const value_string ansi_a_fwd_ms_info_rec_cld_pn_num_plan_vals[] = {
+ { 0x00, "Unknown"},
+ { 0x01, "ISDN/Telephony Numbering"},
+ { 0x02, "Reserved"},
+ { 0x03, "Data Numbering (ITU-T Rec. X.121)"},
+ { 0x04, "Telex Numbering (ITU-T Rec. F.69)"},
+ { 0x05, "Reserved"},
+ { 0x06, "Reserved"},
+ { 0x07, "Reserved"},
+ { 0x08, "Reserved"},
+ { 0x09, "Private Numbering"},
+ { 0x0a, "Reserved"},
+ { 0x0b, "Reserved"},
+ { 0x0c, "Reserved"},
+ { 0x0d, "Reserved"},
+ { 0x0e, "Reserved"},
+ { 0x0f, "Reserved for extension"},
+ { 0, NULL}
+};
static guint8
elem_fwd_ms_info_recs(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
@@ -6325,11 +5477,11 @@ elem_fwd_ms_info_recs(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, g
guint8 rec_type;
guint8 num_recs;
guint32 value;
- guint32 curr_offset;
+ guint32 curr_offset, saved_offset;
const gchar *str;
gint ett_elem_idx, idx, i;
- proto_tree *subtree;
proto_item *item;
+ proto_tree *subtree;
curr_offset = offset;
@@ -6337,7 +5489,7 @@ elem_fwd_ms_info_recs(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, g
while ((len - (curr_offset - offset)) >= 2)
{
- num_recs++;
+ saved_offset = curr_offset;
rec_type = tvb_get_guint8(tvb, curr_offset);
@@ -6354,21 +5506,18 @@ elem_fwd_ms_info_recs(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, g
}
item =
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
+ proto_tree_add_text(tree, tvb, curr_offset, -1,
"Information Record Type [%u]: (%u) %s",
- num_recs,
+ num_recs + 1,
rec_type,
str);
-
subtree = proto_item_add_subtree(item, ett_elem_idx);
curr_offset++;
oct_len = tvb_get_guint8(tvb, curr_offset);
- proto_tree_add_uint(subtree, hf_ansi_a_length, tvb,
- curr_offset, 1, oct_len);
+ proto_tree_add_uint(subtree, hf_ansi_a_length, tvb, curr_offset, 1, oct_len);
curr_offset++;
@@ -6381,50 +5530,14 @@ elem_fwd_ms_info_recs(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, g
case ANSI_FWD_MS_INFO_REC_CLD_PN:
oct = tvb_get_guint8(tvb, curr_offset);
- switch ((oct & 0xe0) >> 5)
- {
- case 0: str = "Unknown"; break;
- case 1: str = "International number"; break;
- case 2: str = "National number"; break;
- case 3: str = "Network-specific number"; break;
- case 4: str = "Subscriber number"; break;
- case 5: str = "Reserved"; break;
- case 6: str = "Abbreviated number"; break;
- default:
- str = "Reserved for extension";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xe0, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : Number Type: %s",
- a_bigbuf,
- str);
-
- switch ((oct & 0x1e) >> 1)
- {
- case 0x00: str = "Unknown"; break;
- case 0x01: str = "ISDN/Telephony Numbering"; break;
- case 0x03: str = "Data Numbering (ITU-T Rec. X.121)"; break;
- case 0x04: str = "Telex Numbering (ITU-T Rec. F.69)"; break;
- case 0x09: str = "Private Numbering"; break;
- case 0x0f: str = "Reserved for extension"; break;
- default:
- str = "Reserved";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x1e, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : Number Plan: %s",
- a_bigbuf,
- str);
+ proto_tree_add_item(subtree, hf_ansi_a_fwd_ms_info_rec_cld_pn_num_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_fwd_ms_info_rec_cld_pn_num_plan, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
if (oct_len > 1)
{
other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : MSB of first digit",
+ "%s = MSB of first digit",
a_bigbuf);
curr_offset++;
@@ -6439,96 +5552,25 @@ elem_fwd_ms_info_recs(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, g
}
a_bigbuf[i] = '\0';
- proto_tree_add_text(subtree, tvb, curr_offset, oct_len - 1,
+ proto_tree_add_string_format(subtree, hf_ansi_a_fwd_ms_info_rec_cld_pn_num, tvb, curr_offset, oct_len - 1,
+ a_bigbuf,
"Digits: %s",
a_bigbuf);
curr_offset += (oct_len - 2);
}
- other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
+ proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_8_01, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
break;
case ANSI_FWD_MS_INFO_REC_CLG_PN:
value = tvb_get_ntohs(tvb, curr_offset);
- oct = (value & 0xff00) >> 8;
-
- switch ((oct & 0xe0) >> 5)
- {
- case 0: str = "Unknown"; break;
- case 1: str = "International number"; break;
- case 2: str = "National number"; break;
- case 3: str = "Network-specific number"; break;
- case 4: str = "Subscriber number"; break;
- case 5: str = "Reserved"; break;
- case 6: str = "Abbreviated number"; break;
- default:
- str = "Reserved for extension";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, value, 0xe000, 16);
- proto_tree_add_text(subtree, tvb, curr_offset, 2,
- "%s : Number Type: %s",
- a_bigbuf,
- str);
-
- switch ((oct & 0x1e) >> 1)
- {
- case 0x00: str = "Unknown"; break;
- case 0x01: str = "ISDN/Telephony Numbering"; break;
- case 0x03: str = "Data Numbering (ITU-T Rec. X.121)"; break;
- case 0x04: str = "Telex Numbering (ITU-T Rec. F.69)"; break;
- case 0x09: str = "Private Numbering"; break;
- case 0x0f: str = "Reserved for extension"; break;
- default:
- str = "Reserved";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, value, 0x1e00, 16);
- proto_tree_add_text(subtree, tvb, curr_offset, 2,
- "%s : Number Plan: %s",
- a_bigbuf,
- str);
-
- switch ((value & 0x0180) >> 7)
- {
- case 0: str = "Presentation allowed"; break;
- case 1: str = "Presentation restricted"; break;
- case 2: str = "Number not available"; break;
- default:
- str = "Reserved";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, value, 0x0180, 16);
- proto_tree_add_text(subtree, tvb, curr_offset, 2,
- "%s : Presentation Indicator (PI): %s",
- a_bigbuf,
- str);
-
- switch ((value & 0x0060) >> 5)
- {
- case 0: str = "User-provided, not screened"; break;
- case 1: str = "User-provided, verified and passed"; break;
- case 2: str = "User-provided, verified and failed"; break;
- default:
- str = "Network-provided";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, value, 0x0060, 16);
- proto_tree_add_text(subtree, tvb, curr_offset, 2,
- "%s : Screening Indicator (SI): %s",
- a_bigbuf,
- str);
+ proto_tree_add_item(subtree, hf_ansi_a_fwd_ms_info_rec_clg_pn_num_type, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_fwd_ms_info_rec_clg_pn_num_plan, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_fwd_ms_info_rec_clg_pn_pi, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_fwd_ms_info_rec_clg_pn_si, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
if (oct_len > 2)
{
@@ -6536,7 +5578,7 @@ elem_fwd_ms_info_recs(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, g
other_decode_bitfield_value(a_bigbuf, value, 0x001f, 16);
proto_tree_add_text(subtree, tvb, curr_offset, 2,
- "%s : MSB of first digit",
+ "%s = MSB of first digit",
a_bigbuf);
curr_offset += 2;
@@ -6551,83 +5593,77 @@ elem_fwd_ms_info_recs(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, g
}
a_bigbuf[i] = '\0';
- proto_tree_add_text(subtree, tvb, curr_offset, oct_len - 2,
+ proto_tree_add_string_format(subtree, hf_ansi_a_fwd_ms_info_rec_clg_pn_num, tvb, curr_offset, oct_len - 2,
+ a_bigbuf,
"Digits: %s",
a_bigbuf);
curr_offset += (oct_len - 3);
- other_decode_bitfield_value(a_bigbuf, oct, 0x1f, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
+ proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_8_1f, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
}
else
{
- other_decode_bitfield_value(a_bigbuf, value, 0x001f, 16);
- proto_tree_add_text(subtree, tvb, curr_offset, 2,
- "%s : Reserved",
- a_bigbuf);
-
+ proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_16_001f, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
curr_offset += 2;
}
break;
case ANSI_FWD_MS_INFO_REC_MW:
- oct = tvb_get_guint8(tvb, curr_offset);
-
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "Number of messages waiting: %u",
- oct);
-
+ proto_tree_add_item(subtree, hf_ansi_a_fwd_ms_info_rec_mw_num, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
break;
case ANSI_FWD_MS_INFO_REC_SIGNAL:
- oct = tvb_get_guint8(tvb, curr_offset);
proto_tree_add_item(subtree, hf_ansi_a_ms_info_rec_signal_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(subtree, hf_ansi_a_ms_info_rec_signal_alert_pitch, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- switch (oct & 0xc0) {
- case 0x00:
- proto_tree_add_item(subtree, hf_ansi_a_ms_info_rec_signal_tone, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
- break;
- case 0x40:
- proto_tree_add_item(subtree, hf_ansi_a_ms_info_rec_signal_isdn_alert, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
- break;
- case 0x80:
- proto_tree_add_item(subtree, hf_ansi_a_ms_info_rec_signal_is54b_alert, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
- break;
- default:
- break;
+
+ oct = tvb_get_guint8(tvb, curr_offset);
+
+ switch (oct & 0xc0)
+ {
+ case 0x00:
+ proto_tree_add_item(subtree, hf_ansi_a_ms_info_rec_signal_tone, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+ break;
+
+ case 0x40:
+ proto_tree_add_item(subtree, hf_ansi_a_ms_info_rec_signal_isdn_alert, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+ break;
+
+ case 0x80:
+ proto_tree_add_item(subtree, hf_ansi_a_ms_info_rec_signal_is54b_alert, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+ break;
+
+ default:
+ /* DO NOTHING */
+ break;
}
- oct = tvb_get_guint8(tvb, curr_offset + 1);
- other_decode_bitfield_value(a_bigbuf, oct, 0x3f, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s: Reserved",
- a_bigbuf);
+
+ proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_8_3f, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+
curr_offset += oct_len;
break;
case ANSI_FWD_MS_INFO_REC_CWI:
proto_tree_add_item(subtree, hf_ansi_a_ms_info_rec_call_waiting_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0x7f, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s: Reserved",
- a_bigbuf);
+
+ proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_8_7f, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+
curr_offset += oct_len;
break;
+
default:
- proto_tree_add_text(subtree,
- tvb, curr_offset, oct_len,
- "Record Content");
+ proto_tree_add_item(subtree, hf_ansi_a_fwd_ms_info_rec_content, tvb, curr_offset, oct_len, ENC_NA);
curr_offset += oct_len;
break;
}
}
+
+ proto_item_set_len(item, curr_offset - saved_offset);
+
+ num_recs++;
}
g_snprintf(add_string, string_len, " - %u record%s",
@@ -6649,11 +5685,11 @@ elem_rev_ms_info_recs(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, g
guint8 rec_type;
guint8 num_recs;
guint32 value;
- guint32 curr_offset, saved_offset;
+ guint32 curr_offset, saved_offset, saved_offset2;
const gchar *str;
gint ett_elem_idx, idx, i;
- proto_tree *subtree, *subtree2;
proto_item *item;
+ proto_tree *subtree, *subtree2;
guint8 *poctets;
curr_offset = offset;
@@ -6662,7 +5698,7 @@ elem_rev_ms_info_recs(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, g
while ((len - (curr_offset - offset)) >= 2)
{
- num_recs++;
+ saved_offset = curr_offset;
rec_type = tvb_get_guint8(tvb, curr_offset);
@@ -6679,10 +5715,9 @@ elem_rev_ms_info_recs(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, g
}
item =
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
+ proto_tree_add_text(tree, tvb, curr_offset, -1,
"Information Record Type [%u]: (%u) %s",
- num_recs,
+ num_recs + 1,
rec_type,
str);
@@ -6692,8 +5727,7 @@ elem_rev_ms_info_recs(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, g
oct_len = tvb_get_guint8(tvb, curr_offset);
- proto_tree_add_uint(subtree, hf_ansi_a_length, tvb,
- curr_offset, 1, oct_len);
+ proto_tree_add_uint(subtree, hf_ansi_a_length, tvb, curr_offset, 1, oct_len);
curr_offset++;
@@ -6706,8 +5740,7 @@ elem_rev_ms_info_recs(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, g
case ANSI_REV_MS_INFO_REC_KEYPAD_FAC:
poctets = tvb_get_string(wmem_packet_scope(), tvb, curr_offset, oct_len);
- proto_tree_add_string_format(subtree, hf_ansi_a_cld_party_ascii_num,
- tvb, curr_offset, oct_len,
+ proto_tree_add_string_format(subtree, hf_ansi_a_cld_party_ascii_num, tvb, curr_offset, oct_len,
(gchar *) poctets,
"Digits: %s",
(gchar *) format_text(poctets, oct_len));
@@ -6718,50 +5751,14 @@ elem_rev_ms_info_recs(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, g
case ANSI_REV_MS_INFO_REC_CLD_PN:
oct = tvb_get_guint8(tvb, curr_offset);
- switch ((oct & 0xe0) >> 5)
- {
- case 0: str = "Unknown"; break;
- case 1: str = "International number"; break;
- case 2: str = "National number"; break;
- case 3: str = "Network-specific number"; break;
- case 4: str = "Subscriber number"; break;
- case 5: str = "Reserved"; break;
- case 6: str = "Abbreviated number"; break;
- default:
- str = "Reserved for extension";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xe0, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : Number Type: %s",
- a_bigbuf,
- str);
-
- switch ((oct & 0x1e) >> 1)
- {
- case 0x00: str = "Unknown"; break;
- case 0x01: str = "ISDN/Telephony Numbering"; break;
- case 0x03: str = "Data Numbering (ITU-T Rec. X.121)"; break;
- case 0x04: str = "Telex Numbering (ITU-T Rec. F.69)"; break;
- case 0x09: str = "Private Numbering"; break;
- case 0x0f: str = "Reserved for extension"; break;
- default:
- str = "Reserved";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x1e, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : Number Plan: %s",
- a_bigbuf,
- str);
+ proto_tree_add_item(subtree, hf_ansi_a_rev_ms_info_rec_cld_pn_num_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_rev_ms_info_rec_cld_pn_num_plan, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
if (oct_len > 1)
{
other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : MSB of first digit",
+ "%s = MSB of first digit",
a_bigbuf);
curr_offset++;
@@ -6776,17 +5773,15 @@ elem_rev_ms_info_recs(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, g
}
a_bigbuf[i] = '\0';
- proto_tree_add_text(subtree, tvb, curr_offset, oct_len - 1,
+ proto_tree_add_string_format(subtree, hf_ansi_a_rev_ms_info_rec_cld_pn_num, tvb, curr_offset, oct_len - 1,
+ a_bigbuf,
"Digits: %s",
a_bigbuf);
curr_offset += (oct_len - 2);
}
- other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_8_01, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
break;
@@ -6796,76 +5791,10 @@ elem_rev_ms_info_recs(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, g
oct = (value & 0xff00) >> 8;
- switch ((oct & 0xe0) >> 5)
- {
- case 0: str = "Unknown"; break;
- case 1: str = "International number"; break;
- case 2: str = "National number"; break;
- case 3: str = "Network-specific number"; break;
- case 4: str = "Subscriber number"; break;
- case 5: str = "Reserved"; break;
- case 6: str = "Abbreviated number"; break;
- default:
- str = "Reserved for extension";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, value, 0xe000, 16);
- proto_tree_add_text(subtree, tvb, curr_offset, 2,
- "%s : Number Type: %s",
- a_bigbuf,
- str);
-
- switch ((oct & 0x1e) >> 1)
- {
- case 0x00: str = "Unknown"; break;
- case 0x01: str = "ISDN/Telephony Numbering"; break;
- case 0x03: str = "Data Numbering (ITU-T Rec. X.121)"; break;
- case 0x04: str = "Telex Numbering (ITU-T Rec. F.69)"; break;
- case 0x09: str = "Private Numbering"; break;
- case 0x0f: str = "Reserved for extension"; break;
- default:
- str = "Reserved";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, value, 0x1e00, 16);
- proto_tree_add_text(subtree, tvb, curr_offset, 2,
- "%s : Number Plan: %s",
- a_bigbuf,
- str);
-
- switch ((value & 0x0180) >> 7)
- {
- case 0: str = "Presentation allowed"; break;
- case 1: str = "Presentation restricted"; break;
- case 2: str = "Number not available"; break;
- default:
- str = "Reserved";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, value, 0x0180, 16);
- proto_tree_add_text(subtree, tvb, curr_offset, 2,
- "%s : Presentation Indicator (PI): %s",
- a_bigbuf,
- str);
-
- switch ((value & 0x0060) >> 5)
- {
- case 0: str = "User-provided, not screened"; break;
- case 1: str = "User-provided, verified and passed"; break;
- case 2: str = "User-provided, verified and failed"; break;
- default:
- str = "Network-provided";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, value, 0x0060, 16);
- proto_tree_add_text(subtree, tvb, curr_offset, 2,
- "%s : Screening Indicator (SI): %s",
- a_bigbuf,
- str);
+ proto_tree_add_item(subtree, hf_ansi_a_rev_ms_info_rec_clg_pn_num_type, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_rev_ms_info_rec_clg_pn_num_plan, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_rev_ms_info_rec_clg_pn_pi, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_rev_ms_info_rec_clg_pn_si, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
if (oct_len > 2)
{
@@ -6873,7 +5802,7 @@ elem_rev_ms_info_recs(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, g
other_decode_bitfield_value(a_bigbuf, value, 0x001f, 16);
proto_tree_add_text(subtree, tvb, curr_offset, 2,
- "%s : MSB of first digit",
+ "%s = MSB of first digit",
a_bigbuf);
curr_offset += 2;
@@ -6888,25 +5817,20 @@ elem_rev_ms_info_recs(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, g
}
a_bigbuf[i] = '\0';
- proto_tree_add_text(subtree, tvb, curr_offset, oct_len - 2,
+ proto_tree_add_string_format(subtree, hf_ansi_a_rev_ms_info_rec_clg_pn_num, tvb, curr_offset, oct_len - 2,
+ a_bigbuf,
"Digits: %s",
a_bigbuf);
curr_offset += (oct_len - 3);
- other_decode_bitfield_value(a_bigbuf, oct, 0x1f, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_8_1f, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
}
else
{
- other_decode_bitfield_value(a_bigbuf, value, 0x001f, 16);
- proto_tree_add_text(subtree, tvb, curr_offset, 2,
- "%s : Reserved",
- a_bigbuf);
+ proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_16_001f, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
curr_offset += 2;
}
@@ -6914,13 +5838,11 @@ elem_rev_ms_info_recs(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, g
case ANSI_REV_MS_INFO_REC_SO_INFO:
i = 0;
- saved_offset = curr_offset;
+ saved_offset2 = curr_offset;
- while ((oct_len - (curr_offset - saved_offset)) > 2)
+ while ((oct_len - (curr_offset - saved_offset2)) > 2)
{
- item =
- proto_tree_add_text(subtree,
- tvb, curr_offset, 3,
+ item = proto_tree_add_text(subtree, tvb, curr_offset, 3,
"Service Option [%u]",
i + 1);
@@ -6928,32 +5850,20 @@ elem_rev_ms_info_recs(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, g
oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0xfc, 8);
- proto_tree_add_text(subtree2, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8);
- proto_tree_add_text(subtree2, tvb, curr_offset, 1,
- "%s : Forward Support: %s",
- a_bigbuf,
- (oct & 0x02) ? "TRUE" : "FALSE");
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
- proto_tree_add_text(subtree2, tvb, curr_offset, 1,
- "%s : Reverse Support: %s",
- a_bigbuf,
- (oct & 0x01) ? "TRUE" : "FALSE");
+ proto_tree_add_item(subtree2, hf_ansi_a_reserved_bits_8_fc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree2, hf_ansi_a_rev_ms_info_rec_so_info_fwd_support, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree2, hf_ansi_a_rev_ms_info_rec_so_info_rev_support, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
value = tvb_get_ntohs(tvb, curr_offset);
str = ansi_a_so_int_to_str(value);
- proto_tree_add_text(subtree2, tvb, curr_offset, 2,
- "Service Option: %s (%u)",
- str,
- value);
+
+ proto_tree_add_uint_format(subtree2, hf_ansi_a_rev_ms_info_rec_so_info_so, tvb, curr_offset, 2,
+ value,
+ "%s",
+ str);
proto_item_append_text(item, " - (%u) %s", value, str);
@@ -6963,14 +5873,16 @@ elem_rev_ms_info_recs(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, g
break;
default:
- proto_tree_add_text(subtree,
- tvb, curr_offset, oct_len,
- "Record Content");
+ proto_tree_add_item(subtree, hf_ansi_a_rev_ms_info_rec_content, tvb, curr_offset, oct_len, ENC_NA);
curr_offset += oct_len;
break;
}
}
+
+ proto_item_set_len(item, curr_offset - saved_offset);
+
+ num_recs++;
}
g_snprintf(add_string, string_len, " - %u record%s",
@@ -6983,126 +5895,80 @@ elem_rev_ms_info_recs(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, g
/*
* IOS 6.2.2.73
+ *
+ * IOS 5 4.2.56
*/
+static const value_string ansi_a_ext_ho_dir_params_target_bs_values_incl_vals[] = {
+ { 0, "Only Search Window A Size is valid"},
+ { 1, "Subset is valid"},
+ { 2, "All fields valid"},
+ { 3, "Reserved"},
+ { 0, NULL}
+};
+
static guint8
elem_ext_ho_dir_params(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
guint8 oct;
guint32 value;
guint32 curr_offset;
- const gchar *str;
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Search Window A Size (Srch_Win_A): %u",
- a_bigbuf,
- (oct & 0xf0) >> 4);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Search Window N Size (Srch_Win_N): %u",
- a_bigbuf,
- oct & 0x0f);
+ proto_tree_add_item(tree, hf_ansi_a_ext_ho_dir_params_srch_win_a, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_ext_ho_dir_params_srch_win_n, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
NO_MORE_DATA_CHECK(len);
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Search Window R Size (Srch_Win_R): %u",
- a_bigbuf,
- (oct & 0xf0) >> 4);
+ proto_tree_add_item(tree, hf_ansi_a_ext_ho_dir_params_srch_win_r, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ oct = tvb_get_guint8(tvb, curr_offset);
value = tvb_get_guint8(tvb, curr_offset + 1);
other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Add Pilot Threshold (T_Add) (MSB): %u",
+ proto_tree_add_uint_format(tree, hf_ansi_a_ext_ho_dir_params_t_add, tvb, curr_offset, 1,
+ (oct & 0x0f) << 2 | (value & 0xc0) >> 6,
+ "%s = Add Pilot Threshold (T_Add) (MSB): %u",
a_bigbuf,
(oct & 0x0f) << 2 | (value & 0xc0) >> 6);
curr_offset++;
- oct = value;
+ oct = (guint8) value & 0xff;
other_decode_bitfield_value(a_bigbuf, oct, 0xc0, 8);
proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Add Pilot Threshold (T_Add) (LSB)",
+ "%s = Add Pilot Threshold (T_Add) (LSB)",
a_bigbuf);
- other_decode_bitfield_value(a_bigbuf, oct, 0x3f, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Drop Pilot Threshold (T_Drop): %u",
- a_bigbuf,
- oct & 0x3f);
+ proto_tree_add_item(tree, hf_ansi_a_ext_ho_dir_params_t_drop, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
NO_MORE_DATA_CHECK(len);
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Compare Threshold (T_Comp): %u",
- a_bigbuf,
- (oct & 0xf0) >> 4);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Drop Timer Value (T_TDrop): %u",
- a_bigbuf,
- oct & 0x0f);
+ proto_tree_add_item(tree, hf_ansi_a_ext_ho_dir_params_t_comp, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_ext_ho_dir_params_t_tdrop, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
NO_MORE_DATA_CHECK(len);
- oct = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_ansi_a_ext_ho_dir_params_nghbor_max_age, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Neighbor Max Age (Nghbor_Max_AGE): %u",
- a_bigbuf,
- (oct & 0xf0) >> 4);
+ oct = tvb_get_guint8(tvb, curr_offset);
switch (global_a_variant)
{
case A_VARIANT_IOS401:
- other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_0f, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
break;
case A_VARIANT_IOS501:
- other_decode_bitfield_value(a_bigbuf, oct, 0x0c, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- switch (oct & 0x03)
- {
- case 0: str = "Only Search Window A Size is valid"; break;
- case 1: str = "Subset is valid"; break;
- case 2: str = "All fields valid"; break;
- default:
- str = "Reserved";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x03, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Target BS Values Included: %s",
- a_bigbuf,
- str);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_0c, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_ext_ho_dir_params_target_bs_values_incl, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
break;
}
@@ -7110,63 +5976,25 @@ elem_ext_ho_dir_params(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
NO_MORE_DATA_CHECK(len);
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xc0, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x3f, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : SOFT_SLOPE: %u",
- a_bigbuf,
- oct & 0x3f);
-
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_c0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_ext_ho_dir_params_soft_slope, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
NO_MORE_DATA_CHECK(len);
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xc0, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x3f, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : ADD_INTERCEPT: %u",
- a_bigbuf,
- oct & 0x3f);
-
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_c0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_ext_ho_dir_params_add_intercept, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
NO_MORE_DATA_CHECK(len);
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xc0, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x3f, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : DROP_INTERCEPT: %u",
- a_bigbuf,
- oct & 0x3f);
-
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_c0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_ext_ho_dir_params_drop_intercept, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
NO_MORE_DATA_CHECK(len);
- oct = tvb_get_guint8(tvb, curr_offset);
-
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "Target BS P_REV: %u",
- oct);
-
+ proto_tree_add_item(tree, hf_ansi_a_ext_ho_dir_params_target_bs_p_rev, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
@@ -7202,58 +6030,34 @@ elem_ext_ho_dir_params(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
/*
* IOS 6.2.2.79
*/
+static const value_string ansi_a_cdma_sowd_resolution_vals[] = {
+ { 0, "100 nsec"},
+ { 1, "50 nsec"},
+ { 2, "1/16 CDMA PN Chip"},
+ { 3, "Reserved"},
+ { 0, NULL}
+};
+
static guint8
elem_cdma_sowd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
{
- guint8 oct;
- guint32 value;
guint32 curr_offset;
- const gchar *str = NULL;
curr_offset = offset;
curr_offset += elem_cell_id(tvb, pinfo, tree, offset, len, add_string, string_len);
add_string[0] = '\0';
- value = tvb_get_ntohs(tvb, curr_offset);
-
- proto_tree_add_text(tree,
- tvb, curr_offset, 2,
- "CDMA Serving One Way Delay: %u",
- value);
-
+ proto_tree_add_item(tree, hf_ansi_a_cdma_sowd_sowd, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
curr_offset += 2;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xfc, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- switch (oct & 0x03)
- {
- case 0: str = "100 nsec"; break;
- case 1: str = "50 nsec"; break;
- case 2: str = "1/16 CDMA PN Chip"; break;
- case 3: str = "Reserved"; break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x03, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Resolution: %s",
- a_bigbuf,
- str);
-
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_fc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_cdma_sowd_resolution, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
if ((len - (curr_offset - offset)) > 1)
{
- proto_tree_add_text(tree,
- tvb, curr_offset, 2,
- "Timestamp");
+ proto_tree_add_item(tree, hf_ansi_a_cdma_sowd_timestamp, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
curr_offset += 2;
}
@@ -7276,77 +6080,27 @@ elem_cdma_sowd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offs
/*
* IOS 6.2.2.82
*/
+static const value_string ansi_a_re_res_vals[] = {
+ { 0, "Not reported"},
+ { 1, "Radio environment is acceptable"},
+ { 2, "Radio environment is marginally acceptable"},
+ { 3, "Radio environment is poor"},
+ { 0, NULL}
+};
+
static guint8
elem_re_res(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint8 oct;
guint32 curr_offset;
- const gchar *str;
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Include Priority: MSC %s include priority in Assignment Request",
- a_bigbuf,
- (oct & 0x40) ? "should" : "does not need to");
-
- switch ((oct & 0x30) >> 4)
- {
- case 0: str = "Not reported"; break;
- case 1: str = "radio environment is acceptable"; break;
- case 2: str = "radio environment is marginally acceptable"; break;
- default:
- str = "radio environment is poor";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x30, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Forward: %s",
- a_bigbuf,
- str);
-
- switch ((oct & 0x0c) >> 2)
- {
- case 0: str = "Not reported"; break;
- case 1: str = "radio environment is acceptable"; break;
- case 2: str = "radio environment is marginally acceptable"; break;
- default:
- str = "radio environment is poor";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x0c, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reverse: %s",
- a_bigbuf,
- str);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Alloc: resources are %sallocated",
- a_bigbuf,
- (oct & 0x02) ? "" : "not ");
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Avail: resources are %savailable",
- a_bigbuf,
- (oct & 0x01) ? "" : "not ");
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_80, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_re_res_prio_incl, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_re_res_forward, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_re_res_reverse, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_re_res_alloc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_re_res_avail, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
@@ -7471,75 +6225,28 @@ elem_re_res(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 off
static guint8
elem_cld_party_ascii_num(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
{
- guint8 oct;
guint32 curr_offset;
guint8 *poctets;
- const gchar *str;
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : Extension",
- a_bigbuf);
-
- switch ((oct & 0x70) >> 4)
- {
- case 0: str = "Unknown"; break;
- case 1: str = "International number"; break;
- case 2: str = "National number"; break;
- case 3: str = "Network specific number"; break;
- case 4: str = "Dedicated PAD access, short code"; break;
- case 7: str = "Reserved for extension"; break;
- default:
- str = "Reserved";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x70, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Type of Number: %s",
- a_bigbuf,
- str);
-
- switch (oct & 0x0f)
- {
- case 0x00: str = "Unknown"; break;
- case 0x01: str = "ISDN/telephony number plan (ITU recommendation E.164/E.163)"; break;
- case 0x03: str = "Data number plan (ITU recommendation X.121)"; break;
- case 0x04: str = "Telex numbering plan (ITU recommendation F.69)"; break;
- case 0x07: str = "Reserved for extension"; break;
- case 0x08: str = "National numbering plan"; break;
- case 0x09: str = "Private numbering plan"; break;
- default:
- str = "Reserved";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Numbering Plan Identification: %s",
- a_bigbuf,
- str);
+ proto_tree_add_item(tree, hf_ansi_a_extension_8_80, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_cld_party_ascii_num_ton, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_cld_party_ascii_num_plan, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
poctets = tvb_get_string(wmem_packet_scope(), tvb, curr_offset, len - (curr_offset - offset));
- proto_tree_add_string_format(tree, hf_ansi_a_cld_party_ascii_num,
- tvb, curr_offset, len - (curr_offset - offset),
+ proto_tree_add_string_format(tree, hf_ansi_a_cld_party_ascii_num, tvb, curr_offset, len - (curr_offset - offset),
(gchar *) poctets,
"Digits: %s",
(gchar *) format_text(poctets, len - (curr_offset - offset)));
- curr_offset += len - (curr_offset - offset);
-
g_snprintf(add_string, string_len, " - (%s)", poctets);
+ curr_offset += len - (curr_offset - offset);
+
EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
return(curr_offset - offset);
@@ -7553,40 +6260,21 @@ elem_band_class(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32
{
guint8 oct;
guint32 curr_offset;
- gint temp_int;
const gchar *str;
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_e0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_band_class, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, oct, 0xe0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ oct = tvb_get_guint8(tvb, curr_offset);
- temp_int = oct & 0x1f;
- if ((temp_int < 0) || (temp_int >= (gint) NUM_BAND_CLASS_STR))
- {
- str = "Reserved";
- }
- else
- {
- str = band_class_str[temp_int];
- }
+ str = val_to_str_const(oct & 0x1f, ansi_a_band_class_vals, "Reserved");
- other_decode_bitfield_value(a_bigbuf, oct, 0x1f, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Band Class: %s",
- a_bigbuf,
- str);
+ g_snprintf(add_string, string_len, " - (%s)", str);
curr_offset++;
- g_snprintf(add_string, string_len, " - (%s)", str);
-
EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
return(curr_offset - offset);
@@ -7609,6 +6297,8 @@ elem_band_class(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32
/*
* IOS 6.2.2.110
+ *
+ * IOS 5 4.2.60
*/
static guint8
elem_is2000_cause(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
@@ -7617,7 +6307,7 @@ elem_is2000_cause(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint
curr_offset = offset;
- proto_tree_add_text(tree, tvb, curr_offset, len, "IS-95/IS-2000 Cause Information");
+ proto_tree_add_item(tree, hf_ansi_a_is2000_cause, tvb, curr_offset, len, ENC_NA);
curr_offset += len;
@@ -7647,9 +6337,10 @@ elem_is2000_cause(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint
static guint8
elem_auth_event(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
- guint8 oct;
- guint32 curr_offset;
- const gchar *str;
+ const guint8 *bytes_p;
+ guint8 oct;
+ guint32 curr_offset;
+ const gchar *str;
curr_offset = offset;
@@ -7668,12 +6359,16 @@ elem_auth_event(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32
break;
}
- proto_tree_add_text(tree, tvb, curr_offset, len,
- "%s", str);
+ bytes_p = tvb_get_ptr(tvb, curr_offset, len);
+
+ proto_tree_add_bytes_format(tree, hf_ansi_a_auth_event, tvb, curr_offset, len,
+ bytes_p,
+ "%s",
+ str);
}
else
{
- proto_tree_add_text(tree, tvb, curr_offset, len, "Event");
+ proto_tree_add_item(tree, hf_ansi_a_auth_event, tvb, curr_offset, len, ENC_NA);
}
curr_offset += len;
@@ -7795,6 +6490,7 @@ elem_auth_event(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32
/*
* IOS 6.2.2.137
+ * IOS 5 4.2.62
* Generic decode is good enough
*/
@@ -7804,25 +6500,12 @@ elem_auth_event(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32
static guint8
elem_psmm_count(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
- guint8 oct;
guint32 curr_offset;
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : PSMM Count: %u",
- a_bigbuf,
- oct & 0x0f);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_psmm_count, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
@@ -7841,7 +6524,7 @@ elem_geo_loc(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 of
curr_offset = offset;
- proto_tree_add_text(tree, tvb, curr_offset, len, "Calling Geodetic Location");
+ proto_tree_add_item(tree, hf_ansi_a_geo_loc, tvb, curr_offset, len, ENC_NA);
curr_offset += len;
@@ -7897,30 +6580,15 @@ static guint8
elem_cct_group(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
{
guint8 oct;
- guint32 value;
guint32 curr_offset;
+ proto_item *item;
+ proto_tree *subtree;
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xfc, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : All Circuits",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Inclusive",
- a_bigbuf);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_fc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_cct_group_all_circuits, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_cct_group_inclusive, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
@@ -7928,38 +6596,28 @@ elem_cct_group(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32
oct = tvb_get_guint8(tvb, curr_offset);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
+ proto_tree_add_uint_format(tree, hf_ansi_a_cct_group_count, tvb, curr_offset, 1,
+ oct,
"Count: %u circuit%s",
- oct, plurality(oct, "", "s"));
+ oct,
+ plurality(oct, "", "s"));
g_snprintf(add_string, string_len, " - %u circuit%s",
oct, plurality(oct, "", "s"));
curr_offset++;
- value = tvb_get_ntohs(tvb, curr_offset);
+ item = proto_tree_add_item(tree, hf_ansi_a_cct_group_first_cic, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+ subtree = proto_item_add_subtree(item, ett_cic);
- other_decode_bitfield_value(a_bigbuf, value, 0xffe0, 16);
- proto_tree_add_text(tree,
- tvb, curr_offset, 2,
- "%s : PCM Multiplexer: %u",
- a_bigbuf,
- (value & 0xffe0) >> 5);
-
- other_decode_bitfield_value(a_bigbuf, value, 0x001f, 16);
- proto_tree_add_text(tree,
- tvb, curr_offset, 2,
- "%s : Timeslot: %u",
- a_bigbuf,
- value & 0x001f);
+ proto_tree_add_item(subtree, hf_ansi_a_cct_group_first_cic_pcm_multi, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_cct_group_first_cic_timeslot, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
curr_offset += 2;
NO_MORE_DATA_CHECK(len);
- proto_tree_add_text(tree,
- tvb, curr_offset, len - (curr_offset - offset),
+ proto_tree_add_text(tree, tvb, curr_offset, len - (curr_offset - offset),
"Circuit Bitmap");
curr_offset += len - (curr_offset - offset);
@@ -7979,7 +6637,7 @@ elem_paca_ts(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 of
curr_offset = offset;
- proto_tree_add_text(tree, tvb, curr_offset, len, "PACA Queuing Time");
+ proto_tree_add_item(tree, hf_ansi_a_paca_timestamp_queuing_time, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
curr_offset += len;
@@ -7991,47 +6649,35 @@ elem_paca_ts(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 of
/*
* IOS 6.2.2.150
*/
+static const value_string ansi_a_paca_order_action_reqd_vals[] = {
+ { 0, "Reserved"},
+ { 1, "Update Queue Position and notify MS"},
+ { 2, "Remove MS from the queue and release MS"},
+ { 3, "Remove MS from the queue"},
+ { 4, "MS Requested PACA Cancel"},
+ { 5, "BS Requested PACA Cancel"},
+ { 6, "Reserved"},
+ { 7, "Reserved"},
+ { 0, NULL}
+};
+
static guint8
elem_paca_order(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
{
guint8 oct;
guint32 curr_offset;
- const gchar *str;
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xf8, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_f8, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- switch (oct & 0x07)
- {
- case 0: str = "Reserved"; break;
- case 1: str = "Update Queue Position and notify MS"; break;
- case 2: str = "Remove MS from the queue and release MS"; break;
- case 3: str = "Remove MS from the queue"; break;
- case 4: str = "MS Requested PACA Cancel"; break;
- case 5: str = "BS Requested PACA Cancel"; break;
- default:
- str = "Reserved";
- break;
- }
+ oct = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_ansi_a_paca_order_action_reqd, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : PACA Action Required: %s",
- a_bigbuf,
- str);
+ g_snprintf(add_string, string_len, " - (%s)", val_to_str_const(oct & 7, ansi_a_paca_order_action_reqd_vals, "Reserved"));
curr_offset++;
- g_snprintf(add_string, string_len, " - (%s)", str);
-
EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
return(curr_offset - offset);
@@ -8048,24 +6694,15 @@ elem_paca_reoi(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_fe, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_paca_reoi_pri, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, oct, 0xfe, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : PACA Reorigination Indicator (PRI)",
- a_bigbuf);
+ g_snprintf(add_string, string_len, " - (%sReorigination)", (oct & 0x01) ? "" : "Not ");
curr_offset++;
- g_snprintf(add_string, string_len, " - (%sReorigination)", (oct & 0x01) ? "" : "Not ");
-
EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
return(curr_offset - offset);
@@ -8074,6 +6711,8 @@ elem_paca_reoi(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32
/*
* IOS 5 4.2.89
*/
+static const true_false_string tfs_a2p_bearer_sess_addr_flag = { "Session IP Address is present", "Session IP Address is not present" };
+
static guint8
elem_a2p_bearer_session(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
@@ -8082,33 +6721,13 @@ elem_a2p_bearer_session(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xc0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_c0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_a2p_bearer_sess_max_frames, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, oct, 0x38, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Max Frames: %u",
- a_bigbuf,
- (oct & 0x38) >> 3);
+ oct = tvb_get_guint8(tvb, curr_offset);
- other_decode_bitfield_value(a_bigbuf, oct, 0x06, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Session IP Address Type: Internet Protocol IPv%s",
- a_bigbuf,
- ((oct & 0x06) >> 1) ? "6" : "4");
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Session Address Flag",
- a_bigbuf);
+ proto_tree_add_item(tree, hf_ansi_a_a2p_bearer_sess_ip_addr_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_a2p_bearer_sess_addr_flag, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
@@ -8120,8 +6739,7 @@ elem_a2p_bearer_session(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
{
SHORT_DATA_CHECK(len - (curr_offset - offset), 18);
- proto_tree_add_item(tree, hf_ansi_a_a2p_bearer_ipv6_addr,
- tvb, curr_offset, 16, ENC_NA);
+ proto_tree_add_item(tree, hf_ansi_a_a2p_bearer_sess_ipv6_addr, tvb, curr_offset, 16, ENC_NA);
rtp_src_addr.type = AT_IPv6;
rtp_src_addr.len = 16;
@@ -8135,8 +6753,7 @@ elem_a2p_bearer_session(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
{
SHORT_DATA_CHECK(len - (curr_offset - offset), 6);
- proto_tree_add_item(tree, hf_ansi_a_a2p_bearer_ipv4_addr,
- tvb, curr_offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_a2p_bearer_sess_ipv4_addr, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
rtp_src_addr.type = AT_IPv4;
rtp_src_addr.len = 4;
@@ -8147,8 +6764,7 @@ elem_a2p_bearer_session(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
curr_offset += 4;
}
- proto_tree_add_item(tree, hf_ansi_a_a2p_bearer_udp_port,
- tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_a2p_bearer_sess_udp_port, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
rtp_port = tvb_get_ntohs(tvb, curr_offset);
@@ -8163,6 +6779,45 @@ elem_a2p_bearer_session(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
/*
* IOS 5 4.2.90
*/
+static const value_string ansi_a_a2p_bearer_form_format_tag_type_vals[] = {
+ { 0, "Unknown"},
+ { 1, "In-band signaling"},
+ { 2, "Assigned"},
+ { 3, "Unassigned"},
+ { 4, "Transcoded"},
+ { 5, "Reserved"},
+ { 6, "Reserved"},
+ { 7, "Reserved"},
+ { 0, NULL}
+};
+
+static const value_string ansi_a_a2p_bearer_form_format_format_id_vals[] = {
+ { 0, "PCMU"},
+ { 1, "PCMA"},
+ { 2, "13K Vocoder"},
+ { 3, "EVRC"},
+ { 4, "EVRC0"},
+ { 5, "SMV"},
+ { 6, "SMV0"},
+ { 7, "telephone-event"},
+ /*
+ * the following Bearer Format IDs have been assumed/used by Star Solutions, however,
+ * 3GPP2 has not yet updated the IOS specifications for these vocoders
+ * (the MIME types are in IANA)
+ */
+ { 8, "EVRCB"},
+ { 9, "EVRCB0"},
+ { 10, "EVRCWB"},
+ { 11, "EVRCWB0"},
+ { 12, "EVRCNW"},
+ { 13, "EVRCNW0"},
+ { 14, "EVRCNW2K"},
+ { 15, "EVRCNW2K0"},
+ { 0, NULL}
+};
+
+static const true_false_string tfs_a2p_bearer_form_format_bearer_addr_flag = { "Override Bearer Session IP Address", "Use Bearer Session IP Address" };
+
static guint8
elem_a2p_bearer_format(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
@@ -8193,23 +6848,13 @@ elem_a2p_bearer_format(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0xfc, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Number of Bearer Formats: %u",
- a_bigbuf,
- (oct & 0xfc) >> 2);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x03, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Session IP Address Type: Internet Protocol IPv%s",
- a_bigbuf,
- (oct & 0x03) ? "6" : "4");
+ proto_tree_add_item(tree, hf_ansi_a_a2p_bearer_form_num_formats, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ oct = tvb_get_guint8(tvb, curr_offset);
ip_addr_type = (oct & 0x03);
+ str = val_to_str_const(ip_addr_type, ansi_a_ip_addr_type_vals, "Reserved");
+ proto_tree_add_uint_format_value(tree, hf_ansi_a_a2p_bearer_form_ip_addr_type, tvb, curr_offset, 1,
+ ip_addr_type, "%s", str);
curr_offset++;
@@ -8219,30 +6864,19 @@ elem_a2p_bearer_format(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
{
orig_offset = curr_offset;
- item =
- proto_tree_add_text(tree,
- tvb, curr_offset, -1,
- "Bearer Format [%u]",
- num_bearers + 1);
+ item = proto_tree_add_text(tree, tvb, curr_offset, -1,
+ "Bearer Format [%u]", num_bearers + 1);
subtree = proto_item_add_subtree(item, ett_bearer_list);
- oct = tvb_get_guint8(tvb, curr_offset);
-
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "Bearer Format Length: %u",
- oct);
-
+ proto_tree_add_item(subtree, hf_ansi_a_a2p_bearer_form_format_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
NO_MORE_DATA_CHECK(len);
- oct = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(subtree, hf_ansi_a_extension_8_80, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, oct, 0x80, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : Extension",
- a_bigbuf);
+ oct = tvb_get_guint8(tvb, curr_offset);
ext = (oct & 0x80) ? TRUE : FALSE;
@@ -8251,84 +6885,41 @@ elem_a2p_bearer_format(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
switch ((oct & 0x70) >> 4)
{
- case 0: str = "Unknown"; break;
case 1:
- str = "In-band signaling";
in_band_format_assigned = TRUE;
break;
case 2:
- str = "Assigned";
format_assigned = TRUE;
break;
- case 3: str = "Unassigned"; break;
- case 4: str = "Transcoded"; break;
- default:
- str = "Reserved";
- break;
}
- other_decode_bitfield_value(a_bigbuf, oct, 0x70, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : Bearer Format Tag Type: %s",
- a_bigbuf,
- str);
+ proto_tree_add_item(subtree, hf_ansi_a_a2p_bearer_form_format_tag_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
/*
* assuming default sampling rate of 8000Hz
*/
sample_rate = 8000;
- switch (oct & 0x0f)
- {
- case 0: mime_type = str = "PCMU"; break;
- case 1: mime_type = str = "PCMA"; break;
- case 2:
- str = "13K Vocoder";
- mime_type = "QCELP";
- break;
- case 3: mime_type = str = "EVRC"; break;
- case 4: mime_type = str = "EVRC0"; break;
- case 5: mime_type = str = "SMV"; break;
- case 6: mime_type = str = "SMV0"; break;
- case 7: mime_type = str = "telephone-event"; break;
- case 8: mime_type = str = "EVRCB"; break;
- case 9: mime_type = str = "EVRCB0"; break;
- case 10: mime_type = str = "EVRCWB"; sample_rate = 16000; break;
- case 11: mime_type = str = "EVRCWB0"; sample_rate = 16000; break;
- case 12: mime_type = str = "EVRCNW"; sample_rate = 16000; break;
- case 13: mime_type = str = "EVRCNW0"; sample_rate = 16000; break;
- default:
- mime_type = str = "Reserved";
- break;
- }
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : Bearer Format ID: %s",
- a_bigbuf,
- str);
-
- proto_item_append_text(item, " - (%s)", str);
+ /*
+ * Bearer Format ID
+ */
+ if ((oct & 0x0f) >= 10)
+ sample_rate = 16000;
+ mime_type = val_to_str_const(oct & 0xf, ansi_a_a2p_bearer_form_format_format_id_vals, "Reserved");
+ proto_tree_add_item(subtree, hf_ansi_a_a2p_bearer_form_format_format_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_item_append_text(item, " - (%s)", mime_type);
curr_offset++;
NO_MORE_DATA_CHECK(len);
+ proto_tree_add_item(subtree, hf_ansi_a_a2p_bearer_form_format_rtp_payload_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+
oct = tvb_get_guint8(tvb, curr_offset);
rtp_payload_type = (oct & 0xfe) >> 1;
- other_decode_bitfield_value(a_bigbuf, oct, 0xfe, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : RTP Payload Type: %u",
- a_bigbuf,
- rtp_payload_type);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : Bearer Address Flag",
- a_bigbuf);
-
+ proto_tree_add_item(subtree, hf_ansi_a_a2p_bearer_form_format_bearer_addr_flag, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
if (oct & 0x01)
@@ -8339,8 +6930,7 @@ elem_a2p_bearer_format(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
{
SHORT_DATA_CHECK(len - (curr_offset - offset), 18);
- proto_tree_add_item(subtree, hf_ansi_a_a2p_bearer_ipv6_addr,
- tvb, curr_offset, 16, ENC_NA);
+ proto_tree_add_item(subtree, hf_ansi_a_a2p_bearer_form_format_ipv6_addr, tvb, curr_offset, 16, ENC_NA);
if (format_assigned)
{
@@ -8357,8 +6947,7 @@ elem_a2p_bearer_format(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
{
SHORT_DATA_CHECK(len - (curr_offset - offset), 6);
- proto_tree_add_item(subtree, hf_ansi_a_a2p_bearer_ipv4_addr,
- tvb, curr_offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_a2p_bearer_form_format_ipv4_addr, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
if (format_assigned)
{
@@ -8372,8 +6961,7 @@ elem_a2p_bearer_format(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
curr_offset += 4;
}
- proto_tree_add_item(subtree, hf_ansi_a_a2p_bearer_udp_port,
- tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_a2p_bearer_form_format_udp_port, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
if (format_assigned)
{
@@ -8387,30 +6975,20 @@ elem_a2p_bearer_format(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
{
SHORT_DATA_CHECK(len - (curr_offset - offset), 1);
+ proto_tree_add_item(subtree, hf_ansi_a_a2p_bearer_form_format_ext_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_a2p_bearer_form_format_ext_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+
oct = tvb_get_guint8(tvb, curr_offset);
ext_len = (oct & 0xf0) >> 4;
- other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : Extension Length: %u",
- a_bigbuf,
- ext_len);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8);
- proto_tree_add_text(subtree, tvb, curr_offset, 1,
- "%s : Extension ID: %u",
- a_bigbuf,
- (oct & 0x0f));
-
curr_offset++;
if (ext_len > 0)
{
SHORT_DATA_CHECK(len - (curr_offset - offset), ext_len);
- proto_tree_add_text(subtree, tvb, curr_offset, ext_len,
- "Extension Parameter value");
+ proto_tree_add_text(subtree, tvb, curr_offset, ext_len, "Extension Parameter value");
curr_offset += ext_len;
}
@@ -8438,7 +7016,7 @@ elem_a2p_bearer_format(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
if (in_band_format_assigned)
{
- key = (gint *) wmem_alloc(wmem_file_scope(), sizeof(gint));
+ key = (gint *) wmem_alloc(wmem_file_scope(), sizeof(gint));
*key = rtp_payload_type;
encoding_name_and_rate = wmem_new(wmem_file_scope(), encoding_name_and_rate_t);
@@ -8468,47 +7046,15 @@ elem_a2p_bearer_format(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
static guint8
elem_ms_des_freq(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len)
{
- guint8 oct;
guint32 value;
- gint temp_int;
guint32 curr_offset;
- const gchar *str;
curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
-
- temp_int = (oct & 0xf8) >> 3;
- if ((temp_int < 0) || (temp_int >= (gint) NUM_BAND_CLASS_STR))
- {
- str = "Reserved";
- }
- else
- {
- str = band_class_str[temp_int];
- }
+ proto_tree_add_item(tree, hf_ansi_a_ms_des_freq_band_class, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_ms_des_freq_cdma_channel, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
- other_decode_bitfield_value(a_bigbuf, oct, 0xf8, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Band Class: %s",
- a_bigbuf,
- str);
-
- value = tvb_get_guint8(tvb, curr_offset + 1) | ((oct & 0x07) << 8);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : CDMA Channel (MSB): %u",
- a_bigbuf,
- value);
-
- curr_offset++;
-
- other_decode_bitfield_value(a_bigbuf, value & 0x00ff, 0xff, 8);
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : CDMA Channel (LSB)",
- a_bigbuf);
+ value = tvb_get_ntohs(tvb, curr_offset) & 0x07ff;
g_snprintf(add_string, string_len, " - (CDMA Channel: %u)", value);
@@ -8522,6 +7068,14 @@ elem_ms_des_freq(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint3
/*
* IOS 5 4.2.87
*/
+static const value_string ansi_a_plcm_id_plcm_type_vals[] = {
+ { 0, "PLCM derived from ESN or MEID"},
+ { 1, "PLCM specified by the base station"},
+ { 2, "PLCM derived from IMSI_O_S when IMSI_O is derived from IMSI_M"},
+ { 3, "PLCM derived from IMSI_O_S when IMSI_O is derived from IMSI_T"},
+ { 0, NULL}
+};
+
static guint8
elem_plcm_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
@@ -8536,33 +7090,15 @@ elem_plcm_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 of
/*
* from C.S0005-D v1.0 L3 Table 3.7.2.3.2.21-5
*/
- switch ((oct & 0xf0) >> 4)
- {
- case 0x00: str = "PLCM derived from ESN or MEID"; break;
- case 0x01: str = "PLCM specified by the base station"; break;
- case 0x02: str = "PLCM derived from IMSI_O_S when IMSI_O is derived from IMSI_M"; break;
- case 0x03: str = "PLCM derived from IMSI_O_S when IMSI_O is derived from IMSI_T"; break;
- default:
- str = "Reserved";
- break;
- }
+ str = val_to_str_const((oct & 0xf0) >> 4, ansi_a_plcm_id_plcm_type_vals, "Reserved");
+ proto_tree_add_uint_format_value(tree, hf_ansi_a_plcm_id_plcm_type, tvb, curr_offset, 1,
+ oct, "%s", str);
- other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : PLCM_TYPE: %s",
- a_bigbuf,
- str);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x0c, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s : Reserved",
- a_bigbuf);
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_0c, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
other_decode_bitfield_value(a_bigbuf, oct, 0x03, 8);
proto_tree_add_text(tree, tvb, curr_offset, 1,
- "%s : PLCM_42 (MSB)",
+ "%s = PLCM_42 (MSB)",
a_bigbuf);
curr_offset++;
@@ -8587,6 +7123,97 @@ elem_plcm_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 of
*/
/*
+ * IS-634.400A 6.2.2.56
+ */
+static const value_string ansi_a_bdtmf_trans_info_dtmf_off_len_vals[] = {
+ { 0, "60ms"},
+ { 1, "100ms"},
+ { 2, "150ms"},
+ { 3, "200ms"},
+ { 4, "Reserved"},
+ { 5, "Reserved"},
+ { 6, "Reserved"},
+ { 7, "Reserved"},
+ { 0, NULL}
+};
+
+static const value_string ansi_a_bdtmf_trans_info_dtmf_on_len_vals[] = {
+ { 0, "95ms"},
+ { 1, "150ms"},
+ { 2, "200ms"},
+ { 3, "250ms"},
+ { 4, "300ms"},
+ { 5, "350ms"},
+ { 6, "Reserved"},
+ { 7, "Reserved"},
+ { 0, NULL}
+};
+
+static guint8
+elem_bdtmf_trans_info(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
+{
+ guint32 curr_offset;
+
+ curr_offset = offset;
+
+ proto_tree_add_item(tree, hf_ansi_a_reserved_bits_8_c0, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_bdtmf_trans_info_dtmf_off_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_ansi_a_bdtmf_trans_info_dtmf_on_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ curr_offset++;
+
+ EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
+
+ return(curr_offset - offset);
+}
+
+/*
+ * IS-634.400A 6.2.2.57
+ */
+static guint8
+elem_dtmf_chars(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
+{
+ guint8 oct;
+ guint32 curr_offset;
+ guint8 packed_len;
+ guint8 *poctets;
+
+ curr_offset = offset;
+
+ proto_tree_add_item(tree, hf_ansi_a_bdtmf_chars_num_chars, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+
+ oct = tvb_get_guint8(tvb, curr_offset);
+
+ curr_offset++;
+
+ packed_len = len - (curr_offset - offset);
+
+ poctets = tvb_get_string(wmem_packet_scope(), tvb, curr_offset, packed_len);
+
+ /*
+ * the packed DTMF digits are not "terminated" with a '0xF' for an odd
+ * number of digits but the unpack routine expects it
+ */
+ if (oct & 0x01)
+ {
+ poctets[packed_len-1] |= 0xF0;
+ }
+
+ my_dgt_tbcd_unpack(a_bigbuf, poctets, packed_len,
+ &Dgt_dtmf);
+
+ proto_tree_add_string(tree, hf_ansi_a_bdtmf_chars_digits, tvb, curr_offset, packed_len,
+ a_bigbuf);
+
+ g_snprintf(add_string, string_len, " - (%s)", a_bigbuf);
+
+ curr_offset += packed_len;
+
+ EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
+
+ return(curr_offset - offset);
+}
+
+/*
* ORDER MUST BE MAINTAINED
*
* The value of this enum is used as an index into
@@ -8678,16 +7305,18 @@ typedef enum
ANSI_A_E_XMODE, /* Transcoder Mode */
ANSI_A_E_UZ_ID, /* User Zone ID */
ANSI_A_E_VP_REQ, /* Voice Privacy Request */
+ ANSI_A_E_REV_MS_INFO_RECS, /* (Reverse) MS Information Records */
+ ANSI_A_E_BDTMF_TRANS_INFO, /* Burst DTMF Transmission Information IS-634.400A 6.2.2.56 */
+ ANSI_A_E_DTMF_CHARS, /* DTMF Characters IS-634.400A 6.2.2.57 */
ANSI_A_E_A2P_BEARER_SESSION, /* A2p Bearer Session-Level Parameters */
ANSI_A_E_A2P_BEARER_FORMAT, /* A2p Bearer Format-Specific Parameters */
ANSI_A_E_MS_DES_FREQ, /* MS Designated Frequency */
ANSI_A_E_MOB_SUB_INFO, /* Mobile Subscription Information */
ANSI_A_E_PLCM_ID, /* Public Long Code Mask Identifier */
- ANSI_A_E_REV_MS_INFO_RECS, /* (Reverse) MS Information Records */
- ANSI_A_E_NONE /* NONE */
+ ANSI_A_E_NONE /* NONE */
}
elem_idx_t;
-static elem_idx_t ansi_a_elem_1_max = (elem_idx_t)0;
+static elem_idx_t ansi_a_elem_1_max = (elem_idx_t) 0;
#define MAX_IOS401_NUM_ELEM_1 (sizeof(ansi_a_ios401_elem_1_strings)/sizeof(ext_value_string_t))
#define MAX_IOS501_NUM_ELEM_1 (sizeof(ansi_a_ios501_elem_1_strings)/sizeof(ext_value_string_t))
@@ -8696,11 +7325,11 @@ static guint8 (*elem_1_fcn[])(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre
{
elem_acc_net_id, /* Access Network Identifiers */
elem_adds_user_part, /* ADDS User Part */
- elem_amps_hho_param, /* AMPS Hard Handoff Parameters */
+ elem_amps_hho_params, /* AMPS Hard Handoff Parameters */
elem_anchor_pdsn_addr, /* Anchor PDSN Address */
elem_anchor_pp_addr, /* Anchor P-P Address */
elem_auth_chlg_param, /* Authentication Challenge Parameter */
- NULL /* no decode required */, /* Authentication Confirmation Parameter (RANDC) */
+ elem_auth_conf_param, /* Authentication Confirmation Parameter (RANDC) */
NULL /* no decode required */, /* Authentication Data */
elem_auth_event, /* Authentication Event */
elem_auth_param_count, /* Authentication Parameter COUNT */
@@ -8777,13 +7406,15 @@ static guint8 (*elem_1_fcn[])(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre
elem_xmode, /* Transcoder Mode */
elem_uz_id, /* User Zone ID */
NULL /* no associated data */, /* Voice Privacy Request */
+ elem_rev_ms_info_recs, /* (Reverse) MS Information Records */
+ elem_bdtmf_trans_info, /* Burst DTMF Transmission Information */
+ elem_dtmf_chars, /* DTMF Characters */
elem_a2p_bearer_session, /* A2p Bearer Session-Level Parameters */
elem_a2p_bearer_format, /* A2p Bearer Format-Specific Parameters */
elem_ms_des_freq, /* MS Designated Frequency */
NULL, /* Mobile Subscription Information */
elem_plcm_id, /* Public Long Code Mask Identification */
- elem_rev_ms_info_recs, /* (Reverse) MS Information Records */
- NULL, /* NONE */
+ NULL /* NONE */
};
/* MESSAGE FUNCTIONS */
@@ -8804,10 +7435,10 @@ elem_tlv(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, elem_idx_t idx, gu
curr_offset = offset;
consumed = 0;
- if ((int)idx < 0 || idx >= ansi_a_elem_1_max-1)
+ if ((int) idx < 0 || idx >= ansi_a_elem_1_max-1)
{
/* Unknown index, skip the element */
- return tvb_length_remaining(tvb, offset) ;
+ return tvb_length_remaining(tvb, offset);
}
oct = tvb_get_guint8(tvb, curr_offset);
@@ -8819,27 +7450,22 @@ elem_tlv(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, elem_idx_t idx, gu
parm_len = tvb_get_guint8(tvb, curr_offset + 1);
item =
- proto_tree_add_text(tree,
- tvb, curr_offset, parm_len + 2,
+ proto_tree_add_text(tree, tvb, curr_offset, parm_len + 2,
"%s%s",
ansi_a_elem_1_strings[idx].strptr,
(name_add == NULL) || (name_add[0] == '\0') ? "" : name_add);
subtree = proto_item_add_subtree(item, ett_ansi_elem_1[idx]);
- proto_tree_add_uint_format(subtree, hf_ansi_a_elem_id, tvb,
- curr_offset, 1, oct,
- "Element ID");
+ proto_tree_add_uint(subtree, hf_ansi_a_elem_id, tvb, curr_offset, 1, oct);
- proto_tree_add_uint(subtree, hf_ansi_a_length, tvb,
- curr_offset + 1, 1, parm_len);
+ proto_tree_add_uint(subtree, hf_ansi_a_length, tvb, curr_offset + 1, 1, parm_len);
if (parm_len > 0)
{
if (elem_1_fcn[dec_idx] == NULL)
{
- proto_tree_add_text(subtree,
- tvb, curr_offset + 2, parm_len,
+ proto_tree_add_expert_format(subtree, pinfo, &ei_ansi_a_no_tlv_elem_diss, tvb, curr_offset + 2, parm_len,
"Element Value");
consumed = parm_len;
@@ -8887,10 +7513,10 @@ elem_tv(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, elem_idx_t idx, gui
curr_offset = offset;
consumed = 0;
- if ((int)idx < 0 || idx >= ansi_a_elem_1_max-1)
+ if ((int) idx < 0 || idx >= ansi_a_elem_1_max-1)
{
/* Unknown index, skip the element */
- return tvb_length_remaining(tvb, offset) ;
+ return tvb_length_remaining(tvb, offset);
}
oct = tvb_get_guint8(tvb, curr_offset);
@@ -8908,16 +7534,13 @@ elem_tv(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, elem_idx_t idx, gui
subtree = proto_item_add_subtree(item, ett_ansi_elem_1[idx]);
- proto_tree_add_uint_format(subtree, hf_ansi_a_elem_id, tvb,
- curr_offset, 1, oct,
- "Element ID");
+ proto_tree_add_uint(subtree, hf_ansi_a_elem_id, tvb, curr_offset, 1, oct);
if (elem_1_fcn[dec_idx] == NULL)
{
/* BAD THING, CANNOT DETERMINE LENGTH */
- proto_tree_add_text(subtree,
- tvb, curr_offset + 1, 1,
+ proto_tree_add_expert_format(subtree, pinfo, &ei_ansi_a_no_tv_elem_diss, tvb, curr_offset + 1, 1,
"No element dissector, rest of dissection may be incorrect");
consumed = 1;
@@ -8961,10 +7584,10 @@ elem_t(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, elem_idx_t idx,
curr_offset = offset;
consumed = 0;
- if ((int)idx < 0 || idx >= ansi_a_elem_1_max-1)
+ if ((int) idx < 0 || idx >= ansi_a_elem_1_max-1)
{
/* Unknown index, skip the element */
- return tvb_length_remaining(tvb, offset) ;
+ return tvb_length_remaining(tvb, offset);
}
oct = tvb_get_guint8(tvb, curr_offset);
@@ -8999,10 +7622,10 @@ elem_lv(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, elem_idx_t idx, gui
curr_offset = offset;
consumed = 0;
- if ((int)idx < 0 || idx >= ansi_a_elem_1_max-1)
+ if ((int) idx < 0 || idx >= ansi_a_elem_1_max-1)
{
/* Unknown index, skip the element */
- return tvb_length_remaining(tvb, offset) ;
+ return tvb_length_remaining(tvb, offset);
}
dec_idx = ansi_a_elem_1_strings[idx].dec_index;
@@ -9010,8 +7633,7 @@ elem_lv(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, elem_idx_t idx, gui
parm_len = tvb_get_guint8(tvb, curr_offset);
item =
- proto_tree_add_text(tree,
- tvb, curr_offset, parm_len + 1,
+ proto_tree_add_text(tree, tvb, curr_offset, parm_len + 1,
"%s%s",
ansi_a_elem_1_strings[idx].strptr,
(name_add == NULL) || (name_add[0] == '\0') ? "" : name_add);
@@ -9025,8 +7647,7 @@ elem_lv(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, elem_idx_t idx, gui
{
if (elem_1_fcn[dec_idx] == NULL)
{
- proto_tree_add_text(subtree,
- tvb, curr_offset + 1, parm_len,
+ proto_tree_add_expert_format(subtree, pinfo, &ei_ansi_a_no_lv_elem_diss, tvb, curr_offset + 1, parm_len,
"Element Value");
consumed = parm_len;
@@ -9066,7 +7687,7 @@ elem_v(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, elem_idx_t idx, guin
curr_offset = offset;
- if ((int)idx < 0 || idx >= ansi_a_elem_1_max-1)
+ if ((int) idx < 0 || idx >= ansi_a_elem_1_max-1)
{
/* Unknown index, skip the element */
return tvb_length_remaining(tvb, offset) ;
@@ -9078,8 +7699,7 @@ elem_v(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, elem_idx_t idx, guin
{
/* BAD THING, CANNOT DETERMINE LENGTH */
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
+ proto_tree_add_expert_format(tree, pinfo, &ei_ansi_a_no_v_elem_diss, tvb, curr_offset, 1,
"No element dissector, rest of dissection may be incorrect");
consumed = 1;
@@ -9097,7 +7717,7 @@ elem_v(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, elem_idx_t idx, guin
}
-#define ELEM_MAND_TLV(elem_idx, elem_name_addition) \
+#define ELEM_MAND_TLV_NO_RET(elem_idx, elem_name_addition) \
{\
if ((consumed = elem_tlv(tvb, pinfo, tree, elem_idx, curr_offset, curr_len, elem_name_addition)) > 0) \
{ \
@@ -9106,7 +7726,7 @@ elem_v(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, elem_idx_t idx, guin
} \
else \
{ \
- proto_tree_add_text(tree, \
+ proto_tree_add_expert_format(tree, pinfo, &ei_ansi_a_missing_mand_elem, \
tvb, curr_offset, 0, \
"Missing Mandatory element (0x%02x) %s%s, rest of dissection is suspect", \
ansi_a_elem_1_strings[elem_idx].value, \
@@ -9114,20 +7734,28 @@ elem_v(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, elem_idx_t idx, guin
(elem_name_addition == NULL) || (elem_name_addition[0] == '\0') ? "" : elem_name_addition \
); \
} \
+}
+#define ELEM_MAND_TLV(elem_idx, elem_name_addition) \
+{\
+ ELEM_MAND_TLV_NO_RET(elem_idx, elem_name_addition); \
if (curr_len <= 0) return; \
}
-#define ELEM_OPT_TLV(elem_idx, elem_name_addition) \
+#define ELEM_OPT_TLV_NO_RET(elem_idx, elem_name_addition) \
{\
if ((consumed = elem_tlv(tvb, pinfo, tree, elem_idx, curr_offset, curr_len, elem_name_addition)) > 0) \
{ \
curr_offset += consumed; \
curr_len -= consumed; \
} \
+}
+#define ELEM_OPT_TLV(elem_idx, elem_name_addition) \
+{\
+ ELEM_OPT_TLV_NO_RET(elem_idx, elem_name_addition); \
if (curr_len <= 0) return; \
}
-#define ELEM_MAND_TV(elem_idx, elem_name_addition) \
+#define ELEM_MAND_TV_NO_RET(elem_idx, elem_name_addition) \
{\
if ((consumed = elem_tv(tvb, pinfo, tree, elem_idx, curr_offset, elem_name_addition)) > 0) \
{ \
@@ -9136,7 +7764,7 @@ elem_v(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, elem_idx_t idx, guin
} \
else \
{ \
- proto_tree_add_text(tree, \
+ proto_tree_add_expert_format(tree, pinfo, &ei_ansi_a_missing_mand_elem, \
tvb, curr_offset, 0, \
"Missing Mandatory element (0x%02x) %s%s, rest of dissection is suspect", \
ansi_a_elem_1_strings[elem_idx].value, \
@@ -9144,16 +7772,24 @@ elem_v(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, elem_idx_t idx, guin
(elem_name_addition == NULL) || (elem_name_addition[0] == '\0') ? "" : elem_name_addition \
); \
} \
+}
+#define ELEM_MAND_TV(elem_idx, elem_name_addition) \
+{\
+ ELEM_MAND_TV_NO_RET(elem_idx, elem_name_addition); \
if (curr_len <= 0) return; \
}
-#define ELEM_OPT_TV(elem_idx, elem_name_addition) \
+#define ELEM_OPT_TV_NO_RET(elem_idx, elem_name_addition) \
{\
if ((consumed = elem_tv(tvb, pinfo, tree, elem_idx, curr_offset, elem_name_addition)) > 0) \
{ \
curr_offset += consumed; \
curr_len -= consumed; \
} \
+}
+#define ELEM_OPT_TV(elem_idx, elem_name_addition) \
+{\
+ ELEM_OPT_TV_NO_RET(elem_idx, elem_name_addition); \
if (curr_len <= 0) return; \
}
@@ -9167,7 +7803,7 @@ elem_v(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, elem_idx_t idx, guin
if (curr_len <= 0) return; \
}
-#define ELEM_MAND_LV(elem_idx, elem_name_addition, from_sip) \
+#define ELEM_MAND_LV_NO_RET(elem_idx, elem_name_addition, from_sip) \
{\
if ((consumed = (from_sip ? \
elem_tlv(tvb, pinfo, tree, elem_idx, curr_offset, curr_len, elem_name_addition) : \
@@ -9180,6 +7816,10 @@ elem_v(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, elem_idx_t idx, guin
{ \
/* Mandatory, but nothing we can do */ \
} \
+}
+#define ELEM_MAND_LV(elem_idx, elem_name_addition, from_sip) \
+{\
+ ELEM_MAND_LV_NO_RET(elem_idx, elem_name_addition, from_sip); \
if (curr_len <= 0) return; \
}
@@ -9227,6 +7867,14 @@ bsmap_cl3_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offs
/*
* IOS 6.1.2.2
*/
+static const value_string dtap_cm_service_type_vals[] = {
+ { 1, "Mobile Originating Call"},
+ { 2, "Emergency call establishment"},
+ { 4, "Short Message transfer"},
+ { 8, "Supplementary Service activation"},
+ { 0, NULL}
+};
+
static void
dtap_cm_srvc_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offset, guint len, gboolean from_sip)
{
@@ -9236,7 +7884,6 @@ dtap_cm_srvc_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 of
guint8 oct;
proto_tree *subtree;
proto_item *item;
- const gchar *str;
curr_offset = offset;
curr_len = len;
@@ -9245,43 +7892,29 @@ dtap_cm_srvc_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 of
* special dissection for CM Service Type
*/
oct = tvb_get_guint8(tvb, curr_offset);
-
- switch (oct & 0x0f)
- {
- case 0x01: str = "Mobile Originating Call"; break;
- default:
- str = "Unknown";
- break;
- }
-
- item =
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "CM Service Type: %s",
- str);
-
+ item = proto_tree_add_text(tree, tvb, curr_offset, 1,
+ "CM Service Type: %s", val_to_str_const(oct & 0x0f, dtap_cm_service_type_vals, "Unknown"));
subtree = proto_item_add_subtree(item, ett_cm_srvc_type);
- other_decode_bitfield_value(a_bigbuf, oct, 0xf0, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Element ID",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8);
- proto_tree_add_text(subtree,
- tvb, curr_offset, 1,
- "%s : Service Type: (%u) %s",
- a_bigbuf,
- oct & 0x0f,
- str);
+ proto_tree_add_item(subtree, hf_ansi_a_reserved_bits_8_80, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_elem_id_70, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_ansi_a_cm_svrc_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
curr_len--;
ELEM_MAND_LV(ANSI_A_E_CM_INFO_TYPE_2, "", from_sip);
- ELEM_MAND_LV(ANSI_A_E_MID, "", from_sip);
+ ELEM_MAND_LV_NO_RET(ANSI_A_E_MID, "", from_sip);
+ if (ansi_a_mid_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_mid_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_mid_add_string);
+ }
+ }
+ if (curr_len <= 0) return;
ELEM_OPT_TLV(ANSI_A_E_CLD_PARTY_BCD_NUM, "");
@@ -9297,7 +7930,16 @@ dtap_cm_srvc_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 of
ELEM_OPT_TLV(ANSI_A_E_AUTH_CHLG_PARAM, "");
- ELEM_OPT_TV(ANSI_A_E_SO, "");
+ ELEM_OPT_TV_NO_RET(ANSI_A_E_SO, "");
+ if (ansi_a_so_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_so_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_so_add_string);
+ }
+ }
+ if (curr_len <= 0) return;
ELEM_OPT_T(ANSI_A_E_VP_REQ, "");
@@ -9378,7 +8020,17 @@ bsmap_page_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offs
curr_offset = offset;
curr_len = len;
- ELEM_MAND_TLV(ANSI_A_E_MID, "");
+ ELEM_MAND_TLV_NO_RET(ANSI_A_E_MID, "");
+ if (ansi_a_mid_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_mid_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_mid_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_OPT_TV(ANSI_A_E_TAG, "");
@@ -9386,7 +8038,17 @@ bsmap_page_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offs
ELEM_OPT_TV(ANSI_A_E_SCI, "");
- ELEM_OPT_TV(ANSI_A_E_SO, "");
+ ELEM_OPT_TV_NO_RET(ANSI_A_E_SO, "");
+ if (ansi_a_so_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_so_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_so_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_OPT_TLV(ANSI_A_E_IS2000_MOB_CAP, "");
@@ -9423,7 +8085,17 @@ dtap_page_resp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offs
ELEM_MAND_LV(ANSI_A_E_CM_INFO_TYPE_2, "", from_sip);
- ELEM_MAND_LV(ANSI_A_E_MID, "", from_sip);
+ ELEM_MAND_LV_NO_RET(ANSI_A_E_MID, "", from_sip);
+ if (ansi_a_mid_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_mid_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_mid_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_OPT_TV(ANSI_A_E_TAG, "");
@@ -9439,7 +8111,17 @@ dtap_page_resp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offs
ELEM_OPT_TLV(ANSI_A_E_AUTH_CHLG_PARAM, "");
- ELEM_OPT_TV(ANSI_A_E_SO, "");
+ ELEM_OPT_TV_NO_RET(ANSI_A_E_SO, "");
+ if (ansi_a_so_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_so_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_so_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_OPT_T(ANSI_A_E_VP_REQ, "");
@@ -9510,7 +8192,17 @@ dtap_srvc_redirection(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint
ELEM_MAND_TLV(ANSI_A_E_S_RED_INFO, "");
- ELEM_MAND_TLV(ANSI_A_E_MID, "");
+ ELEM_MAND_TLV_NO_RET(ANSI_A_E_MID, "");
+ if (ansi_a_mid_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_mid_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_mid_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_OPT_TLV(ANSI_A_E_MID, "");
@@ -9567,7 +8259,7 @@ dtap_srvc_release_complete(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
static void
bsmap_ass_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offset, guint len, gboolean from_sip _U_)
{
- guint16 consumed;
+ guint16 consumed;
guint32 curr_offset;
guint curr_len;
@@ -9580,7 +8272,17 @@ bsmap_ass_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offse
ELEM_OPT_TLV(ANSI_A_E_ENC_INFO, "");
- ELEM_OPT_TV(ANSI_A_E_SO, "");
+ ELEM_OPT_TV_NO_RET(ANSI_A_E_SO, "");
+ if (ansi_a_so_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_so_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_so_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_OPT_TV(ANSI_A_E_SIGNAL, "");
@@ -9631,7 +8333,17 @@ bsmap_ass_complete(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32
ELEM_OPT_TLV(ANSI_A_E_ENC_INFO, "");
- ELEM_OPT_TV(ANSI_A_E_SO, "");
+ ELEM_OPT_TV_NO_RET(ANSI_A_E_SO, "");
+ if (ansi_a_so_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_so_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_so_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
switch (global_a_variant)
{
@@ -9762,11 +8474,31 @@ bsmap_bs_srvc_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 o
curr_offset = offset;
curr_len = len;
- ELEM_MAND_TLV(ANSI_A_E_MID, "");
+ ELEM_MAND_TLV_NO_RET(ANSI_A_E_MID, "");
+ if (ansi_a_mid_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_mid_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_mid_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_OPT_TLV(ANSI_A_E_MID, "");
- ELEM_OPT_TV(ANSI_A_E_SO, "");
+ ELEM_OPT_TV_NO_RET(ANSI_A_E_SO, "");
+ if (ansi_a_so_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_so_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_so_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_OPT_TV(ANSI_A_E_TAG, "");
@@ -9792,7 +8524,17 @@ bsmap_bs_srvc_resp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32
curr_offset = offset;
curr_len = len;
- ELEM_MAND_TLV(ANSI_A_E_MID, "");
+ ELEM_MAND_TLV_NO_RET(ANSI_A_E_MID, "");
+ if (ansi_a_mid_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_mid_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_mid_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_OPT_TLV(ANSI_A_E_MID, "");
@@ -9818,9 +8560,29 @@ bsmap_add_srvc_noti(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32
curr_offset = offset;
curr_len = len;
- ELEM_MAND_TLV(ANSI_A_E_MID, "");
+ ELEM_MAND_TLV_NO_RET(ANSI_A_E_MID, "");
+ if (ansi_a_mid_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_mid_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_mid_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
- ELEM_MAND_TV(ANSI_A_E_SO, "");
+ ELEM_MAND_TV_NO_RET(ANSI_A_E_SO, "");
+ if (ansi_a_so_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_so_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_so_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_OPT_TLV(ANSI_A_E_A2P_BEARER_SESSION, "");
@@ -9844,7 +8606,17 @@ dtap_add_srvc_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 o
ELEM_OPT_TLV(ANSI_A_E_CLD_PARTY_BCD_NUM, "");
- ELEM_MAND_TV(ANSI_A_E_SO, "");
+ ELEM_MAND_TV_NO_RET(ANSI_A_E_SO, "");
+ if (ansi_a_so_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_so_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_so_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_OPT_T(ANSI_A_E_VP_REQ, "");
@@ -9951,7 +8723,17 @@ bsmap_feat_noti(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 off
curr_offset = offset;
curr_len = len;
- ELEM_MAND_TLV(ANSI_A_E_MID, "");
+ ELEM_MAND_TLV_NO_RET(ANSI_A_E_MID, "");
+ if (ansi_a_mid_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_mid_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_mid_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_OPT_TV(ANSI_A_E_TAG, "");
@@ -9991,7 +8773,17 @@ bsmap_feat_noti_ack(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32
curr_offset = offset;
curr_len = len;
- ELEM_MAND_TLV(ANSI_A_E_MID, "");
+ ELEM_MAND_TLV_NO_RET(ANSI_A_E_MID, "");
+ if (ansi_a_mid_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_mid_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_mid_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_OPT_TV(ANSI_A_E_TAG, "");
@@ -10049,7 +8841,17 @@ bsmap_paca_update(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 o
curr_offset = offset;
curr_len = len;
- ELEM_OPT_TLV(ANSI_A_E_MID, "");
+ ELEM_OPT_TLV_NO_RET(ANSI_A_E_MID, "");
+ if (ansi_a_mid_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_mid_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_mid_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_OPT_TLV(ANSI_A_E_MID, "");
@@ -10087,7 +8889,17 @@ bsmap_paca_update_ack(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint
curr_offset = offset;
curr_len = len;
- ELEM_OPT_TLV(ANSI_A_E_MID, "");
+ ELEM_OPT_TLV_NO_RET(ANSI_A_E_MID, "");
+ if (ansi_a_mid_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_mid_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_mid_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_OPT_TLV(ANSI_A_E_PRIO, "");
@@ -10153,7 +8965,17 @@ bsmap_auth_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offs
ELEM_MAND_TLV(ANSI_A_E_AUTH_CHLG_PARAM, "");
- ELEM_OPT_TLV(ANSI_A_E_MID, "");
+ ELEM_OPT_TLV_NO_RET(ANSI_A_E_MID, "");
+ if (ansi_a_mid_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_mid_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_mid_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_OPT_TV(ANSI_A_E_TAG, "");
@@ -10204,7 +9026,17 @@ bsmap_auth_resp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 off
ELEM_MAND_TLV(ANSI_A_E_AUTH_RESP_PARAM, "");
- ELEM_MAND_TLV(ANSI_A_E_MID, "");
+ ELEM_MAND_TLV_NO_RET(ANSI_A_E_MID, "");
+ if (ansi_a_mid_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_mid_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_mid_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_MAND_TV(ANSI_A_E_TAG, "");
@@ -10352,6 +9184,98 @@ dtap_user_zone_update(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint
}
/*
+ * IS-634.400A 6.1.3.1
+ */
+static void
+dtap_send_burst_dtmf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offset, guint len, gboolean from_sip _U_)
+{
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
+
+ curr_offset = offset;
+ curr_len = len;
+
+ ELEM_MAND_LV(ANSI_A_E_BDTMF_TRANS_INFO, "", from_sip);
+
+ ELEM_MAND_LV(ANSI_A_E_DTMF_CHARS, "", from_sip);
+
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
+}
+
+/*
+ * IS-634.400A 6.1.3.2
+ */
+static void
+dtap_send_burst_dtmf_ack(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offset, guint len, gboolean from_sip _U_)
+{
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
+
+ curr_offset = offset;
+ curr_len = len;
+
+ ELEM_OPT_TLV(ANSI_A_E_CAUSE, "");
+
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
+}
+
+/*
+ * IS-634.400A 6.1.3.3
+ */
+static void
+dtap_start_dtmf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offset, guint len, gboolean from_sip _U_)
+{
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
+
+ curr_offset = offset;
+ curr_len = len;
+
+ ELEM_MAND_LV(ANSI_A_E_DTMF_CHARS, "", from_sip);
+
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
+}
+
+/*
+ * IS-634.400A 6.1.3.4
+ */
+static void
+dtap_start_dtmf_ack(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offset, guint len, gboolean from_sip _U_)
+{
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
+
+ curr_offset = offset;
+ curr_len = len;
+
+ ELEM_OPT_TLV(ANSI_A_E_CAUSE, "");
+
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
+}
+
+/*
+ * IS-634.400A 6.1.3.6
+ */
+static void
+dtap_stop_dtmf_ack(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offset, guint len, gboolean from_sip _U_)
+{
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
+
+ curr_offset = offset;
+ curr_len = len;
+
+ ELEM_OPT_TLV(ANSI_A_E_CAUSE, "");
+
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
+}
+
+/*
* IOS 5 3.3.18
*/
static void
@@ -10366,7 +9290,16 @@ bsmap_user_zone_reject(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guin
ELEM_OPT_TLV(ANSI_A_E_UZ_ID, "");
- ELEM_MAND_TLV(ANSI_A_E_MID, "");
+ ELEM_MAND_TLV_NO_RET(ANSI_A_E_MID, "");
+ if (ansi_a_mid_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_mid_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_mid_add_string);
+ }
+ }
+ if (curr_len <= 0) return;
ELEM_OPT_TLV(ANSI_A_E_CELL_ID_LIST, "");
@@ -10414,7 +9347,17 @@ bsmap_reg_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offse
curr_offset = offset;
curr_len = len;
- ELEM_MAND_TLV(ANSI_A_E_MID, "");
+ ELEM_MAND_TLV_NO_RET(ANSI_A_E_MID, "");
+ if (ansi_a_mid_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_mid_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_mid_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_OPT_TLV(ANSI_A_E_CELL_ID_LIST, "");
@@ -10462,7 +9405,17 @@ bsmap_bs_auth_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 o
curr_offset = offset;
curr_len = len;
- ELEM_MAND_TLV(ANSI_A_E_MID, "");
+ ELEM_MAND_TLV_NO_RET(ANSI_A_E_MID, "");
+ if (ansi_a_mid_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_mid_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_mid_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
@@ -10480,7 +9433,17 @@ bsmap_bs_auth_req_ack(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint
curr_offset = offset;
curr_len = len;
- ELEM_MAND_TLV(ANSI_A_E_MID, "");
+ ELEM_MAND_TLV_NO_RET(ANSI_A_E_MID, "");
+ if (ansi_a_mid_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_mid_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_mid_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
@@ -10570,7 +9533,17 @@ dtap_lu_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offset,
curr_offset = offset;
curr_len = len;
- ELEM_MAND_LV(ANSI_A_E_MID, "", from_sip);
+ ELEM_MAND_LV_NO_RET(ANSI_A_E_MID, "", from_sip);
+ if (ansi_a_mid_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_mid_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_mid_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_OPT_TV(ANSI_A_E_LAI, "");
@@ -10718,7 +9691,17 @@ bsmap_status_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 of
ELEM_MAND_TLV(ANSI_A_E_IE_REQD, "");
- ELEM_OPT_TLV(ANSI_A_E_MID, "");
+ ELEM_OPT_TLV_NO_RET(ANSI_A_E_MID, "");
+ if (ansi_a_mid_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_mid_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_mid_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_OPT_TLV(ANSI_A_E_MID, "");
@@ -10775,7 +9758,17 @@ bsmap_status_resp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 o
ELEM_MAND_TLV(ANSI_A_E_REV_MS_INFO_RECS, "");
- ELEM_OPT_TLV(ANSI_A_E_MID, "");
+ ELEM_OPT_TLV_NO_RET(ANSI_A_E_MID, "");
+ if (ansi_a_mid_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_mid_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_mid_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_OPT_TLV(ANSI_A_E_MID, "");
@@ -10829,11 +9822,31 @@ bsmap_ho_reqd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offse
ELEM_OPT_TLV(ANSI_A_E_IS95_CHAN_ID, "");
- ELEM_OPT_TLV(ANSI_A_E_MID, "");
+ ELEM_OPT_TLV_NO_RET(ANSI_A_E_MID, "");
+ if (ansi_a_mid_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_mid_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_mid_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_OPT_TLV(ANSI_A_E_DOWNLINK_RE, "");
- ELEM_OPT_TV(ANSI_A_E_SO, "");
+ ELEM_OPT_TV_NO_RET(ANSI_A_E_SO, "");
+ if (ansi_a_so_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_so_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_so_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_OPT_TLV(ANSI_A_E_CDMA_SOWD, "");
@@ -10912,13 +9925,33 @@ bsmap_ho_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offset
ELEM_OPT_TLV(ANSI_A_E_IS95_CHAN_ID, "");
- ELEM_OPT_TLV(ANSI_A_E_MID, "");
+ ELEM_OPT_TLV_NO_RET(ANSI_A_E_MID, "");
+ if (ansi_a_mid_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_mid_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_mid_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_OPT_TLV(ANSI_A_E_MID, "");
ELEM_OPT_TLV(ANSI_A_E_DOWNLINK_RE, "");
- ELEM_OPT_TV(ANSI_A_E_SO, "");
+ ELEM_OPT_TV_NO_RET(ANSI_A_E_SO, "");
+ if (ansi_a_so_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_so_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_so_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_OPT_TLV(ANSI_A_E_CDMA_SOWD, "");
@@ -11114,7 +10147,17 @@ bsmap_ho_complete(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 o
curr_offset = offset;
curr_len = len;
- ELEM_OPT_TV(ANSI_A_E_SO, "");
+ ELEM_OPT_TV_NO_RET(ANSI_A_E_SO, "");
+ if (ansi_a_so_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_so_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_so_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
@@ -11368,7 +10411,17 @@ bsmap_adds_page(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 off
curr_offset = offset;
curr_len = len;
- ELEM_MAND_TLV(ANSI_A_E_MID, "");
+ ELEM_MAND_TLV_NO_RET(ANSI_A_E_MID, "");
+ if (ansi_a_mid_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_mid_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_mid_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_MAND_TLV(ANSI_A_E_ADDS_USER_PART, "");
@@ -11402,7 +10455,17 @@ bsmap_adds_transfer(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32
curr_offset = offset;
curr_len = len;
- ELEM_MAND_TLV(ANSI_A_E_MID, "");
+ ELEM_MAND_TLV_NO_RET(ANSI_A_E_MID, "");
+ if (ansi_a_mid_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_mid_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_mid_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_MAND_TLV(ANSI_A_E_ADDS_USER_PART, "");
@@ -11430,7 +10493,17 @@ bsmap_adds_transfer(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32
ELEM_OPT_TV(ANSI_A_E_SCI, "");
- ELEM_OPT_TV(ANSI_A_E_SO, "");
+ ELEM_OPT_TV_NO_RET(ANSI_A_E_SO, "");
+ if (ansi_a_so_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_so_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_so_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_OPT_TLV(ANSI_A_E_UZ_ID, "");
@@ -11456,7 +10529,17 @@ bsmap_adds_transfer_ack(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gui
curr_offset = offset;
curr_len = len;
- ELEM_MAND_TLV(ANSI_A_E_MID, "");
+ ELEM_MAND_TLV_NO_RET(ANSI_A_E_MID, "");
+ if (ansi_a_mid_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_mid_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_mid_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_OPT_TV(ANSI_A_E_TAG, "");
@@ -11500,7 +10583,17 @@ bsmap_adds_page_ack(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32
curr_offset = offset;
curr_len = len;
- ELEM_MAND_TLV(ANSI_A_E_MID, "");
+ ELEM_MAND_TLV_NO_RET(ANSI_A_E_MID, "");
+ if (ansi_a_mid_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_mid_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_mid_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_OPT_TV(ANSI_A_E_TAG, "");
@@ -11548,7 +10641,17 @@ bsmap_rejection(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 off
curr_offset = offset;
curr_len = len;
- ELEM_OPT_TLV(ANSI_A_E_MID, "");
+ ELEM_OPT_TLV_NO_RET(ANSI_A_E_MID, "");
+ if (ansi_a_mid_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_mid_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_mid_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_OPT_TLV(ANSI_A_E_MID, "");
@@ -11569,7 +10672,17 @@ dtap_rejection(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offs
curr_offset = offset;
curr_len = len;
- ELEM_OPT_TLV(ANSI_A_E_MID, "");
+ ELEM_OPT_TLV_NO_RET(ANSI_A_E_MID, "");
+ if (ansi_a_mid_add_string[0] != '\0')
+ {
+ proto_item_append_text(ansi_a_message_item, " %s", ansi_a_mid_add_string);
+ if (global_a_info_display)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", ansi_a_mid_add_string);
+ }
+ }
+ if (curr_len <= 0)
+ return;
ELEM_OPT_TLV(ANSI_A_E_IS2000_CAUSE, "");
@@ -11647,7 +10760,7 @@ static void (*bsmap_msg_fcn[])(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr
bsmap_ms_reg_noti, /* Mobile Station Registered Notification *//* IOS 5.0.1 */
bsmap_bs_auth_req, /* BS Authentication Request *//* IOS 5.0.1 */
bsmap_bs_auth_req_ack, /* BS Authentication Request Ack *//* IOS 5.0.1 */
- NULL, /* NONE */
+ NULL /* NONE */
};
#define ANSI_A_IOS401_DTAP_NUM_MSG (sizeof(ansi_a_ios401_dtap_strings)/sizeof(ext_value_string_t))
@@ -11686,7 +10799,13 @@ static void (*dtap_msg_fcn[])(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre
dtap_user_zone_reject, /* User Zone Reject */
dtap_user_zone_update, /* User Zone Update */
dtap_user_zone_update_req, /* User Zone Update Request */
- NULL, /* NONE */
+ dtap_send_burst_dtmf, /* Send Burst DTMF */
+ dtap_send_burst_dtmf_ack, /* Send Burst DTMF Ack */
+ dtap_start_dtmf, /* Start DTMF */
+ dtap_start_dtmf_ack, /* Start DTMF Ack */
+ NULL /* no associated data */, /* Stop DTMF */
+ dtap_stop_dtmf_ack, /* Stop DTMF Ack */
+ NULL /* NONE */
};
/* Utillity function to dissect CDMA200 A1 elements in ANSI MAP messages */
@@ -11712,7 +10831,7 @@ dissect_cdma2000_a1_elements(tvbuff_t *tvb, _U_ packet_info *pinfo, proto_tree *
*/
oct = tvb_get_guint8(tvb, curr_offset);
- for (idx=0; idx < (unsigned)ansi_a_elem_1_max; idx++)
+ for (idx=0; idx < (unsigned) ansi_a_elem_1_max; idx++)
{
if (oct == (guint8) ansi_a_elem_1_strings[idx].value)
{
@@ -11721,7 +10840,7 @@ dissect_cdma2000_a1_elements(tvbuff_t *tvb, _U_ packet_info *pinfo, proto_tree *
}
}
- if (idx == (elem_idx_t)ansi_a_elem_1_max)
+ if (idx == (elem_idx_t) ansi_a_elem_1_max)
{
/*
* didn't recognize the T(ype)
@@ -11733,7 +10852,7 @@ dissect_cdma2000_a1_elements(tvbuff_t *tvb, _U_ packet_info *pinfo, proto_tree *
}
}
- EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/* GENERIC DISSECTOR FUNCTIONS */
@@ -11743,7 +10862,7 @@ dissect_bsmap_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gboole
{
static ansi_a_tap_rec_t tap_rec[16];
static ansi_a_tap_rec_t *tap_p;
- static int tap_current=0;
+ static int tap_current = 0;
guint8 oct;
guint32 offset, saved_offset;
guint32 len;
@@ -11795,7 +10914,7 @@ dissect_bsmap_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gboole
else
{
bsmap_item =
- proto_tree_add_protocol_format(tree, proto_a_bsmap, tvb, 0, -1,
+ proto_tree_add_protocol_format(tree, proto_a_bsmap, tvb, 0, len,
"ANSI A-I/F BSMAP - %s",
msg_str);
@@ -11804,11 +10923,14 @@ dissect_bsmap_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gboole
col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", msg_str);
}
+ ansi_a_message_item = bsmap_item;
+ ansi_a_so_add_string[0] = '\0';
+ ansi_a_mid_add_string[0] = '\0';
+
/*
* add BSMAP message name
*/
- proto_tree_add_uint_format(bsmap_tree, hf_ansi_a_bsmap_msgtype,
- tvb, saved_offset, 1, oct, "Message Type");
+ proto_tree_add_item(bsmap_tree, hf_ansi_a_bsmap_msgtype, tvb, saved_offset, 1, ENC_BIG_ENDIAN);
tap_p->pdu_type = BSSAP_PDU_TYPE_BSMAP;
tap_p->message_type = oct;
@@ -11826,8 +10948,7 @@ dissect_bsmap_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gboole
*/
if (bsmap_msg_fcn[dec_idx] == NULL)
{
- proto_tree_add_text(bsmap_tree,
- tvb, offset, len - offset,
+ proto_tree_add_expert_format(bsmap_tree, pinfo, &ei_ansi_a_miss_bsmap_msg_diss, tvb, offset, len - offset,
"Message Elements");
}
else
@@ -11842,16 +10963,17 @@ dissect_bsmap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
dissect_bsmap_common(tvb, pinfo, tree, FALSE);
}
+static const true_false_string tfs_ansi_a_ti_flag = { "allocated by receiver", "allocated by sender" };
+
static void
dissect_dtap_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gboolean from_sip)
{
static ansi_a_tap_rec_t tap_rec[16];
static ansi_a_tap_rec_t *tap_p;
- static int tap_current=0;
- guint8 oct;
+ static int tap_current = 0;
+ guint8 oct, oct_1, oct_2;
guint32 offset, saved_offset;
guint32 len;
- guint32 oct_1=0, oct_2=0;
gint dec_idx;
proto_item *dtap_item = NULL;
proto_tree *dtap_tree = NULL;
@@ -11892,7 +11014,8 @@ dissect_dtap_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gboolea
/*
* get protocol discriminator
*/
- if (!from_sip) {
+ if (!from_sip)
+ {
oct_1 = tvb_get_guint8(tvb, offset++);
oct_2 = tvb_get_guint8(tvb, offset++);
}
@@ -11900,6 +11023,7 @@ dissect_dtap_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gboolea
/*
* add DTAP message name
*/
+ saved_offset = offset;
oct = tvb_get_guint8(tvb, offset++);
msg_str = my_try_val_to_str_idx((guint32) oct, ansi_a_dtap_strings, &dec_idx);
@@ -11919,7 +11043,7 @@ dissect_dtap_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gboolea
else
{
dtap_item =
- proto_tree_add_protocol_format(tree, proto_a_dtap, tvb, 0, -1,
+ proto_tree_add_protocol_format(tree, proto_a_dtap, tvb, 0, len,
"ANSI A-I/F DTAP - %s",
msg_str);
@@ -11928,7 +11052,12 @@ dissect_dtap_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gboolea
col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", msg_str);
}
- if (!from_sip) {
+ ansi_a_message_item = dtap_item;
+ ansi_a_so_add_string[0] = '\0';
+ ansi_a_mid_add_string[0] = '\0';
+
+ if (!from_sip)
+ {
/*
* octet 1
*/
@@ -11946,25 +11075,15 @@ dissect_dtap_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gboolea
}
oct_1_item =
- proto_tree_add_text(dtap_tree,
- tvb, 0, 1,
+ proto_tree_add_uint_format(dtap_tree, hf_ansi_a_protocol_disc, tvb, 0, 1,
+ (oct_1 & 0x0f),
"Protocol Discriminator: %s",
str);
oct_1_tree = proto_item_add_subtree(oct_1_item, ett_dtap_oct_1);
- other_decode_bitfield_value(a_bigbuf, oct_1, 0xf0, 8);
- proto_tree_add_text(oct_1_tree,
- tvb, 0, 1,
- "%s : Reserved",
- a_bigbuf);
-
- other_decode_bitfield_value(a_bigbuf, oct_1, 0x0f, 8);
- proto_tree_add_text(oct_1_tree,
- tvb, 0, 1,
- "%s : Protocol Discriminator: %u",
- a_bigbuf,
- oct_1 & 0x0f);
+ proto_tree_add_item(oct_1_tree, hf_ansi_a_reserved_bits_8_f0, tvb, 0, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(oct_1_tree, hf_ansi_a_protocol_disc, tvb, 0, 1, ENC_BIG_ENDIAN);
/*
* octet 2
@@ -11972,31 +11091,13 @@ dissect_dtap_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gboolea
switch (global_a_variant)
{
case A_VARIANT_IS634:
- other_decode_bitfield_value(a_bigbuf, oct_2, 0x80, 8);
- proto_tree_add_text(dtap_tree,
- tvb, 1, 1,
- "%s : Transaction Identifier (TI) Flag: %s",
- a_bigbuf,
- ((oct_2 & 0x80) ? "allocated by receiver" : "allocated by sender"));
-
- other_decode_bitfield_value(a_bigbuf, oct_2, 0x70, 8);
- proto_tree_add_text(dtap_tree,
- tvb, 1, 1,
- "%s : Transaction Identifier (TI): %u",
- a_bigbuf,
- (oct_2 & 0x70) >> 4);
-
- other_decode_bitfield_value(a_bigbuf, oct_2, 0x0f, 8);
- proto_tree_add_text(dtap_tree,
- tvb, 1, 1,
- "%s : Reserved",
- a_bigbuf);
+ proto_tree_add_item(dtap_tree, hf_ansi_a_ti_flag, tvb, 1, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(dtap_tree, hf_ansi_a_ti_ti, tvb, 1, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(dtap_tree, hf_ansi_a_reserved_bits_8_0f, tvb, 1, 1, ENC_BIG_ENDIAN);
break;
default:
- proto_tree_add_text(dtap_tree,
- tvb, 1, 1,
- "Reserved Octet");
+ proto_tree_add_item(dtap_tree, hf_ansi_a_reserved_octet, tvb, 1, 1, ENC_BIG_ENDIAN);
break;
}
}
@@ -12004,9 +11105,7 @@ dissect_dtap_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gboolea
/*
* add DTAP message name
*/
- proto_tree_add_uint_format(dtap_tree, hf_ansi_a_dtap_msgtype,
- tvb, saved_offset, 1, oct,
- "Message Type");
+ proto_tree_add_item(dtap_tree, hf_ansi_a_dtap_msgtype, tvb, saved_offset, 1, ENC_BIG_ENDIAN);
tap_p->pdu_type = BSSAP_PDU_TYPE_DTAP;
tap_p->message_type = oct;
@@ -12024,8 +11123,7 @@ dissect_dtap_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gboolea
*/
if (dtap_msg_fcn[dec_idx] == NULL)
{
- proto_tree_add_text(dtap_tree,
- tvb, offset, len - offset,
+ proto_tree_add_expert_format(dtap_tree, pinfo, &ei_ansi_a_miss_dtap_msg_diss, tvb, offset, len - offset,
"Message Elements");
}
else
@@ -12043,44 +11141,64 @@ dissect_dtap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
static void
dissect_sip_dtap_bsmap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
- gint linelen, offset, next_offset, begin;
- guint8 *msg_type;
- tvbuff_t *ansi_a_tvb;
- gboolean is_dtap = TRUE;
+ gint linelen, offset, next_offset, begin;
+ guint8 *msg_type;
+ tvbuff_t *ansi_a_tvb;
+ gboolean is_dtap = TRUE;
offset = 0;
- if ((linelen = tvb_find_line_end(tvb, offset, -1, &next_offset, TRUE)) > 0) {
- if (linelen >= 2) {
+
+ if ((linelen = tvb_find_line_end(tvb, offset, -1, &next_offset, TRUE)) > 0)
+ {
+ if (linelen >= 2)
+ {
ansi_a_tvb = tvb_new_composite();
- msg_type = (guint8*)wmem_alloc(pinfo->pool, 1);
- msg_type[0] = (guint8)strtoul(tvb_get_string(wmem_packet_scope(), tvb, offset, 2), NULL, 16);
- if ((begin = tvb_find_guint8(tvb, offset, linelen, '"')) > 0) {
- if (tvb_get_guint8(tvb, begin + 1) == '1') {
+ msg_type = (guint8 *) wmem_alloc(pinfo->pool, 1);
+ msg_type[0] = (guint8) strtoul(tvb_get_string(wmem_packet_scope(), tvb, offset, 2), NULL, 16);
+
+ if ((begin = tvb_find_guint8(tvb, offset, linelen, '"')) > 0)
+ {
+ if (tvb_get_guint8(tvb, begin + 1) == '1')
+ {
is_dtap = FALSE;
}
- } else {
- if (my_try_val_to_str_idx((guint32) msg_type[0], ansi_a_dtap_strings, &linelen) == NULL) {
+ }
+ else
+ {
+ if (my_try_val_to_str_idx((guint32) msg_type[0], ansi_a_dtap_strings, &linelen) == NULL)
+ {
is_dtap = FALSE;
}
}
+
tvb_composite_append(ansi_a_tvb, tvb_new_child_real_data(tvb, msg_type, 1, 1));
+
offset = next_offset;
- while ((linelen = tvb_find_line_end(tvb, offset, -1, &next_offset, TRUE)) > 0) {
- if ((begin = tvb_find_guint8(tvb, offset, linelen, '=')) > 0) {
+
+ while ((linelen = tvb_find_line_end(tvb, offset, -1, &next_offset, TRUE)) > 0)
+ {
+ if ((begin = tvb_find_guint8(tvb, offset, linelen, '=')) > 0)
+ {
begin++;
tvb_composite_append(ansi_a_tvb, base64_to_tvb(tvb, tvb_get_string(wmem_packet_scope(), tvb, begin, offset + linelen - begin)));
}
+
offset = next_offset;
}
+
tvb_composite_finalize(ansi_a_tvb);
- if (is_dtap) {
+
+ if (is_dtap)
+ {
add_new_data_source(pinfo, ansi_a_tvb, "ANSI DTAP");
dissect_dtap_common(ansi_a_tvb, pinfo, tree, TRUE);
- } else {
+ }
+ else
+ {
add_new_data_source(pinfo, ansi_a_tvb, "ANSI BSMAP");
dissect_bsmap_common(ansi_a_tvb, pinfo, tree, TRUE);
}
- }
+ }
}
}
@@ -12097,86 +11215,97 @@ proto_register_ansi_a(void)
static hf_register_info hf[] =
{
{ &hf_ansi_a_bsmap_msgtype,
- { "BSMAP Message Type", "ansi_a_bsmap.msgtype",
+ { "BSMAP Message Type", "ansi_a_bsmap.msgtype",
FT_UINT8, BASE_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_ansi_a_dtap_msgtype,
- { "DTAP Message Type", "ansi_a_bsmap.dtap_msgtype",
+ { "DTAP Message Type", "ansi_a_bsmap.dtap_msgtype",
FT_UINT8, BASE_HEX, NULL, 0x0,
NULL, HFILL }
},
- { &hf_ansi_a_elem_id,
- { "Element ID", "ansi_a_bsmap.elem_id",
- FT_UINT8, BASE_DEC, NULL, 0,
+ { &hf_ansi_a_protocol_disc,
+ { "Protocol Discriminator", "ansi_a_bsmap.protocol_disc",
+ FT_UINT8, BASE_DEC, NULL, 0x0f,
NULL, HFILL }
},
- { &hf_ansi_a_length,
- { "Length", "ansi_a_bsmap.len",
+ { &hf_ansi_a_reserved_octet,
+ { "Reserved Octet", "ansi_a_bsmap.reserved_octet",
FT_UINT8, BASE_DEC, NULL, 0,
NULL, HFILL }
},
-#if 0
- { &hf_ansi_a_none,
- { "Sub tree", "ansi_a_bsmap.none",
- FT_NONE, BASE_NONE, 0, 0,
+ { &hf_ansi_a_ti_flag,
+ { "Transaction Identifier (TI) Flag", "ansi_a_bsmap.ti.flag",
+ FT_BOOLEAN, 8, TFS(&tfs_ansi_a_ti_flag), 0x80,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_ti_ti,
+ { "Transaction Identifier (TI)", "ansi_a_bsmap.ti.ti",
+ FT_UINT8, BASE_DEC, NULL, 0x70,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cm_svrc_type,
+ { "CM Service Type", "ansi_a_bsmap.cm_srvc_type",
+ FT_UINT8, BASE_DEC, VALS(dtap_cm_service_type_vals), 0x0F,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_elem_id,
+ { "Element ID", "ansi_a_bsmap.elem_id",
+ FT_UINT8, BASE_HEX, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_elem_id_70,
+ { "Element ID", "ansi_a_bsmap.elem_id",
+ FT_UINT8, BASE_HEX, NULL, 0x70,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_length,
+ { "Length", "ansi_a_bsmap.len",
+ FT_UINT8, BASE_DEC, NULL, 0,
NULL, HFILL }
},
-#endif
{ &hf_ansi_a_esn,
- { "ESN", "ansi_a_bsmap.esn",
+ { "ESN", "ansi_a_bsmap.esn",
FT_UINT32, BASE_HEX, 0, 0x0,
NULL, HFILL }
},
{ &hf_ansi_a_imsi,
- { "IMSI", "ansi_a_bsmap.imsi",
- FT_STRING, BASE_NONE, 0, 0,
- NULL, HFILL }
- },
- { &hf_ansi_a_min,
- { "MIN", "ansi_a_bsmap.min",
+ { "IMSI", "ansi_a_bsmap.imsi",
FT_STRING, BASE_NONE, 0, 0,
NULL, HFILL }
},
{ &hf_ansi_a_meid,
- { "MEID", "ansi_a_bsmap.meid",
+ { "MEID", "ansi_a_bsmap.meid",
FT_STRING, BASE_NONE, 0, 0,
NULL, HFILL }
},
{ &hf_ansi_a_cld_party_bcd_num,
- { "Called Party BCD Number", "ansi_a_bsmap.cld_party_bcd_num",
- FT_STRING, BASE_NONE, 0, 0,
- NULL, HFILL }
- },
-#ifdef MAYBE_USED_FOR_OLDER_CODECS
- { &hf_ansi_a_clg_party_bcd_num,
- { "Calling Party BCD Number", "ansi_a_bsmap.clg_party_bcd_num",
+ { "Called Party BCD Number", "ansi_a_bsmap.cld_party_bcd_num",
FT_STRING, BASE_NONE, 0, 0,
NULL, HFILL }
},
-#endif
{ &hf_ansi_a_cld_party_ascii_num,
- { "Called Party ASCII Number", "ansi_a_bsmap.cld_party_ascii_num",
+ { "Called Party ASCII Number", "ansi_a_bsmap.cld_party_ascii_num",
FT_STRING, BASE_NONE, 0, 0,
NULL, HFILL }
},
{ &hf_ansi_a_clg_party_ascii_num,
- { "Calling Party ASCII Number", "ansi_a_bsmap.clg_party_ascii_num",
+ { "Calling Party ASCII Number", "ansi_a_bsmap.clg_party_ascii_num",
FT_STRING, BASE_NONE, 0, 0,
NULL, HFILL }
},
{ &hf_ansi_a_cell_ci,
- { "Cell CI", "ansi_a_bsmap.cell_ci",
+ { "Cell CI", "ansi_a_bsmap.cell_ci",
FT_UINT16, BASE_HEX, 0, 0x0,
NULL, HFILL }
},
{ &hf_ansi_a_cell_lac,
- { "Cell LAC", "ansi_a_bsmap.cell_lac",
+ { "Cell LAC", "ansi_a_bsmap.cell_lac",
FT_UINT16, BASE_HEX, 0, 0x0,
NULL, HFILL }
},
{ &hf_ansi_a_cell_mscid,
- { "Cell MSCID", "ansi_a_bsmap.cell_mscid",
+ { "Cell MSCID", "ansi_a_bsmap.cell_mscid",
FT_UINT24, BASE_HEX, 0, 0x0,
NULL, HFILL }
},
@@ -12200,96 +11329,1839 @@ proto_register_ansi_a(void)
FT_IPv4, BASE_NONE, NULL, 0,
"IP Address", HFILL }
},
- { &hf_ansi_a_a2p_bearer_ipv4_addr,
- { "A2p Bearer IP Address", "ansi_a_bsmap.a2p_bearer_ipv4_addr",
- FT_IPv4, BASE_NONE, NULL, 0,
- NULL, HFILL }
- },
- { &hf_ansi_a_a2p_bearer_ipv6_addr,
- { "A2p Bearer IP Address", "ansi_a_bsmap.a2p_bearer_ipv6_addr",
- FT_IPv6, BASE_NONE, NULL, 0,
- NULL, HFILL }
- },
- { &hf_ansi_a_a2p_bearer_udp_port,
- { "A2p Bearer UDP Port", "ansi_a_bsmap.a2p_bearer_udp_port",
- FT_UINT16, BASE_DEC, NULL, 0,
- NULL, HFILL }
- },
{ &hf_ansi_a_so,
{ "Service Option", "ansi_a_bsmap.so",
FT_UINT16, BASE_DEC, NULL, 0,
NULL, HFILL }
},
{ &hf_ansi_a_cause_1,
- { "Cause", "ansi_a_bsmap.cause_1",
+ { "Cause", "ansi_a_bsmap.cause_1",
FT_UINT8, BASE_DEC, NULL, 0,
NULL, HFILL }
},
{ &hf_ansi_a_cause_2,
- { "Cause", "ansi_a_bsmap.cause_2",
- FT_UINT16, BASE_DEC, NULL, 0,
- NULL, HFILL }
- },
- { &hf_ansi_a_meid_configured,
- { "Is MEID configured", "ansi_a_bsmap.meid_configured",
- FT_BOOLEAN, BASE_NONE, NULL, 0x0,
+ { "Cause", "ansi_a_bsmap.cause_2",
+ FT_UINT16, BASE_DEC, NULL, 0x7fff,
NULL, HFILL }
},
{ &hf_ansi_a_ms_info_rec_signal_type,
- { "Signal Type", "ansi_a_bsmap.ms_info_rec.signal.type",
+ { "Signal Type", "ansi_a_bsmap.ms_info_rec.signal.type",
FT_UINT8, BASE_HEX, VALS(ansi_a_ms_info_rec_signal_type_vals), 0xc0,
NULL, HFILL }
},
{ &hf_ansi_a_ms_info_rec_signal_alert_pitch,
- { "Alert Type", "ansi_a_bsmap.ms_info_rec.signal.alert_pitch",
+ { "Alert Type", "ansi_a_bsmap.ms_info_rec.signal.alert_pitch",
FT_UINT8, BASE_HEX, VALS(ansi_a_ms_info_rec_signal_alert_pitch_vals), 0x30,
NULL, HFILL }
},
{ &hf_ansi_a_ms_info_rec_signal_tone,
- { "Signal", "ansi_a_bsmap.ms_info_rec.signal.tone",
+ { "Signal", "ansi_a_bsmap.ms_info_rec.signal.tone",
FT_UINT16, BASE_HEX, VALS(ansi_a_ms_info_rec_signal_tone_vals), 0x0fc0,
NULL, HFILL }
},
{ &hf_ansi_a_ms_info_rec_signal_isdn_alert,
- { "Signal", "ansi_a_bsmap.ms_info_rec.signal.isdn_alert",
+ { "Signal", "ansi_a_bsmap.ms_info_rec.signal.isdn_alert",
FT_UINT16, BASE_HEX, VALS(ansi_a_ms_info_rec_signal_isdn_alert_vals), 0x0fc0,
NULL, HFILL }
},
{ &hf_ansi_a_ms_info_rec_signal_is54b_alert,
- { "Signal", "ansi_a_bsmap.ms_info_rec.signal.is54b_alert",
+ { "Signal", "ansi_a_bsmap.ms_info_rec.signal.is54b_alert",
FT_UINT16, BASE_HEX, VALS(ansi_a_ms_info_rec_signal_is54b_alert_vals), 0x0fc0,
NULL, HFILL }
},
{ &hf_ansi_a_ms_info_rec_call_waiting_ind,
- { "Call Waiting Indicator", "ansi_a_bsmap.ms_info_rec.call_waiting_ind",
+ { "Call Waiting Indicator", "ansi_a_bsmap.ms_info_rec.call_waiting_ind",
FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x80,
NULL, HFILL }
+ },
+ { &hf_ansi_a_extension_8_80,
+ { "Extended", "ansi_a_bsmap.extended",
+ FT_UINT8, BASE_DEC, NULL, 0x80,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_reserved_bits_8_generic,
+ { "Reserved bit(s)", "ansi_a_bsmap.reserved",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_reserved_bits_8_01,
+ { "Reserved bit(s)", "ansi_a_bsmap.reserved",
+ FT_UINT8, BASE_DEC, NULL, 0x01,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_reserved_bits_8_07,
+ { "Reserved bit(s)", "ansi_a_bsmap.reserved",
+ FT_UINT8, BASE_DEC, NULL, 0x07,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_reserved_bits_8_0c,
+ { "Reserved bit(s)", "ansi_a_bsmap.reserved",
+ FT_UINT8, BASE_DEC, NULL, 0x0c,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_reserved_bits_8_0f,
+ { "Reserved bit(s)", "ansi_a_bsmap.reserved",
+ FT_UINT8, BASE_DEC, NULL, 0x0f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_reserved_bits_8_10,
+ { "Reserved bit(s)", "ansi_a_bsmap.reserved",
+ FT_UINT8, BASE_DEC, NULL, 0x10,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_reserved_bits_8_18,
+ { "Reserved bit(s)", "ansi_a_bsmap.reserved",
+ FT_UINT8, BASE_DEC, NULL, 0x18,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_reserved_bits_8_1c,
+ { "Reserved bit(s)", "ansi_a_bsmap.reserved",
+ FT_UINT8, BASE_DEC, NULL, 0x1c,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_reserved_bits_8_1f,
+ { "Reserved bit(s)", "ansi_a_bsmap.reserved",
+ FT_UINT8, BASE_DEC, NULL, 0x1f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_reserved_bits_8_3f,
+ { "Reserved bit(s)", "ansi_a_bsmap.reserved",
+ FT_UINT8, BASE_DEC, NULL, 0x3f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_reserved_bits_8_7f,
+ { "Reserved bit(s)", "ansi_a_bsmap.reserved",
+ FT_UINT8, BASE_DEC, NULL, 0x7f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_reserved_bits_8_80,
+ { "Reserved bit(s)", "ansi_a_bsmap.reserved",
+ FT_UINT8, BASE_DEC, NULL, 0x80,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_reserved_bits_8_c0,
+ { "Reserved bit(s)", "ansi_a_bsmap.reserved",
+ FT_UINT8, BASE_DEC, NULL, 0xc0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_reserved_bits_8_e0,
+ { "Reserved bit(s)", "ansi_a_bsmap.reserved",
+ FT_UINT8, BASE_DEC, NULL, 0xe0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_reserved_bits_8_f0,
+ { "Reserved bit(s)", "ansi_a_bsmap.reserved",
+ FT_UINT8, BASE_DEC, NULL, 0xf0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_reserved_bits_8_f8,
+ { "Reserved bit(s)", "ansi_a_bsmap.reserved",
+ FT_UINT8, BASE_DEC, NULL, 0xf8,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_reserved_bits_8_fc,
+ { "Reserved bit(s)", "ansi_a_bsmap.reserved",
+ FT_UINT8, BASE_DEC, NULL, 0xfc,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_reserved_bits_8_fe,
+ { "Reserved bit(s)", "ansi_a_bsmap.reserved",
+ FT_UINT8, BASE_DEC, NULL, 0xfe,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_reserved_bits_8_ff,
+ { "Reserved bit(s)", "ansi_a_bsmap.reserved",
+ FT_UINT8, BASE_DEC, NULL, 0xff,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_reserved_bits_16_001f,
+ { "Reserved bit(s)", "ansi_a_bsmap.reserved",
+ FT_UINT16, BASE_DEC, NULL, 0x001f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_reserved_bits_16_8000,
+ { "Reserved bit(s)", "ansi_a_bsmap.reserved",
+ FT_UINT16, BASE_DEC, NULL, 0x8000,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_reserved_bits_16_f800,
+ { "Reserved bit(s)", "ansi_a_bsmap.reserved",
+ FT_UINT16, BASE_DEC, NULL, 0xf800,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_reserved_bits_24_001800,
+ { "Reserved bit(s)", "ansi_a_bsmap.reserved",
+ FT_UINT24, BASE_DEC, NULL, 0x001800,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_reserved_bits_24_006000,
+ { "Reserved bit(s)", "ansi_a_bsmap.reserved",
+ FT_UINT24, BASE_DEC, NULL, 0x006000,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_reserved_bits_24_007000,
+ { "Reserved bit(s)", "ansi_a_bsmap.reserved",
+ FT_UINT24, BASE_DEC, NULL, 0x007000,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_channel_number,
+ { "Channel Number", "ansi_a_bsmap.channel_number.channel_number",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_IOS5_channel_number,
+ { "Channel Number", "ansi_a_bsmap.channel_number.channel_number",
+ FT_UINT16, BASE_DEC, NULL, 0x07ff,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_speech_or_data_indicator,
+ { "Speech or Data Indicator", "ansi_a_bsmap.channel_type.speech_or_data_indicator",
+ FT_UINT8, BASE_HEX, VALS(ansi_a_speech_or_data_indicator_vals), 0x00,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_chan_rate_and_type,
+ { "Channel Rate and Type", "ansi_a_bsmap.channel_type.rate_and_type",
+ FT_UINT8, BASE_HEX, VALS(ansi_a_channel_rate_and_type_vals), 0x00,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_speech_enc_or_data_rate,
+ { "Speech Encoding Algorithm/data rate + Transparency Indicator", "ansi_a_bsmap.channel_type.speech_enc_or_data_rate",
+ FT_UINT8, BASE_HEX, VALS(ansi_a_speech_enc_or_data_rate_vals), 0x00,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_chan_type_data_ext,
+ { "Extension", "ansi_a_bsmap.channel_type.data_ext",
+ FT_UINT8, BASE_DEC, NULL, 0x80,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_chan_type_data_transparent,
+ { "Transparent", "ansi_a_bsmap.channel_type.data_transparent",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x40,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_return_cause,
+ { "Return Cause", "ansi_a_bsmap.return_cause.cause",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_return_cause_vals), 0x0f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_rf_chan_id_color_code,
+ { "Color Code", "ansi_a_bsmap.rf_channel_id.color_code",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_rf_chan_id_n_amps_based,
+ { "N-AMPS", "ansi_a_bsmap.rf_channel_id.n_amps_based",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_rf_chan_id_amps_based,
+ { "ANSI/EIA/TIA-553", "ansi_a_bsmap.rf_channel_id.amps_based",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x01,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_rf_chan_id_timeslot,
+ { "Timeslot Number", "ansi_a_bsmap.rf_channel_id.timeslot",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_rf_chan_id_timeslot_number_vals), 0x03,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_rf_chan_id_channel_number,
+ { "Channel Number", "ansi_a_bsmap.rf_channel_id.channel_number",
+ FT_UINT16, BASE_DEC, NULL, 0x07ff,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_sr_id,
+ { "SR_ID", "ansi_a_bsmap.sr_id",
+ FT_UINT8, BASE_DEC, NULL, 0x07,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_sid,
+ { "SID", "ansi_a_bsmap.sid",
+ FT_UINT16, BASE_DEC, NULL, 0x7fff,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is95_chan_id_hho,
+ { "Hard Handoff", "ansi_a_bsmap.is95_chan_id.hho",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x80,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is95_chan_id_num_chans_add,
+ { "Number of Channels to Add", "ansi_a_bsmap.is95_chan_id.num_chans_add",
+ FT_UINT8, BASE_DEC, NULL, 0x70,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is95_chan_id_frame_offset,
+ { "Frame Offset", "ansi_a_bsmap.is95_chan_id.frame_offset",
+ FT_UINT8, BASE_DEC, NULL, 0x0f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is95_chan_id_walsh_code_chan_idx,
+ { "Walsh Code Channel Index", "ansi_a_bsmap.is95_chan_id.walsh_code_chan_idx",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is95_chan_id_pilot_pn,
+ { "Pilot PN Code", "ansi_a_bsmap.is95_chan_id.pilot_pn",
+ FT_UINT24, BASE_DEC, NULL, 0xff8000,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is95_chan_id_power_combined,
+ { "Power Combined", "ansi_a_bsmap.is95_chan_id.power_combined",
+ FT_BOOLEAN, 24, TFS(&tfs_yes_no), 0x004000,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is95_chan_id_freq_incl,
+ { "Frequency Included", "ansi_a_bsmap.is95_chan_id.freq_incl",
+ FT_BOOLEAN, 24, TFS(&tfs_yes_no), 0x002000,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is95_chan_id_channel_number,
+ { "Channel Number", "ansi_a_bsmap.is95_chan_id.channel_number",
+ FT_UINT24, BASE_DEC, NULL, 0x0007ff,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_enc_info_enc_parm_id,
+ { "Encryption Parameter Identifier", "ansi_a_bsmap.enc_info.parm_id",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_enc_info_ident_vals), 0x7c,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_enc_info_status,
+ { "Status", "ansi_a_bsmap.enc_info.status",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_enc_info_status_vals), 0x02,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_enc_info_available,
+ { "Available", "ansi_a_bsmap.enc_info.available",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_enc_info_available_vals), 0x01,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cm2_mob_p_rev,
+ { "MOB_P_REV", "ansi_a_bsmap.cm2.mob_p_rev",
+ FT_UINT8, BASE_DEC, NULL, 0xe0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cm2_see_list,
+ { "See List of Entries", "ansi_a_bsmap.cm2.see_list",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x08,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cm2_rf_power_cap,
+ { "RF Power Capability", "ansi_a_bsmap.cm2.rf_power_cap",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_cm2_rf_power_cap_vals), 0x07,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cm2_nar_an_cap,
+ { "NAR_AN_CAP", "ansi_a_bsmap.cm2.nar_an_cap",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x80,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cm2_is95,
+ { "IS-95 supported", "ansi_a_bsmap.cm2.is95",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x40,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cm2_slotted,
+ { "Operating in slotted mode", "ansi_a_bsmap.cm2.slotted",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x20,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cm2_dtx,
+ { "DTX capable", "ansi_a_bsmap.cm2.dtx",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x04,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cm2_mobile_term,
+ { "Mobile Term; can receive incoming calls", "ansi_a_bsmap.cm2.mobile_term",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cm2_analog_cap,
+ { "ANSI/EIA/TIA-553; supports analog capabilities", "ansi_a_bsmap.cm2.ansi_eia_tia_553",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x01,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cm2_psi,
+ { "PACA Supported Indicator (PSI)", "ansi_a_bsmap.cm2.psi",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x01,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cm2_scm_len,
+ { "SCM Length", "ansi_a_bsmap.cm2.scm_len",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cm2_scm,
+ { "Station Class Mark", "ansi_a_bsmap.cm2.scm",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cm2_scm_ext_scm_ind,
+ { "Extended SCM Indicator", "ansi_a_bsmap.cm2.scm.ext_scm_ind",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_cm2_scm_ext_scm_ind_vals), 0x80,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cm2_scm_dual_mode,
+ { "Dual Mode", "ansi_a_bsmap.cm2.scm.dual_mode",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_cm2_scm_dual_mode_vals), 0x40,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cm2_scm_slotted,
+ { "Slotted Class", "ansi_a_bsmap.cm2.scm.slotted_class",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_cm2_scm_slotted_class_vals), 0x20,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cm2_scm_meid_configured,
+ { "MEID support indicator", "ansi_a_bsmap.cm2.scm.meid_configured",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_cm2_scm_meid_configured_vals), 0x10,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cm2_scm_25MHz_bandwidth,
+ { "25 MHz Bandwidth", "ansi_a_bsmap.cm2.scm.25MHz_bandwidth",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x08,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cm2_scm_transmission,
+ { "Transmission", "ansi_a_bsmap.cm2.scm.transmission",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_cm2_scm_transmission_vals), 0x04,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cm2_scm_power_class,
+ { "Power Class for Band Class 0 Analog Operation", "ansi_a_bsmap.cm2.scm.power_class",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_cm2_scm_power_class_vals), 0x03,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cm2_scm_band_class_count,
+ { "Count of Band Class Entries", "ansi_a_bsmap.cm2.scm.band_class_count",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cm2_scm_band_class_entry_len,
+ { "Band Class Entry Length", "ansi_a_bsmap.cm2.scm.band_class_entry_len",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_scm_band_class_entry_band_class,
+ { "Band Class", "ansi_a_bsmap.cm2.scm.bc_entry.band_class",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_band_class_vals), 0x1f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_scm_band_class_entry_opmode0_1,
+ { "Air Interface OP_MODE0: CDMA mode in Band Class 1 and Band Class 4", "ansi_a_bsmap.cm2.scm.bc_entry.opmode0",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x80,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_scm_band_class_entry_opmode1_1,
+ { "Air Interface OP_MODE1: CDMA mode in Band Class 0 and Band Class 3", "ansi_a_bsmap.cm2.scm.bc_entry.opmode1",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x40,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_scm_band_class_entry_opmode2_1,
+ { "Air Interface OP_MODE2: Reserved (Previously Analog mode)", "ansi_a_bsmap.cm2.scm.bc_entry.opmode2",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x20,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_scm_band_class_entry_opmode3_1,
+ { "Air Interface OP_MODE3: Reserved (Previously Wide analog mode)", "ansi_a_bsmap.cm2.scm.bc_entry.opmode3",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x10,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_scm_band_class_entry_opmode4_1,
+ { "Air Interface OP_MODE4: Reserved (Previously Narrow analog mode)", "ansi_a_bsmap.cm2.scm.bc_entry.opmode4",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x08,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_scm_band_class_entry_opmode0_2,
+ { "Air Interface OP_MODE0: CDMA mode", "ansi_a_bsmap.cm2.scm.bc_entry.opmode0",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x80,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_scm_band_class_entry_opmode1_2,
+ { "Air Interface OP_MODE1: CDMA mode", "ansi_a_bsmap.cm2.scm.bc_entry.opmode1",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x40,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_scm_band_class_entry_opmode2_2,
+ { "Air Interface OP_MODE2: Reserved (Previously Analog mode)", "ansi_a_bsmap.cm2.scm.bc_entry.opmode2",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x20,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_scm_band_class_entry_opmode3_2,
+ { "Air Interface OP_MODE3: Reserved (Previously Wide analog mode)", "ansi_a_bsmap.cm2.scm.bc_entry.opmode3",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x10,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_scm_band_class_entry_opmode4_2,
+ { "Air Interface OP_MODE4: Reserved (Previously Narrow analog mode)", "ansi_a_bsmap.cm2.scm.bc_entry.opmode4",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x08,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_scm_band_class_entry_opmode5_2,
+ { "Air Interface OP_MODE5: DS-41", "ansi_a_bsmap.cm2.scm.bc_entry.opmode4",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x04,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_scm_band_class_entry_opmode6_2,
+ { "Air Interface OP_MODE6: MC-MAP", "ansi_a_bsmap.cm2.scm.bc_entry.opmode4",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_scm_band_class_entry_p_rev,
+ { "Band Class MS Protocol Level", "ansi_a_bsmap.cm2.scm.bc_entry.p_rev",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_meid_mid_digit_1,
+ { "MEID Hex Digit 1", "ansi_a_bsmap.mid.digit_1",
+ FT_UINT8, BASE_DEC, NULL, 0xf0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_imsi_mid_digit_1,
+ { "Identity Digit 1", "ansi_a_bsmap.mid.digit_1",
+ FT_UINT8, BASE_DEC, NULL, 0xf0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_mid_odd_even_ind,
+ { "Odd/Even Indicator", "ansi_a_bsmap.mid.odd_even_ind",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_mid_odd_even_ind_vals), 0x08,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_mid_type_of_id,
+ { "Type of Identity", "ansi_a_bsmap.mid.type_of_identity",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_mid_type_vals), 0x07,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_mid_broadcast_priority,
+ { "Priority", "ansi_a_bsmap.mid.broadcast.priority",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_mid_broadcast_priority_vals), 0xc0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_mid_broadcast_message_id,
+ { "Message ID", "ansi_a_bsmap.mid.broadcast.message_id",
+ FT_UINT8, BASE_DEC, NULL, 0x2f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_mid_broadcast_zone_id,
+ { "Zone ID", "ansi_a_bsmap.mid.broadcast.zone_id",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_mid_broadcast_srvc_cat,
+ { "Service Category", "ansi_a_bsmap.mid.broadcast.srvc_cat",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_mid_broadcast_language,
+ { "Language", "ansi_a_bsmap.mid.broadcast.language",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_mid_unused,
+ { "Unused", "ansi_a_bsmap.mid.unused",
+ FT_UINT8, BASE_DEC, NULL, 0xf0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_sci_sign,
+ { "SCI Sign", "ansi_a_bsmap.slot_cycle_index_sign",
+ FT_UINT8, BASE_DEC, NULL, 0x08,
+ "1 indicates a negative sign is associated with the SCI", HFILL }
+ },
+ { &hf_ansi_a_sci,
+ { "Slot Cycle Index", "ansi_a_bsmap.slot_cycle_index",
+ FT_UINT8, BASE_DEC, NULL, 0x07,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_prio_call_priority,
+ { "Call Priority Level", "ansi_a_bsmap.prio.call_priority",
+ FT_UINT8, BASE_DEC, NULL, 0x3c,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_prio_queue_allowed,
+ { "Queuing allowed", "ansi_a_bsmap.prio.queuing_allowed",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_prio_preempt_allowed,
+ { "Preemption allowed", "ansi_a_bsmap.prio.preempt_allowed",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x01,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_mob_p_rev,
+ { "MOB_P_REV", "ansi_a_bsmap.mob_p_rev",
+ FT_UINT8, BASE_DEC, NULL, 0x00,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cause_1_ext,
+ { "Extension", "ansi_a_bsmap.cause.ext",
+ FT_UINT8, BASE_DEC, NULL, 0x80,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cause_2_ext,
+ { "Extension", "ansi_a_bsmap.cause.ext",
+ FT_UINT16, BASE_DEC, NULL, 0x8000,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cell_id_disc,
+ { "Cell Identification Discriminator", "ansi_a_bsmap.cell_id_discriminator",
+ FT_UINT8, BASE_DEC, VALS(cell_disc_str), 0x00,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cic,
+ { "CIC", "ansi_a_bsmap.cic",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cic_pcm_multi,
+ { "PCM Multiplexer", "ansi_a_bsmap.cic.pcm_multi",
+ FT_UINT16, BASE_DEC, NULL, 0xffe0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cic_timeslot,
+ { "Timeslot", "ansi_a_bsmap.cic.timeslot",
+ FT_UINT16, BASE_DEC, NULL, 0x001f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cic_ext_cic,
+ { "CIC", "ansi_a_bsmap.cic_ext.cic",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cic_ext_pcm_multi,
+ { "PCM Multiplexer", "ansi_a_bsmap.cic_ext.pcm_multi",
+ FT_UINT16, BASE_DEC, NULL, 0xffe0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cic_ext_timeslot,
+ { "Timeslot", "ansi_a_bsmap.cic_ext.timeslot",
+ FT_UINT16, BASE_DEC, NULL, 0x001f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cic_ext_circuit_mode,
+ { "Circuit Mode", "ansi_a_bsmap.cic_ext.circuit_mode",
+ FT_UINT8, BASE_DEC, NULL, 0x0f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_ssci_mopd,
+ { "Mobile Originated Position Determination", "ansi_a_bsmap.ssci.mopd",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_ssci_geci,
+ { "Global Emergency Call Indication", "ansi_a_bsmap.ssci.geci",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x01,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_downlink_re_num_cells,
+ { "Number of Cells", "ansi_a_bsmap.downlink_re.num_cells",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_downlink_re_sig_str_raw,
+ { "Downlink Signal Strength Raw", "ansi_a_bsmap.downlink_re.sig_str_raw",
+ FT_UINT8, BASE_DEC, NULL, 0x3f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_downlink_re_cdma_towd,
+ { "CDMA Target One Way Delay", "ansi_a_bsmap.downlink_re.cdma_towd",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_downlink_re_entry_env_len,
+ { "Environment Length", "ansi_a_bsmap.downlink_re.entry.env_len",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_ho_pow_lev_num_cells,
+ { "Number of Cells", "ansi_a_bsmap.ho_pow_lev.num_cells",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_ho_pow_lev_id_type,
+ { "ID Type", "ansi_a_bsmap.ho_pow_lev.id_type",
+ FT_UINT8, BASE_DEC, NULL, 0x60,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_ho_pow_lev_pow_lev,
+ { "Handoff Power Level", "ansi_a_bsmap.ho_pow_lev.pow_lev",
+ FT_UINT8, BASE_DEC, NULL, 0x1f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_uz_id,
+ { "UZID", "ansi_a_bsmap.uzid",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_info_rec_req,
+ { "Information Record Type", "ansi_a_bsmap.info_rec.rev_ms",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_chan_id_otd,
+ { "OTD", "ansi_a_bsmap.is2000_chan_id.otd",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x80,
+ "1 indicates mobile is using OTD", HFILL }
+ },
+ { &hf_ansi_a_is2000_chan_id_chan_count,
+ { "Physical Channel Count", "ansi_a_bsmap.is2000_chan_id.chan_count",
+ FT_UINT8, BASE_DEC, NULL, 0x70,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_chan_id_frame_offset,
+ { "Frame Offset", "ansi_a_bsmap.is2000_chan_id.frame_offset",
+ FT_UINT8, BASE_DEC, NULL, 0x0f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_chan_id_chan_chan_type,
+ { "Physical Channel Type", "ansi_a_bsmap.is2000_chan_id.chan.chan_type",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_chan_id_chan_rev_fch_gating,
+ { "Rev_FCH_Gating", "ansi_a_bsmap.is2000_chan_id.chan.rev_fch_gating",
+ FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x8000,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_chan_id_chan_rev_pilot_gating_rate,
+ { "Reverse Pilot Gating Rate", "ansi_a_bsmap.is2000_chan_id.chan.rev_pilot_gating_rate",
+ FT_UINT16, BASE_DEC, VALS(ansi_a_is2000_chan_id_chan_rev_pilot_gating_rate_vals), 0x6000,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_chan_id_chan_qof_mask,
+ { "QOF Mask", "ansi_a_bsmap.is2000_chan_id.chan.qof_mask",
+ FT_UINT16, BASE_DEC, NULL, 0x1800,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_chan_id_chan_walsh_code_chan_idx,
+ { "Walsh Code Channel Index", "ansi_a_bsmap.is2000_chan_id.chan.walsh_code_chan_idx",
+ FT_UINT16, BASE_DEC, NULL, 0x7ff,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_chan_id_chan_pilot_pn_code,
+ { "Pilot PN Code", "ansi_a_bsmap.is2000_chan_id.chan.pilot_pn_code",
+ FT_UINT24, BASE_DEC, NULL, 0xff8000,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_chan_id_chan_power_combined,
+ { "Power Combined", "ansi_a_bsmap.is2000_chan_id.chan.power_combined",
+ FT_BOOLEAN, 24, TFS(&tfs_yes_no), 0x001000,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_chan_id_chan_freq_incl,
+ { "Frequency Included", "ansi_a_bsmap.is2000_chan_id.chan.freq_incl",
+ FT_BOOLEAN, 24, TFS(&tfs_yes_no), 0x000800,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_chan_id_chan_channel_number,
+ { "ARFCN", "ansi_a_bsmap.is2000_chan_id.chan.channel_number",
+ FT_UINT24, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_chan_id_chan_fdc_length,
+ { "FDC Length", "ansi_a_bsmap.is2000_chan_id.chan.fdc_length",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_chan_id_chan_fdc_band_class,
+ { "FDC Length", "ansi_a_bsmap.is2000_chan_id.chan.fdc_band_class",
+ FT_UINT16, BASE_DEC, VALS(ansi_a_band_class_vals), 0xf800,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_chan_id_chan_fdc_fwd_chan_freq,
+ { "FDC Forward Channel Frequency", "ansi_a_bsmap.is2000_chan_id.chan.fdc_fwd_chan_freq",
+ FT_UINT16, BASE_DEC, NULL, 0x07ff,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_chan_id_chan_fdc_rev_chan_freq,
+ { "FDC Reverse Channel Frequency", "ansi_a_bsmap.is2000_chan_id.chan.fdc_rev_chan_freq",
+ FT_UINT16, BASE_DEC, NULL, 0xffe0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is95_ms_meas_chan_id_band_class, /* IOS 5 (MS Measured Channel Identity) */
+ { "Band Class", "ansi_a_bsmap.is95_ms_meas_chan_id.band_class",
+ FT_UINT16, BASE_DEC, VALS(ansi_a_band_class_vals), 0xf800,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is95_ms_meas_chan_id_channel_number,
+ { "Channel Number", "ansi_a_bsmap.is95_ms_meas_chan_id.channel_number",
+ FT_UINT16, BASE_DEC, NULL, 0x07ff,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_clg_party_ascii_num_ton,
+ { "Type of Number", "ansi_a_bsmap.clg_party_ascii_num.ton",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_clg_party_ascii_num_ton_vals), 0x70,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_clg_party_ascii_num_plan,
+ { "Numbering Plan Identification", "ansi_a_bsmap.clg_party_ascii_num.plan",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_clg_party_ascii_num_plan_vals), 0x0F,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_clg_party_ascii_num_pi,
+ { "Presentation Indicator", "ansi_a_bsmap.clg_party_ascii_num.pi",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_clg_party_ascii_num_pi_vals), 0x60,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_clg_party_ascii_num_si,
+ { "Screening Indicator", "ansi_a_bsmap.clg_party_ascii_num.si",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_clg_party_ascii_num_si_vals), 0x03,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_lai_mcc,
+ { "Mobile Country Code (MCC)", "ansi_a_bsmap.lai.mcc",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_lai_mnc,
+ { "Mobile Network Code (MNC)", "ansi_a_bsmap.lai.mnc",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_lai_lac,
+ { "Location Area Code", "ansi_a_bsmap.lai.lac",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_rej_cause,
+ { "Reject Cause Value", "ansi_a_bsmap.rej_cause",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_auth_chlg_param_rand_num_type,
+ { "Random Number Type", "ansi_a_bsmap.auth_chlg_param.rand_num_type",
+ FT_UINT8, BASE_DEC, NULL, 0x0F,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_auth_chlg_param_rand,
+ { "RAND/RANDU/RANDBS/RANDSSD Value", "ansi_a_bsmap.auth_chlg_param.rand",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_auth_resp_param_sig_type,
+ { "Auth Signature Type", "ansi_a_bsmap.auth_resp_param.sig_type",
+ FT_UINT8, BASE_DEC, NULL, 0x0F,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_auth_resp_param_sig,
+ { "Auth Signature", "ansi_a_bsmap.auth_resp_param.sig",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_auth_param_count_count,
+ { "Count", "ansi_a_bsmap.auth_param_count.count",
+ FT_UINT8, BASE_DEC, NULL, 0x3f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_mwi_num_messages,
+ { "Number of Messages", "ansi_a_bsmap.mwi.num_messages",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_signal_signal_value,
+ { "Signal Value", "ansi_a_bsmap.signal.signal_value",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_signal_signal_vals), 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_signal_alert_pitch,
+ { "Alert Pitch", "ansi_a_bsmap.signal.alert_pitch",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_signal_alert_pitch_vals), 0x03,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_clg_party_bcd_num_ton,
+ { "Type of Number", "ansi_a_bsmap.clg_party_bcd_num.ton",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_clg_party_bcd_num_ton_vals), 0x70,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_clg_party_bcd_num_plan,
+ { "Numbering Plan Identification", "ansi_a_bsmap.clg_party_bcd_num.plan",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_clg_party_bcd_num_plan_vals), 0x0F,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_qos_params_packet_priority,
+ { "Packet Priority", "ansi_a_bsmap.qos_params.packet_priority",
+ FT_UINT8, BASE_DEC, NULL, 0x0f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cause_l3_coding_standard,
+ { "Coding Standard", "ansi_a_bsmap.cause_l3.coding_standard",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_cause_l3_coding_standard_vals), 0x60,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cause_l3_location,
+ { "Location", "ansi_a_bsmap.cause_l3.location",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_cause_l3_location_vals), 0x0f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cause_l3_class,
+ { "Class", "ansi_a_bsmap.cause_l3.class",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_cause_l3_class_vals), 0x70,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cause_l3_value_without_class,
+ { "Value (Without class)", "ansi_a_bsmap.cause_l3.value_without_class",
+ FT_UINT8, BASE_DEC, NULL, 0x0f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cause_l3_value,
+ { "Value", "ansi_a_bsmap.cause_l3.value",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_auth_conf_param_randc,
+ { "RANDC", "ansi_a_bsmap.auth_conf_param.randc",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_xmode_tfo_mode,
+ { "TFO Mode", "ansi_a_bsmap.xmode.tfo_mode",
+ FT_BOOLEAN, 8, TFS(&tfs_ansi_a_xmode_tfo_mode), 0x01,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_reg_type_type,
+ { "Location Registration Type", "ansi_a_bsmap.reg_type.type",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_tag_value,
+ { "Tag value", "ansi_a_bsmap.tag.value",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_hho_params_band_class,
+ { "Band Class", "ansi_a_bsmap.hho_params.band_class",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_band_class_vals), 0x1f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_hho_params_num_pream_frames,
+ { "Number of Preamble Frames", "ansi_a_bsmap.hho_params.num_pream_frames",
+ FT_UINT8, BASE_DEC, NULL, 0xe0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_hho_params_reset_l2,
+ { "Reset L2", "ansi_a_bsmap.hho_params.reset_l2",
+ FT_BOOLEAN, 8, TFS(&tfs_l2_reset_dont_reset), 0x10,
+ "1 means reset Layer 2 Ack", HFILL }
+ },
+ { &hf_ansi_a_hho_params_reset_fpc,
+ { "Reset FPC", "ansi_a_bsmap.hho_params.reset_fpc",
+ FT_BOOLEAN, 8, TFS(&tfs_fpc_reset_dont_reset), 0x08,
+ "1 means reset counters", HFILL }
+ },
+ { &hf_ansi_a_hho_params_enc_mode,
+ { "Encryption Mode", "ansi_a_bsmap.hho_params.enc_mode",
+ FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x06,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_hho_params_private_lcm,
+ { "Private LCM", "ansi_a_bsmap.hho_params.private_lcm",
+ FT_BOOLEAN, 8, TFS(&tfs_use_dont_use), 0x01,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_hho_params_rev_pwr_cntl_delay_incl,
+ { "Rev_Pwr_Cntl_Delay_Incl", "ansi_a_bsmap.hho_params.rev_pwr_cntl_delay_incl",
+ FT_BOOLEAN, 8, TFS(&tfs_use_dont_use), 0x80,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_hho_params_rev_pwr_cntl_delay,
+ { "Rev_Pwr_Cntl_Delay", "ansi_a_bsmap.hho_params.rev_pwr_cntl_delay",
+ FT_UINT8, BASE_DEC, NULL, 0x60,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_hho_params_nom_pwr_ext,
+ { "Nom_Pwr_Ext", "ansi_a_bsmap.hho_params.nom_pwr_ext",
+ FT_UINT8, BASE_DEC, NULL, 0x10,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_hho_params_nom_pwr,
+ { "Nom_Pwr", "ansi_a_bsmap.hho_params.nom_pwr",
+ FT_UINT8, BASE_DEC, NULL, 0x0f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_hho_params_fpc_subchan_info,
+ { "FPC Subchannel Information", "ansi_a_bsmap.hho_params.fpc_subchan_info",
+ FT_UINT8, BASE_DEC, NULL, 0x3e,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_hho_params_fpc_subchan_info_incl,
+ { "FPC Subchannel Info Included", "ansi_a_bsmap.hho_params.fpc_subchan_info_incl",
+ FT_BOOLEAN, 8, TFS(&tfs_use_dont_use), 0x01,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_hho_params_pwr_cntl_step,
+ { "Power Control Step", "ansi_a_bsmap.hho_params.pwr_cntl_step",
+ FT_UINT8, BASE_DEC, NULL, 0x0e,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_hho_params_pwr_cntl_step_incl,
+ { "Power Control Step Included", "ansi_a_bsmap.hho_params.pwr_cntl_step_incl",
+ FT_BOOLEAN, 8, TFS(&tfs_use_dont_use), 0x01,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_sw_ver_major,
+ { "IOS Major Revision Level", "ansi_a_bsmap.sw_ver.major",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_sw_ver_minor,
+ { "IOS Minor Revision Level", "ansi_a_bsmap.sw_ver.minor",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_sw_ver_point,
+ { "IOS Point Release Level", "ansi_a_bsmap.sw_ver.point",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_so_proprietary_ind,
+ { "Proprietary Indicator", "ansi_a_bsmap.so.proprietary_ind",
+ FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x8000,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_so_revision,
+ { "Service Option Revision", "ansi_a_bsmap.so.revision",
+ FT_UINT16, BASE_DEC, NULL, 0x7000,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_so_base_so_num,
+ { "Base Service Option Number", "ansi_a_bsmap.so.base_so_num",
+ FT_UINT16, BASE_DEC, NULL, 0x0fff,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_soci,
+ { "Service Option Connection Identifier", "ansi_a_bsmap.soci",
+ FT_UINT8, BASE_DEC, NULL, 0x07,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_so_list_num,
+ { "Number of Service Option instances", "ansi_a_bsmap.so_list.num",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_so_list_sr_id,
+ { "SR_ID", "ansi_a_bsmap.so_list.sr_id",
+ FT_UINT8, BASE_DEC, NULL, 0x38,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_so_list_soci,
+ { "SOCI", "ansi_a_bsmap.so_list.soci",
+ FT_UINT8, BASE_DEC, NULL, 0x07,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_nid,
+ { "NID", "ansi_a_bsmap.nid",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_pzid,
+ { "PZID", "ansi_a_bsmap.pzid",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_adds_user_part_burst_type,
+ { "Data Burst Type", "ansi_a_bsmap.adds_user_part.burst_type",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_adds_strings), 0x3f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_adds_user_part_ext_burst_type,
+ { "Extended Burst Type", "ansi_a_bsmap.adds_user_part.ext_burst_type",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_adds_user_part_ext_data,
+ { "Data", "ansi_a_bsmap.adds_user_part.ext_data",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_adds_user_part_unknown_data,
+ { "Data", "ansi_a_bsmap.adds_user_part.unknown_data",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_amps_hho_params_enc_mode,
+ { "Encryption Mode", "ansi_a_bsmap.amps_hho_params.enc_mode",
+ FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x03,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_scr_num_fill_bits,
+ { "Bit-Exact Length Fill Bits", "ansi_a_bsmap.is2000_scr.num_fill_bits",
+ FT_UINT8, BASE_DEC, NULL, 0x07,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_scr_for_mux_option,
+ { "FOR_MUX_OPTION: Forward Traffic Channel multiplex option", "ansi_a_bsmap.is2000_scr.for_mux_opt",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_scr_rev_mux_option,
+ { "REV_MUX_OPTION: Reverse Traffic Channel multiplex option", "ansi_a_bsmap.is2000_scr.rev_mux_opt",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_scr_for_fch_rate,
+ { "FOR_RATES: Transmission rates of the Forward Fundamental Channel", "ansi_a_bsmap.is2000_scr.for_fch_rate",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_scr_rev_fch_rate,
+ { "REV_RATES: Transmission rates of the Reverse Fundamental Channel", "ansi_a_bsmap.is2000_scr.rev_fch_rate",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_scr_num_socr,
+ { "NUM_CON_REC: Number of service option connection records", "ansi_a_bsmap.is2000_scr.num_socr",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_scr_socr_soc_ref,
+ { "CON_REF: Service option connection reference", "ansi_a_bsmap.is2000_scr.socr.soc_ref",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_scr_socr_so,
+ { "SERVICE_OPTION", "ansi_a_bsmap.is2000_scr.socr.so",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_scr_socr_for_chan_type,
+ { "FOR_TRAFFIC", "ansi_a_bsmap.is2000_scr.socr.for_chan_type",
+ FT_UINT8, BASE_DEC, NULL, 0xf0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_scr_socr_rev_chan_type,
+ { "REV_TRAFFIC", "ansi_a_bsmap.is2000_scr.socr.rev_chan_type",
+ FT_UINT8, BASE_DEC, NULL, 0x0f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_scr_socr_ui_enc_mode,
+ { "UI_ENCRYPT_MODE: Encryption mode indicator for user information privacy", "ansi_a_bsmap.is2000_scr.socr.ui_enc_mode",
+ FT_UINT8, BASE_DEC, NULL, 0xe0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_scr_socr_sr_id,
+ { "SR_ID: Service reference identifier", "ansi_a_bsmap.is2000_scr.socr.sr_id",
+ FT_UINT8, BASE_DEC, NULL, 0x1c,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_scr_socr_rlp_info_incl,
+ { "RLP_INFO_INCL: RLP information included indicator", "ansi_a_bsmap.is2000_scr.socr.rlp_info_incl",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_scr_socr_rlp_blob_len,
+ { "RLP_BLOB_LEN", "ansi_a_bsmap.is2000_scr.socr.rlp_blob_len",
+ FT_UINT8, BASE_DEC, NULL, 0x01,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_scr_socr_rlp_blob_msb,
+ { "RLP_BLOB (MSB)", "ansi_a_bsmap.is2000_scr.socr.rlp_blob_msb",
+ FT_UINT8, BASE_DEC, NULL, 0x1f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_scr_socr_fch_cc_incl,
+ { "FCH_CC_INCL: Channel configuration for the Fundamental Channel included indicator", "ansi_a_bsmap.is2000_scr.socr.fch_cc_incl",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x80,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_scr_socr_fch_frame_size_support_ind,
+ { "FCH_FRAME_SIZE: Fundamental Channel frame size supported indicator", "ansi_a_bsmap.is2000_scr.socr.fch_frame_size_support_ind",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x40,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_scr_socr_for_fch_rc,
+ { "FOR_FCH_RC: Forward Fundamental Channel Radio Configuration", "ansi_a_bsmap.is2000_scr.socr.for_fch_rc",
+ FT_UINT8, BASE_DEC, NULL, 0x3e,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_scr_socr_rev_fch_rc,
+ { "REV_FCH_RC: Reverse Fundamental Channel Radio Configuration", "ansi_a_bsmap.is2000_scr.socr.rev_fch_rc",
+ FT_UINT8, BASE_DEC, NULL, 0x01,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_nn_scr_num_fill_bits,
+ { "Bit-Exact Length Fill Bits", "ansi_a_bsmap.is2000_nn_scr.num_fill_bits",
+ FT_UINT8, BASE_DEC, NULL, 0x07,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_nn_scr_content,
+ { "IS-2000 Non-Negotiable Service Configuration Record Content", "ansi_a_bsmap.is2000_nn_scr.content",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_nn_scr_fill_bits,
+ { "Fill Bits", "ansi_a_bsmap.is2000_nn_scr.fill_bits",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_rev_pdch_support_ind,
+ { "REV_PDCH: IS-2000 R-PDCH supported", "ansi_a_bsmap.is2000_mob_cap.rev_pdch_support_ind",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x80,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_for_pdch_support_ind,
+ { "FOR_PDCH: IS-2000 F-PDCH supported", "ansi_a_bsmap.is2000_mob_cap.for_pdch_support_ind",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x40,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_eram_support_ind,
+ { "ERAM: Enhanced Rate Adaptation Mode supported", "ansi_a_bsmap.is2000_mob_cap.eram_support_ind",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x20,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_dcch_support_ind,
+ { "DCCH: IS-2000 DCCH supported", "ansi_a_bsmap.is2000_mob_cap.dcch_support_ind",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x10,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_fch_support_ind,
+ { "FCH: IS-2000 FCH supported", "ansi_a_bsmap.is2000_mob_cap.fch_support_ind",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x08,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_otd_support_ind,
+ { "OTD: Orthogonal Transmit Diversity supported", "ansi_a_bsmap.is2000_mob_cap.otd_support_ind",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x04,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_enh_rc_cfg_support_ind,
+ { "Enhanced RC CFG Supported: Radio configuration in radio class 2 supported", "ansi_a_bsmap.is2000_mob_cap.enh_rc_cfg_support_ind",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_qpch_support_ind,
+ { "QPCH Supported: Quick Paging Channel supported", "ansi_a_bsmap.is2000_mob_cap.qpch_support_ind",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x01,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_fch_info_octet_len,
+ { "FCH Information: Bit-Exact Length Octet Count", "ansi_a_bsmap.is2000_mob_cap.fch_info.octet_len",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_fch_info_geo_loc_type,
+ { "Geo Location Type", "ansi_a_bsmap.is2000_mob_cap.fch_info.geo_loc_type",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_is2000_mob_cap_fch_info_geo_loc_type_vals), 0x70,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_fch_info_geo_loc_incl,
+ { "Geo Location Included", "ansi_a_bsmap.is2000_mob_cap.fch_info.geo_loc_incl",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x08,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_fch_info_num_fill_bits,
+ { "Bit-Exact Length Fill Bits", "ansi_a_bsmap.is2000_mob_cap.fch_info.num_fill_bits",
+ FT_UINT8, BASE_DEC, NULL, 0x07,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_fch_info_content,
+ { "FCH Information Content", "ansi_a_bsmap.is2000_mob_cap.fch_info.content",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_fch_info_fill_bits,
+ { "Fill Bits", "ansi_a_bsmap.is2000_mob_cap.fch_info.fill_bits",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_dcch_info_octet_len,
+ { "DCCH Information: Bit-Exact Length Octet Count", "ansi_a_bsmap.is2000_mob_cap.dcch_info.octet_len",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_dcch_info_num_fill_bits,
+ { "Bit-Exact Length Fill Bits", "ansi_a_bsmap.is2000_mob_cap.dcch_info.num_fill_bits",
+ FT_UINT8, BASE_DEC, NULL, 0x07,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_dcch_info_content,
+ { "DCCH Information Content", "ansi_a_bsmap.is2000_mob_cap.dcch_info.content",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_dcch_info_fill_bits,
+ { "Fill Bits", "ansi_a_bsmap.is2000_mob_cap.dcch_info.fill_bits",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_for_pdch_info_octet_len,
+ { "FOR_PDCH Information: Bit-Exact Length Octet Count", "ansi_a_bsmap.is2000_mob_cap.for_pdch_info.octet_len",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_for_pdch_info_num_fill_bits,
+ { "Bit-Exact Length Fill Bits", "ansi_a_bsmap.is2000_mob_cap.for_pdch_info.num_fill_bits",
+ FT_UINT8, BASE_DEC, NULL, 0x07,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_for_pdch_info_content,
+ { "FOR_PDCH Information Content", "ansi_a_bsmap.is2000_mob_cap.for_pdch_info.content",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_for_pdch_info_fill_bits,
+ { "Fill Bits", "ansi_a_bsmap.is2000_mob_cap.for_pdch_info.fill_bits",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_rev_pdch_info_octet_len,
+ { "REV_PDCH Information: Bit-Exact Length Octet Count", "ansi_a_bsmap.is2000_mob_cap.rev_pdch_info.octet_len",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_rev_pdch_info_num_fill_bits,
+ { "Bit-Exact Length Fill Bits", "ansi_a_bsmap.is2000_mob_cap.rev_pdch_info.num_fill_bits",
+ FT_UINT8, BASE_DEC, NULL, 0x07,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_rev_pdch_info_content,
+ { "REV_PDCH Information Content", "ansi_a_bsmap.is2000_mob_cap.rev_pdch_info.content",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_rev_pdch_info_fill_bits,
+ { "Fill Bits", "ansi_a_bsmap.is2000_mob_cap.rev_pdch_info.fill_bits",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_vp_support,
+ { "VP Algorithms Supported", "ansi_a_bsmap.is2000_mob_cap.vp_support",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_vp_support_a7,
+ { "VP Algorithm A7", "ansi_a_bsmap.is2000_mob_cap.vp_support.a7",
+ FT_BOOLEAN, 8, TFS(&tfs_reserved_no_voice_privacy), 0x40,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_vp_support_a6,
+ { "VP Algorithm A6", "ansi_a_bsmap.is2000_mob_cap.vp_support.a6",
+ FT_BOOLEAN, 8, TFS(&tfs_reserved_no_voice_privacy), 0x20,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_vp_support_a5,
+ { "VP Algorithm A5", "ansi_a_bsmap.is2000_mob_cap.vp_support.a5",
+ FT_BOOLEAN, 8, TFS(&tfs_reserved_no_voice_privacy), 0x10,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_vp_support_a4,
+ { "VP Algorithm A4", "ansi_a_bsmap.is2000_mob_cap.vp_support.a4",
+ FT_BOOLEAN, 8, TFS(&tfs_reserved_no_voice_privacy), 0x08,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_vp_support_a3,
+ { "VP Algorithm A3", "ansi_a_bsmap.is2000_mob_cap.vp_support.a3",
+ FT_BOOLEAN, 8, TFS(&tfs_reserved_no_voice_privacy), 0x04,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_vp_support_a2,
+ { "VP Algorithm A2", "ansi_a_bsmap.is2000_mob_cap.vp_support.a2",
+ FT_BOOLEAN, 8, TFS(&tfs_reserved_aes), 0x02,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_mob_cap_vp_support_a1,
+ { "VP Algorithm A1", "ansi_a_bsmap.is2000_mob_cap.vp_support.a1",
+ FT_BOOLEAN, 8, TFS(&tfs_reserved_private_long_code), 0x01,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_protocol_type,
+ { "Protocol Type", "ansi_a_bsmap.protocol_type",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_fwd_ms_info_rec_cld_pn_num_type,
+ { "Forward MS Information Record Called Party Number: Number Type", "ansi_a_bsmap.fwd_ms_info_rec.cld_pn.num_type",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_fwd_ms_info_rec_cld_pn_num_type_vals), 0xE0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_fwd_ms_info_rec_cld_pn_num_plan,
+ { "Forward MS Information Record Called Party Number: Number Plan", "ansi_a_bsmap.fwd_ms_info_rec.cld_pn.num_plan",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_fwd_ms_info_rec_cld_pn_num_plan_vals), 0x1E,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_fwd_ms_info_rec_cld_pn_num,
+ { "Forward MS Information Record Called Party Number: Number", "ansi_a_bsmap.fwd_ms_info_rec.cld_pn.num",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_fwd_ms_info_rec_clg_pn_num_type,
+ { "Forward MS Information Record Calling Party Number: Number Type", "ansi_a_bsmap.fwd_ms_info_rec.clg_pn.num_type",
+ FT_UINT16, BASE_DEC, VALS(ansi_a_fwd_ms_info_rec_cld_pn_num_type_vals), 0xE000,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_fwd_ms_info_rec_clg_pn_num_plan,
+ { "Forward MS Information Record Calling Party Number: Number Plan", "ansi_a_bsmap.fwd_ms_info_rec.clg_pn.num_plan",
+ FT_UINT16, BASE_DEC, VALS(ansi_a_fwd_ms_info_rec_cld_pn_num_plan_vals), 0x1e00,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_fwd_ms_info_rec_clg_pn_num,
+ { "Forward MS Information Record Calling Party Number: Number", "ansi_a_bsmap.fwd_ms_info_rec.clg_pn.num",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_fwd_ms_info_rec_clg_pn_pi,
+ { "Forward MS Information Record Calling Party Number: PI", "ansi_a_bsmap.fwd_ms_info_rec.clg_pn.pi",
+ FT_UINT16, BASE_DEC, VALS(ansi_a_clg_party_ascii_num_pi_vals), 0x0180,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_fwd_ms_info_rec_clg_pn_si,
+ { "Forward MS Information Record Calling Party Number: SI", "ansi_a_bsmap.fwd_ms_info_rec.clg_pn.si",
+ FT_UINT16, BASE_DEC, VALS(ansi_a_clg_party_ascii_num_si_vals), 0x60,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_fwd_ms_info_rec_mw_num,
+ { "Number of messages waiting", "ansi_a_bsmap.fwd_ms_info_rec.mw.num",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_fwd_ms_info_rec_content,
+ { "Forward MS Information Record Content", "ansi_a_bsmap.fwd_ms_info_rec.content",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_rev_ms_info_rec_cld_pn_num_type,
+ { "Reverse MS Information Record Called Party Number: Number Type", "ansi_a_bsmap.rev_ms_info_rec.cld_pn.num_type",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_fwd_ms_info_rec_cld_pn_num_type_vals), 0xE0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_rev_ms_info_rec_cld_pn_num_plan,
+ { "Reverse MS Information Record Called Party Number: Number Plan", "ansi_a_bsmap.rev_ms_info_rec.cld_pn.num_plan",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_fwd_ms_info_rec_cld_pn_num_plan_vals), 0x1E,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_rev_ms_info_rec_cld_pn_num,
+ { "Reverse MS Information Record Called Party Number: Number", "ansi_a_bsmap.rev_ms_info_rec.cld_pn.num",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_rev_ms_info_rec_clg_pn_num_type,
+ { "Reverse MS Information Record Calling Party Number: Number Type", "ansi_a_bsmap.rev_ms_info_rec.clg_pn.num_type",
+ FT_UINT16, BASE_DEC, VALS(ansi_a_fwd_ms_info_rec_cld_pn_num_type_vals), 0xe000,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_rev_ms_info_rec_clg_pn_num_plan,
+ { "Reverse MS Information Record Calling Party Number: Number Plan", "ansi_a_bsmap.rev_ms_info_rec.clg_pn.num_plan",
+ FT_UINT16, BASE_DEC, VALS(ansi_a_fwd_ms_info_rec_cld_pn_num_plan_vals), 0x1E00,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_rev_ms_info_rec_clg_pn_pi,
+ { "Reverse MS Information Record Calling Party Number: PI", "ansi_a_bsmap.rev_ms_info_rec.clg_pn.pi",
+ FT_UINT16, BASE_DEC, VALS(ansi_a_clg_party_ascii_num_pi_vals), 0x0180,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_rev_ms_info_rec_clg_pn_si,
+ { "Reverse MS Information Record Calling Party Number: SI", "ansi_a_bsmap.rev_ms_info_rec.clg_pn.si",
+ FT_UINT16, BASE_DEC, VALS(ansi_a_clg_party_ascii_num_si_vals), 0x0060,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_rev_ms_info_rec_clg_pn_num,
+ { "Reverse MS Information Record Calling Party Number: Number", "ansi_a_bsmap.rev_ms_info_rec.clg_pn.num",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_rev_ms_info_rec_so_info_fwd_support,
+ { "Forward Support", "ansi_a_bsmap.rev_ms_info_rec.so_info.fwd_support",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_rev_ms_info_rec_so_info_rev_support,
+ { "Reverse Support", "ansi_a_bsmap.rev_ms_info_rec.so_info.rev_support",
+ FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x01,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_rev_ms_info_rec_so_info_so,
+ { "Service Option", "ansi_a_bsmap.rev_ms_info_rec.so_info.so",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_rev_ms_info_rec_content,
+ { "Reverse MS Information Record Content", "ansi_a_bsmap.rev_ms_info_rec.content",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_ext_ho_dir_params_srch_win_a,
+ { "Search Window A Size (Srch_Win_A)", "ansi_a_bsmap.ext_ho_dir_params.srch_win_a",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_srch_win_sizes_vals), 0xf0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_ext_ho_dir_params_srch_win_n,
+ { "Search Window N Size (Srch_Win_N)", "ansi_a_bsmap.ext_ho_dir_params.srch_win_n",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_srch_win_sizes_vals), 0x0f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_ext_ho_dir_params_srch_win_r,
+ { "Search Window R Size (Srch_Win_R)", "ansi_a_bsmap.ext_ho_dir_params.srch_win_r",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_srch_win_sizes_vals), 0xf0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_ext_ho_dir_params_t_add,
+ { "Add Pilot Threshold (T_Add)", "ansi_a_bsmap.ext_ho_dir_params.t_add",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_ext_ho_dir_params_t_drop,
+ { "Drop Pilot Threshold (T_Drop)", "ansi_a_bsmap.ext_ho_dir_params.t_drop",
+ FT_UINT8, BASE_DEC, NULL, 0x3f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_ext_ho_dir_params_t_comp,
+ { "Compare Threshold (T_Comp)", "ansi_a_bsmap.ext_ho_dir_params.t_comp",
+ FT_UINT8, BASE_DEC, NULL, 0xf0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_ext_ho_dir_params_t_tdrop,
+ { "Drop Timer Value (T_TDrop)", "ansi_a_bsmap.ext_ho_dir_params.t_tdrop",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_t_tdrop_vals), 0x0f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_ext_ho_dir_params_nghbor_max_age,
+ { "Neighbor Max Age (Nghbor_Max_AGE)", "ansi_a_bsmap.ext_ho_dir_params.nghbor_max_age",
+ FT_UINT8, BASE_DEC, NULL, 0xf0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_ext_ho_dir_params_target_bs_values_incl,
+ { "Target BS Values Included", "ansi_a_bsmap.ext_ho_dir_params.target_bs_values_incl",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_ext_ho_dir_params_target_bs_values_incl_vals), 0x03,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_ext_ho_dir_params_soft_slope,
+ { "SOFT_SLOPE", "ansi_a_bsmap.ext_ho_dir_params.soft_slope",
+ FT_UINT8, BASE_DEC, NULL, 0x3f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_ext_ho_dir_params_add_intercept,
+ { "ADD_INTERCEPT", "ansi_a_bsmap.ext_ho_dir_params.add_intercept",
+ FT_UINT8, BASE_DEC, NULL, 0x3f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_ext_ho_dir_params_drop_intercept,
+ { "DROP_INTERCEPT", "ansi_a_bsmap.ext_ho_dir_params.drop_intercept",
+ FT_UINT8, BASE_DEC, NULL, 0x3f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_ext_ho_dir_params_target_bs_p_rev,
+ { "Target BS P_REV", "ansi_a_bsmap.ext_ho_dir_params.target_bs_p_rev",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cdma_sowd_sowd,
+ { "CDMA Serving One Way Delay", "ansi_a_bsmap.cdma_sowd.sowd",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cdma_sowd_resolution,
+ { "Resolution", "ansi_a_bsmap.cdma_sowd.resolution",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_cdma_sowd_resolution_vals), 0x03,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cdma_sowd_timestamp,
+ { "CDMA Serving One Way Delay Time Stamp", "ansi_a_bsmap.cdma_sowd.timestamp",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_re_res_prio_incl,
+ { "Include Priority", "ansi_a_bsmap.re_res.prio_incl",
+ FT_BOOLEAN, 8, TFS(&tfs_prio_incl_yes_no), 0x40,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_re_res_forward,
+ { "Forward", "ansi_a_bsmap.re_res.forward",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_re_res_vals), 0x30,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_re_res_reverse,
+ { "Reverse", "ansi_a_bsmap.re_res.reverse",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_re_res_vals), 0x0c,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_re_res_alloc,
+ { "Alloc", "ansi_a_bsmap.re_res.alloc",
+ FT_BOOLEAN, 8, TFS(&tfs_alloc_yes_no), 0x02,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_re_res_avail,
+ { "Avail", "ansi_a_bsmap.re_res.avail",
+ FT_BOOLEAN, 8, TFS(&tfs_avail_yes_no), 0x01,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cld_party_ascii_num_ton,
+ { "Type of Number", "ansi_a_bsmap.cld_party_ascii_num.ton",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_clg_party_bcd_num_ton_vals), 0x70,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cld_party_ascii_num_plan,
+ { "Numbering Plan Identification", "ansi_a_bsmap.cld_party_ascii_num.plan",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_clg_party_bcd_num_plan_vals), 0x0F,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_band_class,
+ { "Band Class", "ansi_a_bsmap.band_class",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_band_class_vals), 0x1f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_is2000_cause,
+ { "Cause", "ansi_a_bsmap.is2000_cause",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_auth_event,
+ { "Event", "ansi_a_bsmap.auth_event",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_psmm_count,
+ { "PSMM Count", "ansi_a_bsmap.psmm_count",
+ FT_UINT8, BASE_DEC, NULL, 0x0f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_geo_loc,
+ { "Calling Geodetic Location (CGL)", "ansi_a_bsmap.geo_loc",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cct_group_all_circuits,
+ { "All Circuits", "ansi_a_bsmap.cct_group.all_circuits",
+ FT_BOOLEAN, 8, TFS(&tfs_avail_yes_no), 0x02,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cct_group_inclusive,
+ { "Inclusive", "ansi_a_bsmap.cct_group.inclusive",
+ FT_BOOLEAN, 8, TFS(&tfs_avail_yes_no), 0x01,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cct_group_count,
+ { "Count", "ansi_a_bsmap.cct_group.count",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cct_group_first_cic,
+ { "First CIC", "ansi_a_bsmap.cct_group.first_cic",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cct_group_first_cic_pcm_multi,
+ { "First CIC PCM Multiplexer", "ansi_a_bsmap.cct_group.first_cic.pcm_multi",
+ FT_UINT16, BASE_DEC, NULL, 0xffe0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_cct_group_first_cic_timeslot,
+ { "First CIC Timeslot", "ansi_a_bsmap.cct_group.first_cic.timeslot",
+ FT_UINT16, BASE_DEC, NULL, 0x001f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_paca_timestamp_queuing_time,
+ { "PACA Queuing Time", "ansi_a_bsmap.paca_timestamp.queuing_time",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_paca_order_action_reqd,
+ { "PACA Action Required", "ansi_a_bsmap.paca_order.action_reqd",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_paca_order_action_reqd_vals), 0x07,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_paca_reoi_pri,
+ { "PACA Reorigination Indicator (PRI)", "ansi_a_bsmap.paca_reoi.pri",
+ FT_BOOLEAN, 8, TFS(&tfs_reoi_pri_reorig_no_reorig), 0x01,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_a2p_bearer_sess_max_frames,
+ { "Max Frames", "ansi_a_bsmap.a2p_bearer_sess.max_frames",
+ FT_UINT8, BASE_DEC, NULL, 0x38,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_a2p_bearer_sess_ip_addr_type,
+ { "Session IP Address Type", "ansi_a_bsmap.a2p_bearer_sess.ip_addr_type",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_ip_addr_type_vals), 0x06,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_a2p_bearer_sess_addr_flag,
+ { "Session Address Flag", "ansi_a_bsmap.a2p_bearer_sess.addr_flag",
+ FT_BOOLEAN, 8, TFS(&tfs_a2p_bearer_sess_addr_flag), 0x01,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_a2p_bearer_sess_ipv4_addr,
+ { "Session IP Address", "ansi_a_bsmap.a2p_bearer_sess.ipv4_addr",
+ FT_IPv4, BASE_NONE, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_a2p_bearer_sess_ipv6_addr,
+ { "Session IP Address", "ansi_a_bsmap.a2p_bearer_sess.ipv6_addr",
+ FT_IPv6, BASE_NONE, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_a2p_bearer_sess_udp_port,
+ { "Session UDP Port", "ansi_a_bsmap.a2p_bearer_sess.udp_port",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_a2p_bearer_form_num_formats,
+ { "Number of Bearer Formats", "ansi_a_bsmap.a2p_bearer_form.num_formats",
+ FT_UINT8, BASE_DEC, NULL, 0xfc,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_a2p_bearer_form_ip_addr_type,
+ { "Bearer IP Address Type", "ansi_a_bsmap.a2p_bearer_form.ip_addr_type",
+ FT_UINT8, BASE_DEC, NULL, 0x03,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_a2p_bearer_form_format_len,
+ { "Bearer Format Length", "ansi_a_bsmap.a2p_bearer_form.format.len",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_a2p_bearer_form_format_tag_type,
+ { "Bearer Format Tag Type", "ansi_a_bsmap.a2p_bearer_form.format.tag_type",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_a2p_bearer_form_format_tag_type_vals), 0x70,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_a2p_bearer_form_format_format_id,
+ { "Bearer Format ID", "ansi_a_bsmap.a2p_bearer_form.format.format_id",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_a2p_bearer_form_format_format_id_vals), 0x0F,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_a2p_bearer_form_format_rtp_payload_type,
+ { "RTP Payload Type", "ansi_a_bsmap.a2p_bearer_form.format.rtp_payload_type",
+ FT_UINT8, BASE_DEC, NULL, 0xfe,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_a2p_bearer_form_format_bearer_addr_flag,
+ { "Bearer Address Flag", "ansi_a_bsmap.a2p_bearer_form.format.bearer_addr_flag",
+ FT_BOOLEAN, 8, TFS(&tfs_a2p_bearer_form_format_bearer_addr_flag), 0x01,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_a2p_bearer_form_format_ipv4_addr,
+ { "Bearer IP Address", "ansi_a_bsmap.a2p_bearer_form.format.ipv4_addr",
+ FT_IPv4, BASE_NONE, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_a2p_bearer_form_format_ipv6_addr,
+ { "Bearer IP Address", "ansi_a_bsmap.a2p_bearer_form.format.ipv6_addr",
+ FT_IPv6, BASE_NONE, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_a2p_bearer_form_format_udp_port,
+ { "Bearer UDP Port", "ansi_a_bsmap.a2p_bearer_form.format.udp_port",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_a2p_bearer_form_format_ext_len,
+ { "Extension Length", "ansi_a_bsmap.a2p_bearer_form.format.ext_len",
+ FT_UINT8, BASE_DEC, NULL, 0xf0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_a2p_bearer_form_format_ext_id,
+ { "Extension ID", "ansi_a_bsmap.a2p_bearer_form.format.ext_id",
+ FT_UINT8, BASE_DEC, NULL, 0x0f,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_ms_des_freq_band_class,
+ { "Band Class", "ansi_a_bsmap.ms_des_freq.band_class",
+ FT_UINT16, BASE_DEC, VALS(ansi_a_band_class_vals), 0xf800,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_ms_des_freq_cdma_channel,
+ { "CDMA Channel", "ansi_a_bsmap.ms_des_freq.cdma_channel",
+ FT_UINT16, BASE_DEC, NULL, 0x07ff,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_plcm_id_plcm_type,
+ { "PLCM_TYPE", "ansi_a_bsmap.plcm_id.plcm_type",
+ FT_UINT8, BASE_DEC, NULL, 0xF0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_bdtmf_trans_info_dtmf_off_len,
+ { "DTMF Off Length", "ansi_a_bsmap.bdtmf_trans_info.dtmf_off_len",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_bdtmf_trans_info_dtmf_off_len_vals), 0x38,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_bdtmf_trans_info_dtmf_on_len,
+ { "DTMF On Length", "ansi_a_bsmap.bdtmf_trans_info.dtmf_on_len",
+ FT_UINT8, BASE_DEC, VALS(ansi_a_bdtmf_trans_info_dtmf_on_len_vals), 0x07,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_bdtmf_chars_num_chars,
+ { "DTMF On Length", "ansi_a_bsmap.bdtmf_chars.num_chars",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_ansi_a_bdtmf_chars_digits,
+ { "DTMF Digits", "ansi_a_bsmap.bdtmf_chars.digits",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }
}
};
static ei_register_info ei[] = {
- { &ei_ansi_a_extraneous_data, { "ansi_a.extraneous_data", PI_PROTOCOL, PI_NOTE, "Extraneous Data, dissector bug or later version spec(report to wireshark.org)", EXPFILL }},
+ { &ei_ansi_a_extraneous_data,
+ { "ansi_a.extraneous_data", PI_PROTOCOL, PI_NOTE,
+ "Extraneous Data - try checking decoder variant preference or dissector bug/later version spec (report to wireshark.org)",
+ EXPFILL }
+ },
+ { &ei_ansi_a_short_data,
+ { "ansi_a.short_data", PI_PROTOCOL, PI_NOTE,
+ "Short Data (?) - try checking decoder variant preference or dissector bug/later version spec (report to wireshark.org)",
+ EXPFILL }
+ },
+ { &ei_ansi_a_missing_mand_elem,
+ { "ansi_a.missing_mand_elem", PI_PROTOCOL, PI_WARN,
+ "Missing Mandatory element, rest of dissection is suspect - try checking decoder variant preference or dissector bug/later version spec (report to wireshark.org)",
+ EXPFILL }
+ },
+ { &ei_ansi_a_unknown_format,
+ { "ansi_a.unknown_format", PI_PROTOCOL, PI_WARN,
+ "Format Unknown/Unsupported - try checking decoder variant preference or dissector bug/later version spec (report to wireshark.org)",
+ EXPFILL }
+ },
+ { &ei_ansi_a_no_tlv_elem_diss,
+ { "ansi_a.no_tlv_elem_dissector", PI_PROTOCOL, PI_NOTE,
+ "No TLV element dissector - try checking decoder variant preference or dissector bug/later version spec (report to wireshark.org)",
+ EXPFILL }
+ },
+ { &ei_ansi_a_no_tv_elem_diss,
+ { "ansi_a.no_tv_elem_dissector", PI_PROTOCOL, PI_WARN /* because we don't know length */,
+ "No TV element dissector, rest of dissection is suspect - try checking decoder variant preference or dissector bug/later version spec (report to wireshark.org)",
+ EXPFILL }
+ },
+ { &ei_ansi_a_no_lv_elem_diss,
+ { "ansi_a.no_lv_elem_dissector", PI_PROTOCOL, PI_NOTE,
+ "No LV element dissector - try checking decoder variant preference or dissector bug/later version spec (report to wireshark.org)",
+ EXPFILL }
+ },
+ { &ei_ansi_a_no_v_elem_diss,
+ { "ansi_a.no_v_elem_dissector", PI_PROTOCOL, PI_WARN /* because we don't know length */,
+ "No V element dissector, rest of dissection is suspect - try checking decoder variant preference or dissector bug/later version spec (report to wireshark.org)",
+ EXPFILL }
+ },
+ { &ei_ansi_a_miss_dtap_msg_diss,
+ { "ansi_a.miss_dtap_msg_dissector", PI_PROTOCOL, PI_NOTE,
+ "Missing DTAP message dissector - try checking decoder variant preference or dissector bug/later version spec (report to wireshark.org)",
+ EXPFILL }
+ },
+ { &ei_ansi_a_miss_bsmap_msg_diss,
+ { "ansi_a.miss_bsmap_msg_dissector", PI_PROTOCOL, PI_NOTE,
+ "Missing BSMAP message dissector - try checking decoder variant preference or dissector bug/later version spec (report to wireshark.org)",
+ EXPFILL }
+ },
+ { &ei_ansi_a_is2000_chan_id_pilot_pn,
+ { "ansi_a.is2000_chan_id_pilot_pn", PI_PROTOCOL, PI_NOTE,
+ "This parameter has a unique encoding. The most significant bit comes after the LSBs unlike typical IOS octet split values.",
+ EXPFILL }
+ }
};
- expert_module_t* expert_a_bsmap;
+ expert_module_t *expert_a_bsmap;
static const enum_val_t a_variant_options[] = {
- { "is-634-rev0", "IS-634 rev. 0", A_VARIANT_IS634 },
- { "tsb-80", "TSB-80", A_VARIANT_TSB80 },
- { "is-634-a", "IS-634-A", A_VARIANT_IS634A },
- { "ios-2.x", "IOS 2.x", A_VARIANT_IOS2 },
- { "ios-3.x", "IOS 3.x", A_VARIANT_IOS3 },
- { "ios-4.0.1", "IOS 4.0.1", A_VARIANT_IOS401 },
- { "ios-5.0.1", "IOS 5.0.1", A_VARIANT_IOS501 },
- { NULL, NULL, 0 }
-
+ { "is-634-rev0", "IS-634 rev. 0", A_VARIANT_IS634 },
+ { "tsb-80", "TSB-80", A_VARIANT_TSB80 },
+ { "is-634-a", "IS-634-A", A_VARIANT_IS634A },
+ { "ios-2.x", "IOS 2.x", A_VARIANT_IOS2 },
+ { "ios-3.x", "IOS 3.x", A_VARIANT_IOS3 },
+ { "ios-4.0.1", "IOS 4.0.1", A_VARIANT_IOS401 },
+ { "ios-5.0.1", "IOS 5.0.1", A_VARIANT_IOS501 },
+ { NULL, NULL, 0 }
};
/* Setup protocol subtree array */
#define MAX_NUM_DTAP_MSG MAX(ANSI_A_IOS401_DTAP_NUM_MSG, ANSI_A_IOS501_DTAP_NUM_MSG)
#define MAX_NUM_BSMAP_MSG MAX(ANSI_A_IOS401_BSMAP_NUM_MSG, ANSI_A_IOS501_BSMAP_NUM_MSG)
#define MAX_NUM_ELEM_1 MAX(MAX_IOS401_NUM_ELEM_1, MAX_IOS501_NUM_ELEM_1)
-#define NUM_INDIVIDUAL_ELEMS 18
+#define NUM_INDIVIDUAL_ELEMS 24
gint **ett;
gint ett_len = (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) * sizeof(gint *);
@@ -12323,9 +13195,15 @@ proto_register_ansi_a(void)
ett[12] = &ett_scm;
ett[13] = &ett_adds_user_part;
ett[14] = &ett_scr;
- ett[15] = &ett_srvc_con_rec;
+ ett[15] = &ett_scr_socr;
ett[16] = &ett_cm2_band_class;
ett[17] = &ett_vp_algs;
+ ett[18] = &ett_chan_list;
+ ett[19] = &ett_cic;
+ ett[20] = &ett_is2000_mob_cap_fch_info;
+ ett[21] = &ett_is2000_mob_cap_dcch_info;
+ ett[22] = &ett_is2000_mob_cap_for_pdch_info;
+ ett[23] = &ett_is2000_mob_cap_rev_pdch_info;
last_offset = NUM_INDIVIDUAL_ELEMS;
@@ -12358,9 +13236,10 @@ proto_register_ansi_a(void)
proto_a_bsmap =
proto_register_protocol("ANSI A-I/F BSMAP", "ANSI BSMAP", "ansi_a_bsmap");
-
proto_register_field_array(proto_a_bsmap, hf, array_length(hf));
- expert_a_bsmap = expert_register_protocol(proto_a_bsmap);
+
+ expert_a_bsmap =
+ expert_register_protocol(proto_a_bsmap);
expert_register_field_array(expert_a_bsmap, ei, array_length(ei));
proto_a_dtap =
@@ -12395,6 +13274,12 @@ proto_register_ansi_a(void)
a_variant_options,
FALSE);
+ prefs_register_bool_preference(ansi_a_module,
+ "top_display_mid_so",
+ "Show mobile ID and service option in the INFO column",
+ "Whether the mobile ID and service options are displayed in the INFO column",
+ &global_a_info_display);
+
g_free(ett);
}
@@ -12406,7 +13291,8 @@ proto_reg_handoff_ansi_a(void)
if (!ansi_a_prefs_initialized)
{
- dissector_handle_t bsmap_handle, sip_dtap_bsmap_handle;
+ dissector_handle_t bsmap_handle, sip_dtap_bsmap_handle;
+
bsmap_handle = create_dissector_handle(dissect_bsmap, proto_a_bsmap);
dtap_handle = create_dissector_handle(dissect_dtap, proto_a_dtap);
sip_dtap_bsmap_handle = create_dissector_handle(dissect_sip_dtap_bsmap, proto_a_dtap);
@@ -12426,14 +13312,27 @@ proto_reg_handoff_ansi_a(void)
ansi_a_bsmap_strings = ansi_a_ios501_bsmap_strings;
ansi_a_dtap_strings = ansi_a_ios501_dtap_strings;
ansi_a_elem_1_strings = ansi_a_ios501_elem_1_strings;
- ansi_a_elem_1_max = (elem_idx_t)MAX_IOS501_NUM_ELEM_1;
+ ansi_a_elem_1_max = (elem_idx_t) MAX_IOS501_NUM_ELEM_1;
break;
default:
ansi_a_bsmap_strings = ansi_a_ios401_bsmap_strings;
ansi_a_dtap_strings = ansi_a_ios401_dtap_strings;
ansi_a_elem_1_strings = ansi_a_ios401_elem_1_strings;
- ansi_a_elem_1_max = (elem_idx_t)MAX_IOS401_NUM_ELEM_1;
+ ansi_a_elem_1_max = (elem_idx_t) MAX_IOS401_NUM_ELEM_1;
break;
}
}
+
+/*
+ * Editor modelines - http://www.wireshark.org/tools/modelines.html
+ *
+ * Local variables:
+ * c-basic-offset: 4
+ * tab-width: 8
+ * indent-tabs-mode: nil
+ * End:
+ *
+ * vi: set shiftwidth=4 tabstop=8 expandtab:
+ * :indentSize=4:tabSize=8:noTabs=true:
+ */