aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-bssap.c
diff options
context:
space:
mode:
authorwmeier <wmeier@f5534014-38df-0310-8fa8-9805f1628bb7>2010-05-10 15:54:57 +0000
committerwmeier <wmeier@f5534014-38df-0310-8fa8-9805f1628bb7>2010-05-10 15:54:57 +0000
commitb9a4862c10a8e8a3ef7c9983b857c7d6ce5facc1 (patch)
treea705161815ce4b6ab546dbeb6743658d6d50cfe0 /epan/dissectors/packet-bssap.c
parent09d82e68d193228c1fd9a25441f403a1c41f7951 (diff)
Indentation & whitespace cleanup (including: "4 space tabs" ==> spaces)
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@32735 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'epan/dissectors/packet-bssap.c')
-rw-r--r--epan/dissectors/packet-bssap.c3846
1 files changed, 1923 insertions, 1923 deletions
diff --git a/epan/dissectors/packet-bssap.c b/epan/dissectors/packet-bssap.c
index 0e5971e185..9a24ec4ab9 100644
--- a/epan/dissectors/packet-bssap.c
+++ b/epan/dissectors/packet-bssap.c
@@ -1,8 +1,8 @@
/* packet-bssap.c
* Routines for Base Station Subsystem Application Part (BSSAP/BSAP) dissection
* Specifications from 3GPP2 (www.3gpp2.org) and 3GPP (www.3gpp.org)
- * IOS 4.0.1 (BSAP)
- * GSM 08.06 (BSSAP)
+ * IOS 4.0.1 (BSAP)
+ * GSM 08.06 (BSSAP)
*
* Copyright 2003, Michael Lum <mlum [AT] telostech.com>
* In association with Telos Technology Inc.
@@ -72,180 +72,180 @@ void proto_reg_handoff_bssap(void);
/* Same as below but with names typed out */
static const value_string bssap_pdu_type_values[] = {
- { BSSAP_PDU_TYPE_BSSMAP, "BSS Management" },
- { BSSAP_PDU_TYPE_DTAP, "Direct Transfer" },
- { 0, NULL } };
+ { BSSAP_PDU_TYPE_BSSMAP, "BSS Management" },
+ { BSSAP_PDU_TYPE_DTAP, "Direct Transfer" },
+ { 0, NULL } };
static const value_string bsap_pdu_type_values[] = {
- { BSSAP_PDU_TYPE_BSSMAP, "BS Management" },
- { BSSAP_PDU_TYPE_DTAP, "Direct Transfer" },
- { 0, NULL } };
+ { BSSAP_PDU_TYPE_BSSMAP, "BS Management" },
+ { BSSAP_PDU_TYPE_DTAP, "Direct Transfer" },
+ { 0, NULL } };
/* Same as above but in acronym for (for the Info column) */
static const value_string bssap_pdu_type_acro_values[] = {
- { BSSAP_PDU_TYPE_BSSMAP, "BSSMAP" },
- { BSSAP_PDU_TYPE_DTAP, "DTAP" },
- { 0, NULL } };
+ { BSSAP_PDU_TYPE_BSSMAP, "BSSMAP" },
+ { BSSAP_PDU_TYPE_DTAP, "DTAP" },
+ { 0, NULL } };
/* Same as above but in acronym for (for the Info column) */
static const value_string bsap_pdu_type_acro_values[] = {
- { BSSAP_PDU_TYPE_BSSMAP, "BSMAP" },
- { BSSAP_PDU_TYPE_DTAP, "DTAP" },
- { 0, NULL } };
+ { BSSAP_PDU_TYPE_BSSMAP, "BSMAP" },
+ { BSSAP_PDU_TYPE_DTAP, "DTAP" },
+ { 0, NULL } };
-#define PARAMETER_DLCI 0x00
-#define PARAMETER_LENGTH 0x01
-#define PARAMETER_DATA 0x02
+#define PARAMETER_DLCI 0x00
+#define PARAMETER_LENGTH 0x01
+#define PARAMETER_DATA 0x02
-#define DLCI_LENGTH 1
-#define LENGTH_LENGTH 1
-#define DATA_LENGTH 1
+#define DLCI_LENGTH 1
+#define LENGTH_LENGTH 1
+#define DATA_LENGTH 1
-#define CC_MASK 0xc0
-#define SPARE_MASK 0x38
-#define SAPI_MASK 0x07
+#define CC_MASK 0xc0
+#define SPARE_MASK 0x38
+#define SAPI_MASK 0x07
static guint global_bssap_ssn = 98;
static const value_string bssap_cc_values[] = {
- { 0x00, "not further specified" },
- { 0x80, "FACCH or SDCCH" },
- { 0xc0, "SACCH" },
- { 0, NULL } };
+ { 0x00, "not further specified" },
+ { 0x80, "FACCH or SDCCH" },
+ { 0xc0, "SACCH" },
+ { 0, NULL } };
static const value_string bsap_cc_values[] = {
- { 0x00, "default for TIA/EIA/IS-2000" },
- { 0, NULL } };
+ { 0x00, "default for TIA/EIA/IS-2000" },
+ { 0, NULL } };
static const value_string bssap_sapi_values[] = {
- { 0x00, "RR/MM/CC" },
- { 0x03, "SMS" },
- { 0, NULL } };
+ { 0x00, "RR/MM/CC" },
+ { 0x03, "SMS" },
+ { 0, NULL } };
static const value_string bsap_sapi_values[] = {
- { 0x00, "Not used" },
- { 0, NULL } };
-
-#define BSSAP_PAGING_REQUEST 1
-#define BSSAP_PAGING_REJECT 2 /* 17.1.18 */
-#define BSSAP_DOWNLINK_TUNNEL_REQUEST 7 /* 17.1.4 */
-#define BSSAP_UPLINK_TUNNEL_REQUEST 8 /* 17.1.23 */
-#define BSSAP_LOCATION_UPDATE_REQUEST 9 /* 17.1.11 */
-#define BSSAP_LOCATION_UPDATE_ACCEPT 10 /* 17.1.9 */
-#define BSSAP_LOCATION_UPDATE_REJECT 11 /* 17.1.10 */
-#define BSSAP_TMSI_REALLOCATION_COMPLETE 12 /* 17.1.22 */
-#define BSSAP_ALERT_REQUEST 13 /* 17.1.3 */
-#define BSSAP_ALERT_ACK 14 /* 17.1.1 */
-#define BSSAP_ALERT_REJECT 15 /* 17.1.2 */
-#define BSSAP_MS_ACTIVITY_INDICATION 16 /* 17.1.14 */
-#define BSSAP_GPRS_DETACH_INDICATION 17 /* 17.1.6 */
-#define BSSAP_GPRS_DETACH_ACK 18 /* 17.1.5 */
-#define BSSAP_IMSI_DETACH_INDICATION 19 /* 17.1.8 */
-#define BSSAP_IMSI_DETACH_ACK 20 /* 17.1.7 */
-#define BSSAP_RESET_INDICATION 21 /* 17.1.21 */
-#define BSSAP_RESET_ACK 22 /* 17.1.20 */
-#define BSSAP_MS_INFORMATION_REQUEST 23 /* 17.1.15 */
-#define BSSAP_MS_INFORMATION_RESPONSE 24 /* 17.1.16 */
-#define BSSAP_MM_INFORMATION_REQUEST 26 /* 17.1.12 */
-#define BSSAP_MOBILE_STATUS 29 /* 17.1.13 */
-#define BSSAP_MS_UNREACHABLE 31 /* 17.1.17 */
+ { 0x00, "Not used" },
+ { 0, NULL } };
+
+#define BSSAP_PAGING_REQUEST 1
+#define BSSAP_PAGING_REJECT 2 /* 17.1.18 */
+#define BSSAP_DOWNLINK_TUNNEL_REQUEST 7 /* 17.1.4 */
+#define BSSAP_UPLINK_TUNNEL_REQUEST 8 /* 17.1.23 */
+#define BSSAP_LOCATION_UPDATE_REQUEST 9 /* 17.1.11 */
+#define BSSAP_LOCATION_UPDATE_ACCEPT 10 /* 17.1.9 */
+#define BSSAP_LOCATION_UPDATE_REJECT 11 /* 17.1.10 */
+#define BSSAP_TMSI_REALLOCATION_COMPLETE 12 /* 17.1.22 */
+#define BSSAP_ALERT_REQUEST 13 /* 17.1.3 */
+#define BSSAP_ALERT_ACK 14 /* 17.1.1 */
+#define BSSAP_ALERT_REJECT 15 /* 17.1.2 */
+#define BSSAP_MS_ACTIVITY_INDICATION 16 /* 17.1.14 */
+#define BSSAP_GPRS_DETACH_INDICATION 17 /* 17.1.6 */
+#define BSSAP_GPRS_DETACH_ACK 18 /* 17.1.5 */
+#define BSSAP_IMSI_DETACH_INDICATION 19 /* 17.1.8 */
+#define BSSAP_IMSI_DETACH_ACK 20 /* 17.1.7 */
+#define BSSAP_RESET_INDICATION 21 /* 17.1.21 */
+#define BSSAP_RESET_ACK 22 /* 17.1.20 */
+#define BSSAP_MS_INFORMATION_REQUEST 23 /* 17.1.15 */
+#define BSSAP_MS_INFORMATION_RESPONSE 24 /* 17.1.16 */
+#define BSSAP_MM_INFORMATION_REQUEST 26 /* 17.1.12 */
+#define BSSAP_MOBILE_STATUS 29 /* 17.1.13 */
+#define BSSAP_MS_UNREACHABLE 31 /* 17.1.17 */
static const value_string bssap_plus_message_type_values[] = {
- { 0x00, "Unassigned: treated as an unknown Message type." },
- { BSSAP_PAGING_REQUEST, "BSSAP+-PAGING-REQUEST" }, /* 17.1.19 */
- { BSSAP_PAGING_REJECT, "BSSAP+-PAGING-REJECT" }, /* 17.1.18 */
- { 0x03, "Unassigned: treated as an unknown Message type." },
- { 0x04, "Unassigned: treated as an unknown Message type." },
- { 0x05, "Unassigned: treated as an unknown Message type." },
- { 0x06, "Unassigned: treated as an unknown Message type." },
- { BSSAP_DOWNLINK_TUNNEL_REQUEST, "BSSAP+-DOWNLINK-TUNNEL-REQUEST" }, /* 17.1.4 */
- { BSSAP_UPLINK_TUNNEL_REQUEST, "BSSAP+-UPLINK-TUNNEL-REQUEST" }, /* 17.1.23 */
- { BSSAP_LOCATION_UPDATE_REQUEST, "BSSAP+-LOCATION-UPDATE-REQUEST" }, /* 17.1.11 */
- { BSSAP_LOCATION_UPDATE_ACCEPT, "BSSAP+-LOCATION-UPDATE-ACCEPT" }, /* 17.1.9 */
- { BSSAP_LOCATION_UPDATE_REJECT, "BSSAP+-LOCATION-UPDATE-REJECT" }, /* 17.1.10 */
- { BSSAP_TMSI_REALLOCATION_COMPLETE, "BSSAP+-TMSI-REALLOCATION-COMPLETE" }, /* 17.1.22 */
- { BSSAP_ALERT_REQUEST, "BSSAP+-ALERT-REQUEST" }, /* 17.1.3 */
- { BSSAP_ALERT_ACK, "BSSAP+-ALERT-ACK" }, /* 17.1.1 */
- { BSSAP_ALERT_REJECT, "BSSAP+-ALERT-REJECT" }, /* 17.1.2 */
- { BSSAP_MS_ACTIVITY_INDICATION, "BSSAP+-MS-ACTIVITY-INDICATION" }, /* 17.1.14 */
- { BSSAP_GPRS_DETACH_INDICATION, "BSSAP+-GPRS-DETACH-INDICATION" }, /* 17.1.6 */
- { BSSAP_GPRS_DETACH_ACK, "BSSAP+-GPRS-DETACH-ACK" }, /* 17.1.5 */
- { BSSAP_IMSI_DETACH_INDICATION, "BSSAP+-IMSI-DETACH-INDICATION" }, /* 17.1.8 */
- { BSSAP_IMSI_DETACH_ACK, "BSSAP+-IMSI-DETACH-ACK" }, /* 17.1.7 */
- { BSSAP_RESET_INDICATION, "BSSAP+-RESET-INDICATION" }, /* 17.1.21 */
- { BSSAP_RESET_ACK, "BSSAP+-RESET-ACK" }, /* 17.1.20 */
- { BSSAP_MS_INFORMATION_REQUEST, "BSSAP+-MS-INFORMATION-REQUEST" }, /* 17.1.15 */
- { BSSAP_MS_INFORMATION_RESPONSE, "BSSAP+-MS-INFORMATION-RESPONSE" }, /* 17.1.16 */
- { 0x19, "Unassigned: treated as an unknown Message type." },
- { BSSAP_MM_INFORMATION_REQUEST, "BSSAP+-MM-INFORMATION-REQUEST" }, /* 17.1.12 */
- { BSSAP_MOBILE_STATUS, "BSSAP+-MOBILE-STATUS" }, /* 17.1.13 */
- { 0x1e, "Unassigned: treated as an unknown Message type." },
- { BSSAP_MS_UNREACHABLE, "BSSAP+-MS-UNREACHABLE" }, /* 17.1.17 */
- { 0, NULL }
+ { 0x00, "Unassigned: treated as an unknown Message type." },
+ { BSSAP_PAGING_REQUEST, "BSSAP+-PAGING-REQUEST" }, /* 17.1.19 */
+ { BSSAP_PAGING_REJECT, "BSSAP+-PAGING-REJECT" }, /* 17.1.18 */
+ { 0x03, "Unassigned: treated as an unknown Message type." },
+ { 0x04, "Unassigned: treated as an unknown Message type." },
+ { 0x05, "Unassigned: treated as an unknown Message type." },
+ { 0x06, "Unassigned: treated as an unknown Message type." },
+ { BSSAP_DOWNLINK_TUNNEL_REQUEST, "BSSAP+-DOWNLINK-TUNNEL-REQUEST" }, /* 17.1.4 */
+ { BSSAP_UPLINK_TUNNEL_REQUEST, "BSSAP+-UPLINK-TUNNEL-REQUEST" }, /* 17.1.23 */
+ { BSSAP_LOCATION_UPDATE_REQUEST, "BSSAP+-LOCATION-UPDATE-REQUEST" }, /* 17.1.11 */
+ { BSSAP_LOCATION_UPDATE_ACCEPT, "BSSAP+-LOCATION-UPDATE-ACCEPT" }, /* 17.1.9 */
+ { BSSAP_LOCATION_UPDATE_REJECT, "BSSAP+-LOCATION-UPDATE-REJECT" }, /* 17.1.10 */
+ { BSSAP_TMSI_REALLOCATION_COMPLETE, "BSSAP+-TMSI-REALLOCATION-COMPLETE" }, /* 17.1.22 */
+ { BSSAP_ALERT_REQUEST, "BSSAP+-ALERT-REQUEST" }, /* 17.1.3 */
+ { BSSAP_ALERT_ACK, "BSSAP+-ALERT-ACK" }, /* 17.1.1 */
+ { BSSAP_ALERT_REJECT, "BSSAP+-ALERT-REJECT" }, /* 17.1.2 */
+ { BSSAP_MS_ACTIVITY_INDICATION, "BSSAP+-MS-ACTIVITY-INDICATION" }, /* 17.1.14 */
+ { BSSAP_GPRS_DETACH_INDICATION, "BSSAP+-GPRS-DETACH-INDICATION" }, /* 17.1.6 */
+ { BSSAP_GPRS_DETACH_ACK, "BSSAP+-GPRS-DETACH-ACK" }, /* 17.1.5 */
+ { BSSAP_IMSI_DETACH_INDICATION, "BSSAP+-IMSI-DETACH-INDICATION" }, /* 17.1.8 */
+ { BSSAP_IMSI_DETACH_ACK, "BSSAP+-IMSI-DETACH-ACK" }, /* 17.1.7 */
+ { BSSAP_RESET_INDICATION, "BSSAP+-RESET-INDICATION" }, /* 17.1.21 */
+ { BSSAP_RESET_ACK, "BSSAP+-RESET-ACK" }, /* 17.1.20 */
+ { BSSAP_MS_INFORMATION_REQUEST, "BSSAP+-MS-INFORMATION-REQUEST" }, /* 17.1.15 */
+ { BSSAP_MS_INFORMATION_RESPONSE, "BSSAP+-MS-INFORMATION-RESPONSE" }, /* 17.1.16 */
+ { 0x19, "Unassigned: treated as an unknown Message type." },
+ { BSSAP_MM_INFORMATION_REQUEST, "BSSAP+-MM-INFORMATION-REQUEST" }, /* 17.1.12 */
+ { BSSAP_MOBILE_STATUS, "BSSAP+-MOBILE-STATUS" }, /* 17.1.13 */
+ { 0x1e, "Unassigned: treated as an unknown Message type." },
+ { BSSAP_MS_UNREACHABLE, "BSSAP+-MS-UNREACHABLE" }, /* 17.1.17 */
+ { 0, NULL }
};
-#define BSSAP_IMSI 1
-#define BSSAP_VLR_NUMBER 2
-#define BSSAP_TMSI 3
-#define BSSAP_LOC_AREA_ID 4
-#define BSSAP_CHANNEL_NEEDED 5
-#define BSSAP_EMLPP_PRIORITY 6
-#define BSSAP_TMSI_STATUS 7
-#define BSSAP_GS_CAUSE 8
-#define BSSAP_SGSN_NUMBER 9
-#define BSSAP_GPRS_LOC_UPD_TYPE 0x0a
-#define BSSAP_GLOBAL_CN_ID 0x0b
-#define BSSAP_MOBILE_STN_CLS_MRK1 0x0d
-#define BSSAP_MOBILE_ID 0x0e
-#define BSSAP_REJECT_CAUSE 0x0f
-#define BSSAP_IMSI_DET_FROM_GPRS_SERV_TYPE 0x10
-#define BSSAP_IMSI_DET_FROM_NON_GPRS_SERV_TYPE 0x11
-#define BSSAP_INFO_REQ 0x12
-#define BSSAP_PTMSI 0x13
-#define BSSAP_IMEI 0x14
-#define BSSAP_IMEISV 0x15
-#define BSSAP_MM_INFORMATION 0x17
-#define BSSAP_CELL_GBL_ID 0x18
-#define BSSAP_LOC_INF_AGE 0x19
-#define BSSAP_MOBILE_STN_STATE 0x1a
-#define BSSAP_SERVICE_AREA_ID 0x1e
-#define BSSAP_ERRONEOUS_MSG 0x1b
-#define BSSAP_DLINK_TNL_PLD_CTR_AND_INF 0x1c
-#define BSSAP_ULINK_TNL_PLD_CTR_AND_INF 0x1d
+#define BSSAP_IMSI 1
+#define BSSAP_VLR_NUMBER 2
+#define BSSAP_TMSI 3
+#define BSSAP_LOC_AREA_ID 4
+#define BSSAP_CHANNEL_NEEDED 5
+#define BSSAP_EMLPP_PRIORITY 6
+#define BSSAP_TMSI_STATUS 7
+#define BSSAP_GS_CAUSE 8
+#define BSSAP_SGSN_NUMBER 9
+#define BSSAP_GPRS_LOC_UPD_TYPE 0x0a
+#define BSSAP_GLOBAL_CN_ID 0x0b
+#define BSSAP_MOBILE_STN_CLS_MRK1 0x0d
+#define BSSAP_MOBILE_ID 0x0e
+#define BSSAP_REJECT_CAUSE 0x0f
+#define BSSAP_IMSI_DET_FROM_GPRS_SERV_TYPE 0x10
+#define BSSAP_IMSI_DET_FROM_NON_GPRS_SERV_TYPE 0x11
+#define BSSAP_INFO_REQ 0x12
+#define BSSAP_PTMSI 0x13
+#define BSSAP_IMEI 0x14
+#define BSSAP_IMEISV 0x15
+#define BSSAP_MM_INFORMATION 0x17
+#define BSSAP_CELL_GBL_ID 0x18
+#define BSSAP_LOC_INF_AGE 0x19
+#define BSSAP_MOBILE_STN_STATE 0x1a
+#define BSSAP_SERVICE_AREA_ID 0x1e
+#define BSSAP_ERRONEOUS_MSG 0x1b
+#define BSSAP_DLINK_TNL_PLD_CTR_AND_INF 0x1c
+#define BSSAP_ULINK_TNL_PLD_CTR_AND_INF 0x1d
static const value_string bssap_plus_ie_id_values[] = {
- { BSSAP_IMSI, "IMSI" }, /* 18.4.10 */
- { BSSAP_VLR_NUMBER, "VLR number" }, /* 18.4.26 */
- { BSSAP_TMSI, "TMSI" }, /* 18.4.23 */
- { BSSAP_LOC_AREA_ID, "Location area identifier" }, /* 18.4.14 */
- { BSSAP_CHANNEL_NEEDED, "Channel Needed" }, /* 18.4.2 */
- { BSSAP_EMLPP_PRIORITY, "eMLPP Priority" }, /* 18.4.4 */
- { BSSAP_TMSI_STATUS, "TMSI status" }, /* 18.4.24 */
- { BSSAP_GS_CAUSE, "Gs cause" }, /* 18.4.7 */
- { BSSAP_SGSN_NUMBER, "SGSN number" }, /* 18.4.22 */
- { BSSAP_GPRS_LOC_UPD_TYPE, "GPRS location update type" }, /* 18.4.6 */
- { BSSAP_GLOBAL_CN_ID, "Global CN-Id" }, /* 18.4.27 */
- { 0x0c, "Unassigned: treated as an unknown IEI." }, /* 18 and 16 */
- { BSSAP_MOBILE_STN_CLS_MRK1, "Mobile station classmark 1" }, /* 18.4.18 */
- { BSSAP_MOBILE_ID, "Mobile identity" }, /* 18.4.17 */
- { BSSAP_REJECT_CAUSE, "Reject cause" }, /* 18.4.21 */
- { BSSAP_IMSI_DET_FROM_GPRS_SERV_TYPE, "IMSI detach from GPRS service type" }, /* 18.4.11 */
- { BSSAP_IMSI_DET_FROM_NON_GPRS_SERV_TYPE, "IMSI detach from non-GPRS service type" }, /* 18.4.12 */
- { BSSAP_INFO_REQ, "Information requested" }, /* 18.4.13 */
- { BSSAP_PTMSI, "PTMSI" }, /* 18.4.20 */
- { BSSAP_IMEI, "IMEI" }, /* 18.4.8 */
- { BSSAP_IMEISV, "IMEISV" }, /* 18.4.9 */
- { 0x16, "Unassigned: treated as an unknown IEI." }, /* 18 and 16 */
- { BSSAP_MM_INFORMATION, "MM information" }, /* 18.4.16 */
- { BSSAP_CELL_GBL_ID, "Cell Global Identity" }, /* 18.4.1 */
- { BSSAP_LOC_INF_AGE, "Location information age" }, /* 18.4.15 */
- { BSSAP_MOBILE_STN_STATE, "Mobile station state" }, /* 18.4.19 */
- { BSSAP_ERRONEOUS_MSG, "Erroneous message" }, /* 18.4.5 */
- { BSSAP_DLINK_TNL_PLD_CTR_AND_INF, "Downlink Tunnel Payload Control and Info" }, /* 18.4.3 */
- { BSSAP_ULINK_TNL_PLD_CTR_AND_INF, "Uplink Tunnel Payload Control and Info" }, /* 18.4.25 */
- { BSSAP_SERVICE_AREA_ID, "Service Area Identification" }, /* 18.4.21b */
+ { BSSAP_IMSI, "IMSI" }, /* 18.4.10 */
+ { BSSAP_VLR_NUMBER, "VLR number" }, /* 18.4.26 */
+ { BSSAP_TMSI, "TMSI" }, /* 18.4.23 */
+ { BSSAP_LOC_AREA_ID, "Location area identifier" }, /* 18.4.14 */
+ { BSSAP_CHANNEL_NEEDED, "Channel Needed" }, /* 18.4.2 */
+ { BSSAP_EMLPP_PRIORITY, "eMLPP Priority" }, /* 18.4.4 */
+ { BSSAP_TMSI_STATUS, "TMSI status" }, /* 18.4.24 */
+ { BSSAP_GS_CAUSE, "Gs cause" }, /* 18.4.7 */
+ { BSSAP_SGSN_NUMBER, "SGSN number" }, /* 18.4.22 */
+ { BSSAP_GPRS_LOC_UPD_TYPE, "GPRS location update type" }, /* 18.4.6 */
+ { BSSAP_GLOBAL_CN_ID, "Global CN-Id" }, /* 18.4.27 */
+ { 0x0c, "Unassigned: treated as an unknown IEI." }, /* 18 and 16 */
+ { BSSAP_MOBILE_STN_CLS_MRK1, "Mobile station classmark 1" }, /* 18.4.18 */
+ { BSSAP_MOBILE_ID, "Mobile identity" }, /* 18.4.17 */
+ { BSSAP_REJECT_CAUSE, "Reject cause" }, /* 18.4.21 */
+ { BSSAP_IMSI_DET_FROM_GPRS_SERV_TYPE, "IMSI detach from GPRS service type" }, /* 18.4.11 */
+ { BSSAP_IMSI_DET_FROM_NON_GPRS_SERV_TYPE, "IMSI detach from non-GPRS service type" }, /* 18.4.12 */
+ { BSSAP_INFO_REQ, "Information requested" }, /* 18.4.13 */
+ { BSSAP_PTMSI, "PTMSI" }, /* 18.4.20 */
+ { BSSAP_IMEI, "IMEI" }, /* 18.4.8 */
+ { BSSAP_IMEISV, "IMEISV" }, /* 18.4.9 */
+ { 0x16, "Unassigned: treated as an unknown IEI." }, /* 18 and 16 */
+ { BSSAP_MM_INFORMATION, "MM information" }, /* 18.4.16 */
+ { BSSAP_CELL_GBL_ID, "Cell Global Identity" }, /* 18.4.1 */
+ { BSSAP_LOC_INF_AGE, "Location information age" }, /* 18.4.15 */
+ { BSSAP_MOBILE_STN_STATE, "Mobile station state" }, /* 18.4.19 */
+ { BSSAP_ERRONEOUS_MSG, "Erroneous message" }, /* 18.4.5 */
+ { BSSAP_DLINK_TNL_PLD_CTR_AND_INF, "Downlink Tunnel Payload Control and Info" }, /* 18.4.3 */
+ { BSSAP_ULINK_TNL_PLD_CTR_AND_INF, "Uplink Tunnel Payload Control and Info" }, /* 18.4.25 */
+ { BSSAP_SERVICE_AREA_ID, "Service Area Identification" }, /* 18.4.21b */
{ 0, NULL }
};
@@ -325,7 +325,7 @@ static int hf_bssap_cell_global_id = -1;
/* Initialize the subtree pointers */
static gint ett_bssap = -1;
static gint ett_bssap_dlci = -1;
-static gint ett_bssap_imsi = -1;
+static gint ett_bssap_imsi = -1;
static gint ett_bssap_imsi_det_from_gprs_serv_type = -1;
static gint ett_bssap_imsi_det_from_non_gprs_serv_type = -1;
static gint ett_bssap_info_req = -1;
@@ -368,39 +368,39 @@ static dissector_handle_t bsap_dissector_handle;
/*
* Keep track of pdu_type so we can call appropriate sub-dissector
*/
-static guint8 pdu_type = 0xFF;
+static guint8 pdu_type = 0xFF;
-static gint bssap_or_bsap_global = BSSAP_OR_BSAP_DEFAULT;
+static gint bssap_or_bsap_global = BSSAP_OR_BSAP_DEFAULT;
static gint gsm_or_lb_interface_global = GSM_OR_LB_INTERFACE_DEFAULT;
static void
dissect_bssap_unknown_message(tvbuff_t *message_tvb, proto_tree *bssap_tree)
{
- guint32 message_length;
+ guint32 message_length;
- message_length = tvb_length(message_tvb);
+ message_length = tvb_length(message_tvb);
- proto_tree_add_text(bssap_tree, message_tvb, 0, message_length,
- "Unknown message (%u byte%s)",
- message_length, plurality(message_length, "", "s"));
+ proto_tree_add_text(bssap_tree, message_tvb, 0, message_length,
+ "Unknown message (%u byte%s)",
+ message_length, plurality(message_length, "", "s"));
}
static void
dissect_bssap_unknown_param(tvbuff_t *tvb, proto_tree *tree, guint8 type, guint16 length)
{
- proto_tree_add_text(tree, tvb, 0, length,
- "Unknown parameter 0x%x (%u byte%s)",
- type, length, plurality(length, "", "s"));
+ proto_tree_add_text(tree, tvb, 0, length,
+ "Unknown parameter 0x%x (%u byte%s)",
+ type, length, plurality(length, "", "s"));
}
static void
dissect_bssap_data_param(tvbuff_t *tvb, packet_info *pinfo,
- proto_tree *bssap_tree, proto_tree *tree)
+ proto_tree *bssap_tree, proto_tree *tree)
{
- if ((pdu_type <= 0x01))
- {
- if (bssap_or_bsap_global == BSSAP)
+ if ((pdu_type <= 0x01))
+ {
+ if (bssap_or_bsap_global == BSSAP)
{
/* BSSAP */
if((gsm_or_lb_interface_global == LB_INTERFACE) && (pdu_type == BSSAP_PDU_TYPE_BSSMAP))
@@ -434,48 +434,48 @@ dissect_bssap_data_param(tvbuff_t *tvb, packet_info *pinfo,
if (dissector_try_port(bsap_dissector_table, pdu_type, tvb, pinfo, tree))
return;
}
- }
+ }
- /* No sub-dissection occured, treat it as raw data */
- call_dissector(data_handle, tvb, pinfo, bssap_tree);
+ /* No sub-dissection occured, treat it as raw data */
+ call_dissector(data_handle, tvb, pinfo, bssap_tree);
}
static void
dissect_bssap_dlci_param(tvbuff_t *tvb, proto_tree *tree, guint16 length)
{
- proto_item *dlci_item = 0;
- proto_tree *dlci_tree = 0;
- guint8 oct;
-
- dlci_item =
- proto_tree_add_text(tree, tvb, 0, length,
- "Data Link Connection Identifier");
-
- dlci_tree = proto_item_add_subtree(dlci_item, ett_bssap_dlci);
-
- oct = tvb_get_guint8(tvb, 0);
-
- if (bssap_or_bsap_global == BSSAP)
- {
- proto_tree_add_uint(dlci_tree, hf_bssap_dlci_cc, tvb, 0, length, oct);
- proto_tree_add_uint(dlci_tree, hf_bssap_dlci_spare, tvb, 0, length, oct);
- proto_tree_add_uint(dlci_tree, hf_bssap_dlci_sapi, tvb, 0, length, oct);
- }
- else
- {
- proto_tree_add_uint(dlci_tree, hf_bsap_dlci_cc, tvb, 0, length, oct);
- proto_tree_add_uint(dlci_tree, hf_bsap_dlci_rsvd, tvb, 0, length, oct);
- proto_tree_add_uint(dlci_tree, hf_bsap_dlci_sapi, tvb, 0, length, oct);
- }
+ proto_item *dlci_item = 0;
+ proto_tree *dlci_tree = 0;
+ guint8 oct;
+
+ dlci_item =
+ proto_tree_add_text(tree, tvb, 0, length,
+ "Data Link Connection Identifier");
+
+ dlci_tree = proto_item_add_subtree(dlci_item, ett_bssap_dlci);
+
+ oct = tvb_get_guint8(tvb, 0);
+
+ if (bssap_or_bsap_global == BSSAP)
+ {
+ proto_tree_add_uint(dlci_tree, hf_bssap_dlci_cc, tvb, 0, length, oct);
+ proto_tree_add_uint(dlci_tree, hf_bssap_dlci_spare, tvb, 0, length, oct);
+ proto_tree_add_uint(dlci_tree, hf_bssap_dlci_sapi, tvb, 0, length, oct);
+ }
+ else
+ {
+ proto_tree_add_uint(dlci_tree, hf_bsap_dlci_cc, tvb, 0, length, oct);
+ proto_tree_add_uint(dlci_tree, hf_bsap_dlci_rsvd, tvb, 0, length, oct);
+ proto_tree_add_uint(dlci_tree, hf_bsap_dlci_sapi, tvb, 0, length, oct);
+ }
}
static void
dissect_bssap_length_param(tvbuff_t *tvb, proto_tree *tree, guint16 length)
{
- guint8 data_length;
+ guint8 data_length;
- data_length = tvb_get_guint8(tvb, 0);
- proto_tree_add_uint(tree, hf_bssap_length, tvb, 0, length, data_length);
+ data_length = tvb_get_guint8(tvb, 0);
+ proto_tree_add_uint(tree, hf_bssap_length, tvb, 0, length, data_length);
}
/*
@@ -483,145 +483,145 @@ dissect_bssap_length_param(tvbuff_t *tvb, proto_tree *tree, guint16 length)
*/
static guint16
dissect_bssap_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *bssap_tree,
- proto_tree *tree, guint8 parameter_type, gint offset,
- guint16 parameter_length)
+ proto_tree *tree, guint8 parameter_type, gint offset,
+ guint16 parameter_length)
{
- tvbuff_t *parameter_tvb;
-
- parameter_tvb = tvb_new_subset(tvb, offset, parameter_length, parameter_length);
-
- switch (parameter_type)
- {
- case PARAMETER_DLCI:
- dissect_bssap_dlci_param(parameter_tvb, bssap_tree, parameter_length);
- break;
-
- case PARAMETER_LENGTH:
- dissect_bssap_length_param(parameter_tvb, bssap_tree, parameter_length);
- break;
+ tvbuff_t *parameter_tvb;
- case PARAMETER_DATA:
- dissect_bssap_data_param(parameter_tvb, pinfo, bssap_tree, tree);
- break;
+ parameter_tvb = tvb_new_subset(tvb, offset, parameter_length, parameter_length);
- default:
- dissect_bssap_unknown_param(parameter_tvb, bssap_tree, parameter_type,
- parameter_length);
- break;
- }
+ switch (parameter_type)
+ {
+ case PARAMETER_DLCI:
+ dissect_bssap_dlci_param(parameter_tvb, bssap_tree, parameter_length);
+ break;
+
+ case PARAMETER_LENGTH:
+ dissect_bssap_length_param(parameter_tvb, bssap_tree, parameter_length);
+ break;
+
+ case PARAMETER_DATA:
+ dissect_bssap_data_param(parameter_tvb, pinfo, bssap_tree, tree);
+ break;
+
+ default:
+ dissect_bssap_unknown_param(parameter_tvb, bssap_tree, parameter_type,
+ parameter_length);
+ break;
+ }
- return(parameter_length);
+ return(parameter_length);
}
static guint16
dissect_bssap_var_parameter(tvbuff_t *tvb, packet_info *pinfo,
- proto_tree *bssap_tree, proto_tree *tree,
- guint8 parameter_type, gint offset)
+ proto_tree *bssap_tree, proto_tree *tree,
+ guint8 parameter_type, gint offset)
{
- guint16 parameter_length;
- guint8 length_length;
+ guint16 parameter_length;
+ guint8 length_length;
- parameter_length = tvb_get_guint8(tvb, offset);
- length_length = LENGTH_LENGTH;
+ parameter_length = tvb_get_guint8(tvb, offset);
+ length_length = LENGTH_LENGTH;
- offset += length_length;
+ offset += length_length;
- dissect_bssap_parameter(tvb, pinfo, bssap_tree, tree, parameter_type,
- offset, parameter_length);
+ dissect_bssap_parameter(tvb, pinfo, bssap_tree, tree, parameter_type,
+ offset, parameter_length);
- return(parameter_length + length_length);
+ return(parameter_length + length_length);
}
static void
dissect_bssap_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *bssap_tree,
- proto_tree *tree)
+ proto_tree *tree)
{
- gint offset = 0;
-
- /*
- * Extract the PDU type
- */
- pdu_type = tvb_get_guint8(tvb, PDU_TYPE_OFFSET);
- offset = PDU_TYPE_LENGTH;
-
- if (bssap_tree)
- {
- /*
- * add the message type to the protocol tree
- */
- proto_tree_add_uint(bssap_tree,
- (bssap_or_bsap_global == BSSAP) ? hf_bssap_pdu_type : hf_bsap_pdu_type,
- tvb, PDU_TYPE_OFFSET, PDU_TYPE_LENGTH, pdu_type);
- }
-
- /* Starting a new message dissection */
-
- switch (pdu_type)
- {
- case BSSAP_PDU_TYPE_BSSMAP:
- offset += dissect_bssap_parameter(tvb, pinfo, bssap_tree, tree,
- PARAMETER_LENGTH, offset,
- LENGTH_LENGTH);
- offset += dissect_bssap_var_parameter(tvb, pinfo, bssap_tree, tree,
- PARAMETER_DATA,
- (offset - LENGTH_LENGTH));
- break;
-
- case BSSAP_PDU_TYPE_DTAP:
- offset += dissect_bssap_parameter(tvb, pinfo, bssap_tree, tree,
- PARAMETER_DLCI,
- offset, DLCI_LENGTH);
- offset += dissect_bssap_parameter(tvb, pinfo, bssap_tree, tree,
- PARAMETER_LENGTH, offset,
- LENGTH_LENGTH);
- offset += dissect_bssap_var_parameter(tvb, pinfo, bssap_tree, tree,
- PARAMETER_DATA,
- (offset - LENGTH_LENGTH));
- break;
-
- default:
- if (check_col(pinfo->cinfo, COL_INFO))
- {
- col_append_fstr(pinfo->cinfo, COL_INFO, "%s ",
- val_to_str(pdu_type, ((bssap_or_bsap_global == BSSAP) ?
- bssap_pdu_type_acro_values : bsap_pdu_type_acro_values),
- "Unknown"));
-
- }
-
- dissect_bssap_unknown_message(tvb, bssap_tree);
- break;
- }
+ gint offset = 0;
+
+ /*
+ * Extract the PDU type
+ */
+ pdu_type = tvb_get_guint8(tvb, PDU_TYPE_OFFSET);
+ offset = PDU_TYPE_LENGTH;
+
+ if (bssap_tree)
+ {
+ /*
+ * add the message type to the protocol tree
+ */
+ proto_tree_add_uint(bssap_tree,
+ (bssap_or_bsap_global == BSSAP) ? hf_bssap_pdu_type : hf_bsap_pdu_type,
+ tvb, PDU_TYPE_OFFSET, PDU_TYPE_LENGTH, pdu_type);
+ }
+
+ /* Starting a new message dissection */
+
+ switch (pdu_type)
+ {
+ case BSSAP_PDU_TYPE_BSSMAP:
+ offset += dissect_bssap_parameter(tvb, pinfo, bssap_tree, tree,
+ PARAMETER_LENGTH, offset,
+ LENGTH_LENGTH);
+ offset += dissect_bssap_var_parameter(tvb, pinfo, bssap_tree, tree,
+ PARAMETER_DATA,
+ (offset - LENGTH_LENGTH));
+ break;
+
+ case BSSAP_PDU_TYPE_DTAP:
+ offset += dissect_bssap_parameter(tvb, pinfo, bssap_tree, tree,
+ PARAMETER_DLCI,
+ offset, DLCI_LENGTH);
+ offset += dissect_bssap_parameter(tvb, pinfo, bssap_tree, tree,
+ PARAMETER_LENGTH, offset,
+ LENGTH_LENGTH);
+ offset += dissect_bssap_var_parameter(tvb, pinfo, bssap_tree, tree,
+ PARAMETER_DATA,
+ (offset - LENGTH_LENGTH));
+ break;
+
+ default:
+ if (check_col(pinfo->cinfo, COL_INFO))
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s ",
+ val_to_str(pdu_type, ((bssap_or_bsap_global == BSSAP) ?
+ bssap_pdu_type_acro_values : bsap_pdu_type_acro_values),
+ "Unknown"));
+
+ }
+
+ dissect_bssap_unknown_message(tvb, bssap_tree);
+ break;
+ }
}
static void
dissect_bssap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
- proto_item *bssap_item, *hidden_item;
- proto_tree *bssap_tree = NULL;
-
- /*
- * Make entry in the Protocol column on summary display
- */
- if (check_col(pinfo->cinfo, COL_PROTOCOL))
- {
- col_set_str(pinfo->cinfo, COL_PROTOCOL, ((bssap_or_bsap_global == BSSAP) ? "BSSAP" : "BSAP"));
- }
-
- if ( pinfo->sccp_info && pinfo->sccp_info->data.co.assoc )
- pinfo->sccp_info->data.co.assoc->payload = SCCP_PLOAD_BSSAP;
-
- /*
- * create the bssap protocol tree
- */
- hidden_item = proto_tree_add_item(tree, proto_bssap, tvb, 0, -1, FALSE);
- PROTO_ITEM_SET_HIDDEN(hidden_item);
- bssap_item = proto_tree_add_text(tree, tvb, 0, -1, (bssap_or_bsap_global == BSSAP) ? "BSSAP" : "BSAP");
- bssap_tree = proto_item_add_subtree(bssap_item, ett_bssap);
-
- /* dissect the message */
-
- dissect_bssap_message(tvb, pinfo, bssap_tree, tree);
+ proto_item *bssap_item, *hidden_item;
+ proto_tree *bssap_tree = NULL;
+
+ /*
+ * Make entry in the Protocol column on summary display
+ */
+ if (check_col(pinfo->cinfo, COL_PROTOCOL))
+ {
+ col_set_str(pinfo->cinfo, COL_PROTOCOL, ((bssap_or_bsap_global == BSSAP) ? "BSSAP" : "BSAP"));
+ }
+
+ if ( pinfo->sccp_info && pinfo->sccp_info->data.co.assoc )
+ pinfo->sccp_info->data.co.assoc->payload = SCCP_PLOAD_BSSAP;
+
+ /*
+ * create the bssap protocol tree
+ */
+ hidden_item = proto_tree_add_item(tree, proto_bssap, tvb, 0, -1, FALSE);
+ PROTO_ITEM_SET_HIDDEN(hidden_item);
+ bssap_item = proto_tree_add_text(tree, tvb, 0, -1, (bssap_or_bsap_global == BSSAP) ? "BSSAP" : "BSAP");
+ bssap_tree = proto_item_add_subtree(bssap_item, ett_bssap);
+
+ /* dissect the message */
+
+ dissect_bssap_message(tvb, pinfo, bssap_tree, tree);
}
@@ -649,70 +649,70 @@ static dgt_set_t Dgt1_9_bcd = {
static const char*
unpack_digits(tvbuff_t *tvb, int offset,dgt_set_t *dgt,gboolean skip_first){
- int length;
- guint8 octet;
- int i=0;
- char *digit_str;
+ int length;
+ guint8 octet;
+ int i=0;
+ char *digit_str;
- length = tvb_length(tvb);
- if (length < offset)
- return "";
- digit_str = ep_alloc((length - offset)*2+1);
+ length = tvb_length(tvb);
+ if (length < offset)
+ return "";
+ digit_str = ep_alloc((length - offset)*2+1);
- while ( offset < length ){
+ while ( offset < length ){
- octet = tvb_get_guint8(tvb,offset);
- if (!skip_first){
- digit_str[i] = dgt->out[octet & 0x0f];
- i++;
- }
- skip_first = FALSE;
+ octet = tvb_get_guint8(tvb,offset);
+ if (!skip_first){
+ digit_str[i] = dgt->out[octet & 0x0f];
+ i++;
+ }
+ skip_first = FALSE;
- /*
- * unpack second value in byte
- */
- octet = octet >> 4;
+ /*
+ * unpack second value in byte
+ */
+ octet = octet >> 4;
- if (octet == 0x0f) /* odd number bytes - hit filler */
- break;
+ if (octet == 0x0f) /* odd number bytes - hit filler */
+ break;
- digit_str[i] = dgt->out[octet & 0x0f];
- i++;
- offset++;
+ digit_str[i] = dgt->out[octet & 0x0f];
+ i++;
+ offset++;
- }
- digit_str[i]= '\0';
- return digit_str;
+ }
+ digit_str[i]= '\0';
+ return digit_str;
}
static gboolean
check_ie(tvbuff_t *tvb, proto_tree *tree, int *offset, guint8 expected_ie){
- guint8 ie_type;
- guint8 ie_len;
-
- ie_type = tvb_get_guint8(tvb,*offset);
- if (ie_type != expected_ie){
- proto_tree_add_text(tree, tvb, *offset, 1, "Mandatory IE %s expected but IE %s Found",
- val_to_str(expected_ie,bssap_plus_ie_id_values,"Unknown %u"), val_to_str(ie_type,bssap_plus_ie_id_values,"Unknown %u"));
- (*offset)++;
- ie_len = tvb_get_guint8(tvb,*offset);
- *offset = *offset + ie_len;
- return FALSE;
- }
+ guint8 ie_type;
+ guint8 ie_len;
+
+ ie_type = tvb_get_guint8(tvb,*offset);
+ if (ie_type != expected_ie){
+ proto_tree_add_text(tree, tvb, *offset, 1, "Mandatory IE %s expected but IE %s Found",
+ val_to_str(expected_ie,bssap_plus_ie_id_values,"Unknown %u"), val_to_str(ie_type,bssap_plus_ie_id_values,"Unknown %u"));
+ (*offset)++;
+ ie_len = tvb_get_guint8(tvb,*offset);
+ *offset = *offset + ie_len;
+ return FALSE;
+ }
- return TRUE;
+ return TRUE;
}
static gboolean
check_optional_ie(tvbuff_t *tvb, int offset, guint8 expected_ie){
- guint8 ie_type;
+ guint8 ie_type;
- ie_type = tvb_get_guint8(tvb,offset);
- if (ie_type != expected_ie){
- return FALSE;
- }
- return TRUE;
+ ie_type = tvb_get_guint8(tvb,offset);
+ if (ie_type != expected_ie){
+ return FALSE;
+ }
+ return TRUE;
}
@@ -720,118 +720,118 @@ check_optional_ie(tvbuff_t *tvb, int offset, guint8 expected_ie){
static int
dissect_bssap_cell_global_id(tvbuff_t *tvb, proto_tree *tree, int offset)
{
- proto_item *item = NULL;
- proto_tree *ie_tree = NULL;
- proto_item *cgi_item = NULL;
- proto_tree *cgi_tree = NULL;
- guint8 ie_len;
-
- ie_len = tvb_get_guint8(tvb,offset+1);
- item = proto_tree_add_item(tree, hf_bssap_cell_global_id_ie, tvb, offset, ie_len+2, FALSE);
- ie_tree = proto_item_add_subtree(item, ett_bssap_cell_global_id);
-
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
- offset++;
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
- offset++;
- /*
- * The rest of the information element is coded as the the value part
- * of the cell global id IE defined in 3GPP TS 48.018 (not including
- * 3GPP TS 48.018 IEI and 3GPP TS 48.018 length indicator).
- */
- cgi_item= proto_tree_add_item(ie_tree, hf_bssap_cell_global_id, tvb, offset, ie_len, FALSE);
- cgi_tree = proto_item_add_subtree(cgi_item, ett_bssap_cgi);
- /* octets 3-8 Octets 3 to 8 contain the value part (starting with octet 2) of the
- * Routing Area Identification IE defined in 3GPP TS 24.008, not
- * including 3GPP TS 24.008 IEI
- */
- de_gmm_rai(tvb, cgi_tree, offset, ie_len, NULL, 0);
- /* Octets 9 and 10 contain the value part (starting with octet 2) of the
- * Cell Identity IE defined in 3GPP TS 24.008, not including
- * 3GPP TS 24.008 IEI
- */
- offset = offset + 6;
- de_cell_id(tvb, cgi_tree, offset, ie_len, NULL, 0);
- offset = offset + 2;
-
- return offset;
+ proto_item *item = NULL;
+ proto_tree *ie_tree = NULL;
+ proto_item *cgi_item = NULL;
+ proto_tree *cgi_tree = NULL;
+ guint8 ie_len;
+
+ ie_len = tvb_get_guint8(tvb,offset+1);
+ item = proto_tree_add_item(tree, hf_bssap_cell_global_id_ie, tvb, offset, ie_len+2, FALSE);
+ ie_tree = proto_item_add_subtree(item, ett_bssap_cell_global_id);
+
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
+ offset++;
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
+ offset++;
+ /*
+ * The rest of the information element is coded as the the value part
+ * of the cell global id IE defined in 3GPP TS 48.018 (not including
+ * 3GPP TS 48.018 IEI and 3GPP TS 48.018 length indicator).
+ */
+ cgi_item= proto_tree_add_item(ie_tree, hf_bssap_cell_global_id, tvb, offset, ie_len, FALSE);
+ cgi_tree = proto_item_add_subtree(cgi_item, ett_bssap_cgi);
+ /* octets 3-8 Octets 3 to 8 contain the value part (starting with octet 2) of the
+ * Routing Area Identification IE defined in 3GPP TS 24.008, not
+ * including 3GPP TS 24.008 IEI
+ */
+ de_gmm_rai(tvb, cgi_tree, offset, ie_len, NULL, 0);
+ /* Octets 9 and 10 contain the value part (starting with octet 2) of the
+ * Cell Identity IE defined in 3GPP TS 24.008, not including
+ * 3GPP TS 24.008 IEI
+ */
+ offset = offset + 6;
+ de_cell_id(tvb, cgi_tree, offset, ie_len, NULL, 0);
+ offset = offset + 2;
+
+ return offset;
}
/* 18.4.2 Channel needed */
static int
dissect_bssap_channel_needed(tvbuff_t *tvb, proto_tree *tree, int offset)
{
- proto_item *item = NULL;
- proto_tree *ie_tree = NULL;
- guint8 ie_len;
-
- ie_len = tvb_get_guint8(tvb,offset+1);
- item = proto_tree_add_item(tree, hf_bssap_channel_needed_ie, tvb, offset, ie_len+2, FALSE);
- ie_tree = proto_item_add_subtree(item, ett_bssap_channel_needed);
-
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
- offset++;
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
- offset++;
- /*
- * The rest of the information element is coded as the IEI part and the
- * value part of the Channel Needed IE defined in 3GPP TS 44.018.
- * 10.5.2.8 Channel Needed
- */
- de_rr_chnl_needed(tvb, ie_tree, offset, ie_len, NULL, 0);
-
- return offset + ie_len;
+ proto_item *item = NULL;
+ proto_tree *ie_tree = NULL;
+ guint8 ie_len;
+
+ ie_len = tvb_get_guint8(tvb,offset+1);
+ item = proto_tree_add_item(tree, hf_bssap_channel_needed_ie, tvb, offset, ie_len+2, FALSE);
+ ie_tree = proto_item_add_subtree(item, ett_bssap_channel_needed);
+
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
+ offset++;
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
+ offset++;
+ /*
+ * The rest of the information element is coded as the IEI part and the
+ * value part of the Channel Needed IE defined in 3GPP TS 44.018.
+ * 10.5.2.8 Channel Needed
+ */
+ de_rr_chnl_needed(tvb, ie_tree, offset, ie_len, NULL, 0);
+
+ return offset + ie_len;
}
/* 18.4.3 Downlink Tunnel Payload Control and Info */
static int
dissect_bssap_dlink_tunnel_payload_control_and_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
{
- proto_item *item = NULL;
- proto_tree *ie_tree = NULL;
- tvbuff_t *next_tvb;
- guint8 ie_len;
- guint8 octet;
- guint8 prot_disc;
-
- ie_len = tvb_get_guint8(tvb,offset+1);
- item = proto_tree_add_item(tree, hf_bssap_dlink_tnl_pld_cntrl_amd_inf_ie, tvb, offset, ie_len+2, FALSE);
- ie_tree = proto_item_add_subtree(item, ett_bssap_dlink_tnl_pld_cntrl_amd_inf);
-
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
- offset++;
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
- offset++;
- /* Bit 8 Spare */
- /* Bit 7 - 4
- * TOM Protocol Discriminator: Identifies the protocol using tunnelling of non-GSM signalling.
- * For coding, see 3GPP TS 44.064.
- */
-
- proto_tree_add_item(ie_tree, hf_bssap_tom_prot_disc, tvb, offset, 1, FALSE);
- octet = tvb_get_guint8(tvb,offset);
- prot_disc = (octet&0x78)>>3;
-
- /* octet 3 bit 3 E: Cipher Request. When set to 1 indicates that the SGSN received the payload in ciphered form,
- * when set to 0 indicates that the SGSN did not receive the payload in ciphered form.
- */
- proto_tree_add_item(ie_tree, hf_bssap_e_bit, tvb, offset, 1, FALSE);
-
- /* octet 3 bit 2 - 1
- * Tunnel Priority: Indicates the priority of the Tunnel Payload. For coding, see Table 20.1: Association
- * between Tunnel Priority and LLC SAPs.
- */
- proto_tree_add_item(ie_tree, hf_bssap_tunnel_prio, tvb, offset, 1, FALSE);
- /* Tunnel payload */
- next_tvb = tvb_new_subset(tvb, offset, ie_len-4, ie_len-4);
-
- if ((prot_disc == 2)&&(rrlp_handle))
- call_dissector(rrlp_handle, next_tvb, pinfo, ie_tree);
- else
- call_dissector(data_handle, next_tvb, pinfo, ie_tree);
-
-
- return offset + ie_len;
+ proto_item *item = NULL;
+ proto_tree *ie_tree = NULL;
+ tvbuff_t *next_tvb;
+ guint8 ie_len;
+ guint8 octet;
+ guint8 prot_disc;
+
+ ie_len = tvb_get_guint8(tvb,offset+1);
+ item = proto_tree_add_item(tree, hf_bssap_dlink_tnl_pld_cntrl_amd_inf_ie, tvb, offset, ie_len+2, FALSE);
+ ie_tree = proto_item_add_subtree(item, ett_bssap_dlink_tnl_pld_cntrl_amd_inf);
+
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
+ offset++;
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
+ offset++;
+ /* Bit 8 Spare */
+ /* Bit 7 - 4
+ * TOM Protocol Discriminator: Identifies the protocol using tunnelling of non-GSM signalling.
+ * For coding, see 3GPP TS 44.064.
+ */
+
+ proto_tree_add_item(ie_tree, hf_bssap_tom_prot_disc, tvb, offset, 1, FALSE);
+ octet = tvb_get_guint8(tvb,offset);
+ prot_disc = (octet&0x78)>>3;
+
+ /* octet 3 bit 3 E: Cipher Request. When set to 1 indicates that the SGSN received the payload in ciphered form,
+ * when set to 0 indicates that the SGSN did not receive the payload in ciphered form.
+ */
+ proto_tree_add_item(ie_tree, hf_bssap_e_bit, tvb, offset, 1, FALSE);
+
+ /* octet 3 bit 2 - 1
+ * Tunnel Priority: Indicates the priority of the Tunnel Payload. For coding, see Table 20.1: Association
+ * between Tunnel Priority and LLC SAPs.
+ */
+ proto_tree_add_item(ie_tree, hf_bssap_tunnel_prio, tvb, offset, 1, FALSE);
+ /* Tunnel payload */
+ next_tvb = tvb_new_subset(tvb, offset, ie_len-4, ie_len-4);
+
+ if ((prot_disc == 2)&&(rrlp_handle))
+ call_dissector(rrlp_handle, next_tvb, pinfo, ie_tree);
+ else
+ call_dissector(data_handle, next_tvb, pinfo, ie_tree);
+
+
+ return offset + ie_len;
}
@@ -840,65 +840,65 @@ dissect_bssap_dlink_tunnel_payload_control_and_info(tvbuff_t *tvb, packet_info *
static const value_string bssap_call_priority_values[] = {
{ 0x00, "No priority applied" },
{ 0x01, "Call priority level 4" },
- { 0x02, "Call priority level 3" },
- { 0x03, "Call priority level 2" },
- { 0x04, "Call priority level 1" },
- { 0x05, "Call priority level 0" },
- { 0x06, "Call priority level B" },
- { 0x07, "Call priority level A" },
+ { 0x02, "Call priority level 3" },
+ { 0x03, "Call priority level 2" },
+ { 0x04, "Call priority level 1" },
+ { 0x05, "Call priority level 0" },
+ { 0x06, "Call priority level B" },
+ { 0x07, "Call priority level A" },
{ 0, NULL }
};
static int
dissect_bssap_emlpp_priority(tvbuff_t *tvb, proto_tree *tree, int offset)
{
- proto_item *item = NULL;
- proto_tree *ie_tree = NULL;
- guint8 ie_len;
-
- ie_len = tvb_get_guint8(tvb,offset+1);
- item = proto_tree_add_item(tree, hf_bssap_emlpp_prio_ie, tvb, offset, ie_len+2, FALSE);
- ie_tree = proto_item_add_subtree(item, ett_bssap_emlpp_prio);
-
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
- offset++;
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
- offset++;
- /* The rest of the information element is coded as the value part of
- the eMLPP-Priority IE defined in 3GPP TS 48.008 (not including
- 3GPP TS 48.008 IEI and 3GPP TS 48.008 length indicator).
- 3.2.2.56 eMLPP Priority
- The call priority field (bit 3 to 1 of octet 2) is coded in the same way
- as the call priority field (bit 3 to 1 of octet 5) in the Descriptive group
- or broadcast call reference information element as defined in 3GPP TS 24.008.
- */
- proto_tree_add_item(ie_tree, hf_bssap_call_priority, tvb, offset, ie_len, FALSE);
-
- return offset + ie_len;
+ proto_item *item = NULL;
+ proto_tree *ie_tree = NULL;
+ guint8 ie_len;
+
+ ie_len = tvb_get_guint8(tvb,offset+1);
+ item = proto_tree_add_item(tree, hf_bssap_emlpp_prio_ie, tvb, offset, ie_len+2, FALSE);
+ ie_tree = proto_item_add_subtree(item, ett_bssap_emlpp_prio);
+
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
+ offset++;
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
+ offset++;
+ /* The rest of the information element is coded as the value part of
+ the eMLPP-Priority IE defined in 3GPP TS 48.008 (not including
+ 3GPP TS 48.008 IEI and 3GPP TS 48.008 length indicator).
+ 3.2.2.56 eMLPP Priority
+ The call priority field (bit 3 to 1 of octet 2) is coded in the same way
+ as the call priority field (bit 3 to 1 of octet 5) in the Descriptive group
+ or broadcast call reference information element as defined in 3GPP TS 24.008.
+ */
+ proto_tree_add_item(ie_tree, hf_bssap_call_priority, tvb, offset, ie_len, FALSE);
+
+ return offset + ie_len;
}
/* 18.4.5 Erroneous message */
- /* Erroneous message including the message type. */
+ /* Erroneous message including the message type. */
static int
dissect_bssap_gprs_erroneous_msg(tvbuff_t *tvb, proto_tree *tree, int offset)
{
- proto_item *item = NULL;
- proto_tree *ie_tree = NULL;
- guint8 ie_len;
-
- ie_len = tvb_get_guint8(tvb,offset+1);
- item = proto_tree_add_item(tree, hf_bssap_gprs_erroneous_msg_ie, tvb, offset, ie_len+2, FALSE);
- ie_tree = proto_item_add_subtree(item, ett_bssap_erroneous_msg);
+ proto_item *item = NULL;
+ proto_tree *ie_tree = NULL;
+ guint8 ie_len;
+
+ ie_len = tvb_get_guint8(tvb,offset+1);
+ item = proto_tree_add_item(tree, hf_bssap_gprs_erroneous_msg_ie, tvb, offset, ie_len+2, FALSE);
+ ie_tree = proto_item_add_subtree(item, ett_bssap_erroneous_msg);
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
- offset++;
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
- offset++;
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
+ offset++;
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
+ offset++;
- /* Erroneous message including the message type. */
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie_data, tvb, offset, ie_len, FALSE);
+ /* Erroneous message including the message type. */
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie_data, tvb, offset, ie_len, FALSE);
- return offset + ie_len;
+ return offset + ie_len;
}
@@ -906,131 +906,131 @@ dissect_bssap_gprs_erroneous_msg(tvbuff_t *tvb, proto_tree *tree, int offset)
static const value_string bssap_plus_GPRS_loc_upd_type_values[] = {
{ 0x00, "Shall not be sent in this version of the protocol. If received, shall be treated as '00000010'." },
{ 0x01, "IMSI attach" },
- { 0x02, "Normal location update" },
+ { 0x02, "Normal location update" },
{ 0, NULL }
};
/* 18.4.6 GPRS location update type */
static int
dissect_bssap_gprs_location_update_type(tvbuff_t *tvb, proto_tree *tree, int offset)
{
- proto_item *item = NULL;
- proto_tree *ie_tree = NULL;
- guint8 ie_len;
-
- ie_len = tvb_get_guint8(tvb,offset+1);
- item = proto_tree_add_item(tree, hf_bssap_gprs_loc_upd_type_ie, tvb, offset, ie_len+2, FALSE);
- ie_tree = proto_item_add_subtree(item, ett_bssap_gprs_loc_upd);
-
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
- offset++;
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
- offset++;
-
- /* GPRS location update type value (octet 3) */
- proto_tree_add_item(ie_tree, hf_bssap_gprs_loc_upd_type, tvb, offset, ie_len, FALSE);
-
- return offset + ie_len;
+ proto_item *item = NULL;
+ proto_tree *ie_tree = NULL;
+ guint8 ie_len;
+
+ ie_len = tvb_get_guint8(tvb,offset+1);
+ item = proto_tree_add_item(tree, hf_bssap_gprs_loc_upd_type_ie, tvb, offset, ie_len+2, FALSE);
+ ie_tree = proto_item_add_subtree(item, ett_bssap_gprs_loc_upd);
+
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
+ offset++;
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
+ offset++;
+
+ /* GPRS location update type value (octet 3) */
+ proto_tree_add_item(ie_tree, hf_bssap_gprs_loc_upd_type, tvb, offset, ie_len, FALSE);
+
+ return offset + ie_len;
}
/* Gs Cause value (octet 3) */
static const value_string bssap_Gs_cause_values[] = {
- { 0x00, "Normal, unspecified in this version of the protocol." },
- { 0x01, "IMSI detached for GPRS services" },
- { 0x02, "IMSI detached for GPRS and non-GPRS services" },
- { 0x03, "IMSI unknown" },
- { 0x04, "IMSI detached for non-GPRS services" },
- { 0x05, "IMSI implicitly detached for non-GPRS services" },
- { 0x06, "MS unreachable" },
- { 0x07, "Message not compatible with the protocol state" },
- { 0x08, "Missing mandatory information element" },
- { 0x09, "Invalid mandatory information" },
- { 0x0a, "Conditional IE error" },
- { 0x0b, "Semantically incorrect message" },
- { 0x0c, "Message unknown" },
- { 0x0d, "Address error" },
- { 0x0e, "TOM functionality not supported" },
- { 0x0f, "Ciphering request cannot be accommodated" },
- { 0, NULL }
+ { 0x00, "Normal, unspecified in this version of the protocol." },
+ { 0x01, "IMSI detached for GPRS services" },
+ { 0x02, "IMSI detached for GPRS and non-GPRS services" },
+ { 0x03, "IMSI unknown" },
+ { 0x04, "IMSI detached for non-GPRS services" },
+ { 0x05, "IMSI implicitly detached for non-GPRS services" },
+ { 0x06, "MS unreachable" },
+ { 0x07, "Message not compatible with the protocol state" },
+ { 0x08, "Missing mandatory information element" },
+ { 0x09, "Invalid mandatory information" },
+ { 0x0a, "Conditional IE error" },
+ { 0x0b, "Semantically incorrect message" },
+ { 0x0c, "Message unknown" },
+ { 0x0d, "Address error" },
+ { 0x0e, "TOM functionality not supported" },
+ { 0x0f, "Ciphering request cannot be accommodated" },
+ { 0, NULL }
};
/* 18.4.7 Gs cause */
static int
dissect_bssap_Gs_cause(tvbuff_t *tvb, proto_tree *tree, int offset)
{
- proto_item *item = NULL;
- proto_tree *ie_tree = NULL;
- guint8 ie_len;
-
- ie_len = tvb_get_guint8(tvb,offset+1);
- item = proto_tree_add_item(tree, hf_bssap_Gs_cause_ie, tvb, offset, ie_len+2, FALSE);
- ie_tree = proto_item_add_subtree(item, ett_bassp_Gs_cause);
+ proto_item *item = NULL;
+ proto_tree *ie_tree = NULL;
+ guint8 ie_len;
+
+ ie_len = tvb_get_guint8(tvb,offset+1);
+ item = proto_tree_add_item(tree, hf_bssap_Gs_cause_ie, tvb, offset, ie_len+2, FALSE);
+ ie_tree = proto_item_add_subtree(item, ett_bassp_Gs_cause);
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
- offset++;
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
- offset++;
- /* Gs Cause value (octet 3) */
- proto_tree_add_item(ie_tree, hf_bssap_Gs_cause, tvb, offset, ie_len, FALSE);
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
+ offset++;
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
+ offset++;
+ /* Gs Cause value (octet 3) */
+ proto_tree_add_item(ie_tree, hf_bssap_Gs_cause, tvb, offset, ie_len, FALSE);
- return offset + ie_len;
+ return offset + ie_len;
}
/* 18.4.8 IMEI */
static int
dissect_bssap_imei(tvbuff_t *tvb, proto_tree *tree, int offset)
{
- proto_item *item = NULL;
- proto_tree *ie_tree = NULL;
- guint8 ie_len;
- tvbuff_t *ie_tvb;
- const char *digit_str;
-
- ie_len = tvb_get_guint8(tvb,offset+1);
- item = proto_tree_add_item(tree, hf_bssap_imei_ie, tvb, offset, ie_len+2, FALSE);
- ie_tree = proto_item_add_subtree(item, ett_bassp_imei);
-
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
- offset++;
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
- offset++;
- /* The IMEI is coded as a sequence of BCD digits, compressed two into each octet.
- * The IMEI consists of 15 digits (see 3GPP TS 23.003).
- */
- ie_tvb = tvb_new_subset(tvb, offset, ie_len, ie_len);
- digit_str = unpack_digits(ie_tvb, 0, &Dgt1_9_bcd, FALSE);
- proto_tree_add_string(ie_tree, hf_bssap_imei, ie_tvb, 0, -1, digit_str);
-
- return offset + ie_len;
+ proto_item *item = NULL;
+ proto_tree *ie_tree = NULL;
+ guint8 ie_len;
+ tvbuff_t *ie_tvb;
+ const char *digit_str;
+
+ ie_len = tvb_get_guint8(tvb,offset+1);
+ item = proto_tree_add_item(tree, hf_bssap_imei_ie, tvb, offset, ie_len+2, FALSE);
+ ie_tree = proto_item_add_subtree(item, ett_bassp_imei);
+
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
+ offset++;
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
+ offset++;
+ /* The IMEI is coded as a sequence of BCD digits, compressed two into each octet.
+ * The IMEI consists of 15 digits (see 3GPP TS 23.003).
+ */
+ ie_tvb = tvb_new_subset(tvb, offset, ie_len, ie_len);
+ digit_str = unpack_digits(ie_tvb, 0, &Dgt1_9_bcd, FALSE);
+ proto_tree_add_string(ie_tree, hf_bssap_imei, ie_tvb, 0, -1, digit_str);
+
+ return offset + ie_len;
}
/* 18.4.9 IMEISV */
static int
dissect_bssap_imesiv(tvbuff_t *tvb, proto_tree *tree, int offset)
{
- proto_item *item = NULL;
- proto_tree *ie_tree = NULL;
- guint8 ie_len;
- tvbuff_t *ie_tvb;
- const char *digit_str;
-
- ie_len = tvb_get_guint8(tvb,offset+1);
- item = proto_tree_add_item(tree, hf_bssap_imesiv_ie, tvb, offset, ie_len+2, FALSE);
- ie_tree = proto_item_add_subtree(item, ett_bassp_imesiv);
-
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
- offset++;
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
- offset++;
- /* The IMEISV is coded as a sequence of BCD digits, compressed two into each octet.
- * The IMEISV consists of 16 digits (see 3GPP TS 23.003).
- */
- ie_tvb = tvb_new_subset(tvb, offset, ie_len, ie_len);
- digit_str = unpack_digits(ie_tvb, 0, &Dgt1_9_bcd, FALSE);
- proto_tree_add_string(ie_tree, hf_bssap_imeisv, ie_tvb, 0, -1, digit_str);
-
- return offset + ie_len;
+ proto_item *item = NULL;
+ proto_tree *ie_tree = NULL;
+ guint8 ie_len;
+ tvbuff_t *ie_tvb;
+ const char *digit_str;
+
+ ie_len = tvb_get_guint8(tvb,offset+1);
+ item = proto_tree_add_item(tree, hf_bssap_imesiv_ie, tvb, offset, ie_len+2, FALSE);
+ ie_tree = proto_item_add_subtree(item, ett_bassp_imesiv);
+
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
+ offset++;
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
+ offset++;
+ /* The IMEISV is coded as a sequence of BCD digits, compressed two into each octet.
+ * The IMEISV consists of 16 digits (see 3GPP TS 23.003).
+ */
+ ie_tvb = tvb_new_subset(tvb, offset, ie_len, ie_len);
+ digit_str = unpack_digits(ie_tvb, 0, &Dgt1_9_bcd, FALSE);
+ proto_tree_add_string(ie_tree, hf_bssap_imeisv, ie_tvb, 0, -1, digit_str);
+
+ return offset + ie_len;
}
/* 18.4.10 IMSI
@@ -1043,32 +1043,32 @@ dissect_bssap_imesiv(tvbuff_t *tvb, proto_tree *tree, int offset)
static int
dissect_bssap_imsi(tvbuff_t *tvb, proto_tree *tree, int offset)
{
- proto_item *item = NULL;
- proto_tree *ie_tree = NULL;
- guint8 ie_len;
- tvbuff_t *ie_tvb;
- const char *digit_str;
-
- ie_len = tvb_get_guint8(tvb,offset+1);
- item = proto_tree_add_item(tree, hf_bssap_imsi_ie, tvb, offset, ie_len+2, FALSE);
- ie_tree = proto_item_add_subtree(item, ett_bssap_imsi);
-
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
- offset++;
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
- offset++;
- ie_tvb = tvb_new_subset(tvb, offset, ie_len,ie_len);
- digit_str = unpack_digits(ie_tvb, 0, &Dgt1_9_bcd, TRUE);
- proto_tree_add_string(ie_tree, hf_bssap_imsi, ie_tvb, 0, -1, digit_str);
-
- return offset + ie_len;
+ proto_item *item = NULL;
+ proto_tree *ie_tree = NULL;
+ guint8 ie_len;
+ tvbuff_t *ie_tvb;
+ const char *digit_str;
+
+ ie_len = tvb_get_guint8(tvb,offset+1);
+ item = proto_tree_add_item(tree, hf_bssap_imsi_ie, tvb, offset, ie_len+2, FALSE);
+ ie_tree = proto_item_add_subtree(item, ett_bssap_imsi);
+
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
+ offset++;
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
+ offset++;
+ ie_tvb = tvb_new_subset(tvb, offset, ie_len,ie_len);
+ digit_str = unpack_digits(ie_tvb, 0, &Dgt1_9_bcd, TRUE);
+ proto_tree_add_string(ie_tree, hf_bssap_imsi, ie_tvb, 0, -1, digit_str);
+
+ return offset + ie_len;
}
static const value_string bssap_imsi_det_from_gprs_serv_type_values[] _U_ = {
- { 0x00, "Interpreted as reserved in this version of the protocol" },
- { 0x01, "Network initiated IMSI detach from GPRS service" },
- { 0x02, "MS initiated IMSI detach from GPRS service" },
- { 0x03, "GPRS services not allowed" },
+ { 0x00, "Interpreted as reserved in this version of the protocol" },
+ { 0x01, "Network initiated IMSI detach from GPRS service" },
+ { 0x02, "MS initiated IMSI detach from GPRS service" },
+ { 0x03, "GPRS services not allowed" },
{ 0, NULL }
};
@@ -1076,302 +1076,302 @@ static const value_string bssap_imsi_det_from_gprs_serv_type_values[] _U_ = {
static int
dissect_bssap_imsi_det_from_gprs_serv_type(tvbuff_t *tvb, proto_tree *tree, int offset)
{
- proto_item *item = NULL;
- proto_tree *ie_tree = NULL;
- guint8 ie_len;
-
- ie_len = tvb_get_guint8(tvb,offset+1);
- item = proto_tree_add_item(tree, hf_bssap_imsi_det_from_gprs_serv_type_ie, tvb, offset, ie_len+2, FALSE);
- ie_tree = proto_item_add_subtree(item, ett_bssap_imsi_det_from_gprs_serv_type);
+ proto_item *item = NULL;
+ proto_tree *ie_tree = NULL;
+ guint8 ie_len;
+
+ ie_len = tvb_get_guint8(tvb,offset+1);
+ item = proto_tree_add_item(tree, hf_bssap_imsi_det_from_gprs_serv_type_ie, tvb, offset, ie_len+2, FALSE);
+ ie_tree = proto_item_add_subtree(item, ett_bssap_imsi_det_from_gprs_serv_type);
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
- offset++;
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
- offset++;
- /* IMSI detach from GPRS service type value (octet 3)*/
- proto_tree_add_item(ie_tree, hf_bssap_imsi_det_from_gprs_serv_type, tvb, offset, ie_len, FALSE);
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
+ offset++;
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
+ offset++;
+ /* IMSI detach from GPRS service type value (octet 3)*/
+ proto_tree_add_item(ie_tree, hf_bssap_imsi_det_from_gprs_serv_type, tvb, offset, ie_len, FALSE);
- return offset + ie_len;
+ return offset + ie_len;
}
/* 18.4.12 IMSI detach from non-GPRS service type */
static int
dissect_bssap_imsi_det_from_non_gprs_serv_type(tvbuff_t *tvb, proto_tree *tree, int offset)
{
- proto_item *item = NULL;
- proto_tree *ie_tree = NULL;
- guint8 ie_len;
-
- ie_len = tvb_get_guint8(tvb,offset+1);
- item = proto_tree_add_item(tree, hf_bssap_imsi_det_from_non_gprs_serv_type_ie, tvb, offset, ie_len+2, FALSE);
- ie_tree = proto_item_add_subtree(item, ett_bssap_imsi_det_from_non_gprs_serv_type);
+ proto_item *item = NULL;
+ proto_tree *ie_tree = NULL;
+ guint8 ie_len;
+
+ ie_len = tvb_get_guint8(tvb,offset+1);
+ item = proto_tree_add_item(tree, hf_bssap_imsi_det_from_non_gprs_serv_type_ie, tvb, offset, ie_len+2, FALSE);
+ ie_tree = proto_item_add_subtree(item, ett_bssap_imsi_det_from_non_gprs_serv_type);
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
- offset++;
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
- offset++;
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie_data, tvb, offset, ie_len, FALSE);
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
+ offset++;
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
+ offset++;
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie_data, tvb, offset, ie_len, FALSE);
- return offset + ie_len;
+ return offset + ie_len;
}
static const value_string bssap_info_req_values[] = {
- { 0x00, "Interpreted as Not supported in this version of the protocol." },
- { 0x01, "PTMSI" },
- { 0x02, "IMEI" },
- { 0x03, "IMEISV" },
- { 0x04, "PTMSI and IMEI" },
- { 0x05, "PTMSI and IMEISV" },
- { 0x06, "IMEI and IMEISV" },
- { 0x07, "PTMSI, IMEI, and IMEISV" },
- { 0x08, "Mobile location information" },
- { 0x09, "TMSI" },
+ { 0x00, "Interpreted as Not supported in this version of the protocol." },
+ { 0x01, "PTMSI" },
+ { 0x02, "IMEI" },
+ { 0x03, "IMEISV" },
+ { 0x04, "PTMSI and IMEI" },
+ { 0x05, "PTMSI and IMEISV" },
+ { 0x06, "IMEI and IMEISV" },
+ { 0x07, "PTMSI, IMEI, and IMEISV" },
+ { 0x08, "Mobile location information" },
+ { 0x09, "TMSI" },
{ 0, NULL }
};
/* 18.4.13 Information requested */
static int
dissect_bssap_info_req(tvbuff_t *tvb, proto_tree *tree, int offset)
{
- proto_item *item = NULL;
- proto_tree *ie_tree = NULL;
- guint8 ie_len;
-
- ie_len = tvb_get_guint8(tvb,offset+1);
- item = proto_tree_add_item(tree, hf_bssap_info_req_ie, tvb, offset, ie_len+2, FALSE);
- ie_tree = proto_item_add_subtree(item, ett_bssap_info_req);
+ proto_item *item = NULL;
+ proto_tree *ie_tree = NULL;
+ guint8 ie_len;
+
+ ie_len = tvb_get_guint8(tvb,offset+1);
+ item = proto_tree_add_item(tree, hf_bssap_info_req_ie, tvb, offset, ie_len+2, FALSE);
+ ie_tree = proto_item_add_subtree(item, ett_bssap_info_req);
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
- offset++;
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
- offset++;
- /*Information requested value (octet 3) */
- proto_tree_add_item(ie_tree, hf_bssap_info_req, tvb, offset, ie_len, FALSE);
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
+ offset++;
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
+ offset++;
+ /*Information requested value (octet 3) */
+ proto_tree_add_item(ie_tree, hf_bssap_info_req, tvb, offset, ie_len, FALSE);
- return offset + ie_len;
+ return offset + ie_len;
}
/* 18.4.14 Location area identifier */
static int
dissect_bssap_loc_area_id(tvbuff_t *tvb, proto_tree *tree, int offset)
{
- proto_item *item = NULL;
- proto_tree *ie_tree = NULL;
- guint8 ie_len;
-
- ie_len = tvb_get_guint8(tvb,offset+1);
- item = proto_tree_add_item(tree, hf_bssap_loc_area_id_ie, tvb, offset, ie_len+2, FALSE);
- ie_tree = proto_item_add_subtree(item, ett_bssap_loc_area_id);
-
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
- offset++;
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
- offset++;
- /* The rest of the information element is coded as the value part of
- * the location area identifier IE defined in 3GPP TS 48.018 (not
- * including 3GPP TS 48.018 IEI and 3GPP TS 48.018 length
- * indicator).
- */
- de_lai(tvb, ie_tree, offset, ie_len, NULL, 0);
-
- return offset + ie_len;
+ proto_item *item = NULL;
+ proto_tree *ie_tree = NULL;
+ guint8 ie_len;
+
+ ie_len = tvb_get_guint8(tvb,offset+1);
+ item = proto_tree_add_item(tree, hf_bssap_loc_area_id_ie, tvb, offset, ie_len+2, FALSE);
+ ie_tree = proto_item_add_subtree(item, ett_bssap_loc_area_id);
+
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
+ offset++;
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
+ offset++;
+ /* The rest of the information element is coded as the value part of
+ * the location area identifier IE defined in 3GPP TS 48.018 (not
+ * including 3GPP TS 48.018 IEI and 3GPP TS 48.018 length
+ * indicator).
+ */
+ de_lai(tvb, ie_tree, offset, ie_len, NULL, 0);
+
+ return offset + ie_len;
}
/* 18.4.15 Location information age */
static int
dissect_bssap_location_information_age(tvbuff_t *tvb, proto_tree *tree, int offset)
{
- proto_item *item = NULL;
- proto_tree *ie_tree = NULL;
- guint8 ie_len;
-
- ie_len = tvb_get_guint8(tvb,offset+1);
- item = proto_tree_add_item(tree, hf_bssap_loc_inf_age_ie, tvb, offset, ie_len+2, FALSE);
- ie_tree = proto_item_add_subtree(item, ett_bssap_loc_inf_age);
-
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
- offset++;
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
- offset++;
- /* The rest of the IE is coded as the value part of the
- * AgeOfLocationInformation as specified in 3GPP TS 29.002.:
- * AgeOfLocationInformation ::= INTEGER (0..32767)
- * -- the value represents the elapsed time in minutes since the last
- * -- network contact of the mobile station (i.e. the actuality of the
- * -- location information).
- * -- value '0' indicates that the MS is currently in contact with the
- * -- network
- * -- value '32767' indicates that the location information is at least
- * -- 32767 minutes old
- */
- proto_tree_add_item(ie_tree, hf_bssap_loc_inf_age, tvb, offset, ie_len, FALSE);
-
-
- return offset + ie_len;
+ proto_item *item = NULL;
+ proto_tree *ie_tree = NULL;
+ guint8 ie_len;
+
+ ie_len = tvb_get_guint8(tvb,offset+1);
+ item = proto_tree_add_item(tree, hf_bssap_loc_inf_age_ie, tvb, offset, ie_len+2, FALSE);
+ ie_tree = proto_item_add_subtree(item, ett_bssap_loc_inf_age);
+
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
+ offset++;
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
+ offset++;
+ /* The rest of the IE is coded as the value part of the
+ * AgeOfLocationInformation as specified in 3GPP TS 29.002.:
+ * AgeOfLocationInformation ::= INTEGER (0..32767)
+ * -- the value represents the elapsed time in minutes since the last
+ * -- network contact of the mobile station (i.e. the actuality of the
+ * -- location information).
+ * -- value '0' indicates that the MS is currently in contact with the
+ * -- network
+ * -- value '32767' indicates that the location information is at least
+ * -- 32767 minutes old
+ */
+ proto_tree_add_item(ie_tree, hf_bssap_loc_inf_age, tvb, offset, ie_len, FALSE);
+
+
+ return offset + ie_len;
}
/* 18.4.16 MM information */
static int
dissect_bssap_MM_information(tvbuff_t *tvb, proto_tree *tree, int offset)
{
- proto_item *item = NULL;
- proto_tree *ie_tree = NULL;
- guint8 ie_len;
-
- ie_len = tvb_get_guint8(tvb,offset+1);
- item = proto_tree_add_item(tree, hf_bssap_mm_information_ie, tvb, offset, ie_len+2, FALSE);
- ie_tree = proto_item_add_subtree(item, ett_bssap_mm_information);
-
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
- offset++;
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
- offset++;
- /* User information: This field is composed of one or more of the
- * information elements of the MM information message as defined
- * 3GPP TS 24.008, excluding the Protocol discriminator, Skip
- * indicator and Message type. This field includes the IEI and length
- * indicatior of the other information elements.
- */
- dtap_mm_mm_info(tvb, ie_tree, offset, ie_len);
-
-
- return offset + ie_len;
+ proto_item *item = NULL;
+ proto_tree *ie_tree = NULL;
+ guint8 ie_len;
+
+ ie_len = tvb_get_guint8(tvb,offset+1);
+ item = proto_tree_add_item(tree, hf_bssap_mm_information_ie, tvb, offset, ie_len+2, FALSE);
+ ie_tree = proto_item_add_subtree(item, ett_bssap_mm_information);
+
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
+ offset++;
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
+ offset++;
+ /* User information: This field is composed of one or more of the
+ * information elements of the MM information message as defined
+ * 3GPP TS 24.008, excluding the Protocol discriminator, Skip
+ * indicator and Message type. This field includes the IEI and length
+ * indicatior of the other information elements.
+ */
+ dtap_mm_mm_info(tvb, ie_tree, offset, ie_len);
+
+
+ return offset + ie_len;
}
/* 18.4.17 Mobile identity */
static int
dissect_bssap_mobile_id(tvbuff_t *tvb, proto_tree *tree, int offset)
{
- proto_item *item = NULL;
- proto_tree *ie_tree = NULL;
- guint ie_len;
-
- ie_len = tvb_get_guint8(tvb,offset+1);
- item = proto_tree_add_item(tree, hf_bssap_mobile_id_ie, tvb, offset, ie_len+2, FALSE);
- ie_tree = proto_item_add_subtree(item, ett_bssap_mobile_id);
-
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
- offset++;
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
- offset++;
- /* The rest of the information element is coded as the value part of
- * the mobile identity IE defined in 3GPP TS 24.008 (not including
- * 3GPP TS 24.008 IEI and 3GPP TS 24.008 length indicator).
- */
- de_mid(tvb, ie_tree, offset, ie_len, NULL, 0);
-
-
- return offset + ie_len;
+ proto_item *item = NULL;
+ proto_tree *ie_tree = NULL;
+ guint ie_len;
+
+ ie_len = tvb_get_guint8(tvb,offset+1);
+ item = proto_tree_add_item(tree, hf_bssap_mobile_id_ie, tvb, offset, ie_len+2, FALSE);
+ ie_tree = proto_item_add_subtree(item, ett_bssap_mobile_id);
+
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
+ offset++;
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
+ offset++;
+ /* The rest of the information element is coded as the value part of
+ * the mobile identity IE defined in 3GPP TS 24.008 (not including
+ * 3GPP TS 24.008 IEI and 3GPP TS 24.008 length indicator).
+ */
+ de_mid(tvb, ie_tree, offset, ie_len, NULL, 0);
+
+
+ return offset + ie_len;
}
/* 18.4.18 Mobile station classmark 1 */
static int
dissect_bssap_mobile_stn_cls_mrk1(tvbuff_t *tvb, proto_tree *tree, int offset)
{
- proto_item *item = NULL;
- proto_tree *ie_tree = NULL;
- guint8 ie_len;
-
- ie_len = tvb_get_guint8(tvb,offset+1);
- item = proto_tree_add_item(tree, hf_bssap_mobile_stn_cls_mrk1_ie, tvb, offset, ie_len+2, FALSE);
- ie_tree = proto_item_add_subtree(item, ett_bssap_mobile_stn_cls_mrk1);
-
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
- offset++;
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
- offset++;
- /* The rest of the information element is coded as the value part of
- * the mobile station classmark 1 IE defined in 3GPP TS 24.008 (not
- * including 3GPP TS 24.008 IEI)
- */
- de_ms_cm_1(tvb, ie_tree, offset, ie_len, NULL, 0);
-
- return offset + ie_len;
+ proto_item *item = NULL;
+ proto_tree *ie_tree = NULL;
+ guint8 ie_len;
+
+ ie_len = tvb_get_guint8(tvb,offset+1);
+ item = proto_tree_add_item(tree, hf_bssap_mobile_stn_cls_mrk1_ie, tvb, offset, ie_len+2, FALSE);
+ ie_tree = proto_item_add_subtree(item, ett_bssap_mobile_stn_cls_mrk1);
+
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
+ offset++;
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
+ offset++;
+ /* The rest of the information element is coded as the value part of
+ * the mobile station classmark 1 IE defined in 3GPP TS 24.008 (not
+ * including 3GPP TS 24.008 IEI)
+ */
+ de_ms_cm_1(tvb, ie_tree, offset, ie_len, NULL, 0);
+
+ return offset + ie_len;
}
/* 18.4.19 Mobile station state */
static const value_string bssap_mobile_station_state_values[] = {
- { 0x00, "IDLE or PMM-DETACHED" },
- { 0x01, "STANDBY or PMM-IDLE, 0 PDP contexts active" },
- { 0x02, "STANDBY or PMM-IDLE, 1 or more PDP contexts active" },
- { 0x03, "SUSPENDED, 0 PDP contexts active" },
- { 0x04, "SUSPENDED, 1 or more PDP contexts active" },
- { 0x05, "READY or PMM-CONNECTED, 0 PDP contexts active" },
- { 0x06, "READY or PMM-CONNECTED, 1 or more PDP contexts active" },
- { 0x07, "IMSI unknown" },
- { 0x08, "Information requested not supported" },
+ { 0x00, "IDLE or PMM-DETACHED" },
+ { 0x01, "STANDBY or PMM-IDLE, 0 PDP contexts active" },
+ { 0x02, "STANDBY or PMM-IDLE, 1 or more PDP contexts active" },
+ { 0x03, "SUSPENDED, 0 PDP contexts active" },
+ { 0x04, "SUSPENDED, 1 or more PDP contexts active" },
+ { 0x05, "READY or PMM-CONNECTED, 0 PDP contexts active" },
+ { 0x06, "READY or PMM-CONNECTED, 1 or more PDP contexts active" },
+ { 0x07, "IMSI unknown" },
+ { 0x08, "Information requested not supported" },
{ 0, NULL }
};
static int
dissect_bssap_mobile_station_state(tvbuff_t *tvb, proto_tree *tree, int offset)
{
- proto_item *item = NULL;
- proto_tree *ie_tree = NULL;
- guint8 ie_len;
-
- ie_len = tvb_get_guint8(tvb,offset+1);
- item = proto_tree_add_item(tree, hf_bssap_mobile_station_state_ie, tvb, offset, ie_len+2, FALSE);
- ie_tree = proto_item_add_subtree(item, ett_bssap_mobile_station_state);
-
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
- offset++;
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
- offset++;
- /* Mobile station state value (octet 3) */
- proto_tree_add_item(ie_tree, hf_bssap_mobile_station_state, tvb, offset, ie_len, FALSE);
-
- return offset + ie_len;
+ proto_item *item = NULL;
+ proto_tree *ie_tree = NULL;
+ guint8 ie_len;
+
+ ie_len = tvb_get_guint8(tvb,offset+1);
+ item = proto_tree_add_item(tree, hf_bssap_mobile_station_state_ie, tvb, offset, ie_len+2, FALSE);
+ ie_tree = proto_item_add_subtree(item, ett_bssap_mobile_station_state);
+
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
+ offset++;
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
+ offset++;
+ /* Mobile station state value (octet 3) */
+ proto_tree_add_item(ie_tree, hf_bssap_mobile_station_state, tvb, offset, ie_len, FALSE);
+
+ return offset + ie_len;
}
/* 18.4.20 PTMSI */
static int
dissect_bssap_ptmsi(tvbuff_t *tvb, proto_tree *tree, int offset)
{
- proto_item *item = NULL;
- proto_tree *ie_tree = NULL;
- guint8 ie_len;
-
- ie_len = tvb_get_guint8(tvb,offset+1);
- item = proto_tree_add_item(tree, hf_bssap_ptmsi_ie, tvb, offset, ie_len+2, FALSE);
- ie_tree = proto_item_add_subtree(item, ett_bssap_ptmsi);
-
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
- offset++;
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
- offset++;
- /* The PTMSI consists of 4 octets. It can be coded using a full hexadecimal representation
- * (see 3GPP TS 23.003).
- */
- proto_tree_add_item(ie_tree, hf_bssap_ptmsi, tvb, offset, ie_len, FALSE);
-
- return offset + ie_len;
+ proto_item *item = NULL;
+ proto_tree *ie_tree = NULL;
+ guint8 ie_len;
+
+ ie_len = tvb_get_guint8(tvb,offset+1);
+ item = proto_tree_add_item(tree, hf_bssap_ptmsi_ie, tvb, offset, ie_len+2, FALSE);
+ ie_tree = proto_item_add_subtree(item, ett_bssap_ptmsi);
+
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
+ offset++;
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
+ offset++;
+ /* The PTMSI consists of 4 octets. It can be coded using a full hexadecimal representation
+ * (see 3GPP TS 23.003).
+ */
+ proto_tree_add_item(ie_tree, hf_bssap_ptmsi, tvb, offset, ie_len, FALSE);
+
+ return offset + ie_len;
}
/* 18.4.21 Reject cause */
static int
dissect_bssap_reject_cause(tvbuff_t *tvb, proto_tree *tree, int offset)
{
- proto_item *item = NULL;
- proto_tree *ie_tree = NULL;
- guint8 ie_len;
-
- ie_len = tvb_get_guint8(tvb,offset+1);
- item = proto_tree_add_item(tree, hf_bssap_reject_cause_ie, tvb, offset, ie_len+2, FALSE);
- ie_tree = proto_item_add_subtree(item, ett_bssap_reject_cause);
-
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
- offset++;
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
- offset++;
- /* The rest of the information element is coded as the value part of
- * the reject cause IE defined in 3GPP TS 24.008, not including
- * 3GPP TS 24.008 IEI.
- */
- de_rej_cause(tvb, ie_tree, offset, ie_len, NULL, 0);
-
- return offset + ie_len;
+ proto_item *item = NULL;
+ proto_tree *ie_tree = NULL;
+ guint8 ie_len;
+
+ ie_len = tvb_get_guint8(tvb,offset+1);
+ item = proto_tree_add_item(tree, hf_bssap_reject_cause_ie, tvb, offset, ie_len+2, FALSE);
+ ie_tree = proto_item_add_subtree(item, ett_bssap_reject_cause);
+
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
+ offset++;
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
+ offset++;
+ /* The rest of the information element is coded as the value part of
+ * the reject cause IE defined in 3GPP TS 24.008, not including
+ * 3GPP TS 24.008 IEI.
+ */
+ de_rej_cause(tvb, ie_tree, offset, ie_len, NULL, 0);
+
+ return offset + ie_len;
}
@@ -1379,25 +1379,25 @@ dissect_bssap_reject_cause(tvbuff_t *tvb, proto_tree *tree, int offset)
static int
dissect_bssap_service_area_id(tvbuff_t *tvb, proto_tree *tree, int offset)
{
- proto_item *item = NULL;
- proto_tree *ie_tree = NULL;
- guint8 ie_len;
-
- ie_len = tvb_get_guint8(tvb,offset+1);
- item = proto_tree_add_item(tree, hf_bssap_service_area_id_ie, tvb, offset, ie_len+2, FALSE);
- ie_tree = proto_item_add_subtree(item, ett_bssap_service_area_id);
-
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
- offset++;
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
- offset++;
- /* The rest of the information element is coded as the the value part
- * of the SAI IE defined in 3GPP TS 25.413 (not including
- * 3GPP TS 25.413 IEI and 3GPP TS 25.413 length indicator).
- */
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie_data, tvb, offset, ie_len, FALSE);
-
- return offset + ie_len;
+ proto_item *item = NULL;
+ proto_tree *ie_tree = NULL;
+ guint8 ie_len;
+
+ ie_len = tvb_get_guint8(tvb,offset+1);
+ item = proto_tree_add_item(tree, hf_bssap_service_area_id_ie, tvb, offset, ie_len+2, FALSE);
+ ie_tree = proto_item_add_subtree(item, ett_bssap_service_area_id);
+
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
+ offset++;
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
+ offset++;
+ /* The rest of the information element is coded as the the value part
+ * of the SAI IE defined in 3GPP TS 25.413 (not including
+ * 3GPP TS 25.413 IEI and 3GPP TS 25.413 length indicator).
+ */
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie_data, tvb, offset, ie_len, FALSE);
+
+ return offset + ie_len;
}
@@ -1411,61 +1411,61 @@ static const true_false_string bssap_extension_value = {
static int
dissect_bssap_sgsn_number(tvbuff_t *tvb, proto_tree *tree, int offset)
{
- proto_item *item = NULL;
- proto_tree *ie_tree = NULL;
- guint8 ie_len;
- tvbuff_t *number_tvb;
- const char *digit_str;
-
- ie_len = tvb_get_guint8(tvb,offset+1);
- item = proto_tree_add_item(tree, hf_bssap_sgsn_nr_ie, tvb, offset, ie_len+2, FALSE);
- ie_tree = proto_item_add_subtree(item, ett_bssap_sgsn_nr);
-
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
- offset++;
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
- offset++;
- /* The SGSN number is coded as a sequence of TBCD digits (as specified in 3GPP TS 29.002),
- * compressed two into each octet. The Number is in international E.164 format as indicated by Octet 3
- * which coding is specified in 3GPP TS 29.002. This is a variable length information element,
- * and includes a length indicator. The value part of the SGSN number information element
- * (not including IEI, Length indicator and Octet 3) shall not exceed 15 digits.
- */
- proto_tree_add_item(ie_tree, hf_bssap_extension, tvb, offset, 1, FALSE);
- proto_tree_add_item(ie_tree, hf_bssap_type_of_number, tvb, offset, 1, FALSE);
- proto_tree_add_item(ie_tree, hf_bssap_numbering_plan_id, tvb, offset, 1, FALSE);
- offset++;
- number_tvb = tvb_new_subset(tvb, offset, ie_len-1,ie_len-1);
- digit_str = unpack_digits(number_tvb, 0, &Dgt1_9_bcd, FALSE);
- proto_tree_add_string(ie_tree, hf_bssap_sgsn_number, number_tvb, 0, -1, digit_str);
-
-
- return offset + ie_len-1;
+ proto_item *item = NULL;
+ proto_tree *ie_tree = NULL;
+ guint8 ie_len;
+ tvbuff_t *number_tvb;
+ const char *digit_str;
+
+ ie_len = tvb_get_guint8(tvb,offset+1);
+ item = proto_tree_add_item(tree, hf_bssap_sgsn_nr_ie, tvb, offset, ie_len+2, FALSE);
+ ie_tree = proto_item_add_subtree(item, ett_bssap_sgsn_nr);
+
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
+ offset++;
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
+ offset++;
+ /* The SGSN number is coded as a sequence of TBCD digits (as specified in 3GPP TS 29.002),
+ * compressed two into each octet. The Number is in international E.164 format as indicated by Octet 3
+ * which coding is specified in 3GPP TS 29.002. This is a variable length information element,
+ * and includes a length indicator. The value part of the SGSN number information element
+ * (not including IEI, Length indicator and Octet 3) shall not exceed 15 digits.
+ */
+ proto_tree_add_item(ie_tree, hf_bssap_extension, tvb, offset, 1, FALSE);
+ proto_tree_add_item(ie_tree, hf_bssap_type_of_number, tvb, offset, 1, FALSE);
+ proto_tree_add_item(ie_tree, hf_bssap_numbering_plan_id, tvb, offset, 1, FALSE);
+ offset++;
+ number_tvb = tvb_new_subset(tvb, offset, ie_len-1,ie_len-1);
+ digit_str = unpack_digits(number_tvb, 0, &Dgt1_9_bcd, FALSE);
+ proto_tree_add_string(ie_tree, hf_bssap_sgsn_number, number_tvb, 0, -1, digit_str);
+
+
+ return offset + ie_len-1;
}
/* 18.4.23 TMSI */
static int
dissect_bssap_tmsi(tvbuff_t *tvb, proto_tree *tree, int offset)
{
- proto_item *item = NULL;
- proto_tree *ie_tree = NULL;
- guint8 ie_len;
-
- ie_len = tvb_get_guint8(tvb,offset+1);
- item = proto_tree_add_item(tree, hf_bssap_tmsi_ie, tvb, offset, ie_len+2, FALSE);
- ie_tree = proto_item_add_subtree(item, ett_bssap_tmsi);
-
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
- offset++;
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
- offset++;
- /* The TMSI consists of 4 octets. It can be coded using a full hexadecimal representation
- * (see 3GPP TS 23.003).
- */
- proto_tree_add_item(ie_tree, hf_bssap_tmsi, tvb, offset, ie_len, FALSE);
-
-
- return offset + ie_len;
+ proto_item *item = NULL;
+ proto_tree *ie_tree = NULL;
+ guint8 ie_len;
+
+ ie_len = tvb_get_guint8(tvb,offset+1);
+ item = proto_tree_add_item(tree, hf_bssap_tmsi_ie, tvb, offset, ie_len+2, FALSE);
+ ie_tree = proto_item_add_subtree(item, ett_bssap_tmsi);
+
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
+ offset++;
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
+ offset++;
+ /* The TMSI consists of 4 octets. It can be coded using a full hexadecimal representation
+ * (see 3GPP TS 23.003).
+ */
+ proto_tree_add_item(ie_tree, hf_bssap_tmsi, tvb, offset, ie_len, FALSE);
+
+
+ return offset + ie_len;
}
@@ -1477,23 +1477,23 @@ static const true_false_string bssap_tmsi_flag = {
static int
dissect_bssap_tmsi_status(tvbuff_t *tvb, proto_tree *tree, int offset)
{
- proto_item *item = NULL;
- proto_tree *ie_tree = NULL;
- guint8 ie_len;
-
- ie_len = tvb_get_guint8(tvb,offset+1);
- item = proto_tree_add_item(tree, hf_bssap_tmsi_status_ie, tvb, offset, ie_len+2, FALSE);
- ie_tree = proto_item_add_subtree(item, ett_bssap_tmsi_status);
+ proto_item *item = NULL;
+ proto_tree *ie_tree = NULL;
+ guint8 ie_len;
+
+ ie_len = tvb_get_guint8(tvb,offset+1);
+ item = proto_tree_add_item(tree, hf_bssap_tmsi_status_ie, tvb, offset, ie_len+2, FALSE);
+ ie_tree = proto_item_add_subtree(item, ett_bssap_tmsi_status);
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
- offset++;
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
- offset++;
- /* TMSI flag (octet 3) */
- proto_tree_add_item(ie_tree, hf_bssap_tmsi_status, tvb, offset, ie_len, FALSE);
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
+ offset++;
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
+ offset++;
+ /* TMSI flag (octet 3) */
+ proto_tree_add_item(ie_tree, hf_bssap_tmsi_status, tvb, offset, ie_len, FALSE);
- return offset + ie_len;
+ return offset + ie_len;
}
/* 18.4.25 Uplink Tunnel Payload Control and Info */
@@ -1503,58 +1503,58 @@ static const true_false_string bssap_E_flag = {
};
/* 3GPP TS 44.064 B.1.1 TOM Protocol Discriminator */
static const value_string bssap_tom_prot_disc_values[] = {
- { 0x00, "Not specified" },
- { 0x01, "TIA/EIA-136" },
- { 0x02, "RRLP" },
- { 0x03, "Reserved for extension" },
+ { 0x00, "Not specified" },
+ { 0x01, "TIA/EIA-136" },
+ { 0x02, "RRLP" },
+ { 0x03, "Reserved for extension" },
{ 0, NULL }
};
static int
dissect_bssap_ulink_tunnel_payload_control_and_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
{
- proto_item *item = NULL;
- proto_tree *ie_tree = NULL;
- tvbuff_t *next_tvb;
- guint8 ie_len;
- guint8 octet;
- guint8 prot_disc;
-
- ie_len = tvb_get_guint8(tvb,offset+1);
- item = proto_tree_add_item(tree, hf_bssap_ulink_tnl_pld_cntrl_amd_inf_ie, tvb, offset, ie_len+2, FALSE);
- ie_tree = proto_item_add_subtree(item, ett_bssap_ulink_tnl_pld_cntrl_amd_inf);
-
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
- offset++;
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
- offset++;
- /* octet 3 bit 8 Spare */
- /* octet 3 bit 7 - 4
- * TOM Protocol Discriminator: Identifies the protocol using tunnelling of non-GSM signalling.
- * For coding, see 3GPP TS 44.064.
- */
- proto_tree_add_item(ie_tree, hf_bssap_tom_prot_disc, tvb, offset, 1, FALSE);
- octet = tvb_get_guint8(tvb,offset);
- prot_disc = (octet&0x78)>>3;
-
- /* octet 3 bit 3 E: Cipher Request. When set to 1 indicates that the SGSN received the payload in ciphered form,
- * when set to 0 indicates that the SGSN did not receive the payload in ciphered form.
- */
- proto_tree_add_item(ie_tree, hf_bssap_e_bit, tvb, offset, 1, FALSE);
-
- /* octet 3 bit 2 - 1
- * Tunnel Priority: Indicates the priority of the Tunnel Payload. For coding, see Table 20.1: Association
- * between Tunnel Priority and LLC SAPs.
- */
- proto_tree_add_item(ie_tree, hf_bssap_tunnel_prio, tvb, offset, 1, FALSE);
- /* Tunnel payload */
- next_tvb = tvb_new_subset(tvb, offset, ie_len-4, ie_len-4);
-
- if ((prot_disc == 2)&&(rrlp_handle))
- call_dissector(rrlp_handle, next_tvb, pinfo, ie_tree);
- else
- call_dissector(data_handle, next_tvb, pinfo, ie_tree);
-
- return offset + ie_len;
+ proto_item *item = NULL;
+ proto_tree *ie_tree = NULL;
+ tvbuff_t *next_tvb;
+ guint8 ie_len;
+ guint8 octet;
+ guint8 prot_disc;
+
+ ie_len = tvb_get_guint8(tvb,offset+1);
+ item = proto_tree_add_item(tree, hf_bssap_ulink_tnl_pld_cntrl_amd_inf_ie, tvb, offset, ie_len+2, FALSE);
+ ie_tree = proto_item_add_subtree(item, ett_bssap_ulink_tnl_pld_cntrl_amd_inf);
+
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
+ offset++;
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
+ offset++;
+ /* octet 3 bit 8 Spare */
+ /* octet 3 bit 7 - 4
+ * TOM Protocol Discriminator: Identifies the protocol using tunnelling of non-GSM signalling.
+ * For coding, see 3GPP TS 44.064.
+ */
+ proto_tree_add_item(ie_tree, hf_bssap_tom_prot_disc, tvb, offset, 1, FALSE);
+ octet = tvb_get_guint8(tvb,offset);
+ prot_disc = (octet&0x78)>>3;
+
+ /* octet 3 bit 3 E: Cipher Request. When set to 1 indicates that the SGSN received the payload in ciphered form,
+ * when set to 0 indicates that the SGSN did not receive the payload in ciphered form.
+ */
+ proto_tree_add_item(ie_tree, hf_bssap_e_bit, tvb, offset, 1, FALSE);
+
+ /* octet 3 bit 2 - 1
+ * Tunnel Priority: Indicates the priority of the Tunnel Payload. For coding, see Table 20.1: Association
+ * between Tunnel Priority and LLC SAPs.
+ */
+ proto_tree_add_item(ie_tree, hf_bssap_tunnel_prio, tvb, offset, 1, FALSE);
+ /* Tunnel payload */
+ next_tvb = tvb_new_subset(tvb, offset, ie_len-4, ie_len-4);
+
+ if ((prot_disc == 2)&&(rrlp_handle))
+ call_dissector(rrlp_handle, next_tvb, pinfo, ie_tree);
+ else
+ call_dissector(data_handle, next_tvb, pinfo, ie_tree);
+
+ return offset + ie_len;
}
@@ -1562,975 +1562,975 @@ dissect_bssap_ulink_tunnel_payload_control_and_info(tvbuff_t *tvb, packet_info *
static int
dissect_bssap_vlr_number(tvbuff_t *tvb, proto_tree *tree, int offset)
{
- proto_item *item = NULL;
- proto_tree *ie_tree = NULL;
- guint8 ie_len;
- tvbuff_t *number_tvb;
- const char *digit_str;
-
- ie_len = tvb_get_guint8(tvb,offset+1);
- item = proto_tree_add_item(tree, hf_bssap_vlr_number_ie, tvb, offset, ie_len+2, FALSE);
- ie_tree = proto_item_add_subtree(item, ett_bssap_vlr_number);
-
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
- offset++;
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
- offset++;
- /* The VLR number is coded as a sequence of TBCD digits (as specified in 3GPP TS 29.002),
- * compressed two into each octet. The Number is in international E.164 format as indicated by Octet 3
- * which coding is specified in 3GPP TS 29.002. This is a variable length information element,
- * and includes a length indicator. The value part of the VLR number information element
- * (not including IEI, length indicator and Octet 3), shall not exceed 15 digits.
- */
-
- proto_tree_add_item(ie_tree, hf_bssap_extension, tvb, offset, 1, FALSE);
- proto_tree_add_item(ie_tree, hf_bssap_type_of_number, tvb, offset, 1, FALSE);
- proto_tree_add_item(ie_tree, hf_bssap_numbering_plan_id, tvb, offset, 1, FALSE);
- offset++;
- number_tvb = tvb_new_subset(tvb, offset, ie_len-1,ie_len-1);
- digit_str = unpack_digits(number_tvb, 0, &Dgt1_9_bcd, FALSE);
- proto_tree_add_string(ie_tree, hf_bssap_sgsn_number, number_tvb, 0, -1, digit_str);
-
- return offset + ie_len-1;
+ proto_item *item = NULL;
+ proto_tree *ie_tree = NULL;
+ guint8 ie_len;
+ tvbuff_t *number_tvb;
+ const char *digit_str;
+
+ ie_len = tvb_get_guint8(tvb,offset+1);
+ item = proto_tree_add_item(tree, hf_bssap_vlr_number_ie, tvb, offset, ie_len+2, FALSE);
+ ie_tree = proto_item_add_subtree(item, ett_bssap_vlr_number);
+
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
+ offset++;
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
+ offset++;
+ /* The VLR number is coded as a sequence of TBCD digits (as specified in 3GPP TS 29.002),
+ * compressed two into each octet. The Number is in international E.164 format as indicated by Octet 3
+ * which coding is specified in 3GPP TS 29.002. This is a variable length information element,
+ * and includes a length indicator. The value part of the VLR number information element
+ * (not including IEI, length indicator and Octet 3), shall not exceed 15 digits.
+ */
+
+ proto_tree_add_item(ie_tree, hf_bssap_extension, tvb, offset, 1, FALSE);
+ proto_tree_add_item(ie_tree, hf_bssap_type_of_number, tvb, offset, 1, FALSE);
+ proto_tree_add_item(ie_tree, hf_bssap_numbering_plan_id, tvb, offset, 1, FALSE);
+ offset++;
+ number_tvb = tvb_new_subset(tvb, offset, ie_len-1,ie_len-1);
+ digit_str = unpack_digits(number_tvb, 0, &Dgt1_9_bcd, FALSE);
+ proto_tree_add_string(ie_tree, hf_bssap_sgsn_number, number_tvb, 0, -1, digit_str);
+
+ return offset + ie_len-1;
}
/* 18.4.27 Global CN-Id */
static int
dissect_bssap_global_cn_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
{
- proto_item *item = NULL;
- proto_tree *ie_tree = NULL;
- proto_item *plmn_item = NULL;
- proto_tree *plmn_tree = NULL;
- proto_item *global_cn_id_item = NULL;
- proto_tree *global_cn_id_tree = NULL;
- guint8 ie_len;
-
- ie_len = tvb_get_guint8(tvb,offset+1);
- item = proto_tree_add_item(tree, hf_bssap_global_cn_id_ie, tvb, offset, ie_len+2, FALSE);
- ie_tree = proto_item_add_subtree(item, ett_bssap_global_cn);
-
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
- offset++;
- proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
- offset++;
- /* The Global CN-Id consists of a PLMN-Id and a CN-Id, see 3GPP TS 23.003.
- * The PLMN-Id consists of MCC and MNC coded according to Location Area Identification
- * in 3GPP TS 24.008. The CN-Id is an integer defined by O&M.
- * The least significant bit of the CN-Id field is bit 1 of octet 7 and
- * the most significant bit is bit 8 of octet 6. If the CN-Id does not fill the field reserved for it,
- * the rest of the bits are set to '0'.
- */
- global_cn_id_item = proto_tree_add_item(ie_tree, hf_bssap_global_cn_id, tvb, offset, ie_len, FALSE);
- global_cn_id_tree = proto_item_add_subtree(global_cn_id_item, ett_bssap_global_cn_id);
- /* Octet 3 - 5 PLMN-Id Coded as octets 2 to 4 of the Location Area Identification IE,
- * defined in 3GPP TS 24.008 (not including 3GPP TS 24.008 IEI and LAC).
- */
- plmn_item = proto_tree_add_item(global_cn_id_tree, hf_bssap_plmn_id, tvb, offset, 3, FALSE);
- plmn_tree = proto_item_add_subtree(plmn_item, ett_bssap_plmn);
- dissect_e212_mcc_mnc(tvb, pinfo, plmn_tree, offset, TRUE);
- offset = offset + 3;
-
- /* Octet 6 - 7 CN-Id (INTEGER 0..4095) */
- proto_tree_add_item(global_cn_id_tree, hf_bssap_cn_id, tvb, offset, 2, FALSE);
- offset = offset+2;
-
- return offset;
+ proto_item *item = NULL;
+ proto_tree *ie_tree = NULL;
+ proto_item *plmn_item = NULL;
+ proto_tree *plmn_tree = NULL;
+ proto_item *global_cn_id_item = NULL;
+ proto_tree *global_cn_id_tree = NULL;
+ guint8 ie_len;
+
+ ie_len = tvb_get_guint8(tvb,offset+1);
+ item = proto_tree_add_item(tree, hf_bssap_global_cn_id_ie, tvb, offset, ie_len+2, FALSE);
+ ie_tree = proto_item_add_subtree(item, ett_bssap_global_cn);
+
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie, tvb, offset, 1, FALSE);
+ offset++;
+ proto_tree_add_item(ie_tree, hf_bssap_plus_ie_len, tvb, offset, 1, FALSE);
+ offset++;
+ /* The Global CN-Id consists of a PLMN-Id and a CN-Id, see 3GPP TS 23.003.
+ * The PLMN-Id consists of MCC and MNC coded according to Location Area Identification
+ * in 3GPP TS 24.008. The CN-Id is an integer defined by O&M.
+ * The least significant bit of the CN-Id field is bit 1 of octet 7 and
+ * the most significant bit is bit 8 of octet 6. If the CN-Id does not fill the field reserved for it,
+ * the rest of the bits are set to '0'.
+ */
+ global_cn_id_item = proto_tree_add_item(ie_tree, hf_bssap_global_cn_id, tvb, offset, ie_len, FALSE);
+ global_cn_id_tree = proto_item_add_subtree(global_cn_id_item, ett_bssap_global_cn_id);
+ /* Octet 3 - 5 PLMN-Id Coded as octets 2 to 4 of the Location Area Identification IE,
+ * defined in 3GPP TS 24.008 (not including 3GPP TS 24.008 IEI and LAC).
+ */
+ plmn_item = proto_tree_add_item(global_cn_id_tree, hf_bssap_plmn_id, tvb, offset, 3, FALSE);
+ plmn_tree = proto_item_add_subtree(plmn_item, ett_bssap_plmn);
+ dissect_e212_mcc_mnc(tvb, pinfo, plmn_tree, offset, TRUE);
+ offset = offset + 3;
+
+ /* Octet 6 - 7 CN-Id (INTEGER 0..4095) */
+ proto_tree_add_item(global_cn_id_tree, hf_bssap_cn_id, tvb, offset, 2, FALSE);
+ offset = offset+2;
+
+ return offset;
}
static void dissect_bssap_plus(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
- proto_item *bssap_item;
- proto_tree *bssap_tree = NULL;
- guint8 message_type;
- int offset = 0;
-
- /*
- * Make entry in the Protocol column on summary display
- */
- col_set_str(pinfo->cinfo, COL_PROTOCOL, "BSSAP+");
+ proto_item *bssap_item;
+ proto_tree *bssap_tree = NULL;
+ guint8 message_type;
+ int offset = 0;
+
+ /*
+ * Make entry in the Protocol column on summary display
+ */
+ col_set_str(pinfo->cinfo, COL_PROTOCOL, "BSSAP+");
+
+ if (pinfo->sccp_info && pinfo->sccp_info->data.co.assoc)
+ pinfo->sccp_info->data.co.assoc->payload = SCCP_PLOAD_BSSAP;
- if (pinfo->sccp_info && pinfo->sccp_info->data.co.assoc)
- pinfo->sccp_info->data.co.assoc->payload = SCCP_PLOAD_BSSAP;
+ /* create the BSSAP+ protocol tree */
+ bssap_item = proto_tree_add_item(tree, proto_bssap, tvb, 0, -1, FALSE);
+ bssap_tree = proto_item_add_subtree(bssap_item, ett_bssap);
- /* create the BSSAP+ protocol tree */
- bssap_item = proto_tree_add_item(tree, proto_bssap, tvb, 0, -1, FALSE);
- bssap_tree = proto_item_add_subtree(bssap_item, ett_bssap);
-
- message_type = tvb_get_guint8(tvb,offset);
- proto_tree_add_item(bssap_tree, hf_bssap_plus_message_type, tvb, offset, 1,FALSE);
- offset++;
-
- if (check_col(pinfo->cinfo, COL_INFO)){
- col_add_str(pinfo->cinfo,COL_INFO, val_to_str(message_type,bssap_plus_message_type_values,"Unknown %u"));
- }
-
- switch(message_type){
- case BSSAP_PAGING_REQUEST:
- /* IMSI IMSI 18.4.10 M TLV 6-10 */
- if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
- offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
-
- /* VLR number VLR number 18.4.26 M TLV 5-11 */
- if ( check_ie(tvb, tree, &offset, BSSAP_VLR_NUMBER))
- offset = dissect_bssap_vlr_number(tvb, bssap_tree, offset);
-
- /* End of mandatory elements */
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
-
- /* TMSI TMSI 18.4.23 O TLV 6 */
- if ( check_optional_ie(tvb, offset, BSSAP_TMSI))
- offset = dissect_bssap_tmsi(tvb, bssap_tree, offset);
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
-
- /* Location area identifier Location area identifier 18.4.14 O TLV 7 */
- if ( check_optional_ie(tvb, offset, BSSAP_LOC_AREA_ID))
- offset = dissect_bssap_loc_area_id(tvb, bssap_tree, offset);
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
-
- /* Channel needed Channel needed 18.4.2 O TLV 3 */
- if ( check_optional_ie(tvb, offset, BSSAP_CHANNEL_NEEDED))
- offset = dissect_bssap_channel_needed(tvb, bssap_tree, offset);
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
-
- /* eMLPP Priority eMLPP Priority 18.4.4 O TLV 3 */
- if ( check_optional_ie(tvb, offset, BSSAP_EMLPP_PRIORITY))
- offset = dissect_bssap_emlpp_priority(tvb, bssap_tree, offset);
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
-
- /* Global CN-Id Global CN-Id 18.4.27 O TLV 7 */
- if ( check_optional_ie(tvb, offset, BSSAP_GLOBAL_CN_ID))
- offset = dissect_bssap_global_cn_id(tvb, pinfo, bssap_tree, offset);
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
-
- proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
- break;
- case BSSAP_PAGING_REJECT: /* 17.1.18 */
- /* IMSI IMSI 18.4.10 M TLV 6-10 */
- if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
- offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
- /* Gs Cause Gs Cause 18.4.7 M TLV 3 */
- if ( check_ie(tvb, tree, &offset, BSSAP_GS_CAUSE))
- offset = dissect_bssap_Gs_cause(tvb, bssap_tree, offset);
-
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
- proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
- break;
- case BSSAP_DOWNLINK_TUNNEL_REQUEST: /* 17.1.4 */
- /* IMSI IMSI 18.4.10 M TLV 6-10 */
- if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
- offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
-
- /* VLR number VLR number 18.4.26 M TLV 5-11 */
- if ( check_ie(tvb, tree, &offset, BSSAP_VLR_NUMBER))
- offset = dissect_bssap_vlr_number(tvb, bssap_tree, offset);
-
- /* Downlink Tunnel Payload Control and Info 18.4.3 M TLV 3-223 */
- if ( check_ie(tvb, tree, &offset, BSSAP_DLINK_TNL_PLD_CTR_AND_INF))
- offset = dissect_bssap_dlink_tunnel_payload_control_and_info(tvb, pinfo, bssap_tree, offset);
-
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
- proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
- break;
- case BSSAP_UPLINK_TUNNEL_REQUEST: /* 17.1.23 */
- /* SGSN number 18.4.22 M TLV 5-11 */
- if ( check_ie(tvb, tree, &offset, BSSAP_SGSN_NUMBER))
- offset = dissect_bssap_sgsn_number(tvb, bssap_tree, offset);
-
- /* Uplink Tunnel Payload Control and Info 18.4.25 M TLV 3-223 */
- if ( check_ie(tvb, tree, &offset, BSSAP_ULINK_TNL_PLD_CTR_AND_INF))
- offset = dissect_bssap_ulink_tunnel_payload_control_and_info(tvb, pinfo, bssap_tree, offset);
-
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
- proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
- break;
- case BSSAP_LOCATION_UPDATE_REQUEST: /* 17.1.11 BSSAP+-LOCATION-UPDATE-REQUEST */
- /* IMSI IMSI 18.4.10 M TLV 6-10 */
- if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
- offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
-
- /* SGSN number SGSN number 18.4.22 M TLV 5-11 */
- if ( check_ie(tvb, tree, &offset, BSSAP_SGSN_NUMBER))
- offset = dissect_bssap_sgsn_number(tvb, bssap_tree, offset);
-
- /* Update type GPRS location update type 18.4.6 M TLV 3 */
- if ( check_ie(tvb, tree, &offset, BSSAP_GPRS_LOC_UPD_TYPE))
- offset = dissect_bssap_gprs_location_update_type(tvb, bssap_tree, offset);
-
- /* New Cell global identity Cell global identity 18.4.1 M TLV 10 */
- if ( check_ie(tvb, tree, &offset, BSSAP_CELL_GBL_ID))
- offset = dissect_bssap_cell_global_id(tvb, bssap_tree, offset);
-
- /* Mobile station classmark Mobile station classmark 1 18.4.18 M TLV 3 */
- if ( check_ie(tvb, tree, &offset, BSSAP_MOBILE_STN_CLS_MRK1))
- offset = dissect_bssap_mobile_stn_cls_mrk1(tvb, bssap_tree, offset);
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
-
- /* Old location area identifier Location area identifier 18.4.14 O TLV 7 */
- if ( check_optional_ie(tvb, offset, BSSAP_LOC_AREA_ID))
- offset = dissect_bssap_loc_area_id(tvb, bssap_tree, offset);
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
-
- /* TMSI status TMSI status 18.4.24 O TLV 3 */
- if ( check_optional_ie(tvb, offset, BSSAP_TMSI_STATUS))
- offset = dissect_bssap_tmsi_status(tvb, bssap_tree, offset);
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
-
- /* New service area identification Service area identification 18.4.21b O TLV 9 */
- if ( check_optional_ie(tvb, offset, BSSAP_SERVICE_AREA_ID))
- offset = dissect_bssap_service_area_id(tvb, bssap_tree, offset);
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
-
- /* IMEISV IMEISV 18.4.9 O TLV 10 */
- if ( check_optional_ie(tvb, offset, BSSAP_IMEISV))
- offset = dissect_bssap_imesiv(tvb, bssap_tree, offset);
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
- proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
- break;
- case BSSAP_LOCATION_UPDATE_ACCEPT: /* 17.1.9 */
- /* IMSI 18.4.10 M TLV 6-10 */
- if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
- offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
-
- /* Location area identifier Location area identifier 18.4.14 M TLV 7 */
- if ( check_ie(tvb, tree, &offset, BSSAP_LOC_AREA_ID))
- offset = dissect_bssap_loc_area_id(tvb, bssap_tree, offset);
-
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
-
- /* New TMSI, or IMSI Mobile identity 18.4.17 O TLV 6-10 */
- if ( check_optional_ie(tvb, offset, BSSAP_MOBILE_ID))
- offset = dissect_bssap_mobile_id(tvb, bssap_tree, offset);
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
- proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
- break;
- case BSSAP_LOCATION_UPDATE_REJECT: /* 17.1.10 */
- /* IMSI IMSI 18.4.10 M TLV 6-10 */
- if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
- offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
- /* Reject cause Reject cause 18.4.21 M TLV 3 */
- if ( check_ie(tvb, tree, &offset, BSSAP_REJECT_CAUSE))
- offset = dissect_bssap_reject_cause(tvb, bssap_tree, offset);
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
- proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
- break;
- case BSSAP_TMSI_REALLOCATION_COMPLETE: /* 17.1.22 */
- /* IMSI IMSI 18.4.10 M TLV 6-10 */
- if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
- offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
-
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
-
- /* Cell global identity Cell global identity 18.4.1 O TLV 10 */
- if ( check_optional_ie(tvb, offset, BSSAP_CELL_GBL_ID))
- offset = dissect_bssap_cell_global_id(tvb, bssap_tree, offset);
-
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
-
- /* Service area identification Service area identification 18.4.21b O TLV 9 */
- if ( check_optional_ie(tvb, offset, BSSAP_SERVICE_AREA_ID))
- offset = dissect_bssap_service_area_id(tvb, bssap_tree, offset);
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
- proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
- break;
- case BSSAP_ALERT_REQUEST: /* 17.1.3 */
- /* IMSI IMSI 18.4.10 M TLV 6-10 */
- if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
- offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
-
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
- proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
- break;
- case BSSAP_ALERT_ACK: /* 17.1.1 */
- /* IMSI IMSI 18.4.10 M TLV 6-10 */
- if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
- offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
-
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
- proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
- break;
- case BSSAP_ALERT_REJECT: /* 17.1.2 */
- /* IMSI IMSI 18.4.10 M TLV 6-10 */
- if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
- offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
-
- /* Gs Cause Gs Cause 18.4.7 M TLV 3 */
- if ( check_ie(tvb, tree, &offset, BSSAP_GS_CAUSE))
- offset = dissect_bssap_Gs_cause(tvb, bssap_tree, offset);
-
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
- proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
- break;
- case BSSAP_MS_ACTIVITY_INDICATION: /* 17.1.14 */
- /* IMSI IMSI 18.4.10 M TLV 6-10 */
- if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
- offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
-
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
-
- /* Cell global identity Cell global identity 18.4.1 O TLV 10 */
- if ( check_optional_ie(tvb, offset, BSSAP_CELL_GBL_ID))
- offset = dissect_bssap_cell_global_id(tvb, bssap_tree, offset);
-
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
-
- /* Service area identification Service area identification 18.4.21b O TLV 9 */
- if ( check_optional_ie(tvb, offset, BSSAP_SERVICE_AREA_ID))
- offset = dissect_bssap_service_area_id(tvb, bssap_tree, offset);
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
- proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
- break;
- case BSSAP_GPRS_DETACH_INDICATION: /* 17.1.6 */
- /* IMSI IMSI 18.4.10 M TLV 6-10 */
- if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
- offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
-
- /* SGSN number SGSN number 18.4.22 M TLV 5-11 */
- if ( check_ie(tvb, tree, &offset, BSSAP_SGSN_NUMBER))
- offset = dissect_bssap_sgsn_number(tvb, bssap_tree, offset);
-
- /* IMSI detach from GPRS service type IMSI detach from GPRS service type 18.4.17 M TLV 3 */
- if ( check_ie(tvb, tree, &offset, BSSAP_IMSI_DET_FROM_GPRS_SERV_TYPE))
- offset = dissect_bssap_imsi_det_from_gprs_serv_type(tvb, bssap_tree, offset);
-
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
-
- /* Cell global identity Cell global identity 18.4.1 O TLV 10 */
- if ( check_optional_ie(tvb, offset, BSSAP_CELL_GBL_ID))
- offset = dissect_bssap_cell_global_id(tvb, bssap_tree, offset);
-
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
-
- /* Service area identification Service area identification 18.4.21b O TLV 9 */
- if ( check_optional_ie(tvb, offset, BSSAP_SERVICE_AREA_ID))
- offset = dissect_bssap_service_area_id(tvb, bssap_tree, offset);
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
- proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
- break;
- case BSSAP_GPRS_DETACH_ACK: /* 17.1.5 */
- /* IMSI IMSI 18.4.10 M TLV 6-10 */
- if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
- offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
-
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
- proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
- break;
- case BSSAP_IMSI_DETACH_INDICATION: /* 17.1.8 */
- /* IMSI IMSI 18.4.10 M TLV 6-10 */
- if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
- offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
-
- /* SGSN number SGSN number 18.4.22 M TLV 5-11 */
- if ( check_ie(tvb, tree, &offset, BSSAP_SGSN_NUMBER))
- offset = dissect_bssap_sgsn_number(tvb, bssap_tree, offset);
-
- /* Detach type IMSI detach from non-GPRS service type 18.4.11 M TLV 3 */
- if ( check_ie(tvb, tree, &offset, BSSAP_IMSI_DET_FROM_NON_GPRS_SERV_TYPE))
- offset = dissect_bssap_imsi_det_from_non_gprs_serv_type(tvb, bssap_tree, offset);
-
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
-
- /* Cell global identity Cell global identity 18.4.1 O TLV 10 */
- if ( check_optional_ie(tvb, offset, BSSAP_CELL_GBL_ID))
- offset = dissect_bssap_cell_global_id(tvb, bssap_tree, offset);
-
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
-
- /* Location information age Location information age 18.4.14 O TLV 4 */
- if ( check_optional_ie(tvb, offset, BSSAP_LOC_INF_AGE))
- offset = dissect_bssap_location_information_age(tvb, bssap_tree, offset);
-
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
-
- /* Service area identification Service area identification 18.4.21b O TLV 9 */
- if ( check_optional_ie(tvb, offset, BSSAP_SERVICE_AREA_ID))
- offset = dissect_bssap_service_area_id(tvb, bssap_tree, offset);
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
- proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
- break;
- case BSSAP_IMSI_DETACH_ACK: /* 17.1.7 */
- /* IMSI IMSI 18.4.10 M TLV 6-10 */
- if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
- offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
-
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
- proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
- break;
- case BSSAP_RESET_INDICATION: /* 17.1.21 */
- /* Conditional IE:s */
- /* SGSN number SGSN number 18.4.22 C TLV 5-11 */
- if ( check_optional_ie(tvb, offset, BSSAP_SGSN_NUMBER)){
- offset = dissect_bssap_sgsn_number(tvb, bssap_tree, offset);
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
- proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
- }else{
- /* VLR number VLR number 18.4.26 C TLV 5-11 */
- if ( check_optional_ie(tvb, offset, BSSAP_VLR_NUMBER)){
- offset = dissect_bssap_vlr_number(tvb, bssap_tree, offset);
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
- proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
- }
- }
- proto_tree_add_text(tree, tvb, offset, -1, "Conditional IE");
- break;
- case BSSAP_RESET_ACK: /* 17.1.20 */
- /* Conditional IE:s */
- /* SGSN number SGSN number 18.4.22 C TLV 5-11 */
- if ( check_optional_ie(tvb, offset, BSSAP_SGSN_NUMBER)){
- offset = dissect_bssap_sgsn_number(tvb, bssap_tree, offset);
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
- proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
- }else{
- /* VLR number VLR number 18.4.26 C TLV 5-11 */
- if ( check_optional_ie(tvb, offset, BSSAP_VLR_NUMBER)){
- offset = dissect_bssap_vlr_number(tvb, bssap_tree, offset);
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
- proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
- }
- }
- proto_tree_add_text(tree, tvb, offset, -1, "Conditional IE");
- break;
- case BSSAP_MS_INFORMATION_REQUEST: /* 17.1.15 */
- /* IMSI IMSI 18.4.10 M TLV 6-10 */
- if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
- offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
-
- /* Information requested Information requested 18.4.13 M TLV 3 */
- if ( check_ie(tvb, tree, &offset, BSSAP_INFO_REQ))
- offset = dissect_bssap_info_req(tvb, bssap_tree, offset);
-
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
-
- proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
- break;
- case BSSAP_MS_INFORMATION_RESPONSE: /* 17.1.16 */
- /* IMSI IMSI 18.4.10 M TLV 6-10 */
- if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
- offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
-
- /* TMSI TMSI 18.4.23 O TLV 6 */
- if ( check_optional_ie(tvb, offset, BSSAP_TMSI))
- offset = dissect_bssap_tmsi(tvb, bssap_tree, offset);
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
-
- /* PTMSI PTMSI 18.4.20 O TLV 6 BSSAP_PTMSI*/
- if ( check_optional_ie(tvb, offset, BSSAP_PTMSI))
- offset = dissect_bssap_ptmsi(tvb, bssap_tree, offset);
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
-
- /* IMEI IMEI 18.4.8 O TLV 10 */
- if ( check_optional_ie(tvb, offset, BSSAP_IMEI))
- offset = dissect_bssap_imei(tvb, bssap_tree, offset);
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
- /* IMEISV IMEISV 18.4.9 O TLV 10 BSSAP_IMEISV*/
- if ( check_optional_ie(tvb, offset, BSSAP_IMEISV))
- offset = dissect_bssap_imesiv(tvb, bssap_tree, offset);
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
-
- /* Cell global identity Cell global identity 18.4.1 O TLV 10 */
- if ( check_optional_ie(tvb, offset, BSSAP_CELL_GBL_ID))
- offset = dissect_bssap_cell_global_id(tvb, bssap_tree, offset);
-
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
- /* Location information age Location information age 18.4.15 O TLV 4 */
- if ( check_optional_ie(tvb, offset, BSSAP_LOC_INF_AGE))
- offset = dissect_bssap_location_information_age(tvb, bssap_tree, offset);
-
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
-
- /* Mobile station state Mobile station state 18.4.19 O TLV 3 */
- if ( check_optional_ie(tvb, offset, BSSAP_MOBILE_STN_STATE))
- offset = dissect_bssap_mobile_station_state(tvb, bssap_tree, offset);
-
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
-
- /* Service area identification Service area identification 18.4.21b O TLV 9 */
- if ( check_optional_ie(tvb, offset, BSSAP_SERVICE_AREA_ID))
- offset = dissect_bssap_service_area_id(tvb, bssap_tree, offset);
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
- proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
- break;
- case BSSAP_MM_INFORMATION_REQUEST: /* 17.1.12 */
- /* IMSI IMSI 18.4.10 M TLV 6-10 */
- if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
- offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
-
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
- /* MM information MM information 18.4.16 O TLV 3-n */
- if ( check_optional_ie(tvb, offset, BSSAP_MM_INFORMATION))
- offset = dissect_bssap_MM_information(tvb, bssap_tree, offset);
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
- proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
- break;
- case BSSAP_MOBILE_STATUS: /* 17.1.13 */
- /* IMSI IMSI 18.4.10 O TLV 6-10 */
- if ( check_optional_ie(tvb, offset, BSSAP_MM_INFORMATION))
- offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
- /* Gs Cause Gs Cause 18.4.7 M TLV 3 */
- if ( check_ie(tvb, tree, &offset, BSSAP_GS_CAUSE))
- offset = dissect_bssap_Gs_cause(tvb, bssap_tree, offset);
-
- /* Erroneous message Erroneous message 18.4.5 M TLV 3-n BSSAP_ERRONEOUS_MSG*/
- if ( check_ie(tvb, tree, &offset, BSSAP_ERRONEOUS_MSG))
- offset = dissect_bssap_gprs_erroneous_msg(tvb, bssap_tree, offset);
-
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
- proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
- break;
- case BSSAP_MS_UNREACHABLE: /* 17.1.17 */
- /* IMSI IMSI 18.4.10 M TLV 6-10 */
- if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
- offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
-
- /* Gs Cause Gs Cause 18.4.7 M TLV 3 */
- if ( check_ie(tvb, tree, &offset, BSSAP_GS_CAUSE))
- offset = dissect_bssap_Gs_cause(tvb, bssap_tree, offset);
-
- if (tvb_length_remaining(tvb,offset) == 0)
- return;
- proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
- break;
- default:
- break;
- }
+ message_type = tvb_get_guint8(tvb,offset);
+ proto_tree_add_item(bssap_tree, hf_bssap_plus_message_type, tvb, offset, 1,FALSE);
+ offset++;
+
+ if (check_col(pinfo->cinfo, COL_INFO)){
+ col_add_str(pinfo->cinfo,COL_INFO, val_to_str(message_type,bssap_plus_message_type_values,"Unknown %u"));
+ }
+
+ switch(message_type){
+ case BSSAP_PAGING_REQUEST:
+ /* IMSI IMSI 18.4.10 M TLV 6-10 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
+ offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
+
+ /* VLR number VLR number 18.4.26 M TLV 5-11 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_VLR_NUMBER))
+ offset = dissect_bssap_vlr_number(tvb, bssap_tree, offset);
+
+ /* End of mandatory elements */
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+
+ /* TMSI TMSI 18.4.23 O TLV 6 */
+ if ( check_optional_ie(tvb, offset, BSSAP_TMSI))
+ offset = dissect_bssap_tmsi(tvb, bssap_tree, offset);
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+
+ /* Location area identifier Location area identifier 18.4.14 O TLV 7 */
+ if ( check_optional_ie(tvb, offset, BSSAP_LOC_AREA_ID))
+ offset = dissect_bssap_loc_area_id(tvb, bssap_tree, offset);
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+
+ /* Channel needed Channel needed 18.4.2 O TLV 3 */
+ if ( check_optional_ie(tvb, offset, BSSAP_CHANNEL_NEEDED))
+ offset = dissect_bssap_channel_needed(tvb, bssap_tree, offset);
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+
+ /* eMLPP Priority eMLPP Priority 18.4.4 O TLV 3 */
+ if ( check_optional_ie(tvb, offset, BSSAP_EMLPP_PRIORITY))
+ offset = dissect_bssap_emlpp_priority(tvb, bssap_tree, offset);
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+
+ /* Global CN-Id Global CN-Id 18.4.27 O TLV 7 */
+ if ( check_optional_ie(tvb, offset, BSSAP_GLOBAL_CN_ID))
+ offset = dissect_bssap_global_cn_id(tvb, pinfo, bssap_tree, offset);
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+
+ proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
+ break;
+ case BSSAP_PAGING_REJECT: /* 17.1.18 */
+ /* IMSI IMSI 18.4.10 M TLV 6-10 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
+ offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
+ /* Gs Cause Gs Cause 18.4.7 M TLV 3 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_GS_CAUSE))
+ offset = dissect_bssap_Gs_cause(tvb, bssap_tree, offset);
+
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+ proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
+ break;
+ case BSSAP_DOWNLINK_TUNNEL_REQUEST: /* 17.1.4 */
+ /* IMSI IMSI 18.4.10 M TLV 6-10 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
+ offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
+
+ /* VLR number VLR number 18.4.26 M TLV 5-11 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_VLR_NUMBER))
+ offset = dissect_bssap_vlr_number(tvb, bssap_tree, offset);
+
+ /* Downlink Tunnel Payload Control and Info 18.4.3 M TLV 3-223 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_DLINK_TNL_PLD_CTR_AND_INF))
+ offset = dissect_bssap_dlink_tunnel_payload_control_and_info(tvb, pinfo, bssap_tree, offset);
+
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+ proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
+ break;
+ case BSSAP_UPLINK_TUNNEL_REQUEST: /* 17.1.23 */
+ /* SGSN number 18.4.22 M TLV 5-11 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_SGSN_NUMBER))
+ offset = dissect_bssap_sgsn_number(tvb, bssap_tree, offset);
+
+ /* Uplink Tunnel Payload Control and Info 18.4.25 M TLV 3-223 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_ULINK_TNL_PLD_CTR_AND_INF))
+ offset = dissect_bssap_ulink_tunnel_payload_control_and_info(tvb, pinfo, bssap_tree, offset);
+
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+ proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
+ break;
+ case BSSAP_LOCATION_UPDATE_REQUEST: /* 17.1.11 BSSAP+-LOCATION-UPDATE-REQUEST */
+ /* IMSI IMSI 18.4.10 M TLV 6-10 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
+ offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
+
+ /* SGSN number SGSN number 18.4.22 M TLV 5-11 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_SGSN_NUMBER))
+ offset = dissect_bssap_sgsn_number(tvb, bssap_tree, offset);
+
+ /* Update type GPRS location update type 18.4.6 M TLV 3 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_GPRS_LOC_UPD_TYPE))
+ offset = dissect_bssap_gprs_location_update_type(tvb, bssap_tree, offset);
+
+ /* New Cell global identity Cell global identity 18.4.1 M TLV 10 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_CELL_GBL_ID))
+ offset = dissect_bssap_cell_global_id(tvb, bssap_tree, offset);
+
+ /* Mobile station classmark Mobile station classmark 1 18.4.18 M TLV 3 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_MOBILE_STN_CLS_MRK1))
+ offset = dissect_bssap_mobile_stn_cls_mrk1(tvb, bssap_tree, offset);
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+
+ /* Old location area identifier Location area identifier 18.4.14 O TLV 7 */
+ if ( check_optional_ie(tvb, offset, BSSAP_LOC_AREA_ID))
+ offset = dissect_bssap_loc_area_id(tvb, bssap_tree, offset);
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+
+ /* TMSI status TMSI status 18.4.24 O TLV 3 */
+ if ( check_optional_ie(tvb, offset, BSSAP_TMSI_STATUS))
+ offset = dissect_bssap_tmsi_status(tvb, bssap_tree, offset);
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+
+ /* New service area identification Service area identification 18.4.21b O TLV 9 */
+ if ( check_optional_ie(tvb, offset, BSSAP_SERVICE_AREA_ID))
+ offset = dissect_bssap_service_area_id(tvb, bssap_tree, offset);
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+
+ /* IMEISV IMEISV 18.4.9 O TLV 10 */
+ if ( check_optional_ie(tvb, offset, BSSAP_IMEISV))
+ offset = dissect_bssap_imesiv(tvb, bssap_tree, offset);
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+ proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
+ break;
+ case BSSAP_LOCATION_UPDATE_ACCEPT: /* 17.1.9 */
+ /* IMSI 18.4.10 M TLV 6-10 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
+ offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
+
+ /* Location area identifier Location area identifier 18.4.14 M TLV 7 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_LOC_AREA_ID))
+ offset = dissect_bssap_loc_area_id(tvb, bssap_tree, offset);
+
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+
+ /* New TMSI, or IMSI Mobile identity 18.4.17 O TLV 6-10 */
+ if ( check_optional_ie(tvb, offset, BSSAP_MOBILE_ID))
+ offset = dissect_bssap_mobile_id(tvb, bssap_tree, offset);
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+ proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
+ break;
+ case BSSAP_LOCATION_UPDATE_REJECT: /* 17.1.10 */
+ /* IMSI IMSI 18.4.10 M TLV 6-10 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
+ offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
+ /* Reject cause Reject cause 18.4.21 M TLV 3 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_REJECT_CAUSE))
+ offset = dissect_bssap_reject_cause(tvb, bssap_tree, offset);
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+ proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
+ break;
+ case BSSAP_TMSI_REALLOCATION_COMPLETE: /* 17.1.22 */
+ /* IMSI IMSI 18.4.10 M TLV 6-10 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
+ offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
+
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+
+ /* Cell global identity Cell global identity 18.4.1 O TLV 10 */
+ if ( check_optional_ie(tvb, offset, BSSAP_CELL_GBL_ID))
+ offset = dissect_bssap_cell_global_id(tvb, bssap_tree, offset);
+
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+
+ /* Service area identification Service area identification 18.4.21b O TLV 9 */
+ if ( check_optional_ie(tvb, offset, BSSAP_SERVICE_AREA_ID))
+ offset = dissect_bssap_service_area_id(tvb, bssap_tree, offset);
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+ proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
+ break;
+ case BSSAP_ALERT_REQUEST: /* 17.1.3 */
+ /* IMSI IMSI 18.4.10 M TLV 6-10 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
+ offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
+
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+ proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
+ break;
+ case BSSAP_ALERT_ACK: /* 17.1.1 */
+ /* IMSI IMSI 18.4.10 M TLV 6-10 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
+ offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
+
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+ proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
+ break;
+ case BSSAP_ALERT_REJECT: /* 17.1.2 */
+ /* IMSI IMSI 18.4.10 M TLV 6-10 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
+ offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
+
+ /* Gs Cause Gs Cause 18.4.7 M TLV 3 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_GS_CAUSE))
+ offset = dissect_bssap_Gs_cause(tvb, bssap_tree, offset);
+
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+ proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
+ break;
+ case BSSAP_MS_ACTIVITY_INDICATION: /* 17.1.14 */
+ /* IMSI IMSI 18.4.10 M TLV 6-10 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
+ offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
+
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+
+ /* Cell global identity Cell global identity 18.4.1 O TLV 10 */
+ if ( check_optional_ie(tvb, offset, BSSAP_CELL_GBL_ID))
+ offset = dissect_bssap_cell_global_id(tvb, bssap_tree, offset);
+
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+
+ /* Service area identification Service area identification 18.4.21b O TLV 9 */
+ if ( check_optional_ie(tvb, offset, BSSAP_SERVICE_AREA_ID))
+ offset = dissect_bssap_service_area_id(tvb, bssap_tree, offset);
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+ proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
+ break;
+ case BSSAP_GPRS_DETACH_INDICATION: /* 17.1.6 */
+ /* IMSI IMSI 18.4.10 M TLV 6-10 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
+ offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
+
+ /* SGSN number SGSN number 18.4.22 M TLV 5-11 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_SGSN_NUMBER))
+ offset = dissect_bssap_sgsn_number(tvb, bssap_tree, offset);
+
+ /* IMSI detach from GPRS service type IMSI detach from GPRS service type 18.4.17 M TLV 3 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_IMSI_DET_FROM_GPRS_SERV_TYPE))
+ offset = dissect_bssap_imsi_det_from_gprs_serv_type(tvb, bssap_tree, offset);
+
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+
+ /* Cell global identity Cell global identity 18.4.1 O TLV 10 */
+ if ( check_optional_ie(tvb, offset, BSSAP_CELL_GBL_ID))
+ offset = dissect_bssap_cell_global_id(tvb, bssap_tree, offset);
+
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+
+ /* Service area identification Service area identification 18.4.21b O TLV 9 */
+ if ( check_optional_ie(tvb, offset, BSSAP_SERVICE_AREA_ID))
+ offset = dissect_bssap_service_area_id(tvb, bssap_tree, offset);
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+ proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
+ break;
+ case BSSAP_GPRS_DETACH_ACK: /* 17.1.5 */
+ /* IMSI IMSI 18.4.10 M TLV 6-10 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
+ offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
+
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+ proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
+ break;
+ case BSSAP_IMSI_DETACH_INDICATION: /* 17.1.8 */
+ /* IMSI IMSI 18.4.10 M TLV 6-10 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
+ offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
+
+ /* SGSN number SGSN number 18.4.22 M TLV 5-11 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_SGSN_NUMBER))
+ offset = dissect_bssap_sgsn_number(tvb, bssap_tree, offset);
+
+ /* Detach type IMSI detach from non-GPRS service type 18.4.11 M TLV 3 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_IMSI_DET_FROM_NON_GPRS_SERV_TYPE))
+ offset = dissect_bssap_imsi_det_from_non_gprs_serv_type(tvb, bssap_tree, offset);
+
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+
+ /* Cell global identity Cell global identity 18.4.1 O TLV 10 */
+ if ( check_optional_ie(tvb, offset, BSSAP_CELL_GBL_ID))
+ offset = dissect_bssap_cell_global_id(tvb, bssap_tree, offset);
+
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+
+ /* Location information age Location information age 18.4.14 O TLV 4 */
+ if ( check_optional_ie(tvb, offset, BSSAP_LOC_INF_AGE))
+ offset = dissect_bssap_location_information_age(tvb, bssap_tree, offset);
+
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+
+ /* Service area identification Service area identification 18.4.21b O TLV 9 */
+ if ( check_optional_ie(tvb, offset, BSSAP_SERVICE_AREA_ID))
+ offset = dissect_bssap_service_area_id(tvb, bssap_tree, offset);
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+ proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
+ break;
+ case BSSAP_IMSI_DETACH_ACK: /* 17.1.7 */
+ /* IMSI IMSI 18.4.10 M TLV 6-10 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
+ offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
+
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+ proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
+ break;
+ case BSSAP_RESET_INDICATION: /* 17.1.21 */
+ /* Conditional IE:s */
+ /* SGSN number SGSN number 18.4.22 C TLV 5-11 */
+ if ( check_optional_ie(tvb, offset, BSSAP_SGSN_NUMBER)){
+ offset = dissect_bssap_sgsn_number(tvb, bssap_tree, offset);
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+ proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
+ }else{
+ /* VLR number VLR number 18.4.26 C TLV 5-11 */
+ if ( check_optional_ie(tvb, offset, BSSAP_VLR_NUMBER)){
+ offset = dissect_bssap_vlr_number(tvb, bssap_tree, offset);
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+ proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
+ }
+ }
+ proto_tree_add_text(tree, tvb, offset, -1, "Conditional IE");
+ break;
+ case BSSAP_RESET_ACK: /* 17.1.20 */
+ /* Conditional IE:s */
+ /* SGSN number SGSN number 18.4.22 C TLV 5-11 */
+ if ( check_optional_ie(tvb, offset, BSSAP_SGSN_NUMBER)){
+ offset = dissect_bssap_sgsn_number(tvb, bssap_tree, offset);
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+ proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
+ }else{
+ /* VLR number VLR number 18.4.26 C TLV 5-11 */
+ if ( check_optional_ie(tvb, offset, BSSAP_VLR_NUMBER)){
+ offset = dissect_bssap_vlr_number(tvb, bssap_tree, offset);
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+ proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
+ }
+ }
+ proto_tree_add_text(tree, tvb, offset, -1, "Conditional IE");
+ break;
+ case BSSAP_MS_INFORMATION_REQUEST: /* 17.1.15 */
+ /* IMSI IMSI 18.4.10 M TLV 6-10 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
+ offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
+
+ /* Information requested Information requested 18.4.13 M TLV 3 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_INFO_REQ))
+ offset = dissect_bssap_info_req(tvb, bssap_tree, offset);
+
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+
+ proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
+ break;
+ case BSSAP_MS_INFORMATION_RESPONSE: /* 17.1.16 */
+ /* IMSI IMSI 18.4.10 M TLV 6-10 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
+ offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+
+ /* TMSI TMSI 18.4.23 O TLV 6 */
+ if ( check_optional_ie(tvb, offset, BSSAP_TMSI))
+ offset = dissect_bssap_tmsi(tvb, bssap_tree, offset);
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+
+ /* PTMSI PTMSI 18.4.20 O TLV 6 BSSAP_PTMSI*/
+ if ( check_optional_ie(tvb, offset, BSSAP_PTMSI))
+ offset = dissect_bssap_ptmsi(tvb, bssap_tree, offset);
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+
+ /* IMEI IMEI 18.4.8 O TLV 10 */
+ if ( check_optional_ie(tvb, offset, BSSAP_IMEI))
+ offset = dissect_bssap_imei(tvb, bssap_tree, offset);
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+ /* IMEISV IMEISV 18.4.9 O TLV 10 BSSAP_IMEISV*/
+ if ( check_optional_ie(tvb, offset, BSSAP_IMEISV))
+ offset = dissect_bssap_imesiv(tvb, bssap_tree, offset);
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+
+ /* Cell global identity Cell global identity 18.4.1 O TLV 10 */
+ if ( check_optional_ie(tvb, offset, BSSAP_CELL_GBL_ID))
+ offset = dissect_bssap_cell_global_id(tvb, bssap_tree, offset);
+
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+ /* Location information age Location information age 18.4.15 O TLV 4 */
+ if ( check_optional_ie(tvb, offset, BSSAP_LOC_INF_AGE))
+ offset = dissect_bssap_location_information_age(tvb, bssap_tree, offset);
+
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+
+ /* Mobile station state Mobile station state 18.4.19 O TLV 3 */
+ if ( check_optional_ie(tvb, offset, BSSAP_MOBILE_STN_STATE))
+ offset = dissect_bssap_mobile_station_state(tvb, bssap_tree, offset);
+
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+
+ /* Service area identification Service area identification 18.4.21b O TLV 9 */
+ if ( check_optional_ie(tvb, offset, BSSAP_SERVICE_AREA_ID))
+ offset = dissect_bssap_service_area_id(tvb, bssap_tree, offset);
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+ proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
+ break;
+ case BSSAP_MM_INFORMATION_REQUEST: /* 17.1.12 */
+ /* IMSI IMSI 18.4.10 M TLV 6-10 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
+ offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
+
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+ /* MM information MM information 18.4.16 O TLV 3-n */
+ if ( check_optional_ie(tvb, offset, BSSAP_MM_INFORMATION))
+ offset = dissect_bssap_MM_information(tvb, bssap_tree, offset);
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+ proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
+ break;
+ case BSSAP_MOBILE_STATUS: /* 17.1.13 */
+ /* IMSI IMSI 18.4.10 O TLV 6-10 */
+ if ( check_optional_ie(tvb, offset, BSSAP_MM_INFORMATION))
+ offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
+ /* Gs Cause Gs Cause 18.4.7 M TLV 3 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_GS_CAUSE))
+ offset = dissect_bssap_Gs_cause(tvb, bssap_tree, offset);
+
+ /* Erroneous message Erroneous message 18.4.5 M TLV 3-n BSSAP_ERRONEOUS_MSG*/
+ if ( check_ie(tvb, tree, &offset, BSSAP_ERRONEOUS_MSG))
+ offset = dissect_bssap_gprs_erroneous_msg(tvb, bssap_tree, offset);
+
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+ proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
+ break;
+ case BSSAP_MS_UNREACHABLE: /* 17.1.17 */
+ /* IMSI IMSI 18.4.10 M TLV 6-10 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_IMSI))
+ offset = dissect_bssap_imsi(tvb, bssap_tree, offset);
+
+ /* Gs Cause Gs Cause 18.4.7 M TLV 3 */
+ if ( check_ie(tvb, tree, &offset, BSSAP_GS_CAUSE))
+ offset = dissect_bssap_Gs_cause(tvb, bssap_tree, offset);
+
+ if (tvb_length_remaining(tvb,offset) == 0)
+ return;
+ proto_tree_add_text(tree, tvb, offset, -1, "Extraneous data");
+ break;
+ default:
+ break;
+ }
}
static gboolean
dissect_bssap_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
- /* Is it a BSSAP/BSAP packet?
- * If octet_1 == 0x00 and octet_2 == length(tvb) - 2
- * or if octet_1 == 0x01 and octet_3 == length(tvb) - 3
- * then we'll assume it is a bssap packet
- * If octet_1 == 0x00 a further check is done
- * to differentiate a BSSMAP BLOCK message from a
- * RANAP DirectTransfer (under certain conditions)
- */
- switch (tvb_get_guint8(tvb, 0))
- {
- case 0x00:
- if (tvb_get_guint8(tvb, 1) != (tvb_length(tvb) - 2)) { return(FALSE); }
- if (tvb_get_guint8(tvb, 2) == 0x40 && tvb_get_guint8(tvb, 3) != 0x01) {
- return(FALSE); }
- break;
-
- case 0x01:
- if (tvb_get_guint8(tvb, 2) != (tvb_length(tvb) - 3)) { return(FALSE); }
- break;
-
- default:
- return(FALSE);
- }
-
- dissect_bssap(tvb, pinfo, tree);
-
- return(TRUE);
+ /* Is it a BSSAP/BSAP packet?
+ * If octet_1 == 0x00 and octet_2 == length(tvb) - 2
+ * or if octet_1 == 0x01 and octet_3 == length(tvb) - 3
+ * then we'll assume it is a bssap packet
+ * If octet_1 == 0x00 a further check is done
+ * to differentiate a BSSMAP BLOCK message from a
+ * RANAP DirectTransfer (under certain conditions)
+ */
+ switch (tvb_get_guint8(tvb, 0))
+ {
+ case 0x00:
+ if (tvb_get_guint8(tvb, 1) != (tvb_length(tvb) - 2)) { return(FALSE); }
+ if (tvb_get_guint8(tvb, 2) == 0x40 && tvb_get_guint8(tvb, 3) != 0x01) {
+ return(FALSE); }
+ break;
+
+ case 0x01:
+ if (tvb_get_guint8(tvb, 2) != (tvb_length(tvb) - 3)) { return(FALSE); }
+ break;
+
+ default:
+ return(FALSE);
+ }
+
+ dissect_bssap(tvb, pinfo, tree);
+
+ return(TRUE);
}
/* Register the protocol with Wireshark */
void
proto_register_bssap(void)
{
- module_t *bssap_module;
-
- /* Setup list of header fields */
- static hf_register_info hf[] = {
- { &hf_bssap_pdu_type,
- { "Message Type", "bssap.pdu_type",
- FT_UINT8, BASE_HEX, VALS(bssap_pdu_type_values), 0x0,
- NULL, HFILL}},
- { &hf_bsap_pdu_type,
- { "Message Type", "bsap.pdu_type",
- FT_UINT8, BASE_HEX, VALS(bsap_pdu_type_values), 0x0,
- NULL, HFILL}},
- { &hf_bssap_dlci_cc,
- { "Control Channel", "bssap.dlci.cc",
- FT_UINT8, BASE_HEX, VALS(bssap_cc_values), CC_MASK,
- NULL, HFILL}},
- { &hf_bsap_dlci_cc,
- { "Control Channel", "bsap.dlci.cc",
- FT_UINT8, BASE_HEX, VALS(bsap_cc_values), CC_MASK,
- NULL, HFILL}},
- { &hf_bssap_dlci_spare,
- { "Spare", "bssap.dlci.spare",
- FT_UINT8, BASE_HEX, NULL, SPARE_MASK,
- NULL, HFILL}},
- { &hf_bsap_dlci_rsvd,
- { "Reserved", "bsap.dlci.rsvd",
- FT_UINT8, BASE_HEX, NULL, SPARE_MASK,
- NULL, HFILL}},
- { &hf_bssap_dlci_sapi,
- { "SAPI", "bssap.dlci.sapi",
- FT_UINT8, BASE_HEX, VALS(bssap_sapi_values), SAPI_MASK,
- NULL, HFILL}},
- { &hf_bsap_dlci_sapi,
- { "SAPI", "bsap.dlci.sapi",
- FT_UINT8, BASE_HEX, VALS(bsap_sapi_values), SAPI_MASK,
- NULL, HFILL}},
- { &hf_bssap_length,
- { "Length", "bssap.length",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}},
-
- { &hf_bssap_plus_message_type,
- { "Message Type", "bssap_plus.msg_type",
- FT_UINT8, BASE_DEC, VALS(bssap_plus_message_type_values), 0x0,
- NULL, HFILL}},
- { &hf_bssap_plus_ie,
- { "IEI", "bssap_plus.iei",
- FT_UINT8, BASE_DEC, VALS(bssap_plus_ie_id_values), 0x0,
- NULL, HFILL}},
- { &hf_bssap_plus_ie_len,
- { "Length indicator", "bssap_plus.iei",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}},
- { &hf_bssap_extension,
- { "Extension", "bssap.extension",
- FT_BOOLEAN, 8, TFS(&bssap_extension_value), 0x80,
- NULL, HFILL }},
- { &hf_bssap_type_of_number,
- { "Type of number", "bssap.type_of_number",
- FT_UINT8, BASE_HEX, VALS(gsm_a_type_of_number_values), 0x70,
- NULL, HFILL }},
- { &hf_bssap_numbering_plan_id,
- { "Numbering plan identification", "bssap.number_plan",
- FT_UINT8, BASE_HEX, VALS(gsm_a_numbering_plan_id_values), 0x0f,
- NULL, HFILL }},
- { &hf_bssap_sgsn_number,
- { "SGSN number", "bssap.sgsn_number",
- FT_STRING, BASE_NONE, NULL, 0,
- NULL, HFILL }},
- { &hf_bssap_vlr_number,
- { "VLR number", "bssap.vlr_number",
- FT_STRING, BASE_NONE, NULL, 0,
- NULL, HFILL }},
- { &hf_bssap_cell_global_id_ie,
- { "Cell global identity IE", "bssap.cell_global_id_ie",
- FT_NONE, BASE_NONE, NULL, 0,
- NULL, HFILL }},
- { &hf_bssap_channel_needed_ie,
- { "Channel needed IE", "bssap.cell_global_id_ie",
- FT_NONE, BASE_NONE, NULL, 0,
- NULL, HFILL }},
- { &hf_bssap_dlink_tnl_pld_cntrl_amd_inf_ie,
- { "Downlink Tunnel Payload Control and Info IE", "bssap.dlink_tnl_pld_cntrl_amd_inf_ie",
- FT_NONE, BASE_NONE, NULL, 0,
- NULL, HFILL }},
- { &hf_bssap_ulink_tnl_pld_cntrl_amd_inf_ie,
- { "Uplink Tunnel Payload Control and Info IE", "bssap.ulink_tnl_pld_cntrl_amd_inf_ie",
- FT_NONE, BASE_NONE, NULL, 0,
- NULL, HFILL }},
- { &hf_bssap_emlpp_prio_ie,
- { "eMLPP Priority IE", "bssap.emlpp_prio_ie",
- FT_NONE, BASE_NONE, NULL, 0,
- NULL, HFILL }},
- { &hf_bssap_gprs_erroneous_msg_ie,
- { "Erroneous message IE", "bssap.erroneous_msg_ie",
- FT_NONE, BASE_NONE, NULL, 0,
- NULL, HFILL }},
- { &hf_bssap_gprs_loc_upd_type_ie,
- { "GPRS location update type IE", "bssap.loc_upd_type_ie",
- FT_NONE, BASE_NONE, NULL, 0,
- NULL, HFILL }},
- { &hf_bssap_Gs_cause_ie,
- { "Gs Cause IE", "bssap.Gs_cause_ie",
- FT_NONE, BASE_NONE, NULL, 0,
- NULL, HFILL }},
- { &hf_bssap_imei_ie,
- { "IMEI IE", "bssap.imei_ie",
- FT_NONE, BASE_NONE, NULL, 0,
- NULL, HFILL }},
- { &hf_bssap_imesiv_ie,
- { "IMEISV IE", "bssap.imesiv",
- FT_NONE, BASE_NONE, NULL, 0,
- NULL, HFILL }},
- { &hf_bssap_imsi_ie,
- { "IMSI IE", "bssap.imsi_ie",
- FT_NONE, BASE_NONE, NULL, 0,
- NULL, HFILL }},
- { &hf_bssap_imsi_det_from_gprs_serv_type_ie,
- { "IMSI detach from GPRS service type IE", "bssap.msi_det_from_gprs_serv_type_ie",
- FT_NONE, BASE_NONE, NULL, 0,
- NULL, HFILL }},
- { &hf_bssap_imsi_det_from_non_gprs_serv_type_ie,
- { "IMSI detach from non-GPRS service IE", "bssap.msi_det_from_non_gprs_serv_type_ie",
- FT_NONE, BASE_NONE, NULL, 0,
- NULL, HFILL }},
- { &hf_bssap_info_req_ie,
- { "Information requested IE", "bssap.info_req_ie",
- FT_NONE, BASE_NONE, NULL, 0,
- NULL, HFILL }},
- { &hf_bssap_loc_area_id_ie,
- { "Location area identifier IE", "bssap.loc_area_id_ie",
- FT_NONE, BASE_NONE, NULL, 0,
- NULL, HFILL }},
- { &hf_bssap_loc_inf_age_ie,
- { "Location information age IE", "bssap.loc_inf_age_ie",
- FT_NONE, BASE_NONE, NULL, 0,
- NULL, HFILL }},
- { &hf_bssap_mm_information_ie,
- { "MM information IE", "bssap.mm_information",
- FT_NONE, BASE_NONE, NULL, 0,
- NULL, HFILL }},
- { &hf_bssap_mobile_id_ie,
- { "Mobile identity IE", "bssap.mobile_id_ie",
- FT_NONE, BASE_NONE, NULL, 0,
- NULL, HFILL }},
- { &hf_bssap_mobile_stn_cls_mrk1_ie,
- { "Mobile station classmark 1 IE", "bssap.mobile_stn_cls_mrk1_ie",
- FT_NONE, BASE_NONE, NULL, 0,
- NULL, HFILL }},
- { &hf_bssap_mobile_station_state_ie,
- { "Mobile station state IE", "bssap.mobile_station_state_ie",
- FT_NONE, BASE_NONE, NULL, 0,
- NULL, HFILL }},
- { &hf_bssap_ptmsi_ie,
- { "PTMSI IE", "bssap.ptmsi_ie",
- FT_NONE, BASE_NONE, NULL, 0,
- NULL, HFILL }},
- { &hf_bssap_reject_cause_ie,
- { "Reject cause IE", "bssap.reject_cause_ie",
- FT_NONE, BASE_NONE, NULL, 0,
- NULL, HFILL }},
- { &hf_bssap_service_area_id_ie,
- { "Service area identification IE", "bssap.mobile_stn_cls_mrk1_ie",
- FT_NONE, BASE_NONE, NULL, 0,
- "Mobile station classmark 1", HFILL }},
- { &hf_bssap_sgsn_nr_ie,
- { "SGSN number IE", "bssap.imsi_ie",
- FT_NONE, BASE_NONE, NULL, 0,
- NULL, HFILL }},
- { &hf_bssap_tmsi_ie,
- { "TMSI IE", "bssap.tmsi_ie",
- FT_NONE, BASE_NONE, NULL, 0,
- NULL, HFILL }},
- { &hf_bssap_tmsi_status_ie,
- { "TMSI status IE", "bssap.tmsi_status_ie",
- FT_NONE, BASE_NONE, NULL, 0,
- NULL, HFILL }},
- { &hf_bssap_vlr_number_ie,
- { "VLR number IE", "bssap.vlr_number_ie",
- FT_NONE, BASE_NONE, NULL, 0,
- NULL, HFILL }},
- { &hf_bssap_global_cn_id_ie,
- { "Global CN-Id IE", "bssap.global_cn_id_ie",
- FT_NONE, BASE_NONE, NULL, 0,
- NULL, HFILL }},
-
- { &hf_bssap_plus_ie_data,
- { "IE Data", "bssap.ie_data",
- FT_BYTES, BASE_NONE, NULL, 0,
- NULL, HFILL }},
-
- { &hf_bssap_call_priority,
- { "eMLPP Priority", "bssap.gprs_loc_upd_type",
- FT_UINT8, BASE_DEC, VALS(bssap_call_priority_values), 0x07,
- NULL, HFILL}},
- { &hf_bssap_gprs_loc_upd_type,
- { "GPRS location update type", "bssap.gprs_loc_upd_type",
- FT_UINT8, BASE_DEC, VALS(bssap_plus_GPRS_loc_upd_type_values), 0x0,
- NULL, HFILL}},
- { &hf_bssap_Gs_cause,
- { "Gs cause", "bssap.gprs_loc_upd_type",
- FT_UINT8, BASE_DEC, VALS(bssap_Gs_cause_values), 0x0,
- NULL, HFILL}},
- { &hf_bssap_imei,
- { "IMEI", "bssap.imei",
- FT_STRING, BASE_NONE, NULL, 0,
- NULL, HFILL }},
- { &hf_bssap_imeisv,
- { "IMEISV", "bssap.imeisv",
- FT_STRING, BASE_NONE, NULL, 0,
- NULL, HFILL }},
- { &hf_bssap_imsi,
- { "IMSI", "bssap.imsi",
- FT_STRING, BASE_NONE, NULL, 0,
- NULL, HFILL }},
- { &hf_bssap_imsi_det_from_gprs_serv_type,
- { "IMSI detach from GPRS service type", "bssap.imsi_det_from_gprs_serv_type",
- FT_UINT8, BASE_DEC, VALS(bssap_Gs_cause_values), 0x0,
- NULL, HFILL}},
- { &hf_bssap_info_req,
- { "Information requested", "bssap.info_req",
- FT_UINT8, BASE_DEC, VALS(bssap_info_req_values), 0x0,
- NULL, HFILL}},
- { &hf_bssap_loc_inf_age,
- { "AgeOfLocationInformation in minutes", "bssap.loc_inf_age",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL, HFILL}},
- { &hf_bssap_mobile_station_state,
- { "Mobile station state", "bssap.mobile_station_state",
- FT_UINT8, BASE_DEC, VALS(bssap_mobile_station_state_values), 0x0,
- NULL, HFILL}},
- { &hf_bssap_ptmsi,
- { "PTMSI", "bssap.ptmsi",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}},
- { &hf_bssap_tmsi,
- { "TMSI", "bssap.tmsi",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}},
- { &hf_bssap_tmsi_status,
- { "TMSI status", "bssap.tmsi_status",
- FT_BOOLEAN, 8, TFS(&bssap_tmsi_flag), 0x01,
- NULL, HFILL }},
- { &hf_bssap_tom_prot_disc,
- { "TOM Protocol Discriminator", "bssap.Tom_prot_disc",
- FT_UINT8, BASE_DEC, VALS(bssap_tom_prot_disc_values), 0x78,
- NULL, HFILL}},
- { &hf_bssap_e_bit,
- { "E: Cipher Request", "bssap.tmsi_status",
- FT_BOOLEAN, 8, TFS(&bssap_E_flag), 0x04,
- NULL, HFILL }},
- { &hf_bssap_tunnel_prio,
- { "Tunnel Priority", "bssap.tunnel_prio",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}},
- { &hf_bssap_global_cn_id,
- { "Global CN-Id", "bssap.global_cn_id",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}},
- { &hf_bssap_plmn_id,
- { "PLMN-Id", "bssap.plmn_id",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}},
- { &hf_bssap_cn_id,
- { "CN-Id", "bssap.cn_id",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL, HFILL}},
- { &hf_bssap_cell_global_id,
- { "Cell global identity", "bssap.plmn_id",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}},
- };
-
- /* Setup protocol subtree array */
- static gint *ett[] = {
- &ett_bssap,
- &ett_bssap_dlci,
- &ett_bssap_imsi,
- &ett_bssap_imsi_det_from_gprs_serv_type,
- &ett_bssap_imsi_det_from_non_gprs_serv_type,
- &ett_bssap_info_req,
- &ett_bssap_loc_area_id,
- &ett_bssap_loc_inf_age,
- &ett_bssap_mm_information,
- &ett_bssap_mobile_id,
- &ett_bssap_sgsn_nr,
- &ett_bssap_tmsi,
- &ett_bssap_tmsi_status,
- &ett_bssap_vlr_number,
- &ett_bssap_global_cn,
- &ett_bssap_gprs_loc_upd,
- &ett_bassp_Gs_cause,
- &ett_bassp_imei,
- &ett_bassp_imesiv,
- &ett_bssap_cell_global_id,
- &ett_bssap_cgi,
- &ett_bssap_channel_needed,
- &ett_bssap_dlink_tnl_pld_cntrl_amd_inf,
- &ett_bssap_ulink_tnl_pld_cntrl_amd_inf,
- &ett_bssap_emlpp_prio,
- &ett_bssap_erroneous_msg,
- &ett_bssap_mobile_stn_cls_mrk1,
- &ett_bssap_mobile_station_state,
- &ett_bssap_ptmsi,
- &ett_bssap_reject_cause,
- &ett_bssap_service_area_id,
- &ett_bssap_global_cn_id,
- &ett_bssap_plmn,
- };
+ module_t *bssap_module;
+
+ /* Setup list of header fields */
+ static hf_register_info hf[] = {
+ { &hf_bssap_pdu_type,
+ { "Message Type", "bssap.pdu_type",
+ FT_UINT8, BASE_HEX, VALS(bssap_pdu_type_values), 0x0,
+ NULL, HFILL}},
+ { &hf_bsap_pdu_type,
+ { "Message Type", "bsap.pdu_type",
+ FT_UINT8, BASE_HEX, VALS(bsap_pdu_type_values), 0x0,
+ NULL, HFILL}},
+ { &hf_bssap_dlci_cc,
+ { "Control Channel", "bssap.dlci.cc",
+ FT_UINT8, BASE_HEX, VALS(bssap_cc_values), CC_MASK,
+ NULL, HFILL}},
+ { &hf_bsap_dlci_cc,
+ { "Control Channel", "bsap.dlci.cc",
+ FT_UINT8, BASE_HEX, VALS(bsap_cc_values), CC_MASK,
+ NULL, HFILL}},
+ { &hf_bssap_dlci_spare,
+ { "Spare", "bssap.dlci.spare",
+ FT_UINT8, BASE_HEX, NULL, SPARE_MASK,
+ NULL, HFILL}},
+ { &hf_bsap_dlci_rsvd,
+ { "Reserved", "bsap.dlci.rsvd",
+ FT_UINT8, BASE_HEX, NULL, SPARE_MASK,
+ NULL, HFILL}},
+ { &hf_bssap_dlci_sapi,
+ { "SAPI", "bssap.dlci.sapi",
+ FT_UINT8, BASE_HEX, VALS(bssap_sapi_values), SAPI_MASK,
+ NULL, HFILL}},
+ { &hf_bsap_dlci_sapi,
+ { "SAPI", "bsap.dlci.sapi",
+ FT_UINT8, BASE_HEX, VALS(bsap_sapi_values), SAPI_MASK,
+ NULL, HFILL}},
+ { &hf_bssap_length,
+ { "Length", "bssap.length",
+ FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL}},
+
+ { &hf_bssap_plus_message_type,
+ { "Message Type", "bssap_plus.msg_type",
+ FT_UINT8, BASE_DEC, VALS(bssap_plus_message_type_values), 0x0,
+ NULL, HFILL}},
+ { &hf_bssap_plus_ie,
+ { "IEI", "bssap_plus.iei",
+ FT_UINT8, BASE_DEC, VALS(bssap_plus_ie_id_values), 0x0,
+ NULL, HFILL}},
+ { &hf_bssap_plus_ie_len,
+ { "Length indicator", "bssap_plus.iei",
+ FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL}},
+ { &hf_bssap_extension,
+ { "Extension", "bssap.extension",
+ FT_BOOLEAN, 8, TFS(&bssap_extension_value), 0x80,
+ NULL, HFILL }},
+ { &hf_bssap_type_of_number,
+ { "Type of number", "bssap.type_of_number",
+ FT_UINT8, BASE_HEX, VALS(gsm_a_type_of_number_values), 0x70,
+ NULL, HFILL }},
+ { &hf_bssap_numbering_plan_id,
+ { "Numbering plan identification", "bssap.number_plan",
+ FT_UINT8, BASE_HEX, VALS(gsm_a_numbering_plan_id_values), 0x0f,
+ NULL, HFILL }},
+ { &hf_bssap_sgsn_number,
+ { "SGSN number", "bssap.sgsn_number",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_bssap_vlr_number,
+ { "VLR number", "bssap.vlr_number",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_bssap_cell_global_id_ie,
+ { "Cell global identity IE", "bssap.cell_global_id_ie",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_bssap_channel_needed_ie,
+ { "Channel needed IE", "bssap.cell_global_id_ie",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_bssap_dlink_tnl_pld_cntrl_amd_inf_ie,
+ { "Downlink Tunnel Payload Control and Info IE", "bssap.dlink_tnl_pld_cntrl_amd_inf_ie",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_bssap_ulink_tnl_pld_cntrl_amd_inf_ie,
+ { "Uplink Tunnel Payload Control and Info IE", "bssap.ulink_tnl_pld_cntrl_amd_inf_ie",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_bssap_emlpp_prio_ie,
+ { "eMLPP Priority IE", "bssap.emlpp_prio_ie",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_bssap_gprs_erroneous_msg_ie,
+ { "Erroneous message IE", "bssap.erroneous_msg_ie",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_bssap_gprs_loc_upd_type_ie,
+ { "GPRS location update type IE", "bssap.loc_upd_type_ie",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_bssap_Gs_cause_ie,
+ { "Gs Cause IE", "bssap.Gs_cause_ie",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_bssap_imei_ie,
+ { "IMEI IE", "bssap.imei_ie",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_bssap_imesiv_ie,
+ { "IMEISV IE", "bssap.imesiv",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_bssap_imsi_ie,
+ { "IMSI IE", "bssap.imsi_ie",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_bssap_imsi_det_from_gprs_serv_type_ie,
+ { "IMSI detach from GPRS service type IE", "bssap.msi_det_from_gprs_serv_type_ie",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_bssap_imsi_det_from_non_gprs_serv_type_ie,
+ { "IMSI detach from non-GPRS service IE", "bssap.msi_det_from_non_gprs_serv_type_ie",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_bssap_info_req_ie,
+ { "Information requested IE", "bssap.info_req_ie",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_bssap_loc_area_id_ie,
+ { "Location area identifier IE", "bssap.loc_area_id_ie",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_bssap_loc_inf_age_ie,
+ { "Location information age IE", "bssap.loc_inf_age_ie",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_bssap_mm_information_ie,
+ { "MM information IE", "bssap.mm_information",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_bssap_mobile_id_ie,
+ { "Mobile identity IE", "bssap.mobile_id_ie",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_bssap_mobile_stn_cls_mrk1_ie,
+ { "Mobile station classmark 1 IE", "bssap.mobile_stn_cls_mrk1_ie",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_bssap_mobile_station_state_ie,
+ { "Mobile station state IE", "bssap.mobile_station_state_ie",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_bssap_ptmsi_ie,
+ { "PTMSI IE", "bssap.ptmsi_ie",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_bssap_reject_cause_ie,
+ { "Reject cause IE", "bssap.reject_cause_ie",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_bssap_service_area_id_ie,
+ { "Service area identification IE", "bssap.mobile_stn_cls_mrk1_ie",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Mobile station classmark 1", HFILL }},
+ { &hf_bssap_sgsn_nr_ie,
+ { "SGSN number IE", "bssap.imsi_ie",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_bssap_tmsi_ie,
+ { "TMSI IE", "bssap.tmsi_ie",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_bssap_tmsi_status_ie,
+ { "TMSI status IE", "bssap.tmsi_status_ie",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_bssap_vlr_number_ie,
+ { "VLR number IE", "bssap.vlr_number_ie",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_bssap_global_cn_id_ie,
+ { "Global CN-Id IE", "bssap.global_cn_id_ie",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+
+ { &hf_bssap_plus_ie_data,
+ { "IE Data", "bssap.ie_data",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+
+ { &hf_bssap_call_priority,
+ { "eMLPP Priority", "bssap.gprs_loc_upd_type",
+ FT_UINT8, BASE_DEC, VALS(bssap_call_priority_values), 0x07,
+ NULL, HFILL}},
+ { &hf_bssap_gprs_loc_upd_type,
+ { "GPRS location update type", "bssap.gprs_loc_upd_type",
+ FT_UINT8, BASE_DEC, VALS(bssap_plus_GPRS_loc_upd_type_values), 0x0,
+ NULL, HFILL}},
+ { &hf_bssap_Gs_cause,
+ { "Gs cause", "bssap.gprs_loc_upd_type",
+ FT_UINT8, BASE_DEC, VALS(bssap_Gs_cause_values), 0x0,
+ NULL, HFILL}},
+ { &hf_bssap_imei,
+ { "IMEI", "bssap.imei",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_bssap_imeisv,
+ { "IMEISV", "bssap.imeisv",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_bssap_imsi,
+ { "IMSI", "bssap.imsi",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_bssap_imsi_det_from_gprs_serv_type,
+ { "IMSI detach from GPRS service type", "bssap.imsi_det_from_gprs_serv_type",
+ FT_UINT8, BASE_DEC, VALS(bssap_Gs_cause_values), 0x0,
+ NULL, HFILL}},
+ { &hf_bssap_info_req,
+ { "Information requested", "bssap.info_req",
+ FT_UINT8, BASE_DEC, VALS(bssap_info_req_values), 0x0,
+ NULL, HFILL}},
+ { &hf_bssap_loc_inf_age,
+ { "AgeOfLocationInformation in minutes", "bssap.loc_inf_age",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ NULL, HFILL}},
+ { &hf_bssap_mobile_station_state,
+ { "Mobile station state", "bssap.mobile_station_state",
+ FT_UINT8, BASE_DEC, VALS(bssap_mobile_station_state_values), 0x0,
+ NULL, HFILL}},
+ { &hf_bssap_ptmsi,
+ { "PTMSI", "bssap.ptmsi",
+ FT_BYTES, BASE_NONE, NULL, 0x0,
+ NULL, HFILL}},
+ { &hf_bssap_tmsi,
+ { "TMSI", "bssap.tmsi",
+ FT_BYTES, BASE_NONE, NULL, 0x0,
+ NULL, HFILL}},
+ { &hf_bssap_tmsi_status,
+ { "TMSI status", "bssap.tmsi_status",
+ FT_BOOLEAN, 8, TFS(&bssap_tmsi_flag), 0x01,
+ NULL, HFILL }},
+ { &hf_bssap_tom_prot_disc,
+ { "TOM Protocol Discriminator", "bssap.Tom_prot_disc",
+ FT_UINT8, BASE_DEC, VALS(bssap_tom_prot_disc_values), 0x78,
+ NULL, HFILL}},
+ { &hf_bssap_e_bit,
+ { "E: Cipher Request", "bssap.tmsi_status",
+ FT_BOOLEAN, 8, TFS(&bssap_E_flag), 0x04,
+ NULL, HFILL }},
+ { &hf_bssap_tunnel_prio,
+ { "Tunnel Priority", "bssap.tunnel_prio",
+ FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL}},
+ { &hf_bssap_global_cn_id,
+ { "Global CN-Id", "bssap.global_cn_id",
+ FT_BYTES, BASE_NONE, NULL, 0x0,
+ NULL, HFILL}},
+ { &hf_bssap_plmn_id,
+ { "PLMN-Id", "bssap.plmn_id",
+ FT_BYTES, BASE_NONE, NULL, 0x0,
+ NULL, HFILL}},
+ { &hf_bssap_cn_id,
+ { "CN-Id", "bssap.cn_id",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ NULL, HFILL}},
+ { &hf_bssap_cell_global_id,
+ { "Cell global identity", "bssap.plmn_id",
+ FT_BYTES, BASE_NONE, NULL, 0x0,
+ NULL, HFILL}},
+ };
+
+ /* Setup protocol subtree array */
+ static gint *ett[] = {
+ &ett_bssap,
+ &ett_bssap_dlci,
+ &ett_bssap_imsi,
+ &ett_bssap_imsi_det_from_gprs_serv_type,
+ &ett_bssap_imsi_det_from_non_gprs_serv_type,
+ &ett_bssap_info_req,
+ &ett_bssap_loc_area_id,
+ &ett_bssap_loc_inf_age,
+ &ett_bssap_mm_information,
+ &ett_bssap_mobile_id,
+ &ett_bssap_sgsn_nr,
+ &ett_bssap_tmsi,
+ &ett_bssap_tmsi_status,
+ &ett_bssap_vlr_number,
+ &ett_bssap_global_cn,
+ &ett_bssap_gprs_loc_upd,
+ &ett_bassp_Gs_cause,
+ &ett_bassp_imei,
+ &ett_bassp_imesiv,
+ &ett_bssap_cell_global_id,
+ &ett_bssap_cgi,
+ &ett_bssap_channel_needed,
+ &ett_bssap_dlink_tnl_pld_cntrl_amd_inf,
+ &ett_bssap_ulink_tnl_pld_cntrl_amd_inf,
+ &ett_bssap_emlpp_prio,
+ &ett_bssap_erroneous_msg,
+ &ett_bssap_mobile_stn_cls_mrk1,
+ &ett_bssap_mobile_station_state,
+ &ett_bssap_ptmsi,
+ &ett_bssap_reject_cause,
+ &ett_bssap_service_area_id,
+ &ett_bssap_global_cn_id,
+ &ett_bssap_plmn,
+ };
static enum_val_t gsm_or_lb_interface_options[] = {
- { "gsm a", "GSM A", GSM_INTERFACE },
- { "lb", "Lb", LB_INTERFACE },
- { NULL, NULL, 0 }
+ { "gsm a", "GSM A", GSM_INTERFACE },
+ { "lb", "Lb", LB_INTERFACE },
+ { NULL, NULL, 0 }
};
- static enum_val_t bssap_or_bsap_options[] = {
- { "bssap", "BSSAP", BSSAP },
- { "bsap", "BSAP", BSAP },
- { NULL, NULL, 0 }
- };
+ static enum_val_t bssap_or_bsap_options[] = {
+ { "bssap", "BSSAP", BSSAP },
+ { "bsap", "BSAP", BSAP },
+ { NULL, NULL, 0 }
+ };
- /* Register the protocol name and description */
- proto_bssap = proto_register_protocol("BSSAP/BSAP", "BSSAP", "bssap");
- /*proto_bssap_plus = proto_register_protocol("BSSAP2", "BSSAP2", "bssap2");*/
+ /* Register the protocol name and description */
+ proto_bssap = proto_register_protocol("BSSAP/BSAP", "BSSAP", "bssap");
+ /*proto_bssap_plus = proto_register_protocol("BSSAP2", "BSSAP2", "bssap2");*/
- register_dissector("bssap", dissect_bssap, proto_bssap);
+ register_dissector("bssap", dissect_bssap, proto_bssap);
- /* Required function calls to register the header fields and subtrees used */
- proto_register_field_array(proto_bssap, hf, array_length(hf));
- proto_register_subtree_array(ett, array_length(ett));
+ /* Required function calls to register the header fields and subtrees used */
+ proto_register_field_array(proto_bssap, hf, array_length(hf));
+ proto_register_subtree_array(ett, array_length(ett));
- bssap_module = prefs_register_protocol(proto_bssap, proto_reg_handoff_bssap);
+ bssap_module = prefs_register_protocol(proto_bssap, proto_reg_handoff_bssap);
- prefs_register_enum_preference(bssap_module,
- "bsap_or_bssap",
- "Identify to sub-dissector as",
- "For the sake of sub-dissectors registering to accept data "
- "from the BSSAP/BSAP dissector, this defines whether it is "
- "identified as BSSAP or BSAP.",
- &bssap_or_bsap_global,
- bssap_or_bsap_options,
- FALSE);
+ prefs_register_enum_preference(bssap_module,
+ "bsap_or_bssap",
+ "Identify to sub-dissector as",
+ "For the sake of sub-dissectors registering to accept data "
+ "from the BSSAP/BSAP dissector, this defines whether it is "
+ "identified as BSSAP or BSAP.",
+ &bssap_or_bsap_global,
+ bssap_or_bsap_options,
+ FALSE);
- prefs_register_enum_preference(bssap_module,
+ prefs_register_enum_preference(bssap_module,
"gsm_or_lb_interface",
"Identify the BSSAP interface",
"GSM-A is the interface between the BSC and the MSC. Lb is the interface between the BSC and the SMLC.",
@@ -2538,34 +2538,34 @@ proto_register_bssap(void)
gsm_or_lb_interface_options,
FALSE);
- prefs_register_uint_preference(bssap_module, "ssn",
- "Subsystem number used for BSSAP",
- "Set Subsystem number used for BSSAP/BSSAP+",
- 10, &global_bssap_ssn);
- bssap_dissector_table = register_dissector_table("bssap.pdu_type", "BSSAP Message Type", FT_UINT8, BASE_DEC);
- bsap_dissector_table = register_dissector_table("bsap.pdu_type", "BSAP Message Type", FT_UINT8, BASE_DEC);
+ prefs_register_uint_preference(bssap_module, "ssn",
+ "Subsystem number used for BSSAP",
+ "Set Subsystem number used for BSSAP/BSSAP+",
+ 10, &global_bssap_ssn);
+ bssap_dissector_table = register_dissector_table("bssap.pdu_type", "BSSAP Message Type", FT_UINT8, BASE_DEC);
+ bsap_dissector_table = register_dissector_table("bsap.pdu_type", "BSAP Message Type", FT_UINT8, BASE_DEC);
}
void
proto_reg_handoff_bssap(void)
{
- static gboolean initialized = FALSE;
- static dissector_handle_t bssap_plus_handle;
- static guint old_bssap_ssn;
-
- if (!initialized) {
- heur_dissector_add("sccp", dissect_bssap_heur, proto_bssap);
- heur_dissector_add("sua", dissect_bssap_heur, proto_bssap);
- /* BSSAP+ */
- bssap_plus_handle = create_dissector_handle(dissect_bssap_plus, proto_bssap);
-
- data_handle = find_dissector("data");
- rrlp_handle = find_dissector("rrlp");
- initialized = TRUE;
- } else {
- dissector_delete("sccp.ssn", old_bssap_ssn, bssap_plus_handle);
- }
-
- dissector_add("sccp.ssn", global_bssap_ssn, bssap_plus_handle);
- old_bssap_ssn = global_bssap_ssn;
+ static gboolean initialized = FALSE;
+ static dissector_handle_t bssap_plus_handle;
+ static guint old_bssap_ssn;
+
+ if (!initialized) {
+ heur_dissector_add("sccp", dissect_bssap_heur, proto_bssap);
+ heur_dissector_add("sua", dissect_bssap_heur, proto_bssap);
+ /* BSSAP+ */
+ bssap_plus_handle = create_dissector_handle(dissect_bssap_plus, proto_bssap);
+
+ data_handle = find_dissector("data");
+ rrlp_handle = find_dissector("rrlp");
+ initialized = TRUE;
+ } else {
+ dissector_delete("sccp.ssn", old_bssap_ssn, bssap_plus_handle);
+ }
+
+ dissector_add("sccp.ssn", global_bssap_ssn, bssap_plus_handle);
+ old_bssap_ssn = global_bssap_ssn;
}