aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-gsm_a_dtap.c
diff options
context:
space:
mode:
authorBill Meier <wmeier@newsguy.com>2014-08-10 21:52:54 -0400
committerBill Meier <wmeier@newsguy.com>2014-08-15 14:43:44 +0000
commitfacb76ad8f47e6428b7c84b47dd8326ff9ad4f3f (patch)
tree69fb7160fe49097387a0b9122230b63c8266d2eb /epan/dissectors/packet-gsm_a_dtap.c
parentc84578ca04271ff68bb0446ac91742e3c508d43f (diff)
packet-gsm_a_dtap.c: various changes (mostly indentation/whitespace/formatting);
- Remove #include <epan/prefs.h> (no prefs); - tvb_length() --> tvb_reported_length() - Use '4 space' indentation; - Use consistent whitespace formatting; - Reformat hf[] entries for readability; Change-Id: I4fd7e860efa795256972d6a31155f0502fb7dcfd Reviewed-on: https://code.wireshark.org/review/3612 Reviewed-by: Bill Meier <wmeier@newsguy.com>
Diffstat (limited to 'epan/dissectors/packet-gsm_a_dtap.c')
-rw-r--r--epan/dissectors/packet-gsm_a_dtap.c9014
1 files changed, 4699 insertions, 4315 deletions
diff --git a/epan/dissectors/packet-gsm_a_dtap.c b/epan/dissectors/packet-gsm_a_dtap.c
index 541f2e8b05..55ceb4a742 100644
--- a/epan/dissectors/packet-gsm_a_dtap.c
+++ b/epan/dissectors/packet-gsm_a_dtap.c
@@ -22,7 +22,7 @@
* Copyright 2009, Gerasimos Dimitriadis <dimeg [AT] intracom.gr>
* In association with Intracom Telecom SA
*
- * Title 3GPP Other
+ * Title 3GPP Other
*
* Reference [3]
* Mobile radio interface Layer 3 specification;
@@ -97,12 +97,12 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-# include "config.h"
+#include "config.h"
#include <glib.h>
#include <epan/packet.h>
-#include <epan/prefs.h>
+#include <epan/expert.h>
#include <epan/tap.h>
#include <epan/wmem/wmem.h>
#include <epan/asn1.h>
@@ -115,7 +115,6 @@
#include "packet-gsm_a_common.h"
#include "packet-ppp.h"
#include "packet-gsm_sms.h"
-#include "expert.h"
#include "packet-isup.h"
void proto_register_gsm_a_dtap(void);
@@ -124,291 +123,291 @@ void proto_reg_handoff_gsm_a_dtap(void);
/* PROTOTYPES/FORWARDS */
const value_string gsm_a_dtap_msg_mm_strings[] = {
- { 0x01, "IMSI Detach Indication" },
- { 0x02, "Location Updating Accept" },
- { 0x04, "Location Updating Reject" },
- { 0x08, "Location Updating Request" },
- { 0x11, "Authentication Reject" },
- { 0x12, "Authentication Request" },
- { 0x14, "Authentication Response" },
- { 0x1c, "Authentication Failure" },
- { 0x18, "Identity Request" },
- { 0x19, "Identity Response" },
- { 0x1a, "TMSI Reallocation Command" },
- { 0x1b, "TMSI Reallocation Complete" },
- { 0x21, "CM Service Accept" },
- { 0x22, "CM Service Reject" },
- { 0x23, "CM Service Abort" },
- { 0x24, "CM Service Request" },
- { 0x25, "CM Service Prompt" },
- { 0x26, "Reserved: was allocated in earlier phases of the protocol" },
- { 0x28, "CM Re-establishment Request" },
- { 0x29, "Abort" },
- { 0x30, "MM Null" },
- { 0x31, "MM Status" },
- { 0x32, "MM Information" },
- { 0, NULL }
+ { 0x01, "IMSI Detach Indication" },
+ { 0x02, "Location Updating Accept" },
+ { 0x04, "Location Updating Reject" },
+ { 0x08, "Location Updating Request" },
+ { 0x11, "Authentication Reject" },
+ { 0x12, "Authentication Request" },
+ { 0x14, "Authentication Response" },
+ { 0x1c, "Authentication Failure" },
+ { 0x18, "Identity Request" },
+ { 0x19, "Identity Response" },
+ { 0x1a, "TMSI Reallocation Command" },
+ { 0x1b, "TMSI Reallocation Complete" },
+ { 0x21, "CM Service Accept" },
+ { 0x22, "CM Service Reject" },
+ { 0x23, "CM Service Abort" },
+ { 0x24, "CM Service Request" },
+ { 0x25, "CM Service Prompt" },
+ { 0x26, "Reserved: was allocated in earlier phases of the protocol" },
+ { 0x28, "CM Re-establishment Request" },
+ { 0x29, "Abort" },
+ { 0x30, "MM Null" },
+ { 0x31, "MM Status" },
+ { 0x32, "MM Information" },
+ { 0, NULL }
};
const value_string gsm_a_dtap_msg_cc_strings[] = {
- { 0x01, "Alerting" },
- { 0x08, "Call Confirmed" },
- { 0x02, "Call Proceeding" },
- { 0x07, "Connect" },
- { 0x0f, "Connect Acknowledge" },
- { 0x0e, "Emergency Setup" },
- { 0x03, "Progress" },
- { 0x04, "CC-Establishment" },
- { 0x06, "CC-Establishment Confirmed" },
- { 0x0b, "Recall" },
- { 0x09, "Start CC" },
- { 0x05, "Setup" },
- { 0x17, "Modify" },
- { 0x1f, "Modify Complete" },
- { 0x13, "Modify Reject" },
- { 0x10, "User Information" },
- { 0x18, "Hold" },
- { 0x19, "Hold Acknowledge" },
- { 0x1a, "Hold Reject" },
- { 0x1c, "Retrieve" },
- { 0x1d, "Retrieve Acknowledge" },
- { 0x1e, "Retrieve Reject" },
- { 0x25, "Disconnect" },
- { 0x2d, "Release" },
- { 0x2a, "Release Complete" },
- { 0x39, "Congestion Control" },
- { 0x3e, "Notify" },
- { 0x3d, "Status" },
- { 0x34, "Status Enquiry" },
- { 0x35, "Start DTMF" },
- { 0x31, "Stop DTMF" },
- { 0x32, "Stop DTMF Acknowledge" },
- { 0x36, "Start DTMF Acknowledge" },
- { 0x37, "Start DTMF Reject" },
- { 0x3a, "Facility" },
- { 0, NULL }
+ { 0x01, "Alerting" },
+ { 0x08, "Call Confirmed" },
+ { 0x02, "Call Proceeding" },
+ { 0x07, "Connect" },
+ { 0x0f, "Connect Acknowledge" },
+ { 0x0e, "Emergency Setup" },
+ { 0x03, "Progress" },
+ { 0x04, "CC-Establishment" },
+ { 0x06, "CC-Establishment Confirmed" },
+ { 0x0b, "Recall" },
+ { 0x09, "Start CC" },
+ { 0x05, "Setup" },
+ { 0x17, "Modify" },
+ { 0x1f, "Modify Complete" },
+ { 0x13, "Modify Reject" },
+ { 0x10, "User Information" },
+ { 0x18, "Hold" },
+ { 0x19, "Hold Acknowledge" },
+ { 0x1a, "Hold Reject" },
+ { 0x1c, "Retrieve" },
+ { 0x1d, "Retrieve Acknowledge" },
+ { 0x1e, "Retrieve Reject" },
+ { 0x25, "Disconnect" },
+ { 0x2d, "Release" },
+ { 0x2a, "Release Complete" },
+ { 0x39, "Congestion Control" },
+ { 0x3e, "Notify" },
+ { 0x3d, "Status" },
+ { 0x34, "Status Enquiry" },
+ { 0x35, "Start DTMF" },
+ { 0x31, "Stop DTMF" },
+ { 0x32, "Stop DTMF Acknowledge" },
+ { 0x36, "Start DTMF Acknowledge" },
+ { 0x37, "Start DTMF Reject" },
+ { 0x3a, "Facility" },
+ { 0, NULL }
};
const value_string gsm_a_dtap_msg_sms_strings[] = {
- { 0x01, "CP-DATA" },
- { 0x04, "CP-ACK" },
- { 0x10, "CP-ERROR" },
- { 0, NULL }
+ { 0x01, "CP-DATA" },
+ { 0x04, "CP-ACK" },
+ { 0x10, "CP-ERROR" },
+ { 0, NULL }
};
const value_string gsm_a_dtap_msg_ss_strings[] = {
- { 0x2a, "Release Complete" },
- { 0x3a, "Facility" },
- { 0x3b, "Register" },
- { 0, NULL }
+ { 0x2a, "Release Complete" },
+ { 0x3a, "Facility" },
+ { 0x3b, "Register" },
+ { 0, NULL }
};
const value_string gsm_a_dtap_msg_tp_strings[] = {
- { 0x00, "Close TCH Loop Cmd" },
- { 0x01, "Close TCH Loop Ack" },
- { 0x06, "Open Loop Cmd" },
- { 0x0c, "Act EMMI Cmd" },
- { 0x0d, "Act EMMI Ack" },
- { 0x10, "Deact EMMI" },
- { 0x14, "Test Interface" },
- { 0x20, "Close Multi-slot Loop Cmd" },
- { 0x21, "Close Multi-slot Loop Ack" },
- { 0x22, "Open Multi-slot Loop Cmd" },
- { 0x23, "Open Multi-slot Loop Ack" },
- { 0x24, "GPRS Test Mode Cmd" },
- { 0x25, "EGPRS Start Radio Block Loopback Cmd" },
- { 0x26, "Reset MS Positioning Stored Information" },
- { 0x40, "Close UE Test Loop" },
- { 0x41, "Close UE Test Loop Complete" },
- { 0x42, "Open UE Test Loop" },
- { 0x43, "Open UE Test Loop Complete" },
- { 0x44, "Activate RB Test Mode" },
- { 0x45, "Activate RB Test Mode Complete" },
- { 0x46, "Deactivate RB Test Mode" },
- { 0x47, "Deactivate RB Test Mode Complete" },
- { 0x48, "Reset UE Positioning Stored Information" },
- { 0x49, "UE Test Loop Mode 3 RLC SDU Counter Request" },
- { 0x4A, "UE Test Loop Mode 3 RLC SDU Counter Response" },
- { 0x80, "Close UE Test Loop" },
- { 0x81, "Close UE Test Loop Complete" },
- { 0x82, "Open UE Test Loop" },
- { 0x83, "Open UE Test Loop Complete" },
- { 0x84, "Activate Test Mode" },
- { 0x85, "Activate Test Mode Complete" },
- { 0x86, "Deactivate Test Mode" },
- { 0x87, "Deactivate Test Mode Complete" },
- { 0x88, "Reset UE Positioning Stored Information" },
- { 0x89, "UE Test Loop Mode C MBMS Packet Counter Request" },
- { 0x8a, "UE Test Loop Mode C MBMS Packet Counter Response" },
- { 0x8b, "Update UE Location Information" },
- { 0, NULL }
+ { 0x00, "Close TCH Loop Cmd" },
+ { 0x01, "Close TCH Loop Ack" },
+ { 0x06, "Open Loop Cmd" },
+ { 0x0c, "Act EMMI Cmd" },
+ { 0x0d, "Act EMMI Ack" },
+ { 0x10, "Deact EMMI" },
+ { 0x14, "Test Interface" },
+ { 0x20, "Close Multi-slot Loop Cmd" },
+ { 0x21, "Close Multi-slot Loop Ack" },
+ { 0x22, "Open Multi-slot Loop Cmd" },
+ { 0x23, "Open Multi-slot Loop Ack" },
+ { 0x24, "GPRS Test Mode Cmd" },
+ { 0x25, "EGPRS Start Radio Block Loopback Cmd" },
+ { 0x26, "Reset MS Positioning Stored Information" },
+ { 0x40, "Close UE Test Loop" },
+ { 0x41, "Close UE Test Loop Complete" },
+ { 0x42, "Open UE Test Loop" },
+ { 0x43, "Open UE Test Loop Complete" },
+ { 0x44, "Activate RB Test Mode" },
+ { 0x45, "Activate RB Test Mode Complete" },
+ { 0x46, "Deactivate RB Test Mode" },
+ { 0x47, "Deactivate RB Test Mode Complete" },
+ { 0x48, "Reset UE Positioning Stored Information" },
+ { 0x49, "UE Test Loop Mode 3 RLC SDU Counter Request" },
+ { 0x4A, "UE Test Loop Mode 3 RLC SDU Counter Response" },
+ { 0x80, "Close UE Test Loop" },
+ { 0x81, "Close UE Test Loop Complete" },
+ { 0x82, "Open UE Test Loop" },
+ { 0x83, "Open UE Test Loop Complete" },
+ { 0x84, "Activate Test Mode" },
+ { 0x85, "Activate Test Mode Complete" },
+ { 0x86, "Deactivate Test Mode" },
+ { 0x87, "Deactivate Test Mode Complete" },
+ { 0x88, "Reset UE Positioning Stored Information" },
+ { 0x89, "UE Test Loop Mode C MBMS Packet Counter Request" },
+ { 0x8a, "UE Test Loop Mode C MBMS Packet Counter Response" },
+ { 0x8b, "Update UE Location Information" },
+ { 0, NULL }
};
static const value_string gsm_dtap_elem_strings[] = {
- /* Mobility Management Information Elements 10.5.3 */
- { DE_AUTH_PARAM_RAND, "Authentication Parameter RAND" },
- { DE_AUTH_PARAM_AUTN, "Authentication Parameter AUTN (UMTS and EPS authentication challenge)" },
- { DE_AUTH_RESP_PARAM, "Authentication Response Parameter" },
- { DE_AUTH_RESP_PARAM_EXT, "Authentication Response Parameter (extension) (UMTS authentication challenge only)" },
- { DE_AUTH_FAIL_PARAM, "Authentication Failure Parameter (UMTS and EPS authentication challenge)" },
- { DE_CM_SRVC_TYPE, "CM Service Type" },
- { DE_ID_TYPE, "Identity Type" },
- { DE_LOC_UPD_TYPE, "Location Updating Type" },
- { DE_NETWORK_NAME, "Network Name" },
- { DE_REJ_CAUSE, "Reject Cause" },
- { DE_FOP, "Follow-on Proceed" },
- { DE_TIME_ZONE, "Time Zone" },
- { DE_TIME_ZONE_TIME, "Time Zone and Time" },
- { DE_CTS_PERM, "CTS Permission" },
- { DE_LSA_ID, "LSA Identifier" },
- { DE_DAY_SAVING_TIME, "Daylight Saving Time" },
- { DE_EMERGENCY_NUM_LIST, "Emergency Number List" },
- { DE_ADD_UPD_PARAMS, "Additional update parameters" },
- { DE_MM_TIMER, "MM Timer" },
- /* Call Control Information Elements 10.5.4 */
- { DE_AUX_STATES, "Auxiliary States" }, /* 10.5.4.4 Auxiliary states */
- { DE_BEARER_CAP, "Bearer Capability" }, /* 10.5.4.4a Backup bearer capability */
- { DE_CC_CAP, "Call Control Capabilities" },
- { DE_CALL_STATE, "Call State" },
- { DE_CLD_PARTY_BCD_NUM, "Called Party BCD Number" },
- { DE_CLD_PARTY_SUB_ADDR, "Called Party Subaddress" },
- { DE_CLG_PARTY_BCD_NUM, "Calling Party BCD Number" },
- { DE_CLG_PARTY_SUB_ADDR, "Calling Party Subaddress" },
- { DE_CAUSE, "Cause" },
- { DE_CLIR_SUP, "CLIR Suppression" },
- { DE_CLIR_INV, "CLIR Invocation" },
- { DE_CONGESTION, "Congestion Level" },
- { DE_CONN_NUM, "Connected Number" },
- { DE_CONN_SUB_ADDR, "Connected Subaddress" },
- { DE_FACILITY, "Facility" },
- { DE_HLC, "High Layer Compatibility" },
- { DE_KEYPAD_FACILITY, "Keypad Facility" },
- { DE_LLC, "Low Layer Compatibility" },
- { DE_MORE_DATA, "More Data" },
- { DE_NOT_IND, "Notification Indicator" },
- { DE_PROG_IND, "Progress Indicator" },
- { DE_RECALL_TYPE, "Recall type $(CCBS)$" },
- { DE_RED_PARTY_BCD_NUM, "Redirecting Party BCD Number" },
- { DE_RED_PARTY_SUB_ADDR, "Redirecting Party Subaddress" },
- { DE_REPEAT_IND, "Repeat Indicator" },
- { DE_REV_CALL_SETUP_DIR, "Reverse Call Setup Direction" },
- { DE_SETUP_CONTAINER, "SETUP Container $(CCBS)$" },
- { DE_SIGNAL, "Signal" },
- { DE_SS_VER_IND, "SS Version Indicator" },
- { DE_USER_USER, "User-user" },
- { DE_ALERT_PATTERN, "Alerting Pattern $(NIA)$" }, /* 10.5.4.26 Alerting Pattern $(NIA)$ */
- { DE_ALLOWED_ACTIONS, "Allowed Actions $(CCBS)$" },
- { DE_SI, "Stream Identifier" },
- { DE_NET_CC_CAP, "Network Call Control Capabilities" },
- { DE_CAUSE_NO_CLI, "Cause of No CLI" }, /* 10.5.4.30 Cause of No CLI */
- /* 10.5.4.31 Void */
- { DE_SUP_CODEC_LIST, "Supported Codec List" }, /* 10.5.4.32 Supported codec list */
- { DE_SERV_CAT, "Service Category" }, /* 10.5.4.33 Service category */
- { DE_REDIAL, "Redial" }, /* 10.5.4.34 Redial */
- { DE_NET_INIT_SERV_UPG, "Network-initiated Service Upgrade indicator" },
- /* 10.5.4.35 Network-initiated Service Upgrade indicator */
- /* Short Message Service Information Elements [5] 8.1.4 */
- { DE_CP_USER_DATA, "CP-User Data" },
- { DE_CP_CAUSE, "CP-Cause" },
- /* Tests procedures information elements 3GPP TS 44.014 6.4.0, 3GPP TS 34.109 6.4.0 and 3GPP TS 36.509 9.1.0*/
- { DE_TP_SUB_CHANNEL, "Close TCH Loop Cmd Sub-channel"},
- { DE_TP_ACK, "Open Loop Cmd Ack"},
- { DE_TP_LOOP_TYPE, "Close Multi-slot Loop Cmd Loop type"},
- { DE_TP_LOOP_ACK, "Close Multi-slot Loop Ack Result"},
- { DE_TP_TESTED_DEVICE, "Test Interface Tested device"},
- { DE_TP_PDU_DESCRIPTION, "GPRS Test Mode Cmd PDU description"},
- { DE_TP_MODE_FLAG, "GPRS Test Mode Cmd Mode flag"},
- { DE_TP_EGPRS_MODE_FLAG, "EGPRS Start Radio Block Loopback Cmd Mode flag"},
- { DE_TP_MS_POSITIONING_TECHNOLOGY, "MS Positioning Technology"},
- { DE_TP_UE_TEST_LOOP_MODE, "Close UE Test Loop Mode"},
- { DE_TP_UE_POSITIONING_TECHNOLOGY, "UE Positioning Technology"},
- { DE_TP_RLC_SDU_COUNTER_VALUE, "RLC SDU Counter Value"},
- { DE_TP_EPC_UE_TEST_LOOP_MODE, "UE Test Loop Mode"},
- { DE_TP_EPC_UE_TL_A_LB_SETUP, "UE Test Loop Mode A LB Setup"},
- { DE_TP_EPC_UE_TL_B_LB_SETUP, "UE Test Loop Mode B LB Setup"},
- { DE_TP_EPC_UE_TL_C_SETUP, "UE Test Loop Mode C Setup"},
- { DE_TP_EPC_UE_POSITIONING_TECHNOLOGY, "UE Positioning Technology"},
- { DE_TP_EPC_MBMS_PACKET_COUNTER_VALUE, "MBMS Packet Counter Value"},
- { DE_TP_EPC_ELLIPSOID_POINT_WITH_ALT, "Ellipsoid Point With Altitude"},
- { DE_TP_EPC_HORIZONTAL_VELOCITY, "Horizontal Velocity"},
- { DE_TP_EPC_GNSS_TOD_MSEC, "GNSS-TOD-msec"},
- { 0, NULL }
+ /* Mobility Management Information Elements 10.5.3 */
+ { DE_AUTH_PARAM_RAND, "Authentication Parameter RAND" },
+ { DE_AUTH_PARAM_AUTN, "Authentication Parameter AUTN (UMTS and EPS authentication challenge)" },
+ { DE_AUTH_RESP_PARAM, "Authentication Response Parameter" },
+ { DE_AUTH_RESP_PARAM_EXT, "Authentication Response Parameter (extension) (UMTS authentication challenge only)" },
+ { DE_AUTH_FAIL_PARAM, "Authentication Failure Parameter (UMTS and EPS authentication challenge)" },
+ { DE_CM_SRVC_TYPE, "CM Service Type" },
+ { DE_ID_TYPE, "Identity Type" },
+ { DE_LOC_UPD_TYPE, "Location Updating Type" },
+ { DE_NETWORK_NAME, "Network Name" },
+ { DE_REJ_CAUSE, "Reject Cause" },
+ { DE_FOP, "Follow-on Proceed" },
+ { DE_TIME_ZONE, "Time Zone" },
+ { DE_TIME_ZONE_TIME, "Time Zone and Time" },
+ { DE_CTS_PERM, "CTS Permission" },
+ { DE_LSA_ID, "LSA Identifier" },
+ { DE_DAY_SAVING_TIME, "Daylight Saving Time" },
+ { DE_EMERGENCY_NUM_LIST, "Emergency Number List" },
+ { DE_ADD_UPD_PARAMS, "Additional update parameters" },
+ { DE_MM_TIMER, "MM Timer" },
+ /* Call Control Information Elements 10.5.4 */
+ { DE_AUX_STATES, "Auxiliary States" }, /* 10.5.4.4 Auxiliary states */
+ { DE_BEARER_CAP, "Bearer Capability" }, /* 10.5.4.4a Backup bearer capability */
+ { DE_CC_CAP, "Call Control Capabilities" },
+ { DE_CALL_STATE, "Call State" },
+ { DE_CLD_PARTY_BCD_NUM, "Called Party BCD Number" },
+ { DE_CLD_PARTY_SUB_ADDR, "Called Party Subaddress" },
+ { DE_CLG_PARTY_BCD_NUM, "Calling Party BCD Number" },
+ { DE_CLG_PARTY_SUB_ADDR, "Calling Party Subaddress" },
+ { DE_CAUSE, "Cause" },
+ { DE_CLIR_SUP, "CLIR Suppression" },
+ { DE_CLIR_INV, "CLIR Invocation" },
+ { DE_CONGESTION, "Congestion Level" },
+ { DE_CONN_NUM, "Connected Number" },
+ { DE_CONN_SUB_ADDR, "Connected Subaddress" },
+ { DE_FACILITY, "Facility" },
+ { DE_HLC, "High Layer Compatibility" },
+ { DE_KEYPAD_FACILITY, "Keypad Facility" },
+ { DE_LLC, "Low Layer Compatibility" },
+ { DE_MORE_DATA, "More Data" },
+ { DE_NOT_IND, "Notification Indicator" },
+ { DE_PROG_IND, "Progress Indicator" },
+ { DE_RECALL_TYPE, "Recall type $(CCBS)$" },
+ { DE_RED_PARTY_BCD_NUM, "Redirecting Party BCD Number" },
+ { DE_RED_PARTY_SUB_ADDR, "Redirecting Party Subaddress" },
+ { DE_REPEAT_IND, "Repeat Indicator" },
+ { DE_REV_CALL_SETUP_DIR, "Reverse Call Setup Direction" },
+ { DE_SETUP_CONTAINER, "SETUP Container $(CCBS)$" },
+ { DE_SIGNAL, "Signal" },
+ { DE_SS_VER_IND, "SS Version Indicator" },
+ { DE_USER_USER, "User-user" },
+ { DE_ALERT_PATTERN, "Alerting Pattern $(NIA)$" }, /* 10.5.4.26 Alerting Pattern $(NIA)$ */
+ { DE_ALLOWED_ACTIONS, "Allowed Actions $(CCBS)$" },
+ { DE_SI, "Stream Identifier" },
+ { DE_NET_CC_CAP, "Network Call Control Capabilities" },
+ { DE_CAUSE_NO_CLI, "Cause of No CLI" }, /* 10.5.4.30 Cause of No CLI */
+ /* 10.5.4.31 Void */
+ { DE_SUP_CODEC_LIST, "Supported Codec List" }, /* 10.5.4.32 Supported codec list */
+ { DE_SERV_CAT, "Service Category" }, /* 10.5.4.33 Service category */
+ { DE_REDIAL, "Redial" }, /* 10.5.4.34 Redial */
+ { DE_NET_INIT_SERV_UPG, "Network-initiated Service Upgrade indicator" },
+ /* 10.5.4.35 Network-initiated Service Upgrade indicator */
+ /* Short Message Service Information Elements [5] 8.1.4 */
+ { DE_CP_USER_DATA, "CP-User Data" },
+ { DE_CP_CAUSE, "CP-Cause" },
+ /* Tests procedures information elements 3GPP TS 44.014 6.4.0, 3GPP TS 34.109 6.4.0 and 3GPP TS 36.509 9.1.0*/
+ { DE_TP_SUB_CHANNEL, "Close TCH Loop Cmd Sub-channel"},
+ { DE_TP_ACK, "Open Loop Cmd Ack"},
+ { DE_TP_LOOP_TYPE, "Close Multi-slot Loop Cmd Loop type"},
+ { DE_TP_LOOP_ACK, "Close Multi-slot Loop Ack Result"},
+ { DE_TP_TESTED_DEVICE, "Test Interface Tested device"},
+ { DE_TP_PDU_DESCRIPTION, "GPRS Test Mode Cmd PDU description"},
+ { DE_TP_MODE_FLAG, "GPRS Test Mode Cmd Mode flag"},
+ { DE_TP_EGPRS_MODE_FLAG, "EGPRS Start Radio Block Loopback Cmd Mode flag"},
+ { DE_TP_MS_POSITIONING_TECHNOLOGY, "MS Positioning Technology"},
+ { DE_TP_UE_TEST_LOOP_MODE, "Close UE Test Loop Mode"},
+ { DE_TP_UE_POSITIONING_TECHNOLOGY, "UE Positioning Technology"},
+ { DE_TP_RLC_SDU_COUNTER_VALUE, "RLC SDU Counter Value"},
+ { DE_TP_EPC_UE_TEST_LOOP_MODE, "UE Test Loop Mode"},
+ { DE_TP_EPC_UE_TL_A_LB_SETUP, "UE Test Loop Mode A LB Setup"},
+ { DE_TP_EPC_UE_TL_B_LB_SETUP, "UE Test Loop Mode B LB Setup"},
+ { DE_TP_EPC_UE_TL_C_SETUP, "UE Test Loop Mode C Setup"},
+ { DE_TP_EPC_UE_POSITIONING_TECHNOLOGY, "UE Positioning Technology"},
+ { DE_TP_EPC_MBMS_PACKET_COUNTER_VALUE, "MBMS Packet Counter Value"},
+ { DE_TP_EPC_ELLIPSOID_POINT_WITH_ALT, "Ellipsoid Point With Altitude"},
+ { DE_TP_EPC_HORIZONTAL_VELOCITY, "Horizontal Velocity"},
+ { DE_TP_EPC_GNSS_TOD_MSEC, "GNSS-TOD-msec"},
+ { 0, NULL }
};
value_string_ext gsm_dtap_elem_strings_ext = VALUE_STRING_EXT_INIT(gsm_dtap_elem_strings);
const gchar *gsm_a_pd_str[] = {
- "Group Call Control",
- "Broadcast Call Control",
- "EPS session management messages",
- "Call Control; call related SS messages",
- "GPRS Transparent Transport Protocol (GTTP)",
- "Mobility Management messages",
- "Radio Resources Management messages",
- "EPS mobility management messages",
- "GPRS Mobility Management messages",
- "SMS messages",
- "GPRS Session Management messages",
- "Non call related SS messages",
- "Location services specified in 3GPP TS 44.071",
- "Unknown",
- "Reserved for extension of the PD to one octet length",
- "Special conformance testing functions"
+ "Group Call Control",
+ "Broadcast Call Control",
+ "EPS session management messages",
+ "Call Control; call related SS messages",
+ "GPRS Transparent Transport Protocol (GTTP)",
+ "Mobility Management messages",
+ "Radio Resources Management messages",
+ "EPS mobility management messages",
+ "GPRS Mobility Management messages",
+ "SMS messages",
+ "GPRS Session Management messages",
+ "Non call related SS messages",
+ "Location services specified in 3GPP TS 44.071",
+ "Unknown",
+ "Reserved for extension of the PD to one octet length",
+ "Special conformance testing functions"
};
/* L3 Protocol discriminator values according to TS 24 007 (6.4.0) */
const value_string protocol_discriminator_vals[] = {
- {0x0, "Group call control"},
- {0x1, "Broadcast call control"},
- {0x2, "EPS session management messages"},
- {0x3, "Call Control; call related SS messages"},
- {0x4, "GPRS Transparent Transport Protocol (GTTP)"},
- {0x5, "Mobility Management messages"},
- {0x6, "Radio Resources Management messages"},
- {0x7, "EPS mobility management messages"},
- {0x8, "GPRS mobility management messages"},
- {0x9, "SMS messages"},
- {0xa, "GPRS session management messages"},
- {0xb, "Non call related SS messages"},
- {0xc, "Location services specified in 3GPP TS 44.071"},
- {0xd, "Unknown"},
- {0xe, "Reserved for extension of the PD to one octet length "},
- {0xf, "Tests procedures described in 3GPP TS 44.014, 3GPP TS 34.109 and 3GPP TS 36.509"},
- { 0, NULL }
+ {0x0, "Group call control"},
+ {0x1, "Broadcast call control"},
+ {0x2, "EPS session management messages"},
+ {0x3, "Call Control; call related SS messages"},
+ {0x4, "GPRS Transparent Transport Protocol (GTTP)"},
+ {0x5, "Mobility Management messages"},
+ {0x6, "Radio Resources Management messages"},
+ {0x7, "EPS mobility management messages"},
+ {0x8, "GPRS mobility management messages"},
+ {0x9, "SMS messages"},
+ {0xa, "GPRS session management messages"},
+ {0xb, "Non call related SS messages"},
+ {0xc, "Location services specified in 3GPP TS 44.071"},
+ {0xd, "Unknown"},
+ {0xe, "Reserved for extension of the PD to one octet length "},
+ {0xf, "Tests procedures described in 3GPP TS 44.014, 3GPP TS 34.109 and 3GPP TS 36.509"},
+ { 0, NULL }
};
const value_string gsm_a_pd_short_str_vals[] = {
- {0x0, "GCC"}, /* Group Call Control */
- {0x1, "BCC"}, /* Broadcast Call Control */
- {0x2, "Reserved"}, /* : was allocated in earlier phases of the protocol */
- {0x3, "CC"}, /* Call Control; call related SS messages */
- {0x4, "GTTP"}, /* GPRS Transparent Transport Protocol (GTTP) */
- {0x5, "MM"}, /* Mobility Management messages */
- {0x6, "RR"}, /* Radio Resources Management messages */
- {0x7, "Unknown"},
- {0x8, "GMM"}, /* GPRS Mobility Management messages */
- {0x9, "SMS"},
- {0xa, "SM"}, /* GPRS Session Management messages */
- {0xb, "SS"},
- {0xc, "LS"}, /* Location Services */
- {0xd, "Unknown"},
- {0xe, "Reserved"}, /* for extension of the PD to one octet length */
- {0xf, "TP"}, /* for tests procedures described in 3GPP TS 44.014 6.4.0 and 3GPP TS 34.109 6.4.0.*/
- { 0, NULL }
+ {0x0, "GCC"}, /* Group Call Control */
+ {0x1, "BCC"}, /* Broadcast Call Control */
+ {0x2, "Reserved"}, /* : was allocated in earlier phases of the protocol */
+ {0x3, "CC"}, /* Call Control; call related SS messages */
+ {0x4, "GTTP"}, /* GPRS Transparent Transport Protocol (GTTP) */
+ {0x5, "MM"}, /* Mobility Management messages */
+ {0x6, "RR"}, /* Radio Resources Management messages */
+ {0x7, "Unknown"},
+ {0x8, "GMM"}, /* GPRS Mobility Management messages */
+ {0x9, "SMS"},
+ {0xa, "SM"}, /* GPRS Session Management messages */
+ {0xb, "SS"},
+ {0xc, "LS"}, /* Location Services */
+ {0xd, "Unknown"},
+ {0xe, "Reserved"}, /* for extension of the PD to one octet length */
+ {0xf, "TP"}, /* for tests procedures described in 3GPP TS 44.014 6.4.0 and 3GPP TS 34.109 6.4.0.*/
+ { 0, NULL }
};
static const true_false_string tfs_acceptable_not_acceptable = { "Acceptable", "Not Acceptable" };
-#define DTAP_PD_MASK 0x0f
-#define DTAP_SKIP_MASK 0xf0
-#define DTAP_TI_MASK DTAP_SKIP_MASK
-#define DTAP_TIE_PRES_MASK 0x07 /* after TI shifted to right */
-#define DTAP_TIE_MASK 0x7f
+#define DTAP_PD_MASK 0x0f
+#define DTAP_SKIP_MASK 0xf0
+#define DTAP_TI_MASK DTAP_SKIP_MASK
+#define DTAP_TIE_PRES_MASK 0x07 /* after TI shifted to right */
+#define DTAP_TIE_MASK 0x7f
-#define DTAP_MM_IEI_MASK 0x3f
-#define DTAP_CC_IEI_MASK 0x3f
-#define DTAP_SMS_IEI_MASK 0xff
-#define DTAP_SS_IEI_MASK 0x3f
-#define DTAP_TP_IEI_MASK 0xff
+#define DTAP_MM_IEI_MASK 0x3f
+#define DTAP_CC_IEI_MASK 0x3f
+#define DTAP_SMS_IEI_MASK 0xff
+#define DTAP_SS_IEI_MASK 0x3f
+#define DTAP_TP_IEI_MASK 0xff
/* Initialize the protocol and registered fields */
static int proto_a_dtap = -1;
@@ -422,16 +421,16 @@ static int hf_gsm_a_dtap_msg_tp_type = -1;
int hf_gsm_a_dtap_elem_id = -1;
static int hf_gsm_a_dtap_cld_party_bcd_num = -1;
static int hf_gsm_a_dtap_clg_party_bcd_num = -1;
-static int hf_gsm_a_dtap_conn_num = -1;
+static int hf_gsm_a_dtap_conn_num = -1;
static int hf_gsm_a_dtap_red_party_bcd_num = -1;
static int hf_gsm_a_dtap_present_ind = -1;
static int hf_gsm_a_dtap_screening_ind = -1;
-static int hf_gsm_a_dtap_type_of_sub_addr = -1;
-static int hf_gsm_a_dtap_odd_even_ind = -1;
+static int hf_gsm_a_dtap_type_of_sub_addr = -1;
+static int hf_gsm_a_dtap_odd_even_ind = -1;
static int hf_gsm_a_dtap_cause = -1;
-static int hf_gsm_a_dtap_cause_ss_diagnostics = -1;
-static int hf_gsm_a_dtap_emergency_bcd_num = -1;
+static int hf_gsm_a_dtap_cause_ss_diagnostics = -1;
+static int hf_gsm_a_dtap_emergency_bcd_num = -1;
static int hf_gsm_a_dtap_emerg_num_info_length = -1;
static int hf_gsm_a_dtap_type_of_number = -1;
@@ -476,27 +475,27 @@ static int hf_gsm_a_dtap_codec_fr_amr_wb = -1;
static int hf_gsm_a_dtap_codec_pdc_efr = -1;
static int hf_gsm_a_dtap_notification_description = -1;
-static int hf_gsm_a_dtap_recall_type = -1;
-static int hf_gsm_a_dtap_coding_standard = -1;
-static int hf_gsm_a_dtap_call_state = -1;
-static int hf_gsm_a_dtap_prog_coding_standard = -1;
-static int hf_gsm_a_dtap_location = -1;
-static int hf_gsm_a_dtap_progress_description = -1;
-static int hf_gsm_a_dtap_afi = -1;
-static int hf_gsm_a_dtap_rej_cause = -1;
-static int hf_gsm_a_dtap_u2u_prot_discr = -1;
-static int hf_gsm_a_dtap_mcat = -1;
-static int hf_gsm_a_dtap_enicm = -1;
-static int hf_gsm_a_dtap_rand = -1;
-static int hf_gsm_a_dtap_autn = -1;
-static int hf_gsm_a_dtap_xres = -1;
-static int hf_gsm_a_dtap_sres = -1;
-static int hf_gsm_a_dtap_auts = -1;
+static int hf_gsm_a_dtap_recall_type = -1;
+static int hf_gsm_a_dtap_coding_standard = -1;
+static int hf_gsm_a_dtap_call_state = -1;
+static int hf_gsm_a_dtap_prog_coding_standard = -1;
+static int hf_gsm_a_dtap_location = -1;
+static int hf_gsm_a_dtap_progress_description = -1;
+static int hf_gsm_a_dtap_afi = -1;
+static int hf_gsm_a_dtap_rej_cause = -1;
+static int hf_gsm_a_dtap_u2u_prot_discr = -1;
+static int hf_gsm_a_dtap_mcat = -1;
+static int hf_gsm_a_dtap_enicm = -1;
+static int hf_gsm_a_dtap_rand = -1;
+static int hf_gsm_a_dtap_autn = -1;
+static int hf_gsm_a_dtap_xres = -1;
+static int hf_gsm_a_dtap_sres = -1;
+static int hf_gsm_a_dtap_auts = -1;
static int hf_gsm_a_dtap_autn_sqn_xor_ak = -1;
-static int hf_gsm_a_dtap_autn_amf = -1;
-static int hf_gsm_a_dtap_autn_mac = -1;
-static int hf_gsm_a_dtap_auts_sqn_ms_xor_ak = -1;
-static int hf_gsm_a_dtap_auts_mac_s = -1;
+static int hf_gsm_a_dtap_autn_amf = -1;
+static int hf_gsm_a_dtap_autn_mac = -1;
+static int hf_gsm_a_dtap_auts_sqn_ms_xor_ak = -1;
+static int hf_gsm_a_dtap_auts_mac_s = -1;
static int hf_gsm_a_dtap_epc_ue_tl_mode = -1;
static int hf_gsm_a_dtap_epc_ue_tl_a_ul_sdu_size = -1;
@@ -654,14 +653,14 @@ static proto_tree *g_tree;
static gint is_uplink;
static guint8 epc_test_loop_mode;
-#define NUM_GSM_DTAP_ELEM (sizeof(gsm_dtap_elem_strings)/sizeof(value_string))
+#define NUM_GSM_DTAP_ELEM (sizeof(gsm_dtap_elem_strings)/sizeof(value_string))
gint ett_gsm_dtap_elem[NUM_GSM_DTAP_ELEM];
static dgt_set_t Dgt_mbcd = {
- {
- /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
- '0','1','2','3','4','5','6','7','8','9','*','#','a','b','c','?'
- }
+ {
+ /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
+ '0','1','2','3','4','5','6','7','8','9','*','#','a','b','c','?'
+ }
};
/*
@@ -670,11 +669,11 @@ static dgt_set_t Dgt_mbcd = {
static guint16
de_auth_param_rand(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- /* The RAND value is 16 octets long */
- proto_tree_add_item(tree, hf_gsm_a_dtap_rand, tvb, offset, 16, ENC_NA);
+ /* The RAND value is 16 octets long */
+ proto_tree_add_item(tree, hf_gsm_a_dtap_rand, tvb, offset, 16, ENC_NA);
- /* no length check possible */
- return(16);
+ /* no length check possible */
+ return (16);
}
/*
@@ -683,22 +682,22 @@ de_auth_param_rand(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guin
static guint16
de_auth_param_autn(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
- proto_item *item;
- proto_tree *subtree;
+ proto_item *item;
+ proto_tree *subtree;
- item = proto_tree_add_item(tree, hf_gsm_a_dtap_autn, tvb, offset, len, ENC_NA);
- subtree = proto_item_add_subtree(item, ett_gsm_dtap_elem[DE_AUTH_PARAM_AUTN]);
+ item = proto_tree_add_item(tree, hf_gsm_a_dtap_autn, tvb, offset, len, ENC_NA);
+ subtree = proto_item_add_subtree(item, ett_gsm_dtap_elem[DE_AUTH_PARAM_AUTN]);
- if(len == 16)
- {
- proto_tree_add_item(subtree, hf_gsm_a_dtap_autn_sqn_xor_ak, tvb, offset, 6, ENC_NA);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_autn_amf, tvb, offset + 6, 2, ENC_NA);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_autn_mac, tvb, offset + 8, 8, ENC_NA);
- }
- else
- expert_add_info(pinfo, item, &ei_gsm_a_dtap_autn);
+ if (len == 16)
+ {
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_autn_sqn_xor_ak, tvb, offset, 6, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_autn_amf, tvb, offset + 6, 2, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_autn_mac, tvb, offset + 8, 8, ENC_NA);
+ }
+ else
+ expert_add_info(pinfo, item, &ei_gsm_a_dtap_autn);
- return(len);
+ return (len);
}
/*
@@ -707,11 +706,11 @@ de_auth_param_autn(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32
static guint16
de_auth_resp_param(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- /* This IE contains either the SRES or the 4 most significant octets of the RES */
- proto_tree_add_item(tree, hf_gsm_a_dtap_sres, tvb, offset, 4, ENC_NA);
+ /* This IE contains either the SRES or the 4 most significant octets of the RES */
+ proto_tree_add_item(tree, hf_gsm_a_dtap_sres, tvb, offset, 4, ENC_NA);
- /* no length check possible */
- return(4);
+ /* no length check possible */
+ return (4);
}
/*
@@ -720,10 +719,10 @@ de_auth_resp_param(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guin
static guint16
de_auth_resp_param_ext(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
- /* This IE contains all but 4 most significant octets of RES */
- proto_tree_add_item(tree, hf_gsm_a_dtap_xres, tvb, offset, len, ENC_NA);
+ /* This IE contains all but 4 most significant octets of RES */
+ proto_tree_add_item(tree, hf_gsm_a_dtap_xres, tvb, offset, len, ENC_NA);
- return(len);
+ return (len);
}
/*
@@ -732,21 +731,21 @@ de_auth_resp_param_ext(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
static guint16
de_auth_fail_param(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
- proto_item *item;
- proto_tree *subtree;
+ proto_item *item;
+ proto_tree *subtree;
- item = proto_tree_add_item(tree, hf_gsm_a_dtap_auts, tvb, offset, len, ENC_NA);
- subtree = proto_item_add_subtree(item, ett_gsm_dtap_elem[DE_AUTH_FAIL_PARAM]);
+ item = proto_tree_add_item(tree, hf_gsm_a_dtap_auts, tvb, offset, len, ENC_NA);
+ subtree = proto_item_add_subtree(item, ett_gsm_dtap_elem[DE_AUTH_FAIL_PARAM]);
- if(len == 14)
- {
- proto_tree_add_item(subtree, hf_gsm_a_dtap_auts_sqn_ms_xor_ak, tvb, offset, 6, ENC_NA);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_auts_mac_s, tvb, offset + 6, 8, ENC_NA);
- }
- else
- expert_add_info(pinfo, item, &ei_gsm_a_dtap_auts);
+ if (len == 14)
+ {
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_auts_sqn_ms_xor_ak, tvb, offset, 6, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_auts_mac_s, tvb, offset + 6, 8, ENC_NA);
+ }
+ else
+ expert_add_info(pinfo, item, &ei_gsm_a_dtap_auts);
- return(len);
+ return (len);
}
/*
@@ -765,15 +764,15 @@ de_auth_fail_param(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32
* [3] 10.5.3.5a Network Name
*/
static const value_string gsm_a_dtap_number_of_spare_bits_vals[] = {
- { 0, "this field carries no information about the number of spare bits in octet n"},
- { 1, "bit 8 is spare and set to '0' in octet n"},
- { 2, "bits 7 and 8 are spare and set to '0' in octet n"},
- { 3, "bits 6 to 8(inclusive) are spare and set to '0' in octet n"},
- { 4, "bits 5 to 8(inclusive) are spare and set to '0' in octet n"},
- { 5, "bits 4 to 8(inclusive) are spare and set to '0' in octet n"},
- { 6, "bits 3 to 8(inclusive) are spare and set to '0' in octet n"},
- { 7, "bits 2 to 8(inclusive) are spare and set to '0' in octet n"},
- { 0, NULL }
+ { 0, "this field carries no information about the number of spare bits in octet n"},
+ { 1, "bit 8 is spare and set to '0' in octet n"},
+ { 2, "bits 7 and 8 are spare and set to '0' in octet n"},
+ { 3, "bits 6 to 8(inclusive) are spare and set to '0' in octet n"},
+ { 4, "bits 5 to 8(inclusive) are spare and set to '0' in octet n"},
+ { 5, "bits 4 to 8(inclusive) are spare and set to '0' in octet n"},
+ { 6, "bits 3 to 8(inclusive) are spare and set to '0' in octet n"},
+ { 7, "bits 2 to 8(inclusive) are spare and set to '0' in octet n"},
+ { 0, NULL }
};
const true_false_string tfs_add_ci = { "The MS should add the letters for the Country's Initials and a separator (e.g. a space) to the text string",
@@ -782,120 +781,120 @@ const true_false_string tfs_add_ci = { "The MS should add the letters for the Co
static guint16
de_network_name(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
- guint8 oct;
- guint32 curr_offset;
- const gchar *str;
- guint8 coding_scheme, num_spare_bits;
- guint32 num_text_bits;
- gchar *net_name = NULL;
- proto_item *item;
-
- curr_offset = offset;
-
- oct = tvb_get_guint8(tvb, curr_offset);
-
- proto_tree_add_item(tree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
-
- coding_scheme = (oct & 0x70) >> 4;
- switch (coding_scheme)
- {
- case 0x00: str = "Cell Broadcast data coding scheme, GSM default alphabet, language unspecified, defined in 3GPP TS 23.038"; break;
- case 0x01: str = "UCS2 (16 bit)"; break;
- default:
- str = "Reserved";
- break;
- }
-
- proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_coding_scheme, tvb, curr_offset, 1, oct, "%s", str);
- proto_tree_add_item(tree, hf_gsm_a_dtap_add_ci, tvb, curr_offset, 1, ENC_NA);
-
- num_spare_bits = oct & 0x07;
- item = proto_tree_add_item(tree, hf_gsm_a_dtap_number_of_spare_bits, tvb, curr_offset, 1, ENC_NA);
- curr_offset++;
-
- NO_MORE_DATA_CHECK(len);
- switch(coding_scheme)
- {
- case 0:
- /* Check if there was a reasonable value for number of spare bits in last octet */
- num_text_bits = ((len - 1) << 3) - num_spare_bits;
- if (num_spare_bits && (num_text_bits % 7))
- {
- expert_add_info(pinfo, item, &ei_gsm_a_dtap_text_string_not_multiple_of_7);
- }
- proto_tree_add_ts_23_038_7bits_item(tree, hf_gsm_a_dtap_text_string, tvb, curr_offset<<3, num_text_bits/7);
- break;
- case 1:
- net_name = tvb_get_string_enc(wmem_packet_scope(), tvb, curr_offset, (len - 1), ENC_UCS_2|ENC_BIG_ENDIAN);
- proto_tree_add_string(tree, hf_gsm_a_dtap_text_string, tvb, curr_offset, len - 1, net_name);
- break;
- default:
- proto_tree_add_text(tree,
- tvb, curr_offset, len - 1,
- "Text string encoded according to an unknown Coding Scheme");
- }
-
- return(len);
+ guint8 oct;
+ guint32 curr_offset;
+ const gchar *str;
+ guint8 coding_scheme, num_spare_bits;
+ guint32 num_text_bits;
+ gchar *net_name = NULL;
+ proto_item *item;
+
+ curr_offset = offset;
+
+ oct = tvb_get_guint8(tvb, curr_offset);
+
+ proto_tree_add_item(tree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+
+ coding_scheme = (oct & 0x70) >> 4;
+ switch (coding_scheme)
+ {
+ case 0x00: str = "Cell Broadcast data coding scheme, GSM default alphabet, language unspecified, defined in 3GPP TS 23.038"; break;
+ case 0x01: str = "UCS2 (16 bit)"; break;
+ default:
+ str = "Reserved";
+ break;
+ }
+
+ proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_coding_scheme, tvb, curr_offset, 1, oct, "%s", str);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_add_ci, tvb, curr_offset, 1, ENC_NA);
+
+ num_spare_bits = oct & 0x07;
+ item = proto_tree_add_item(tree, hf_gsm_a_dtap_number_of_spare_bits, tvb, curr_offset, 1, ENC_NA);
+ curr_offset++;
+
+ NO_MORE_DATA_CHECK(len);
+ switch (coding_scheme)
+ {
+ case 0:
+ /* Check if there was a reasonable value for number of spare bits in last octet */
+ num_text_bits = ((len - 1) << 3) - num_spare_bits;
+ if (num_spare_bits && (num_text_bits % 7))
+ {
+ expert_add_info(pinfo, item, &ei_gsm_a_dtap_text_string_not_multiple_of_7);
+ }
+ proto_tree_add_ts_23_038_7bits_item(tree, hf_gsm_a_dtap_text_string, tvb, curr_offset<<3, num_text_bits/7);
+ break;
+ case 1:
+ net_name = tvb_get_string_enc(wmem_packet_scope(), tvb, curr_offset, (len - 1), ENC_UCS_2|ENC_BIG_ENDIAN);
+ proto_tree_add_string(tree, hf_gsm_a_dtap_text_string, tvb, curr_offset, len - 1, net_name);
+ break;
+ default:
+ proto_tree_add_text(tree,
+ tvb, curr_offset, len - 1,
+ "Text string encoded according to an unknown Coding Scheme");
+ }
+
+ return (len);
}
/* 3GPP TS 24.008
* [9] 10.5.3.6 Reject cause
*/
static const range_string gsm_a_dtap_rej_cause_vals[] = {
- { 0x02, 0x02, "IMSI unknown in HLR"},
- { 0x03, 0x03, "Illegal MS"},
- { 0x04, 0x04, "IMSI unknown in VLR"},
- { 0x05, 0x05, "IMEI not accepted"},
- { 0x06, 0x06, "Illegal ME"},
- { 0x0b, 0x0b, "PLMN not allowed"},
- { 0x0c, 0x0c, "Location Area not allowed"},
- { 0x0d, 0x0d, "Roaming not allowed in this location area"},
- { 0x0f, 0x0f, "No Suitable Cells In Location Area"},
- { 0x11, 0x11, "Network failure"},
- { 0x14, 0x14, "MAC failure"},
- { 0x15, 0x15, "Synch failure"},
- { 0x16, 0x16, "Congestion"},
- { 0x17, 0x17, "GSM authentication unacceptable"},
- { 0x19, 0x19, "Not authorized for this CSG"},
- { 0x20, 0x20, "Service option not supported"},
- { 0x21, 0x21, "Requested service option not subscribed"},
- { 0x22, 0x22, "Service option temporarily out of order"},
- { 0x26, 0x26, "Call cannot be identified"},
- { 0x30, 0x3f, "Retry upon entry into a new cell"},
- { 0x5f, 0x5f, "Semantically incorrect message"},
- { 0x60, 0x60, "Invalid mandatory information"},
- { 0x61, 0x61, "Message type non-existent or not implemented"},
- { 0x62, 0x62, "Message type not compatible with the protocol state"},
- { 0x63, 0x63, "Information element non-existent or not implemented"},
- { 0x64, 0x64, "Conditional IE error"},
- { 0x65, 0x65, "Message not compatible with the protocol state"},
- { 0x6f, 0x6f, "Protocol error, unspecified"},
- { 0, 0, NULL }
+ { 0x02, 0x02, "IMSI unknown in HLR"},
+ { 0x03, 0x03, "Illegal MS"},
+ { 0x04, 0x04, "IMSI unknown in VLR"},
+ { 0x05, 0x05, "IMEI not accepted"},
+ { 0x06, 0x06, "Illegal ME"},
+ { 0x0b, 0x0b, "PLMN not allowed"},
+ { 0x0c, 0x0c, "Location Area not allowed"},
+ { 0x0d, 0x0d, "Roaming not allowed in this location area"},
+ { 0x0f, 0x0f, "No Suitable Cells In Location Area"},
+ { 0x11, 0x11, "Network failure"},
+ { 0x14, 0x14, "MAC failure"},
+ { 0x15, 0x15, "Synch failure"},
+ { 0x16, 0x16, "Congestion"},
+ { 0x17, 0x17, "GSM authentication unacceptable"},
+ { 0x19, 0x19, "Not authorized for this CSG"},
+ { 0x20, 0x20, "Service option not supported"},
+ { 0x21, 0x21, "Requested service option not subscribed"},
+ { 0x22, 0x22, "Service option temporarily out of order"},
+ { 0x26, 0x26, "Call cannot be identified"},
+ { 0x30, 0x3f, "Retry upon entry into a new cell"},
+ { 0x5f, 0x5f, "Semantically incorrect message"},
+ { 0x60, 0x60, "Invalid mandatory information"},
+ { 0x61, 0x61, "Message type non-existent or not implemented"},
+ { 0x62, 0x62, "Message type not compatible with the protocol state"},
+ { 0x63, 0x63, "Information element non-existent or not implemented"},
+ { 0x64, 0x64, "Conditional IE error"},
+ { 0x65, 0x65, "Message not compatible with the protocol state"},
+ { 0x6f, 0x6f, "Protocol error, unspecified"},
+ { 0, 0, NULL }
};
guint16
de_rej_cause(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint8 oct;
- const gchar *str;
+ guint8 oct;
+ const gchar *str;
- oct = tvb_get_guint8(tvb, offset);
+ oct = tvb_get_guint8(tvb, offset);
- str = try_rval_to_str(oct, gsm_a_dtap_rej_cause_vals);
- if(!str)
- {
- if(is_uplink == IS_UPLINK_TRUE)
- str = "Protocol error, unspecified";
- else
- str = "Service option temporarily out of order";
- }
+ str = try_rval_to_str(oct, gsm_a_dtap_rej_cause_vals);
+ if (!str)
+ {
+ if (is_uplink == IS_UPLINK_TRUE)
+ str = "Protocol error, unspecified";
+ else
+ str = "Service option temporarily out of order";
+ }
- proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_rej_cause, tvb,
- offset, 1, oct, "%s (%u)", str, oct);
+ proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_rej_cause, tvb,
+ offset, 1, oct, "%s (%u)", str, oct);
- /* no length check possible */
+ /* no length check possible */
- return(1);
+ return (1);
}
/*
@@ -908,34 +907,34 @@ de_rej_cause(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 of
guint16
de_time_zone(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint8 oct;
- guint32 curr_offset;
- char sign;
+ guint8 oct;
+ guint32 curr_offset;
+ char sign;
- curr_offset = offset;
+ curr_offset = offset;
- /* 3GPP TS 23.040 version 6.6.0 Release 6
- * 9.2.3.11 TP-Service-Centre-Time-Stamp (TP-SCTS)
- * :
- * The Time Zone indicates the difference, expressed in quarters of an hour,
- * between the local time and GMT. In the first of the two semi-octets,
- * the first bit (bit 3 of the seventh octet of the TP-Service-Centre-Time-Stamp field)
- * represents the algebraic sign of this difference (0: positive, 1: negative).
- */
+ /* 3GPP TS 23.040 version 6.6.0 Release 6
+ * 9.2.3.11 TP-Service-Centre-Time-Stamp (TP-SCTS)
+ * :
+ * The Time Zone indicates the difference, expressed in quarters of an hour,
+ * between the local time and GMT. In the first of the two semi-octets,
+ * the first bit (bit 3 of the seventh octet of the TP-Service-Centre-Time-Stamp field)
+ * represents the algebraic sign of this difference (0: positive, 1: negative).
+ */
- oct = tvb_get_guint8(tvb, curr_offset);
- sign = (oct & 0x08)?'-':'+';
- oct = (oct >> 4) + (oct & 0x07) * 10;
+ oct = tvb_get_guint8(tvb, curr_offset);
+ sign = (oct & 0x08)?'-':'+';
+ oct = (oct >> 4) + (oct & 0x07) * 10;
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "Timezone: GMT %c %d hours %d minutes",
- sign, oct / 4, oct % 4 * 15);
- curr_offset++;
+ proto_tree_add_text(tree,
+ tvb, curr_offset, 1,
+ "Timezone: GMT %c %d hours %d minutes",
+ sign, oct / 4, oct % 4 * 15);
+ curr_offset++;
- /* no length check possible */
+ /* no length check possible */
- return(curr_offset - offset);
+ return (curr_offset - offset);
}
/*
@@ -944,62 +943,62 @@ de_time_zone(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 of
static guint16
de_time_zone_time(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint8 oct;
- guint32 curr_offset;
- char sign;
- nstime_t tv;
+ guint8 oct;
+ guint32 curr_offset;
+ char sign;
+ nstime_t tv;
struct tm tm;
- curr_offset = offset;
-
- /* "unused" part of structure */
- tm.tm_wday = 0;
- tm.tm_yday = 0;
- tm.tm_isdst = -1;
-
- oct = tvb_get_guint8(tvb, curr_offset);
- tm.tm_year = (oct & 0x0f)*10 + ((oct & 0xf0) >> 4) + 100;
- oct = tvb_get_guint8(tvb, curr_offset+1);
- tm.tm_mon = (oct & 0x0f)*10 + ((oct & 0xf0) >> 4) - 1;
- oct = tvb_get_guint8(tvb, curr_offset+2);
- tm.tm_mday = (oct & 0x0f)*10 + ((oct & 0xf0) >> 4);
- oct = tvb_get_guint8(tvb, curr_offset+3);
- tm.tm_hour = (oct & 0x0f)*10 + ((oct & 0xf0) >> 4);
- oct = tvb_get_guint8(tvb, curr_offset+4);
- tm.tm_min = (oct & 0x0f)*10 + ((oct & 0xf0) >> 4);
- oct = tvb_get_guint8(tvb, curr_offset+5);
- tm.tm_sec = (oct & 0x0f)*10 + ((oct & 0xf0) >> 4);
-
- tv.secs = mktime(&tm);
- tv.nsecs = 0;
-
- proto_tree_add_time_format_value(tree, hf_gsm_a_dtap_time_zone_time, tvb, curr_offset, 6,
- &tv, "%s", abs_time_to_str(wmem_packet_scope(), &tv, ABSOLUTE_TIME_LOCAL, FALSE));
- curr_offset += 6;
-
- /* 3GPP TS 23.040 version 6.6.0 Release 6
- * 9.2.3.11 TP-Service-Centre-Time-Stamp (TP-SCTS)
- * :
- * The Time Zone indicates the difference, expressed in quarters of an hour,
- * between the local time and GMT. In the first of the two semi-octets,
- * the first bit (bit 3 of the seventh octet of the TP-Service-Centre-Time-Stamp field)
- * represents the algebraic sign of this difference (0: positive, 1: negative).
- */
-
- oct = tvb_get_guint8(tvb, curr_offset);
- sign = (oct & 0x08)?'-':'+';
- oct = (oct >> 4) + (oct & 0x07) * 10;
-
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "Timezone: GMT %c %d hours %d minutes",
- sign, oct / 4, oct % 4 * 15);
-
- curr_offset++;
-
- /* no length check possible */
-
- return(curr_offset - offset);
+ curr_offset = offset;
+
+ /* "unused" part of structure */
+ tm.tm_wday = 0;
+ tm.tm_yday = 0;
+ tm.tm_isdst = -1;
+
+ oct = tvb_get_guint8(tvb, curr_offset);
+ tm.tm_year = (oct & 0x0f)*10 + ((oct & 0xf0) >> 4) + 100;
+ oct = tvb_get_guint8(tvb, curr_offset+1);
+ tm.tm_mon = (oct & 0x0f)*10 + ((oct & 0xf0) >> 4) - 1;
+ oct = tvb_get_guint8(tvb, curr_offset+2);
+ tm.tm_mday = (oct & 0x0f)*10 + ((oct & 0xf0) >> 4);
+ oct = tvb_get_guint8(tvb, curr_offset+3);
+ tm.tm_hour = (oct & 0x0f)*10 + ((oct & 0xf0) >> 4);
+ oct = tvb_get_guint8(tvb, curr_offset+4);
+ tm.tm_min = (oct & 0x0f)*10 + ((oct & 0xf0) >> 4);
+ oct = tvb_get_guint8(tvb, curr_offset+5);
+ tm.tm_sec = (oct & 0x0f)*10 + ((oct & 0xf0) >> 4);
+
+ tv.secs = mktime(&tm);
+ tv.nsecs = 0;
+
+ proto_tree_add_time_format_value(tree, hf_gsm_a_dtap_time_zone_time, tvb, curr_offset, 6,
+ &tv, "%s", abs_time_to_str(wmem_packet_scope(), &tv, ABSOLUTE_TIME_LOCAL, FALSE));
+ curr_offset += 6;
+
+ /* 3GPP TS 23.040 version 6.6.0 Release 6
+ * 9.2.3.11 TP-Service-Centre-Time-Stamp (TP-SCTS)
+ * :
+ * The Time Zone indicates the difference, expressed in quarters of an hour,
+ * between the local time and GMT. In the first of the two semi-octets,
+ * the first bit (bit 3 of the seventh octet of the TP-Service-Centre-Time-Stamp field)
+ * represents the algebraic sign of this difference (0: positive, 1: negative).
+ */
+
+ oct = tvb_get_guint8(tvb, curr_offset);
+ sign = (oct & 0x08)?'-':'+';
+ oct = (oct >> 4) + (oct & 0x07) * 10;
+
+ proto_tree_add_text(tree,
+ tvb, curr_offset, 1,
+ "Timezone: GMT %c %d hours %d minutes",
+ sign, oct / 4, oct % 4 * 15);
+
+ curr_offset++;
+
+ /* no length check possible */
+
+ return (curr_offset - offset);
}
/*
* 10.5.3.10 CTS permission
@@ -1012,49 +1011,51 @@ de_time_zone_time(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint
static guint16
de_lsa_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
+ guint32 curr_offset;
- curr_offset = offset;
+ curr_offset = offset;
- if (len == 0){
- proto_tree_add_text(tree,tvb, curr_offset, len,"LSA ID not included");
- }else{
- proto_tree_add_item(tree, hf_gsm_a_dtap_lsa_id, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
- }
+ if (len == 0) {
+ proto_tree_add_text(tree,tvb, curr_offset, len,"LSA ID not included");
+ }
+ else
+ {
+ proto_tree_add_item(tree, hf_gsm_a_dtap_lsa_id, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
+ }
- curr_offset += len;
+ curr_offset += len;
- EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
+ EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
- return(curr_offset - offset);
+ return (curr_offset - offset);
}
/*
* [3] 10.5.3.12 Daylight Saving Time
*/
static const value_string gsm_a_dtap_dst_adjustment_vals[] = {
- { 0, "No adjustment for Daylight Saving Time"},
- { 1, "+1 hour adjustment for Daylight Saving Time"},
- { 2, "+2 hours adjustment for Daylight Saving Time"},
- { 3, "Reserved"},
- { 0, NULL }
+ { 0, "No adjustment for Daylight Saving Time"},
+ { 1, "+1 hour adjustment for Daylight Saving Time"},
+ { 2, "+2 hours adjustment for Daylight Saving Time"},
+ { 3, "Reserved"},
+ { 0, NULL }
};
static guint16
de_day_saving_time(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
+ guint32 curr_offset;
- curr_offset = offset;
+ curr_offset = offset;
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, curr_offset<<3, 6, ENC_BIG_ENDIAN);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, curr_offset<<3, 6, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_gsm_a_dtap_dst_adjustment, tvb, curr_offset, 1, ENC_NA);
- curr_offset++;
+ proto_tree_add_item(tree, hf_gsm_a_dtap_dst_adjustment, tvb, curr_offset, 1, ENC_NA);
+ curr_offset++;
- EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
+ EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
- return(curr_offset - offset);
+ return (curr_offset - offset);
}
/*
@@ -1063,159 +1064,159 @@ de_day_saving_time(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guin
static guint16
de_emerg_num_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
- guint8 en_len, oct, i;
- guint8 count;
- guint8 *poctets;
- proto_tree *subtree;
- proto_item *item;
- gboolean malformed_number;
-
- curr_offset = offset;
-
- count = 1;
- while ((curr_offset - offset) < len){
- /* Length of 1st Emergency Number information note 1) octet 3
- * NOTE 1: The length contains the number of octets used to encode the
- * Emergency Service Category Value and the Number digits.
- */
- en_len = tvb_get_guint8(tvb, curr_offset);
-
- item = proto_tree_add_uint(tree, hf_gsm_a_dtap_emergency_number_information,
- tvb, curr_offset, en_len + 1, count);
- subtree = proto_item_add_subtree(item, ett_gsm_dtap_elem[DE_EMERGENCY_NUM_LIST]);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_emerg_num_info_length, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
-
- curr_offset++;
- /* 0 0 0 Emergency Service Category Value (see
- * Table 10.5.135d/3GPP TS 24.008
- * Table 10.5.135d/3GPP TS 24.008: Service Category information element
- */
- proto_tree_add_bits_item(subtree, hf_gsm_a_spare_bits, tvb, curr_offset<<3, 3, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_serv_cat_b5, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_serv_cat_b4, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_serv_cat_b3, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_serv_cat_b2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_serv_cat_b1, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- curr_offset++;
- en_len--;
-
- poctets = (guint8 *)tvb_memdup(wmem_packet_scope(), tvb, curr_offset, en_len);
-
- my_dgt_tbcd_unpack(a_bigbuf, poctets, en_len, &Dgt_mbcd);
-
- item = proto_tree_add_string_format(subtree, hf_gsm_a_dtap_emergency_bcd_num,
- tvb, curr_offset, en_len,
- a_bigbuf,
- "BCD Digits: %s",
- a_bigbuf);
-
- malformed_number = FALSE;
- for(i = 0; i < en_len - 1; i++)
- {
- oct = poctets[i];
- if (((oct & 0xf0) == 0xf0) || ((oct & 0x0f) == 0x0f))
- {
- malformed_number = TRUE;
- break;
- }
- }
-
- oct = poctets[en_len - 1];
- if ((oct & 0x0f) == 0x0f)
- malformed_number = TRUE;
-
- if(malformed_number)
- expert_add_info(pinfo, item, &ei_gsm_a_dtap_end_mark_unexpected);
-
- curr_offset = curr_offset + en_len;
- count++;
- }
-
- return(len);
+ guint32 curr_offset;
+ guint8 en_len, oct, i;
+ guint8 count;
+ guint8 *poctets;
+ proto_tree *subtree;
+ proto_item *item;
+ gboolean malformed_number;
+
+ curr_offset = offset;
+
+ count = 1;
+ while ((curr_offset - offset) < len) {
+ /* Length of 1st Emergency Number information note 1) octet 3
+ * NOTE 1: The length contains the number of octets used to encode the
+ * Emergency Service Category Value and the Number digits.
+ */
+ en_len = tvb_get_guint8(tvb, curr_offset);
+
+ item = proto_tree_add_uint(tree, hf_gsm_a_dtap_emergency_number_information,
+ tvb, curr_offset, en_len + 1, count);
+ subtree = proto_item_add_subtree(item, ett_gsm_dtap_elem[DE_EMERGENCY_NUM_LIST]);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_emerg_num_info_length, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+
+ curr_offset++;
+ /* 0 0 0 Emergency Service Category Value (see
+ * Table 10.5.135d/3GPP TS 24.008
+ * Table 10.5.135d/3GPP TS 24.008: Service Category information element
+ */
+ proto_tree_add_bits_item(subtree, hf_gsm_a_spare_bits, tvb, curr_offset<<3, 3, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_serv_cat_b5, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_serv_cat_b4, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_serv_cat_b3, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_serv_cat_b2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_serv_cat_b1, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ curr_offset++;
+ en_len--;
+
+ poctets = (guint8 *)tvb_memdup(wmem_packet_scope(), tvb, curr_offset, en_len);
+
+ my_dgt_tbcd_unpack(a_bigbuf, poctets, en_len, &Dgt_mbcd);
+
+ item = proto_tree_add_string_format(subtree, hf_gsm_a_dtap_emergency_bcd_num,
+ tvb, curr_offset, en_len,
+ a_bigbuf,
+ "BCD Digits: %s",
+ a_bigbuf);
+
+ malformed_number = FALSE;
+ for(i = 0; i < en_len - 1; i++)
+ {
+ oct = poctets[i];
+ if (((oct & 0xf0) == 0xf0) || ((oct & 0x0f) == 0x0f))
+ {
+ malformed_number = TRUE;
+ break;
+ }
+ }
+
+ oct = poctets[en_len - 1];
+ if ((oct & 0x0f) == 0x0f)
+ malformed_number = TRUE;
+
+ if (malformed_number)
+ expert_add_info(pinfo, item, &ei_gsm_a_dtap_end_mark_unexpected);
+
+ curr_offset = curr_offset + en_len;
+ count++;
+ }
+
+ return (len);
}
/*
* 10.5.3.14 Additional update parameters
*/
static const true_false_string gsm_a_dtap_csmo_value = {
- "CS fallback mobile originating call",
- "No additional information"
+ "CS fallback mobile originating call",
+ "No additional information"
};
static const true_false_string gsm_a_dtap_csmt_value = {
- "CS fallback mobile terminating call",
- "No additional information"
+ "CS fallback mobile terminating call",
+ "No additional information"
};
static guint16
de_add_upd_params(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
+ guint32 curr_offset;
- curr_offset = offset;
+ curr_offset = offset;
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+4, 2, ENC_BIG_ENDIAN);
- proto_tree_add_bits_item(tree, hf_gsm_a_dtap_csmo, tvb, (curr_offset<<3)+6, 1, ENC_BIG_ENDIAN);
- proto_tree_add_bits_item(tree, hf_gsm_a_dtap_csmt, tvb, (curr_offset<<3)+7, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+4, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_csmo, tvb, (curr_offset<<3)+6, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_csmt, tvb, (curr_offset<<3)+7, 1, ENC_BIG_ENDIAN);
- return(len);
+ return (len);
}
/*
* 10.5.3.15 MM Timer
*/
static const value_string gsm_a_dtap_mm_timer_unit_vals[] = {
- { 0x00, "value is incremented in multiples of 2 seconds" },
- { 0x01, "value is incremented in multiples of 1 minute" },
- { 0x02, "value is incremented in multiples of decihours" },
- { 0x07, "value indicates that the timer is deactivated" },
- { 0, NULL }
+ { 0x00, "value is incremented in multiples of 2 seconds" },
+ { 0x01, "value is incremented in multiples of 1 minute" },
+ { 0x02, "value is incremented in multiples of decihours" },
+ { 0x07, "value indicates that the timer is deactivated" },
+ { 0, NULL }
};
static guint16
de_mm_timer(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint8 oct;
- guint16 val;
- const gchar *str;
- proto_tree *subtree;
- proto_item *item = NULL;
-
- oct = tvb_get_guint8(tvb, offset);
- val = oct&0x1f;
-
- switch (oct>>5)
- {
- case 0:
- str = "sec"; val*=2;
- break;
- case 1:
- str = "min";
- break;
- case 2:
- str = "min"; val*=6;
- break;
- case 7:
- str = "";
- item = proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_mm_timer, tvb, offset, 1,
- oct, "timer is deactivated");
- break;
- default:
- str = "min";
- break;
- }
-
- if (item == NULL) {
- item = proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_mm_timer, tvb, offset, 1, val,
- "%u %s", val, str);
- }
-
- subtree = proto_item_add_subtree(item, ett_mm_timer);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_mm_timer_unit, tvb, offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_mm_timer_value, tvb, offset, 1, ENC_BIG_ENDIAN);
-
- return (1);
+ guint8 oct;
+ guint16 val;
+ const gchar *str;
+ proto_tree *subtree;
+ proto_item *item = NULL;
+
+ oct = tvb_get_guint8(tvb, offset);
+ val = oct&0x1f;
+
+ switch (oct>>5)
+ {
+ case 0:
+ str = "sec"; val*=2;
+ break;
+ case 1:
+ str = "min";
+ break;
+ case 2:
+ str = "min"; val*=6;
+ break;
+ case 7:
+ str = "";
+ item = proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_mm_timer, tvb, offset, 1,
+ oct, "timer is deactivated");
+ break;
+ default:
+ str = "min";
+ break;
+ }
+
+ if (item == NULL) {
+ item = proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_mm_timer, tvb, offset, 1, val,
+ "%u %s", val, str);
+ }
+
+ subtree = proto_item_add_subtree(item, ett_mm_timer);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_mm_timer_unit, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_mm_timer_value, tvb, offset, 1, ENC_BIG_ENDIAN);
+
+ return (1);
}
/*
@@ -1223,38 +1224,38 @@ de_mm_timer(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 off
*/
static const value_string gsm_a_dtap_hold_auxilary_state_vals[] = {
- { 0x00, "Idle" },
- { 0x01, "Hold request" },
- { 0x02, "Call held" },
- { 0x03, "Retrieve request" },
- { 0, NULL }
+ { 0x00, "Idle" },
+ { 0x01, "Hold request" },
+ { 0x02, "Call held" },
+ { 0x03, "Retrieve request" },
+ { 0, NULL }
};
static const value_string gsm_a_dtap_multi_party_auxilary_state_vals[] = {
- { 0x00, "Idle" },
- { 0x01, "MPTY request" },
- { 0x02, "Call in MPTY" },
- { 0x03, "Split request" },
- { 0, NULL }
+ { 0x00, "Idle" },
+ { 0x01, "MPTY request" },
+ { 0x02, "Call in MPTY" },
+ { 0x03, "Split request" },
+ { 0, NULL }
};
static guint16
de_aux_states(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
+ guint32 curr_offset;
- curr_offset = offset;
+ curr_offset = offset;
- proto_tree_add_item(tree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+1, 3, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_gsm_a_dtap_hold_auxiliary_state, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_item(tree, hf_gsm_a_dtap_multi_party_auxiliary_state, tvb, curr_offset, 1, ENC_NA);
- curr_offset++;
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+1, 3, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_hold_auxiliary_state, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_multi_party_auxiliary_state, tvb, curr_offset, 1, ENC_NA);
+ curr_offset++;
- EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
+ EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
- return(curr_offset - offset);
+ return (curr_offset - offset);
}
/*
* 10.5.4.4a Backup bearer capability
@@ -1265,23 +1266,23 @@ de_aux_states(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 o
/* Speech version indication (octet(s) 3a etc.) Bits 4 3 2 1 */
static const value_string gsm_a_dtap_speech_vers_ind_values[] = {
- { 0x0, "GSM full rate speech version 1(GSM FR)" },
- { 0x1, "GSM half rate speech version 1(GSM HR)" },
- { 0x2, "GSM full rate speech version 2(GSM EFR)" },
- { 0x3, "Speech version tbd" },
- { 0x4, "GSM full rate speech version 3(FR AMR)" },
- { 0x5, "GSM half rate speech version 3(HR AMR)" },
- { 0x6, "GSM full rate speech version 4(OFR AMR-WB)" },
- { 0x7, "GSM half rate speech version 4(OHR AMR-WB)" },
- { 0x8, "GSM full rate speech version 5(FR AMR-WB)" },
- { 0x9, "Speech version tbd" },
- { 0xa, "Speech version tbd" },
- { 0xb, "GSM half rate speech version 6(OHR AMR)" },
- { 0xc, "Speech version tbd" },
- { 0xd, "Speech version tbd" },
- { 0xe, "Speech version tbd" },
- { 0xf, "No speech version supported for GERAN" },
- { 0, NULL }
+ { 0x0, "GSM full rate speech version 1(GSM FR)" },
+ { 0x1, "GSM half rate speech version 1(GSM HR)" },
+ { 0x2, "GSM full rate speech version 2(GSM EFR)" },
+ { 0x3, "Speech version tbd" },
+ { 0x4, "GSM full rate speech version 3(FR AMR)" },
+ { 0x5, "GSM half rate speech version 3(HR AMR)" },
+ { 0x6, "GSM full rate speech version 4(OFR AMR-WB)" },
+ { 0x7, "GSM half rate speech version 4(OHR AMR-WB)" },
+ { 0x8, "GSM full rate speech version 5(FR AMR-WB)" },
+ { 0x9, "Speech version tbd" },
+ { 0xa, "Speech version tbd" },
+ { 0xb, "GSM half rate speech version 6(OHR AMR)" },
+ { 0xc, "Speech version tbd" },
+ { 0xd, "Speech version tbd" },
+ { 0xe, "Speech version tbd" },
+ { 0xf, "No speech version supported for GERAN" },
+ { 0, NULL }
};
/* All other values have the meaning "speech version tbd" and shall be ignored
* when received.
@@ -1290,191 +1291,191 @@ static const value_string gsm_a_dtap_speech_vers_ind_values[] = {
* Information transfer capability (octet 3) Bits 3 2 1
*/
static const value_string gsm_a_dtap_itc_values[] = {
- { 0x0, "Speech" },
- { 0x1, "Unrestricted digital information" },
- { 0x2, "3.1 kHz audio, ex PLMN" },
- { 0x3, "Facsimile group 3" },
- { 0x5, "Other ITC (See Octet 5a)" },
- { 0x7, "Reserved,(In Network alternate speech/facsimile group 3)" },
- { 0, NULL }
+ { 0x0, "Speech" },
+ { 0x1, "Unrestricted digital information" },
+ { 0x2, "3.1 kHz audio, ex PLMN" },
+ { 0x3, "Facsimile group 3" },
+ { 0x5, "Other ITC (See Octet 5a)" },
+ { 0x7, "Reserved,(In Network alternate speech/facsimile group 3)" },
+ { 0, NULL }
};
static const value_string gsm_a_dtap_structure_vals[] = {
- { 0x0, "Service data unit integrity" },
- { 0x1, "Reserved" },
- { 0x2, "Reserved" },
- { 0x3, "Unstructured" },
- { 0, NULL }
+ { 0x0, "Service data unit integrity" },
+ { 0x1, "Reserved" },
+ { 0x2, "Reserved" },
+ { 0x3, "Unstructured" },
+ { 0, NULL }
};
static const value_string gsm_a_dtap_access_identity_vals[] = {
- { 0x0, "Octet identifier" },
- { 0x1, "Octet identifier" },
- { 0x2, "Octet identifier" },
- { 0x3, "Reserved" },
- { 0, NULL }
+ { 0x0, "Octet identifier" },
+ { 0x1, "Octet identifier" },
+ { 0x2, "Octet identifier" },
+ { 0x3, "Reserved" },
+ { 0, NULL }
};
static const value_string gsm_a_dtap_rate_adaption_vals[] = {
- { 0x0, "No rate adaption" },
- { 0x1, "Rate adaptation according to ITU-T Rec. V.110 and ITU-T Rec. X.30" },
- { 0x2, "Flag stuffing according to ITU-T Rec. X.31" },
- { 0x3, "Other rate adaption (see octet 5a)" },
- { 0, NULL }
+ { 0x0, "No rate adaption" },
+ { 0x1, "Rate adaptation according to ITU-T Rec. V.110 and ITU-T Rec. X.30" },
+ { 0x2, "Flag stuffing according to ITU-T Rec. X.31" },
+ { 0x3, "Other rate adaption (see octet 5a)" },
+ { 0, NULL }
};
static const value_string gsm_a_dtap_signal_access_protocol_vals[] = {
- { 0x0, "Reserved" },
- { 0x1, "Rate adaptation according to ITU-T Rec. V.110 and ITU-T Rec. X.30" },
- { 0x2, "Flag stuffing according to ITU-T Rec. X.31" },
- { 0x3, "Other rate adaption (see octet 5a)" },
- { 0x4, "No rate adaption" },
- { 0x5, "Rate adaptation according to ITU-T Rec. V.110 and ITU-T Rec. X.30" },
- { 0x6, "Flag stuffing according to ITU-T Rec. X.31" },
- { 0x7, "Reserved" },
- { 0, NULL }
+ { 0x0, "Reserved" },
+ { 0x1, "Rate adaptation according to ITU-T Rec. V.110 and ITU-T Rec. X.30" },
+ { 0x2, "Flag stuffing according to ITU-T Rec. X.31" },
+ { 0x3, "Other rate adaption (see octet 5a)" },
+ { 0x4, "No rate adaption" },
+ { 0x5, "Rate adaptation according to ITU-T Rec. V.110 and ITU-T Rec. X.30" },
+ { 0x6, "Flag stuffing according to ITU-T Rec. X.31" },
+ { 0x7, "Reserved" },
+ { 0, NULL }
};
static const value_string gsm_a_dtap_other_itc_vals[] = {
- { 0x0, "Restricted digital information" },
- { 0x1, "Restricted digital information" },
- { 0x2, "Restricted digital information" },
- { 0x3, "Reserved" },
- { 0, NULL }
+ { 0x0, "Restricted digital information" },
+ { 0x1, "Restricted digital information" },
+ { 0x2, "Restricted digital information" },
+ { 0x3, "Reserved" },
+ { 0, NULL }
};
static const value_string gsm_a_dtap_other_rate_adaption_vals[] = {
- { 0x0, "According to ITU-T Rec. V.120" },
- { 0x1, "According to ITU-T Rec. H.223 and ITU-T Rec. H.245" },
- { 0x2, "PIAFS" },
- { 0x3, "Reserved" },
- { 0, NULL }
+ { 0x0, "According to ITU-T Rec. V.120" },
+ { 0x1, "According to ITU-T Rec. H.223 and ITU-T Rec. H.245" },
+ { 0x2, "PIAFS" },
+ { 0x3, "Reserved" },
+ { 0, NULL }
};
static const value_string gsm_a_dtap_user_rate_vals[] = {
- { 0x1, "0.3 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110)" },
- { 0x2, "1.2 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110)" },
- { 0x3, "2.4 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110)" },
- { 0x4, "4.8 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110)" },
- { 0x5, "9.6 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110)" },
- { 0x6, "12.0 kbit/s transparent (non compliance with ITU-T Rec. X.1 and ITU-T Rec. V.110)" },
- { 0x7, "Reserved: was allocated in earlier phases of the protocol" },
- { 0, NULL }
+ { 0x1, "0.3 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110)" },
+ { 0x2, "1.2 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110)" },
+ { 0x3, "2.4 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110)" },
+ { 0x4, "4.8 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110)" },
+ { 0x5, "9.6 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110)" },
+ { 0x6, "12.0 kbit/s transparent (non compliance with ITU-T Rec. X.1 and ITU-T Rec. V.110)" },
+ { 0x7, "Reserved: was allocated in earlier phases of the protocol" },
+ { 0, NULL }
};
static const value_string gsm_a_dtap_v110_x30_rate_adaptation_vals[] = {
- { 0x0, "Reserved" },
- { 0x1, "Reserved" },
- { 0x2, "8 kbit/s" },
- { 0x3, "16 kbit/s" },
- { 0, NULL }
+ { 0x0, "Reserved" },
+ { 0x1, "Reserved" },
+ { 0x2, "8 kbit/s" },
+ { 0x3, "16 kbit/s" },
+ { 0, NULL }
};
static const value_string gsm_a_dtap_parity_info_vals[] = {
- { 0x0, "Odd" },
- { 0x1, "Reserved" },
- { 0x2, "Even" },
- { 0x3, "None" },
- { 0x4, "Forced to 0" },
- { 0x5, "Forced to 1" },
- { 0x6, "Reserved" },
- { 0x7, "Reserved" },
- { 0, NULL }
+ { 0x0, "Odd" },
+ { 0x1, "Reserved" },
+ { 0x2, "Even" },
+ { 0x3, "None" },
+ { 0x4, "Forced to 0" },
+ { 0x5, "Forced to 1" },
+ { 0x6, "Reserved" },
+ { 0x7, "Reserved" },
+ { 0, NULL }
};
static const value_string gsm_a_dtap_connection_element_vals[] = {
- { 0x0, "Transparent" },
- { 0x1, "Non transparent (RLP)" },
- { 0x2, "Both, transparent preferred" },
- { 0x3, "Both, non transparent preferred" },
- { 0, NULL }
+ { 0x0, "Transparent" },
+ { 0x1, "Non transparent (RLP)" },
+ { 0x2, "Both, transparent preferred" },
+ { 0x3, "Both, non transparent preferred" },
+ { 0, NULL }
};
static const value_string gsm_a_dtap_modem_type_vals[] = {
- { 0x0, "None" },
- { 0x1, "According to ITU-T Rec. V.21" },
- { 0x2, "According to ITU-T Rec. V.22" },
- { 0x3, "According to ITU-T Rec. V.22 bis" },
- { 0x4, "Reserved: was allocated in earlier phases of the protocol" },
- { 0x5, "According to ITU-T Rec. V.26 ter" },
- { 0x6, "According to ITU-T Rec. V.32" },
- { 0x7, "Modem for undefined interface" },
- { 0x8, "Autobauding type 1" },
- { 0, NULL }
+ { 0x0, "None" },
+ { 0x1, "According to ITU-T Rec. V.21" },
+ { 0x2, "According to ITU-T Rec. V.22" },
+ { 0x3, "According to ITU-T Rec. V.22 bis" },
+ { 0x4, "Reserved: was allocated in earlier phases of the protocol" },
+ { 0x5, "According to ITU-T Rec. V.26 ter" },
+ { 0x6, "According to ITU-T Rec. V.32" },
+ { 0x7, "Modem for undefined interface" },
+ { 0x8, "Autobauding type 1" },
+ { 0, NULL }
};
static const value_string gsm_a_dtap_other_modem_type_vals[] = {
- { 0x0, "No other modem type specified in this field" },
- { 0x1, "Reserved" },
- { 0x2, "According to ITU-T Rec. V.34" },
- { 0x3, "Reserved" },
- { 0, NULL }
+ { 0x0, "No other modem type specified in this field" },
+ { 0x1, "Reserved" },
+ { 0x2, "According to ITU-T Rec. V.34" },
+ { 0x3, "Reserved" },
+ { 0, NULL }
};
static const value_string gsm_a_dtap_fixed_network_user_rate_vals[] = {
{ 0x00, "Fixed network user rate not applicable/No meaning is associated with this value"},
- { 0x01, "9.6 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110)"},
- { 0x02, "14.4 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110)"},
- { 0x03, "19.2 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110)"},
- { 0x04, "28.8 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110)"},
- { 0x05, "38.4 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110)"},
- { 0x06, "48.0 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110 (synch))"},
- { 0x07, "56.0 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110 (synch) /bit transparent)"},
- { 0x08, "64.0 kbit/s bit transparent"},
- { 0x09, "33.6 kbit/s bit transparent"},
- { 0x0a, "32.0 kbit/s (according to ITU-T Rec. I.460)"},
- { 0x0b, "31.2 kbit/s (according to ITU-T Rec. V.34)"},
- { 0, NULL }
+ { 0x01, "9.6 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110)"},
+ { 0x02, "14.4 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110)"},
+ { 0x03, "19.2 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110)"},
+ { 0x04, "28.8 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110)"},
+ { 0x05, "38.4 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110)"},
+ { 0x06, "48.0 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110 (synch))"},
+ { 0x07, "56.0 kbit/s (according to ITU-T Rec. X.1 and ITU-T Rec. V.110 (synch) /bit transparent)"},
+ { 0x08, "64.0 kbit/s bit transparent"},
+ { 0x09, "33.6 kbit/s bit transparent"},
+ { 0x0a, "32.0 kbit/s (according to ITU-T Rec. I.460)"},
+ { 0x0b, "31.2 kbit/s (according to ITU-T Rec. V.34)"},
+ { 0, NULL }
};
static const value_string gsm_a_dtap_uimi_vals[] = {
- { 0x0, "not allowed/required/applicable" },
- { 0x1, "up to 1 TCH/F allowed/may be requested" },
- { 0x2, "up to 2 TCH/F allowed/may be requested" },
- { 0x3, "up to 3 TCH/F allowed/may be requested" },
- { 0x4, "up to 4 TCH/F allowed/may be requested" },
- { 0x5, "up to 4 TCH/F may be requested" },
- { 0x6, "up to 4 TCH/F may be requested" },
- { 0x7, "up to 4 TCH/F may be requested" },
- { 0, NULL }
+ { 0x0, "not allowed/required/applicable" },
+ { 0x1, "up to 1 TCH/F allowed/may be requested" },
+ { 0x2, "up to 2 TCH/F allowed/may be requested" },
+ { 0x3, "up to 3 TCH/F allowed/may be requested" },
+ { 0x4, "up to 4 TCH/F allowed/may be requested" },
+ { 0x5, "up to 4 TCH/F may be requested" },
+ { 0x6, "up to 4 TCH/F may be requested" },
+ { 0x7, "up to 4 TCH/F may be requested" },
+ { 0, NULL }
};
static const value_string gsm_a_dtap_wanted_air_rate_vals[] = {
- { 0x0, "Air interface user rate not applicable/No meaning associated with this value" },
- { 0x1, "9.6 kbit/s" },
- { 0x2, "14.4 kbit/s" },
- { 0x3, "19.2 kbit/s" },
- { 0x4, "Reserved" },
- { 0x5, "28.8 kbit/s" },
- { 0x6, "38.4 kbit/s" },
- { 0x7, "43.2 kbit/s" },
- { 0x8, "57.6 kbit/s" },
- { 0x9, "interpreted by the network as 38.4 kbit/s in this version of the protocol" },
- { 0xa, "interpreted by the network as 38.4 kbit/s in this version of the protocol" },
- { 0xb, "interpreted by the network as 38.4 kbit/s in this version of the protocol" },
- { 0xc, "interpreted by the network as 38.4 kbit/s in this version of the protocol" },
- { 0xd, "Reserved" },
- { 0xe, "Reserved" },
- { 0xf, "Reserved" },
- { 0, NULL }
+ { 0x0, "Air interface user rate not applicable/No meaning associated with this value" },
+ { 0x1, "9.6 kbit/s" },
+ { 0x2, "14.4 kbit/s" },
+ { 0x3, "19.2 kbit/s" },
+ { 0x4, "Reserved" },
+ { 0x5, "28.8 kbit/s" },
+ { 0x6, "38.4 kbit/s" },
+ { 0x7, "43.2 kbit/s" },
+ { 0x8, "57.6 kbit/s" },
+ { 0x9, "interpreted by the network as 38.4 kbit/s in this version of the protocol" },
+ { 0xa, "interpreted by the network as 38.4 kbit/s in this version of the protocol" },
+ { 0xb, "interpreted by the network as 38.4 kbit/s in this version of the protocol" },
+ { 0xc, "interpreted by the network as 38.4 kbit/s in this version of the protocol" },
+ { 0xd, "Reserved" },
+ { 0xe, "Reserved" },
+ { 0xf, "Reserved" },
+ { 0, NULL }
};
static const value_string gsm_a_dtap_channel_coding_asymmetry_ind_vals[] = {
- { 0x0, "Channel coding symmetry preferred" },
- { 0x1, "Uplink biased channel coding asymmetry is preferred" },
- { 0x2, "Downlink biased channel coding asymmetry is preferred" },
- { 0x3, "Unused, treat as Channel coding symmetry preferred" },
- { 0, NULL }
+ { 0x0, "Channel coding symmetry preferred" },
+ { 0x1, "Uplink biased channel coding asymmetry is preferred" },
+ { 0x2, "Downlink biased channel coding asymmetry is preferred" },
+ { 0x3, "Unused, treat as Channel coding symmetry preferred" },
+ { 0, NULL }
};
static const value_string gsm_a_dtap_user_info_layer2_vals[] = {
- { 0x06, "Reserved: was allocated in earlier phases of the protocol" },
- { 0x08, "According to ISO/IEC 6429, codeset 0 (DC1/DC3)" },
- { 0x09, "Reserved: was allocated but never used in earlier phases of the protocol" },
- { 0x0a, "Videotex profile 1" },
- { 0x0c, "COPnoFlCt (Character oriented Protocol with no Flow Control mechanism)" },
- { 0x0d, "Reserved: was allocated in earlier phases of the protocol" },
- { 0, NULL }
+ { 0x06, "Reserved: was allocated in earlier phases of the protocol" },
+ { 0x08, "According to ISO/IEC 6429, codeset 0 (DC1/DC3)" },
+ { 0x09, "Reserved: was allocated but never used in earlier phases of the protocol" },
+ { 0x0a, "Videotex profile 1" },
+ { 0x0c, "COPnoFlCt (Character oriented Protocol with no Flow Control mechanism)" },
+ { 0x0d, "Reserved: was allocated in earlier phases of the protocol" },
+ { 0, NULL }
};
static const true_false_string tfs_bearer_cap_coding_standard = { "reserved", "GSM standardized coding" };
@@ -1483,7 +1484,7 @@ static const true_false_string tfs_bearer_cap_coding = { "octet used for other e
static const true_false_string tfs_duplex_mode = { "Full", "Half" };
static const true_false_string tfs_bearer_cap_configuration = { "Reserved", "Point-to-point" };
static const true_false_string tfs_nirr = { "Data up to and including 4.8 kb/s, full rate, non-transparent, 6 kb/s radio interface rate is requested",
- "No meaning is associated with this value" };
+ "No meaning is associated with this value" };
static const true_false_string tfs_bearer_cap_establishment = { "Reserved", "Demand" };
static const true_false_string tfs_included_not_included = { "Included", "Not Included" };
static const true_false_string tfs_frame_est_supported_not_supported = { "Supported", "Not supported, only UI frames allowed" };
@@ -1491,485 +1492,485 @@ static const true_false_string tfs_mode_of_operation = { "Protocol sensitive", "
static const true_false_string tfs_log_link_neg = { "Full protocol negotiation", "Default, LLI=256 only" };
static const true_false_string tfs_assignor_assignee = { "Message originator is assignor only", "Message originator is default assignee" };
static const true_false_string tfs_in_out_band = { "Negotiation is done with USER INFORMATION messages on a temporary signalling connection",
- "Negotiation is done in-band using logical link zero" };
+ "Negotiation is done in-band using logical link zero" };
static const true_false_string tfs_asynchronous_synchronous = { "Asynchronous", "Synchronous" };
static const true_false_string tfs_stop_bits = { "2", "1" };
static const true_false_string tfs_negotiation = { "Reserved", "In-band negotiation not possible" };
static const true_false_string tfs_parity_bits = { "8", "7" };
static const true_false_string tfs_nic_on_tx = { "requires to send data with network independent clock",
- "does not require to send data with network independent clock" };
+ "does not require to send data with network independent clock" };
static const true_false_string tfs_nic_on_rx = { "can accept data with network independent clock",
- "cannot accept data with network independent clock" };
+ "cannot accept data with network independent clock" };
guint16
de_bearer_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string, int string_len)
{
- guint8 oct;
- guint8 itc;
- gboolean extended;
- guint32 curr_offset;
- guint32 saved_offset;
- proto_tree *subtree;
- proto_item *item;
- const gchar *str;
-
-#define DE_BC_ITC_SPEECH 0x00
-#define DE_BC_ITC_UDI 0x01
-#define DE_BC_ITC_EX_PLMN 0x02
-#define DE_BC_ITC_FASC_G3 0x03
-#define DE_BC_ITC_OTHER_ITC 0x05
-#define DE_BC_ITC_RSVD_NET 0x07
-
- curr_offset = offset;
-
- oct = tvb_get_guint8(tvb, curr_offset);
-
- /* octet 3 */
-
- /*
- * warning, bearer cap uses extended values that
- * are reversed from other parameters!
- */
- subtree =
- proto_tree_add_subtree(tree,
- tvb, curr_offset, 1,
- ett_bc_oct_3, NULL, "Octet 3");
-
- extended = (oct & 0x80) ? FALSE : TRUE;
- itc = oct & 0x07;
-
- proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
-
- switch (is_uplink)
- {
- case IS_UPLINK_FALSE:
- str = "Spare";
- break;
-
- case IS_UPLINK_TRUE:
- /*
- * depends on Information transfer capability
- */
- switch (itc)
- {
- case DE_BC_ITC_SPEECH:
- if (extended)
- {
- switch ((oct & 0x60) >> 5)
- {
- case 1: str = "MS supports at least full rate speech version 1 but does not support half rate speech version 1"; break;
- case 2: str = "MS supports at least full rate speech version 1 and half rate speech version 1. MS has a greater preference for half rate speech version 1 than for full rate speech version 1"; break;
- case 3: str = "MS supports at least full rate speech version 1 and half rate speech version 1. MS has a greater preference for full rate speech version 1 than for half rate speech version 1"; break;
- default:
- str = "Reserved";
- break;
- }
- }
- else
- {
- switch ((oct & 0x60) >> 5)
- {
- case 1: str = "Full rate support only MS/fullrate speech version 1 supported"; break;
- case 2: str = "Dual rate support MS/half rate speech version 1 preferred, full rate speech version 1 also supported"; break;
- case 3: str = "Dual rate support MS/full rate speech version 1 preferred, half rate speech version 1 also supported"; break;
- default:
- str = "Reserved";
- break;
- }
- }
- break;
-
- default:
- switch ((oct & 0x60) >> 5)
- {
- case 1: str = "Full rate support only MS"; break;
- case 2: str = "Dual rate support MS/half rate preferred"; break;
- case 3: str = "Dual rate support MS/full rate preferred"; break;
- default:
- str = "Reserved";
- break;
- }
- break;
- }
- break;
-
- default:
- str = "(dissect problem)";
- break;
- }
-
- proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_radio_channel_requirement, tvb, curr_offset, 1,
- oct, "%s", str);
-
- proto_tree_add_item(subtree, hf_gsm_a_dtap_bearer_cap_coding_standard, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_transfer_mode, tvb, curr_offset, 1, ENC_NA);
-
- proto_tree_add_item(subtree, hf_gsm_a_dtap_itc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
-
- if (add_string)
- g_snprintf(add_string, string_len, " - (%s)", str);
-
- curr_offset++;
-
- NO_MORE_DATA_CHECK(len);
-
- switch (itc)
- {
- case DE_BC_ITC_SPEECH:
- /* octets 3a */
-
- subtree =
- proto_tree_add_subtree(tree,
- tvb, curr_offset, -1, ett_bc_oct_3a, &item,
- "Octets 3a - Speech Versions");
-
- saved_offset = curr_offset;
-
- do
- {
- oct = tvb_get_guint8(tvb, curr_offset);
-
- extended = (oct & 0x80) ? FALSE : TRUE;
-
- proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_coding, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_bits_item(subtree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+2, 2, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_speech_vers_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- curr_offset++;
- }
- while (extended &&
- ((len - (curr_offset - offset)) > 0));
-
- proto_item_set_len(item, curr_offset - saved_offset);
- break;
-
- default:
- /* octet 4 */
-
- subtree =
- proto_tree_add_subtree(tree,
- tvb, curr_offset, 1,
- ett_bc_oct_4, NULL, "Octet 4");
-
- proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, is_uplink ? hf_gsm_a_dtap_compression_up : hf_gsm_a_dtap_compression,
- tvb, curr_offset, 1, ENC_NA);
-
- proto_tree_add_item(subtree, hf_gsm_a_dtap_structure, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_duplex_mode, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_configuration, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_nirr, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_establishment, tvb, curr_offset, 1, ENC_NA);
- curr_offset++;
-
- NO_MORE_DATA_CHECK(len);
+ guint8 oct;
+ guint8 itc;
+ gboolean extended;
+ guint32 curr_offset;
+ guint32 saved_offset;
+ proto_tree *subtree;
+ proto_item *item;
+ const gchar *str;
+
+#define DE_BC_ITC_SPEECH 0x00
+#define DE_BC_ITC_UDI 0x01
+#define DE_BC_ITC_EX_PLMN 0x02
+#define DE_BC_ITC_FASC_G3 0x03
+#define DE_BC_ITC_OTHER_ITC 0x05
+#define DE_BC_ITC_RSVD_NET 0x07
+
+ curr_offset = offset;
+
+ oct = tvb_get_guint8(tvb, curr_offset);
+
+ /* octet 3 */
+
+ /*
+ * warning, bearer cap uses extended values that
+ * are reversed from other parameters!
+ */
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1,
+ ett_bc_oct_3, NULL, "Octet 3");
+
+ extended = (oct & 0x80) ? FALSE : TRUE;
+ itc = oct & 0x07;
+
+ proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+
+ switch (is_uplink)
+ {
+ case IS_UPLINK_FALSE:
+ str = "Spare";
+ break;
+
+ case IS_UPLINK_TRUE:
+ /*
+ * depends on Information transfer capability
+ */
+ switch (itc)
+ {
+ case DE_BC_ITC_SPEECH:
+ if (extended)
+ {
+ switch ((oct & 0x60) >> 5)
+ {
+ case 1: str = "MS supports at least full rate speech version 1 but does not support half rate speech version 1"; break;
+ case 2: str = "MS supports at least full rate speech version 1 and half rate speech version 1. MS has a greater preference for half rate speech version 1 than for full rate speech version 1"; break;
+ case 3: str = "MS supports at least full rate speech version 1 and half rate speech version 1. MS has a greater preference for full rate speech version 1 than for half rate speech version 1"; break;
+ default:
+ str = "Reserved";
+ break;
+ }
+ }
+ else
+ {
+ switch ((oct & 0x60) >> 5)
+ {
+ case 1: str = "Full rate support only MS/fullrate speech version 1 supported"; break;
+ case 2: str = "Dual rate support MS/half rate speech version 1 preferred, full rate speech version 1 also supported"; break;
+ case 3: str = "Dual rate support MS/full rate speech version 1 preferred, half rate speech version 1 also supported"; break;
+ default:
+ str = "Reserved";
+ break;
+ }
+ }
+ break;
+
+ default:
+ switch ((oct & 0x60) >> 5)
+ {
+ case 1: str = "Full rate support only MS"; break;
+ case 2: str = "Dual rate support MS/half rate preferred"; break;
+ case 3: str = "Dual rate support MS/full rate preferred"; break;
+ default:
+ str = "Reserved";
+ break;
+ }
+ break;
+ }
+ break;
+
+ default:
+ str = "(dissect problem)";
+ break;
+ }
+
+ proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_radio_channel_requirement, tvb, curr_offset, 1,
+ oct, "%s", str);
+
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_bearer_cap_coding_standard, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_transfer_mode, tvb, curr_offset, 1, ENC_NA);
+
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_itc, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+
+ if (add_string)
+ g_snprintf(add_string, string_len, " - (%s)", str);
+
+ curr_offset++;
+
+ NO_MORE_DATA_CHECK(len);
+
+ switch (itc)
+ {
+ case DE_BC_ITC_SPEECH:
+ /* octets 3a */
+
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, -1, ett_bc_oct_3a, &item,
+ "Octets 3a - Speech Versions");
+
+ saved_offset = curr_offset;
+
+ do
+ {
+ oct = tvb_get_guint8(tvb, curr_offset);
+
+ extended = (oct & 0x80) ? FALSE : TRUE;
+
+ proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_coding, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_bits_item(subtree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+2, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_speech_vers_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ curr_offset++;
+ }
+ while (extended &&
+ ((len - (curr_offset - offset)) > 0));
- /* octet 5 */
+ proto_item_set_len(item, curr_offset - saved_offset);
+ break;
- subtree =
- proto_tree_add_subtree(tree,
- tvb, curr_offset, 1,
- ett_bc_oct_5, NULL, "Octet 5");
+ default:
+ /* octet 4 */
- oct = tvb_get_guint8(tvb, curr_offset);
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1,
+ ett_bc_oct_4, NULL, "Octet 4");
- extended = (oct & 0x80) ? FALSE : TRUE;
+ proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, is_uplink ? hf_gsm_a_dtap_compression_up : hf_gsm_a_dtap_compression,
+ tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_access_identity, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_rate_adaption, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_signalling_access_protocol, tvb, curr_offset, 1, ENC_NA);
- curr_offset++;
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_structure, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_duplex_mode, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_configuration, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_nirr, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_establishment, tvb, curr_offset, 1, ENC_NA);
+ curr_offset++;
- NO_MORE_DATA_CHECK(len);
+ NO_MORE_DATA_CHECK(len);
- if (!extended) goto bc_octet_6;
+ /* octet 5 */
- /* octet 5a */
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1,
+ ett_bc_oct_5, NULL, "Octet 5");
- subtree =
- proto_tree_add_subtree(tree,
- tvb, curr_offset, 1,
- ett_bc_oct_5a, NULL, "Octet 5a");
+ oct = tvb_get_guint8(tvb, curr_offset);
- oct = tvb_get_guint8(tvb, curr_offset);
+ extended = (oct & 0x80) ? FALSE : TRUE;
- extended = (oct & 0x80) ? FALSE : TRUE;
+ proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_access_identity, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_rate_adaption, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_signalling_access_protocol, tvb, curr_offset, 1, ENC_NA);
+ curr_offset++;
- proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_other_itc, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_other_rate_adaption, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+5, 3, ENC_BIG_ENDIAN);
- curr_offset++;
+ NO_MORE_DATA_CHECK(len);
- NO_MORE_DATA_CHECK(len);
+ if (!extended) goto bc_octet_6;
- if (!extended) goto bc_octet_6;
+ /* octet 5a */
- /* octet 5b */
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1,
+ ett_bc_oct_5a, NULL, "Octet 5a");
- subtree =
- proto_tree_add_subtree(tree,
- tvb, curr_offset, 1,
- ett_bc_oct_5b, NULL, "Octet 5b");
+ oct = tvb_get_guint8(tvb, curr_offset);
- proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_rate_adaption_header, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_multiple_frame_establishment_support, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_mode_of_operation, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_logical_link_identifier_negotiation, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_assignor_assignee, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_in_out_band, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+7, 1, ENC_BIG_ENDIAN);
+ extended = (oct & 0x80) ? FALSE : TRUE;
- curr_offset++;
+ proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_other_itc, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_other_rate_adaption, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+5, 3, ENC_BIG_ENDIAN);
+ curr_offset++;
- NO_MORE_DATA_CHECK(len);
+ NO_MORE_DATA_CHECK(len);
+
+ if (!extended) goto bc_octet_6;
+
+ /* octet 5b */
+
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1,
+ ett_bc_oct_5b, NULL, "Octet 5b");
+
+ proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_rate_adaption_header, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_multiple_frame_establishment_support, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_mode_of_operation, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_logical_link_identifier_negotiation, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_assignor_assignee, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_in_out_band, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+7, 1, ENC_BIG_ENDIAN);
+
+ curr_offset++;
+
+ NO_MORE_DATA_CHECK(len);
bc_octet_6:
- /* octet 6 */
+ /* octet 6 */
- subtree =
- proto_tree_add_subtree(tree,
- tvb, curr_offset, 1,
- ett_bc_oct_6, NULL, "Octet 6");
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1,
+ ett_bc_oct_6, NULL, "Octet 6");
- oct = tvb_get_guint8(tvb, curr_offset);
+ oct = tvb_get_guint8(tvb, curr_offset);
- extended = (oct & 0x80) ? FALSE : TRUE;
+ extended = (oct & 0x80) ? FALSE : TRUE;
- proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_layer_1_identity, tvb, curr_offset, 1, oct,
- "%s", ((oct & 0x60) == 0x20) ? "Octet identifier" : "Reserved");
+ proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_layer_1_identity, tvb, curr_offset, 1, oct,
+ "%s", ((oct & 0x60) == 0x20) ? "Octet identifier" : "Reserved");
- proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_user_information_layer_1_protocol,
- tvb, curr_offset, 1, oct, "%s",
- (oct & 0x1e) ? "Reserved" : "Default layer 1 protocol");
+ proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_user_information_layer_1_protocol,
+ tvb, curr_offset, 1, oct, "%s",
+ (oct & 0x1e) ? "Reserved" : "Default layer 1 protocol");
- proto_tree_add_item(subtree, hf_gsm_a_dtap_synchronous, tvb, curr_offset, 1, ENC_NA);
- curr_offset++;
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_synchronous, tvb, curr_offset, 1, ENC_NA);
+ curr_offset++;
- NO_MORE_DATA_CHECK(len);
+ NO_MORE_DATA_CHECK(len);
- if (!extended) goto bc_octet_7;
+ if (!extended) goto bc_octet_7;
- /* octet 6a */
+ /* octet 6a */
- subtree =
- proto_tree_add_subtree(tree,
- tvb, curr_offset, 1,
- ett_bc_oct_6a, NULL, "Octet 6a");
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1,
+ ett_bc_oct_6a, NULL, "Octet 6a");
- oct = tvb_get_guint8(tvb, curr_offset);
+ oct = tvb_get_guint8(tvb, curr_offset);
- extended = (oct & 0x80) ? FALSE : TRUE;
+ extended = (oct & 0x80) ? FALSE : TRUE;
- proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_number_of_stop_bits, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_negotiation, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_number_of_data_bits, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_number_of_stop_bits, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_negotiation, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_number_of_data_bits, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_user_rate,
- tvb, curr_offset, 1, oct, "%s", val_to_str_const(oct & 0xF, gsm_a_dtap_user_rate_vals, "Reserved"));
+ proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_user_rate,
+ tvb, curr_offset, 1, oct, "%s", val_to_str_const(oct & 0xF, gsm_a_dtap_user_rate_vals, "Reserved"));
- curr_offset++;
+ curr_offset++;
- NO_MORE_DATA_CHECK(len);
+ NO_MORE_DATA_CHECK(len);
- if (!extended) goto bc_octet_7;
+ if (!extended) goto bc_octet_7;
- /* octet 6b */
+ /* octet 6b */
- subtree =
- proto_tree_add_subtree(tree,
- tvb, curr_offset, 1,
- ett_bc_oct_6b, NULL, "Octet 6b");
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1,
+ ett_bc_oct_6b, NULL, "Octet 6b");
- oct = tvb_get_guint8(tvb, curr_offset);
+ oct = tvb_get_guint8(tvb, curr_offset);
- extended = (oct & 0x80) ? FALSE : TRUE;
+ extended = (oct & 0x80) ? FALSE : TRUE;
- proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_v110_x30_rate_adaptation, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_nic_on_tx, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_nic_on_rx, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_parity_information, tvb, curr_offset, 1, ENC_NA);
- curr_offset++;
+ proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_v110_x30_rate_adaptation, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_nic_on_tx, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_nic_on_rx, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_parity_information, tvb, curr_offset, 1, ENC_NA);
+ curr_offset++;
- NO_MORE_DATA_CHECK(len);
+ NO_MORE_DATA_CHECK(len);
- if (!extended) goto bc_octet_7;
+ if (!extended) goto bc_octet_7;
- /* octet 6c */
+ /* octet 6c */
- subtree =
- proto_tree_add_subtree(tree,
- tvb, curr_offset, 1,
- ett_bc_oct_6c, NULL, "Octet 6c");
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1,
+ ett_bc_oct_6c, NULL, "Octet 6c");
- oct = tvb_get_guint8(tvb, curr_offset);
+ oct = tvb_get_guint8(tvb, curr_offset);
- extended = (oct & 0x80) ? FALSE : TRUE;
+ extended = (oct & 0x80) ? FALSE : TRUE;
- proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_connection_element, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_modem_type, tvb, curr_offset, 1,
- oct, "%s", val_to_str_const(oct & 0x1f, gsm_a_dtap_modem_type_vals, "Reserved"));
+ proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_connection_element, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_modem_type, tvb, curr_offset, 1,
+ oct, "%s", val_to_str_const(oct & 0x1f, gsm_a_dtap_modem_type_vals, "Reserved"));
- curr_offset++;
+ curr_offset++;
- NO_MORE_DATA_CHECK(len);
+ NO_MORE_DATA_CHECK(len);
- if (!extended) goto bc_octet_7;
+ if (!extended) goto bc_octet_7;
- /* octet 6d */
+ /* octet 6d */
- subtree =
- proto_tree_add_subtree(tree,
- tvb, curr_offset, 1,
- ett_bc_oct_6d, NULL, "Octet 6d");
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1,
+ ett_bc_oct_6d, NULL, "Octet 6d");
- oct = tvb_get_guint8(tvb, curr_offset);
+ oct = tvb_get_guint8(tvb, curr_offset);
- extended = (oct & 0x80) ? FALSE : TRUE;
+ extended = (oct & 0x80) ? FALSE : TRUE;
- proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_other_modem_type, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_fixed_network_user_rate, tvb, curr_offset, 1,
- oct, "%s", val_to_str_const(oct & 0x1f, gsm_a_dtap_fixed_network_user_rate_vals, "Reserved"));
- curr_offset++;
+ proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_other_modem_type, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_fixed_network_user_rate, tvb, curr_offset, 1,
+ oct, "%s", val_to_str_const(oct & 0x1f, gsm_a_dtap_fixed_network_user_rate_vals, "Reserved"));
+ curr_offset++;
- NO_MORE_DATA_CHECK(len);
+ NO_MORE_DATA_CHECK(len);
- if (!extended) goto bc_octet_7;
+ if (!extended) goto bc_octet_7;
- /* octet 6e */
+ /* octet 6e */
- subtree =
- proto_tree_add_subtree(tree,
- tvb, curr_offset, 1,
- ett_bc_oct_6e, NULL, "Octet 6e");
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1,
+ ett_bc_oct_6e, NULL, "Octet 6e");
- oct = tvb_get_guint8(tvb, curr_offset);
+ oct = tvb_get_guint8(tvb, curr_offset);
- extended = (oct & 0x80) ? FALSE : TRUE;
+ extended = (oct & 0x80) ? FALSE : TRUE;
- proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- if (is_uplink == IS_UPLINK_TRUE)
- {
- proto_tree_add_item(subtree, hf_gsm_a_dtap_acceptable_channel_codings_TCH_F14_4, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_acceptable_channel_codings_spare20, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_acceptable_channel_codings_TCH_F9_6, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_acceptable_channel_codings_TCH_F4_8, tvb, curr_offset, 1, ENC_NA);
+ if (is_uplink == IS_UPLINK_TRUE)
+ {
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_acceptable_channel_codings_TCH_F14_4, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_acceptable_channel_codings_spare20, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_acceptable_channel_codings_TCH_F9_6, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_acceptable_channel_codings_TCH_F4_8, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_maximum_number_of_traffic_channels, tvb, curr_offset, 1,
+ proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_maximum_number_of_traffic_channels, tvb, curr_offset, 1,
(oct & 0x07) + 1, "%u TCH", (oct & 0x07) + 1);
- }
- else
- {
- proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_acceptable_channel_codings_spare78, tvb, curr_offset, 1,
+ }
+ else
+ {
+ proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_acceptable_channel_codings_spare78, tvb, curr_offset, 1,
oct, "Spare");
- proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_maximum_number_of_traffic_channels, tvb, curr_offset, 1,
+ proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_maximum_number_of_traffic_channels, tvb, curr_offset, 1,
oct, "Spare");
- }
+ }
- curr_offset++;
+ curr_offset++;
- NO_MORE_DATA_CHECK(len);
+ NO_MORE_DATA_CHECK(len);
- if (!extended) goto bc_octet_7;
+ if (!extended) goto bc_octet_7;
- /* octet 6f */
+ /* octet 6f */
- subtree =
- proto_tree_add_subtree(tree,
- tvb, curr_offset, 1,
- ett_bc_oct_6f, NULL, "Octet 6f");
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1,
+ ett_bc_oct_6f, NULL, "Octet 6f");
- oct = tvb_get_guint8(tvb, curr_offset);
+ oct = tvb_get_guint8(tvb, curr_offset);
- extended = (oct & 0x80) ? FALSE : TRUE;
+ extended = (oct & 0x80) ? FALSE : TRUE;
- proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_uimi, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_uimi, tvb, curr_offset, 1, ENC_NA);
- if (is_uplink == IS_UPLINK_TRUE)
- {
- proto_tree_add_item(subtree, hf_gsm_a_dtap_wanted_air_interface_user_rate, tvb, curr_offset, 1, ENC_NA);
- }
- else
- {
- proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_wanted_air_interface_user_rate, tvb, curr_offset, 1,
+ if (is_uplink == IS_UPLINK_TRUE)
+ {
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_wanted_air_interface_user_rate, tvb, curr_offset, 1, ENC_NA);
+ }
+ else
+ {
+ proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_wanted_air_interface_user_rate, tvb, curr_offset, 1,
oct, "Spare");
- }
+ }
- curr_offset++;
+ curr_offset++;
- NO_MORE_DATA_CHECK(len);
+ NO_MORE_DATA_CHECK(len);
- if (!extended) goto bc_octet_7;
+ if (!extended) goto bc_octet_7;
- /* octet 6g */
+ /* octet 6g */
- subtree =
- proto_tree_add_subtree(tree,
- tvb, curr_offset, 1,
- ett_bc_oct_6g, NULL, "Octet 6g");
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1,
+ ett_bc_oct_6g, NULL, "Octet 6g");
- oct = tvb_get_guint8(tvb, curr_offset);
+ oct = tvb_get_guint8(tvb, curr_offset);
- proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- if (is_uplink == IS_UPLINK_TRUE)
- {
- proto_tree_add_item(subtree, hf_gsm_a_dtap_acceptable_channel_codings_ext_TCH_F28_8, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_acceptable_channel_codings_ext_TCH_F32_0, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_acceptable_channel_codings_ext_TCH_F43_2, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_channel_coding_asymmetry_indication, tvb, curr_offset, 1, ENC_NA);
- }
- else
- {
- proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_edge_channel_codings, tvb, curr_offset, 1, oct, "Spare");
- }
+ if (is_uplink == IS_UPLINK_TRUE)
+ {
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_acceptable_channel_codings_ext_TCH_F28_8, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_acceptable_channel_codings_ext_TCH_F32_0, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_acceptable_channel_codings_ext_TCH_F43_2, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_channel_coding_asymmetry_indication, tvb, curr_offset, 1, ENC_NA);
+ }
+ else
+ {
+ proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_edge_channel_codings, tvb, curr_offset, 1, oct, "Spare");
+ }
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+6, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+6, 2, ENC_BIG_ENDIAN);
- curr_offset++;
+ curr_offset++;
- NO_MORE_DATA_CHECK(len);
+ NO_MORE_DATA_CHECK(len);
bc_octet_7:
- /* octet 7 */
+ /* octet 7 */
- subtree =
- proto_tree_add_subtree(tree,
- tvb, curr_offset, 1,
- ett_bc_oct_7, NULL, "Octet 7");
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1,
+ ett_bc_oct_7, NULL, "Octet 7");
- proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_layer_2_identity, tvb, curr_offset, 1, oct,
- "%s", ((oct & 0x60) == 0x40) ? "Octet identifier" : "Reserved");
+ proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_layer_2_identity, tvb, curr_offset, 1, oct,
+ "%s", ((oct & 0x60) == 0x40) ? "Octet identifier" : "Reserved");
- proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_user_information_layer_2_protocol, tvb, curr_offset, 1,
+ proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_user_information_layer_2_protocol, tvb, curr_offset, 1,
oct, "%s", val_to_str_const(oct & 0x1F, gsm_a_dtap_user_info_layer2_vals, "Reserved"));
- break;
- }
+ break;
+ }
- EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
+ EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
- return(curr_offset - offset);
+ return (curr_offset - offset);
}
guint16
de_bearer_cap_uplink(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len)
{
- is_uplink = IS_UPLINK_TRUE;
- return de_bearer_cap(tvb, tree, pinfo, offset, len, add_string, string_len);
+ is_uplink = IS_UPLINK_TRUE;
+ return de_bearer_cap(tvb, tree, pinfo, offset, len, add_string, string_len);
}
@@ -1977,323 +1978,323 @@ de_bearer_cap_uplink(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3
* [9] 10.5.4.5a Call Control Capabilities
*/
const true_false_string gsm_a_dtap_mcat_value = {
- "The mobile station supports Multimedia CAT during the alerting phase of a mobile originated multimedia call establishment",
- "The mobile station does not support Multimedia CAT"
+ "The mobile station supports Multimedia CAT during the alerting phase of a mobile originated multimedia call establishment",
+ "The mobile station does not support Multimedia CAT"
};
const true_false_string gsm_a_dtap_enicm_value = {
- "The mobile station supports the Enhanced Network-initiated In-Call Modification procedure",
- "The mobile station does not support the Enhanced Network-initiated In-Call Modification procedure"
+ "The mobile station supports the Enhanced Network-initiated In-Call Modification procedure",
+ "The mobile station does not support the Enhanced Network-initiated In-Call Modification procedure"
};
const true_false_string gsm_a_dtap_dtmf_value = {
- "the mobile station supports DTMF as specified in subclause 5.5.7 of TS 24.008",
- "reserved for earlier versions of the protocol"
+ "the mobile station supports DTMF as specified in subclause 5.5.7 of TS 24.008",
+ "reserved for earlier versions of the protocol"
};
static guint16
-de_cc_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_){
- guint8 oct;
- guint32 curr_offset;
+de_cc_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) {
+ guint8 oct;
+ guint32 curr_offset;
- curr_offset = offset;
+ curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
+ oct = tvb_get_guint8(tvb, curr_offset);
if (((oct & 0xf0) >> 4) == 0)
{
- proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_maximum_number_of_supported_bearers, tvb, curr_offset, 1, 0, "1");
+ proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_maximum_number_of_supported_bearers, tvb, curr_offset, 1, 0, "1");
}
else
{
- proto_tree_add_item(tree, hf_gsm_a_dtap_maximum_number_of_supported_bearers, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_maximum_number_of_supported_bearers, tvb, curr_offset, 1, ENC_NA);
}
- proto_tree_add_item(tree, hf_gsm_a_dtap_mcat, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_gsm_a_dtap_enicm, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_gsm_a_dtap_pcp, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_item(tree, hf_gsm_a_dtap_dtmf, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_mcat, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_enicm, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_pcp, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_dtmf, tvb, curr_offset, 1, ENC_NA);
- curr_offset++;
+ curr_offset++;
- NO_MORE_DATA_CHECK(len);
+ NO_MORE_DATA_CHECK(len);
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, curr_offset<<3, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_gsm_a_dtap_max_num_of_speech_bearers, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, curr_offset<<3, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_max_num_of_speech_bearers, tvb, curr_offset, 1, ENC_NA);
- curr_offset++;
+ curr_offset++;
- EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
+ EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
- return(curr_offset - offset);
+ return (curr_offset - offset);
}
/*
* [3] 10.5.4.6 Call state
*/
static const value_string gsm_a_dtap_coding_standard_vals[] = {
- { 0x00, "standardized coding as described in ITU-T Rec. Q.931" },
- { 0x01, "reserved for other international standards" },
- { 0x02, "national standard" },
- { 0x03, "standard defined for the GSM PLMNS as described below" },
- { 0, NULL }
+ { 0x00, "standardized coding as described in ITU-T Rec. Q.931" },
+ { 0x01, "reserved for other international standards" },
+ { 0x02, "national standard" },
+ { 0x03, "standard defined for the GSM PLMNS as described below" },
+ { 0, NULL }
};
static const value_string gsm_a_dtap_call_state_vals[] = {
- { 0x00, "U0/N0 - null" },
- { 0x02, "U0.1/N0.1 - MM connection pending" },
- { 0x22, "U0.2 - CC prompt present / N0.2 - CC connection pending" },
- { 0x23, "U0.3 - Wait for network information / N0.3 - Network answer pending" },
- { 0x24, "U0.4/N0.4 - CC-Establishment present" },
- { 0x25, "U0.5/N0.5 - CC-Establishment confirmed" },
- { 0x26, "U0.6/N0.6 - Recall present" },
- { 0x01, "U1/N1 - call initiated" },
- { 0x03, "U3/N3 - mobile originating call proceeding" },
- { 0x04, "U4/N4 - call delivered" },
- { 0x06, "U6/N6 - call present" },
- { 0x07, "U7/N7 - call received" },
- { 0x08, "U8/N8 - connect request" },
- { 0x09, "U9/N9 - mobile terminating call confirmed" },
- { 0x0a, "U10/N10 - active" },
- { 0x0b, "U11 - disconnect request" },
- { 0x0c, "U12/N12 - disconnect indication" },
- { 0x13, "U19/N19 - release request" },
- { 0x1a, "U26/N26 - mobile originating modify" },
- { 0x1b, "U27/N27 - mobile terminating modify" },
- { 0x1c, "N28 - connect indication" },
- { 0, NULL }
+ { 0x00, "U0/N0 - null" },
+ { 0x02, "U0.1/N0.1 - MM connection pending" },
+ { 0x22, "U0.2 - CC prompt present / N0.2 - CC connection pending" },
+ { 0x23, "U0.3 - Wait for network information / N0.3 - Network answer pending" },
+ { 0x24, "U0.4/N0.4 - CC-Establishment present" },
+ { 0x25, "U0.5/N0.5 - CC-Establishment confirmed" },
+ { 0x26, "U0.6/N0.6 - Recall present" },
+ { 0x01, "U1/N1 - call initiated" },
+ { 0x03, "U3/N3 - mobile originating call proceeding" },
+ { 0x04, "U4/N4 - call delivered" },
+ { 0x06, "U6/N6 - call present" },
+ { 0x07, "U7/N7 - call received" },
+ { 0x08, "U8/N8 - connect request" },
+ { 0x09, "U9/N9 - mobile terminating call confirmed" },
+ { 0x0a, "U10/N10 - active" },
+ { 0x0b, "U11 - disconnect request" },
+ { 0x0c, "U12/N12 - disconnect indication" },
+ { 0x13, "U19/N19 - release request" },
+ { 0x1a, "U26/N26 - mobile originating modify" },
+ { 0x1b, "U27/N27 - mobile terminating modify" },
+ { 0x1c, "N28 - connect indication" },
+ { 0, NULL }
};
static guint16
de_call_state(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint8 oct, coding_standard, call_state;
- proto_tree *subtree;
-
- subtree =
- proto_tree_add_subtree(tree,
- tvb, offset, 1, ett_gsm_dtap_elem[DE_CALL_STATE], NULL,
- val_to_str_ext_const(DE_CALL_STATE, &gsm_dtap_elem_strings_ext, ""));
-
- proto_tree_add_item(subtree, hf_gsm_a_dtap_coding_standard, tvb, offset, 1, ENC_BIG_ENDIAN);
-
- oct = tvb_get_guint8(tvb, offset);
- coding_standard = (oct & 0xc0) >> 6;
- call_state = oct & 0x3f;
-
- switch (coding_standard)
- {
- case 0:
- proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_call_state, tvb,
- offset, 1, call_state, "%s (%u)",
- val_to_str_ext_const(call_state, &q931_call_state_vals_ext, "Reserved"),
- call_state);
- break;
- case 1:
- case 2:
- proto_tree_add_item(subtree, hf_gsm_a_dtap_call_state, tvb, offset, 1, ENC_BIG_ENDIAN);
- break;
- default:
- proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_call_state, tvb,
- offset, 1, call_state, "%s (%u)",
- val_to_str_const(call_state, gsm_a_dtap_call_state_vals, "Reserved"),
- call_state);
- break;
- }
-
- /* no length check possible */
-
- return(1);
+ guint8 oct, coding_standard, call_state;
+ proto_tree *subtree;
+
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, offset, 1, ett_gsm_dtap_elem[DE_CALL_STATE], NULL,
+ val_to_str_ext_const(DE_CALL_STATE, &gsm_dtap_elem_strings_ext, ""));
+
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_coding_standard, tvb, offset, 1, ENC_BIG_ENDIAN);
+
+ oct = tvb_get_guint8(tvb, offset);
+ coding_standard = (oct & 0xc0) >> 6;
+ call_state = oct & 0x3f;
+
+ switch (coding_standard)
+ {
+ case 0:
+ proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_call_state, tvb,
+ offset, 1, call_state, "%s (%u)",
+ val_to_str_ext_const(call_state, &q931_call_state_vals_ext, "Reserved"),
+ call_state);
+ break;
+ case 1:
+ case 2:
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_call_state, tvb, offset, 1, ENC_BIG_ENDIAN);
+ break;
+ default:
+ proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_call_state, tvb,
+ offset, 1, call_state, "%s (%u)",
+ val_to_str_const(call_state, gsm_a_dtap_call_state_vals, "Reserved"),
+ call_state);
+ break;
+ }
+
+ /* no length check possible */
+
+ return (1);
}
/*
* Helper function for BCD address decoding
*/
const value_string gsm_a_dtap_type_of_number_values[] = {
- { 0x00, "unknown" },
- { 0x01, "International Number" },
- { 0x02, "National number" },
- { 0x03, "Network Specific Number" },
- { 0x04, "Dedicated access, short code" },
- { 0x05, "Reserved" },
- { 0x06, "Reserved" },
- { 0x07, "Reserved for extension" },
- { 0, NULL }
+ { 0x00, "unknown" },
+ { 0x01, "International Number" },
+ { 0x02, "National number" },
+ { 0x03, "Network Specific Number" },
+ { 0x04, "Dedicated access, short code" },
+ { 0x05, "Reserved" },
+ { 0x06, "Reserved" },
+ { 0x07, "Reserved for extension" },
+ { 0, NULL }
};
const value_string gsm_a_dtap_numbering_plan_id_values[] = {
- { 0x00, "unknown" },
- { 0x01, "ISDN/Telephony Numbering (ITU-T Rec. E.164 / ITU-T Rec. E.163)" },
- { 0x02, "spare" },
- { 0x03, "Data Numbering (ITU-T Rec. X.121)" },
- { 0x04, "Telex Numbering (ITU-T Rec. F.69)" },
- { 0x08, "National Numbering" },
- { 0x09, "Private Numbering" },
- { 0x0d, "Reserved for CTS (see 3GPP TS 44.056)" },
- { 0x0f, "Reserved for extension" },
- { 0, NULL }
+ { 0x00, "unknown" },
+ { 0x01, "ISDN/Telephony Numbering (ITU-T Rec. E.164 / ITU-T Rec. E.163)" },
+ { 0x02, "spare" },
+ { 0x03, "Data Numbering (ITU-T Rec. X.121)" },
+ { 0x04, "Telex Numbering (ITU-T Rec. F.69)" },
+ { 0x08, "National Numbering" },
+ { 0x09, "Private Numbering" },
+ { 0x0d, "Reserved for CTS (see 3GPP TS 44.056)" },
+ { 0x0f, "Reserved for extension" },
+ { 0, NULL }
};
const value_string gsm_a_dtap_present_ind_values[] = {
- { 0x00, "Presentation allowed" },
- { 0x01, "Presentation restricted" },
- { 0x02, "Number not available due to interworking" },
- { 0x03, "Reserved" },
- { 0, NULL }
+ { 0x00, "Presentation allowed" },
+ { 0x01, "Presentation restricted" },
+ { 0x02, "Number not available due to interworking" },
+ { 0x03, "Reserved" },
+ { 0, NULL }
};
const value_string gsm_a_dtap_screening_ind_values[] = {
- { 0x00, "User-provided, not screened" },
- { 0x01, "User-provided, verified and passed" },
- { 0x02, "User-provided, verified and failed" },
- { 0x03, "Network provided" },
- { 0, NULL }
+ { 0x00, "User-provided, not screened" },
+ { 0x01, "User-provided, verified and passed" },
+ { 0x02, "User-provided, verified and failed" },
+ { 0x03, "Network provided" },
+ { 0, NULL }
};
static guint16
de_bcd_num(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, int header_field, gboolean *address_extracted)
{
- guint8 *poctets;
- guint8 extension, oct;
- guint32 curr_offset, i, num_string_len;
- proto_item *item;
- gboolean malformed_number;
-
- *address_extracted = FALSE;
- curr_offset = offset;
-
- extension = tvb_get_guint8(tvb, curr_offset) & 0x80;
- proto_tree_add_item(tree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_gsm_a_dtap_type_of_number, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_gsm_a_dtap_numbering_plan_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- curr_offset++;
-
- if (!extension)
- {
- proto_tree_add_item(tree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_gsm_a_dtap_present_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+3, 3, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_gsm_a_dtap_screening_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- curr_offset++;
- }
-
- NO_MORE_DATA_CHECK(len);
-
- num_string_len = len - (curr_offset - offset);
- poctets = (guint8 *)tvb_memdup(wmem_packet_scope(), tvb, curr_offset, num_string_len);
-
- *address_extracted = TRUE;
- my_dgt_tbcd_unpack(a_bigbuf, poctets, num_string_len,
- &Dgt_mbcd);
-
- item = proto_tree_add_string_format(tree, header_field,
- tvb, curr_offset, num_string_len,
- a_bigbuf,
- "BCD Digits: %s",
- a_bigbuf);
-
- malformed_number = FALSE;
- for(i = 0; i < num_string_len - 1; i++)
- {
- oct = poctets[i];
- if (((oct & 0xf0) == 0xf0) || ((oct & 0x0f) == 0x0f))
- {
- malformed_number = TRUE;
- break;
- }
- }
-
- oct = poctets[num_string_len - 1];
- if ((oct & 0x0f) == 0x0f)
- malformed_number = TRUE;
-
- if(malformed_number)
- expert_add_info(pinfo, item, &ei_gsm_a_dtap_end_mark_unexpected);
-
- return(len);
+ guint8 *poctets;
+ guint8 extension, oct;
+ guint32 curr_offset, i, num_string_len;
+ proto_item *item;
+ gboolean malformed_number;
+
+ *address_extracted = FALSE;
+ curr_offset = offset;
+
+ extension = tvb_get_guint8(tvb, curr_offset) & 0x80;
+ proto_tree_add_item(tree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_type_of_number, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_numbering_plan_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ curr_offset++;
+
+ if (!extension)
+ {
+ proto_tree_add_item(tree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_present_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+3, 3, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_screening_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ curr_offset++;
+ }
+
+ NO_MORE_DATA_CHECK(len);
+
+ num_string_len = len - (curr_offset - offset);
+ poctets = (guint8 *)tvb_memdup(wmem_packet_scope(), tvb, curr_offset, num_string_len);
+
+ *address_extracted = TRUE;
+ my_dgt_tbcd_unpack(a_bigbuf, poctets, num_string_len,
+ &Dgt_mbcd);
+
+ item = proto_tree_add_string_format(tree, header_field,
+ tvb, curr_offset, num_string_len,
+ a_bigbuf,
+ "BCD Digits: %s",
+ a_bigbuf);
+
+ malformed_number = FALSE;
+ for(i = 0; i < num_string_len - 1; i++)
+ {
+ oct = poctets[i];
+ if (((oct & 0xf0) == 0xf0) || ((oct & 0x0f) == 0x0f))
+ {
+ malformed_number = TRUE;
+ break;
+ }
+ }
+
+ oct = poctets[num_string_len - 1];
+ if ((oct & 0x0f) == 0x0f)
+ malformed_number = TRUE;
+
+ if (malformed_number)
+ expert_add_info(pinfo, item, &ei_gsm_a_dtap_end_mark_unexpected);
+
+ return (len);
}
/*
* Helper function for sub address decoding
*/
const value_string gsm_a_dtap_type_of_sub_addr_values[] = {
- { 0x00, "NSAP (ITU-T Rec. X.213/ISO 8348 AD2)" },
- { 0x02, "User specified" },
- { 0, NULL }
+ { 0x00, "NSAP (ITU-T Rec. X.213/ISO 8348 AD2)" },
+ { 0x02, "User specified" },
+ { 0, NULL }
};
const value_string gsm_a_dtap_odd_even_ind_values[] = {
- { 0x00, "even number of address signals" },
- { 0x01, "odd number of address signals" },
- { 0, NULL }
+ { 0x00, "even number of address signals" },
+ { 0x01, "odd number of address signals" },
+ { 0, NULL }
};
static guint16
de_sub_addr(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gboolean *address_extracted)
{
- guint32 curr_offset, ia5_string_len, i;
- guint8 type_of_sub_addr, afi, dig1, dig2, oct;
- gchar *ia5_string;
- gboolean invalid_ia5_char;
- proto_item *item;
+ guint32 curr_offset, ia5_string_len, i;
+ guint8 type_of_sub_addr, afi, dig1, dig2, oct;
+ gchar *ia5_string;
+ gboolean invalid_ia5_char;
+ proto_item *item;
- curr_offset = offset;
+ curr_offset = offset;
- *address_extracted = FALSE;
- proto_tree_add_item(tree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_gsm_a_dtap_type_of_sub_addr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_gsm_a_dtap_odd_even_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+5, 3, ENC_BIG_ENDIAN);
- type_of_sub_addr = (tvb_get_guint8(tvb, curr_offset) & 0x70) >> 4;
- curr_offset++;
+ *address_extracted = FALSE;
+ proto_tree_add_item(tree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_type_of_sub_addr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_odd_even_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+5, 3, ENC_BIG_ENDIAN);
+ type_of_sub_addr = (tvb_get_guint8(tvb, curr_offset) & 0x70) >> 4;
+ curr_offset++;
- NO_MORE_DATA_CHECK(len);
+ NO_MORE_DATA_CHECK(len);
- if(!type_of_sub_addr)
- {
- afi = tvb_get_guint8(tvb, curr_offset);
- proto_tree_add_item(tree, hf_gsm_a_dtap_afi, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- curr_offset++;
+ if (!type_of_sub_addr)
+ {
+ afi = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_afi, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ curr_offset++;
- NO_MORE_DATA_CHECK(len);
+ NO_MORE_DATA_CHECK(len);
- if (afi == 0x50)
- {
- ia5_string_len = len - (curr_offset - offset);
- ia5_string = (guint8 *)tvb_memdup(wmem_packet_scope(), tvb, curr_offset, ia5_string_len);
+ if (afi == 0x50)
+ {
+ ia5_string_len = len - (curr_offset - offset);
+ ia5_string = (guint8 *)tvb_memdup(wmem_packet_scope(), tvb, curr_offset, ia5_string_len);
- invalid_ia5_char = FALSE;
- for(i = 0; i < ia5_string_len; i++)
- {
- dig1 = (ia5_string[i] & 0xf0) >> 4;
- dig2 = ia5_string[i] & 0x0f;
- oct = (dig1 * 10) + dig2 + 32;
- if (oct > 127)
- invalid_ia5_char = TRUE;
- ia5_string[i] = oct;
+ invalid_ia5_char = FALSE;
+ for(i = 0; i < ia5_string_len; i++)
+ {
+ dig1 = (ia5_string[i] & 0xf0) >> 4;
+ dig2 = ia5_string[i] & 0x0f;
+ oct = (dig1 * 10) + dig2 + 32;
+ if (oct > 127)
+ invalid_ia5_char = TRUE;
+ ia5_string[i] = oct;
- }
+ }
- IA5_7BIT_decode(a_bigbuf, ia5_string, ia5_string_len);
- *address_extracted = TRUE;
+ IA5_7BIT_decode(a_bigbuf, ia5_string, ia5_string_len);
+ *address_extracted = TRUE;
- item = proto_tree_add_text(tree,
- tvb, curr_offset, len - (curr_offset - offset),
- "Subaddress: %s", a_bigbuf);
+ item = proto_tree_add_text(tree,
+ tvb, curr_offset, len - (curr_offset - offset),
+ "Subaddress: %s", a_bigbuf);
- if(invalid_ia5_char)
- expert_add_info(pinfo, item, &ei_gsm_a_dtap_invalid_ia5_character);
+ if (invalid_ia5_char)
+ expert_add_info(pinfo, item, &ei_gsm_a_dtap_invalid_ia5_character);
- return(len);
- }
- }
+ return (len);
+ }
+ }
- proto_tree_add_text(tree,
- tvb, curr_offset, len - (curr_offset - offset),
- "Subaddress information");
+ proto_tree_add_text(tree,
+ tvb, curr_offset, len - (curr_offset - offset),
+ "Subaddress information");
- return(len);
+ return (len);
}
/*
@@ -2302,20 +2303,20 @@ de_sub_addr(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset,
guint16
de_cld_party_bcd_num(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string, int string_len)
{
- gboolean addr_extr;
+ gboolean addr_extr;
- de_bcd_num(tvb, tree, pinfo, offset, len, hf_gsm_a_dtap_cld_party_bcd_num, &addr_extr);
+ de_bcd_num(tvb, tree, pinfo, offset, len, hf_gsm_a_dtap_cld_party_bcd_num, &addr_extr);
- if(addr_extr) {
- if (sccp_assoc && ! sccp_assoc->called_party) {
- sccp_assoc->called_party = wmem_strdup(wmem_file_scope(), a_bigbuf);
- }
+ if (addr_extr) {
+ if (sccp_assoc && ! sccp_assoc->called_party) {
+ sccp_assoc->called_party = wmem_strdup(wmem_file_scope(), a_bigbuf);
+ }
- if (add_string)
- g_snprintf(add_string, string_len, " - (%s)", a_bigbuf);
- }
+ if (add_string)
+ g_snprintf(add_string, string_len, " - (%s)", a_bigbuf);
+ }
- return(len);
+ return (len);
}
/*
@@ -2324,14 +2325,14 @@ de_cld_party_bcd_num(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gu
static guint16
de_cld_party_sub_addr(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
- gboolean addr_extr;
+ gboolean addr_extr;
- de_sub_addr(tvb, tree, pinfo, offset, len, &addr_extr);
+ de_sub_addr(tvb, tree, pinfo, offset, len, &addr_extr);
- if (addr_extr && add_string)
- g_snprintf(add_string, string_len, " - (%s)", a_bigbuf);
+ if (addr_extr && add_string)
+ g_snprintf(add_string, string_len, " - (%s)", a_bigbuf);
- return(len);
+ return (len);
}
/* 3GPP TS 24.008
@@ -2340,14 +2341,14 @@ de_cld_party_sub_addr(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, g
static guint16
de_clg_party_bcd_num(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len)
{
- gboolean addr_extr;
+ gboolean addr_extr;
- de_bcd_num(tvb, tree, pinfo, offset, len, hf_gsm_a_dtap_clg_party_bcd_num, &addr_extr);
+ de_bcd_num(tvb, tree, pinfo, offset, len, hf_gsm_a_dtap_clg_party_bcd_num, &addr_extr);
- if (addr_extr && add_string)
- g_snprintf(add_string, string_len, " - (%s)", a_bigbuf);
+ if (addr_extr && add_string)
+ g_snprintf(add_string, string_len, " - (%s)", a_bigbuf);
- return(len);
+ return (len);
}
/*
@@ -2356,181 +2357,181 @@ de_clg_party_bcd_num(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3
static guint16
de_clg_party_sub_addr(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
- gboolean addr_extr;
+ gboolean addr_extr;
- de_sub_addr(tvb, tree, pinfo, offset, len, &addr_extr);
+ de_sub_addr(tvb, tree, pinfo, offset, len, &addr_extr);
- if (addr_extr && add_string)
- g_snprintf(add_string, string_len, " - (%s)", a_bigbuf);
+ if (addr_extr && add_string)
+ g_snprintf(add_string, string_len, " - (%s)", a_bigbuf);
- return(len);
+ return (len);
}
/*
* [3] 10.5.4.11 Cause
*/
static const value_string gsm_a_dtap_cause_ss_diagnostics_vals[] = {
- { 0x01, "Outgoing calls barred within CUG" },
- { 0x02, "No CUG selected" },
- { 0x03, "Unknown CUG index" },
- { 0x04, "CUG index incompatible with requested basic service" },
- { 0x05, "CUG call failure, unspecified" },
- { 0x06, "CLIR not subscribed" },
- { 0x07, "CCBS possible" },
- { 0x08, "CCBS not possible" },
- { 0, NULL }
+ { 0x01, "Outgoing calls barred within CUG" },
+ { 0x02, "No CUG selected" },
+ { 0x03, "Unknown CUG index" },
+ { 0x04, "CUG index incompatible with requested basic service" },
+ { 0x05, "CUG call failure, unspecified" },
+ { 0x06, "CLIR not subscribed" },
+ { 0x07, "CCBS possible" },
+ { 0x08, "CCBS not possible" },
+ { 0, NULL }
};
static const value_string gsm_a_dtap_de_cause_coding_standard_vals[] = {
- { 0x00, "Coding as specified in ITU-T Rec. Q.931" },
- { 0x01, "Reserved for other international standards" },
- { 0x02, "National standard" },
- { 0x03, "Standard defined for the GSM PLMNS" },
- { 0, NULL }
+ { 0x00, "Coding as specified in ITU-T Rec. Q.931" },
+ { 0x01, "Reserved for other international standards" },
+ { 0x02, "National standard" },
+ { 0x03, "Standard defined for the GSM PLMNS" },
+ { 0, NULL }
};
static guint16
de_cause(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string, int string_len)
{
- guint8 oct;
- guint8 cause;
- guint32 curr_offset;
- guint32 diag_length;
- proto_tree *subtree;
- const gchar *str;
-
- curr_offset = offset;
-
- proto_tree_add_item(tree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_gsm_a_dtap_de_cause_coding_standard, tvb, curr_offset, 1, ENC_NA);
-
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+3, 1, ENC_BIG_ENDIAN);
-
- proto_tree_add_item(tree, hf_gsm_a_dtap_location, tvb, curr_offset, 1, ENC_NA);
- curr_offset++;
-
- oct = tvb_get_guint8(tvb, curr_offset);
-
- if (!(oct & 0x80))
- {
- proto_tree_add_item(tree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_gsm_a_dtap_recommendation, tvb, curr_offset, 1, ENC_NA);
-
- curr_offset++;
-
- oct = tvb_get_guint8(tvb, curr_offset);
- }
-
- proto_tree_add_item(tree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
-
- cause = oct & 0x7f;
- switch (cause)
- {
- case 1: str = "Unassigned (unallocated) number"; break;
- case 3: str = "No route to destination"; break;
- case 6: str = "Channel unacceptable"; break;
- case 8: str = "Operator determined barring"; break;
- case 16: str = "Normal call clearing"; break;
- case 17: str = "User busy"; break;
- case 18: str = "No user responding"; break;
- case 19: str = "User alerting, no answer"; break;
- case 21: str = "Call rejected"; break;
- case 22: str = "Call rejected due to feature at the destination"; break;
- case 24: str = "Number changed"; break;
- case 25: str = "Pre-emption"; break;
- case 26: str = "Non selected user clearing"; break;
- case 27: str = "Destination out of order"; break;
- case 28: str = "Invalid number format (incomplete number)"; break;
- case 29: str = "Facility rejected"; break;
- case 30: str = "Response to STATUS ENQUIRY"; break;
- case 31: str = "Normal, unspecified"; break;
- case 34: str = "No circuit/channel available"; break;
- case 38: str = "Network out of order"; break;
- case 41: str = "Temporary failure"; break;
- case 42: str = "Switching equipment congestion"; break;
- case 43: str = "Access information discarded"; break;
- case 44: str = "requested circuit/channel not available"; break;
- case 47: str = "Resources unavailable, unspecified"; break;
- case 49: str = "Quality of service unavailable"; break;
- case 50: str = "Requested facility not subscribed"; break;
- case 55: str = "Incoming calls barred within the CUG"; break;
- case 57: str = "Bearer capability not authorized"; break;
- case 58: str = "Bearer capability not presently available"; break;
- case 63: str = "Service or option not available, unspecified"; break;
- case 65: str = "Bearer service not implemented"; break;
- case 68: str = "ACM equal to or greater than ACMmax"; break;
- case 69: str = "Requested facility not implemented"; break;
- case 70: str = "Only restricted digital information bearer capability is available"; break;
- case 79: str = "Service or option not implemented, unspecified"; break;
- case 81: str = "Invalid transaction identifier value"; break;
- case 87: str = "User not member of CUG"; break;
- case 88: str = "Incompatible destination"; break;
- case 91: str = "Invalid transit network selection"; break;
- case 95: str = "Semantically incorrect message"; break;
- case 96: str = "Invalid mandatory information"; break;
- case 97: str = "Message type non-existent or not implemented"; break;
- case 98: str = "Message type not compatible with protocol state"; break;
- case 99: str = "Information element non-existent or not implemented"; break;
- case 100: str = "Conditional IE error"; break;
- case 101: str = "Message not compatible with protocol state"; break;
- case 102: str = "Recovery on timer expiry"; break;
- case 111: str = "Protocol error, unspecified"; break;
- case 127: str = "Interworking, unspecified"; break;
- default:
- if (cause <= 31) { str = "Treat as Normal, unspecified"; }
- else if ((cause >= 32) && (cause <= 47)) { str = "Treat as Resources unavailable, unspecified"; }
- else if ((cause >= 48) && (cause <= 63)) { str = "Treat as Service or option not available, unspecified"; }
- else if ((cause >= 64) && (cause <= 79)) { str = "Treat as Service or option not implemented, unspecified"; }
- else if ((cause >= 80) && (cause <= 95)) { str = "Treat as Semantically incorrect message"; }
- else if ((cause >= 96) && (cause <= 111)) { str = "Treat as Protocol error, unspecified"; }
- else { str = "Treat as Interworking, unspecified"; }
- break;
- }
-
- proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_cause,
- tvb, curr_offset, 1, cause,
- "Cause: (%u) %s",
- cause,
- str);
-
- curr_offset++;
-
- if (add_string)
- g_snprintf(add_string, string_len, " - (%u) %s", cause, str);
-
- NO_MORE_DATA_CHECK(len);
-
- subtree = proto_tree_add_subtree(tree, tvb, curr_offset, len - (curr_offset - offset),
- ett_gsm_dtap_elem[DE_CAUSE], NULL, "Diagnostics");
-
- /*
- * Diagnostics for supplementary services may be included in the case of
- * the following cause codes:
- * 17 - User busy
- * 29 - Facility rejected
- * 34 - No circuit/channel available
- * 50 - Requested facility not subscribed
- * 55 - Incoming calls barred within the CUG
- * 69 - Requested facility not implemented
- * 87 - User not member of CUG
- */
- if ((cause == 17) || (cause == 29) || (cause == 34) || (cause == 50) ||
- (cause == 55) || (cause == 69) || (cause == 87))
- {
- proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_cause_ss_diagnostics, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- curr_offset++;
- }
- else
- {
- diag_length = len - (curr_offset - offset);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_data, tvb, curr_offset, diag_length, ENC_NA);
- curr_offset += diag_length;
- }
-
- EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
-
- return(curr_offset - offset);
+ guint8 oct;
+ guint8 cause;
+ guint32 curr_offset;
+ guint32 diag_length;
+ proto_tree *subtree;
+ const gchar *str;
+
+ curr_offset = offset;
+
+ proto_tree_add_item(tree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_de_cause_coding_standard, tvb, curr_offset, 1, ENC_NA);
+
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+3, 1, ENC_BIG_ENDIAN);
+
+ proto_tree_add_item(tree, hf_gsm_a_dtap_location, tvb, curr_offset, 1, ENC_NA);
+ curr_offset++;
+
+ oct = tvb_get_guint8(tvb, curr_offset);
+
+ if (!(oct & 0x80))
+ {
+ proto_tree_add_item(tree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_recommendation, tvb, curr_offset, 1, ENC_NA);
+
+ curr_offset++;
+
+ oct = tvb_get_guint8(tvb, curr_offset);
+ }
+
+ proto_tree_add_item(tree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+
+ cause = oct & 0x7f;
+ switch (cause)
+ {
+ case 1: str = "Unassigned (unallocated) number"; break;
+ case 3: str = "No route to destination"; break;
+ case 6: str = "Channel unacceptable"; break;
+ case 8: str = "Operator determined barring"; break;
+ case 16: str = "Normal call clearing"; break;
+ case 17: str = "User busy"; break;
+ case 18: str = "No user responding"; break;
+ case 19: str = "User alerting, no answer"; break;
+ case 21: str = "Call rejected"; break;
+ case 22: str = "Call rejected due to feature at the destination"; break;
+ case 24: str = "Number changed"; break;
+ case 25: str = "Pre-emption"; break;
+ case 26: str = "Non selected user clearing"; break;
+ case 27: str = "Destination out of order"; break;
+ case 28: str = "Invalid number format (incomplete number)"; break;
+ case 29: str = "Facility rejected"; break;
+ case 30: str = "Response to STATUS ENQUIRY"; break;
+ case 31: str = "Normal, unspecified"; break;
+ case 34: str = "No circuit/channel available"; break;
+ case 38: str = "Network out of order"; break;
+ case 41: str = "Temporary failure"; break;
+ case 42: str = "Switching equipment congestion"; break;
+ case 43: str = "Access information discarded"; break;
+ case 44: str = "requested circuit/channel not available"; break;
+ case 47: str = "Resources unavailable, unspecified"; break;
+ case 49: str = "Quality of service unavailable"; break;
+ case 50: str = "Requested facility not subscribed"; break;
+ case 55: str = "Incoming calls barred within the CUG"; break;
+ case 57: str = "Bearer capability not authorized"; break;
+ case 58: str = "Bearer capability not presently available"; break;
+ case 63: str = "Service or option not available, unspecified"; break;
+ case 65: str = "Bearer service not implemented"; break;
+ case 68: str = "ACM equal to or greater than ACMmax"; break;
+ case 69: str = "Requested facility not implemented"; break;
+ case 70: str = "Only restricted digital information bearer capability is available"; break;
+ case 79: str = "Service or option not implemented, unspecified"; break;
+ case 81: str = "Invalid transaction identifier value"; break;
+ case 87: str = "User not member of CUG"; break;
+ case 88: str = "Incompatible destination"; break;
+ case 91: str = "Invalid transit network selection"; break;
+ case 95: str = "Semantically incorrect message"; break;
+ case 96: str = "Invalid mandatory information"; break;
+ case 97: str = "Message type non-existent or not implemented"; break;
+ case 98: str = "Message type not compatible with protocol state"; break;
+ case 99: str = "Information element non-existent or not implemented"; break;
+ case 100: str = "Conditional IE error"; break;
+ case 101: str = "Message not compatible with protocol state"; break;
+ case 102: str = "Recovery on timer expiry"; break;
+ case 111: str = "Protocol error, unspecified"; break;
+ case 127: str = "Interworking, unspecified"; break;
+ default:
+ if (cause <= 31) { str = "Treat as Normal, unspecified"; }
+ else if ((cause >= 32) && (cause <= 47)) { str = "Treat as Resources unavailable, unspecified"; }
+ else if ((cause >= 48) && (cause <= 63)) { str = "Treat as Service or option not available, unspecified"; }
+ else if ((cause >= 64) && (cause <= 79)) { str = "Treat as Service or option not implemented, unspecified"; }
+ else if ((cause >= 80) && (cause <= 95)) { str = "Treat as Semantically incorrect message"; }
+ else if ((cause >= 96) && (cause <= 111)) { str = "Treat as Protocol error, unspecified"; }
+ else { str = "Treat as Interworking, unspecified"; }
+ break;
+ }
+
+ proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_cause,
+ tvb, curr_offset, 1, cause,
+ "Cause: (%u) %s",
+ cause,
+ str);
+
+ curr_offset++;
+
+ if (add_string)
+ g_snprintf(add_string, string_len, " - (%u) %s", cause, str);
+
+ NO_MORE_DATA_CHECK(len);
+
+ subtree = proto_tree_add_subtree(tree, tvb, curr_offset, len - (curr_offset - offset),
+ ett_gsm_dtap_elem[DE_CAUSE], NULL, "Diagnostics");
+
+ /*
+ * Diagnostics for supplementary services may be included in the case of
+ * the following cause codes:
+ * 17 - User busy
+ * 29 - Facility rejected
+ * 34 - No circuit/channel available
+ * 50 - Requested facility not subscribed
+ * 55 - Incoming calls barred within the CUG
+ * 69 - Requested facility not implemented
+ * 87 - User not member of CUG
+ */
+ if ((cause == 17) || (cause == 29) || (cause == 34) || (cause == 50) ||
+ (cause == 55) || (cause == 69) || (cause == 87))
+ {
+ proto_tree_add_item(subtree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_cause_ss_diagnostics, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ curr_offset++;
+ }
+ else
+ {
+ diag_length = len - (curr_offset - offset);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_data, tvb, curr_offset, diag_length, ENC_NA);
+ curr_offset += diag_length;
+ }
+
+ EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
+
+ return (curr_offset - offset);
}
/*
* 10.5.4.11a CLIR suppression
@@ -2550,14 +2551,14 @@ de_cause(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset
static guint16
de_conn_num(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len)
{
- gboolean addr_extr;
+ gboolean addr_extr;
- de_bcd_num(tvb, tree, pinfo, offset, len, hf_gsm_a_dtap_conn_num, &addr_extr);
+ de_bcd_num(tvb, tree, pinfo, offset, len, hf_gsm_a_dtap_conn_num, &addr_extr);
- if (addr_extr && add_string)
- g_snprintf(add_string, string_len, " - (%s)", a_bigbuf);
+ if (addr_extr && add_string)
+ g_snprintf(add_string, string_len, " - (%s)", a_bigbuf);
- return(len);
+ return (len);
}
/*
@@ -2566,14 +2567,14 @@ de_conn_num(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset,
static guint16
de_conn_sub_addr(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
- gboolean addr_extr;
+ gboolean addr_extr;
- de_sub_addr(tvb, tree, pinfo, offset, len, &addr_extr);
+ de_sub_addr(tvb, tree, pinfo, offset, len, &addr_extr);
- if (addr_extr && add_string)
- g_snprintf(add_string, string_len, " - (%s)", a_bigbuf);
+ if (addr_extr && add_string)
+ g_snprintf(add_string, string_len, " - (%s)", a_bigbuf);
- return(len);
+ return (len);
}
/*
@@ -2583,45 +2584,45 @@ de_conn_sub_addr(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 of
static guint16
de_facility(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint fac_len, gchar *add_string _U_, int string_len _U_)
{
- guint saved_offset;
- gint8 appclass;
- gboolean pc;
- gboolean ind = FALSE;
- guint32 component_len = 0;
- guint32 header_end_offset;
- guint32 header_len;
- asn1_ctx_t asn1_ctx;
- tvbuff_t *SS_tvb = NULL;
- void *save_private_data;
- static gint comp_type_tag;
-
- asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-
- save_private_data= pinfo->private_data;
- saved_offset = offset;
- pinfo->private_data = NULL;
- col_append_str(pinfo->cinfo, COL_PROTOCOL,"/");
- col_set_fence(pinfo->cinfo, COL_PROTOCOL);
- while ( fac_len > (offset - saved_offset)){
-
- /* Get the length of the component there can be more than one component in a facility message */
-
- header_end_offset = get_ber_identifier(tvb, offset, &appclass, &pc, &comp_type_tag);
- header_end_offset = get_ber_length(tvb, header_end_offset, &component_len, &ind);
- header_len = header_end_offset - offset;
- component_len = header_len + component_len;
- /*
- dissect_ROS_Component(FALSE, tvb, offset, &asn1_ctx, tree, hf_ROS_component);
- TODO Call gsm map here
- */
- SS_tvb = tvb_new_subset_length(tvb, offset, component_len);
- col_append_str(pinfo->cinfo, COL_INFO,"(GSM MAP) ");
- col_set_fence(pinfo->cinfo, COL_INFO);
- call_dissector(gsm_map_handle, SS_tvb, pinfo, tree);
- offset = offset + component_len;
- }
- pinfo->private_data = save_private_data;
- return(fac_len);
+ guint saved_offset;
+ gint8 appclass;
+ gboolean pc;
+ gboolean ind = FALSE;
+ guint32 component_len = 0;
+ guint32 header_end_offset;
+ guint32 header_len;
+ asn1_ctx_t asn1_ctx;
+ tvbuff_t *SS_tvb = NULL;
+ void *save_private_data;
+ static gint comp_type_tag;
+
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+
+ save_private_data= pinfo->private_data;
+ saved_offset = offset;
+ pinfo->private_data = NULL;
+ col_append_str(pinfo->cinfo, COL_PROTOCOL,"/");
+ col_set_fence(pinfo->cinfo, COL_PROTOCOL);
+ while (fac_len > (offset - saved_offset)) {
+
+ /* Get the length of the component there can be more than one component in a facility message */
+
+ header_end_offset = get_ber_identifier(tvb, offset, &appclass, &pc, &comp_type_tag);
+ header_end_offset = get_ber_length(tvb, header_end_offset, &component_len, &ind);
+ header_len = header_end_offset - offset;
+ component_len = header_len + component_len;
+ /*
+ dissect_ROS_Component(FALSE, tvb, offset, &asn1_ctx, tree, hf_ROS_component);
+ TODO Call gsm map here
+ */
+ SS_tvb = tvb_new_subset_length(tvb, offset, component_len);
+ col_append_str(pinfo->cinfo, COL_INFO,"(GSM MAP) ");
+ col_set_fence(pinfo->cinfo, COL_INFO);
+ call_dissector(gsm_map_handle, SS_tvb, pinfo, tree);
+ offset = offset + component_len;
+ }
+ pinfo->private_data = save_private_data;
+ return (fac_len);
}
/*
* 10.5.4.16 High layer compatibility
@@ -2629,14 +2630,14 @@ de_facility(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset,
static guint16
de_hlc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
+ guint32 curr_offset;
- curr_offset = offset;
+ curr_offset = offset;
- dissect_q931_high_layer_compat_ie(tvb, offset, len, tree);
+ dissect_q931_high_layer_compat_ie(tvb, offset, len, tree);
- curr_offset = curr_offset + len;
- return(curr_offset - offset);
+ curr_offset = curr_offset + len;
+ return (curr_offset - offset);
}
/*
@@ -2645,31 +2646,31 @@ de_hlc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset,
static guint16
de_keypad_facility(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len _U_, gchar *add_string, int string_len)
{
- guint8 keypad_char;
- guint32 curr_offset;
- proto_item *item;
+ guint8 keypad_char;
+ guint32 curr_offset;
+ proto_item *item;
- curr_offset = offset;
+ curr_offset = offset;
- keypad_char = tvb_get_guint8(tvb, curr_offset) & 0x7f;
+ keypad_char = tvb_get_guint8(tvb, curr_offset) & 0x7f;
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, curr_offset<<3, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, curr_offset<<3, 1, ENC_BIG_ENDIAN);
- item = proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_keypad_information, tvb, curr_offset, 1,
- keypad_char, "%c", keypad_char);
+ item = proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_keypad_information, tvb, curr_offset, 1,
+ keypad_char, "%c", keypad_char);
- if (((keypad_char < '0') || (keypad_char > '9')) &&
- ((keypad_char < 'A') || (keypad_char > 'D')) &&
- (keypad_char != '*') && (keypad_char != '#'))
- expert_add_info(pinfo, item, &ei_gsm_a_dtap_keypad_info_not_dtmf_digit);
- curr_offset++;
+ if (((keypad_char < '0') || (keypad_char > '9')) &&
+ ((keypad_char < 'A') || (keypad_char > 'D')) &&
+ (keypad_char != '*') && (keypad_char != '#'))
+ expert_add_info(pinfo, item, &ei_gsm_a_dtap_keypad_info_not_dtmf_digit);
+ curr_offset++;
- if (add_string)
- g_snprintf(add_string, string_len, " - %c", keypad_char);
+ if (add_string)
+ g_snprintf(add_string, string_len, " - %c", keypad_char);
- /* no length check possible */
+ /* no length check possible */
- return(curr_offset - offset);
+ return (curr_offset - offset);
}
/*
@@ -2678,14 +2679,14 @@ de_keypad_facility(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32
static guint16
de_llc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
+ guint32 curr_offset;
- curr_offset = offset;
+ curr_offset = offset;
- dissect_q931_bearer_capability_ie(tvb, offset, len, tree);
+ dissect_q931_bearer_capability_ie(tvb, offset, len, tree);
- curr_offset = curr_offset + len;
- return(curr_offset - offset);
+ curr_offset = curr_offset + len;
+ return (curr_offset - offset);
}
/*
@@ -2696,109 +2697,109 @@ de_llc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset,
* 10.5.4.20 Notification indicator
*/
static const value_string gsm_a_dtap_notification_description_vals[] = {
- { 0x00, "User suspended" },
- { 0x01, "User resumed" },
- { 0x02, "Bearer change" },
- { 0, NULL }
+ { 0x00, "User suspended" },
+ { 0x01, "User resumed" },
+ { 0x02, "Bearer change" },
+ { 0, NULL }
};
static guint16
de_notif_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- proto_tree_add_item(tree, hf_gsm_a_extension, tvb, offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_gsm_a_dtap_notification_description, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_extension, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_notification_description, tvb, offset, 1, ENC_BIG_ENDIAN);
- return 1;
+ return 1;
}
/*
* [3] 10.5.4.21 Progress indicator
*/
static const value_string gsm_a_dtap_location_vals[] = {
- { 0x00, "User" },
- { 0x01, "Private network serving the local user" },
- { 0x02, "Public network serving the local user" },
- { 0x03, "Transit network" },
- { 0x04, "Public network serving the remote user" },
- { 0x05, "Private network serving the remote user" },
- { 0x07, "International network" },
- { 0x0a, "Network beyond interworking point" },
- { 0, NULL }
+ { 0x00, "User" },
+ { 0x01, "Private network serving the local user" },
+ { 0x02, "Public network serving the local user" },
+ { 0x03, "Transit network" },
+ { 0x04, "Public network serving the remote user" },
+ { 0x05, "Private network serving the remote user" },
+ { 0x07, "International network" },
+ { 0x0a, "Network beyond interworking point" },
+ { 0, NULL }
};
static const value_string gsm_a_dtap_progress_description_vals[] = {
- { 0x01, "Call is not end-to-end PLMN/ISDN, further call progress information may be available in-band" },
- { 0x02, "Destination address in non-PLMN/ISDN" },
- { 0x03, "Origination address in non-PLMN/ISDN" },
- { 0x04, "Call has returned to the PLMN/ISDN" },
- { 0x08, "In-band information or appropriate pattern now available" },
- { 0x09, "In-band multimedia CAT available" },
- { 0x20, "Call is end-to-end PLMN/ISDN" },
- { 0x40, "Queueing" },
- { 0, NULL }
+ { 0x01, "Call is not end-to-end PLMN/ISDN, further call progress information may be available in-band" },
+ { 0x02, "Destination address in non-PLMN/ISDN" },
+ { 0x03, "Origination address in non-PLMN/ISDN" },
+ { 0x04, "Call has returned to the PLMN/ISDN" },
+ { 0x08, "In-band information or appropriate pattern now available" },
+ { 0x09, "In-band multimedia CAT available" },
+ { 0x20, "Call is end-to-end PLMN/ISDN" },
+ { 0x40, "Queueing" },
+ { 0, NULL }
};
static guint16
de_prog_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint8 oct, coding_standard, progress_description;
- guint32 curr_offset;
-
- curr_offset = offset;
-
- oct = tvb_get_guint8(tvb, curr_offset);
- coding_standard = (oct & 0x60) >> 5;
- proto_tree_add_item(tree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_gsm_a_dtap_prog_coding_standard, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset << 3) + 3, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_gsm_a_dtap_location, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- curr_offset++;
-
- oct = tvb_get_guint8(tvb, curr_offset);
- progress_description = oct & 0x7f;
- proto_tree_add_item(tree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
-
- switch (coding_standard)
- {
- case 0:
- proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_progress_description, tvb,
- curr_offset, 1, progress_description, "%s (%u)",
- val_to_str_ext_const(progress_description, &q931_progress_description_vals_ext, "Reserved"),
- progress_description);
- break;
- case 1:
- case 2:
- proto_tree_add_item(tree, hf_gsm_a_dtap_progress_description, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- break;
- default:
- proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_progress_description, tvb,
- curr_offset, 1, progress_description, "%s (%u)",
- val_to_str_const(progress_description, gsm_a_dtap_progress_description_vals, "Unspecific"),
- progress_description);
- break;
- }
- curr_offset++;
-
- EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
-
- return(curr_offset - offset);
+ guint8 oct, coding_standard, progress_description;
+ guint32 curr_offset;
+
+ curr_offset = offset;
+
+ oct = tvb_get_guint8(tvb, curr_offset);
+ coding_standard = (oct & 0x60) >> 5;
+ proto_tree_add_item(tree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_prog_coding_standard, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset << 3) + 3, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_location, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ curr_offset++;
+
+ oct = tvb_get_guint8(tvb, curr_offset);
+ progress_description = oct & 0x7f;
+ proto_tree_add_item(tree, hf_gsm_a_extension, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+
+ switch (coding_standard)
+ {
+ case 0:
+ proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_progress_description, tvb,
+ curr_offset, 1, progress_description, "%s (%u)",
+ val_to_str_ext_const(progress_description, &q931_progress_description_vals_ext, "Reserved"),
+ progress_description);
+ break;
+ case 1:
+ case 2:
+ proto_tree_add_item(tree, hf_gsm_a_dtap_progress_description, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ break;
+ default:
+ proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_progress_description, tvb,
+ curr_offset, 1, progress_description, "%s (%u)",
+ val_to_str_const(progress_description, gsm_a_dtap_progress_description_vals, "Unspecific"),
+ progress_description);
+ break;
+ }
+ curr_offset++;
+
+ EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
+
+ return (curr_offset - offset);
}
/*
* 10.5.4.21a Recall type $(CCBS)$
*/
static const range_string gsm_a_dtap_recall_type_vals[] = {
- { 0x00, 0x00, "CCBS" },
- { 0x01, 0x06, "shall be treated as CCBS (intended for other similar type of Recall)" },
- { 0, 0, NULL }
+ { 0x00, 0x00, "CCBS" },
+ { 0x01, 0x06, "shall be treated as CCBS (intended for other similar type of Recall)" },
+ { 0, 0, NULL }
};
static guint16
de_recall_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (offset<<3), 5, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_gsm_a_dtap_recall_type, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (offset<<3), 5, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_recall_type, tvb, offset, 1, ENC_BIG_ENDIAN);
- return(1);
+ return (1);
}
/*
@@ -2807,14 +2808,14 @@ de_recall_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32
static guint16
de_red_party_bcd_num(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string, int string_len)
{
- gboolean addr_extr;
+ gboolean addr_extr;
- de_bcd_num(tvb, tree, pinfo, offset, len, hf_gsm_a_dtap_red_party_bcd_num, &addr_extr);
+ de_bcd_num(tvb, tree, pinfo, offset, len, hf_gsm_a_dtap_red_party_bcd_num, &addr_extr);
- if (addr_extr && add_string)
- g_snprintf(add_string, string_len, " - (%s)", a_bigbuf);
+ if (addr_extr && add_string)
+ g_snprintf(add_string, string_len, " - (%s)", a_bigbuf);
- return(len);
+ return (len);
}
/*
@@ -2823,43 +2824,43 @@ de_red_party_bcd_num(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3
static guint16
de_red_party_sub_addr(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
- gboolean addr_extr;
+ gboolean addr_extr;
- de_sub_addr(tvb, tree, pinfo, offset, len, &addr_extr);
+ de_sub_addr(tvb, tree, pinfo, offset, len, &addr_extr);
- if (addr_extr && add_string)
- g_snprintf(add_string, string_len, " - (%s)", a_bigbuf);
+ if (addr_extr && add_string)
+ g_snprintf(add_string, string_len, " - (%s)", a_bigbuf);
- return(len);
+ return (len);
}
/*
* [3] 10.5.4.22 Repeat indicator
*/
static const value_string gsm_a_dtap_repeat_indicator_vals[] = {
- { 0x01, "Circular for successive selection 'mode 1 alternate mode 2'" },
- { 0x02, "Support of fallback mode 1 preferred, mode 2 selected if setup of mode 1 fails" },
- { 0x03, "Reserved: was allocated in earlier phases of the protocol" },
- { 0, NULL }
+ { 0x01, "Circular for successive selection 'mode 1 alternate mode 2'" },
+ { 0x02, "Support of fallback mode 1 preferred, mode 2 selected if setup of mode 1 fails" },
+ { 0x03, "Reserved: was allocated in earlier phases of the protocol" },
+ { 0, NULL }
};
static guint16
de_repeat_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint8 oct;
- guint32 curr_offset;
+ guint8 oct;
+ guint32 curr_offset;
- curr_offset = offset;
+ curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
+ oct = tvb_get_guint8(tvb, curr_offset);
- proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_repeat_indicator, tvb, curr_offset, 1, oct,
- "%s", val_to_str_const(oct & 0xF, gsm_a_dtap_repeat_indicator_vals, "Reserved"));
- curr_offset++;
+ proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_repeat_indicator, tvb, curr_offset, 1, oct,
+ "%s", val_to_str_const(oct & 0xF, gsm_a_dtap_repeat_indicator_vals, "Reserved"));
+ curr_offset++;
- /* no length check possible */
+ /* no length check possible */
- return(curr_offset - offset);
+ return (curr_offset - offset);
}
/*
* 10.5.4.22a Reverse call setup direction
@@ -2874,63 +2875,63 @@ dtap_cc_setup(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 o
static guint16
de_setup_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
- dtap_cc_setup(tvb, tree, pinfo, offset, len);
+ dtap_cc_setup(tvb, tree, pinfo, offset, len);
- return (len);
+ return (len);
}
/*
* 10.5.4.23 Signal
*/
static const value_string gsm_a_dtap_signal_value_vals[] = {
- { 0x00, "dial tone on" },
- { 0x01, "ring back tone on" },
- { 0x02, "intercept tone on" },
- { 0x03, "network congestion 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" },
- { 0x4f, "alerting off" },
- { 0, NULL }
+ { 0x00, "dial tone on" },
+ { 0x01, "ring back tone on" },
+ { 0x02, "intercept tone on" },
+ { 0x03, "network congestion 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" },
+ { 0x4f, "alerting off" },
+ { 0, NULL }
};
static guint16
de_signal(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- proto_tree_add_item(tree, hf_gsm_a_dtap_signal_value, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_signal_value, tvb, offset, 1, ENC_BIG_ENDIAN);
- return 1;
+ return 1;
}
/*
* 10.5.4.24 SS Version Indicator
*/
static const value_string gsm_a_dtap_ss_ver_ind_vals[] = {
- { 0x00, "Phase 2 service, ellipsis notation, and phase 2 error handling is supported" },
- { 0x01, "SS-Protocol version 3 is supported, and phase 2 error handling is supported" },
- { 0, NULL }
+ { 0x00, "Phase 2 service, ellipsis notation, and phase 2 error handling is supported" },
+ { 0x01, "SS-Protocol version 3 is supported, and phase 2 error handling is supported" },
+ { 0, NULL }
};
static guint16
de_ss_ver_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
- guint8 oct;
- guint32 curr_offset;
+ guint8 oct;
+ guint32 curr_offset;
- curr_offset = offset;
+ curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
+ oct = tvb_get_guint8(tvb, curr_offset);
- proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_ss_version_indicator, tvb, curr_offset, 1,
- oct, "%s", val_to_str_const(oct, gsm_a_dtap_ss_ver_ind_vals, "Reserved"));
- curr_offset++;
+ proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_ss_version_indicator, tvb, curr_offset, 1,
+ oct, "%s", val_to_str_const(oct, gsm_a_dtap_ss_ver_ind_vals, "Reserved"));
+ curr_offset++;
- EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
+ EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
- return(curr_offset - offset);
+ return (curr_offset - offset);
}
/*
* 10.5.4.25 User-user
@@ -2938,112 +2939,112 @@ de_ss_ver_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 o
/*
User-user protocol discriminator (octet 3)
Bits
-8 7 6 5 4 3 2 1
-0 0 0 0 0 0 0 0 User specific protocol (Note 1)
-0 0 0 0 0 0 0 1 OSI high layer protocols
-0 0 0 0 0 0 1 0 X.244 (Note 2)
-0 0 0 0 0 0 1 1 Reserved for system management convergence function
-0 0 0 0 0 1 0 0 IA5 characters (Note 3)
-0 0 0 0 0 1 1 1 Rec.V.120 rate adaption
-0 0 0 0 1 0 0 0 Q.931 (I.451) user-network call control messages
-
-0 0 0 1 0 0 0 0 Reserved for other network layer or
-through layer 3 protocols
-0 0 1 1 1 1 1 1
-
-0 1 0 0 0 0 0 0
-through National use
-0 1 0 0 1 1 1 0
-0 1 0 0 1 1 1 1 3GPP capability exchange protocol (NOTE 4)
-
-0 1 0 1 0 0 0 0 Reserved for other network
-through layer or layer 3 protocols
-1 1 1 1 1 1 1 0
+8 7 6 5 4 3 2 1
+0 0 0 0 0 0 0 0 User specific protocol (Note 1)
+0 0 0 0 0 0 0 1 OSI high layer protocols
+0 0 0 0 0 0 1 0 X.244 (Note 2)
+0 0 0 0 0 0 1 1 Reserved for system management convergence function
+0 0 0 0 0 1 0 0 IA5 characters (Note 3)
+0 0 0 0 0 1 1 1 Rec.V.120 rate adaption
+0 0 0 0 1 0 0 0 Q.931 (I.451) user-network call control messages
+
+0 0 0 1 0 0 0 0 Reserved for other network layer or
+through layer 3 protocols
+0 0 1 1 1 1 1 1
+
+0 1 0 0 0 0 0 0
+through National use
+0 1 0 0 1 1 1 0
+0 1 0 0 1 1 1 1 3GPP capability exchange protocol (NOTE 4)
+
+0 1 0 1 0 0 0 0 Reserved for other network
+through layer or layer 3 protocols
+1 1 1 1 1 1 1 0
All other values are reserved.
*/
static const range_string gsm_a_dtap_u2u_prot_discr_vals[] = {
- { 0x00, 0x00, "User specific protocol" },
- { 0x01, 0x01, "OSI high layer protocols" },
- { 0x02, 0x02, "X.244" },
- { 0x03, 0x03, "Reserved for system management convergence function" },
- { 0x04, 0x04, "IA5 characters" },
- { 0x07, 0x07, "Rate adaption according to ITU-T Rec. V.120" },
- { 0x08, 0x08, "User-network call control messages according to ITU-T Rec. Q.931" },
- { 0x10, 0x3F, "Reserved for other network layer or layer 3 protocols" },
- { 0x40, 0x4E, "National use" },
- { 0x4F, 0x4F, "3GPP capability exchange protocol" },
- { 0x50, 0xFE, "Reserved for other network layer or layer 3 protocols" },
- { 0, 0, NULL }
+ { 0x00, 0x00, "User specific protocol" },
+ { 0x01, 0x01, "OSI high layer protocols" },
+ { 0x02, 0x02, "X.244" },
+ { 0x03, 0x03, "Reserved for system management convergence function" },
+ { 0x04, 0x04, "IA5 characters" },
+ { 0x07, 0x07, "Rate adaption according to ITU-T Rec. V.120" },
+ { 0x08, 0x08, "User-network call control messages according to ITU-T Rec. Q.931" },
+ { 0x10, 0x3F, "Reserved for other network layer or layer 3 protocols" },
+ { 0x40, 0x4E, "National use" },
+ { 0x4F, 0x4F, "3GPP capability exchange protocol" },
+ { 0x50, 0xFE, "Reserved for other network layer or layer 3 protocols" },
+ { 0, 0, NULL }
};
static guint16
de_u2u(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
- proto_tree *subtree;
+ guint32 curr_offset;
+ proto_tree *subtree;
- curr_offset = offset;
- proto_tree_add_item(tree, hf_gsm_a_dtap_u2u_prot_discr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- curr_offset++;
+ curr_offset = offset;
+ proto_tree_add_item(tree, hf_gsm_a_dtap_u2u_prot_discr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ curr_offset++;
- subtree = proto_tree_add_subtree(tree, tvb, curr_offset, len - 1, ett_gsm_dtap_elem[DE_USER_USER], NULL, "User-user information");
- proto_tree_add_item(subtree, hf_gsm_a_dtap_data, tvb, curr_offset, len - 1, ENC_NA);
+ subtree = proto_tree_add_subtree(tree, tvb, curr_offset, len - 1, ett_gsm_dtap_elem[DE_USER_USER], NULL, "User-user information");
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_data, tvb, curr_offset, len - 1, ENC_NA);
- return(len);
+ return (len);
}
/*
* 10.5.4.26 Alerting Pattern $(NIA)$
*/
static const value_string gsm_a_alerting_pattern_vals[] = {
- { 0x00, "Alerting Pattern 1" },
- { 0x01, "Alerting Pattern 2" },
- { 0x02, "Alerting Pattern 3" },
- { 0x04, "Alerting Pattern 5" },
- { 0x05, "Alerting Pattern 6" },
- { 0x06, "Alerting Pattern 7" },
- { 0x07, "Alerting Pattern 8" },
- { 0x08, "Alerting Pattern 9" },
- { 0, NULL }
+ { 0x00, "Alerting Pattern 1" },
+ { 0x01, "Alerting Pattern 2" },
+ { 0x02, "Alerting Pattern 3" },
+ { 0x04, "Alerting Pattern 5" },
+ { 0x05, "Alerting Pattern 6" },
+ { 0x06, "Alerting Pattern 7" },
+ { 0x07, "Alerting Pattern 8" },
+ { 0x08, "Alerting Pattern 9" },
+ { 0, NULL }
};
static guint16
de_alert_pat(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
+ guint32 curr_offset;
- curr_offset = offset;
+ curr_offset = offset;
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset << 3), 4, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_gsm_a_dtap_alerting_pattern, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- curr_offset++;
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset << 3), 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_alerting_pattern, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ curr_offset++;
- EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
+ EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
- return(len);
+ return (len);
}
/*
* 10.5.4.27 Allowed actions $(CCBS)$
*/
const true_false_string gsm_a_ccbs_activation_value = {
- "Activation of CCBS possible",
- "Activation of CCBS not possible"
+ "Activation of CCBS possible",
+ "Activation of CCBS not possible"
};
static guint16
de_allowed_act(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
+ guint32 curr_offset;
- curr_offset = offset;
+ curr_offset = offset;
- proto_tree_add_item(tree, hf_gsm_a_dtap_ccbs_activation, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset << 3) + 1, 7, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_ccbs_activation, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset << 3) + 1, 7, ENC_BIG_ENDIAN);
- curr_offset++;
+ curr_offset++;
- EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
+ EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
- return(len);
+ return (len);
}
/*
* 10.5.4.28 Stream Identifier
@@ -3051,91 +3052,91 @@ de_allowed_act(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32
static guint16
de_stream_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string, int string_len)
{
- guint32 curr_offset;
- guint8 oct;
+ guint32 curr_offset;
+ guint8 oct;
- curr_offset = offset;
+ curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
- if (oct == 0x00)
- {
- proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_stream_identifier, tvb, curr_offset, 1, oct,
- "No Bearer (%u)", oct);
+ oct = tvb_get_guint8(tvb, curr_offset);
+ if (oct == 0x00)
+ {
+ proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_stream_identifier, tvb, curr_offset, 1, oct,
+ "No Bearer (%u)", oct);
- if (add_string)
- g_snprintf(add_string, string_len, " - (No Bearer)");
- }
- else
- {
- proto_tree_add_item(tree, hf_gsm_a_dtap_stream_identifier, tvb, curr_offset, 1, ENC_NA);
+ if (add_string)
+ g_snprintf(add_string, string_len, " - (No Bearer)");
+ }
+ else
+ {
+ proto_tree_add_item(tree, hf_gsm_a_dtap_stream_identifier, tvb, curr_offset, 1, ENC_NA);
- if (add_string)
- g_snprintf(add_string, string_len, " - (%u)", oct);
- }
+ if (add_string)
+ g_snprintf(add_string, string_len, " - (%u)", oct);
+ }
- curr_offset++;
+ curr_offset++;
- EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
+ EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
- return(len);
+ return (len);
}
/*
* 10.5.4.29 Network Call Control Capabilities
*/
static const true_false_string gsm_a_mcs_value = {
- "This value indicates that the network supports the multicall",
- "This value indicates that the network does not support the multicall"
+ "This value indicates that the network supports the multicall",
+ "This value indicates that the network does not support the multicall"
};
static guint16
de_nw_call_ctrl_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
+ guint32 curr_offset;
- curr_offset = offset;
+ curr_offset = offset;
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset << 3), 7, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_gsm_a_dtap_mcs, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset << 3), 7, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_mcs, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- curr_offset++;
+ curr_offset++;
- EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
+ EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
- return(len);
+ return (len);
}
/*
* 10.5.4.30 Cause of No CLI
*/
static const value_string gsm_a_cause_of_no_cli_values[] = {
- { 0x00, "Unavailable" },
- { 0x01, "Reject by user" },
- { 0x02, "Interaction with other service" },
- { 0x03, "Coin line/payphone" },
- { 0, NULL }
+ { 0x00, "Unavailable" },
+ { 0x01, "Reject by user" },
+ { 0x02, "Interaction with other service" },
+ { 0x03, "Coin line/payphone" },
+ { 0, NULL }
};
static guint16
de_ca_of_no_cli(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string, int string_len)
{
- guint32 curr_offset;
- guint8 oct;
+ guint32 curr_offset;
+ guint8 oct;
- curr_offset = offset;
+ curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
- proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_cause_of_no_cli, tvb, curr_offset, 1, oct,
- "%s (%u)",
- val_to_str_const(oct, gsm_a_cause_of_no_cli_values, "Unavailable"),
- oct);
+ oct = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_cause_of_no_cli, tvb, curr_offset, 1, oct,
+ "%s (%u)",
+ val_to_str_const(oct, gsm_a_cause_of_no_cli_values, "Unavailable"),
+ oct);
- curr_offset++;
+ curr_offset++;
- if (add_string)
- g_snprintf(add_string, string_len, " - (%s)", val_to_str_const(oct, gsm_a_cause_of_no_cli_values, "Unavailable"));
+ if (add_string)
+ g_snprintf(add_string, string_len, " - (%s)", val_to_str_const(oct, gsm_a_cause_of_no_cli_values, "Unavailable"));
- EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
+ EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
- return(len);
+ return (len);
}
/*
* 10.5.4.31 Void
@@ -3151,91 +3152,91 @@ de_ca_of_no_cli(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32
* These values are selected in accordance with [7] (3GPP TS 28.062).
*/
static const value_string gsm_a_dtap_sysid_values[] = {
- { 0x0, "GSM" },
- { 0x4, "UMTS" },
- { 0, NULL }
+ { 0x0, "GSM" },
+ { 0x4, "UMTS" },
+ { 0, NULL }
};
guint16
de_sup_codec_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
- guint8 length;
- proto_tree *subtree;
- guint8 sysid_counter;
-
- curr_offset = offset;
-
- /* System Identification 1 (SysID 1) octet 3
- * SysID indicates the radio access technology for which the subsequent Codec
- * Bitmap indicates the supported codec types.
- * Coding of this Octet is defined in 3GPP TS 26.103
- */
- sysid_counter = 0;
- while (len>(curr_offset-offset)){
- sysid_counter++;
- proto_tree_add_item(tree, hf_gsm_a_dtap_sysid, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- curr_offset++;
- /* Length Of Bitmap for SysID */
- proto_tree_add_item(tree, hf_gsm_a_dtap_bitmap_length, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- length = tvb_get_guint8(tvb,curr_offset);
- curr_offset++;
- if (length > 0)
- {
- subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, length, ett_gsm_dtap_elem[DE_SUP_CODEC_LIST], NULL,
- "Codec Bitmap for SysID %u", sysid_counter);
- /* 6.2 Codec Bitmap
- * The Codec Types are coded in the first and second octet of the Codec List
- * Bitmap as follows:
- * 8 7 6 5 4 3 2 bit 1
- * TDMA UMTS UMTS HR AMR FR AMR GSM EFR GSM HR GSM FR Octet 1
- * EFR AMR 2 AMR
- * bit 16 15 14 13 12 11 10 bit 9
- *(reserved) (reserved)OHR OFR OHR UMTS FR PDC EFR Octet 2
- * AMR-WB AMR-WB AMR AMR-WB AMR-WB
- * A Codec Type is supported, if the corresponding bit is set to "1".
- * All reserved bits shall be set to "0".
- *
- * NOTE: If the Codec Bitmap for a SysID is 1 octet, it is an indication that
- * all codecs of the 2nd octet are not supported.
- * If the Codec Bitmap for a SysID is more than 2 octets, the network shall
- * ignore the additional octet(s) of the bitmap and process the rest of the
- * information element.
- *
- * Right now we are sure that at least the first octet of the bitmap is present
- */
- proto_tree_add_item(subtree, hf_gsm_a_dtap_codec_tdma_efr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_codec_umts_amr_2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_codec_umts_amr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_codec_hr_amr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_codec_fr_amr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_codec_gsm_efr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_codec_gsm_hr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_codec_gsm_fr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- curr_offset++;
- length--;
-
- if (length > 0)
- {
- /*
- * We can proceed with the second octet of the bitmap
- */
- proto_tree_add_bits_item(subtree, hf_gsm_a_spare_bits, tvb, curr_offset << 3, 2, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_codec_ohr_amr_wb, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_codec_ofr_amr_wb, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_codec_ohr_amr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_codec_umts_amr_wb, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_codec_fr_amr_wb, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_codec_pdc_efr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- curr_offset++;
- length--;
- }
- }
-
- curr_offset = curr_offset + length;
- }
-
-
- return(curr_offset-offset);
+ guint32 curr_offset;
+ guint8 length;
+ proto_tree *subtree;
+ guint8 sysid_counter;
+
+ curr_offset = offset;
+
+ /* System Identification 1 (SysID 1) octet 3
+ * SysID indicates the radio access technology for which the subsequent Codec
+ * Bitmap indicates the supported codec types.
+ * Coding of this Octet is defined in 3GPP TS 26.103
+ */
+ sysid_counter = 0;
+ while (len>(curr_offset-offset)) {
+ sysid_counter++;
+ proto_tree_add_item(tree, hf_gsm_a_dtap_sysid, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ curr_offset++;
+ /* Length Of Bitmap for SysID */
+ proto_tree_add_item(tree, hf_gsm_a_dtap_bitmap_length, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ length = tvb_get_guint8(tvb,curr_offset);
+ curr_offset++;
+ if (length > 0)
+ {
+ subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, length, ett_gsm_dtap_elem[DE_SUP_CODEC_LIST], NULL,
+ "Codec Bitmap for SysID %u", sysid_counter);
+ /* 6.2 Codec Bitmap
+ * The Codec Types are coded in the first and second octet of the Codec List
+ * Bitmap as follows:
+ * 8 7 6 5 4 3 2 bit 1
+ * TDMA UMTS UMTS HR AMR FR AMR GSM EFR GSM HR GSM FR Octet 1
+ * EFR AMR 2 AMR
+ * bit 16 15 14 13 12 11 10 bit 9
+ *(reserved) (reserved)OHR OFR OHR UMTS FR PDC EFR Octet 2
+ * AMR-WB AMR-WB AMR AMR-WB AMR-WB
+ * A Codec Type is supported, if the corresponding bit is set to "1".
+ * All reserved bits shall be set to "0".
+ *
+ * NOTE: If the Codec Bitmap for a SysID is 1 octet, it is an indication that
+ * all codecs of the 2nd octet are not supported.
+ * If the Codec Bitmap for a SysID is more than 2 octets, the network shall
+ * ignore the additional octet(s) of the bitmap and process the rest of the
+ * information element.
+ *
+ * Right now we are sure that at least the first octet of the bitmap is present
+ */
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_codec_tdma_efr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_codec_umts_amr_2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_codec_umts_amr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_codec_hr_amr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_codec_fr_amr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_codec_gsm_efr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_codec_gsm_hr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_codec_gsm_fr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ curr_offset++;
+ length--;
+
+ if (length > 0)
+ {
+ /*
+ * We can proceed with the second octet of the bitmap
+ */
+ proto_tree_add_bits_item(subtree, hf_gsm_a_spare_bits, tvb, curr_offset << 3, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_codec_ohr_amr_wb, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_codec_ofr_amr_wb, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_codec_ohr_amr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_codec_umts_amr_wb, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_codec_fr_amr_wb, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_codec_pdc_efr, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ curr_offset++;
+ length--;
+ }
+ }
+
+ curr_offset = curr_offset + length;
+ }
+
+
+ return (curr_offset-offset);
}
/*
* 10.5.4.33 Service category
@@ -3256,21 +3257,21 @@ Bit 8 is spare and set to "0"
guint16
de_serv_cat(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
+ guint32 curr_offset;
- curr_offset = offset;
+ curr_offset = offset;
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, curr_offset<<3, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_gsm_a_dtap_serv_cat_b7, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_gsm_a_dtap_serv_cat_b6, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_gsm_a_dtap_serv_cat_b5, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_gsm_a_dtap_serv_cat_b4, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_gsm_a_dtap_serv_cat_b3, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_gsm_a_dtap_serv_cat_b2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_gsm_a_dtap_serv_cat_b1, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
- curr_offset++;
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, curr_offset<<3, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_serv_cat_b7, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_serv_cat_b6, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_serv_cat_b5, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_serv_cat_b4, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_serv_cat_b3, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_serv_cat_b2, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_serv_cat_b1, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ curr_offset++;
- return len;
+ return len;
}
/*
* 10.5.4.34 Redial
@@ -3286,26 +3287,26 @@ de_serv_cat(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 off
static guint16
de_cp_user_data(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
- tvbuff_t *rp_tvb;
+ guint32 curr_offset;
+ tvbuff_t *rp_tvb;
- curr_offset = offset;
+ curr_offset = offset;
- proto_tree_add_text(tree, tvb, curr_offset, len,
- "RPDU (not displayed)");
+ proto_tree_add_text(tree, tvb, curr_offset, len,
+ "RPDU (not displayed)");
- /*
- * dissect the embedded RP message
- */
- rp_tvb = tvb_new_subset_length(tvb, curr_offset, len);
+ /*
+ * dissect the embedded RP message
+ */
+ rp_tvb = tvb_new_subset_length(tvb, curr_offset, len);
- call_dissector(rp_handle, rp_tvb, pinfo, g_tree);
+ call_dissector(rp_handle, rp_tvb, pinfo, g_tree);
- curr_offset += len;
+ curr_offset += len;
- EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
+ EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
- return(curr_offset - offset);
+ return (curr_offset - offset);
}
/*
@@ -3313,645 +3314,645 @@ de_cp_user_data(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 off
*/
static const value_string gsm_a_dtap_cp_cause_values[] = {
{ 17, "Network failure"},
- { 22, "Congestion"},
- { 81, "Invalid Transaction Identifier value"},
- { 95, "Semantically incorrect message"},
- { 96, "Invalid mandatory information"},
- { 97, "Message type non-existent or not implemented"},
- { 98, "Message not compatible with the short message protocol state"},
- { 99, "Information element non-existent or not implemented"},
- { 111, "Protocol error, unspecified"},
- { 0, NULL }
+ { 22, "Congestion"},
+ { 81, "Invalid Transaction Identifier value"},
+ { 95, "Semantically incorrect message"},
+ { 96, "Invalid mandatory information"},
+ { 97, "Message type non-existent or not implemented"},
+ { 98, "Message not compatible with the short message protocol state"},
+ { 99, "Information element non-existent or not implemented"},
+ { 111, "Protocol error, unspecified"},
+ { 0, NULL }
};
static guint16
de_cp_cause(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string, int string_len)
{
- guint8 oct;
- guint32 curr_offset;
- const gchar *str;
+ guint8 oct;
+ guint32 curr_offset;
+ const gchar *str;
- curr_offset = offset;
+ curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
+ oct = tvb_get_guint8(tvb, curr_offset);
str = val_to_str_const(oct, gsm_a_dtap_cp_cause_values, "Reserved, treat as Protocol error, unspecified");
- proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_cp_cause, tvb, curr_offset, 1,
+ proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_cp_cause, tvb, curr_offset, 1,
oct, "(%u) %s", oct, str);
- curr_offset++;
+ curr_offset++;
- if (add_string)
- g_snprintf(add_string, string_len, " - (%u) %s", oct, str);
+ if (add_string)
+ g_snprintf(add_string, string_len, " - (%u) %s", oct, str);
- /* no length check possible */
+ /* no length check possible */
- return(curr_offset - offset);
+ return (curr_offset - offset);
}
static guint16
de_tp_sub_channel(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
- guchar oct;
- const gchar *str;
-
- curr_offset = offset;
-
- oct = tvb_get_guint8(tvb, curr_offset) & 0x3f;
- if ((oct & 0x38) == 0x38)
- str = "I";
- else if ((oct & 0x38) == 0x18)
- str = "F";
- else if ((oct & 0x38) == 0x10)
- str = "E";
- else if ((oct & 0x38) == 0x08)
- str = "D";
- else if ((oct & 0x3c) == 0x04)
- str = "C";
- else if ((oct & 0x3e) == 0x02)
- str = "B";
- else if ((oct & 0x3e) == 0x00)
- str = "A";
- else
- str = "unknown";
-
- proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_test_loop, tvb, curr_offset, 1,
- oct, "%s", str);
-
- if (oct & 0x01)
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "Only one TCH active or sub-channel 0 of two half rate channels is to be looped");
- else
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "Sub-channel 1 of two half rate channels is to be looped");
-
- curr_offset+= 1;
-
- return(curr_offset - offset);
+ guint32 curr_offset;
+ guchar oct;
+ const gchar *str;
+
+ curr_offset = offset;
+
+ oct = tvb_get_guint8(tvb, curr_offset) & 0x3f;
+ if ((oct & 0x38) == 0x38)
+ str = "I";
+ else if ((oct & 0x38) == 0x18)
+ str = "F";
+ else if ((oct & 0x38) == 0x10)
+ str = "E";
+ else if ((oct & 0x38) == 0x08)
+ str = "D";
+ else if ((oct & 0x3c) == 0x04)
+ str = "C";
+ else if ((oct & 0x3e) == 0x02)
+ str = "B";
+ else if ((oct & 0x3e) == 0x00)
+ str = "A";
+ else
+ str = "unknown";
+
+ proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_test_loop, tvb, curr_offset, 1,
+ oct, "%s", str);
+
+ if (oct & 0x01)
+ proto_tree_add_text(tree,
+ tvb, curr_offset, 1,
+ "Only one TCH active or sub-channel 0 of two half rate channels is to be looped");
+ else
+ proto_tree_add_text(tree,
+ tvb, curr_offset, 1,
+ "Sub-channel 1 of two half rate channels is to be looped");
+
+ curr_offset+= 1;
+
+ return (curr_offset - offset);
}
static guint16
de_tp_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
- guchar oct;
+ guint32 curr_offset;
+ guchar oct;
- curr_offset = offset;
+ curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
+ oct = tvb_get_guint8(tvb, curr_offset);
- if ((oct & 0xF0) == 0x80)
- proto_tree_add_text(tree,tvb, curr_offset, 1, "Acknowledgment element: %d",oct&0x01);
- else
- proto_tree_add_text(tree,tvb, curr_offset, 1, "No acknowledgment element present");
+ if ((oct & 0xF0) == 0x80)
+ proto_tree_add_text(tree,tvb, curr_offset, 1, "Acknowledgment element: %d",oct&0x01);
+ else
+ proto_tree_add_text(tree,tvb, curr_offset, 1, "No acknowledgment element present");
- curr_offset+= 1;
+ curr_offset+= 1;
- return(curr_offset - offset);
+ return (curr_offset - offset);
}
static const value_string gsm_channel_coding_vals[] = {
- { 0x00, "not needed. The Burst-by-Burst loop is activated, type G" },
- { 0x01, "Channel coding needed. Frame erasure is to be signalled, type H" },
- { 0x02, "reserved" },
- { 0x03, "reserved" },
- { 0, NULL }
+ { 0x00, "not needed. The Burst-by-Burst loop is activated, type G" },
+ { 0x01, "Channel coding needed. Frame erasure is to be signalled, type H" },
+ { 0x02, "reserved" },
+ { 0x03, "reserved" },
+ { 0, NULL }
};
static guint16
de_tp_loop_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
- guchar oct;
+ guint32 curr_offset;
+ guchar oct;
- curr_offset = offset;
+ curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
+ oct = tvb_get_guint8(tvb, curr_offset);
proto_tree_add_item(tree, hf_gsm_a_dtap_channel_coding03, tvb, curr_offset, 1, ENC_NA);
- switch (oct & 0x1c)
- {
- case 0x00:
- proto_tree_add_text(tree, tvb, curr_offset, 1, "Multi-slot mechanism 1");
- proto_tree_add_text(tree, tvb, curr_offset, 1, "Timeslot number %d",(oct & 0xe0)>>5);
- break;
- case 0x04:
- proto_tree_add_text(tree, tvb, curr_offset, 1, "Multi-slot mechanism 2");
- break;
- default:
- proto_tree_add_text(tree, tvb, curr_offset, 1, "Loop mechanism reserved (%d)",(oct & 0x1c)>>2);
- break;
- }
+ switch (oct & 0x1c)
+ {
+ case 0x00:
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "Multi-slot mechanism 1");
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "Timeslot number %d",(oct & 0xe0)>>5);
+ break;
+ case 0x04:
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "Multi-slot mechanism 2");
+ break;
+ default:
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "Loop mechanism reserved (%d)",(oct & 0x1c)>>2);
+ break;
+ }
- curr_offset+= 1;
+ curr_offset+= 1;
- return(curr_offset - offset);
+ return (curr_offset - offset);
}
static guint16
de_tp_loop_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
- guchar oct;
+ guint32 curr_offset;
+ guchar oct;
- curr_offset = offset;
+ curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
+ oct = tvb_get_guint8(tvb, curr_offset);
proto_tree_add_item(tree, hf_gsm_a_dtap_channel_coding30, tvb, curr_offset, 1, ENC_NA);
- switch (oct & 0x0e)
- {
- case 0x00:
- proto_tree_add_text(tree, tvb, curr_offset, 1, "Multi-slot mechanism 1");
- break;
- case 0x02:
- proto_tree_add_text(tree, tvb, curr_offset, 1, "Multi-slot mechanism 2");
- break;
- default:
- proto_tree_add_text(tree, tvb, curr_offset, 1, "Loop mechanism reserved (%d)",(oct & 0x0e)>>1);
- break;
- }
+ switch (oct & 0x0e)
+ {
+ case 0x00:
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "Multi-slot mechanism 1");
+ break;
+ case 0x02:
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "Multi-slot mechanism 2");
+ break;
+ default:
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "Loop mechanism reserved (%d)",(oct & 0x0e)>>1);
+ break;
+ }
- if (oct & 0x01)
- proto_tree_add_text(tree, tvb, curr_offset, 1, "Multi-slot TCH loop was not closed due to error");
- else
- proto_tree_add_text(tree, tvb, curr_offset, 1, "Multi-slot TCH loop was closed successfully");
+ if (oct & 0x01)
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "Multi-slot TCH loop was not closed due to error");
+ else
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "Multi-slot TCH loop was closed successfully");
- curr_offset+= 1;
+ curr_offset+= 1;
- return(curr_offset - offset);
+ return (curr_offset - offset);
}
static const value_string gsm_tp_tested_device_vals[] = {
- { 0x00, "Normal operation (no tested device via DAI)" },
- { 0x01, "Test of speech decoder / DTX functions (downlink)" },
- { 0x02, "Test of speech encoder / DTX functions (uplink)" },
- { 0x03, "Test of acoustic devices and A/D & D/A" },
- { 0, NULL }
+ { 0x00, "Normal operation (no tested device via DAI)" },
+ { 0x01, "Test of speech decoder / DTX functions (downlink)" },
+ { 0x02, "Test of speech encoder / DTX functions (uplink)" },
+ { 0x03, "Test of acoustic devices and A/D & D/A" },
+ { 0, NULL }
};
static guint16
de_tp_tested_device(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
- guchar oct;
+ guint32 curr_offset;
+ guchar oct;
- curr_offset = offset;
+ curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
+ oct = tvb_get_guint8(tvb, curr_offset);
proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_tp_tested_device, tvb, curr_offset, 1,
- oct, "%s", val_to_str(oct, gsm_tp_tested_device_vals, "Reserved (%d)"));
- curr_offset+= 1;
+ oct, "%s", val_to_str(oct, gsm_tp_tested_device_vals, "Reserved (%d)"));
+ curr_offset+= 1;
- return(curr_offset - offset);
+ return (curr_offset - offset);
}
static guint16
de_tp_pdu_description(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
- guint16 value;
+ guint32 curr_offset;
+ guint16 value;
- curr_offset = offset;
+ curr_offset = offset;
- value = tvb_get_ntohs(tvb, curr_offset);
- curr_offset += 2;
+ value = tvb_get_ntohs(tvb, curr_offset);
+ curr_offset += 2;
- if (value & 0x8000)
- {
- if ((value & 0xfff) == 0)
- proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_tp_pdu_description,
- tvb, curr_offset, 2, value, "Infinite number of PDUs to be transmitted in the TBF");
- else
- proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_tp_pdu_description,
- tvb, curr_offset, 2, value & 0xfff, "%d PDUs to be transmitted in the TBF", value & 0xfff);
- }
- else
- proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_tp_pdu_description,
- tvb, curr_offset, 2, value, "reserved");
+ if (value & 0x8000)
+ {
+ if ((value & 0xfff) == 0)
+ proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_tp_pdu_description,
+ tvb, curr_offset, 2, value, "Infinite number of PDUs to be transmitted in the TBF");
+ else
+ proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_tp_pdu_description,
+ tvb, curr_offset, 2, value & 0xfff, "%d PDUs to be transmitted in the TBF", value & 0xfff);
+ }
+ else
+ proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_tp_pdu_description,
+ tvb, curr_offset, 2, value, "reserved");
- return(curr_offset - offset);
+ return (curr_offset - offset);
}
static guint16
de_tp_mode_flag(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
- guchar oct;
+ guint32 curr_offset;
+ guchar oct;
- curr_offset = offset;
+ curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
+ oct = tvb_get_guint8(tvb, curr_offset);
- if (oct & 0x01)
- proto_tree_add_text(tree, tvb, curr_offset, 1, "MS shall select the loop back option");
- else
- proto_tree_add_text(tree, tvb, curr_offset, 1, "MS shall itself generate the pseudorandom data");
+ if (oct & 0x01)
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "MS shall select the loop back option");
+ else
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "MS shall itself generate the pseudorandom data");
- proto_tree_add_item(tree, hf_gsm_a_dtap_downlink_timeslot_offset, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_downlink_timeslot_offset, tvb, curr_offset, 1, ENC_NA);
- curr_offset+= 1;
+ curr_offset+= 1;
- return(curr_offset - offset);
+ return (curr_offset - offset);
}
static guint16
de_tp_egprs_mode_flag(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
- guchar oct;
+ guint32 curr_offset;
+ guchar oct;
- curr_offset = offset;
+ curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
+ oct = tvb_get_guint8(tvb, curr_offset);
- if (oct & 0x01)
- proto_tree_add_text(tree, tvb, curr_offset, 1, "MS loops back blocks on the uplink using GMSK modulation only");
- else
- proto_tree_add_text(tree, tvb, curr_offset, 1, "MS loops back blocks on the uplink using either GMSK or 8-PSK modulation following the detected received modulation");
+ if (oct & 0x01)
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "MS loops back blocks on the uplink using GMSK modulation only");
+ else
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "MS loops back blocks on the uplink using either GMSK or 8-PSK modulation following the detected received modulation");
- proto_tree_add_item(tree, hf_gsm_a_dtap_downlink_timeslot_offset, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_gsm_a_dtap_downlink_timeslot_offset, tvb, curr_offset, 1, ENC_NA);
- curr_offset+= 1;
+ curr_offset+= 1;
- return(curr_offset - offset);
+ return (curr_offset - offset);
}
static const value_string gsm_positioning_technology_vals[] = {
- { 0x00, "AGPS" },
- { 0x01, "AGNSS" },
- { 0, NULL }
+ { 0x00, "AGPS" },
+ { 0x01, "AGNSS" },
+ { 0, NULL }
};
static guint16
de_tp_ms_positioning_technology(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
- guchar oct;
+ guint32 curr_offset;
+ guchar oct;
- curr_offset = offset;
+ curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
- proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_ms_positioning_technology, tvb, curr_offset, 1,
+ oct = tvb_get_guint8(tvb, curr_offset);
+ proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_ms_positioning_technology, tvb, curr_offset, 1,
oct, "%s", val_to_str(oct, gsm_positioning_technology_vals, "Reserved (%d)"));
- curr_offset+= 1;
+ curr_offset+= 1;
- return(curr_offset - offset);
+ return (curr_offset - offset);
}
static guint16
de_tp_ue_test_loop_mode(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
- guchar oct;
- guint8 lb_setup_length,i,j;
- guint16 value;
-
- curr_offset = offset;
-
- oct = tvb_get_guint8(tvb, curr_offset);
- curr_offset+= 1;
-
- switch (oct & 0x03)
- {
- case 0:
- {
- proto_tree_add_text(tree, tvb, curr_offset, 1, "UE test loop mode 1 loop back (loopback of RLC SDUs or PDCP SDUs)");
- lb_setup_length = tvb_get_guint8(tvb, curr_offset);
- curr_offset += 1;
- for (i=0,j=0; (i<lb_setup_length) && (j<4); i+=3,j++)
- {
- proto_tree_add_text(tree, tvb, curr_offset, 1, "LB setup RB IE %d",j+1);
- value = tvb_get_ntohs(tvb, curr_offset);
- curr_offset += 2;
- proto_tree_add_text(tree, tvb, curr_offset, 1, "Uplink RLC SDU size is %d bits",value);
- oct = tvb_get_guint8(tvb, curr_offset);
- curr_offset+= 1;
- proto_tree_add_text(tree, tvb, curr_offset, 1, "Radio Bearer %d",oct & 0x1f);
- }
- break;
- }
- case 1:
- proto_tree_add_text(tree, tvb, curr_offset, 1, "UE test loop mode 2 loop back (loopback of transport block data and CRC bits)");
- break;
- case 2:
- proto_tree_add_text(tree, tvb, curr_offset, 1, "UE test loop mode 3 RLC SDU counting (counting of received RLC SDUs)");
- oct = tvb_get_guint8(tvb, curr_offset);
- curr_offset+= 1;
- proto_tree_add_text(tree, tvb, curr_offset, 1, "MBMS short transmission identity %d",(oct & 0x1f)+1);
- break;
- default:
- proto_tree_add_text(tree, tvb, curr_offset, 1, "UE test loop mode reserved (%d)",oct & 0x03);
- break;
- }
-
- return(curr_offset - offset);
+ guint32 curr_offset;
+ guchar oct;
+ guint8 lb_setup_length,i,j;
+ guint16 value;
+
+ curr_offset = offset;
+
+ oct = tvb_get_guint8(tvb, curr_offset);
+ curr_offset+= 1;
+
+ switch (oct & 0x03)
+ {
+ case 0:
+ {
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "UE test loop mode 1 loop back (loopback of RLC SDUs or PDCP SDUs)");
+ lb_setup_length = tvb_get_guint8(tvb, curr_offset);
+ curr_offset += 1;
+ for (i=0,j=0; (i<lb_setup_length) && (j<4); i+=3,j++)
+ {
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "LB setup RB IE %d",j+1);
+ value = tvb_get_ntohs(tvb, curr_offset);
+ curr_offset += 2;
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "Uplink RLC SDU size is %d bits",value);
+ oct = tvb_get_guint8(tvb, curr_offset);
+ curr_offset+= 1;
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "Radio Bearer %d",oct & 0x1f);
+ }
+ break;
+ }
+ case 1:
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "UE test loop mode 2 loop back (loopback of transport block data and CRC bits)");
+ break;
+ case 2:
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "UE test loop mode 3 RLC SDU counting (counting of received RLC SDUs)");
+ oct = tvb_get_guint8(tvb, curr_offset);
+ curr_offset+= 1;
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "MBMS short transmission identity %d",(oct & 0x1f)+1);
+ break;
+ default:
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "UE test loop mode reserved (%d)",oct & 0x03);
+ break;
+ }
+
+ return (curr_offset - offset);
}
static guint16
de_tp_ue_positioning_technology(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
- guchar oct;
+ guint32 curr_offset;
+ guchar oct;
- curr_offset = offset;
+ curr_offset = offset;
- oct = tvb_get_guint8(tvb, curr_offset);
+ oct = tvb_get_guint8(tvb, curr_offset);
- proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_ue_positioning_technology, tvb, curr_offset, 1,
+ proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_ue_positioning_technology, tvb, curr_offset, 1,
oct, "%s", val_to_str(oct, gsm_positioning_technology_vals, "Reserved (%d)"));
- curr_offset+= 1;
+ curr_offset+= 1;
- return(curr_offset - offset);
+ return (curr_offset - offset);
}
static guint16
de_tp_rlc_sdu_counter_value(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
- guint32 value;
+ guint32 curr_offset;
+ guint32 value;
- curr_offset = offset;
+ curr_offset = offset;
- value = tvb_get_ntohl(tvb, curr_offset);
- curr_offset+= 4;
+ value = tvb_get_ntohl(tvb, curr_offset);
+ curr_offset+= 4;
- proto_tree_add_text(tree, tvb, curr_offset, 1, "UE received RLC SDU counter value: %d",value);
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "UE received RLC SDU counter value: %d",value);
- return(curr_offset - offset);
+ return (curr_offset - offset);
}
static const value_string epc_ue_test_loop_mode_vals[] = {
- { 0, "A"},
- { 1, "B"},
- { 2, "C"},
- { 3, "reserved"},
- { 0, NULL }
+ { 0, "A"},
+ { 1, "B"},
+ { 2, "C"},
+ { 3, "reserved"},
+ { 0, NULL }
};
static guint16
de_tp_epc_ue_test_loop_mode(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
- guint32 bit_offset;
+ guint32 curr_offset;
+ guint32 bit_offset;
- curr_offset = offset;
- bit_offset = curr_offset<<3;
+ curr_offset = offset;
+ bit_offset = curr_offset<<3;
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, bit_offset, 6, ENC_BIG_ENDIAN);
- bit_offset += 6;
- proto_tree_add_bits_item(tree, hf_gsm_a_dtap_epc_ue_tl_mode, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
- /*bit_offset += 2;*/
- /* Store test loop mode to know how to dissect Close UE Test Loop message */
- epc_test_loop_mode = tvb_get_guint8(tvb, curr_offset) & 0x03;
- curr_offset++;
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, bit_offset, 6, ENC_BIG_ENDIAN);
+ bit_offset += 6;
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_epc_ue_tl_mode, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
+ /*bit_offset += 2;*/
+ /* Store test loop mode to know how to dissect Close UE Test Loop message */
+ epc_test_loop_mode = tvb_get_guint8(tvb, curr_offset) & 0x03;
+ curr_offset++;
- return(curr_offset - offset);
+ return (curr_offset - offset);
}
static guint16
de_tp_epc_ue_tl_a_lb_setup(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
- guint32 count, nb_lb;
- guint8 drb;
- proto_tree *lb_setup_tree = NULL;
+ guint32 curr_offset;
+ guint32 count, nb_lb;
+ guint8 drb;
+ proto_tree *lb_setup_tree = NULL;
- curr_offset = offset;
+ curr_offset = offset;
- count = 0;
- nb_lb = len / 3;
+ count = 0;
+ nb_lb = len / 3;
- proto_tree_add_text(tree, tvb, curr_offset, len, "Number of LB entities: %d", nb_lb);
- while ((count < nb_lb) && (count < 8)){
- lb_setup_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, 3,
- ett_epc_ue_tl_a_lb_setup, NULL, "LB entity %d", count);
+ proto_tree_add_text(tree, tvb, curr_offset, len, "Number of LB entities: %d", nb_lb);
+ while ((count < nb_lb) && (count < 8)) {
+ lb_setup_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, 3,
+ ett_epc_ue_tl_a_lb_setup, NULL, "LB entity %d", count);
- proto_tree_add_bits_item(lb_setup_tree, hf_gsm_a_dtap_epc_ue_tl_a_ul_sdu_size, tvb, curr_offset<<3, 16, ENC_BIG_ENDIAN);
- curr_offset += 2;
- drb = tvb_get_guint8(tvb, curr_offset) & 0x1f;
- proto_tree_add_uint_format_value(lb_setup_tree, hf_gsm_a_dtap_epc_ue_tl_a_drb, tvb, curr_offset, 1,
- drb, "%d (%d)", drb+1, drb);
- curr_offset++;
- count++;
- }
+ proto_tree_add_bits_item(lb_setup_tree, hf_gsm_a_dtap_epc_ue_tl_a_ul_sdu_size, tvb, curr_offset<<3, 16, ENC_BIG_ENDIAN);
+ curr_offset += 2;
+ drb = tvb_get_guint8(tvb, curr_offset) & 0x1f;
+ proto_tree_add_uint_format_value(lb_setup_tree, hf_gsm_a_dtap_epc_ue_tl_a_drb, tvb, curr_offset, 1,
+ drb, "%d (%d)", drb+1, drb);
+ curr_offset++;
+ count++;
+ }
- EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
+ EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
- return(len);
+ return (len);
}
static guint16
de_tp_epc_ue_tl_b_lb_setup(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
+ guint32 curr_offset;
- curr_offset = offset;
+ curr_offset = offset;
- proto_tree_add_bits_item(tree, hf_gsm_a_dtap_epc_ue_tl_b_ip_pdu_delay, tvb, curr_offset<<3, 8, ENC_BIG_ENDIAN);
- curr_offset++;
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_epc_ue_tl_b_ip_pdu_delay, tvb, curr_offset<<3, 8, ENC_BIG_ENDIAN);
+ curr_offset++;
- return(curr_offset - offset);
+ return (curr_offset - offset);
}
static guint16
de_tp_epc_ue_tl_c_setup(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
+ guint32 curr_offset;
- curr_offset = offset;
+ curr_offset = offset;
- proto_tree_add_bits_item(tree, hf_gsm_a_dtap_epc_ue_tl_c_mbsfn_area_id, tvb, curr_offset<<3, 8, ENC_BIG_ENDIAN);
- curr_offset++;
- proto_tree_add_bits_item(tree, hf_gsm_a_dtap_epc_ue_tl_c_mch_id, tvb, (curr_offset<<3)+4, 4, ENC_BIG_ENDIAN);
- curr_offset++;
- proto_tree_add_bits_item(tree, hf_gsm_a_dtap_epc_ue_tl_c_lcid, tvb, (curr_offset<<3)+3, 5, ENC_BIG_ENDIAN);
- curr_offset++;
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_epc_ue_tl_c_mbsfn_area_id, tvb, curr_offset<<3, 8, ENC_BIG_ENDIAN);
+ curr_offset++;
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_epc_ue_tl_c_mch_id, tvb, (curr_offset<<3)+4, 4, ENC_BIG_ENDIAN);
+ curr_offset++;
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_epc_ue_tl_c_lcid, tvb, (curr_offset<<3)+3, 5, ENC_BIG_ENDIAN);
+ curr_offset++;
- return(curr_offset - offset);
+ return (curr_offset - offset);
}
static const value_string epc_ue_positioning_technology_vals[] = {
- { 0, "AGNSS"},
- { 1, "OTDOA"},
- { 0, NULL }
+ { 0, "AGNSS"},
+ { 1, "OTDOA"},
+ { 0, NULL }
};
static guint16
de_tp_epc_ue_positioning_technology(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
+ guint32 curr_offset;
- curr_offset = offset;
+ curr_offset = offset;
- proto_tree_add_bits_item(tree, hf_gsm_a_dtap_epc_ue_positioning_technology, tvb, curr_offset<<3, 8, ENC_BIG_ENDIAN);
- curr_offset++;
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_epc_ue_positioning_technology, tvb, curr_offset<<3, 8, ENC_BIG_ENDIAN);
+ curr_offset++;
- return(curr_offset - offset);
+ return (curr_offset - offset);
}
static guint16
de_tp_epc_mbms_packet_counter_value(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
+ guint32 curr_offset;
- curr_offset = offset;
+ curr_offset = offset;
- proto_tree_add_bits_item(tree, hf_gsm_a_dtap_epc_mbms_packet_counter_value, tvb, curr_offset<<3, 32, ENC_BIG_ENDIAN);
- curr_offset += 4;
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_epc_mbms_packet_counter_value, tvb, curr_offset<<3, 32, ENC_BIG_ENDIAN);
+ curr_offset += 4;
- return(curr_offset - offset);
+ return (curr_offset - offset);
}
static const true_false_string epc_latitude_sign_value = {
- "South",
- "North"
+ "South",
+ "North"
};
static const true_false_string epc_altitude_dir_value = {
- "Depth",
- "Height"
+ "Depth",
+ "Height"
};
static guint16
de_tp_epc_ellipsoid_point_with_alt(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
- guint32 longitude;
+ guint32 curr_offset;
+ guint32 longitude;
- curr_offset = offset;
+ curr_offset = offset;
- proto_tree_add_bits_item(tree, hf_gsm_a_dtap_epc_latitude_sign, tvb, curr_offset<<3, 1, ENC_BIG_ENDIAN);
- proto_tree_add_bits_item(tree, hf_gsm_a_dtap_epc_degrees_latitude, tvb, (curr_offset<<3)+1, 23, ENC_BIG_ENDIAN);
- curr_offset += 3;
- longitude = tvb_get_ntoh24(tvb, curr_offset);
- proto_tree_add_int_format(tree, hf_gsm_a_dtap_epc_degrees_longitude, tvb, curr_offset, 3, longitude,
- "%s = %s: %d", decode_bits_in_field(curr_offset<<3, 24, longitude),
- proto_registrar_get_name(hf_gsm_a_dtap_epc_degrees_longitude), longitude-8388608);
- curr_offset += 3;
- proto_tree_add_bits_item(tree, hf_gsm_a_dtap_epc_altitude_dir, tvb, curr_offset<<3, 1, ENC_BIG_ENDIAN);
- proto_tree_add_bits_item(tree, hf_gsm_a_dtap_epc_altitude, tvb, (curr_offset<<3)+1, 15, ENC_BIG_ENDIAN);
- curr_offset += 2;
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_epc_latitude_sign, tvb, curr_offset<<3, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_epc_degrees_latitude, tvb, (curr_offset<<3)+1, 23, ENC_BIG_ENDIAN);
+ curr_offset += 3;
+ longitude = tvb_get_ntoh24(tvb, curr_offset);
+ proto_tree_add_int_format(tree, hf_gsm_a_dtap_epc_degrees_longitude, tvb, curr_offset, 3, longitude,
+ "%s = %s: %d", decode_bits_in_field(curr_offset<<3, 24, longitude),
+ proto_registrar_get_name(hf_gsm_a_dtap_epc_degrees_longitude), longitude-8388608);
+ curr_offset += 3;
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_epc_altitude_dir, tvb, curr_offset<<3, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_epc_altitude, tvb, (curr_offset<<3)+1, 15, ENC_BIG_ENDIAN);
+ curr_offset += 2;
- return(curr_offset - offset);
+ return (curr_offset - offset);
}
static guint16
de_tp_epc_horizontal_velocity(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
+ guint32 curr_offset;
- curr_offset = offset;
+ curr_offset = offset;
- proto_tree_add_bits_item(tree, hf_gsm_a_dtap_epc_bearing, tvb, curr_offset<<3, 9, ENC_BIG_ENDIAN);
- proto_tree_add_bits_item(tree, hf_gsm_a_dtap_epc_horizontal_speed, tvb, (curr_offset<<3)+9, 11, ENC_BIG_ENDIAN);
- curr_offset += 3;
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_epc_bearing, tvb, curr_offset<<3, 9, ENC_BIG_ENDIAN);
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_epc_horizontal_speed, tvb, (curr_offset<<3)+9, 11, ENC_BIG_ENDIAN);
+ curr_offset += 3;
- return(curr_offset - offset);
+ return (curr_offset - offset);
}
static guint16
de_tp_epc_gnss_tod_msec(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
- guint32 curr_offset;
+ guint32 curr_offset;
- curr_offset = offset;
+ curr_offset = offset;
- proto_tree_add_bits_item(tree, hf_gsm_a_dtap_epc_gnss_tod_msec, tvb, (curr_offset<<3)+2, 22, ENC_BIG_ENDIAN);
- curr_offset += 3;
+ proto_tree_add_bits_item(tree, hf_gsm_a_dtap_epc_gnss_tod_msec, tvb, (curr_offset<<3)+2, 22, ENC_BIG_ENDIAN);
+ curr_offset += 3;
- return(curr_offset - offset);
+ return (curr_offset - offset);
}
guint16 (*dtap_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len, gchar *add_string, int string_len) = {
- /* Mobility Management Information Elements 10.5.3 */
- de_auth_param_rand, /* Authentication Parameter RAND */
- de_auth_param_autn, /* Authentication Parameter AUTN (UMTS and EPS authentication challenge) */
- de_auth_resp_param, /* Authentication Response Parameter */
- de_auth_resp_param_ext, /* Authentication Response Parameter (extension) (UMTS authentication challenge only) */
- de_auth_fail_param, /* Authentication Failure Parameter (UMTS and EPS authentication challenge) */
- NULL /* handled inline */, /* CM Service Type */
- NULL /* handled inline */, /* Identity Type */
- NULL /* handled inline */, /* Location Updating Type */
- de_network_name, /* Network Name */
- de_rej_cause, /* Reject Cause */
- NULL /* no associated data */, /* Follow-on Proceed */
- de_time_zone, /* Time Zone */
- de_time_zone_time, /* Time Zone and Time */
- NULL /* no associated data */, /* CTS Permission */
- de_lsa_id, /* LSA Identifier */
- de_day_saving_time, /* Daylight Saving Time */
- de_emerg_num_list, /* Emergency Number List */
- de_add_upd_params, /* Additional update parameters */
- de_mm_timer, /* MM Timer */
- /* Call Control Information Elements 10.5.4 */
- de_aux_states, /* Auxiliary States */
- de_bearer_cap, /* Bearer Capability */
- de_cc_cap, /* Call Control Capabilities */
- de_call_state, /* Call State */
- de_cld_party_bcd_num, /* Called Party BCD Number */
- de_cld_party_sub_addr, /* Called Party Subaddress */
- de_clg_party_bcd_num, /* Calling Party BCD Number */
- de_clg_party_sub_addr, /* Calling Party Subaddress */
- de_cause, /* Cause */
- NULL /* no associated data */, /* CLIR Suppression */
- NULL /* no associated data */, /* CLIR Invocation */
- NULL /* handled inline */, /* Congestion Level */
- de_conn_num, /* Connected Number */
- de_conn_sub_addr, /* Connected Subaddress */
- de_facility, /* Facility */
- de_hlc, /* High Layer Compatibility */
- de_keypad_facility, /* Keypad Facility */
- de_llc, /* 10.5.4.18 Low layer compatibility */
- NULL, /* More Data */
- de_notif_ind, /* Notification Indicator */
- de_prog_ind, /* Progress Indicator */
- de_recall_type, /* 10.5.4.21a Recall type $(CCBS)$ */
- de_red_party_bcd_num, /* Redirecting Party BCD Number */
- de_red_party_sub_addr, /* Redirecting Party Subaddress */
- de_repeat_ind, /* Repeat Indicator */
- NULL /* no associated data */, /* Reverse Call Setup Direction */
- de_setup_cont, /* SETUP Container $(CCBS)$ */
- de_signal, /* Signal */
- de_ss_ver_ind, /* SS Version Indicator */
- de_u2u, /* User-user */
- de_alert_pat, /* Alerting Pattern $(NIA)$ */
- de_allowed_act, /* Allowed Actions $(CCBS)$ */
- de_stream_id, /* Stream Identifier */
- de_nw_call_ctrl_cap, /* Network Call Control Capabilities */
- de_ca_of_no_cli, /* Cause of No CLI */
- de_sup_codec_list, /* Supported Codec List */
- de_serv_cat, /* Service Category */
- NULL, /* 10.5.4.34 Redial */
- NULL, /* 10.5.4.35 Network-initiated Service Upgrade ind */
- /* Short Message Service Information Elements [5] 8.1.4 */
- de_cp_user_data, /* CP-User Data */
- de_cp_cause, /* CP-Cause */
- /* Tests procedures information elements 3GPP TS 44.014 6.4.0 and 3GPP TS 34.109 6.4.0 */
- de_tp_sub_channel, /* Close TCH Loop Cmd Sub-channel */
- de_tp_ack, /* Open Loop Cmd Ack */
- de_tp_loop_type, /* Close Multi-slot Loop Cmd Loop type */
- de_tp_loop_ack, /* Close Multi-slot Loop Ack Result */
- de_tp_tested_device, /* Test Interface Tested device */
- de_tp_pdu_description, /* GPRS Test Mode Cmd PDU description */
- de_tp_mode_flag, /* GPRS Test Mode Cmd Mode flag */
- de_tp_egprs_mode_flag, /* EGPRS Start Radio Block Loopback Cmd Mode flag */
- de_tp_ms_positioning_technology, /* MS Positioning Technology */
- de_tp_ue_test_loop_mode, /* Close UE Test Loop Mode */
- de_tp_ue_positioning_technology, /* UE Positioning Technology */
- de_tp_rlc_sdu_counter_value, /* RLC SDU Counter Value */
- de_tp_epc_ue_test_loop_mode, /* UE Test Loop Mode */
- de_tp_epc_ue_tl_a_lb_setup, /* UE Test Loop Mode A LB Setup */
- de_tp_epc_ue_tl_b_lb_setup, /* UE Test Loop Mode B LB Setup */
- de_tp_epc_ue_tl_c_setup, /* UE Test Loop Mode C Setup */
- de_tp_epc_ue_positioning_technology, /* UE Positioning Technology */
- de_tp_epc_mbms_packet_counter_value, /* MBMS Packet Counter Value */
- de_tp_epc_ellipsoid_point_with_alt, /* ellipsoidPointWithAltitude */
- de_tp_epc_horizontal_velocity, /* horizontalVelocity */
- de_tp_epc_gnss_tod_msec, /* gnss-TOD-msec */
- NULL, /* NONE */
+ /* Mobility Management Information Elements 10.5.3 */
+ de_auth_param_rand, /* Authentication Parameter RAND */
+ de_auth_param_autn, /* Authentication Parameter AUTN (UMTS and EPS authentication challenge) */
+ de_auth_resp_param, /* Authentication Response Parameter */
+ de_auth_resp_param_ext, /* Authentication Response Parameter (extension) (UMTS authentication challenge only) */
+ de_auth_fail_param, /* Authentication Failure Parameter (UMTS and EPS authentication challenge) */
+ NULL /* handled inline */, /* CM Service Type */
+ NULL /* handled inline */, /* Identity Type */
+ NULL /* handled inline */, /* Location Updating Type */
+ de_network_name, /* Network Name */
+ de_rej_cause, /* Reject Cause */
+ NULL /* no associated data */, /* Follow-on Proceed */
+ de_time_zone, /* Time Zone */
+ de_time_zone_time, /* Time Zone and Time */
+ NULL /* no associated data */, /* CTS Permission */
+ de_lsa_id, /* LSA Identifier */
+ de_day_saving_time, /* Daylight Saving Time */
+ de_emerg_num_list, /* Emergency Number List */
+ de_add_upd_params, /* Additional update parameters */
+ de_mm_timer, /* MM Timer */
+ /* Call Control Information Elements 10.5.4 */
+ de_aux_states, /* Auxiliary States */
+ de_bearer_cap, /* Bearer Capability */
+ de_cc_cap, /* Call Control Capabilities */
+ de_call_state, /* Call State */
+ de_cld_party_bcd_num, /* Called Party BCD Number */
+ de_cld_party_sub_addr, /* Called Party Subaddress */
+ de_clg_party_bcd_num, /* Calling Party BCD Number */
+ de_clg_party_sub_addr, /* Calling Party Subaddress */
+ de_cause, /* Cause */
+ NULL /* no associated data */, /* CLIR Suppression */
+ NULL /* no associated data */, /* CLIR Invocation */
+ NULL /* handled inline */, /* Congestion Level */
+ de_conn_num, /* Connected Number */
+ de_conn_sub_addr, /* Connected Subaddress */
+ de_facility, /* Facility */
+ de_hlc, /* High Layer Compatibility */
+ de_keypad_facility, /* Keypad Facility */
+ de_llc, /* 10.5.4.18 Low layer compatibility */
+ NULL, /* More Data */
+ de_notif_ind, /* Notification Indicator */
+ de_prog_ind, /* Progress Indicator */
+ de_recall_type, /* 10.5.4.21a Recall type $(CCBS)$ */
+ de_red_party_bcd_num, /* Redirecting Party BCD Number */
+ de_red_party_sub_addr, /* Redirecting Party Subaddress */
+ de_repeat_ind, /* Repeat Indicator */
+ NULL /* no associated data */, /* Reverse Call Setup Direction */
+ de_setup_cont, /* SETUP Container $(CCBS)$ */
+ de_signal, /* Signal */
+ de_ss_ver_ind, /* SS Version Indicator */
+ de_u2u, /* User-user */
+ de_alert_pat, /* Alerting Pattern $(NIA)$ */
+ de_allowed_act, /* Allowed Actions $(CCBS)$ */
+ de_stream_id, /* Stream Identifier */
+ de_nw_call_ctrl_cap, /* Network Call Control Capabilities */
+ de_ca_of_no_cli, /* Cause of No CLI */
+ de_sup_codec_list, /* Supported Codec List */
+ de_serv_cat, /* Service Category */
+ NULL, /* 10.5.4.34 Redial */
+ NULL, /* 10.5.4.35 Network-initiated Service Upgrade ind */
+ /* Short Message Service Information Elements [5] 8.1.4 */
+ de_cp_user_data, /* CP-User Data */
+ de_cp_cause, /* CP-Cause */
+ /* Tests procedures information elements 3GPP TS 44.014 6.4.0 and 3GPP TS 34.109 6.4.0 */
+ de_tp_sub_channel, /* Close TCH Loop Cmd Sub-channel */
+ de_tp_ack, /* Open Loop Cmd Ack */
+ de_tp_loop_type, /* Close Multi-slot Loop Cmd Loop type */
+ de_tp_loop_ack, /* Close Multi-slot Loop Ack Result */
+ de_tp_tested_device, /* Test Interface Tested device */
+ de_tp_pdu_description, /* GPRS Test Mode Cmd PDU description */
+ de_tp_mode_flag, /* GPRS Test Mode Cmd Mode flag */
+ de_tp_egprs_mode_flag, /* EGPRS Start Radio Block Loopback Cmd Mode flag */
+ de_tp_ms_positioning_technology, /* MS Positioning Technology */
+ de_tp_ue_test_loop_mode, /* Close UE Test Loop Mode */
+ de_tp_ue_positioning_technology, /* UE Positioning Technology */
+ de_tp_rlc_sdu_counter_value, /* RLC SDU Counter Value */
+ de_tp_epc_ue_test_loop_mode, /* UE Test Loop Mode */
+ de_tp_epc_ue_tl_a_lb_setup, /* UE Test Loop Mode A LB Setup */
+ de_tp_epc_ue_tl_b_lb_setup, /* UE Test Loop Mode B LB Setup */
+ de_tp_epc_ue_tl_c_setup, /* UE Test Loop Mode C Setup */
+ de_tp_epc_ue_positioning_technology, /* UE Positioning Technology */
+ de_tp_epc_mbms_packet_counter_value, /* MBMS Packet Counter Value */
+ de_tp_epc_ellipsoid_point_with_alt, /* ellipsoidPointWithAltitude */
+ de_tp_epc_horizontal_velocity, /* horizontalVelocity */
+ de_tp_epc_gnss_tod_msec, /* gnss-TOD-msec */
+ NULL, /* NONE */
};
/* MESSAGE FUNCTIONS */
@@ -3962,53 +3963,53 @@ guint16 (*dtap_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _
static void
dtap_mm_auth_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
- guint8 oct;
- proto_tree *subtree;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
+ guint8 oct;
+ proto_tree *subtree;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_FALSE;
+ is_uplink = IS_UPLINK_FALSE;
- /*
- * special dissection for Cipher Key Sequence Number
- */
- oct = tvb_get_guint8(tvb, curr_offset);
+ /*
+ * special dissection for Cipher Key Sequence Number
+ */
+ oct = tvb_get_guint8(tvb, curr_offset);
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, curr_offset<<3, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, curr_offset<<3, 4, ENC_BIG_ENDIAN);
- subtree =
- proto_tree_add_subtree(tree,
- tvb, curr_offset, 1, ett_gsm_common_elem[DE_CIPH_KEY_SEQ_NUM], NULL,
- val_to_str_ext_const(DE_CIPH_KEY_SEQ_NUM, &gsm_common_elem_strings_ext, ""));
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1, ett_gsm_common_elem[DE_CIPH_KEY_SEQ_NUM], NULL,
+ val_to_str_ext_const(DE_CIPH_KEY_SEQ_NUM, &gsm_common_elem_strings_ext, ""));
- proto_tree_add_bits_item(subtree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+4, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_bits_item(subtree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+4, 1, ENC_BIG_ENDIAN);
- switch (oct & 0x07)
- {
- case 0x07:
+ switch (oct & 0x07)
+ {
+ case 0x07:
proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_ciphering_key_sequence_number, tvb, curr_offset, 1,
- oct, "No key is available");
- break;
+ oct, "No key is available");
+ break;
- default:
- proto_tree_add_item(subtree, hf_gsm_a_dtap_ciphering_key_sequence_number, tvb, curr_offset, 1, ENC_NA);
- break;
- }
+ default:
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_ciphering_key_sequence_number, tvb, curr_offset, 1, ENC_NA);
+ break;
+ }
- curr_offset++;
- curr_len--;
+ curr_offset++;
+ curr_len--;
- if ((signed)curr_len <= 0) return;
+ if ((signed)curr_len <= 0) return;
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_AUTH_PARAM_RAND, " - UMTS challenge or GSM challenge");
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_AUTH_PARAM_RAND, " - UMTS challenge or GSM challenge");
- ELEM_OPT_TLV(0x20, GSM_A_PDU_TYPE_DTAP, DE_AUTH_PARAM_AUTN, NULL);
+ ELEM_OPT_TLV(0x20, GSM_A_PDU_TYPE_DTAP, DE_AUTH_PARAM_AUTN, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -4017,20 +4018,20 @@ dtap_mm_auth_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint3
static void
dtap_mm_auth_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_TRUE;
+ is_uplink = IS_UPLINK_TRUE;
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_AUTH_RESP_PARAM, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_AUTH_RESP_PARAM, NULL);
- ELEM_OPT_TLV(0x21, GSM_A_PDU_TYPE_DTAP, DE_AUTH_RESP_PARAM_EXT, NULL);
+ ELEM_OPT_TLV(0x21, GSM_A_PDU_TYPE_DTAP, DE_AUTH_RESP_PARAM_EXT, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -4039,20 +4040,20 @@ dtap_mm_auth_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint
static void
dtap_mm_auth_fail(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_TRUE;
+ is_uplink = IS_UPLINK_TRUE;
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_REJ_CAUSE, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_REJ_CAUSE, NULL);
- ELEM_OPT_TLV(0x22, GSM_A_PDU_TYPE_DTAP, DE_AUTH_FAIL_PARAM, NULL);
+ ELEM_OPT_TLV(0x22, GSM_A_PDU_TYPE_DTAP, DE_AUTH_FAIL_PARAM, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -4061,58 +4062,58 @@ dtap_mm_auth_fail(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint
static void
dtap_mm_cm_reestab_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
- guint8 oct;
- proto_tree *subtree;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
+ guint8 oct;
+ proto_tree *subtree;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_TRUE;
+ is_uplink = IS_UPLINK_TRUE;
- /*
- * special dissection for Cipher Key Sequence Number
- */
- oct = tvb_get_guint8(tvb, curr_offset);
+ /*
+ * special dissection for Cipher Key Sequence Number
+ */
+ oct = tvb_get_guint8(tvb, curr_offset);
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, curr_offset<<3, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, curr_offset<<3, 4, ENC_BIG_ENDIAN);
- subtree =
- proto_tree_add_subtree(tree,
- tvb, curr_offset, 1, ett_gsm_common_elem[DE_CIPH_KEY_SEQ_NUM], NULL,
- val_to_str_ext_const(DE_CIPH_KEY_SEQ_NUM, &gsm_common_elem_strings_ext, ""));
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1, ett_gsm_common_elem[DE_CIPH_KEY_SEQ_NUM], NULL,
+ val_to_str_ext_const(DE_CIPH_KEY_SEQ_NUM, &gsm_common_elem_strings_ext, ""));
- proto_tree_add_bits_item(subtree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+4, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_bits_item(subtree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+4, 1, ENC_BIG_ENDIAN);
- switch (oct & 0x07)
- {
- case 0x07:
+ switch (oct & 0x07)
+ {
+ case 0x07:
proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_ciphering_key_sequence_number, tvb, curr_offset, 1,
- oct, "No key is available");
- break;
+ oct, "No key is available");
+ break;
- default:
- proto_tree_add_item(subtree, hf_gsm_a_dtap_ciphering_key_sequence_number, tvb, curr_offset, 1, ENC_NA);
- break;
- }
+ default:
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_ciphering_key_sequence_number, tvb, curr_offset, 1, ENC_NA);
+ break;
+ }
- curr_offset++;
- curr_len--;
+ curr_offset++;
+ curr_len--;
- if ((signed)curr_len <= 0) return;
+ if ((signed)curr_len <= 0) return;
- ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MS_CM_2, NULL);
+ ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MS_CM_2, NULL);
- ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MID, NULL);
+ ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MID, NULL);
- ELEM_OPT_TV(0x13, GSM_A_PDU_TYPE_COMMON, DE_LAI, NULL);
+ ELEM_OPT_TV(0x13, GSM_A_PDU_TYPE_COMMON, DE_LAI, NULL);
- ELEM_OPT_TV_SHORT(0xD0, GSM_A_PDU_TYPE_GM, DE_DEVICE_PROPERTIES, NULL);
+ ELEM_OPT_TV_SHORT(0xD0, GSM_A_PDU_TYPE_GM, DE_DEVICE_PROPERTIES, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -4121,18 +4122,18 @@ dtap_mm_cm_reestab_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
static void
dtap_mm_cm_srvc_prompt(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_FALSE;
+ is_uplink = IS_UPLINK_FALSE;
- ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_PD_SAPI, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_PD_SAPI, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -4141,20 +4142,20 @@ dtap_mm_cm_srvc_prompt(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
static void
dtap_mm_cm_srvc_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_FALSE;
+ is_uplink = IS_UPLINK_FALSE;
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_REJ_CAUSE, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_REJ_CAUSE, NULL);
- ELEM_OPT_TLV(0x36, GSM_A_PDU_TYPE_DTAP, DE_MM_TIMER, " - T3246 value");
+ ELEM_OPT_TLV(0x36, GSM_A_PDU_TYPE_DTAP, DE_MM_TIMER, " - T3246 value");
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -4163,150 +4164,150 @@ dtap_mm_cm_srvc_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gui
static void
dtap_mm_abort(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_FALSE;
+ is_uplink = IS_UPLINK_FALSE;
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_REJ_CAUSE, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_REJ_CAUSE, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
* [3] 9.2.9 CM service request
*/
static const value_string gsm_a_dtap_service_type_vals[] = {
- { 0x00, "Reserved"},
+ { 0x00, "Reserved"},
{ 0x01, "Mobile originating call establishment or packet mode connection establishment"},
- { 0x02, "Emergency call establishment"},
- { 0x03, "Reserved"},
- { 0x04, "Short message service"},
- { 0x05, "Reserved"},
- { 0x06, "Reserved"},
- { 0x07, "Reserved"},
- { 0x08, "Supplementary service activation"},
- { 0x09, "Voice group call establishment"},
- { 0x0a, "Voice broadcast call establishment"},
- { 0x0b, "Location Services"},
- { 0x0c, "Reserved"},
- { 0x0d, "Reserved"},
- { 0x0e, "Reserved"},
- { 0x0f, "Reserved"},
- { 0, NULL }
+ { 0x02, "Emergency call establishment"},
+ { 0x03, "Reserved"},
+ { 0x04, "Short message service"},
+ { 0x05, "Reserved"},
+ { 0x06, "Reserved"},
+ { 0x07, "Reserved"},
+ { 0x08, "Supplementary service activation"},
+ { 0x09, "Voice group call establishment"},
+ { 0x0a, "Voice broadcast call establishment"},
+ { 0x0b, "Location Services"},
+ { 0x0c, "Reserved"},
+ { 0x0d, "Reserved"},
+ { 0x0e, "Reserved"},
+ { 0x0f, "Reserved"},
+ { 0, NULL }
};
static void
dtap_mm_cm_srvc_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
- guint8 oct;
- proto_tree *subtree;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
+ guint8 oct;
+ proto_tree *subtree;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_TRUE;
+ is_uplink = IS_UPLINK_TRUE;
- /*
- * special dissection for CM Service Type
- */
- oct = tvb_get_guint8(tvb, curr_offset);
+ /*
+ * special dissection for CM Service Type
+ */
+ oct = tvb_get_guint8(tvb, curr_offset);
- subtree =
- proto_tree_add_subtree(tree,
- tvb, curr_offset, 1, ett_gsm_common_elem[DE_CIPH_KEY_SEQ_NUM], NULL,
- val_to_str_ext_const(DE_CIPH_KEY_SEQ_NUM, &gsm_common_elem_strings_ext, ""));
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1, ett_gsm_common_elem[DE_CIPH_KEY_SEQ_NUM], NULL,
+ val_to_str_ext_const(DE_CIPH_KEY_SEQ_NUM, &gsm_common_elem_strings_ext, ""));
- proto_tree_add_bits_item(subtree, hf_gsm_a_spare_bits, tvb, curr_offset<<3, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_bits_item(subtree, hf_gsm_a_spare_bits, tvb, curr_offset<<3, 1, ENC_BIG_ENDIAN);
- switch ((oct & 0x70) >> 4)
- {
- case 0x07:
+ switch ((oct & 0x70) >> 4)
+ {
+ case 0x07:
proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_ciphering_key_sequence_number70, tvb, curr_offset, 1,
- oct, "No key is available");
- break;
+ oct, "No key is available");
+ break;
- default:
- proto_tree_add_item(subtree, hf_gsm_a_dtap_ciphering_key_sequence_number70, tvb, curr_offset, 1, ENC_NA);
- break;
- }
+ default:
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_ciphering_key_sequence_number70, tvb, curr_offset, 1, ENC_NA);
+ break;
+ }
- subtree =
- proto_tree_add_subtree(tree,
- tvb, curr_offset, 1, ett_gsm_dtap_elem[DE_CM_SRVC_TYPE], NULL,
- val_to_str_ext_const(DE_CM_SRVC_TYPE, &gsm_dtap_elem_strings_ext, ""));
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1, ett_gsm_dtap_elem[DE_CM_SRVC_TYPE], NULL,
+ val_to_str_ext_const(DE_CM_SRVC_TYPE, &gsm_dtap_elem_strings_ext, ""));
- proto_tree_add_item(subtree, hf_gsm_a_dtap_service_type, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_service_type, tvb, curr_offset, 1, ENC_NA);
- curr_offset++;
- curr_len--;
+ curr_offset++;
+ curr_len--;
- if ((signed)curr_len <= 0) return;
+ if ((signed)curr_len <= 0) return;
- ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MS_CM_2, NULL);
+ ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MS_CM_2, NULL);
- ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MID, NULL);
+ ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MID, NULL);
- ELEM_OPT_TV_SHORT(0x80, GSM_A_PDU_TYPE_COMMON, DE_PRIO, NULL);
+ ELEM_OPT_TV_SHORT(0x80, GSM_A_PDU_TYPE_COMMON, DE_PRIO, NULL);
- ELEM_OPT_TV_SHORT(0xC0, GSM_A_PDU_TYPE_DTAP, DE_ADD_UPD_PARAMS, NULL);
+ ELEM_OPT_TV_SHORT(0xC0, GSM_A_PDU_TYPE_DTAP, DE_ADD_UPD_PARAMS, NULL);
- ELEM_OPT_TV_SHORT(0xD0, GSM_A_PDU_TYPE_GM, DE_DEVICE_PROPERTIES, NULL);
+ ELEM_OPT_TV_SHORT(0xD0, GSM_A_PDU_TYPE_GM, DE_DEVICE_PROPERTIES, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
* [3] 9.2.10 Identity request
*/
static const value_string gsm_a_dtap_type_of_identity_vals[] = {
- { 0x00, "Reserved"},
+ { 0x00, "Reserved"},
{ 0x01, "IMSI"},
- { 0x02, "IMEI"},
- { 0x03, "IMEISV"},
- { 0x04, "TMSI"},
- { 0x05, "P-TMSI, RAI, P-TMSI signature"},
- { 0x06, "Reserved"},
- { 0x07, "Reserved"},
- { 0, NULL }
+ { 0x02, "IMEI"},
+ { 0x03, "IMEISV"},
+ { 0x04, "TMSI"},
+ { 0x05, "P-TMSI, RAI, P-TMSI signature"},
+ { 0x06, "Reserved"},
+ { 0x07, "Reserved"},
+ { 0, NULL }
};
static void
dtap_mm_id_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint curr_len;
- proto_tree *subtree;
+ guint32 curr_offset;
+ guint curr_len;
+ proto_tree *subtree;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_FALSE;
+ is_uplink = IS_UPLINK_FALSE;
- /*
- * special dissection for Identity Type
- */
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, curr_offset<<3, 4, ENC_BIG_ENDIAN);
+ /*
+ * special dissection for Identity Type
+ */
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, curr_offset<<3, 4, ENC_BIG_ENDIAN);
- subtree =
- proto_tree_add_subtree(tree,
- tvb, curr_offset, 1, ett_gsm_dtap_elem[DE_ID_TYPE], NULL,
- val_to_str_ext_const(DE_ID_TYPE, &gsm_dtap_elem_strings_ext, ""));
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1, ett_gsm_dtap_elem[DE_ID_TYPE], NULL,
+ val_to_str_ext_const(DE_ID_TYPE, &gsm_dtap_elem_strings_ext, ""));
- proto_tree_add_bits_item(subtree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+4, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_type_of_identity, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_bits_item(subtree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+4, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_type_of_identity, tvb, curr_offset, 1, ENC_NA);
- curr_offset++;
- curr_len--;
+ curr_offset++;
+ curr_len--;
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -4315,24 +4316,24 @@ dtap_mm_id_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32
static void
dtap_mm_id_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_TRUE;
+ is_uplink = IS_UPLINK_TRUE;
- ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MID, NULL);
+ ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MID, NULL);
- ELEM_OPT_TV_SHORT(0xE0, GSM_A_PDU_TYPE_GM, DE_PTMSI_TYPE, NULL);
+ ELEM_OPT_TV_SHORT(0xE0, GSM_A_PDU_TYPE_GM, DE_PTMSI_TYPE, NULL);
- ELEM_OPT_TLV( 0x1B, GSM_A_PDU_TYPE_GM, DE_RAI_2, " - Routing area identification");
+ ELEM_OPT_TLV( 0x1B, GSM_A_PDU_TYPE_GM, DE_RAI_2, " - Routing area identification");
- ELEM_OPT_TLV( 0x19, GSM_A_PDU_TYPE_GM, DE_P_TMSI_SIG_2, " - P-TMSI signature");
+ ELEM_OPT_TLV( 0x19, GSM_A_PDU_TYPE_GM, DE_P_TMSI_SIG_2, " - P-TMSI signature");
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -4341,20 +4342,20 @@ dtap_mm_id_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32
static void
dtap_mm_imsi_det_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_TRUE;
+ is_uplink = IS_UPLINK_TRUE;
- ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_MS_CM_1, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_MS_CM_1, NULL);
- ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MID, NULL);
+ ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MID, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -4363,33 +4364,33 @@ dtap_mm_imsi_det_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gu
static void
dtap_mm_loc_upd_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_FALSE;
+ is_uplink = IS_UPLINK_FALSE;
- ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_LAI, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_LAI, NULL);
- ELEM_OPT_TLV(0x17, GSM_A_PDU_TYPE_COMMON, DE_MID, NULL);
+ ELEM_OPT_TLV(0x17, GSM_A_PDU_TYPE_COMMON, DE_MID, NULL);
- ELEM_OPT_T(0xa1, GSM_A_PDU_TYPE_DTAP, DE_FOP, NULL);
+ ELEM_OPT_T(0xa1, GSM_A_PDU_TYPE_DTAP, DE_FOP, NULL);
- /* CTS permission O T 1 10.5.3.10 */
- ELEM_OPT_T(0xa2, GSM_A_PDU_TYPE_DTAP, DE_CTS_PERM, NULL);
+ /* CTS permission O T 1 10.5.3.10 */
+ ELEM_OPT_T(0xa2, GSM_A_PDU_TYPE_DTAP, DE_CTS_PERM, NULL);
- /* PLMN list O TLV 5-47 10.5.1.13 */
- ELEM_OPT_TLV(0x4a, GSM_A_PDU_TYPE_COMMON, DE_PLMN_LIST, " Equivalent");
+ /* PLMN list O TLV 5-47 10.5.1.13 */
+ ELEM_OPT_TLV(0x4a, GSM_A_PDU_TYPE_COMMON, DE_PLMN_LIST, " Equivalent");
- /* 34 Emergency Number List O TLV 5-50 10.5.3.13 */
- ELEM_OPT_TLV(0x34, GSM_A_PDU_TYPE_DTAP, DE_EMERGENCY_NUM_LIST, NULL);
+ /* 34 Emergency Number List O TLV 5-50 10.5.3.13 */
+ ELEM_OPT_TLV(0x34, GSM_A_PDU_TYPE_DTAP, DE_EMERGENCY_NUM_LIST, NULL);
- ELEM_OPT_TLV(0x35, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - Per MS T3212");
+ ELEM_OPT_TLV(0x35, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - Per MS T3212");
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -4398,110 +4399,110 @@ dtap_mm_loc_upd_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gui
static void
dtap_mm_loc_upd_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_FALSE;
+ is_uplink = IS_UPLINK_FALSE;
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_REJ_CAUSE, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_REJ_CAUSE, NULL);
- ELEM_OPT_TLV(0x36, GSM_A_PDU_TYPE_DTAP, DE_MM_TIMER, " - T3246 value");
+ ELEM_OPT_TLV(0x36, GSM_A_PDU_TYPE_DTAP, DE_MM_TIMER, " - T3246 value");
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
* [3] 9.2.15 Location updating request
*/
static const value_string gsm_a_dtap_updating_type_vals[] = {
- { 0x00, "Normal"},
+ { 0x00, "Normal"},
{ 0x01, "Periodic"},
- { 0x02, "IMSI attach"},
- { 0x03, "Reserved"},
- { 0, NULL }
+ { 0x02, "IMSI attach"},
+ { 0x03, "Reserved"},
+ { 0, NULL }
};
static const true_false_string tfs_follow_on_request_value = {
- "Follow-on request pending",
- "No follow-on request pending"
+ "Follow-on request pending",
+ "No follow-on request pending"
};
static void
dtap_mm_loc_upd_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
- guint8 oct;
- proto_tree *subtree;
- proto_item *item;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
+ guint8 oct;
+ proto_tree *subtree;
+ proto_item *item;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_TRUE;
+ is_uplink = IS_UPLINK_TRUE;
- /*
- * special dissection for Location Updating Type
- */
- oct = tvb_get_guint8(tvb, curr_offset);
+ /*
+ * special dissection for Location Updating Type
+ */
+ oct = tvb_get_guint8(tvb, curr_offset);
- subtree =
- proto_tree_add_subtree(tree,
- tvb, curr_offset, 1, ett_gsm_common_elem[DE_CIPH_KEY_SEQ_NUM], NULL,
- val_to_str_ext_const(DE_CIPH_KEY_SEQ_NUM, &gsm_common_elem_strings_ext, ""));
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1, ett_gsm_common_elem[DE_CIPH_KEY_SEQ_NUM], NULL,
+ val_to_str_ext_const(DE_CIPH_KEY_SEQ_NUM, &gsm_common_elem_strings_ext, ""));
- proto_tree_add_bits_item(subtree, hf_gsm_a_spare_bits, tvb, curr_offset<<3, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_bits_item(subtree, hf_gsm_a_spare_bits, tvb, curr_offset<<3, 1, ENC_BIG_ENDIAN);
- switch ((oct & 0x70) >> 4)
- {
- case 0x07:
+ switch ((oct & 0x70) >> 4)
+ {
+ case 0x07:
proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_ciphering_key_sequence_number70, tvb, curr_offset, 1,
- oct, "No key is available");
- break;
+ oct, "No key is available");
+ break;
- default:
- proto_tree_add_item(subtree, hf_gsm_a_dtap_ciphering_key_sequence_number70, tvb, curr_offset, 1, ENC_NA);
- break;
- }
+ default:
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_ciphering_key_sequence_number70, tvb, curr_offset, 1, ENC_NA);
+ break;
+ }
- subtree =
- proto_tree_add_subtree(tree,
- tvb, curr_offset, 1, ett_gsm_dtap_elem[DE_LOC_UPD_TYPE], &item,
- val_to_str_ext_const(DE_LOC_UPD_TYPE, &gsm_dtap_elem_strings_ext, ""));
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1, ett_gsm_dtap_elem[DE_LOC_UPD_TYPE], &item,
+ val_to_str_ext_const(DE_LOC_UPD_TYPE, &gsm_dtap_elem_strings_ext, ""));
- proto_tree_add_item(subtree, hf_gsm_a_dtap_follow_on_request, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_follow_on_request, tvb, curr_offset, 1, ENC_NA);
- proto_tree_add_bits_item(subtree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+5, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_bits_item(subtree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3)+5, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(subtree, hf_gsm_a_dtap_updating_type, tvb, curr_offset, 1, ENC_NA);
+ proto_tree_add_item(subtree, hf_gsm_a_dtap_updating_type, tvb, curr_offset, 1, ENC_NA);
- proto_item_append_text(item, " - %s", val_to_str_const(oct & 0x03, gsm_a_dtap_updating_type_vals, "Reserved"));
+ proto_item_append_text(item, " - %s", val_to_str_const(oct & 0x03, gsm_a_dtap_updating_type_vals, "Reserved"));
- curr_offset++;
- curr_len--;
+ curr_offset++;
+ curr_len--;
- if ((signed)curr_len <= 0) return;
+ if ((signed)curr_len <= 0) return;
- ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_LAI, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_LAI, NULL);
- ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_MS_CM_1, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_MS_CM_1, NULL);
- ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MID, NULL);
+ ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MID, NULL);
- ELEM_OPT_TLV(0x33, GSM_A_PDU_TYPE_COMMON, DE_MS_CM_2, " - Mobile station classmark for UMTS");
+ ELEM_OPT_TLV(0x33, GSM_A_PDU_TYPE_COMMON, DE_MS_CM_2, " - Mobile station classmark for UMTS");
- ELEM_OPT_TV_SHORT(0xc0, GSM_A_PDU_TYPE_DTAP, DE_ADD_UPD_PARAMS, NULL);
+ ELEM_OPT_TV_SHORT(0xc0, GSM_A_PDU_TYPE_DTAP, DE_ADD_UPD_PARAMS, NULL);
- ELEM_OPT_TV_SHORT(0xD0, GSM_A_PDU_TYPE_GM, DE_DEVICE_PROPERTIES, NULL);
+ ELEM_OPT_TV_SHORT(0xD0, GSM_A_PDU_TYPE_GM, DE_DEVICE_PROPERTIES, NULL);
- ELEM_OPT_TV_SHORT(0xC0, GSM_A_PDU_TYPE_COMMON, DE_MS_NET_FEAT_SUP, NULL);
+ ELEM_OPT_TV_SHORT(0xC0, GSM_A_PDU_TYPE_COMMON, DE_MS_NET_FEAT_SUP, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
@@ -4511,28 +4512,28 @@ dtap_mm_loc_upd_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gui
void
dtap_mm_mm_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_TRUE;
+ is_uplink = IS_UPLINK_TRUE;
- ELEM_OPT_TLV(0x43, GSM_A_PDU_TYPE_DTAP, DE_NETWORK_NAME, " - Full Name");
+ ELEM_OPT_TLV(0x43, GSM_A_PDU_TYPE_DTAP, DE_NETWORK_NAME, " - Full Name");
- ELEM_OPT_TLV(0x45, GSM_A_PDU_TYPE_DTAP, DE_NETWORK_NAME, " - Short Name");
+ ELEM_OPT_TLV(0x45, GSM_A_PDU_TYPE_DTAP, DE_NETWORK_NAME, " - Short Name");
- ELEM_OPT_TV(0x46, GSM_A_PDU_TYPE_DTAP, DE_TIME_ZONE, " - Local");
+ ELEM_OPT_TV(0x46, GSM_A_PDU_TYPE_DTAP, DE_TIME_ZONE, " - Local");
- ELEM_OPT_TV(0x47, GSM_A_PDU_TYPE_DTAP, DE_TIME_ZONE_TIME, " - Universal Time and Local Time Zone");
+ ELEM_OPT_TV(0x47, GSM_A_PDU_TYPE_DTAP, DE_TIME_ZONE_TIME, " - Universal Time and Local Time Zone");
- ELEM_OPT_TLV(0x48, GSM_A_PDU_TYPE_DTAP, DE_LSA_ID, NULL);
+ ELEM_OPT_TLV(0x48, GSM_A_PDU_TYPE_DTAP, DE_LSA_ID, NULL);
- ELEM_OPT_TLV(0x49, GSM_A_PDU_TYPE_DTAP, DE_DAY_SAVING_TIME, NULL);
+ ELEM_OPT_TLV(0x49, GSM_A_PDU_TYPE_DTAP, DE_DAY_SAVING_TIME, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -4541,18 +4542,18 @@ dtap_mm_mm_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32
static void
dtap_mm_mm_status(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_TRUE;
+ is_uplink = IS_UPLINK_TRUE;
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_REJ_CAUSE, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_REJ_CAUSE, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -4561,20 +4562,20 @@ dtap_mm_mm_status(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint
static void
dtap_mm_tmsi_realloc_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_FALSE;
+ is_uplink = IS_UPLINK_FALSE;
- ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_LAI, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_COMMON, DE_LAI, NULL);
- ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MID, NULL);
+ ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MID, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
* 9.2.18 TMSI reallocation complete
@@ -4592,26 +4593,26 @@ dtap_mm_tmsi_realloc_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_
static void
dtap_cc_alerting(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_TRUE;
+ is_uplink = IS_UPLINK_TRUE;
- ELEM_OPT_TLV(0x1c, GSM_A_PDU_TYPE_DTAP, DE_FACILITY, NULL);
+ ELEM_OPT_TLV(0x1c, GSM_A_PDU_TYPE_DTAP, DE_FACILITY, NULL);
- ELEM_OPT_TLV(0x1e, GSM_A_PDU_TYPE_DTAP, DE_PROG_IND, NULL);
+ ELEM_OPT_TLV(0x1e, GSM_A_PDU_TYPE_DTAP, DE_PROG_IND, NULL);
- ELEM_OPT_TLV(0x7e, GSM_A_PDU_TYPE_DTAP, DE_USER_USER, NULL);
+ ELEM_OPT_TLV(0x7e, GSM_A_PDU_TYPE_DTAP, DE_USER_USER, NULL);
- /* uplink only */
+ /* uplink only */
- ELEM_OPT_TLV(0x7f, GSM_A_PDU_TYPE_DTAP, DE_SS_VER_IND, NULL);
+ ELEM_OPT_TLV(0x7f, GSM_A_PDU_TYPE_DTAP, DE_SS_VER_IND, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -4620,30 +4621,30 @@ dtap_cc_alerting(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint3
static void
dtap_cc_call_conf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_TRUE;
+ is_uplink = IS_UPLINK_TRUE;
- ELEM_OPT_TV_SHORT(0xd0, GSM_A_PDU_TYPE_DTAP, DE_REPEAT_IND, " BC repeat indicator");
+ ELEM_OPT_TV_SHORT(0xd0, GSM_A_PDU_TYPE_DTAP, DE_REPEAT_IND, " BC repeat indicator");
- ELEM_OPT_TLV(0x04, GSM_A_PDU_TYPE_DTAP, DE_BEARER_CAP, " 1");
+ ELEM_OPT_TLV(0x04, GSM_A_PDU_TYPE_DTAP, DE_BEARER_CAP, " 1");
- ELEM_OPT_TLV(0x04, GSM_A_PDU_TYPE_DTAP, DE_BEARER_CAP, " 2");
+ ELEM_OPT_TLV(0x04, GSM_A_PDU_TYPE_DTAP, DE_BEARER_CAP, " 2");
- ELEM_OPT_TLV(0x08, GSM_A_PDU_TYPE_DTAP, DE_CAUSE, NULL);
+ ELEM_OPT_TLV(0x08, GSM_A_PDU_TYPE_DTAP, DE_CAUSE, NULL);
- ELEM_OPT_TLV(0x15, GSM_A_PDU_TYPE_DTAP, DE_CC_CAP, NULL);
+ ELEM_OPT_TLV(0x15, GSM_A_PDU_TYPE_DTAP, DE_CC_CAP, NULL);
- ELEM_OPT_TLV(0x2d, GSM_A_PDU_TYPE_DTAP, DE_SI, NULL);
+ ELEM_OPT_TLV(0x2d, GSM_A_PDU_TYPE_DTAP, DE_SI, NULL);
- ELEM_OPT_TLV(0x40, GSM_A_PDU_TYPE_DTAP, DE_SUP_CODEC_LIST, NULL);
+ ELEM_OPT_TLV(0x40, GSM_A_PDU_TYPE_DTAP, DE_SUP_CODEC_LIST, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -4652,78 +4653,78 @@ dtap_cc_call_conf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint
static void
dtap_cc_call_proceed(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_FALSE;
+ is_uplink = IS_UPLINK_FALSE;
- ELEM_OPT_TV_SHORT(0xd0, GSM_A_PDU_TYPE_DTAP, DE_REPEAT_IND, " BC repeat indicator");
+ ELEM_OPT_TV_SHORT(0xd0, GSM_A_PDU_TYPE_DTAP, DE_REPEAT_IND, " BC repeat indicator");
- ELEM_OPT_TLV(0x04, GSM_A_PDU_TYPE_DTAP, DE_BEARER_CAP, " 1");
+ ELEM_OPT_TLV(0x04, GSM_A_PDU_TYPE_DTAP, DE_BEARER_CAP, " 1");
- ELEM_OPT_TLV(0x04, GSM_A_PDU_TYPE_DTAP, DE_BEARER_CAP, " 2");
+ ELEM_OPT_TLV(0x04, GSM_A_PDU_TYPE_DTAP, DE_BEARER_CAP, " 2");
- ELEM_OPT_TLV(0x1c, GSM_A_PDU_TYPE_DTAP, DE_FACILITY, NULL);
+ ELEM_OPT_TLV(0x1c, GSM_A_PDU_TYPE_DTAP, DE_FACILITY, NULL);
- ELEM_OPT_TLV(0x1e, GSM_A_PDU_TYPE_DTAP, DE_PROG_IND, NULL);
+ ELEM_OPT_TLV(0x1e, GSM_A_PDU_TYPE_DTAP, DE_PROG_IND, NULL);
- ELEM_OPT_TV_SHORT(0x80, GSM_A_PDU_TYPE_COMMON, DE_PRIO, NULL);
+ ELEM_OPT_TV_SHORT(0x80, GSM_A_PDU_TYPE_COMMON, DE_PRIO, NULL);
- ELEM_OPT_TLV(0x2f, GSM_A_PDU_TYPE_DTAP, DE_NET_CC_CAP, NULL);
+ ELEM_OPT_TLV(0x2f, GSM_A_PDU_TYPE_DTAP, DE_NET_CC_CAP, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
* [4] 9.3.4 Congestion control
*/
static const value_string gsm_a_dtap_congestion_level_vals[] = {
- { 0, "Receiver ready"},
- { 15, "Receiver not ready"},
- { 0, NULL }
+ { 0, "Receiver ready"},
+ { 15, "Receiver not ready"},
+ { 0, NULL }
};
static void
dtap_cc_congestion_control(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
- guint8 oct;
- proto_tree *subtree;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
+ guint8 oct;
+ proto_tree *subtree;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_FALSE;
+ is_uplink = IS_UPLINK_FALSE;
- /*
- * special dissection for Congestion Level
- */
- oct = tvb_get_guint8(tvb, curr_offset);
+ /*
+ * special dissection for Congestion Level
+ */
+ oct = tvb_get_guint8(tvb, curr_offset);
- proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, curr_offset<<3, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, curr_offset<<3, 4, ENC_BIG_ENDIAN);
- subtree =
- proto_tree_add_subtree(tree,
- tvb, curr_offset, 1, ett_gsm_dtap_elem[DE_CONGESTION], NULL,
- val_to_str_ext_const(DE_CONGESTION, &gsm_dtap_elem_strings_ext, ""));
+ subtree =
+ proto_tree_add_subtree(tree,
+ tvb, curr_offset, 1, ett_gsm_dtap_elem[DE_CONGESTION], NULL,
+ val_to_str_ext_const(DE_CONGESTION, &gsm_dtap_elem_strings_ext, ""));
- proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_congestion_level, tvb, curr_offset, 1,
- oct, "%s", val_to_str_const(oct & 0xF, gsm_a_dtap_congestion_level_vals, "Reserved"));
+ proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_congestion_level, tvb, curr_offset, 1,
+ oct, "%s", val_to_str_const(oct & 0xF, gsm_a_dtap_congestion_level_vals, "Reserved"));
- curr_offset++;
- curr_len--;
+ curr_offset++;
+ curr_len--;
- if ((signed)curr_len <= 0) return;
+ if ((signed)curr_len <= 0) return;
- ELEM_OPT_TLV(0x08, GSM_A_PDU_TYPE_DTAP, DE_CAUSE, NULL);
+ ELEM_OPT_TLV(0x08, GSM_A_PDU_TYPE_DTAP, DE_CAUSE, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -4732,32 +4733,32 @@ dtap_cc_congestion_control(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _
static void
dtap_cc_connect(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_TRUE;
+ is_uplink = IS_UPLINK_TRUE;
- ELEM_OPT_TLV(0x1c, GSM_A_PDU_TYPE_DTAP, DE_FACILITY, NULL);
+ ELEM_OPT_TLV(0x1c, GSM_A_PDU_TYPE_DTAP, DE_FACILITY, NULL);
- ELEM_OPT_TLV(0x1e, GSM_A_PDU_TYPE_DTAP, DE_PROG_IND, NULL);
+ ELEM_OPT_TLV(0x1e, GSM_A_PDU_TYPE_DTAP, DE_PROG_IND, NULL);
- ELEM_OPT_TLV(0x4c, GSM_A_PDU_TYPE_DTAP, DE_CONN_NUM, NULL);
+ ELEM_OPT_TLV(0x4c, GSM_A_PDU_TYPE_DTAP, DE_CONN_NUM, NULL);
- ELEM_OPT_TLV(0x4d, GSM_A_PDU_TYPE_DTAP, DE_CONN_SUB_ADDR, NULL);
+ ELEM_OPT_TLV(0x4d, GSM_A_PDU_TYPE_DTAP, DE_CONN_SUB_ADDR, NULL);
- ELEM_OPT_TLV(0x7e, GSM_A_PDU_TYPE_DTAP, DE_USER_USER, NULL);
+ ELEM_OPT_TLV(0x7e, GSM_A_PDU_TYPE_DTAP, DE_USER_USER, NULL);
- /* uplink only */
+ /* uplink only */
- ELEM_OPT_TLV(0x7f, GSM_A_PDU_TYPE_DTAP, DE_SS_VER_IND, NULL);
+ ELEM_OPT_TLV(0x7f, GSM_A_PDU_TYPE_DTAP, DE_SS_VER_IND, NULL);
- ELEM_OPT_TLV(0x2d, GSM_A_PDU_TYPE_DTAP, DE_SI, NULL);
+ ELEM_OPT_TLV(0x2d, GSM_A_PDU_TYPE_DTAP, DE_SI, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -4766,30 +4767,30 @@ dtap_cc_connect(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32
static void
dtap_cc_disconnect(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_TRUE;
+ is_uplink = IS_UPLINK_TRUE;
- ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_CAUSE, NULL);
+ ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_CAUSE, NULL);
- ELEM_OPT_TLV(0x1c, GSM_A_PDU_TYPE_DTAP, DE_FACILITY, NULL);
+ ELEM_OPT_TLV(0x1c, GSM_A_PDU_TYPE_DTAP, DE_FACILITY, NULL);
- ELEM_OPT_TLV(0x1e, GSM_A_PDU_TYPE_DTAP, DE_PROG_IND, NULL);
+ ELEM_OPT_TLV(0x1e, GSM_A_PDU_TYPE_DTAP, DE_PROG_IND, NULL);
- ELEM_OPT_TLV(0x7e, GSM_A_PDU_TYPE_DTAP, DE_USER_USER, NULL);
+ ELEM_OPT_TLV(0x7e, GSM_A_PDU_TYPE_DTAP, DE_USER_USER, NULL);
- ELEM_OPT_TLV(0x7b, GSM_A_PDU_TYPE_DTAP, DE_ALLOWED_ACTIONS, NULL);
+ ELEM_OPT_TLV(0x7b, GSM_A_PDU_TYPE_DTAP, DE_ALLOWED_ACTIONS, NULL);
- /* uplink only */
+ /* uplink only */
- ELEM_OPT_TLV(0x7f, GSM_A_PDU_TYPE_DTAP, DE_SS_VER_IND, NULL);
+ ELEM_OPT_TLV(0x7f, GSM_A_PDU_TYPE_DTAP, DE_SS_VER_IND, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -4798,24 +4799,24 @@ dtap_cc_disconnect(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guin
static void
dtap_cc_emerg_setup(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_TRUE;
+ is_uplink = IS_UPLINK_TRUE;
- ELEM_OPT_TLV(0x04, GSM_A_PDU_TYPE_DTAP, DE_BEARER_CAP, NULL);
+ ELEM_OPT_TLV(0x04, GSM_A_PDU_TYPE_DTAP, DE_BEARER_CAP, NULL);
- ELEM_OPT_TLV(0x2d, GSM_A_PDU_TYPE_DTAP, DE_SI, NULL);
+ ELEM_OPT_TLV(0x2d, GSM_A_PDU_TYPE_DTAP, DE_SI, NULL);
- ELEM_OPT_TLV(0x40, GSM_A_PDU_TYPE_DTAP, DE_SUP_CODEC_LIST, NULL);
+ ELEM_OPT_TLV(0x40, GSM_A_PDU_TYPE_DTAP, DE_SUP_CODEC_LIST, NULL);
- ELEM_OPT_TLV(0x2e, GSM_A_PDU_TYPE_DTAP, DE_SERV_CAT, " - Emergency category");
+ ELEM_OPT_TLV(0x2e, GSM_A_PDU_TYPE_DTAP, DE_SERV_CAT, " - Emergency category");
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -4824,22 +4825,22 @@ dtap_cc_emerg_setup(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gui
static void
dtap_cc_facility(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_TRUE;
+ is_uplink = IS_UPLINK_TRUE;
- ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_FACILITY, NULL);
+ ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_FACILITY, NULL);
- /* uplink only */
+ /* uplink only */
- ELEM_OPT_TLV(0x7f, GSM_A_PDU_TYPE_DTAP, DE_SS_VER_IND, NULL);
+ ELEM_OPT_TLV(0x7f, GSM_A_PDU_TYPE_DTAP, DE_SS_VER_IND, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
* 9.3.10 Hold
@@ -4854,18 +4855,18 @@ dtap_cc_facility(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint3
static void
dtap_cc_hold_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_FALSE;
+ is_uplink = IS_UPLINK_FALSE;
- ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_CAUSE, NULL);
+ ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_CAUSE, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -4874,26 +4875,26 @@ dtap_cc_hold_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint3
static void
dtap_cc_modify(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_TRUE;
+ is_uplink = IS_UPLINK_TRUE;
- ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_BEARER_CAP, NULL);
+ ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_BEARER_CAP, NULL);
- ELEM_OPT_TLV(0x7c, GSM_A_PDU_TYPE_DTAP, DE_LLC, NULL);
+ ELEM_OPT_TLV(0x7c, GSM_A_PDU_TYPE_DTAP, DE_LLC, NULL);
- ELEM_OPT_TLV(0x7d, GSM_A_PDU_TYPE_DTAP, DE_HLC, NULL);
+ ELEM_OPT_TLV(0x7d, GSM_A_PDU_TYPE_DTAP, DE_HLC, NULL);
- ELEM_OPT_T(0xa3, GSM_A_PDU_TYPE_DTAP, DE_REV_CALL_SETUP_DIR, NULL);
+ ELEM_OPT_T(0xa3, GSM_A_PDU_TYPE_DTAP, DE_REV_CALL_SETUP_DIR, NULL);
- ELEM_OPT_T(0xa4, GSM_A_PDU_TYPE_DTAP, DE_NET_INIT_SERV_UPG, NULL);
+ ELEM_OPT_T(0xa4, GSM_A_PDU_TYPE_DTAP, DE_NET_INIT_SERV_UPG, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -4902,24 +4903,24 @@ dtap_cc_modify(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32
static void
dtap_cc_modify_complete(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_TRUE;
+ is_uplink = IS_UPLINK_TRUE;
- ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_BEARER_CAP, NULL);
+ ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_BEARER_CAP, NULL);
- ELEM_OPT_TLV(0x7c, GSM_A_PDU_TYPE_DTAP, DE_LLC, NULL);
+ ELEM_OPT_TLV(0x7c, GSM_A_PDU_TYPE_DTAP, DE_LLC, NULL);
- ELEM_OPT_TLV(0x7d, GSM_A_PDU_TYPE_DTAP, DE_HLC, NULL);
+ ELEM_OPT_TLV(0x7d, GSM_A_PDU_TYPE_DTAP, DE_HLC, NULL);
- ELEM_OPT_T(0xa3, GSM_A_PDU_TYPE_DTAP, DE_REV_CALL_SETUP_DIR, NULL);
+ ELEM_OPT_T(0xa3, GSM_A_PDU_TYPE_DTAP, DE_REV_CALL_SETUP_DIR, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -4928,24 +4929,24 @@ dtap_cc_modify_complete(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
static void
dtap_cc_modify_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_FALSE;
+ is_uplink = IS_UPLINK_FALSE;
- ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_BEARER_CAP, NULL);
+ ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_BEARER_CAP, NULL);
- ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_CAUSE, NULL);
+ ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_CAUSE, NULL);
- ELEM_OPT_TLV(0x7c, GSM_A_PDU_TYPE_DTAP, DE_LLC, NULL);
+ ELEM_OPT_TLV(0x7c, GSM_A_PDU_TYPE_DTAP, DE_LLC, NULL);
- ELEM_OPT_TLV(0x7d, GSM_A_PDU_TYPE_DTAP, DE_HLC, NULL);
+ ELEM_OPT_TLV(0x7d, GSM_A_PDU_TYPE_DTAP, DE_HLC, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -4954,18 +4955,18 @@ dtap_cc_modify_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guin
static void
dtap_cc_notify(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_FALSE;
+ is_uplink = IS_UPLINK_FALSE;
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_NOT_IND, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_NOT_IND, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -4974,20 +4975,20 @@ dtap_cc_notify(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32
static void
dtap_cc_progress(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_FALSE;
+ is_uplink = IS_UPLINK_FALSE;
- ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_PROG_IND, NULL);
+ ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_PROG_IND, NULL);
- ELEM_OPT_TLV(0x7e, GSM_A_PDU_TYPE_DTAP, DE_USER_USER, NULL);
+ ELEM_OPT_TLV(0x7e, GSM_A_PDU_TYPE_DTAP, DE_USER_USER, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -4996,18 +4997,18 @@ dtap_cc_progress(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint3
static void
dtap_cc_cc_est(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_FALSE;
+ is_uplink = IS_UPLINK_FALSE;
- ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_SETUP_CONTAINER, NULL);
+ ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_SETUP_CONTAINER, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -5016,26 +5017,26 @@ dtap_cc_cc_est(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32
static void
dtap_cc_cc_est_conf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_TRUE;
+ is_uplink = IS_UPLINK_TRUE;
- ELEM_OPT_TV_SHORT(0xd0, GSM_A_PDU_TYPE_DTAP, DE_REPEAT_IND, " Repeat indicator");
+ ELEM_OPT_TV_SHORT(0xd0, GSM_A_PDU_TYPE_DTAP, DE_REPEAT_IND, " Repeat indicator");
- ELEM_MAND_TLV(0x04, GSM_A_PDU_TYPE_DTAP, DE_BEARER_CAP, " 1");
+ ELEM_MAND_TLV(0x04, GSM_A_PDU_TYPE_DTAP, DE_BEARER_CAP, " 1");
- ELEM_OPT_TLV(0x04, GSM_A_PDU_TYPE_DTAP, DE_BEARER_CAP, " 2");
+ ELEM_OPT_TLV(0x04, GSM_A_PDU_TYPE_DTAP, DE_BEARER_CAP, " 2");
- ELEM_OPT_TLV(0x08, GSM_A_PDU_TYPE_DTAP, DE_CAUSE, NULL);
+ ELEM_OPT_TLV(0x08, GSM_A_PDU_TYPE_DTAP, DE_CAUSE, NULL);
- ELEM_OPT_TLV(0x40, GSM_A_PDU_TYPE_DTAP, DE_SUP_CODEC_LIST, NULL);
+ ELEM_OPT_TLV(0x40, GSM_A_PDU_TYPE_DTAP, DE_SUP_CODEC_LIST, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -5044,28 +5045,28 @@ dtap_cc_cc_est_conf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gui
static void
dtap_cc_release(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_TRUE;
+ is_uplink = IS_UPLINK_TRUE;
- ELEM_OPT_TLV(0x08, GSM_A_PDU_TYPE_DTAP, DE_CAUSE, NULL);
+ ELEM_OPT_TLV(0x08, GSM_A_PDU_TYPE_DTAP, DE_CAUSE, NULL);
- ELEM_OPT_TLV(0x08, GSM_A_PDU_TYPE_DTAP, DE_CAUSE, " 2");
+ ELEM_OPT_TLV(0x08, GSM_A_PDU_TYPE_DTAP, DE_CAUSE, " 2");
- ELEM_OPT_TLV(0x1c, GSM_A_PDU_TYPE_DTAP, DE_FACILITY, NULL);
+ ELEM_OPT_TLV(0x1c, GSM_A_PDU_TYPE_DTAP, DE_FACILITY, NULL);
- ELEM_OPT_TLV(0x7e, GSM_A_PDU_TYPE_DTAP, DE_USER_USER, NULL);
+ ELEM_OPT_TLV(0x7e, GSM_A_PDU_TYPE_DTAP, DE_USER_USER, NULL);
- /* uplink only */
+ /* uplink only */
- ELEM_OPT_TLV(0x7f, GSM_A_PDU_TYPE_DTAP, DE_SS_VER_IND, NULL);
+ ELEM_OPT_TLV(0x7f, GSM_A_PDU_TYPE_DTAP, DE_SS_VER_IND, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -5074,20 +5075,20 @@ dtap_cc_release(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32
static void
dtap_cc_recall(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_FALSE;
+ is_uplink = IS_UPLINK_FALSE;
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_RECALL_TYPE, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_RECALL_TYPE, NULL);
- ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_FACILITY, NULL);
+ ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_FACILITY, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -5096,26 +5097,26 @@ dtap_cc_recall(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32
static void
dtap_cc_release_complete(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_FALSE;
+ is_uplink = IS_UPLINK_FALSE;
- ELEM_OPT_TLV(0x08, GSM_A_PDU_TYPE_DTAP, DE_CAUSE, NULL);
+ ELEM_OPT_TLV(0x08, GSM_A_PDU_TYPE_DTAP, DE_CAUSE, NULL);
- ELEM_OPT_TLV(0x1c, GSM_A_PDU_TYPE_DTAP, DE_FACILITY, NULL);
+ ELEM_OPT_TLV(0x1c, GSM_A_PDU_TYPE_DTAP, DE_FACILITY, NULL);
- ELEM_OPT_TLV(0x7e, GSM_A_PDU_TYPE_DTAP, DE_USER_USER, NULL);
+ ELEM_OPT_TLV(0x7e, GSM_A_PDU_TYPE_DTAP, DE_USER_USER, NULL);
- /* uplink only */
+ /* uplink only */
- ELEM_OPT_TLV(0x7f, GSM_A_PDU_TYPE_DTAP, DE_SS_VER_IND, NULL);
+ ELEM_OPT_TLV(0x7f, GSM_A_PDU_TYPE_DTAP, DE_SS_VER_IND, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -5124,18 +5125,18 @@ dtap_cc_release_complete(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_
static void
dtap_cc_retrieve_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_FALSE;
+ is_uplink = IS_UPLINK_FALSE;
- ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_CAUSE, NULL);
+ ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_CAUSE, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -5153,88 +5154,88 @@ dtap_cc_retrieve_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, gu
static void
dtap_cc_setup(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_TRUE;
+ is_uplink = IS_UPLINK_TRUE;
- ELEM_OPT_TV_SHORT(0xd0, GSM_A_PDU_TYPE_DTAP, DE_REPEAT_IND, " BC repeat indicator");
+ ELEM_OPT_TV_SHORT(0xd0, GSM_A_PDU_TYPE_DTAP, DE_REPEAT_IND, " BC repeat indicator");
- ELEM_OPT_TLV(0x04, GSM_A_PDU_TYPE_DTAP, DE_BEARER_CAP, " 1");
+ ELEM_OPT_TLV(0x04, GSM_A_PDU_TYPE_DTAP, DE_BEARER_CAP, " 1");
- ELEM_OPT_TLV(0x04, GSM_A_PDU_TYPE_DTAP, DE_BEARER_CAP, " 2");
+ ELEM_OPT_TLV(0x04, GSM_A_PDU_TYPE_DTAP, DE_BEARER_CAP, " 2");
- ELEM_OPT_TLV(0x1c, GSM_A_PDU_TYPE_DTAP, DE_FACILITY, NULL);
+ ELEM_OPT_TLV(0x1c, GSM_A_PDU_TYPE_DTAP, DE_FACILITY, NULL);
- ELEM_OPT_TLV(0x1e, GSM_A_PDU_TYPE_DTAP, DE_PROG_IND, NULL);
+ ELEM_OPT_TLV(0x1e, GSM_A_PDU_TYPE_DTAP, DE_PROG_IND, NULL);
- ELEM_OPT_TV(0x34, GSM_A_PDU_TYPE_DTAP, DE_SIGNAL, NULL);
+ ELEM_OPT_TV(0x34, GSM_A_PDU_TYPE_DTAP, DE_SIGNAL, NULL);
- ELEM_OPT_TLV(0x5c, GSM_A_PDU_TYPE_DTAP, DE_CLG_PARTY_BCD_NUM, NULL);
+ ELEM_OPT_TLV(0x5c, GSM_A_PDU_TYPE_DTAP, DE_CLG_PARTY_BCD_NUM, NULL);
- ELEM_OPT_TLV(0x5d, GSM_A_PDU_TYPE_DTAP, DE_CLG_PARTY_SUB_ADDR, NULL);
+ ELEM_OPT_TLV(0x5d, GSM_A_PDU_TYPE_DTAP, DE_CLG_PARTY_SUB_ADDR, NULL);
- ELEM_OPT_TLV(0x5e, GSM_A_PDU_TYPE_DTAP, DE_CLD_PARTY_BCD_NUM, NULL);
+ ELEM_OPT_TLV(0x5e, GSM_A_PDU_TYPE_DTAP, DE_CLD_PARTY_BCD_NUM, NULL);
- ELEM_OPT_TLV(0x6d, GSM_A_PDU_TYPE_DTAP, DE_CLD_PARTY_SUB_ADDR, NULL);
+ ELEM_OPT_TLV(0x6d, GSM_A_PDU_TYPE_DTAP, DE_CLD_PARTY_SUB_ADDR, NULL);
- ELEM_OPT_TLV(0x74, GSM_A_PDU_TYPE_DTAP, DE_RED_PARTY_BCD_NUM, NULL);
+ ELEM_OPT_TLV(0x74, GSM_A_PDU_TYPE_DTAP, DE_RED_PARTY_BCD_NUM, NULL);
- ELEM_OPT_TLV(0x75, GSM_A_PDU_TYPE_DTAP, DE_RED_PARTY_SUB_ADDR, NULL);
+ ELEM_OPT_TLV(0x75, GSM_A_PDU_TYPE_DTAP, DE_RED_PARTY_SUB_ADDR, NULL);
- ELEM_OPT_TV_SHORT(0xd0, GSM_A_PDU_TYPE_DTAP, DE_REPEAT_IND, " LLC repeat indicator");
+ ELEM_OPT_TV_SHORT(0xd0, GSM_A_PDU_TYPE_DTAP, DE_REPEAT_IND, " LLC repeat indicator");
- ELEM_OPT_TLV(0x7c, GSM_A_PDU_TYPE_DTAP, DE_LLC, " 1");
+ ELEM_OPT_TLV(0x7c, GSM_A_PDU_TYPE_DTAP, DE_LLC, " 1");
- ELEM_OPT_TLV(0x7c, GSM_A_PDU_TYPE_DTAP, DE_LLC, " 2");
+ ELEM_OPT_TLV(0x7c, GSM_A_PDU_TYPE_DTAP, DE_LLC, " 2");
- ELEM_OPT_TV_SHORT(0xd0, GSM_A_PDU_TYPE_DTAP, DE_REPEAT_IND, " HLC repeat indicator");
+ ELEM_OPT_TV_SHORT(0xd0, GSM_A_PDU_TYPE_DTAP, DE_REPEAT_IND, " HLC repeat indicator");
- ELEM_OPT_TLV(0x7d, GSM_A_PDU_TYPE_DTAP, DE_HLC, " 1");
+ ELEM_OPT_TLV(0x7d, GSM_A_PDU_TYPE_DTAP, DE_HLC, " 1");
- ELEM_OPT_TLV(0x7d, GSM_A_PDU_TYPE_DTAP, DE_HLC, " 2");
+ ELEM_OPT_TLV(0x7d, GSM_A_PDU_TYPE_DTAP, DE_HLC, " 2");
- ELEM_OPT_TLV(0x7e, GSM_A_PDU_TYPE_DTAP, DE_USER_USER, NULL);
+ ELEM_OPT_TLV(0x7e, GSM_A_PDU_TYPE_DTAP, DE_USER_USER, NULL);
- /* downlink only */
+ /* downlink only */
- ELEM_OPT_TV_SHORT(0x80, GSM_A_PDU_TYPE_COMMON, DE_PRIO, NULL);
+ ELEM_OPT_TV_SHORT(0x80, GSM_A_PDU_TYPE_COMMON, DE_PRIO, NULL);
- ELEM_OPT_TLV(0x19, GSM_A_PDU_TYPE_DTAP, DE_ALERT_PATTERN, NULL);
+ ELEM_OPT_TLV(0x19, GSM_A_PDU_TYPE_DTAP, DE_ALERT_PATTERN, NULL);
- ELEM_OPT_TLV(0x2f, GSM_A_PDU_TYPE_DTAP, DE_NET_CC_CAP, NULL);
+ ELEM_OPT_TLV(0x2f, GSM_A_PDU_TYPE_DTAP, DE_NET_CC_CAP, NULL);
- ELEM_OPT_TLV(0x3a, GSM_A_PDU_TYPE_DTAP, DE_CAUSE_NO_CLI, NULL);
+ ELEM_OPT_TLV(0x3a, GSM_A_PDU_TYPE_DTAP, DE_CAUSE_NO_CLI, NULL);
- /* Backup bearer capability O TLV 3-15 10.5.4.4a */
- ELEM_OPT_TLV(0x41, GSM_A_PDU_TYPE_DTAP, DE_BEARER_CAP, NULL);
+ /* Backup bearer capability O TLV 3-15 10.5.4.4a */
+ ELEM_OPT_TLV(0x41, GSM_A_PDU_TYPE_DTAP, DE_BEARER_CAP, NULL);
- /* uplink only */
+ /* uplink only */
- ELEM_OPT_TLV(0x7f, GSM_A_PDU_TYPE_DTAP, DE_SS_VER_IND, NULL);
+ ELEM_OPT_TLV(0x7f, GSM_A_PDU_TYPE_DTAP, DE_SS_VER_IND, NULL);
- ELEM_OPT_T(0xa1, GSM_A_PDU_TYPE_DTAP, DE_CLIR_SUP, NULL);
+ ELEM_OPT_T(0xa1, GSM_A_PDU_TYPE_DTAP, DE_CLIR_SUP, NULL);
- ELEM_OPT_T(0xa2, GSM_A_PDU_TYPE_DTAP, DE_CLIR_INV, NULL);
+ ELEM_OPT_T(0xa2, GSM_A_PDU_TYPE_DTAP, DE_CLIR_INV, NULL);
- ELEM_OPT_TLV(0x15, GSM_A_PDU_TYPE_DTAP, DE_CC_CAP, NULL);
+ ELEM_OPT_TLV(0x15, GSM_A_PDU_TYPE_DTAP, DE_CC_CAP, NULL);
- ELEM_OPT_TLV(0x1d, GSM_A_PDU_TYPE_DTAP, DE_FACILITY, " $(CCBS)$ (advanced recall alignment)");
+ ELEM_OPT_TLV(0x1d, GSM_A_PDU_TYPE_DTAP, DE_FACILITY, " $(CCBS)$ (advanced recall alignment)");
- ELEM_OPT_TLV(0x1b, GSM_A_PDU_TYPE_DTAP, DE_FACILITY, " (recall alignment Not essential) $(CCBS)$");
+ ELEM_OPT_TLV(0x1b, GSM_A_PDU_TYPE_DTAP, DE_FACILITY, " (recall alignment Not essential) $(CCBS)$");
- ELEM_OPT_TLV(0x2d, GSM_A_PDU_TYPE_DTAP, DE_SI, NULL);
+ ELEM_OPT_TLV(0x2d, GSM_A_PDU_TYPE_DTAP, DE_SI, NULL);
- ELEM_OPT_TLV(0x40, GSM_A_PDU_TYPE_DTAP, DE_SUP_CODEC_LIST, NULL);
+ ELEM_OPT_TLV(0x40, GSM_A_PDU_TYPE_DTAP, DE_SUP_CODEC_LIST, NULL);
- /*A3 Redial O T 1 10.5.4.34 */
- ELEM_OPT_T(0xA3, GSM_A_PDU_TYPE_DTAP, DE_REDIAL, NULL);
+ /*A3 Redial O T 1 10.5.4.34 */
+ ELEM_OPT_T(0xA3, GSM_A_PDU_TYPE_DTAP, DE_REDIAL, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -5243,18 +5244,18 @@ dtap_cc_setup(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 o
static void
dtap_cc_start_cc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_FALSE;
+ is_uplink = IS_UPLINK_FALSE;
- ELEM_OPT_TLV(0x15, GSM_A_PDU_TYPE_DTAP, DE_CC_CAP, NULL);
+ ELEM_OPT_TLV(0x15, GSM_A_PDU_TYPE_DTAP, DE_CC_CAP, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -5263,18 +5264,18 @@ dtap_cc_start_cc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint3
static void
dtap_cc_start_dtmf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_TRUE;
+ is_uplink = IS_UPLINK_TRUE;
- ELEM_MAND_TV(0x2c, GSM_A_PDU_TYPE_DTAP, DE_KEYPAD_FACILITY, NULL);
+ ELEM_MAND_TV(0x2c, GSM_A_PDU_TYPE_DTAP, DE_KEYPAD_FACILITY, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -5283,18 +5284,18 @@ dtap_cc_start_dtmf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guin
static void
dtap_cc_start_dtmf_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_FALSE;
+ is_uplink = IS_UPLINK_FALSE;
- ELEM_MAND_TV(0x2c, GSM_A_PDU_TYPE_DTAP, DE_KEYPAD_FACILITY, NULL);
+ ELEM_MAND_TV(0x2c, GSM_A_PDU_TYPE_DTAP, DE_KEYPAD_FACILITY, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -5303,18 +5304,18 @@ dtap_cc_start_dtmf_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
static void
dtap_cc_start_dtmf_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_FALSE;
+ is_uplink = IS_UPLINK_FALSE;
- ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_CAUSE, NULL);
+ ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_CAUSE, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -5323,22 +5324,22 @@ dtap_cc_start_dtmf_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
static void
dtap_cc_status(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_FALSE;
+ is_uplink = IS_UPLINK_FALSE;
- ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_CAUSE, NULL);
+ ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_CAUSE, NULL);
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_CALL_STATE, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_CALL_STATE, NULL);
- ELEM_OPT_TLV(0x24, GSM_A_PDU_TYPE_DTAP, DE_AUX_STATES, NULL);
+ ELEM_OPT_TLV(0x24, GSM_A_PDU_TYPE_DTAP, DE_AUX_STATES, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
* 9.3.28 Status enquiry
@@ -5358,20 +5359,20 @@ dtap_cc_status(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32
static void
dtap_cc_user_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_TRUE;
+ is_uplink = IS_UPLINK_TRUE;
- ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_USER_USER, NULL);
+ ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_USER_USER, NULL);
- ELEM_OPT_T(0xa0, GSM_A_PDU_TYPE_DTAP, DE_MORE_DATA, NULL);
+ ELEM_OPT_T(0xa0, GSM_A_PDU_TYPE_DTAP, DE_MORE_DATA, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -5381,20 +5382,20 @@ dtap_cc_user_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint
static void
dtap_ss_register(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_TRUE;
+ is_uplink = IS_UPLINK_TRUE;
- ELEM_MAND_TLV(0x1c, GSM_A_PDU_TYPE_DTAP, DE_FACILITY, NULL);
+ ELEM_MAND_TLV(0x1c, GSM_A_PDU_TYPE_DTAP, DE_FACILITY, NULL);
- ELEM_OPT_TLV(0x7f, GSM_A_PDU_TYPE_DTAP, DE_SS_VER_IND, NULL);
+ ELEM_OPT_TLV(0x7f, GSM_A_PDU_TYPE_DTAP, DE_SS_VER_IND, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -5404,18 +5405,18 @@ dtap_ss_register(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint3
static void
dtap_sms_cp_data(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_TRUE;
+ is_uplink = IS_UPLINK_TRUE;
- ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_CP_USER_DATA, NULL);
+ ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_CP_USER_DATA, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
/*
@@ -5424,410 +5425,410 @@ dtap_sms_cp_data(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint3
static void
dtap_sms_cp_error(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_offset = offset;
- curr_len = len;
+ curr_offset = offset;
+ curr_len = len;
- is_uplink = IS_UPLINK_TRUE;
+ is_uplink = IS_UPLINK_TRUE;
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_CP_CAUSE, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_CP_CAUSE, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
static void
dtap_tp_close_tch_loop_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_len = len;
- curr_offset = offset;
+ curr_len = len;
+ curr_offset = offset;
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_SUB_CHANNEL, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_SUB_CHANNEL, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
static void
dtap_tp_open_loop_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_len = len;
- curr_offset = offset;
+ curr_len = len;
+ curr_offset = offset;
- if (curr_len)
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_ACK, NULL);
+ if (curr_len)
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_ACK, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
static void
dtap_tp_multi_slot_loop_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_len = len;
- curr_offset = offset;
+ curr_len = len;
+ curr_offset = offset;
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_LOOP_TYPE, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_LOOP_TYPE, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
static void
dtap_tp_multi_slot_loop_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_len = len;
- curr_offset = offset;
+ curr_len = len;
+ curr_offset = offset;
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_LOOP_ACK, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_LOOP_ACK, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
static void
dtap_tp_test_interface(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_len = len;
- curr_offset = offset;
+ curr_len = len;
+ curr_offset = offset;
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_TESTED_DEVICE, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_TESTED_DEVICE, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
static void
dtap_tp_gprs_test_mode_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_len = len;
- curr_offset = offset;
+ curr_len = len;
+ curr_offset = offset;
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_PDU_DESCRIPTION, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_PDU_DESCRIPTION, NULL);
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_MODE_FLAG, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_MODE_FLAG, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
static void
dtap_tp_egprs_start_radio_block_loopback_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_len = len;
- curr_offset = offset;
+ curr_len = len;
+ curr_offset = offset;
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_EGPRS_MODE_FLAG, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_EGPRS_MODE_FLAG, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
static void
dtap_tp_reset_ms_positioning_stored_information(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_len = len;
- curr_offset = offset;
+ curr_len = len;
+ curr_offset = offset;
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_MS_POSITIONING_TECHNOLOGY, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_MS_POSITIONING_TECHNOLOGY, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
static void
dtap_tp_close_ue_test_loop(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_len = len;
- curr_offset = offset;
+ curr_len = len;
+ curr_offset = offset;
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_UE_TEST_LOOP_MODE, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_UE_TEST_LOOP_MODE, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
static void
dtap_tp_reset_ue_positioning_stored_information(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_len = len;
- curr_offset = offset;
+ curr_len = len;
+ curr_offset = offset;
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_UE_POSITIONING_TECHNOLOGY, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_UE_POSITIONING_TECHNOLOGY, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
static void
dtap_tp_ue_test_loop_mode_3_rlc_sdu_counter_response(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_len = len;
- curr_offset = offset;
+ curr_len = len;
+ curr_offset = offset;
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_RLC_SDU_COUNTER_VALUE, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_RLC_SDU_COUNTER_VALUE, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
static void
dtap_tp_epc_close_ue_test_loop(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_len = len;
- curr_offset = offset;
+ curr_len = len;
+ curr_offset = offset;
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_EPC_UE_TEST_LOOP_MODE, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_EPC_UE_TEST_LOOP_MODE, NULL);
- switch (epc_test_loop_mode)
- {
- case 0:
- ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_TP_EPC_UE_TL_A_LB_SETUP, NULL);
- break;
- case 1:
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_EPC_UE_TL_B_LB_SETUP, NULL);
- break;
- case 2:
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_EPC_UE_TL_C_SETUP, NULL);
- break;
- default:
- break;
- }
+ switch (epc_test_loop_mode)
+ {
+ case 0:
+ ELEM_MAND_LV(GSM_A_PDU_TYPE_DTAP, DE_TP_EPC_UE_TL_A_LB_SETUP, NULL);
+ break;
+ case 1:
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_EPC_UE_TL_B_LB_SETUP, NULL);
+ break;
+ case 2:
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_EPC_UE_TL_C_SETUP, NULL);
+ break;
+ default:
+ break;
+ }
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
static void
dtap_tp_epc_activate_test_mode(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_len = len;
- curr_offset = offset;
+ curr_len = len;
+ curr_offset = offset;
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_EPC_UE_TEST_LOOP_MODE, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_EPC_UE_TEST_LOOP_MODE, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
static void
dtap_tp_epc_reset_ue_positioning_stored_information(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_len = len;
- curr_offset = offset;
+ curr_len = len;
+ curr_offset = offset;
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_EPC_UE_POSITIONING_TECHNOLOGY, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_EPC_UE_POSITIONING_TECHNOLOGY, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
static void
dtap_tp_epc_test_loop_mode_c_mbms_packet_counter_response(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_len = len;
- curr_offset = offset;
+ curr_len = len;
+ curr_offset = offset;
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_EPC_MBMS_PACKET_COUNTER_VALUE, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_EPC_MBMS_PACKET_COUNTER_VALUE, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
static void
dtap_tp_epc_update_ue_location_information(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len)
{
- guint32 curr_offset;
- guint32 consumed;
- guint curr_len;
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
- curr_len = len;
- curr_offset = offset;
+ curr_len = len;
+ curr_offset = offset;
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_EPC_ELLIPSOID_POINT_WITH_ALT, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_EPC_ELLIPSOID_POINT_WITH_ALT, NULL);
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_EPC_HORIZONTAL_VELOCITY, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_EPC_HORIZONTAL_VELOCITY, NULL);
- ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_EPC_GNSS_TOD_MSEC, NULL);
+ ELEM_MAND_V(GSM_A_PDU_TYPE_DTAP, DE_TP_EPC_GNSS_TOD_MSEC, NULL);
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
}
-#define NUM_GSM_DTAP_MSG_MM (sizeof(gsm_a_dtap_msg_mm_strings)/sizeof(value_string))
+#define NUM_GSM_DTAP_MSG_MM (sizeof(gsm_a_dtap_msg_mm_strings)/sizeof(value_string))
static gint ett_gsm_dtap_msg_mm[NUM_GSM_DTAP_MSG_MM];
static void (*dtap_msg_mm_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) = {
- dtap_mm_imsi_det_ind, /* IMSI Detach Indication */
- dtap_mm_loc_upd_acc, /* Location Updating Accept */
- dtap_mm_loc_upd_rej, /* Location Updating Reject */
- dtap_mm_loc_upd_req, /* Location Updating Request */
- NULL /* no associated data */, /* Authentication Reject */
- dtap_mm_auth_req, /* Authentication Request */
- dtap_mm_auth_resp, /* Authentication Response */
- dtap_mm_auth_fail, /* Authentication Failure */
- dtap_mm_id_req, /* Identity Request */
- dtap_mm_id_resp, /* Identity Response */
- dtap_mm_tmsi_realloc_cmd, /* TMSI Reallocation Command */
- NULL /* no associated data */, /* TMSI Reallocation Complete */
- NULL /* no associated data */, /* CM Service Accept */
- dtap_mm_cm_srvc_rej, /* CM Service Reject */
- NULL /* no associated data */, /* CM Service Abort */
- dtap_mm_cm_srvc_req, /* CM Service Request */
- dtap_mm_cm_srvc_prompt, /* CM Service Prompt */
- NULL, /* Reserved: was allocated in earlier phases of the protocol */
- dtap_mm_cm_reestab_req, /* CM Re-establishment Request */
- dtap_mm_abort, /* Abort */
- NULL /* no associated data */, /* MM Null */
- dtap_mm_mm_status, /* MM Status */
- dtap_mm_mm_info, /* MM Information */
- NULL, /* NONE */
+ dtap_mm_imsi_det_ind, /* IMSI Detach Indication */
+ dtap_mm_loc_upd_acc, /* Location Updating Accept */
+ dtap_mm_loc_upd_rej, /* Location Updating Reject */
+ dtap_mm_loc_upd_req, /* Location Updating Request */
+ NULL /* no associated data */, /* Authentication Reject */
+ dtap_mm_auth_req, /* Authentication Request */
+ dtap_mm_auth_resp, /* Authentication Response */
+ dtap_mm_auth_fail, /* Authentication Failure */
+ dtap_mm_id_req, /* Identity Request */
+ dtap_mm_id_resp, /* Identity Response */
+ dtap_mm_tmsi_realloc_cmd, /* TMSI Reallocation Command */
+ NULL /* no associated data */, /* TMSI Reallocation Complete */
+ NULL /* no associated data */, /* CM Service Accept */
+ dtap_mm_cm_srvc_rej, /* CM Service Reject */
+ NULL /* no associated data */, /* CM Service Abort */
+ dtap_mm_cm_srvc_req, /* CM Service Request */
+ dtap_mm_cm_srvc_prompt, /* CM Service Prompt */
+ NULL, /* Reserved: was allocated in earlier phases of the protocol */
+ dtap_mm_cm_reestab_req, /* CM Re-establishment Request */
+ dtap_mm_abort, /* Abort */
+ NULL /* no associated data */, /* MM Null */
+ dtap_mm_mm_status, /* MM Status */
+ dtap_mm_mm_info, /* MM Information */
+ NULL, /* NONE */
};
-#define NUM_GSM_DTAP_MSG_CC (sizeof(gsm_a_dtap_msg_cc_strings)/sizeof(value_string))
+#define NUM_GSM_DTAP_MSG_CC (sizeof(gsm_a_dtap_msg_cc_strings)/sizeof(value_string))
static gint ett_gsm_dtap_msg_cc[NUM_GSM_DTAP_MSG_CC];
static void (*dtap_msg_cc_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) = {
- dtap_cc_alerting, /* Alerting */
- dtap_cc_call_conf, /* Call Confirmed */
- dtap_cc_call_proceed, /* Call Proceeding */
- dtap_cc_connect, /* Connect */
- NULL /* no associated data */, /* Connect Acknowledge */
- dtap_cc_emerg_setup, /* Emergency Setup */
- dtap_cc_progress, /* Progress */
- dtap_cc_cc_est, /* CC-Establishment */
- dtap_cc_cc_est_conf, /* CC-Establishment Confirmed */
- dtap_cc_recall, /* Recall */
- dtap_cc_start_cc, /* Start CC */
- dtap_cc_setup, /* Setup */
- dtap_cc_modify, /* Modify */
- dtap_cc_modify_complete, /* Modify Complete */
- dtap_cc_modify_rej, /* Modify Reject */
- dtap_cc_user_info, /* User Information */
- NULL /* no associated data */, /* Hold */
- NULL /* no associated data */, /* Hold Acknowledge */
- dtap_cc_hold_rej, /* Hold Reject */
- NULL /* no associated data */, /* Retrieve */
- NULL /* no associated data */, /* Retrieve Acknowledge */
- dtap_cc_retrieve_rej, /* Retrieve Reject */
- dtap_cc_disconnect, /* Disconnect */
- dtap_cc_release, /* Release */
- dtap_cc_release_complete, /* Release Complete */
- dtap_cc_congestion_control, /* Congestion Control */
- dtap_cc_notify, /* Notify */
- dtap_cc_status, /* Status */
- NULL /* no associated data */, /* Status Enquiry */
- dtap_cc_start_dtmf, /* Start DTMF */
- NULL /* no associated data */, /* Stop DTMF */
- NULL /* no associated data */, /* Stop DTMF Acknowledge */
- dtap_cc_start_dtmf_ack, /* Start DTMF Acknowledge */
- dtap_cc_start_dtmf_rej, /* Start DTMF Reject */
- dtap_cc_facility, /* Facility */
- NULL, /* NONE */
+ dtap_cc_alerting, /* Alerting */
+ dtap_cc_call_conf, /* Call Confirmed */
+ dtap_cc_call_proceed, /* Call Proceeding */
+ dtap_cc_connect, /* Connect */
+ NULL /* no associated data */, /* Connect Acknowledge */
+ dtap_cc_emerg_setup, /* Emergency Setup */
+ dtap_cc_progress, /* Progress */
+ dtap_cc_cc_est, /* CC-Establishment */
+ dtap_cc_cc_est_conf, /* CC-Establishment Confirmed */
+ dtap_cc_recall, /* Recall */
+ dtap_cc_start_cc, /* Start CC */
+ dtap_cc_setup, /* Setup */
+ dtap_cc_modify, /* Modify */
+ dtap_cc_modify_complete, /* Modify Complete */
+ dtap_cc_modify_rej, /* Modify Reject */
+ dtap_cc_user_info, /* User Information */
+ NULL /* no associated data */, /* Hold */
+ NULL /* no associated data */, /* Hold Acknowledge */
+ dtap_cc_hold_rej, /* Hold Reject */
+ NULL /* no associated data */, /* Retrieve */
+ NULL /* no associated data */, /* Retrieve Acknowledge */
+ dtap_cc_retrieve_rej, /* Retrieve Reject */
+ dtap_cc_disconnect, /* Disconnect */
+ dtap_cc_release, /* Release */
+ dtap_cc_release_complete, /* Release Complete */
+ dtap_cc_congestion_control, /* Congestion Control */
+ dtap_cc_notify, /* Notify */
+ dtap_cc_status, /* Status */
+ NULL /* no associated data */, /* Status Enquiry */
+ dtap_cc_start_dtmf, /* Start DTMF */
+ NULL /* no associated data */, /* Stop DTMF */
+ NULL /* no associated data */, /* Stop DTMF Acknowledge */
+ dtap_cc_start_dtmf_ack, /* Start DTMF Acknowledge */
+ dtap_cc_start_dtmf_rej, /* Start DTMF Reject */
+ dtap_cc_facility, /* Facility */
+ NULL, /* NONE */
};
-#define NUM_GSM_DTAP_MSG_SMS (sizeof(gsm_a_dtap_msg_sms_strings)/sizeof(value_string))
+#define NUM_GSM_DTAP_MSG_SMS (sizeof(gsm_a_dtap_msg_sms_strings)/sizeof(value_string))
static gint ett_gsm_dtap_msg_sms[NUM_GSM_DTAP_MSG_SMS];
static void (*dtap_msg_sms_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) = {
- dtap_sms_cp_data, /* CP-DATA */
- NULL /* no associated data */, /* CP-ACK */
- dtap_sms_cp_error, /* CP-ERROR */
- NULL, /* NONE */
+ dtap_sms_cp_data, /* CP-DATA */
+ NULL /* no associated data */, /* CP-ACK */
+ dtap_sms_cp_error, /* CP-ERROR */
+ NULL, /* NONE */
};
-#define NUM_GSM_DTAP_MSG_SS (sizeof(gsm_a_dtap_msg_ss_strings)/sizeof(value_string))
+#define NUM_GSM_DTAP_MSG_SS (sizeof(gsm_a_dtap_msg_ss_strings)/sizeof(value_string))
static gint ett_gsm_dtap_msg_ss[NUM_GSM_DTAP_MSG_SS];
static void (*dtap_msg_ss_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) = {
- dtap_cc_release_complete, /* Release Complete */
- dtap_cc_facility, /* Facility */
- dtap_ss_register, /* Register */
- NULL, /* NONE */
+ dtap_cc_release_complete, /* Release Complete */
+ dtap_cc_facility, /* Facility */
+ dtap_ss_register, /* Register */
+ NULL, /* NONE */
};
-#define NUM_GSM_DTAP_MSG_TP (sizeof(gsm_a_dtap_msg_tp_strings)/sizeof(value_string))
+#define NUM_GSM_DTAP_MSG_TP (sizeof(gsm_a_dtap_msg_tp_strings)/sizeof(value_string))
static gint ett_gsm_dtap_msg_tp[NUM_GSM_DTAP_MSG_TP];
static void (*dtap_msg_tp_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint32 offset, guint len) = {
- dtap_tp_close_tch_loop_cmd, /* CLOSE TCH LOOP CMD */
- NULL, /* CLOSE TCH LOOP ACK */
- dtap_tp_open_loop_cmd, /* OPEN LOOP CMD */
- NULL, /* ACT EMMI CMD */
- NULL, /* ACT EMMI ACK */
- NULL, /* DEACT EMMI */
- dtap_tp_test_interface, /* Test Interface */
- dtap_tp_multi_slot_loop_cmd, /* CLOSE Multi-slot LOOP CMD */
- dtap_tp_multi_slot_loop_ack, /* CLOSE Multi-slot LOOP ACK */
- NULL, /* OPEN Multi-slot LOOP CMD */
- NULL, /* OPEN Multi-slot LOOP ACK */
- dtap_tp_gprs_test_mode_cmd, /* GPRS TEST MODE CMD */
- dtap_tp_egprs_start_radio_block_loopback_cmd, /* EGPRS START RADIO BLOCK LOOPBACK CMD */
- dtap_tp_reset_ms_positioning_stored_information, /* RESET MS POSITIONING STORED INFORMATION */
- dtap_tp_close_ue_test_loop, /* CLOSE UE TEST LOOP */
- NULL, /* CLOSE UE TEST LOOP COMPLETE */
- NULL, /* OPEN UE TEST LOOP */
- NULL, /* OPEN UE TEST LOOP COMPLETE */
- NULL, /* ACTIVATE RB TEST MODE */
- NULL, /* ACTIVATE RB TEST MODE COMPLETE */
- NULL, /* DEACTIVATE RB TEST MODE */
- NULL, /* DEACTIVATE RB TEST MODE COMPLETE */
- dtap_tp_reset_ue_positioning_stored_information, /* RESET UE POSITIONING STORED INFORMATION */
- NULL, /* UE TEST LOOP MODE 3 RLC SDU COUNTER REQUEST */
- dtap_tp_ue_test_loop_mode_3_rlc_sdu_counter_response, /* UE TEST LOOP MODE 3 RLC SDU COUNTER RESPONSE */
- dtap_tp_epc_close_ue_test_loop, /* CLOSE UE TEST LOOP */
- NULL, /* CLOSE UE TEST LOOP COMPLETE */
- NULL, /* OPEN UE TEST LOOP */
- NULL, /* OPEN UE TEST LOOP COMPLETE */
- dtap_tp_epc_activate_test_mode, /* ACTIVATE TEST MODE */
- NULL, /* ACTIVATE TEST MODE COMPLETE */
- NULL, /* DEACTIVATE TEST MODE */
- NULL, /* DEACTIVATE TEST MODE COMPLETE */
- dtap_tp_epc_reset_ue_positioning_stored_information, /* RESET UE POSITIONING STORED INFORMATION */
- NULL, /* UE TEST LOOP MODE C MBMS PACKET COUNTER REQUEST */
- dtap_tp_epc_test_loop_mode_c_mbms_packet_counter_response, /* UE TEST LOOP MODE C MBMS PACKET COUNTER RESPONSE */
- dtap_tp_epc_update_ue_location_information, /* UPDATE UE LOCATION INFORMATION */
- NULL, /* NONE */
+ dtap_tp_close_tch_loop_cmd, /* CLOSE TCH LOOP CMD */
+ NULL, /* CLOSE TCH LOOP ACK */
+ dtap_tp_open_loop_cmd, /* OPEN LOOP CMD */
+ NULL, /* ACT EMMI CMD */
+ NULL, /* ACT EMMI ACK */
+ NULL, /* DEACT EMMI */
+ dtap_tp_test_interface, /* Test Interface */
+ dtap_tp_multi_slot_loop_cmd, /* CLOSE Multi-slot LOOP CMD */
+ dtap_tp_multi_slot_loop_ack, /* CLOSE Multi-slot LOOP ACK */
+ NULL, /* OPEN Multi-slot LOOP CMD */
+ NULL, /* OPEN Multi-slot LOOP ACK */
+ dtap_tp_gprs_test_mode_cmd, /* GPRS TEST MODE CMD */
+ dtap_tp_egprs_start_radio_block_loopback_cmd, /* EGPRS START RADIO BLOCK LOOPBACK CMD */
+ dtap_tp_reset_ms_positioning_stored_information, /* RESET MS POSITIONING STORED INFORMATION */
+ dtap_tp_close_ue_test_loop, /* CLOSE UE TEST LOOP */
+ NULL, /* CLOSE UE TEST LOOP COMPLETE */
+ NULL, /* OPEN UE TEST LOOP */
+ NULL, /* OPEN UE TEST LOOP COMPLETE */
+ NULL, /* ACTIVATE RB TEST MODE */
+ NULL, /* ACTIVATE RB TEST MODE COMPLETE */
+ NULL, /* DEACTIVATE RB TEST MODE */
+ NULL, /* DEACTIVATE RB TEST MODE COMPLETE */
+ dtap_tp_reset_ue_positioning_stored_information, /* RESET UE POSITIONING STORED INFORMATION */
+ NULL, /* UE TEST LOOP MODE 3 RLC SDU COUNTER REQUEST */
+ dtap_tp_ue_test_loop_mode_3_rlc_sdu_counter_response, /* UE TEST LOOP MODE 3 RLC SDU COUNTER RESPONSE */
+ dtap_tp_epc_close_ue_test_loop, /* CLOSE UE TEST LOOP */
+ NULL, /* CLOSE UE TEST LOOP COMPLETE */
+ NULL, /* OPEN UE TEST LOOP */
+ NULL, /* OPEN UE TEST LOOP COMPLETE */
+ dtap_tp_epc_activate_test_mode, /* ACTIVATE TEST MODE */
+ NULL, /* ACTIVATE TEST MODE COMPLETE */
+ NULL, /* DEACTIVATE TEST MODE */
+ NULL, /* DEACTIVATE TEST MODE COMPLETE */
+ dtap_tp_epc_reset_ue_positioning_stored_information, /* RESET UE POSITIONING STORED INFORMATION */
+ NULL, /* UE TEST LOOP MODE C MBMS PACKET COUNTER REQUEST */
+ dtap_tp_epc_test_loop_mode_c_mbms_packet_counter_response, /* UE TEST LOOP MODE C MBMS PACKET COUNTER RESPONSE */
+ dtap_tp_epc_update_ue_location_information, /* UPDATE UE LOCATION INFORMATION */
+ NULL, /* NONE */
};
/* GENERIC DISSECTOR FUNCTIONS */
@@ -5837,290 +5838,292 @@ static const true_false_string tfs_ti_flags = { "allocated by receiver", "alloca
static void
dissect_dtap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
- static gsm_a_tap_rec_t tap_rec[4];
- static gsm_a_tap_rec_t *tap_p;
- static guint tap_current = 0;
-
- void (*dtap_msg_fcn)(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len);
-
- guint8 oct;
- guint8 pd;
- guint32 offset;
- guint32 len;
- guint32 oct_1;
- gint idx;
- proto_item *dtap_item = NULL;
- proto_tree *dtap_tree = NULL;
- proto_item *oct_1_item = NULL;
- proto_tree *pd_tree = NULL;
- const gchar *msg_str;
- gint ett_tree;
- gint ti;
- int hf_idx;
- gboolean nsd;
-
-
- len = tvb_length(tvb);
-
- if (len < 2)
- {
- /*
- * too short to be DTAP
- */
- call_dissector(data_handle, tvb, pinfo, tree);
- return;
- }
-
- col_append_str(pinfo->cinfo, COL_INFO, "(DTAP) ");
-
- /*
- * set tap record pointer
- */
- tap_current++;
- if (tap_current >= 4)
- {
- tap_current = 0;
- }
- tap_p = &tap_rec[tap_current];
-
-
- offset = 0;
-
- g_tree = tree;
-
- /*
- * get protocol discriminator
- */
- oct_1 = tvb_get_guint8(tvb, offset++);
-
- if ((((oct_1 & DTAP_TI_MASK) >> 4) & DTAP_TIE_PRES_MASK) == DTAP_TIE_PRES_MASK)
- {
- /*
- * eventhough we don't know if a TI should be in the message yet
- * we rely on the TI/SKIP indicator to be 0 to avoid taking this
- * octet
- */
- offset++;
- }
-
- oct = tvb_get_guint8(tvb, offset);
-
- pd = oct_1 & DTAP_PD_MASK;
- ti = -1;
- msg_str = NULL;
- ett_tree = -1;
- hf_idx = -1;
- dtap_msg_fcn = NULL;
- nsd = FALSE;
- col_append_fstr(pinfo->cinfo, COL_INFO, "(%s) ",val_to_str_const(pd,gsm_a_pd_short_str_vals,"unknown"));
-
- /*
- * octet 1
- */
- /* Initialize hf_idx, ett_tree and dtap_msg_fcn.
- ett_tree and dtap_msg_fcn will not be used if msg_str == NULL. */
- switch (pd)
- {
- case 3:
- msg_str = try_val_to_str_idx((guint32) (oct & DTAP_CC_IEI_MASK), gsm_a_dtap_msg_cc_strings, &idx);
- if (msg_str != NULL)
- {
- ett_tree = ett_gsm_dtap_msg_cc[idx];
- dtap_msg_fcn = dtap_msg_cc_fcn[idx];
- }
- hf_idx = hf_gsm_a_dtap_msg_cc_type;
- ti = (oct_1 & DTAP_TI_MASK) >> 4;
- nsd = TRUE;
- break;
-
- case 5:
- msg_str = try_val_to_str_idx((guint32) (oct & DTAP_MM_IEI_MASK), gsm_a_dtap_msg_mm_strings, &idx);
- if (msg_str != NULL)
- {
- ett_tree = ett_gsm_dtap_msg_mm[idx];
- dtap_msg_fcn = dtap_msg_mm_fcn[idx];
- }
- hf_idx = hf_gsm_a_dtap_msg_mm_type;
- nsd = TRUE;
- break;
-
- case 6:
- get_rr_msg_params(oct, &msg_str, &ett_tree, &hf_idx, &dtap_msg_fcn);
- break;
-
- case 8:
- get_gmm_msg_params(oct, &msg_str, &ett_tree, &hf_idx, &dtap_msg_fcn);
- break;
-
- case 9:
- msg_str = try_val_to_str_idx((guint32) (oct & DTAP_SMS_IEI_MASK), gsm_a_dtap_msg_sms_strings, &idx);
- hf_idx = hf_gsm_a_dtap_msg_sms_type;
- if (msg_str != NULL)
- {
- ett_tree = ett_gsm_dtap_msg_sms[idx];
- dtap_msg_fcn = dtap_msg_sms_fcn[idx];
- }
- ti = (oct_1 & DTAP_TI_MASK) >> 4;
- break;
-
- case 10:
- get_sm_msg_params(oct, &msg_str, &ett_tree, &hf_idx, &dtap_msg_fcn);
- ti = (oct_1 & DTAP_TI_MASK) >> 4;
- break;
-
- case 11:
- msg_str = try_val_to_str_idx((guint32) (oct & DTAP_SS_IEI_MASK), gsm_a_dtap_msg_ss_strings, &idx);
- hf_idx = hf_gsm_a_dtap_msg_ss_type;
- if (msg_str != NULL)
- {
- ett_tree = ett_gsm_dtap_msg_ss[idx];
- dtap_msg_fcn = dtap_msg_ss_fcn[idx];
- }
- ti = (oct_1 & DTAP_TI_MASK) >> 4;
- nsd = TRUE;
- break;
-
- case 15:
- msg_str = try_val_to_str_idx((guint32) (oct & DTAP_TP_IEI_MASK), gsm_a_dtap_msg_tp_strings, &idx);
- hf_idx = hf_gsm_a_dtap_msg_tp_type;
- if (msg_str != NULL)
- {
- ett_tree = ett_gsm_dtap_msg_tp[idx];
- dtap_msg_fcn = dtap_msg_tp_fcn[idx];
- }
- nsd = TRUE;
- break;
-
- default:
- /* XXX - hf_idx is still -1! this is a bug in the implementation, and I don't know how to fix it so simple return here */
- return;
- }
-
- sccp_msg = pinfo->sccp_info;
-
- if (sccp_msg && sccp_msg->data.co.assoc) {
- sccp_assoc = sccp_msg->data.co.assoc;
- } else {
- sccp_assoc = NULL;
- sccp_msg = NULL;
- }
-
- /*
- * create the protocol tree
- */
- if (msg_str == NULL)
- {
- dtap_item =
- proto_tree_add_protocol_format(tree, proto_a_dtap, tvb, 0, len,
- "GSM A-I/F DTAP - Unknown DTAP Message Type (0x%02x)",
- oct);
-
- dtap_tree = proto_item_add_subtree(dtap_item, ett_dtap_msg);
-
- if (sccp_msg && !sccp_msg->data.co.label) {
- sccp_msg->data.co.label = wmem_strdup_printf(wmem_file_scope(), "DTAP (0x%02x)",oct);
- }
-
-
- }
- else
- {
- dtap_item =
- proto_tree_add_protocol_format(tree, proto_a_dtap, tvb, 0, -1,
- "GSM A-I/F DTAP - %s",
- msg_str);
-
- dtap_tree = proto_item_add_subtree(dtap_item, ett_tree);
-
- if (sccp_msg && !sccp_msg->data.co.label) {
- sccp_msg->data.co.label = wmem_strdup(wmem_file_scope(), msg_str);
- }
-
- col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", msg_str);
- col_set_fence(pinfo->cinfo, COL_INFO);
- }
-
- oct_1_item = proto_tree_add_uint(dtap_tree, hf_gsm_a_dtap_protocol_discriminator, tvb, 0, 1, pd);
- pd_tree = proto_item_add_subtree(oct_1_item, ett_dtap_oct_1);
-
- proto_tree_add_item(pd_tree, hf_gsm_a_L3_protocol_discriminator, tvb, 0, 1, ENC_BIG_ENDIAN);
-
- if (ti == -1)
- {
- proto_tree_add_item(pd_tree, hf_gsm_a_skip_ind, tvb, 0, 1, ENC_BIG_ENDIAN);
- }
- else
- {
-
- proto_tree_add_item(pd_tree, hf_gsm_a_dtap_ti_flag, tvb, 0, 1, ENC_NA);
-
- if ((ti & DTAP_TIE_PRES_MASK) == DTAP_TIE_PRES_MASK)
- {
- /* ti is extended to next octet */
- proto_tree_add_uint_format_value(pd_tree, hf_gsm_a_dtap_tio, tvb, 0, 1,
- oct_1, "The TI value is given by the TIE in octet 2");
- }
- else
- {
- proto_tree_add_item(pd_tree, hf_gsm_a_dtap_tio, tvb, 0, 1, ENC_NA);
- }
- }
-
- if ((ti != -1) &&
- (ti & DTAP_TIE_PRES_MASK) == DTAP_TIE_PRES_MASK)
- {
- proto_tree_add_item(tree, hf_gsm_a_extension, tvb, 1, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(pd_tree, hf_gsm_a_dtap_tie, tvb, 1, 1, ENC_NA);
- }
-
- /*
- * N(SD)
- */
- if ((pinfo->p2p_dir == P2P_DIR_RECV) &&
- nsd)
- {
- /* XXX */
- }
- /* 3GPP TS 24.008 version 8.5.0 Release 8
- * Bits 5 to 8 of the first octet of every message belonging to the protocols "Call Control;
- * call related SS messages" and "Session Management"contain the transaction identifier (TI).
- * The transaction identifier and its use are defined in 3GPP TS 24.007 [20].
- * 5 = Mobility Management messages
- * 3 = Call Control; call related SS messages
- * 10 = GPRS session management messages
- */
- if((pd==5)||(pd==3)||(pd==10)){
- proto_tree_add_item(dtap_tree, hf_gsm_a_seq_no, tvb, offset, 1, ENC_BIG_ENDIAN);
- }
- /*
- * add DTAP message name
- */
- proto_tree_add_item(dtap_tree, hf_idx, tvb, offset, 1, ENC_BIG_ENDIAN);
- offset++;
-
- tap_p->pdu_type = GSM_A_PDU_TYPE_DTAP;
- tap_p->message_type = (nsd ? (oct & 0x3f) : oct);
- tap_p->protocol_disc = (gsm_a_pd_str_e)pd;
-
- tap_queue_packet(gsm_a_tap, pinfo, tap_p);
-
- if (msg_str == NULL) return;
-
- if (offset >= len) return;
-
- /*
- * decode elements
- */
- if (dtap_msg_fcn == NULL)
- {
- proto_tree_add_text(dtap_tree,
- tvb, offset, len - offset,
- "Message Elements");
- }
- else
- {
- (*dtap_msg_fcn)(tvb, dtap_tree, pinfo, offset, len - offset);
- }
+ static gsm_a_tap_rec_t tap_rec[4];
+ static gsm_a_tap_rec_t *tap_p;
+ static guint tap_current = 0;
+
+ void (*dtap_msg_fcn)(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guint len);
+
+ guint8 oct;
+ guint8 pd;
+ guint32 offset;
+ guint32 len;
+ guint32 oct_1;
+ gint idx;
+ proto_item *dtap_item = NULL;
+ proto_tree *dtap_tree = NULL;
+ proto_item *oct_1_item = NULL;
+ proto_tree *pd_tree = NULL;
+ const gchar *msg_str;
+ gint ett_tree;
+ gint ti;
+ int hf_idx;
+ gboolean nsd;
+
+
+ len = tvb_reported_length(tvb);
+
+ if (len < 2)
+ {
+ /*
+ * too short to be DTAP
+ */
+ call_dissector(data_handle, tvb, pinfo, tree);
+ return;
+ }
+
+ col_append_str(pinfo->cinfo, COL_INFO, "(DTAP) ");
+
+ /*
+ * set tap record pointer
+ */
+ tap_current++;
+ if (tap_current >= 4)
+ {
+ tap_current = 0;
+ }
+ tap_p = &tap_rec[tap_current];
+
+
+ offset = 0;
+
+ g_tree = tree;
+
+ /*
+ * get protocol discriminator
+ */
+ oct_1 = tvb_get_guint8(tvb, offset++);
+
+ if ((((oct_1 & DTAP_TI_MASK) >> 4) & DTAP_TIE_PRES_MASK) == DTAP_TIE_PRES_MASK)
+ {
+ /*
+ * eventhough we don't know if a TI should be in the message yet
+ * we rely on the TI/SKIP indicator to be 0 to avoid taking this
+ * octet
+ */
+ offset++;
+ }
+
+ oct = tvb_get_guint8(tvb, offset);
+
+ pd = oct_1 & DTAP_PD_MASK;
+ ti = -1;
+ msg_str = NULL;
+ ett_tree = -1;
+ hf_idx = -1;
+ dtap_msg_fcn = NULL;
+ nsd = FALSE;
+ col_append_fstr(pinfo->cinfo, COL_INFO, "(%s) ",val_to_str_const(pd,gsm_a_pd_short_str_vals,"unknown"));
+
+ /*
+ * octet 1
+ */
+ /* Initialize hf_idx, ett_tree and dtap_msg_fcn.
+ ett_tree and dtap_msg_fcn will not be used if msg_str == NULL. */
+ switch (pd)
+ {
+ case 3:
+ msg_str = try_val_to_str_idx((guint32) (oct & DTAP_CC_IEI_MASK), gsm_a_dtap_msg_cc_strings, &idx);
+ if (msg_str != NULL)
+ {
+ ett_tree = ett_gsm_dtap_msg_cc[idx];
+ dtap_msg_fcn = dtap_msg_cc_fcn[idx];
+ }
+ hf_idx = hf_gsm_a_dtap_msg_cc_type;
+ ti = (oct_1 & DTAP_TI_MASK) >> 4;
+ nsd = TRUE;
+ break;
+
+ case 5:
+ msg_str = try_val_to_str_idx((guint32) (oct & DTAP_MM_IEI_MASK), gsm_a_dtap_msg_mm_strings, &idx);
+ if (msg_str != NULL)
+ {
+ ett_tree = ett_gsm_dtap_msg_mm[idx];
+ dtap_msg_fcn = dtap_msg_mm_fcn[idx];
+ }
+ hf_idx = hf_gsm_a_dtap_msg_mm_type;
+ nsd = TRUE;
+ break;
+
+ case 6:
+ get_rr_msg_params(oct, &msg_str, &ett_tree, &hf_idx, &dtap_msg_fcn);
+ break;
+
+ case 8:
+ get_gmm_msg_params(oct, &msg_str, &ett_tree, &hf_idx, &dtap_msg_fcn);
+ break;
+
+ case 9:
+ msg_str = try_val_to_str_idx((guint32) (oct & DTAP_SMS_IEI_MASK), gsm_a_dtap_msg_sms_strings, &idx);
+ hf_idx = hf_gsm_a_dtap_msg_sms_type;
+ if (msg_str != NULL)
+ {
+ ett_tree = ett_gsm_dtap_msg_sms[idx];
+ dtap_msg_fcn = dtap_msg_sms_fcn[idx];
+ }
+ ti = (oct_1 & DTAP_TI_MASK) >> 4;
+ break;
+
+ case 10:
+ get_sm_msg_params(oct, &msg_str, &ett_tree, &hf_idx, &dtap_msg_fcn);
+ ti = (oct_1 & DTAP_TI_MASK) >> 4;
+ break;
+
+ case 11:
+ msg_str = try_val_to_str_idx((guint32) (oct & DTAP_SS_IEI_MASK), gsm_a_dtap_msg_ss_strings, &idx);
+ hf_idx = hf_gsm_a_dtap_msg_ss_type;
+ if (msg_str != NULL)
+ {
+ ett_tree = ett_gsm_dtap_msg_ss[idx];
+ dtap_msg_fcn = dtap_msg_ss_fcn[idx];
+ }
+ ti = (oct_1 & DTAP_TI_MASK) >> 4;
+ nsd = TRUE;
+ break;
+
+ case 15:
+ msg_str = try_val_to_str_idx((guint32) (oct & DTAP_TP_IEI_MASK), gsm_a_dtap_msg_tp_strings, &idx);
+ hf_idx = hf_gsm_a_dtap_msg_tp_type;
+ if (msg_str != NULL)
+ {
+ ett_tree = ett_gsm_dtap_msg_tp[idx];
+ dtap_msg_fcn = dtap_msg_tp_fcn[idx];
+ }
+ nsd = TRUE;
+ break;
+
+ default:
+ /* XXX - hf_idx is still -1! this is a bug in the implementation, and I don't know how to fix it so simple return here */
+ return;
+ }
+
+ sccp_msg = pinfo->sccp_info;
+
+ if (sccp_msg && sccp_msg->data.co.assoc) {
+ sccp_assoc = sccp_msg->data.co.assoc;
+ }
+ else
+ {
+ sccp_assoc = NULL;
+ sccp_msg = NULL;
+ }
+
+ /*
+ * create the protocol tree
+ */
+ if (msg_str == NULL)
+ {
+ dtap_item =
+ proto_tree_add_protocol_format(tree, proto_a_dtap, tvb, 0, len,
+ "GSM A-I/F DTAP - Unknown DTAP Message Type (0x%02x)",
+ oct);
+
+ dtap_tree = proto_item_add_subtree(dtap_item, ett_dtap_msg);
+
+ if (sccp_msg && !sccp_msg->data.co.label) {
+ sccp_msg->data.co.label = wmem_strdup_printf(wmem_file_scope(), "DTAP (0x%02x)",oct);
+ }
+
+
+ }
+ else
+ {
+ dtap_item =
+ proto_tree_add_protocol_format(tree, proto_a_dtap, tvb, 0, -1,
+ "GSM A-I/F DTAP - %s",
+ msg_str);
+
+ dtap_tree = proto_item_add_subtree(dtap_item, ett_tree);
+
+ if (sccp_msg && !sccp_msg->data.co.label) {
+ sccp_msg->data.co.label = wmem_strdup(wmem_file_scope(), msg_str);
+ }
+
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", msg_str);
+ col_set_fence(pinfo->cinfo, COL_INFO);
+ }
+
+ oct_1_item = proto_tree_add_uint(dtap_tree, hf_gsm_a_dtap_protocol_discriminator, tvb, 0, 1, pd);
+ pd_tree = proto_item_add_subtree(oct_1_item, ett_dtap_oct_1);
+
+ proto_tree_add_item(pd_tree, hf_gsm_a_L3_protocol_discriminator, tvb, 0, 1, ENC_BIG_ENDIAN);
+
+ if (ti == -1)
+ {
+ proto_tree_add_item(pd_tree, hf_gsm_a_skip_ind, tvb, 0, 1, ENC_BIG_ENDIAN);
+ }
+ else
+ {
+
+ proto_tree_add_item(pd_tree, hf_gsm_a_dtap_ti_flag, tvb, 0, 1, ENC_NA);
+
+ if ((ti & DTAP_TIE_PRES_MASK) == DTAP_TIE_PRES_MASK)
+ {
+ /* ti is extended to next octet */
+ proto_tree_add_uint_format_value(pd_tree, hf_gsm_a_dtap_tio, tvb, 0, 1,
+ oct_1, "The TI value is given by the TIE in octet 2");
+ }
+ else
+ {
+ proto_tree_add_item(pd_tree, hf_gsm_a_dtap_tio, tvb, 0, 1, ENC_NA);
+ }
+ }
+
+ if ((ti != -1) &&
+ (ti & DTAP_TIE_PRES_MASK) == DTAP_TIE_PRES_MASK)
+ {
+ proto_tree_add_item(tree, hf_gsm_a_extension, tvb, 1, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(pd_tree, hf_gsm_a_dtap_tie, tvb, 1, 1, ENC_NA);
+ }
+
+ /*
+ * N(SD)
+ */
+ if ((pinfo->p2p_dir == P2P_DIR_RECV) &&
+ nsd)
+ {
+ /* XXX */
+ }
+ /* 3GPP TS 24.008 version 8.5.0 Release 8
+ * Bits 5 to 8 of the first octet of every message belonging to the protocols "Call Control;
+ * call related SS messages" and "Session Management"contain the transaction identifier (TI).
+ * The transaction identifier and its use are defined in 3GPP TS 24.007 [20].
+ * 5 = Mobility Management messages
+ * 3 = Call Control; call related SS messages
+ * 10 = GPRS session management messages
+ */
+ if ((pd == 5) || (pd == 3) || (pd == 10)) {
+ proto_tree_add_item(dtap_tree, hf_gsm_a_seq_no, tvb, offset, 1, ENC_BIG_ENDIAN);
+ }
+ /*
+ * add DTAP message name
+ */
+ proto_tree_add_item(dtap_tree, hf_idx, tvb, offset, 1, ENC_BIG_ENDIAN);
+ offset++;
+
+ tap_p->pdu_type = GSM_A_PDU_TYPE_DTAP;
+ tap_p->message_type = (nsd ? (oct & 0x3f) : oct);
+ tap_p->protocol_disc = (gsm_a_pd_str_e)pd;
+
+ tap_queue_packet(gsm_a_tap, pinfo, tap_p);
+
+ if (msg_str == NULL) return;
+
+ if (offset >= len) return;
+
+ /*
+ * decode elements
+ */
+ if (dtap_msg_fcn == NULL)
+ {
+ proto_tree_add_text(dtap_tree,
+ tvb, offset, len - offset,
+ "Message Elements");
+ }
+ else
+ {
+ (*dtap_msg_fcn)(tvb, dtap_tree, pinfo, offset, len - offset);
+ }
}
@@ -6128,696 +6131,1077 @@ dissect_dtap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
void
proto_register_gsm_a_dtap(void)
{
- guint i;
- guint last_offset;
-
- /* Setup list of header fields */
-
- static hf_register_info hf[] =
- {
- { &hf_gsm_a_seq_no,
- { "Sequence number", "gsm_a.dtap.seq_no",
- FT_UINT8, BASE_DEC, NULL, 0xc0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_msg_mm_type,
- { "DTAP Mobility Management Message Type", "gsm_a.dtap.msg_mm_type",
- FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_mm_strings), 0x3f,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_msg_cc_type,
- { "DTAP Call Control Message Type", "gsm_a.dtap.msg_cc_type",
- FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_cc_strings), 0x3f,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_msg_sms_type,
- { "DTAP Short Message Service Message Type", "gsm_a.dtap.msg_sms_type",
- FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_sms_strings), 0x0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_msg_ss_type,
- { "DTAP Non call Supplementary Service Message Type", "gsm_a.dtap.msg_ss_type",
- FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_ss_strings), 0x3f,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_msg_tp_type,
- { "DTAP Tests Procedures Message Type", "gsm_a.dtap.msg_tp_type",
- FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_tp_strings), 0x0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_elem_id,
- { "Element ID", "gsm_a.dtap.elem_id",
- FT_UINT8, BASE_HEX, NULL, 0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_cld_party_bcd_num,
- { "Called Party BCD Number", "gsm_a.dtap.cld_party_bcd_num",
- FT_STRING, BASE_NONE, 0, 0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_clg_party_bcd_num,
- { "Calling Party BCD Number", "gsm_a.dtap.clg_party_bcd_num",
- FT_STRING, BASE_NONE, 0, 0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_conn_num,
- { "Connected Number", "gsm_a.dtap.conn_num",
- FT_STRING, BASE_NONE, 0, 0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_red_party_bcd_num,
- { "Redirecting Party BCD Number", "gsm_a.dtap.red_party_bcd_num",
- FT_STRING, BASE_NONE, 0, 0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_cause,
- { "DTAP Cause", "gsm_a.dtap.cause",
- FT_UINT8, BASE_HEX, 0, 0x7f,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_type_of_number,
- { "Type of number", "gsm_a.dtap.type_of_number",
- FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_type_of_number_values), 0x70,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_numbering_plan_id,
- { "Numbering plan identification", "gsm_a.dtap.numbering_plan_id",
- FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_numbering_plan_id_values), 0x0f,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_present_ind,
- { "Presentation indicator", "gsm_a.dtap.present_ind",
- FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_present_ind_values), 0x60,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_screening_ind,
- { "Screening indicator", "gsm_a.dtap.screening_ind",
- FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_screening_ind_values), 0x03,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_type_of_sub_addr,
- { "Type of subaddress", "gsm_a.dtap.type_of_sub_addr",
- FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_type_of_sub_addr_values), 0x70,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_odd_even_ind,
- { "Odd/even indicator", "gsm_a.dtap.odd_even_ind",
- FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_odd_even_ind_values), 0x08,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_lsa_id,
- { "LSA Identifier", "gsm_a.dtap.lsa_id",
- FT_UINT24, BASE_HEX, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_speech_vers_ind,
- { "Speech version indication", "gsm_a.dtap.speech_vers_ind",
- FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_speech_vers_ind_values), 0x0f,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_itc,
- { "Information transfer capability", "gsm_a.dtap.itc",
- FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_itc_values), 0x07,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_sysid,
- { "System Identification (SysID)", "gsm_a.dtap.sysid",
- FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_sysid_values), 0x0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_bitmap_length,
- { "Bitmap Length", "gsm_a.dtap.bitmap_length",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_serv_cat_b7,
- { "Automatically initiated eCall", "gsm_a.dtap.serv_cat_b7",
- FT_BOOLEAN, 8, NULL, 0x40,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_serv_cat_b6,
- { "Manually initiated eCall", "gsm_a.dtap.serv_cat_b6",
- FT_BOOLEAN, 8, NULL, 0x20,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_serv_cat_b5,
- { "Mountain Rescue", "gsm_a.dtap.serv_cat_b5",
- FT_BOOLEAN, 8, NULL, 0x10,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_serv_cat_b4,
- { "Marine Guard", "gsm_a.dtap.serv_cat_b4",
- FT_BOOLEAN, 8, NULL, 0x08,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_serv_cat_b3,
- { "Fire Brigade", "gsm_a.dtap.serv_cat_b3",
- FT_BOOLEAN, 8, NULL, 0x04,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_serv_cat_b2,
- { "Ambulance", "gsm_a.dtap.serv_cat_b2",
- FT_BOOLEAN, 8, NULL, 0x02,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_serv_cat_b1,
- { "Police", "gsm_a.dtap.serv_cat_b1",
- FT_BOOLEAN, 8, NULL, 0x01,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_csmo,
- { "CSMO", "gsm_a.dtap.csmo",
- FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_dtap_csmo_value), 0x0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_csmt,
- { "CSMT", "gsm_a.dtap.csmt",
- FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_dtap_csmt_value), 0x0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_mm_timer_unit,
- { "Unit", "gsm_a.dtap.mm_timer_unit",
- FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_mm_timer_unit_vals), 0xe0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_mm_timer_value,
- { "Timer value", "gsm_a.dtap.mm_timer_value",
- FT_UINT8, BASE_DEC, NULL, 0x1f,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_alerting_pattern,
- { "Alerting Pattern", "gsm_a.dtap.alerting_pattern",
- FT_UINT8, BASE_DEC, VALS(gsm_a_alerting_pattern_vals), 0x0f,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_ccbs_activation,
- { "CCBS Activation", "gsm_a.dtap.ccbs_activation",
- FT_BOOLEAN, 8, TFS(&gsm_a_ccbs_activation_value), 0x80,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_stream_identifier,
- { "Stream Identifier", "gsm_a.dtap.stream_identifier",
- FT_UINT8, BASE_HEX, 0, 0x0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_mcs,
- { "MCS", "gsm_a.dtap.mcs",
- FT_BOOLEAN, 8, TFS(&gsm_a_mcs_value), 0x01,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_cause_of_no_cli,
- { "Cause of no CLI", "gsm_a.dtap.cause_of_no_cli",
- FT_UINT8, BASE_HEX, 0, 0x0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_cause_ss_diagnostics,
- { "Supplementary Services Diagnostics", "gsm_a.dtap.cause_ss_diagnostics",
- FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_cause_ss_diagnostics_vals), 0x7f,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_codec_tdma_efr,
- { "TDMA EFR", "gsm_a.dtap.codec.tdma_efr",
- FT_BOOLEAN, 8, NULL, 0x80,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_codec_umts_amr_2,
- { "UMTS AMR 2", "gsm_a.dtap.codec.umts_amr_2",
- FT_BOOLEAN, 8, NULL, 0x40,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_codec_umts_amr,
- { "UMTS AMR", "gsm_a.dtap.codec.umts_amr",
- FT_BOOLEAN, 8, NULL, 0x20,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_codec_hr_amr,
- { "HR AMR", "gsm_a.dtap.codec.hr_amr",
- FT_BOOLEAN, 8, NULL, 0x10,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_codec_fr_amr,
- { "FR AMR", "gsm_a.dtap.codec.fr_amr",
- FT_BOOLEAN, 8, NULL, 0x08,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_codec_gsm_efr,
- { "GSM EFR", "gsm_a.dtap.codec.gsm_efr",
- FT_BOOLEAN, 8, NULL, 0x04,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_codec_gsm_hr,
- { "GSM HR", "gsm_a.dtap.codec.gsm_hr",
- FT_BOOLEAN, 8, NULL, 0x02,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_codec_gsm_fr,
- { "GSM FR", "gsm_a.dtap.codec.gsm_fr",
- FT_BOOLEAN, 8, NULL, 0x01,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_codec_ohr_amr_wb,
- { "OHR AMR-WB", "gsm_a.dtap.codec.ohr_amr_wb",
- FT_BOOLEAN, 8, NULL, 0x20,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_codec_ofr_amr_wb,
- { "OFR AMR-WB", "gsm_a.dtap.codec.ofr_amr_wb",
- FT_BOOLEAN, 8, NULL, 0x10,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_codec_ohr_amr,
- { "OHR AMR", "gsm_a.dtap.codec.ohr_amr",
- FT_BOOLEAN, 8, NULL, 0x08,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_codec_umts_amr_wb,
- { "UMTS AMR-WB", "gsm_a.dtap.codec.umts_amr_wb",
- FT_BOOLEAN, 8, NULL, 0x04,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_codec_fr_amr_wb,
- { "FR AMR-WB", "gsm_a.dtap.codec.fr_amr_wb",
- FT_BOOLEAN, 8, NULL, 0x02,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_codec_pdc_efr,
- { "PDC EFR", "gsm_a.dtap.codec.pdc_efr",
- FT_BOOLEAN, 8, NULL, 0x01,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_notification_description,
- { "Notification description", "gsm_a.dtap.notif_descr",
- FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_notification_description_vals), 0x7f,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_emerg_num_info_length,
- { "Emergency Number Info length", "gsm_a.dtap.emerg_num_info_length",
- FT_UINT8, BASE_DEC, 0, 0x0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_emergency_bcd_num,
- { "Emergency BCD Number", "gsm_a.dtap.emergency_bcd_num",
- FT_STRING, BASE_NONE, 0, 0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_signal_value,
- { "Signal value", "gsm_a.dtap.signal_value",
- FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_signal_value_vals), 0x0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_recall_type,
- { "Recall type", "gsm_a.dtap.recall_type",
- FT_UINT8, BASE_HEX|BASE_RANGE_STRING, RVALS(gsm_a_dtap_recall_type_vals), 0x07,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_coding_standard,
- { "Coding standard", "gsm_a.dtap.coding_standard",
- FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_coding_standard_vals), 0xc0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_call_state,
- { "Call state", "gsm_a.dtap.call_state",
- FT_UINT8, BASE_DEC, NULL, 0x3f,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_prog_coding_standard,
- { "Coding standard", "gsm_a.dtap.coding_standard",
- FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_coding_standard_vals), 0x60,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_location,
- { "Location", "gsm_a.dtap.location",
- FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_location_vals), 0x0f,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_progress_description,
- { "Progress description", "gsm_a.dtap.progress_description",
- FT_UINT8, BASE_DEC, NULL, 0x7f,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_afi,
- { "Authority and Format Identifier", "gsm_a.dtap.afi",
- FT_UINT8, BASE_HEX|BASE_EXT_STRING, &x213_afi_value_ext, 0x0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_rej_cause,
- { "Reject cause", "gsm_a.dtap.rej_cause",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_u2u_prot_discr,
- { "User-user protocol discriminator", "gsm_a.dtap.u2u_prot_discr",
- FT_UINT8, BASE_HEX|BASE_RANGE_STRING, RVALS(gsm_a_dtap_u2u_prot_discr_vals), 0x00,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_mcat,
- { "MCAT", "gsm_a.dtap.mcat",
- FT_BOOLEAN, 8, TFS(&gsm_a_dtap_mcat_value), 0x08,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_enicm,
- { "ENICM", "gsm_a.dtap.mcat",
- FT_BOOLEAN, 8, TFS(&gsm_a_dtap_enicm_value), 0x04,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_rand,
- { "RAND value", "gsm_a.dtap.rand",
- FT_BYTES, FT_NONE, NULL, 0x00,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_autn,
- { "AUTN value", "gsm_a.dtap.autn",
- FT_BYTES, FT_NONE, NULL, 0x00,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_sres,
- { "SRES value", "gsm_a.dtap.sres",
- FT_BYTES, FT_NONE, NULL, 0x00,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_xres,
- { "XRES value", "gsm_a.dtap.xres",
- FT_BYTES, FT_NONE, NULL, 0x00,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_auts,
- { "AUTS value", "gsm_a.dtap.auts",
- FT_BYTES, FT_NONE, NULL, 0x00,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_autn_sqn_xor_ak,
- { "SQN xor AK", "gsm_a.dtap.autn.sqn_xor_ak",
- FT_BYTES, FT_NONE, NULL, 0x00,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_autn_amf,
- { "AMF", "gsm_a.dtap.autn.amf",
- FT_BYTES, FT_NONE, NULL, 0x00,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_autn_mac,
- { "MAC", "gsm_a.dtap.autn.mac",
- FT_BYTES, FT_NONE, NULL, 0x00,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_auts_sqn_ms_xor_ak,
- { "SQN_MS xor AK", "gsm_a.dtap.auts.sqn_ms_xor_ak",
- FT_BYTES, FT_NONE, NULL, 0x00,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_auts_mac_s,
- { "MAC-S", "gsm_a.dtap.auts.mac_s",
- FT_BYTES, FT_NONE, NULL, 0x00,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_epc_ue_tl_mode,
- { "UE test loop mode","gsm_a.dtap.epc.ue_tl_mode",
- FT_UINT8,BASE_DEC, VALS(epc_ue_test_loop_mode_vals), 0x0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_epc_ue_tl_a_ul_sdu_size,
- { "Uplink PDCP SDU size in bits","gsm_a.dtap.epc.ue_tl_a_ul_sdu_size",
- FT_UINT16,BASE_DEC, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_epc_ue_tl_a_drb,
- { "Data Radio Bearer identity number","gsm_a.dtap.epc.ue_tl_a_drb",
- FT_UINT8,BASE_DEC, NULL, 0x1f,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_epc_ue_tl_b_ip_pdu_delay,
- { "IP PDU delay in seconds","gsm_a.dtap.epc.ue_tl_b_ip_pdu_delay",
- FT_UINT8,BASE_DEC, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_epc_ue_tl_c_mbsfn_area_id,
- { "MBSFN area identity","gsm_a.dtap.epc.ue_tl_c_mbsfn_area_id",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_epc_ue_tl_c_mch_id,
- { "MCH identity","gsm_a.dtap.epc.ue_tl_c_mch_id",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_epc_ue_tl_c_lcid,
- { "Logical channel identity","gsm_a.dtap.epc.ue_tl_c_lcid",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_epc_ue_positioning_technology,
- { "UE positioning technology","gsm_a.dtap.epc.ue_positioning_technology",
- FT_UINT8, BASE_DEC, VALS(epc_ue_positioning_technology_vals), 0x0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_epc_mbms_packet_counter_value,
- { "MBMS packet counter value","gsm_a.dtap.epc.mbms_packet_counter_value",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_epc_latitude_sign,
- { "Latitude Sign","gsm_a.dtap.epc.latitude_sign",
- FT_BOOLEAN, BASE_NONE, TFS(&epc_latitude_sign_value), 0x0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_epc_degrees_latitude,
- { "Degrees Latitude","gsm_a.dtap.epc.degrees_latitude",
- FT_UINT24, BASE_DEC, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_epc_degrees_longitude,
- { "Degrees Longitude","gsm_a.dtap.epc.degrees_longitude",
- FT_INT24, BASE_DEC, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_epc_altitude_dir,
- { "Altitude Direction","gsm_a.dtap.epc.altitude_direction",
- FT_BOOLEAN, BASE_NONE, TFS(&epc_altitude_dir_value), 0x0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_epc_altitude,
- { "Altitude","gsm_a.dtap.epc.altitude",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_epc_bearing,
- { "Bearing","gsm_a.dtap.epc.bearing",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_epc_horizontal_speed,
- { "Horizontal Speed","gsm_a.dtap.epc.horizontal_speed",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL, HFILL }
- },
- { &hf_gsm_a_dtap_epc_gnss_tod_msec,
- { "GNSS-TOD-msec","gsm_a.dtap.epc.gnss_tod_msec",
- FT_UINT24, BASE_DEC, NULL, 0x0,
- NULL, HFILL }
- },
- /* Generated from convert_proto_tree_add_text.pl */
- { &hf_gsm_a_dtap_coding_scheme, { "Coding Scheme", "gsm_a.dtap.coding_scheme", FT_UINT8, BASE_DEC, NULL, 0x70, NULL, HFILL }},
- { &hf_gsm_a_dtap_add_ci, { "Add CI", "gsm_a.dtap.add_ci", FT_BOOLEAN, 8, TFS(&tfs_add_ci), 0x08, NULL, HFILL }},
- { &hf_gsm_a_dtap_number_of_spare_bits, { "Number of spare bits in last octet", "gsm_a.dtap.number_of_spare_bits", FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_number_of_spare_bits_vals), 0x07, NULL, HFILL }},
- { &hf_gsm_a_dtap_text_string, { "Text String", "gsm_a.dtap.text_string", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- { &hf_gsm_a_dtap_time_zone_time, { "Time", "gsm_a.dtap.time_zone_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0, NULL, HFILL }},
- { &hf_gsm_a_dtap_dst_adjustment, { "DST Adjustment", "gsm_a.dtap.dst_adjustment", FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_dst_adjustment_vals), 0x03, NULL, HFILL }},
- { &hf_gsm_a_dtap_emergency_number_information, { "Emergency Number Information", "gsm_a.dtap.emergency_number_information", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_gsm_a_dtap_mm_timer, { "MM Timer", "gsm_a.dtap.mm_timer", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
- { &hf_gsm_a_dtap_hold_auxiliary_state, { "Hold auxiliary state", "gsm_a.dtap.hold_auxiliary_state", FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_hold_auxilary_state_vals), 0x0C, NULL, HFILL }},
- { &hf_gsm_a_dtap_multi_party_auxiliary_state, { "Multi party auxiliary state", "gsm_a.dtap.multi_party_auxiliary_state", FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_multi_party_auxilary_state_vals), 0x03, NULL, HFILL }},
- { &hf_gsm_a_dtap_radio_channel_requirement, { "Radio channel requirement", "gsm_a.dtap.radio_channel_requirement", FT_UINT8, BASE_DEC, NULL, 0x60, NULL, HFILL }},
- { &hf_gsm_a_dtap_bearer_cap_coding_standard, { "Coding standard", "gsm_a.dtap.coding_standard", FT_BOOLEAN, 8, TFS(&tfs_bearer_cap_coding_standard), 0x10, NULL, HFILL }},
- { &hf_gsm_a_dtap_transfer_mode, { "Transfer mode", "gsm_a.dtap.transfer_mode", FT_BOOLEAN, 8, TFS(&tfs_bearer_cap_transfer_mode), 0x08, NULL, HFILL }},
- { &hf_gsm_a_dtap_coding, { "Coding", "gsm_a.dtap.coding", FT_BOOLEAN, 8, TFS(&tfs_bearer_cap_coding), 0x40, NULL, HFILL }},
- { &hf_gsm_a_dtap_compression, { "Compression", "gsm_a.dtap.compression", FT_BOOLEAN, 8, TFS(&tfs_possible_not_possible), 0x40, NULL, HFILL }},
- { &hf_gsm_a_dtap_compression_up, { "Compression", "gsm_a.dtap.compression", FT_BOOLEAN, 8, TFS(&tfs_allowed_not_allowed), 0x40, NULL, HFILL }},
- { &hf_gsm_a_dtap_structure, { "Structure", "gsm_a.dtap.structure", FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_structure_vals), 0x30, NULL, HFILL }},
- { &hf_gsm_a_dtap_duplex_mode, { "Duplex mode", "gsm_a.dtap.duplex_mode", FT_BOOLEAN, 8, TFS(&tfs_duplex_mode), 0x08, NULL, HFILL }},
- { &hf_gsm_a_dtap_configuration, { "Configuration", "gsm_a.dtap.configuration", FT_BOOLEAN, 8, TFS(&tfs_bearer_cap_configuration), 0x04, NULL, HFILL }},
- { &hf_gsm_a_dtap_nirr, { "NIRR", "gsm_a.dtap.nirr", FT_BOOLEAN, 8, TFS(&tfs_nirr), 0x02, NULL, HFILL }},
- { &hf_gsm_a_dtap_establishment, { "Establishment", "gsm_a.dtap.establishment", FT_BOOLEAN, 8, TFS(&tfs_bearer_cap_establishment), 0x01, NULL, HFILL }},
- { &hf_gsm_a_dtap_access_identity, { "Access Identity", "gsm_a.dtap.access_identity", FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_access_identity_vals), 0x60, NULL, HFILL }},
- { &hf_gsm_a_dtap_rate_adaption, { "Rate Adaption", "gsm_a.dtap.rate_adaption", FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_rate_adaption_vals), 0x18, NULL, HFILL }},
- { &hf_gsm_a_dtap_signalling_access_protocol, { "Signalling Access Protocol", "gsm_a.dtap.signalling_access_protocol", FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_signal_access_protocol_vals), 0x07, NULL, HFILL }},
- { &hf_gsm_a_dtap_other_itc, { "Other ITC", "gsm_a.dtap.other_itc", FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_other_itc_vals), 0x60, NULL, HFILL }},
- { &hf_gsm_a_dtap_other_rate_adaption, { "Other Rate Adaption", "gsm_a.dtap.other_rate_adaption", FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_other_rate_adaption_vals), 0x18, NULL, HFILL }},
- { &hf_gsm_a_dtap_rate_adaption_header, { "Rate Adaption Header", "gsm_a.dtap.rate_adaption_header", FT_BOOLEAN, 8, TFS(&tfs_included_not_included), 0x40, NULL, HFILL }},
- { &hf_gsm_a_dtap_multiple_frame_establishment_support, { "Multiple frame establishment support in data link", "gsm_a.dtap.multiple_frame_establishment_support", FT_BOOLEAN, 8, TFS(&tfs_frame_est_supported_not_supported), 0x20, NULL, HFILL }},
- { &hf_gsm_a_dtap_mode_of_operation, { "Mode of operation", "gsm_a.dtap.mode_of_operation", FT_BOOLEAN, 8, TFS(&tfs_mode_of_operation), 0x10, NULL, HFILL }},
- { &hf_gsm_a_dtap_logical_link_identifier_negotiation, { "Logical link identifier negotiation", "gsm_a.dtap.logical_link_identifier_negotiation", FT_BOOLEAN, 8, TFS(&tfs_log_link_neg), 0x08, NULL, HFILL }},
- { &hf_gsm_a_dtap_assignor_assignee, { "Assignor/Assignee", "gsm_a.dtap.assignor_assignee", FT_BOOLEAN, 8, TFS(&tfs_assignor_assignee), 0x04, NULL, HFILL }},
- { &hf_gsm_a_dtap_in_out_band, { "In band/Out of band negotiation", "gsm_a.dtap.in_out_band", FT_BOOLEAN, 8, TFS(&tfs_in_out_band), 0x02, NULL, HFILL }},
- { &hf_gsm_a_dtap_layer_1_identity, { "Layer 1 Identity", "gsm_a.dtap.layer_1_identity", FT_UINT8, BASE_DEC, NULL, 0x60, NULL, HFILL }},
- { &hf_gsm_a_dtap_user_information_layer_1_protocol, { "User information layer 1 protocol", "gsm_a.dtap.user_information_layer_1_protocol", FT_UINT8, BASE_DEC, NULL, 0x1e, NULL, HFILL }},
- { &hf_gsm_a_dtap_synchronous, { "Synchronous/asynchronous", "gsm_a.dtap.synchronous", FT_BOOLEAN, 8, TFS(&tfs_asynchronous_synchronous), 0x01, NULL, HFILL }},
- { &hf_gsm_a_dtap_number_of_stop_bits, { "Number of Stop Bits", "gsm_a.dtap.number_of_stop_bits", FT_BOOLEAN, 8, TFS(&tfs_stop_bits), 0x40, NULL, HFILL }},
- { &hf_gsm_a_dtap_negotiation, { "Negotiation", "gsm_a.dtap.negotiation", FT_BOOLEAN, 8, TFS(&tfs_negotiation), 0x20, NULL, HFILL }},
- { &hf_gsm_a_dtap_number_of_data_bits, { "Number of data bits excluding parity bit if present", "gsm_a.dtap.number_of_data_bits", FT_BOOLEAN, 8, TFS(&tfs_parity_bits), 0x10, NULL, HFILL }},
- { &hf_gsm_a_dtap_user_rate, { "User rate", "gsm_a.dtap.user_rate", FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_user_rate_vals), 0x0F, NULL, HFILL }},
- { &hf_gsm_a_dtap_v110_x30_rate_adaptation, { "V.110/X.30 rate adaptation Intermediate rate", "gsm_a.dtap.v110_x30_rate_adaptation", FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_v110_x30_rate_adaptation_vals), 0x60, NULL, HFILL }},
- { &hf_gsm_a_dtap_nic_on_tx, { "Network independent clock (NIC) on transmission (Tx)", "gsm_a.dtap.nic_on_tx", FT_BOOLEAN, 8, TFS(&tfs_nic_on_tx), 0x10, NULL, HFILL }},
- { &hf_gsm_a_dtap_nic_on_rx, { "Network independent clock (NIC) on reception (Rx)", "gsm_a.dtap.nic_on_rx", FT_BOOLEAN, 8, TFS(&tfs_nic_on_rx), 0x08, NULL, HFILL }},
- { &hf_gsm_a_dtap_parity_information, { "Parity information", "gsm_a.dtap.parity_information", FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_parity_info_vals), 0x07, NULL, HFILL }},
- { &hf_gsm_a_dtap_connection_element, { "Connection element", "gsm_a.dtap.connection_element", FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_connection_element_vals), 0x60, NULL, HFILL }},
- { &hf_gsm_a_dtap_modem_type, { "Modem type", "gsm_a.dtap.modem_type", FT_UINT8, BASE_DEC, NULL, 0x1f, NULL, HFILL }},
- { &hf_gsm_a_dtap_other_modem_type, { "Other modem type", "gsm_a.dtap.other_modem_type", FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_other_modem_type_vals), 0x60, NULL, HFILL }},
- { &hf_gsm_a_dtap_fixed_network_user_rate, { "Fixed network user rate", "gsm_a.dtap.fixed_network_user_rate", FT_UINT8, BASE_DEC, NULL, 0x1f, NULL, HFILL }},
- { &hf_gsm_a_dtap_acceptable_channel_codings_TCH_F14_4, { "Acceptable channel codings (TCH/F14.4)", "gsm_a.dtap.acceptable_channel_codings.TCH_F14_4", FT_BOOLEAN, 8, TFS(&tfs_acceptable_not_acceptable), 0x40, NULL, HFILL }},
- { &hf_gsm_a_dtap_acceptable_channel_codings_spare20, { "Acceptable channel codings (Spare)", "gsm_a.dtap.acceptable_channel_codings.spare", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
- { &hf_gsm_a_dtap_acceptable_channel_codings_TCH_F9_6, { "Acceptable channel codings (TCH/F9.6)", "gsm_a.dtap.acceptable_channel_codings.TCH_F9_6", FT_BOOLEAN, 8, TFS(&tfs_acceptable_not_acceptable), 0x10, NULL, HFILL }},
- { &hf_gsm_a_dtap_acceptable_channel_codings_TCH_F4_8, { "Acceptable channel codings (TCH/F4.8)", "gsm_a.dtap.acceptable_channel_codings.TCH_F4_8", FT_BOOLEAN, 8, TFS(&tfs_acceptable_not_acceptable), 0x08, NULL, HFILL }},
- { &hf_gsm_a_dtap_maximum_number_of_traffic_channels, { "Maximum number of traffic channels", "gsm_a.dtap.maximum_number_of_traffic_channels", FT_UINT8, BASE_DEC, NULL, 0x07, NULL, HFILL }},
- { &hf_gsm_a_dtap_acceptable_channel_codings_spare78, { "Acceptable channel codings", "gsm_a.dtap.acceptable_channel_codings", FT_UINT8, BASE_DEC, NULL, 0x78, NULL, HFILL }},
- { &hf_gsm_a_dtap_uimi, { "UIMI, User initiated modification indication", "gsm_a.dtap.uimi", FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_uimi_vals), 0x70, NULL, HFILL }},
- { &hf_gsm_a_dtap_wanted_air_interface_user_rate, { "Wanted air interface user rate", "gsm_a.dtap.wanted_air_interface_user_rate", FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_wanted_air_rate_vals), 0x0F, NULL, HFILL }},
- { &hf_gsm_a_dtap_acceptable_channel_codings_ext_TCH_F28_8, { "Acceptable channel codings extended (TCH/F28.8)", "gsm_a.dtap.acceptable_channel_codings_ext.TCH_F28_8", FT_BOOLEAN, 8, TFS(&tfs_acceptable_not_acceptable), 0x40, NULL, HFILL }},
- { &hf_gsm_a_dtap_acceptable_channel_codings_ext_TCH_F32_0, { "Acceptable channel codings extended (TCH/F32.0)", "gsm_a.dtap.acceptable_channel_codings_ext.TCH_F32_0", FT_BOOLEAN, 8, TFS(&tfs_acceptable_not_acceptable), 0x20, NULL, HFILL }},
- { &hf_gsm_a_dtap_acceptable_channel_codings_ext_TCH_F43_2, { "Acceptable channel codings extended (TCH/F43.2)", "gsm_a.dtap.acceptable_channel_codings_ext.TCH_F43_2", FT_BOOLEAN, 8, TFS(&tfs_acceptable_not_acceptable), 0x10, NULL, HFILL }},
- { &hf_gsm_a_dtap_channel_coding_asymmetry_indication, { "Channel Coding Asymmetry Indication", "gsm_a.dtap.channel_coding_asymmetry_indication", FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_channel_coding_asymmetry_ind_vals), 0x0c, NULL, HFILL }},
- { &hf_gsm_a_dtap_edge_channel_codings, { "EDGE Channel Codings", "gsm_a.dtap.edge_channel_codings", FT_UINT8, BASE_DEC, NULL, 0x7c, NULL, HFILL }},
- { &hf_gsm_a_dtap_layer_2_identity, { "Layer 2 Identity", "gsm_a.dtap.layer_2_identity", FT_UINT8, BASE_DEC, NULL, 0x60, NULL, HFILL }},
- { &hf_gsm_a_dtap_user_information_layer_2_protocol, { "User information layer 2 protocol", "gsm_a.dtap.user_information_layer_2_protocol", FT_UINT8, BASE_DEC, NULL, 0x1f, NULL, HFILL }},
- { &hf_gsm_a_dtap_maximum_number_of_supported_bearers, { "Maximum number of supported bearers", "gsm_a.dtap.maximum_number_of_supported_bearers", FT_UINT8, BASE_DEC, NULL, 0xf0, NULL, HFILL }},
- { &hf_gsm_a_dtap_pcp, { "Prolonged Clearing Procedure", "gsm_a.dtap.pcp", FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02, NULL, HFILL }},
- { &hf_gsm_a_dtap_dtmf, { "DTMF", "gsm_a.dtap.dtmf", FT_BOOLEAN, 8, TFS(&gsm_a_dtap_dtmf_value), 0x01, NULL, HFILL }},
- { &hf_gsm_a_dtap_max_num_of_speech_bearers, { "Maximum number of speech bearers", "gsm_a.dtap.max_num_of_speech_bearers", FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL }},
- { &hf_gsm_a_dtap_de_cause_coding_standard, { "Coding standard", "gsm_a.dtap.coding_standard", FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_de_cause_coding_standard_vals), 0x60, NULL, HFILL }},
- { &hf_gsm_a_dtap_recommendation, { "Recommendation", "gsm_a.dtap.recommendation", FT_UINT8, BASE_DEC, NULL, 0x7f, NULL, HFILL }},
- { &hf_gsm_a_dtap_data, { "Data", "gsm_a.dtap.data", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- { &hf_gsm_a_dtap_keypad_information, { "Keypad information", "gsm_a.dtap.keypad_information", FT_UINT8, BASE_DEC, NULL, 0x7f, NULL, HFILL }},
- { &hf_gsm_a_dtap_repeat_indicator, { "Repeat Indicator", "gsm_a.dtap.repeat_indicator", FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL }},
- { &hf_gsm_a_dtap_ss_version_indicator, { "SS Version Indicator", "gsm_a.dtap.ss_version_indicator", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_gsm_a_dtap_cp_cause, { "Cause", "gsm_a.dtap.cp_cause", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_gsm_a_dtap_test_loop, { "Test Loop", "gsm_a.dtap.test_loop", FT_UINT8, BASE_DEC, NULL, 0x3f, NULL, HFILL }},
- { &hf_gsm_a_dtap_channel_coding03, { "Channel coding", "gsm_a.dtap.channel_coding", FT_UINT8, BASE_DEC, VALS(gsm_channel_coding_vals), 0x03, NULL, HFILL }},
- { &hf_gsm_a_dtap_channel_coding30, { "Channel coding", "gsm_a.dtap.channel_coding", FT_UINT8, BASE_DEC, VALS(gsm_channel_coding_vals), 0x30, NULL, HFILL }},
- { &hf_gsm_a_dtap_tp_tested_device, { "Tested device", "gsm_a.dtap.tp_tested_device", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_gsm_a_dtap_tp_pdu_description, { "PDUs transmitted", "gsm_a.dtap.tp_pdu_description", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
- { &hf_gsm_a_dtap_downlink_timeslot_offset, { "Downlink Timeslot Offset", "gsm_a.dtap.downlink_timeslot_offset", FT_UINT8, BASE_DEC, NULL, 0x0E, NULL, HFILL }},
- { &hf_gsm_a_dtap_ms_positioning_technology, { "MS positioning technology", "gsm_a.dtap.ms_positioning_technology", FT_UINT8, BASE_DEC, VALS(gsm_positioning_technology_vals), 0x0, NULL, HFILL }},
- { &hf_gsm_a_dtap_ue_positioning_technology, { "UE positioning technology", "gsm_a.dtap.ue_positioning_technology", FT_UINT8, BASE_DEC, VALS(gsm_positioning_technology_vals), 0x0, NULL, HFILL }},
- { &hf_gsm_a_dtap_ciphering_key_sequence_number, { "Ciphering Key Sequence Number", "gsm_a.dtap.ciphering_key_sequence_number", FT_UINT8, BASE_DEC, NULL, 0x07, NULL, HFILL }},
- { &hf_gsm_a_dtap_ciphering_key_sequence_number70, { "Ciphering Key Sequence Number", "gsm_a.dtap.ciphering_key_sequence_number", FT_UINT8, BASE_DEC, NULL, 0x70, NULL, HFILL }},
- { &hf_gsm_a_dtap_service_type, { "Service Type", "gsm_a.dtap.service_type", FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_service_type_vals), 0x0F, NULL, HFILL }},
- { &hf_gsm_a_dtap_type_of_identity, { "Type of identity", "gsm_a.dtap.type_of_identity", FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_type_of_identity_vals), 0x07, NULL, HFILL }},
- { &hf_gsm_a_dtap_follow_on_request, { "Follow-On Request (FOR)", "gsm_a.dtap.follow_on_request", FT_BOOLEAN, 8, TFS(&tfs_follow_on_request_value ), 0x08, NULL, HFILL }},
- { &hf_gsm_a_dtap_updating_type, { "Updating Type", "gsm_a.dtap.updating_type", FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_updating_type_vals), 0x03, NULL, HFILL }},
- { &hf_gsm_a_dtap_congestion_level, { "Congestion level", "gsm_a.dtap.congestion_level", FT_UINT8, BASE_DEC, NULL, 0x0F, NULL, HFILL }},
- { &hf_gsm_a_dtap_protocol_discriminator, { "Protocol Discriminator", "gsm_a.dtap.protocol_discriminator", FT_UINT8, BASE_DEC, VALS(protocol_discriminator_vals), 0x0, NULL, HFILL }},
- { &hf_gsm_a_dtap_ti_flag, { "TI flag", "gsm_a.dtap.ti_flag", FT_BOOLEAN, 8, TFS(&tfs_ti_flags), 0x80, NULL, HFILL }},
- { &hf_gsm_a_dtap_tio, { "TIO", "gsm_a.dtap.tio", FT_UINT8, BASE_DEC, NULL, 0x70, NULL, HFILL }},
- { &hf_gsm_a_dtap_tie, { "TIE", "gsm_a.dtap.tie", FT_UINT8, BASE_DEC, NULL, DTAP_TIE_MASK, NULL, HFILL }},
- };
-
- /* Setup protocol subtree array */
+ guint i;
+ guint last_offset;
+
+ /* Setup list of header fields */
+
+ static hf_register_info hf[] = {
+ { &hf_gsm_a_seq_no,
+ { "Sequence number", "gsm_a.dtap.seq_no",
+ FT_UINT8, BASE_DEC, NULL, 0xc0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_msg_mm_type,
+ { "DTAP Mobility Management Message Type", "gsm_a.dtap.msg_mm_type",
+ FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_mm_strings), 0x3f,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_msg_cc_type,
+ { "DTAP Call Control Message Type", "gsm_a.dtap.msg_cc_type",
+ FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_cc_strings), 0x3f,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_msg_sms_type,
+ { "DTAP Short Message Service Message Type", "gsm_a.dtap.msg_sms_type",
+ FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_sms_strings), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_msg_ss_type,
+ { "DTAP Non call Supplementary Service Message Type", "gsm_a.dtap.msg_ss_type",
+ FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_ss_strings), 0x3f,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_msg_tp_type,
+ { "DTAP Tests Procedures Message Type", "gsm_a.dtap.msg_tp_type",
+ FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_tp_strings), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_elem_id,
+ { "Element ID", "gsm_a.dtap.elem_id",
+ FT_UINT8, BASE_HEX, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_cld_party_bcd_num,
+ { "Called Party BCD Number", "gsm_a.dtap.cld_party_bcd_num",
+ FT_STRING, BASE_NONE, 0, 0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_clg_party_bcd_num,
+ { "Calling Party BCD Number", "gsm_a.dtap.clg_party_bcd_num",
+ FT_STRING, BASE_NONE, 0, 0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_conn_num,
+ { "Connected Number", "gsm_a.dtap.conn_num",
+ FT_STRING, BASE_NONE, 0, 0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_red_party_bcd_num,
+ { "Redirecting Party BCD Number", "gsm_a.dtap.red_party_bcd_num",
+ FT_STRING, BASE_NONE, 0, 0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_cause,
+ { "DTAP Cause", "gsm_a.dtap.cause",
+ FT_UINT8, BASE_HEX, 0, 0x7f,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_type_of_number,
+ { "Type of number", "gsm_a.dtap.type_of_number",
+ FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_type_of_number_values), 0x70,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_numbering_plan_id,
+ { "Numbering plan identification", "gsm_a.dtap.numbering_plan_id",
+ FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_numbering_plan_id_values), 0x0f,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_present_ind,
+ { "Presentation indicator", "gsm_a.dtap.present_ind",
+ FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_present_ind_values), 0x60,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_screening_ind,
+ { "Screening indicator", "gsm_a.dtap.screening_ind",
+ FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_screening_ind_values), 0x03,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_type_of_sub_addr,
+ { "Type of subaddress", "gsm_a.dtap.type_of_sub_addr",
+ FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_type_of_sub_addr_values), 0x70,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_odd_even_ind,
+ { "Odd/even indicator", "gsm_a.dtap.odd_even_ind",
+ FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_odd_even_ind_values), 0x08,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_lsa_id,
+ { "LSA Identifier", "gsm_a.dtap.lsa_id",
+ FT_UINT24, BASE_HEX, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_speech_vers_ind,
+ { "Speech version indication", "gsm_a.dtap.speech_vers_ind",
+ FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_speech_vers_ind_values), 0x0f,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_itc,
+ { "Information transfer capability", "gsm_a.dtap.itc",
+ FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_itc_values), 0x07,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_sysid,
+ { "System Identification (SysID)", "gsm_a.dtap.sysid",
+ FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_sysid_values), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_bitmap_length,
+ { "Bitmap Length", "gsm_a.dtap.bitmap_length",
+ FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_serv_cat_b7,
+ { "Automatically initiated eCall", "gsm_a.dtap.serv_cat_b7",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_serv_cat_b6,
+ { "Manually initiated eCall", "gsm_a.dtap.serv_cat_b6",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_serv_cat_b5,
+ { "Mountain Rescue", "gsm_a.dtap.serv_cat_b5",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_serv_cat_b4,
+ { "Marine Guard", "gsm_a.dtap.serv_cat_b4",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_serv_cat_b3,
+ { "Fire Brigade", "gsm_a.dtap.serv_cat_b3",
+ FT_BOOLEAN, 8, NULL, 0x04,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_serv_cat_b2,
+ { "Ambulance", "gsm_a.dtap.serv_cat_b2",
+ FT_BOOLEAN, 8, NULL, 0x02,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_serv_cat_b1,
+ { "Police", "gsm_a.dtap.serv_cat_b1",
+ FT_BOOLEAN, 8, NULL, 0x01,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_csmo,
+ { "CSMO", "gsm_a.dtap.csmo",
+ FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_dtap_csmo_value), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_csmt,
+ { "CSMT", "gsm_a.dtap.csmt",
+ FT_BOOLEAN, BASE_NONE, TFS(&gsm_a_dtap_csmt_value), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_mm_timer_unit,
+ { "Unit", "gsm_a.dtap.mm_timer_unit",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_mm_timer_unit_vals), 0xe0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_mm_timer_value,
+ { "Timer value", "gsm_a.dtap.mm_timer_value",
+ FT_UINT8, BASE_DEC, NULL, 0x1f,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_alerting_pattern,
+ { "Alerting Pattern", "gsm_a.dtap.alerting_pattern",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_alerting_pattern_vals), 0x0f,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_ccbs_activation,
+ { "CCBS Activation", "gsm_a.dtap.ccbs_activation",
+ FT_BOOLEAN, 8, TFS(&gsm_a_ccbs_activation_value), 0x80,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_stream_identifier,
+ { "Stream Identifier", "gsm_a.dtap.stream_identifier",
+ FT_UINT8, BASE_HEX, 0, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_mcs,
+ { "MCS", "gsm_a.dtap.mcs",
+ FT_BOOLEAN, 8, TFS(&gsm_a_mcs_value), 0x01,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_cause_of_no_cli,
+ { "Cause of no CLI", "gsm_a.dtap.cause_of_no_cli",
+ FT_UINT8, BASE_HEX, 0, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_cause_ss_diagnostics,
+ { "Supplementary Services Diagnostics", "gsm_a.dtap.cause_ss_diagnostics",
+ FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_cause_ss_diagnostics_vals), 0x7f,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_codec_tdma_efr,
+ { "TDMA EFR", "gsm_a.dtap.codec.tdma_efr",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_codec_umts_amr_2,
+ { "UMTS AMR 2", "gsm_a.dtap.codec.umts_amr_2",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_codec_umts_amr,
+ { "UMTS AMR", "gsm_a.dtap.codec.umts_amr",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_codec_hr_amr,
+ { "HR AMR", "gsm_a.dtap.codec.hr_amr",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_codec_fr_amr,
+ { "FR AMR", "gsm_a.dtap.codec.fr_amr",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_codec_gsm_efr,
+ { "GSM EFR", "gsm_a.dtap.codec.gsm_efr",
+ FT_BOOLEAN, 8, NULL, 0x04,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_codec_gsm_hr,
+ { "GSM HR", "gsm_a.dtap.codec.gsm_hr",
+ FT_BOOLEAN, 8, NULL, 0x02,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_codec_gsm_fr,
+ { "GSM FR", "gsm_a.dtap.codec.gsm_fr",
+ FT_BOOLEAN, 8, NULL, 0x01,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_codec_ohr_amr_wb,
+ { "OHR AMR-WB", "gsm_a.dtap.codec.ohr_amr_wb",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_codec_ofr_amr_wb,
+ { "OFR AMR-WB", "gsm_a.dtap.codec.ofr_amr_wb",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_codec_ohr_amr,
+ { "OHR AMR", "gsm_a.dtap.codec.ohr_amr",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_codec_umts_amr_wb,
+ { "UMTS AMR-WB", "gsm_a.dtap.codec.umts_amr_wb",
+ FT_BOOLEAN, 8, NULL, 0x04,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_codec_fr_amr_wb,
+ { "FR AMR-WB", "gsm_a.dtap.codec.fr_amr_wb",
+ FT_BOOLEAN, 8, NULL, 0x02,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_codec_pdc_efr,
+ { "PDC EFR", "gsm_a.dtap.codec.pdc_efr",
+ FT_BOOLEAN, 8, NULL, 0x01,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_notification_description,
+ { "Notification description", "gsm_a.dtap.notif_descr",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_notification_description_vals), 0x7f,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_emerg_num_info_length,
+ { "Emergency Number Info length", "gsm_a.dtap.emerg_num_info_length",
+ FT_UINT8, BASE_DEC, 0, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_emergency_bcd_num,
+ { "Emergency BCD Number", "gsm_a.dtap.emergency_bcd_num",
+ FT_STRING, BASE_NONE, 0, 0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_signal_value,
+ { "Signal value", "gsm_a.dtap.signal_value",
+ FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_signal_value_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_recall_type,
+ { "Recall type", "gsm_a.dtap.recall_type",
+ FT_UINT8, BASE_HEX|BASE_RANGE_STRING, RVALS(gsm_a_dtap_recall_type_vals), 0x07,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_coding_standard,
+ { "Coding standard", "gsm_a.dtap.coding_standard",
+ FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_coding_standard_vals), 0xc0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_call_state,
+ { "Call state", "gsm_a.dtap.call_state",
+ FT_UINT8, BASE_DEC, NULL, 0x3f,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_prog_coding_standard,
+ { "Coding standard", "gsm_a.dtap.coding_standard",
+ FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_coding_standard_vals), 0x60,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_location,
+ { "Location", "gsm_a.dtap.location",
+ FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_location_vals), 0x0f,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_progress_description,
+ { "Progress description", "gsm_a.dtap.progress_description",
+ FT_UINT8, BASE_DEC, NULL, 0x7f,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_afi,
+ { "Authority and Format Identifier", "gsm_a.dtap.afi",
+ FT_UINT8, BASE_HEX|BASE_EXT_STRING, &x213_afi_value_ext, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_rej_cause,
+ { "Reject cause", "gsm_a.dtap.rej_cause",
+ FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_u2u_prot_discr,
+ { "User-user protocol discriminator", "gsm_a.dtap.u2u_prot_discr",
+ FT_UINT8, BASE_HEX|BASE_RANGE_STRING, RVALS(gsm_a_dtap_u2u_prot_discr_vals), 0x00,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_mcat,
+ { "MCAT", "gsm_a.dtap.mcat",
+ FT_BOOLEAN, 8, TFS(&gsm_a_dtap_mcat_value), 0x08,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_enicm,
+ { "ENICM", "gsm_a.dtap.mcat",
+ FT_BOOLEAN, 8, TFS(&gsm_a_dtap_enicm_value), 0x04,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_rand,
+ { "RAND value", "gsm_a.dtap.rand",
+ FT_BYTES, FT_NONE, NULL, 0x00,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_autn,
+ { "AUTN value", "gsm_a.dtap.autn",
+ FT_BYTES, FT_NONE, NULL, 0x00,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_sres,
+ { "SRES value", "gsm_a.dtap.sres",
+ FT_BYTES, FT_NONE, NULL, 0x00,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_xres,
+ { "XRES value", "gsm_a.dtap.xres",
+ FT_BYTES, FT_NONE, NULL, 0x00,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_auts,
+ { "AUTS value", "gsm_a.dtap.auts",
+ FT_BYTES, FT_NONE, NULL, 0x00,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_autn_sqn_xor_ak,
+ { "SQN xor AK", "gsm_a.dtap.autn.sqn_xor_ak",
+ FT_BYTES, FT_NONE, NULL, 0x00,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_autn_amf,
+ { "AMF", "gsm_a.dtap.autn.amf",
+ FT_BYTES, FT_NONE, NULL, 0x00,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_autn_mac,
+ { "MAC", "gsm_a.dtap.autn.mac",
+ FT_BYTES, FT_NONE, NULL, 0x00,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_auts_sqn_ms_xor_ak,
+ { "SQN_MS xor AK", "gsm_a.dtap.auts.sqn_ms_xor_ak",
+ FT_BYTES, FT_NONE, NULL, 0x00,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_auts_mac_s,
+ { "MAC-S", "gsm_a.dtap.auts.mac_s",
+ FT_BYTES, FT_NONE, NULL, 0x00,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_epc_ue_tl_mode,
+ { "UE test loop mode","gsm_a.dtap.epc.ue_tl_mode",
+ FT_UINT8,BASE_DEC, VALS(epc_ue_test_loop_mode_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_epc_ue_tl_a_ul_sdu_size,
+ { "Uplink PDCP SDU size in bits","gsm_a.dtap.epc.ue_tl_a_ul_sdu_size",
+ FT_UINT16,BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_epc_ue_tl_a_drb,
+ { "Data Radio Bearer identity number","gsm_a.dtap.epc.ue_tl_a_drb",
+ FT_UINT8,BASE_DEC, NULL, 0x1f,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_epc_ue_tl_b_ip_pdu_delay,
+ { "IP PDU delay in seconds","gsm_a.dtap.epc.ue_tl_b_ip_pdu_delay",
+ FT_UINT8,BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_epc_ue_tl_c_mbsfn_area_id,
+ { "MBSFN area identity","gsm_a.dtap.epc.ue_tl_c_mbsfn_area_id",
+ FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_epc_ue_tl_c_mch_id,
+ { "MCH identity","gsm_a.dtap.epc.ue_tl_c_mch_id",
+ FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_epc_ue_tl_c_lcid,
+ { "Logical channel identity","gsm_a.dtap.epc.ue_tl_c_lcid",
+ FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_epc_ue_positioning_technology,
+ { "UE positioning technology","gsm_a.dtap.epc.ue_positioning_technology",
+ FT_UINT8, BASE_DEC, VALS(epc_ue_positioning_technology_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_epc_mbms_packet_counter_value,
+ { "MBMS packet counter value","gsm_a.dtap.epc.mbms_packet_counter_value",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_epc_latitude_sign,
+ { "Latitude Sign","gsm_a.dtap.epc.latitude_sign",
+ FT_BOOLEAN, BASE_NONE, TFS(&epc_latitude_sign_value), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_epc_degrees_latitude,
+ { "Degrees Latitude","gsm_a.dtap.epc.degrees_latitude",
+ FT_UINT24, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_epc_degrees_longitude,
+ { "Degrees Longitude","gsm_a.dtap.epc.degrees_longitude",
+ FT_INT24, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_epc_altitude_dir,
+ { "Altitude Direction","gsm_a.dtap.epc.altitude_direction",
+ FT_BOOLEAN, BASE_NONE, TFS(&epc_altitude_dir_value), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_epc_altitude,
+ { "Altitude","gsm_a.dtap.epc.altitude",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_epc_bearing,
+ { "Bearing","gsm_a.dtap.epc.bearing",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_epc_horizontal_speed,
+ { "Horizontal Speed","gsm_a.dtap.epc.horizontal_speed",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_epc_gnss_tod_msec,
+ { "GNSS-TOD-msec","gsm_a.dtap.epc.gnss_tod_msec",
+ FT_UINT24, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ /* Generated from convert_proto_tree_add_text.pl */
+ { &hf_gsm_a_dtap_coding_scheme,
+ { "Coding Scheme", "gsm_a.dtap.coding_scheme",
+ FT_UINT8, BASE_DEC, NULL, 0x70,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_add_ci,
+ { "Add CI", "gsm_a.dtap.add_ci",
+ FT_BOOLEAN, 8, TFS(&tfs_add_ci), 0x08,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_number_of_spare_bits,
+ { "Number of spare bits in last octet", "gsm_a.dtap.number_of_spare_bits",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_number_of_spare_bits_vals), 0x07,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_text_string,
+ { "Text String", "gsm_a.dtap.text_string",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_time_zone_time,
+ { "Time", "gsm_a.dtap.time_zone_time",
+ FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_dst_adjustment,
+ { "DST Adjustment", "gsm_a.dtap.dst_adjustment",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_dst_adjustment_vals), 0x03,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_emergency_number_information,
+ { "Emergency Number Information", "gsm_a.dtap.emergency_number_information",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_mm_timer,
+ { "MM Timer", "gsm_a.dtap.mm_timer",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_hold_auxiliary_state,
+ { "Hold auxiliary state", "gsm_a.dtap.hold_auxiliary_state",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_hold_auxilary_state_vals), 0x0C,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_multi_party_auxiliary_state,
+ { "Multi party auxiliary state", "gsm_a.dtap.multi_party_auxiliary_state",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_multi_party_auxilary_state_vals), 0x03,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_radio_channel_requirement,
+ { "Radio channel requirement", "gsm_a.dtap.radio_channel_requirement",
+ FT_UINT8, BASE_DEC, NULL, 0x60,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_bearer_cap_coding_standard,
+ { "Coding standard", "gsm_a.dtap.coding_standard",
+ FT_BOOLEAN, 8, TFS(&tfs_bearer_cap_coding_standard), 0x10,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_transfer_mode,
+ { "Transfer mode", "gsm_a.dtap.transfer_mode",
+ FT_BOOLEAN, 8, TFS(&tfs_bearer_cap_transfer_mode), 0x08,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_coding,
+ { "Coding", "gsm_a.dtap.coding",
+ FT_BOOLEAN, 8, TFS(&tfs_bearer_cap_coding), 0x40,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_compression,
+ { "Compression", "gsm_a.dtap.compression",
+ FT_BOOLEAN, 8, TFS(&tfs_possible_not_possible), 0x40,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_compression_up,
+ { "Compression", "gsm_a.dtap.compression",
+ FT_BOOLEAN, 8, TFS(&tfs_allowed_not_allowed), 0x40,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_structure,
+ { "Structure", "gsm_a.dtap.structure",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_structure_vals), 0x30,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_duplex_mode,
+ { "Duplex mode", "gsm_a.dtap.duplex_mode",
+ FT_BOOLEAN, 8, TFS(&tfs_duplex_mode), 0x08,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_configuration,
+ { "Configuration", "gsm_a.dtap.configuration",
+ FT_BOOLEAN, 8, TFS(&tfs_bearer_cap_configuration), 0x04,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_nirr,
+ { "NIRR", "gsm_a.dtap.nirr",
+ FT_BOOLEAN, 8, TFS(&tfs_nirr), 0x02,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_establishment,
+ { "Establishment", "gsm_a.dtap.establishment",
+ FT_BOOLEAN, 8, TFS(&tfs_bearer_cap_establishment), 0x01,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_access_identity,
+ { "Access Identity", "gsm_a.dtap.access_identity",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_access_identity_vals), 0x60,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_rate_adaption,
+ { "Rate Adaption", "gsm_a.dtap.rate_adaption",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_rate_adaption_vals), 0x18,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_signalling_access_protocol,
+ { "Signalling Access Protocol", "gsm_a.dtap.signalling_access_protocol",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_signal_access_protocol_vals), 0x07,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_other_itc,
+ { "Other ITC", "gsm_a.dtap.other_itc",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_other_itc_vals), 0x60,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_other_rate_adaption,
+ { "Other Rate Adaption", "gsm_a.dtap.other_rate_adaption",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_other_rate_adaption_vals), 0x18,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_rate_adaption_header,
+ { "Rate Adaption Header", "gsm_a.dtap.rate_adaption_header",
+ FT_BOOLEAN, 8, TFS(&tfs_included_not_included), 0x40,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_multiple_frame_establishment_support,
+ { "Multiple frame establishment support in data link", "gsm_a.dtap.multiple_frame_establishment_support",
+ FT_BOOLEAN, 8, TFS(&tfs_frame_est_supported_not_supported), 0x20,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_mode_of_operation,
+ { "Mode of operation", "gsm_a.dtap.mode_of_operation",
+ FT_BOOLEAN, 8, TFS(&tfs_mode_of_operation), 0x10,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_logical_link_identifier_negotiation,
+ { "Logical link identifier negotiation", "gsm_a.dtap.logical_link_identifier_negotiation",
+ FT_BOOLEAN, 8, TFS(&tfs_log_link_neg), 0x08,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_assignor_assignee,
+ { "Assignor/Assignee", "gsm_a.dtap.assignor_assignee",
+ FT_BOOLEAN, 8, TFS(&tfs_assignor_assignee), 0x04,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_in_out_band,
+ { "In band/Out of band negotiation", "gsm_a.dtap.in_out_band",
+ FT_BOOLEAN, 8, TFS(&tfs_in_out_band), 0x02,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_layer_1_identity,
+ { "Layer 1 Identity", "gsm_a.dtap.layer_1_identity",
+ FT_UINT8, BASE_DEC, NULL, 0x60,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_user_information_layer_1_protocol,
+ { "User information layer 1 protocol", "gsm_a.dtap.user_information_layer_1_protocol",
+ FT_UINT8, BASE_DEC, NULL, 0x1e,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_synchronous,
+ { "Synchronous/asynchronous", "gsm_a.dtap.synchronous",
+ FT_BOOLEAN, 8, TFS(&tfs_asynchronous_synchronous), 0x01,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_number_of_stop_bits,
+ { "Number of Stop Bits", "gsm_a.dtap.number_of_stop_bits",
+ FT_BOOLEAN, 8, TFS(&tfs_stop_bits), 0x40,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_negotiation,
+ { "Negotiation", "gsm_a.dtap.negotiation",
+ FT_BOOLEAN, 8, TFS(&tfs_negotiation), 0x20,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_number_of_data_bits,
+ { "Number of data bits excluding parity bit if present", "gsm_a.dtap.number_of_data_bits",
+ FT_BOOLEAN, 8, TFS(&tfs_parity_bits), 0x10,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_user_rate,
+ { "User rate", "gsm_a.dtap.user_rate",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_user_rate_vals), 0x0F,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_v110_x30_rate_adaptation,
+ { "V.110/X.30 rate adaptation Intermediate rate", "gsm_a.dtap.v110_x30_rate_adaptation",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_v110_x30_rate_adaptation_vals), 0x60,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_nic_on_tx,
+ { "Network independent clock (NIC) on transmission (Tx)", "gsm_a.dtap.nic_on_tx",
+ FT_BOOLEAN, 8, TFS(&tfs_nic_on_tx), 0x10,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_nic_on_rx,
+ { "Network independent clock (NIC) on reception (Rx)", "gsm_a.dtap.nic_on_rx",
+ FT_BOOLEAN, 8, TFS(&tfs_nic_on_rx), 0x08,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_parity_information,
+ { "Parity information", "gsm_a.dtap.parity_information",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_parity_info_vals), 0x07,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_connection_element,
+ { "Connection element", "gsm_a.dtap.connection_element",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_connection_element_vals), 0x60,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_modem_type,
+ { "Modem type", "gsm_a.dtap.modem_type",
+ FT_UINT8, BASE_DEC, NULL, 0x1f,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_other_modem_type,
+ { "Other modem type", "gsm_a.dtap.other_modem_type",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_other_modem_type_vals), 0x60,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_fixed_network_user_rate,
+ { "Fixed network user rate", "gsm_a.dtap.fixed_network_user_rate",
+ FT_UINT8, BASE_DEC, NULL, 0x1f,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_acceptable_channel_codings_TCH_F14_4,
+ { "Acceptable channel codings (TCH/F14.4)", "gsm_a.dtap.acceptable_channel_codings.TCH_F14_4",
+ FT_BOOLEAN, 8, TFS(&tfs_acceptable_not_acceptable), 0x40,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_acceptable_channel_codings_spare20,
+ { "Acceptable channel codings (Spare)", "gsm_a.dtap.acceptable_channel_codings.spare",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_acceptable_channel_codings_TCH_F9_6,
+ { "Acceptable channel codings (TCH/F9.6)", "gsm_a.dtap.acceptable_channel_codings.TCH_F9_6",
+ FT_BOOLEAN, 8, TFS(&tfs_acceptable_not_acceptable), 0x10,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_acceptable_channel_codings_TCH_F4_8,
+ { "Acceptable channel codings (TCH/F4.8)", "gsm_a.dtap.acceptable_channel_codings.TCH_F4_8",
+ FT_BOOLEAN, 8, TFS(&tfs_acceptable_not_acceptable), 0x08,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_maximum_number_of_traffic_channels,
+ { "Maximum number of traffic channels", "gsm_a.dtap.maximum_number_of_traffic_channels",
+ FT_UINT8, BASE_DEC, NULL, 0x07,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_acceptable_channel_codings_spare78,
+ { "Acceptable channel codings", "gsm_a.dtap.acceptable_channel_codings",
+ FT_UINT8, BASE_DEC, NULL, 0x78,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_uimi,
+ { "UIMI, User initiated modification indication",
+ "gsm_a.dtap.uimi", FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_uimi_vals),
+ 0x70, NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_wanted_air_interface_user_rate,
+ { "Wanted air interface user rate", "gsm_a.dtap.wanted_air_interface_user_rate",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_wanted_air_rate_vals), 0x0F,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_acceptable_channel_codings_ext_TCH_F28_8,
+ { "Acceptable channel codings extended (TCH/F28.8)", "gsm_a.dtap.acceptable_channel_codings_ext.TCH_F28_8",
+ FT_BOOLEAN, 8, TFS(&tfs_acceptable_not_acceptable), 0x40,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_acceptable_channel_codings_ext_TCH_F32_0,
+ { "Acceptable channel codings extended (TCH/F32.0)", "gsm_a.dtap.acceptable_channel_codings_ext.TCH_F32_0",
+ FT_BOOLEAN, 8, TFS(&tfs_acceptable_not_acceptable), 0x20,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_acceptable_channel_codings_ext_TCH_F43_2,
+ { "Acceptable channel codings extended (TCH/F43.2)", "gsm_a.dtap.acceptable_channel_codings_ext.TCH_F43_2",
+ FT_BOOLEAN, 8, TFS(&tfs_acceptable_not_acceptable), 0x10,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_channel_coding_asymmetry_indication,
+ { "Channel Coding Asymmetry Indication", "gsm_a.dtap.channel_coding_asymmetry_indication",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_channel_coding_asymmetry_ind_vals), 0x0c,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_edge_channel_codings,
+ { "EDGE Channel Codings", "gsm_a.dtap.edge_channel_codings",
+ FT_UINT8, BASE_DEC, NULL, 0x7c,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_layer_2_identity,
+ { "Layer 2 Identity", "gsm_a.dtap.layer_2_identity",
+ FT_UINT8, BASE_DEC, NULL, 0x60,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_user_information_layer_2_protocol,
+ { "User information layer 2 protocol", "gsm_a.dtap.user_information_layer_2_protocol",
+ FT_UINT8, BASE_DEC, NULL, 0x1f,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_maximum_number_of_supported_bearers,
+ { "Maximum number of supported bearers", "gsm_a.dtap.maximum_number_of_supported_bearers",
+ FT_UINT8, BASE_DEC, NULL, 0xf0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_pcp,
+ { "Prolonged Clearing Procedure", "gsm_a.dtap.pcp",
+ FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_dtmf,
+ { "DTMF", "gsm_a.dtap.dtmf",
+ FT_BOOLEAN, 8, TFS(&gsm_a_dtap_dtmf_value), 0x01,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_max_num_of_speech_bearers,
+ { "Maximum number of speech bearers", "gsm_a.dtap.max_num_of_speech_bearers",
+ FT_UINT8, BASE_DEC, NULL, 0x0f,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_de_cause_coding_standard,
+ { "Coding standard", "gsm_a.dtap.coding_standard",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_de_cause_coding_standard_vals), 0x60,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_recommendation,
+ { "Recommendation", "gsm_a.dtap.recommendation",
+ FT_UINT8, BASE_DEC, NULL, 0x7f,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_data,
+ { "Data", "gsm_a.dtap.data",
+ FT_BYTES, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_keypad_information,
+ { "Keypad information", "gsm_a.dtap.keypad_information",
+ FT_UINT8, BASE_DEC, NULL, 0x7f,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_repeat_indicator,
+ { "Repeat Indicator", "gsm_a.dtap.repeat_indicator",
+ FT_UINT8, BASE_DEC, NULL, 0x0f,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_ss_version_indicator,
+ { "SS Version Indicator", "gsm_a.dtap.ss_version_indicator",
+ FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_cp_cause,
+ { "Cause", "gsm_a.dtap.cp_cause",
+ FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_test_loop,
+ { "Test Loop", "gsm_a.dtap.test_loop",
+ FT_UINT8, BASE_DEC, NULL, 0x3f,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_channel_coding03,
+ { "Channel coding", "gsm_a.dtap.channel_coding",
+ FT_UINT8, BASE_DEC, VALS(gsm_channel_coding_vals), 0x03,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_channel_coding30,
+ { "Channel coding", "gsm_a.dtap.channel_coding",
+ FT_UINT8, BASE_DEC, VALS(gsm_channel_coding_vals), 0x30,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_tp_tested_device,
+ { "Tested device", "gsm_a.dtap.tp_tested_device",
+ FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_tp_pdu_description,
+ { "PDUs transmitted", "gsm_a.dtap.tp_pdu_description",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_downlink_timeslot_offset,
+ { "Downlink Timeslot Offset", "gsm_a.dtap.downlink_timeslot_offset",
+ FT_UINT8, BASE_DEC, NULL, 0x0E,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_ms_positioning_technology,
+ { "MS positioning technology", "gsm_a.dtap.ms_positioning_technology",
+ FT_UINT8, BASE_DEC, VALS(gsm_positioning_technology_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_ue_positioning_technology,
+ { "UE positioning technology", "gsm_a.dtap.ue_positioning_technology",
+ FT_UINT8, BASE_DEC, VALS(gsm_positioning_technology_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_ciphering_key_sequence_number,
+ { "Ciphering Key Sequence Number", "gsm_a.dtap.ciphering_key_sequence_number",
+ FT_UINT8, BASE_DEC, NULL, 0x07,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_ciphering_key_sequence_number70,
+ { "Ciphering Key Sequence Number", "gsm_a.dtap.ciphering_key_sequence_number",
+ FT_UINT8, BASE_DEC, NULL, 0x70,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_service_type,
+ { "Service Type", "gsm_a.dtap.service_type",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_service_type_vals), 0x0F,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_type_of_identity,
+ { "Type of identity", "gsm_a.dtap.type_of_identity",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_type_of_identity_vals), 0x07,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_follow_on_request,
+ { "Follow-On Request (FOR)", "gsm_a.dtap.follow_on_request",
+ FT_BOOLEAN, 8, TFS(&tfs_follow_on_request_value ), 0x08,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_updating_type,
+ { "Updating Type", "gsm_a.dtap.updating_type",
+ FT_UINT8, BASE_DEC, VALS(gsm_a_dtap_updating_type_vals), 0x03,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_congestion_level,
+ { "Congestion level", "gsm_a.dtap.congestion_level",
+ FT_UINT8, BASE_DEC, NULL, 0x0F,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_protocol_discriminator,
+ { "Protocol Discriminator", "gsm_a.dtap.protocol_discriminator",
+ FT_UINT8, BASE_DEC, VALS(protocol_discriminator_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_ti_flag,
+ { "TI flag", "gsm_a.dtap.ti_flag",
+ FT_BOOLEAN, 8, TFS(&tfs_ti_flags), 0x80,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_tio,
+ { "TIO", "gsm_a.dtap.tio",
+ FT_UINT8, BASE_DEC, NULL, 0x70,
+ NULL, HFILL }
+ },
+ { &hf_gsm_a_dtap_tie,
+ { "TIE", "gsm_a.dtap.tie",
+ FT_UINT8, BASE_DEC, NULL, DTAP_TIE_MASK,
+ NULL, HFILL }
+ },
+ };
+
+ /* Setup protocol subtree array */
#define NUM_INDIVIDUAL_ELEMS 21
- gint *ett[NUM_INDIVIDUAL_ELEMS +
- NUM_GSM_DTAP_MSG_MM + NUM_GSM_DTAP_MSG_CC +
- NUM_GSM_DTAP_MSG_SMS + NUM_GSM_DTAP_MSG_SS + NUM_GSM_DTAP_MSG_TP +
- NUM_GSM_DTAP_ELEM];
-
- static ei_register_info ei[] = {
- { &ei_gsm_a_dtap_autn, { "gsm_a.dtap.autn.invalid", PI_MALFORMED, PI_WARN, "AUTN length not equal to 16", EXPFILL }},
- { &ei_gsm_a_dtap_auts, { "gsm_a.dtap.auts.invalid", PI_MALFORMED, PI_WARN, "AUTS length not equal to 14", EXPFILL }},
- { &ei_gsm_a_dtap_text_string_not_multiple_of_7, { "gsm_a.dtap.text_string_not_multiple_of_7", PI_MALFORMED, PI_WARN, "Value leads to a Text String whose length is not a multiple of 7 bits", EXPFILL }},
- { &ei_gsm_a_dtap_end_mark_unexpected, { "gsm_a.dtap.end_mark_unexpected", PI_MALFORMED, PI_WARN, "\'f\' end mark present in unexpected position", EXPFILL }},
- { &ei_gsm_a_dtap_invalid_ia5_character, { "gsm_a.dtap.invalid_ia5_character", PI_MALFORMED, PI_WARN, "Invalid IA5 character(s) in string (value > 127)", EXPFILL }},
- { &ei_gsm_a_dtap_keypad_info_not_dtmf_digit, { "gsm_a.dtap.keypad_info_not_dtmf_digit", PI_MALFORMED, PI_WARN, "Keypad information contains character that is not a DTMF digit", EXPFILL }},
- };
-
- expert_module_t* expert_a_dtap;
-
- ett[0] = &ett_dtap_msg;
- ett[1] = &ett_dtap_oct_1;
- ett[2] = &ett_cm_srvc_type;
- ett[3] = &ett_gsm_enc_info;
- ett[4] = &ett_bc_oct_3;
- ett[5] = &ett_bc_oct_3a;
- ett[6] = &ett_bc_oct_4;
- ett[7] = &ett_bc_oct_5;
- ett[8] = &ett_bc_oct_5a;
- ett[9] = &ett_bc_oct_5b;
- ett[10] = &ett_bc_oct_6;
- ett[11] = &ett_bc_oct_6a;
- ett[12] = &ett_bc_oct_6b;
- ett[13] = &ett_bc_oct_6c;
- ett[14] = &ett_bc_oct_6d;
- ett[15] = &ett_bc_oct_6e;
- ett[16] = &ett_bc_oct_6f;
- ett[17] = &ett_bc_oct_6g;
- ett[18] = &ett_bc_oct_7;
- ett[19] = &ett_epc_ue_tl_a_lb_setup;
- ett[20] = &ett_mm_timer;
-
- last_offset = NUM_INDIVIDUAL_ELEMS;
-
- for (i=0; i < NUM_GSM_DTAP_MSG_MM; i++, last_offset++)
- {
- ett_gsm_dtap_msg_mm[i] = -1;
- ett[last_offset] = &ett_gsm_dtap_msg_mm[i];
- }
-
- for (i=0; i < NUM_GSM_DTAP_MSG_CC; i++, last_offset++)
- {
- ett_gsm_dtap_msg_cc[i] = -1;
- ett[last_offset] = &ett_gsm_dtap_msg_cc[i];
- }
-
- for (i=0; i < NUM_GSM_DTAP_MSG_SMS; i++, last_offset++)
- {
- ett_gsm_dtap_msg_sms[i] = -1;
- ett[last_offset] = &ett_gsm_dtap_msg_sms[i];
- }
-
- for (i=0; i < NUM_GSM_DTAP_MSG_SS; i++, last_offset++)
- {
- ett_gsm_dtap_msg_ss[i] = -1;
- ett[last_offset] = &ett_gsm_dtap_msg_ss[i];
- }
-
- for (i=0; i < NUM_GSM_DTAP_MSG_TP; i++, last_offset++)
- {
- ett_gsm_dtap_msg_tp[i] = -1;
- ett[last_offset] = &ett_gsm_dtap_msg_tp[i];
- }
-
- for (i=0; i < NUM_GSM_DTAP_ELEM; i++, last_offset++)
- {
- ett_gsm_dtap_elem[i] = -1;
- ett[last_offset] = &ett_gsm_dtap_elem[i];
- }
-
- /* Register the protocol name and description */
-
- proto_a_dtap =
- proto_register_protocol("GSM A-I/F DTAP", "GSM DTAP", "gsm_a.dtap");
-
- proto_register_field_array(proto_a_dtap, hf, array_length(hf));
-
- proto_register_subtree_array(ett, array_length(ett));
- expert_a_dtap = expert_register_protocol(proto_a_dtap);
- expert_register_field_array(expert_a_dtap, ei, array_length(ei));
-
-
- /* subdissector code */
- register_dissector("gsm_a_dtap", dissect_dtap, proto_a_dtap);
+ gint *ett[NUM_INDIVIDUAL_ELEMS +
+ NUM_GSM_DTAP_MSG_MM + NUM_GSM_DTAP_MSG_CC +
+ NUM_GSM_DTAP_MSG_SMS + NUM_GSM_DTAP_MSG_SS + NUM_GSM_DTAP_MSG_TP +
+ NUM_GSM_DTAP_ELEM];
+
+ static ei_register_info ei[] = {
+ { &ei_gsm_a_dtap_autn, { "gsm_a.dtap.autn.invalid", PI_MALFORMED, PI_WARN, "AUTN length not equal to 16", EXPFILL }},
+ { &ei_gsm_a_dtap_auts, { "gsm_a.dtap.auts.invalid", PI_MALFORMED, PI_WARN, "AUTS length not equal to 14", EXPFILL }},
+ { &ei_gsm_a_dtap_text_string_not_multiple_of_7, { "gsm_a.dtap.text_string_not_multiple_of_7", PI_MALFORMED, PI_WARN, "Value leads to a Text String whose length is not a multiple of 7 bits", EXPFILL }},
+ { &ei_gsm_a_dtap_end_mark_unexpected, { "gsm_a.dtap.end_mark_unexpected", PI_MALFORMED, PI_WARN, "\'f\' end mark present in unexpected position", EXPFILL }},
+ { &ei_gsm_a_dtap_invalid_ia5_character, { "gsm_a.dtap.invalid_ia5_character", PI_MALFORMED, PI_WARN, "Invalid IA5 character(s) in string (value > 127)", EXPFILL }},
+ { &ei_gsm_a_dtap_keypad_info_not_dtmf_digit, { "gsm_a.dtap.keypad_info_not_dtmf_digit", PI_MALFORMED, PI_WARN, "Keypad information contains character that is not a DTMF digit", EXPFILL }},
+ };
+
+ expert_module_t* expert_a_dtap;
+
+ ett[0] = &ett_dtap_msg;
+ ett[1] = &ett_dtap_oct_1;
+ ett[2] = &ett_cm_srvc_type;
+ ett[3] = &ett_gsm_enc_info;
+ ett[4] = &ett_bc_oct_3;
+ ett[5] = &ett_bc_oct_3a;
+ ett[6] = &ett_bc_oct_4;
+ ett[7] = &ett_bc_oct_5;
+ ett[8] = &ett_bc_oct_5a;
+ ett[9] = &ett_bc_oct_5b;
+ ett[10] = &ett_bc_oct_6;
+ ett[11] = &ett_bc_oct_6a;
+ ett[12] = &ett_bc_oct_6b;
+ ett[13] = &ett_bc_oct_6c;
+ ett[14] = &ett_bc_oct_6d;
+ ett[15] = &ett_bc_oct_6e;
+ ett[16] = &ett_bc_oct_6f;
+ ett[17] = &ett_bc_oct_6g;
+ ett[18] = &ett_bc_oct_7;
+ ett[19] = &ett_epc_ue_tl_a_lb_setup;
+ ett[20] = &ett_mm_timer;
+
+ last_offset = NUM_INDIVIDUAL_ELEMS;
+
+ for (i=0; i < NUM_GSM_DTAP_MSG_MM; i++, last_offset++)
+ {
+ ett_gsm_dtap_msg_mm[i] = -1;
+ ett[last_offset] = &ett_gsm_dtap_msg_mm[i];
+ }
+
+ for (i=0; i < NUM_GSM_DTAP_MSG_CC; i++, last_offset++)
+ {
+ ett_gsm_dtap_msg_cc[i] = -1;
+ ett[last_offset] = &ett_gsm_dtap_msg_cc[i];
+ }
+
+ for (i=0; i < NUM_GSM_DTAP_MSG_SMS; i++, last_offset++)
+ {
+ ett_gsm_dtap_msg_sms[i] = -1;
+ ett[last_offset] = &ett_gsm_dtap_msg_sms[i];
+ }
+
+ for (i=0; i < NUM_GSM_DTAP_MSG_SS; i++, last_offset++)
+ {
+ ett_gsm_dtap_msg_ss[i] = -1;
+ ett[last_offset] = &ett_gsm_dtap_msg_ss[i];
+ }
+
+ for (i=0; i < NUM_GSM_DTAP_MSG_TP; i++, last_offset++)
+ {
+ ett_gsm_dtap_msg_tp[i] = -1;
+ ett[last_offset] = &ett_gsm_dtap_msg_tp[i];
+ }
+
+ for (i=0; i < NUM_GSM_DTAP_ELEM; i++, last_offset++)
+ {
+ ett_gsm_dtap_elem[i] = -1;
+ ett[last_offset] = &ett_gsm_dtap_elem[i];
+ }
+
+ /* Register the protocol name and description */
+
+ proto_a_dtap =
+ proto_register_protocol("GSM A-I/F DTAP", "GSM DTAP", "gsm_a.dtap");
+
+ proto_register_field_array(proto_a_dtap, hf, array_length(hf));
+
+ proto_register_subtree_array(ett, array_length(ett));
+ expert_a_dtap = expert_register_protocol(proto_a_dtap);
+ expert_register_field_array(expert_a_dtap, ei, array_length(ei));
+
+
+ /* subdissector code */
+ register_dissector("gsm_a_dtap", dissect_dtap, proto_a_dtap);
}
void
proto_reg_handoff_gsm_a_dtap(void)
{
- dissector_handle_t dtap_handle;
+ dissector_handle_t dtap_handle;
- dtap_handle = find_dissector("gsm_a_dtap");
- dissector_add_uint("bssap.pdu_type", BSSAP_PDU_TYPE_DTAP, dtap_handle);
- dissector_add_uint("ranap.nas_pdu", BSSAP_PDU_TYPE_DTAP, dtap_handle);
- dissector_add_uint("llcgprs.sapi", 1 , dtap_handle); /* GPRS Mobility Management */
- dissector_add_uint("llcgprs.sapi", 7 , dtap_handle); /* SMS */
- dissector_add_uint("lapdm.sapi", 0 , dtap_handle); /* LAPDm: CC/RR/MM */
- dissector_add_uint("lapdm.sapi", 3 , dtap_handle); /* LAPDm: SMS/SS */
+ dtap_handle = find_dissector("gsm_a_dtap");
+ dissector_add_uint("bssap.pdu_type", BSSAP_PDU_TYPE_DTAP, dtap_handle);
+ dissector_add_uint("ranap.nas_pdu", BSSAP_PDU_TYPE_DTAP, dtap_handle);
+ dissector_add_uint("llcgprs.sapi", 1 , dtap_handle); /* GPRS Mobility Management */
+ dissector_add_uint("llcgprs.sapi", 7 , dtap_handle); /* SMS */
+ dissector_add_uint("lapdm.sapi", 0 , dtap_handle); /* LAPDm: CC/RR/MM */
+ dissector_add_uint("lapdm.sapi", 3 , dtap_handle); /* LAPDm: SMS/SS */
- data_handle = find_dissector("data");
- gsm_map_handle = find_dissector("gsm_map");
- rp_handle = find_dissector("gsm_a_rp");
+ data_handle = find_dissector("data");
+ gsm_map_handle = find_dissector("gsm_map");
+ rp_handle = find_dissector("gsm_a_rp");
}
+
+
+/*
+ * 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:
+ */