aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2011-03-04 12:57:55 +0000
committerAnders Broman <anders.broman@ericsson.com>2011-03-04 12:57:55 +0000
commit7e17176c3943cc048e30028a3d8d2868e5e6670b (patch)
tree4eecb889fed5d37c4f977e2bc58f800ab9bc6b07 /epan/dissectors
parenteec3e7082146ecd592cd9d7eee7b06f12a80f0fb (diff)
All messages converted to the "GSM style" dissection.
svn path=/trunk/; revision=36137
Diffstat (limited to 'epan/dissectors')
-rw-r--r--epan/dissectors/packet-bssgp.c769
1 files changed, 681 insertions, 88 deletions
diff --git a/epan/dissectors/packet-bssgp.c b/epan/dissectors/packet-bssgp.c
index 6e017a0c4c..cadc0315ae 100644
--- a/epan/dissectors/packet-bssgp.c
+++ b/epan/dissectors/packet-bssgp.c
@@ -40,6 +40,7 @@
#include "packet-bssgp.h"
#include "packet-e212.h"
#include "packet-gsm_a_common.h"
+#include "packet-ranap.h"
#include "packet-rrc.h"
#include "packet-lte-rrc.h"
#include "packet-s1ap.h"
@@ -105,6 +106,11 @@ static int hf_bssgp_llc_frames_disc = -1;
static int hf_bssgp_ra_discriminator = -1;
static int hf_bssgp_rim_app_id = -1;
static int hf_bssgp_rim_seq_no = -1;
+static int hf_bssgp_rat_discriminator = -1;
+static int hf_bssgp_nacc_cause = -1;
+static int hf_bssgp_s13_cause = -1;
+static int hf_bssgp_mbms_data_ch_cause = -1;
+static int hf_bssgp_utra_si_cause = -1;
static int hf_bssgp_num_si_psi = -1;
static int hf_bssgp_si_psi_type = -1;
static int hf_bssgp_ran_inf_req_pdu_t_ext_c = -1;
@@ -180,6 +186,8 @@ static int hf_bssgp_sub_prof_id_f_rat_freq_prio = -1;
static int hf_bssgp_rel_int_rat_ho_inf_ind = -1;
static int hf_bssgp_csg_id = -1;
static int hf_bssgp_cell_acc_mode = -1;
+static int hf_bssgp_Global_ENB_ID_PDU = -1;
+static int hf_bssgp_SONtransferRequestContainer_PDU = -1;
/* Initialize the subtree pointers */
static gint ett_bssgp = -1;
@@ -364,6 +372,18 @@ static gint ett_bssgp_list_of_setup_pfcs = -1;
#define BSSGP_PDU_RAN_INFORMATION_ERROR 0x73
#define BSSGP_PDU_RAN_INFORMATION_APP_ERROR 0x74
+#define BSSGP_PDU_RESERVED_0X75 0x75
+#define BSSGP_PDU_RESERVED_0X76 0x76
+#define BSSGP_PDU_RESERVED_0X77 0x77
+#define BSSGP_PDU_RESERVED_0X78 0x78
+#define BSSGP_PDU_RESERVED_0X79 0x79
+#define BSSGP_PDU_RESERVED_0X7A 0x7a
+#define BSSGP_PDU_RESERVED_0X7B 0x7b
+#define BSSGP_PDU_RESERVED_0X7C 0x7c
+#define BSSGP_PDU_RESERVED_0X7D 0x7d
+#define BSSGP_PDU_RESERVED_0X7E 0x7e
+#define BSSGP_PDU_RESERVED_0X7F 0x7f
+
/*
0x80 MBMS-SESSION-START-REQUEST
0x81 MBMS-SESSION-START-RESPONSE
@@ -610,16 +630,23 @@ x86 TAC
#define ELEM_IN_ELEM_OPT_TELV(EOT_iei, EOT_pdu_type, EOT_elem_idx, EOT_elem_name_addition) \
{\
- if ((consumed = elem_telv(tvb, tree, (guint8) EOT_iei, EOT_pdu_type, EOT_elem_idx, curr_offset, curr_len, EOT_elem_name_addition)) > 0) \
- { \
- curr_offset += consumed; \
- curr_len -= consumed; \
+ if (curr_len != 0){\
+ if ((consumed = elem_telv(tvb, tree, (guint8) EOT_iei, EOT_pdu_type, EOT_elem_idx, curr_offset, curr_len, EOT_elem_name_addition)) > 0) \
+ { \
+ curr_offset += consumed; \
+ curr_len -= consumed; \
+ } \
} \
}
/* Forward declarations */
static guint16 de_bssgp_source_BSS_to_target_BSS_transp_cont(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_);
static guint16 de_bssgp_target_BSS_to_source_BSS_transp_cont(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_);
+static guint16 de_bssgp_ran_inf_request_rim_cont(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_);
+static guint16 de_bssgp_ran_inf_rim_cont(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_);
+static guint16 de_bssgp_ran_inf_ack_rim_cont(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_);
+static guint16 de_bssgp_ran_inf_error_rim_cont(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_);
+static guint16 de_bssgp_ran_inf_app_error_rim_cont(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_);
static const value_string tab_nacc_cause[]={
@@ -6514,11 +6541,11 @@ de_bssgp_cell_id(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_,
/*Why doesn't this work? ( add_string will not contain RAI + CI )
* curr_offset = curr_offset + de_cell_id(tvb, tree, curr_offset , 2, add_string, string_len);
*/
- ci = tvb_get_ntohs(tvb, offset);
- proto_tree_add_item(tree, hf_bssgp_ci, tvb, offset, 2, ENC_BIG_ENDIAN);
+ ci = tvb_get_ntohs(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_bssgp_ci, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
curr_offset+=2;
if (add_string)
- g_snprintf(add_string, string_len, " %s, CI %u", add_string, ci);
+ g_snprintf(add_string, string_len, "%s, CI %u", add_string, ci);
return(curr_offset-offset);
@@ -7229,7 +7256,7 @@ de_bssgp_nsei(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gc
curr_offset = offset;
- nsei = tvb_get_ntohs(tvb, offset);
+ nsei = tvb_get_ntohs(tvb, curr_offset);
proto_tree_add_item(tree, hf_bssgp_nsei, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
curr_offset+=2;
@@ -7426,69 +7453,319 @@ de_bssgp_rim_seq_no(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _
*/
+
+static guint16
+de_bssgp_ran_information_request_app_cont(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+{
+ tvbuff_t *new_tvb = NULL;
+ guint32 curr_offset;
+
+ curr_offset = offset;
+
+ switch(g_rim_application_identity){
+ case 1:
+ /* 11.3.63.1.1 RAN-INFORMATION-REQUEST Application Container for the NACC Application */
+ /* Reporting Cell Identifier */
+ curr_offset = curr_offset + de_bssgp_cell_id(tvb, tree, curr_offset, len, add_string, string_len);
+ break;
+ case 2:
+ /* 11.3.63.1.2 RAN-INFORMATION-REQUEST Application Container for the SI3 Application */
+ /* Reporting Cell Identifier */
+ curr_offset = curr_offset + de_bssgp_cell_id(tvb, tree, curr_offset, len, add_string, string_len);
+ break;
+ case 3:
+ /* 11.3.63.1.3 RAN-INFORMATION-REQUEST Application Container for the MBMS data channel Application */
+ /* Reporting Cell Identifier */
+ curr_offset = curr_offset + de_bssgp_cell_id(tvb, tree, curr_offset, len, add_string, string_len);
+ break;
+ case 4:
+ {
+ asn1_ctx_t asn1_ctx;
+
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, TRUE, gpinfo);
+ /* 11.3.63.1.4 RAN-INFORMATION-REQUEST Application Container for the SON Transfer Application */
+ /* Reporting Cell Identifier */
+ /* convert to bit offset */
+ curr_offset = curr_offset<<3;
+ curr_offset = dissect_s1ap_Global_ENB_ID(tvb, curr_offset<<3, &asn1_ctx, tree, hf_bssgp_Global_ENB_ID_PDU);
+ curr_offset = dissect_s1ap_SONtransferRequestContainer(tvb, curr_offset, &asn1_ctx, tree, hf_bssgp_SONtransferRequestContainer_PDU);
+ curr_offset += 7; curr_offset >>= 3;
+ }
+ break;
+ case 5:
+ /* 11.3.63.1.5 RAN-INFORMATION Application Container for the UTRA SI Application */
+ /* Octet 3-m Reporting Cell Identifier
+ * This field is encoded as the Source Cell Identifier IE (UTRAN Source Cell ID) as defined in
+ * 3GPP TS 25.413
+ */
+ new_tvb = tvb_new_subset_remaining(tvb, curr_offset);
+ curr_offset = curr_offset + dissect_ranap_SourceCellID_PDU(new_tvb, gpinfo, tree);
+ default :
+ proto_tree_add_text(tree, tvb, curr_offset, len, "Unknown RIM Application Identity");
+ curr_offset+=len;
+ break;
+ }
+
+
+ return(curr_offset-offset);
+}
+
+/*
+ * 11.3.63.2 RAN-INFORMATION Application Container Unit
+ * 11.3.63.2.0 General
+ */
static const true_false_string bssgp_si_psi_type_vals = {
"PSI messages as specified for PBCCH (3GPP TS 44.060) follow",
"SI messages as specified for BCCH (3GPP TS 44.018) follow"
};
-#if 0
+
+static const value_string bssgp_rat_discriminator_vals[] = {
+ { 0, "The reporting RAT is GERAN" },
+ { 1, "The reporting RAT is UTRAN" },
+ { 2, "The reporting RAT is E-UTRAN" },
+ { 0, NULL },
+ };
static guint16
-de_bssgp_app_cont(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+de_bssgp_ran_information_app_cont_unit(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
+ tvbuff_t *new_tvb = NULL;
guint32 curr_offset;
+ guint8 type, num_items, rat_type, oct;
+ int i;
curr_offset = offset;
switch(g_rim_application_identity){
case 1:
- /* 11.3.63.1.1 RAN-INFORMATION-REQUEST Application Container for the NACC Application */
+ /* 11.3.63.2.1 RAN-INFORMATION Application Container for the NACC Application */
/* Reporting Cell Identifier */
- curr_offset = curr_offset + de_gmm_rai(tvb, tree, curr_offset , 6, add_string, string_len);
+ curr_offset = curr_offset + de_bssgp_cell_id(tvb, tree, curr_offset, len, add_string, string_len);
/* Number of SI/PSI */
+ num_items = tvb_get_guint8(tvb,curr_offset)>>1;
proto_tree_add_item(tree, hf_bssgp_num_si_psi, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
/* Type */
+ type = tvb_get_guint8(tvb,curr_offset)&0x01;
proto_tree_add_item(tree, hf_bssgp_si_psi_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
/* Octet 12-n SI/PSI */
- /* If the Type field indicates that "PSI messages as specified for PBCCH (3GPP TS 44.060) follow" then the SI/PSI
- * field contains Packet System Information message instances encoded for PBCCH as specified in
- * 3GPP TS 44.060. Each Packet System Information message contains the MESSAGE_TYPE field followed by the
- * PSI message content. Each message is 22 octets long.
- */
+ if(type==1){
+ /* If the Type field indicates that "PSI messages as specified for PBCCH (3GPP TS 44.060) follow" then the SI/PSI
+ * field contains Packet System Information message instances encoded for PBCCH as specified in
+ * 3GPP TS 44.060. Each Packet System Information message contains the MESSAGE_TYPE field followed by the
+ * PSI message content. Each message is 22 octets long.
+ */
+ for (i=0; i < num_items; i++){
+ proto_tree_add_text(tree, tvb, curr_offset, 22, "PSI item %u - not dissected yet",i+1);
+ curr_offset+=22;
+ }
+ }else{
+ /* If the Type field indicates that "SI messages as specified for BCCH (3GPP TS 44.018) follow" then the SI/PSI
+ * field contains System Information message instances encoded for BCCH as specified in 3GPP TS 44.018. Each
+ * System Information message contains the Message type octet followed by all the IEs composing the message
+ * payload. Each message is 21 octets long.
+ */
+ void (*msg_fcn_p)(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len);
+ gint ett_tree;
+ int hf_idx;
+ const gchar *msg_str;
+ proto_item *si_item;
+ proto_tree *si_tree;
+
+ for (i=0; i < num_items; i++){
+ oct = tvb_get_guint8(tvb,curr_offset);
+ get_rr_msg_params(oct, &msg_str, &ett_tree, &hf_idx, &msg_fcn_p);
+ proto_tree_add_text(tree, tvb, curr_offset, 21, "SI item %u ",i+1);
+ si_item = proto_tree_add_item(tree, hf_idx, tvb, curr_offset, 1, FALSE);
+ si_tree = proto_item_add_subtree(si_item, ett_tree);
+ if (msg_fcn_p == NULL){
+ proto_tree_add_text(si_tree, tvb, curr_offset, 21, "Unknown SI message");
+ }else{
+ (*msg_fcn_p)(tvb, si_tree, curr_offset+1, 20);
+ }
+ curr_offset+=21;
+ }
+ }
break;
case 2:
- /* 11.3.63.1.2 RAN-INFORMATION-REQUEST Application Container for the SI3 Application */
+ /* 11.3.63.2.2 RAN-INFORMATION Application Container for the SI3 Application */
+ /* Octet 3-10 Reporting Cell Identifier */
+ /* Reporting Cell Identifier: The parameter is encoded as the value part of the Cell Identifier IE
+ * defined in sub-clause 11.3.9, not including IEI and Length Indicator.
+ */
+ curr_offset = curr_offset + de_bssgp_cell_id(tvb, tree, curr_offset, len, add_string, string_len);
+ /* Octet 11-31 SI3 */
+ /* SI3: contains the SYSTEM INFORMATION type 3 message encoded for BCCH as specified in 3GPP TS 44.018 ch 9.1.35
+ * It contains the Message type octet followed by all the IEs composing the message payload.
+ * The message is 21 octets long.
+ * dtap_rr_sys_info_3(tvb, tree, curr_offset, len-7)
+ */
+ proto_tree_add_text(tree, tvb, curr_offset, 1, "SYSTEM INFORMATION type 3 message");
+ curr_offset++;
break;
case 3:
- /* 11.3.63.1.3 RAN-INFORMATION-REQUEST Application Container for the MBMS data channel Application */
+ /* 11.3.63.2.3 RAN-INFORMATION Application Container for the MBMS data channel Application */
+ /* Octet 3-10 Reporting Cell Identifier */
+ curr_offset = curr_offset + de_bssgp_cell_id(tvb, tree, curr_offset, len, add_string, string_len);
+ /* Octet 11-n MBMS data channel report */
+ proto_tree_add_text(tree, tvb, curr_offset, len-6, "MBMS data channel report - not dissected yet");
break;
case 4:
- /* 11.3.63.1.4 RAN-INFORMATION-REQUEST Application Container for the SON Transfer Application */
+ /* 11.3.63.2.4 RAN-INFORMATION Application Container for the SON Transfer Application */
+ /* Octet 3 Spare RAT discriminator */
+ rat_type = tvb_get_guint8(tvb,curr_offset) & 0x0f;
+ proto_tree_add_item(tree, hf_bssgp_rat_discriminator, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ curr_offset++;
+ /* Octet 4-m Reporting Cell Identifier */
+ switch(rat_type){
+ case 0:
+ /* If the RAT discriminator field indicates GERAN, this field is encoded as the value part of the Cell Identifier IE
+ * defined in sub-clause 11.3.9, not including IEI and Length Indicator.
+ */
+ curr_offset = curr_offset + de_bssgp_cell_id(tvb, tree, curr_offset, len, add_string, string_len);
+ break;
+ case 1:
+ /* If the RAT discriminator field indicates UTRAN, this field is encoded as the Source Cell Identifier IE (UTRAN
+ * Source Cell ID) as defined in 3GPP TS 25.413
+ */
+ new_tvb = tvb_new_subset_remaining(tvb, curr_offset);
+ curr_offset = curr_offset + dissect_ranap_SourceCellID_PDU(new_tvb, gpinfo, tree);
+ break;
+ case 2:
+ /* If the RAT discriminator field indicates E-UTRAN, this field is encoded as the E-UTRAN CGI IE as
+ * defined in 3GPP TS 36.413
+ */
+ new_tvb = tvb_new_subset_remaining(tvb, curr_offset);
+ curr_offset = curr_offset + dissect_s1ap_Global_ENB_ID_PDU(new_tvb, gpinfo, tree);
+ break;
+ default:
+ break;
+ }
+
break;
case 5:
/* 11.3.63.2.5 RAN-INFORMATION Application Container for the UTRA SI Application */
+ /* Octet 3-m Reporting Cell Identifier
+ * Reporting Cell Identifier: This field is encoded as the Source Cell Identifier IE
+ * (UTRAN Source Cell ID) as defined in 3GPP TS 25.413
+ */
+ new_tvb = tvb_new_subset_remaining(tvb, curr_offset);
+ curr_offset = curr_offset + dissect_ranap_SourceCellID_PDU(new_tvb, gpinfo, tree);
+ /* Octet (m+1)-n UTRA SI Container
+ * UTRA SI Container: This field contains System Information Container valid for the reporting cell
+ * encoded as defined in TS 25.331
+ */
+ proto_tree_add_text(tree, tvb, curr_offset, len-(curr_offset-offset), "UTRA SI Container - not dissected yet");
+
default :
- proto_tree_add_text(tree, tvb, curr_offset, len, "Unknown RIM Application Identity");
+ proto_tree_add_text(tree, tvb, curr_offset, len, "Unknown RIM Application Identitys Data");
+ curr_offset+=len;
break;
}
return(curr_offset-offset);
}
-#endif
-
/*
- * 11.3.63.2 RAN-INFORMATION Application Container Unit
- * 11.3.63.2.0 General
- * 11.3.63.2.1 RAN-INFORMATION Application Container for the NACC Application
- * 11.3.63.2.2 RAN-INFORMATION Application Container for the SI3 Application
- * 11.3.63.2.3 RAN-INFORMATION Application Container for the MBMS data channel Application
- * 11.3.63.2.4 RAN-INFORMATION Application Container for the SON Transfer Application
* 11.3.64 Application Error Container
- * 11.3.64.1 Application Error Container layout for the NACC application
- * 11.3.64.2 Application Error Container for the SI3 application
- * 11.3.64.3 Application Error Container for the MBMS data channel application
- * 11.3.64.4 Application Error Container for the SON Transfer Application
*/
+static const value_string bssgp_nacc_cause_vals[] = {
+ { 0, "Other unspecified error" },
+ { 1, "Syntax error in the Application Container" },
+ { 2, "Reporting Cell Identifier does not match with the Destination Cell Identifier or with the Source Cell Identifier" },
+ { 3, "SI/PSI type error" },
+ { 4, "Inconsistent length of a SI/PSI message" },
+ { 5, "Inconsistent set of messages" },
+ { 0, NULL },
+ };
+
+static const value_string bssgp_s13_cause_vals[] = {
+ { 0, "Other unspecified error" },
+ { 1, "Syntax error in the Application Container" },
+ { 2, "Reporting Cell Identifier does not match with the Destination Cell Identifier or with the Source Cell Identifier" },
+ { 3, "Inconsistent length of a SI3 message" },
+ { 4, "Inconsistent set of messages" },
+ { 0, NULL },
+ };
+
+static const value_string bssgp_mbms_data_ch_cause_vals[] = {
+ { 0, "Other unspecified error" },
+ { 1, "Syntax error in the Application Container" },
+ { 2, "Reporting Cell Identifier does not match with the Destination Cell Identifier or with the Source Cell Identifier" },
+ { 3, "RAN-INFORMATION/Initial Multiple Report or RANINFORMATION/Single Report PDU exceeds the maximum supported length" },
+ { 4, "Inconsistent MBMS data channel description" },
+ { 0, NULL },
+ };
+
+static const value_string bssgp_utra_si_cause_vals[] = {
+ { 0, "Other unspecified error" },
+ { 1, "Syntax error in the Application Container" },
+ { 2, "Inconsistent Reporting Cell Identifier" },
+ { 0, NULL },
+ };
+
+static guint16
+de_bssgp_ran_app_error_cont(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+{
+ tvbuff_t *new_tvb = NULL;
+ guint32 curr_offset;
+
+ curr_offset = offset;
+
+ switch(g_rim_application_identity){
+ case 1:
+ /*
+ * 11.3.64.1 Application Error Container layout for the NACC application
+ */
+ /* Octet 3 NACC Cause */
+ proto_tree_add_item(tree, hf_bssgp_nacc_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ curr_offset++;
+ /* Erroneous Application Container including IEI and LI */
+ proto_tree_add_text(tree, tvb, curr_offset, len-(curr_offset-offset), "Erroneous Application Container including IEI and LI");
+ break;
+ case 2:
+ /*
+ * 11.3.64.2 Application Error Container for the SI3 application
+ */
+ /* Octet 3 SI3 Cause */
+ proto_tree_add_item(tree, hf_bssgp_s13_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ curr_offset++;
+ /* Erroneous Application Container including IEI and LI */
+ proto_tree_add_text(tree, tvb, curr_offset, len-(curr_offset-offset), "Erroneous Application Container including IEI and LI");
+ break;
+ case 3:
+ /*
+ * 11.3.64.3 Application Error Container for the MBMS data channel application
+ */
+ /* Octet 3 MBMS data channel Cause */
+ proto_tree_add_item(tree, hf_bssgp_mbms_data_ch_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ curr_offset++;
+ /* Erroneous Application Container including IEI and LI */
+ proto_tree_add_text(tree, tvb, curr_offset, len-(curr_offset-offset), "Erroneous Application Container including IEI and LI");
+ break;
+ case 4:
+ /*
+ * 11.3.64.4 Application Error Container for the SON Transfer Application
+ */
+ /* SON Transfer Cause: This field indicates the cause why the Application Error Container IE is sent.
+ * The "SON Transfer Cause" field is encoded as the SON Transfer Cause IE as defined in 3GPP TS 36.413
+ */
+ new_tvb = tvb_new_subset_remaining(tvb, curr_offset);
+ curr_offset = curr_offset + dissect_s1ap_SONtransferCause_PDU(new_tvb, gpinfo, tree);
+ /* Erroneous Application Container including IEI and LI */
+ proto_tree_add_text(tree, tvb, curr_offset, len-(curr_offset-offset), "Erroneous Application Container including IEI and LI");
+ break;
+ case 5:
+ /* 11.3.64.5 Application Error Container for the UTRA SI Application*/
+ /* Octet 3 UTRA SI Cause */
+ proto_tree_add_item(tree, hf_bssgp_utra_si_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ default :
+ proto_tree_add_text(tree, tvb, curr_offset, len, "Unknown Application Error Container");
+ curr_offset+=len;
+ break;
+ }
+ return(len);
+}
+
/*
* 11.3.65 RIM PDU Indications
*/
@@ -7531,16 +7808,16 @@ de_bssgp_rim_pdu_indications(tvbuff_t *tvb, proto_tree *tree, guint32 offset, gu
switch(g_pdu_type){
case BSSGP_PDU_RAN_INFORMATION_REQUEST:
/* 11.3.65.1 RAN-INFORMATION-REQUEST RIM PDU Indications */
- /* The ACK field is not used and shall be considered as spare */
/* Table 11.3.65.1: RAN-INFORMATION-REQUEST PDU Type Extension coding */
proto_tree_add_item(tree, hf_bssgp_ran_inf_req_pdu_t_ext_c, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ /* The ACK field is not used and shall be considered as spare */
curr_offset++;
break;
case BSSGP_PDU_RAN_INFORMATION:
/* 11.3.65.2 RAN-INFORMATION RIM PDU Indications */
- proto_tree_add_item(tree, hf_bssgp_rim_pdu_ind_ack, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
/* Table 11.3.65.2: RAN-INFORMATION PDU Type Extension coding */
proto_tree_add_item(tree, hf_bssgp_ran_inf_pdu_t_ext_c, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_bssgp_rim_pdu_ind_ack, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
curr_offset++;
break;
case BSSGP_PDU_RAN_INFORMATION_ERROR:
@@ -7664,7 +7941,6 @@ static guint16
de_bssgp_rim_routing_inf(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
guint8 oct;
- guint16 ci;
guint16 rnc_id;
tvbuff_t *new_tvb = NULL;
guint32 curr_offset;
@@ -7678,6 +7954,7 @@ de_bssgp_rim_routing_inf(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint
/* RIM Routing Address discriminator */
oct = tvb_get_guint8(tvb,curr_offset);
proto_tree_add_item(tree, hf_bssgp_ra_discriminator, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
+ curr_offset++;
switch(oct){
case 0:
/* RIM Routing Address discriminator = 0000:
@@ -7685,15 +7962,7 @@ de_bssgp_rim_routing_inf(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint
* and is coded as the value part (octet 3 to octet 10) of the
* Cell Identifier information element specified in sub-clause 11.3.9.
*/
- curr_offset = curr_offset + de_gmm_rai(tvb, tree, curr_offset , 6, add_string, string_len);
- /*Why doesn't this work? ( add_string will not contain RAI + CI )
- * curr_offset = curr_offset + de_cell_id(tvb, tree, curr_offset , 2, add_string, string_len);
- */
- ci = tvb_get_ntohs(tvb, offset);
- proto_tree_add_item(tree, hf_bssgp_ci, tvb, offset, 2, ENC_BIG_ENDIAN);
- if (add_string)
- g_snprintf(add_string, string_len, " - %s, CI %u", add_string, ci);
- curr_offset+=2;
+ curr_offset = curr_offset + de_bssgp_cell_id(tvb, tree, curr_offset, len, add_string, string_len);
break;
case 1:
/* RIM Routing Address discriminator = 0001:
@@ -7703,8 +7972,8 @@ de_bssgp_rim_routing_inf(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint
*/
curr_offset = curr_offset + de_gmm_rai(tvb, tree, curr_offset , 6, add_string, string_len);
/* Octet 10 - 11 RNC-ID (or Extended RNC-ID) */
- rnc_id = tvb_get_ntohs(tvb, offset);
- proto_tree_add_item(tree, hf_bssgp_rnc_id, tvb, offset, 2, ENC_BIG_ENDIAN);
+ rnc_id = tvb_get_ntohs(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_bssgp_rnc_id, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
curr_offset+=2;
if (add_string)
@@ -7722,6 +7991,7 @@ de_bssgp_rim_routing_inf(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint
dissect_s1ap_Global_ENB_ID_PDU(new_tvb, gpinfo, tree);
break;
default:
+ proto_tree_add_text(tree, tvb, curr_offset, 3, "Unknown RIM Routing Address discriminator");
return len;
}
@@ -7978,8 +8248,8 @@ de_bssgp_rnc_identifier(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l
*/
curr_offset = curr_offset + de_gmm_rai(tvb, tree, curr_offset , 6, add_string, string_len);
/* Octet 9 - 10 RNC ID (or Extended RNC-ID or Corresponding RNC-ID) */
- rnc_id = tvb_get_ntohs(tvb, offset);
- proto_tree_add_item(tree, hf_bssgp_rnc_id, tvb, offset, 2, ENC_BIG_ENDIAN);
+ rnc_id = tvb_get_ntohs(tvb, curr_offset);
+ proto_tree_add_item(tree, hf_bssgp_rnc_id, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
curr_offset+=2;
if (add_string)
@@ -8416,6 +8686,20 @@ de_bssgp_reliable_inter_rat_ho_inf(tvbuff_t *tvb, proto_tree *tree, guint32 offs
/*
* 11.3.108 SON Transfer Application Identity
*/
+static guint16
+de_bssgp_son_transfer_app_id(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+{
+ guint32 curr_offset;
+
+ curr_offset = offset;
+
+ /* SON Transfer Application Identity: This field is encoded as the SON Transfer Application Identity IE
+ * as defined in 3GPP TS 36.413
+ */
+ dissect_s1ap_SONtransferApplicationIdentity_PDU(tvb, gpinfo, tree);
+
+ return(len);
+}
/*
* 11.3.109 CSG Identifier
*/
@@ -8525,25 +8809,25 @@ const value_string bssgp_elem_strings[] = {
{ 0x00, "RIM Sequence Number" }, /* 11.3.62 RIM Sequence Number */
/* 11.3.62a RIM Container */
/* 11.3.62a.0 General */
- /* 11.3.62a.1 RAN-INFORMATION-REQUEST RIM Container */
- /* 11.3.62a.2 RAN-INFORMATION RIM Container */
- /* 11.3.62a.3 RAN-INFORMATION-ACK RIM Container */
- /* 11.3.62a.4 RAN-INFORMATION-ERROR RIM Container */
- /* 11.3.62a.5 RAN-INFORMATION-APPLICATION-ERROR RIM Container */
+ { 0x00, "RAN-INFORMATION-REQUEST RIM Container" }, /* 11.3.62a.1 RAN-INFORMATION-REQUEST RIM Container */
+ { 0x00, "RAN-INFORMATION RIM Container" }, /* 11.3.62a.2 RAN-INFORMATION RIM Container */
+ { 0x00, "RAN-INFORMATION-ACK RIM Container" }, /* 11.3.62a.3 RAN-INFORMATION-ACK RIM Container */
+ { 0x00, "RAN-INFORMATION-ERROR RIM Container" }, /* 11.3.62a.4 RAN-INFORMATION-ERROR RIM Container */
+ { 0x00, "RAN-INFORMATION-APPLICATION-ERROR RIM Container" }, /* 11.3.62a.5 RAN-INFORMATION-APPLICATION-ERROR RIM Container */
/* 11.3.63 Application Container */
- /* 11.3.63.1 RAN-INFORMATION-REQUEST Application Container */
+ { 0x00, "RAN-INFORMATION-REQUEST Application Container" }, /* 11.3.63.1 RAN-INFORMATION-REQUEST Application Container */
/* 11.3.63.1.0 General */
/* 11.3.63.1.1 RAN-INFORMATION-REQUEST Application Container for the NACC Application */
/* 11.3.63.1.2 RAN-INFORMATION-REQUEST Application Container for the SI3 Application */
/* 11.3.63.1.3 RAN-INFORMATION-REQUEST Application Container for the MBMS data channel Application */
/* 11.3.63.1.4 RAN-INFORMATION-REQUEST Application Container for the SON Transfer Application */
- /* 11.3.63.2 RAN-INFORMATION Application Container Unit */
+ { 0x00, "RAN-INFORMATION Application Container Unit" }, /* 11.3.63.2 RAN-INFORMATION Application Container Unit */
/* 11.3.63.2.0 General */
/* 11.3.63.2.1 RAN-INFORMATION Application Container for the NACC Application */
/* 11.3.63.2.2 RAN-INFORMATION Application Container for the SI3 Application */
/* 11.3.63.2.3 RAN-INFORMATION Application Container for the MBMS data channel Application */
/* 11.3.63.2.4 RAN-INFORMATION Application Container for the SON Transfer Application */
- /* 11.3.64 Application Error Container */
+ { 0x00, "Application Error Container" }, /* 11.3.64 Application Error Container */
/* 11.3.64.1 Application Error Container layout for the NACC application */
/* 11.3.64.2 Application Error Container for the SI3 application */
/* 11.3.64.3 Application Error Container for the MBMS data channel application */
@@ -8554,7 +8838,7 @@ const value_string bssgp_elem_strings[] = {
/* 11.3.65.2 RAN-INFORMATION RIM PDU Indications */
/* 11.3.65.3 RAN-INFORMATION-APPLICATION-ERROR RIM PDU Indications */
/* 11.3.66 (void) */
- { 0x00, "IM Protocol Version Number" }, /* 11.3.67 RIM Protocol Version Number */
+ { 0x00, "RIM Protocol Version Number" }, /* 11.3.67 RIM Protocol Version Number */
{ 0x00, "PFC Flow Control parameters" }, /* 11.3.68 PFC Flow Control parameters */
/* 0x53, SGSAP_PDU_TYPE, DE_SGSAP_GLOBAL_CN_ID */ /* 11.3.69 Global CN-Id */
{ 0x00, "RIM Routing Information" }, /* 11.3.70 RIM Routing Information */
@@ -8598,7 +8882,7 @@ const value_string bssgp_elem_strings[] = {
{ 0x00, "Subscriber Profile ID for RAT/Frequency priority" }, /* 11.3.105 Subscriber Profile ID for RAT/Frequency priority */
/* 11.3.106 Request for Inter-RAT Handover Info */
{ 0x00, "Reliable Inter-RAT Handover Info" }, /* 11.3.107 Reliable Inter-RAT Handover Info */
-/* 11.3.108 SON Transfer Application Identity */
+ { 0x00, "Reliable Inter-RAT Handover Info" }, /* 11.3.108 SON Transfer Application Identity */
{ 0x00, "CSG Identifier" }, /* 11.3.109 CSG Identifier */
/* 11.3.110 Tracking Area Code */
@@ -8662,11 +8946,18 @@ typedef enum
DE_BSSGP_RRLP_FLAGS, /* 11.3.60 RRLP Flags */
DE_BSSGP_RIM_APP_ID, /* 11.3.61 RIM Application Identity */
DE_BSSGP_RIM_SEQ_NO, /* 11.3.62 RIM Sequence Number */
+ DE_BSSGP_RAN_INF_REQUEST_RIM_CONT, /* 11.3.62a.1 RAN-INFORMATION-REQUEST RIM Container */
+ DE_BSSGP_RAN_INF_RIM_CONT, /* 11.3.62a.2 RAN-INFORMATION RIM Container */
+ DE_BSSGP_RAN_INFORMATION_ACK_RIM_CONT, /* 11.3.62a.3 RAN-INFORMATION-ACK RIM Container */
+ DE_BSSGP_RAN_INFORMATION_ERROR_RIM_CONT, /* 11.3.62a.4 RAN-INFORMATION-ERROR RIM Container */
+ DE_BSSGP_RAN_INF_APP_ERROR_RIM_CONT, /* 11.3.62a.5 RAN-INFORMATION-APPLICATION-ERROR RIM Container */
+ DE_BSSGP_RAN_INFORMATION_REQUEST_APP_CONT, /* 11.3.63.1 RAN-INFORMATION-REQUEST Application Container */
+ DE_BSSGP_RAN_INFORMATION_APP_CONT_UNIT, /* 11.3.63.2 RAN-INFORMATION Application Container Unit */
+ DE_BSSGP_RAN_APP_ERROR_CONT, /* 11.3.64 Application Error Container */
DE_BSSGP_RIM_PDU_INDICATIONS, /* 11.3.65 RIM PDU Indications */
DE_BSSGP_RIM_PROTO_VER_NO, /* 11.3.67 RIM Protocol Version Number */
DE_BSSGP_PFC_FLOW_CTRL, /* 11.3.68 PFC Flow Control parameters */
- DE_BSSGP_GLOBAL_CN_ID, /* 11.3.69 Global CN-Id SGSAP_PDU_TYPE, DE_SGSAP_GLOBAL_CN_ID*/
DE_BSSGP_RIM_ROUTING_INF, /* 11.3.70 RIM Routing Information */
DE_BSSGP_MBMS_SESSION_ID, /* 11.3.71 MBMS Session Identity */
@@ -8696,6 +8987,7 @@ typedef enum
DE_BSSGP_E_UTRAN_INTER_RAT_HO_INFO, /* 11.3.104 E-UTRAN Inter RAT Handover Info */
DE_BSSGP_SUB_PROF_ID_F_RAT_FRQ_PRIO, /* 11.3.105 Subscriber Profile ID for RAT/Frequency priority */
DE_BSSGP_RELIABLE_INTER_RAT_HO_INF, /* 11.3.107 Reliable Inter-RAT Handover Info */
+ DE_BSSGP_SON_TRANSFER_APP_ID, /* 11.3.108 SON Transfer Application Identity */
DE_BSSGP_CSG_ID, /* 11.3.109 CSG Identifier */
DE_BSSGP_NONE /* NONE */
}
@@ -8753,11 +9045,19 @@ guint16 (*bssgp_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, gui
de_bssgp_rrlp_flags, /* 11.3.60 RRLP Flags */
de_bssgp_rim_app_id, /* 11.3.61 RIM Application Identity */
de_bssgp_rim_seq_no, /* 11.3.62 RIM Sequence Number */
+ de_bssgp_ran_inf_request_rim_cont, /* 11.3.62a.1 RAN-INFORMATION-REQUEST RIM Container */
+ de_bssgp_ran_inf_rim_cont, /* 11.3.62a.2 RAN-INFORMATION RIM Container */
+ de_bssgp_ran_inf_ack_rim_cont, /* 11.3.62a.3 RAN-INFORMATION-ACK RIM Container */
+ de_bssgp_ran_inf_error_rim_cont, /* 11.3.62a.4 RAN-INFORMATION-ERROR RIM Container */
+ de_bssgp_ran_inf_app_error_rim_cont, /* 11.3.62a.5 RAN-INFORMATION-APPLICATION-ERROR RIM Container */
+
+ de_bssgp_ran_information_request_app_cont, /* 11.3.63.1 RAN-INFORMATION-REQUEST Application Container */
+ de_bssgp_ran_information_app_cont_unit, /* 11.3.63.2 RAN-INFORMATION Application Container Unit */
+ de_bssgp_ran_app_error_cont, /* 11.3.64 Application Error Container */
de_bssgp_rim_pdu_indications, /* 11.3.65 RIM PDU Indications */
de_bssgp_rim_proto_ver_no, /* 11.3.67 RIM Protocol Version Number */
de_bssgp_pfc_flow_ctrl, /* 11.3.68 PFC Flow Control parameters */
- NULL, /* 11.3.69 0x53 Global CN-Id */
de_bssgp_rim_routing_inf, /* 11.3.70 RIM Routing Information */
de_bssgp_mbms_session_id, /* 11.3.71 MBMS Session Identity */
NULL, /* 11.3.77 TMGI (Temporary Mobile Group Identity) */
@@ -8785,12 +9085,12 @@ guint16 (*bssgp_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, gui
de_bssgp_e_utran_inter_rat_ho_info, /* 11.3.104 E-UTRAN Inter RAT Handover Info */
de_bssgp_sub_prof_id_f_rat_freq_prio, /* 11.3.105 Subscriber Profile ID for RAT/Frequency priority */
de_bssgp_reliable_inter_rat_ho_inf, /* 11.3.107 Reliable Inter-RAT Handover Info */
+ de_bssgp_son_transfer_app_id, /* 11.3.108 SON Transfer Application Identity */
de_bssgp_csg_id, /* 11.3.109 CSG Identifier */
NULL, /* NONE */
};
-#if 0
/*
* 11.3.62a RIM Container
* 11.3.62a.0 General
@@ -8804,6 +9104,7 @@ de_bssgp_ran_inf_request_rim_cont(tvbuff_t *tvb, proto_tree *tree, guint32 offse
guint curr_len;
curr_offset = offset;
+ curr_len = len;
/* RAN-INFORMATION-REQUEST RIM Container Contents coded as
* defined in table 11.3.62a.1b
@@ -8817,13 +9118,139 @@ de_bssgp_ran_inf_request_rim_cont(tvbuff_t *tvb, proto_tree *tree, guint32 offse
/* RIM Protocol Version Number RIM Protocol Version Number/11.3.67 O TLV 3 */
ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_RIM_PROTOCOL_VERSION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_PROTO_VER_NO, NULL);
/* Application Container (note 1) RAN-INFORMATION-REQUEST Application Container/11.3.63.1 C TLV 4-? */
+ ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_RAN_INF_REQUEST_APP_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_INFORMATION_REQUEST_APP_CONT, NULL);
/* SON Transfer Application Identity (note 2) SON Transfer Application Identity/11.3.108 C TLV 3-m */
+ ELEM_IN_ELEM_OPT_TELV(0x84, BSSGP_PDU_TYPE, DE_BSSGP_SON_TRANSFER_APP_ID, NULL);
+
+ return(curr_offset-offset);
+}
+/*
+ * 11.3.62a.2 RAN-INFORMATION RIM Container
+ */
+static guint16
+de_bssgp_ran_inf_rim_cont(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+{
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
+
+ curr_offset = offset;
+ curr_len = len;
+
+ /* RAN-INFORMATION RIM Container Contents coded as
+ * defined in table 11.3.62a.2b
+ */
+ /* RIM Application Identity RIM Application Identity /11.3.61 M TLV 3 */
+ ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_APP_ID, BSSGP_PDU_TYPE, DE_BSSGP_RIM_APP_ID, NULL);
+ /* RIM Sequence Number RIM Sequence Number /11.3.62 M TLV 6 */
+ ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_SEQUENCE_NUMBER, BSSGP_PDU_TYPE, DE_BSSGP_RIM_SEQ_NO, NULL);
+ /* RIM PDU Indications RIM PDU Indications /11.3.65. M TLV 3 */
+ ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_PDU_INDICATIONS, BSSGP_PDU_TYPE, DE_BSSGP_RIM_PDU_INDICATIONS, NULL);
+ /* RIM Protocol Version Number RIM Protocol Version Number/11.3.67 O TLV 3 */
+ ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_RIM_PROTOCOL_VERSION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_PROTO_VER_NO, NULL);
+ /* Application Container (NOTE 1) RAN-INFORMATION Application Container /11.3.63.2 C (Note 1) TLV 4-? */
+ ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_RAN_INF_APP_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_INFORMATION_APP_CONT_UNIT, NULL);
+ /* Application Error Container (NOTE 1) Application Error Container/11.3.64 C (Note 1) TLV n */
+ ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_APPLICATION_ERROR_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_APP_ERROR_CONT, NULL);
+ /* SON Transfer Application Identity (note 2) SON Transfer Application Identity/11.3.108 C TLV 3-m */
+ ELEM_IN_ELEM_OPT_TELV(0x84, BSSGP_PDU_TYPE, DE_BSSGP_SON_TRANSFER_APP_ID, NULL);
return(curr_offset-offset);
}
-#endif
-/* 11.3.79 Source BSS to Target BSS Transparent Container */
+/*
+ * 11.3.62a.3 RAN-INFORMATION-ACK RIM Container
+ */
+static guint16
+de_bssgp_ran_inf_ack_rim_cont(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+{
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
+
+ curr_offset = offset;
+ curr_len = len;
+
+ /* RAN-INFORMATION-ACK RIM Container Contents coded as
+ * defined in table 11.3.62a.3b
+ */
+ /* RIM Application Identity RIM Application Identity /11.3.61 M TLV 3 */
+ ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_APP_ID, BSSGP_PDU_TYPE, DE_BSSGP_RIM_APP_ID, NULL);
+ /* RIM Sequence Number RIM Sequence Number /11.3.62 M TLV 6 */
+ ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_SEQUENCE_NUMBER, BSSGP_PDU_TYPE, DE_BSSGP_RIM_SEQ_NO, NULL);
+ /* RIM Protocol Version Number RIM Protocol Version Number/11.3.67 O TLV 4 */
+ ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_RIM_PROTOCOL_VERSION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_PROTO_VER_NO, NULL);
+ /* SON Transfer Application Identity (note 1) SON Transfer Application Identity/11.3.108 C TLV 3-m */
+ ELEM_IN_ELEM_OPT_TELV(0x84, BSSGP_PDU_TYPE, DE_BSSGP_SON_TRANSFER_APP_ID, NULL);
+
+ return(curr_offset-offset);
+}
+/*
+ * 11.3.62a.4 RAN-INFORMATION-ERROR RIM Container
+ */
+static guint16
+de_bssgp_ran_inf_error_rim_cont(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+{
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
+
+ curr_offset = offset;
+ curr_len = len;
+
+ /* RAN-INFORMATION-ERROR RIM Container Contents coded as
+ * defined in table 11.3.62a.4b
+ */
+ /* RIM Application Identity RIM Application Identity /11.3.61 M TLV 3 */
+ ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_APP_ID, BSSGP_PDU_TYPE, DE_BSSGP_RIM_APP_ID, NULL);
+ /* RIM Cause Cause/11.3.8 M TLV 3 */
+ ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL);
+ /* RIM Sequence Number RIM Sequence Number /11.3.62 M TLV 6 */
+ ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_SEQUENCE_NUMBER, BSSGP_PDU_TYPE, DE_BSSGP_RIM_SEQ_NO, NULL);
+ /* RIM Protocol Version Number RIM Protocol Version Number/11.3.67 O TLV 3 */
+ ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_RIM_PROTOCOL_VERSION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_PROTO_VER_NO, NULL);
+ /* PDU in Error PDU in Error/11.3.24 M TLV 3-? */
+ ELEM_IN_ELEM_OPT_TELV(0x15, BSSGP_PDU_TYPE, DE_BSSGP_PDU_IN_ERROR , NULL);
+ /* SON Transfer Application Identity (note 1) SON Transfer Application Identity/11.3.108 C TLV 3-m */
+ ELEM_IN_ELEM_OPT_TELV(0x84, BSSGP_PDU_TYPE, DE_BSSGP_SON_TRANSFER_APP_ID, NULL);
+
+ return(curr_offset-offset);
+}
+/*
+ * 11.3.62a.5 RAN-INFORMATION-APPLICATION-ERROR RIM Container
+ */
+static guint16
+de_bssgp_ran_inf_app_error_rim_cont(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
+{
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
+
+ curr_offset = offset;
+ curr_len = len;
+
+ /* RRAN-INFORMATION-APPLICATION-ERROR RIM Container
+ * Contents coded as defined in table 11.3.62a.5b
+ */
+ /* RIM Application Identity RIM Application Identity /11.3.61 M TLV 3 */
+ ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_APP_ID, BSSGP_PDU_TYPE, DE_BSSGP_RIM_APP_ID, NULL);
+ /* RIM Sequence Number RIM Sequence Number /11.3.62 M TLV 6 */
+ ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_SEQUENCE_NUMBER, BSSGP_PDU_TYPE, DE_BSSGP_RIM_SEQ_NO, NULL);
+ /* RIM PDU Indications RIM PDU Indications /11.3.65. M TLV 3 */
+ ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_RIM_PDU_INDICATIONS, BSSGP_PDU_TYPE, DE_BSSGP_RIM_PDU_INDICATIONS, NULL);
+ /* RIM Protocol Version Number RIM Protocol Version Number/11.3.67 O TLV 3 */
+ ELEM_IN_ELEM_OPT_TELV(BSSGP_IEI_RIM_PROTOCOL_VERSION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_PROTO_VER_NO, NULL);
+ /* Application Error Container Application Error Container/11.3.64 M TLV n */
+ ELEM_IN_ELEM_MAND_TELV(BSSGP_IEI_APPLICATION_ERROR_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_APP_ERROR_CONT, NULL);
+ /* SON Transfer Application Identity (note 1) SON Transfer Application Identity/11.3.108 C TLV 3-m */
+ ELEM_IN_ELEM_OPT_TELV(0x84, BSSGP_PDU_TYPE, DE_BSSGP_SON_TRANSFER_APP_ID, NULL);
+
+ return(curr_offset-offset);
+}
+
+/*
+ * 11.3.79 Source BSS to Target BSS Transparent Container
+ */
static guint16
de_bssgp_source_BSS_to_target_BSS_transp_cont(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
{
@@ -10531,7 +10958,6 @@ bssgp_pos_resp(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gpinfo);
}
-#if 0
/*
* 10.6 PDU functional definitions and contents at RIM SAP
* 10.6.1 RAN-INFORMATION-REQUEST
@@ -10554,16 +10980,126 @@ bssgp_ran_inf_request(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len
/* Source Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */
ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF , " - Source Cell Identifier");
/* RIM Container RAN-INFORMATION-REQUEST RIM Container/11.3.62a.1 M TLV 3-? */
+ ELEM_OPT_TELV(BSSGP_IEI_RAN_INF_REQUEST_RIM_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_INF_REQUEST_RIM_CONT, NULL);
EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gpinfo);
}
-#endif
/*
* 10.6.2 RAN-INFORMATION
+ */
+static void
+bssgp_ran_inf(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+{
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
+
+ curr_offset = offset;
+ curr_len = len;
+
+ /* The RAN-INFORMATION PDU allows a serving BSS to send information to a controlling BSS. */
+ /* Direction: BSS to SGSN SGSN to BSS */
+
+ /* Destination Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */
+ ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF , " - Destination Cell Identifier");
+ /* Source Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */
+ ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF , " - Source Cell Identifier");
+ /* RIM Container RAN-INFORMATION RIM Container/11.3.62a.2 M TLV 3-? */
+ ELEM_MAND_TELV(BSSGP_IEI_RAN_INF_RIM_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_INF_RIM_CONT , " - Source Cell Identifier");
+
+
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gpinfo);
+}
+
+/*
* 10.6.3 RAN-INFORMATION-ACK
+ */
+static void
+bssgp_ran_inf_request_ack(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+{
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
+
+ curr_offset = offset;
+ curr_len = len;
+
+ /* The RAN-INFORMATION-ACK PDU allows a controlling BSS to acknowledge the reception of a RANINFORMATION
+ * PDU and a serving BSS to acknowledge the reception of a RAN-INFORMATION-APPLICATIONERROR PDU.
+ */
+
+ /* Direction: BSS to SGSN SGSN to BSS */
+
+ /* Destination Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */
+ ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF , " - Destination Cell Identifier");
+ /* Source Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */
+ ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF , " - Source Cell Identifier");
+ /* RIM Container RAN-INFORMATION-ACK RIM Container/11.3.62a.3 M TLV 3-? */
+ ELEM_MAND_TELV(BSSGP_IEI_RAN_INF_ACK_RIM_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_INFORMATION_ACK_RIM_CONT , NULL);
+
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gpinfo);
+}
+
+/*
* 10.6.4 RAN-INFORMATION-ERROR
+ */
+
+static void
+bssgp_ran_inf_err(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+{
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
+
+ curr_offset = offset;
+ curr_len = len;
+
+ /* The RAN-INFORMATION-ERROR PDU allows a BSS to send an error PDU back to an originating BSS as a response
+ * to a RAN-INFORMATION, a RAN-INFORMATION-REQUEST, a RAN-INFORMATION-ACK or a RANINFORMATION-APPLICATION-ERROR PDU.
+ */
+
+ /* Direction: BSS to SGSN SGSN to BSS */
+
+ /* Destination Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */
+ ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF , " - Destination Cell Identifier");
+ /* Source Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */
+ ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF , " - Source Cell Identifier");
+ /* RIM Container RAN-INFORMATION-ERROR RIM Container/11.3.62a.4 M TLV 3-? */
+ ELEM_MAND_TELV(BSSGP_IEI_RAN_INF_ERROR_RIM_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_INFORMATION_ERROR_RIM_CONT , NULL);
+
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gpinfo);
+}
+/*
* 10.6.5 RAN-INFORMATION-APPLICATION-ERROR
+ */
+static void
+bssgp_ran_inf_app_err(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
+{
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_len;
+
+ curr_offset = offset;
+ curr_len = len;
+
+ /* The RAN-INFORMATION-APPLICATION-ERROR PDU allows a controlling BSS to inform the serving BSS about
+ * erroneous application information in a previously received RAN-INFORMATION PDU.
+ */
+
+ /* Direction: BSS to SGSN SGSN to BSS */
+
+ /* Destination Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */
+ ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF , " - Destination Cell Identifier");
+ /* Source Cell Identifier RIM Routing Information/11.3.70 M TLV 3-? */
+ ELEM_MAND_TELV(BSSGP_IEI_RIM_ROUTING_INFORMATION, BSSGP_PDU_TYPE, DE_BSSGP_RIM_ROUTING_INF , " - Source Cell Identifier");
+ /* RIM Container RAN-INFORMATION-APPLICATION ERROR RIM Container/11.3.62a.5 M TLV 3-? */
+ ELEM_MAND_TELV(BSSGP_IEI_RAN_INF_APP_ERROR_RIM_CONTAINER, BSSGP_PDU_TYPE, DE_BSSGP_RAN_INF_APP_ERROR_RIM_CONT , NULL);
+
+ EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, gpinfo);
+}
+
+/*
* 10.7 PDU functional definitions and contents at MBMS SAP
* 10.7.1 MBMS-SESSION-START-REQUEST
* 10.7.2 MBMS-SESSION-START-RESPONSE
@@ -10696,12 +11232,22 @@ static const value_string bssgp_msg_strings[] = {
/* 0x6e */ { BSSGP_PDU_RESERVED_0X6E, "Reserved" }, /* */
/* 0x6f */ { BSSGP_PDU_RESERVED_0X6F, "Reserved" }, /* */
-/* 0x70 */ { BSSGP_PDU_RAN_INFORMATION, "RAN-INFORMATION" },
-/* 0x71 */ { BSSGP_PDU_RAN_INFORMATION_REQUEST, "RAN-INFORMATION-REQUEST" },
-/* 0x72 */ { BSSGP_PDU_RAN_INFORMATION_ACK, "RAN-INFORMATION-ACK" },
-/* 0x73 */ { BSSGP_PDU_RAN_INFORMATION_ERROR, "RAN-INFORMATION-ERROR" },
-/* 0x74 */ { BSSGP_PDU_RAN_INFORMATION_APP_ERROR, "RAN-INFORMATION-APPLICATION-ERROR" },
-
+/* 0x70 */ { BSSGP_PDU_RAN_INFORMATION, "RAN-INFORMATION" }, /* 10.6.2 RAN-INFORMATION */
+/* 0x71 */ { BSSGP_PDU_RAN_INFORMATION_REQUEST, "RAN-INFORMATION-REQUEST" }, /* 10.6.1 RAN-INFORMATION-REQUEST */
+/* 0x72 */ { BSSGP_PDU_RAN_INFORMATION_ACK, "RAN-INFORMATION-ACK" }, /* 10.6.3 RAN-INFORMATION-ACK */
+/* 0x73 */ { BSSGP_PDU_RAN_INFORMATION_ERROR, "RAN-INFORMATION-ERROR" }, /* 10.6.4 RAN-INFORMATION-ERROR */
+/* 0x74 */ { BSSGP_PDU_RAN_INFORMATION_APP_ERROR, "RAN-INFORMATION-APPLICATION-ERROR" }, /* 10.6.5 RAN-INFORMATION-APPLICATION-ERROR */
+/* 0x75 */ { BSSGP_PDU_RESERVED_0X75, "Reserved" }, /* */
+/* 0x76 */ { BSSGP_PDU_RESERVED_0X76, "Reserved" }, /* */
+/* 0x77 */ { BSSGP_PDU_RESERVED_0X77, "Reserved" }, /* */
+/* 0x78 */ { BSSGP_PDU_RESERVED_0X78, "Reserved" }, /* */
+/* 0x79 */ { BSSGP_PDU_RESERVED_0X79, "Reserved" }, /* */
+/* 0x7a */ { BSSGP_PDU_RESERVED_0X7A, "Reserved" }, /* */
+/* 0x7b */ { BSSGP_PDU_RESERVED_0X7B, "Reserved" }, /* */
+/* 0x7c */ { BSSGP_PDU_RESERVED_0X7C, "Reserved" }, /* */
+/* 0x7d */ { BSSGP_PDU_RESERVED_0X7D, "Reserved" }, /* */
+/* 0x7e */ { BSSGP_PDU_RESERVED_0X7E, "Reserved" }, /* */
+/* 0x7f */ { BSSGP_PDU_RESERVED_0X7F, "Reserved" }, /* */
/* 0x80 */ {0x80, "MBMS-SESSION-START-REQUEST" },
/* 0x81 */ {0x81, "MBMS-SESSION-START-RESPONSE" },
/* 0x82 */ {0x82, "MBMS-SESSION-STOP-REQUEST" },
@@ -10755,21 +11301,6 @@ static void (*bssgp_msg_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset,
NULL, /* 0x1D */
NULL, /* 0x1E */
NULL, /* 0x1F */
- NULL, /* 0x11 */
- NULL, /* 0x12 */
- NULL, /* 0x13 */
- NULL, /* 0x14 */
- NULL, /* 0x15 */
- NULL, /* 0x16 */
- NULL, /* 0x17 */
- NULL, /* 0x18 */
- NULL, /* 0x19 */
- NULL, /* 0x1A */
- NULL, /* 0x1B */
- NULL, /* 0x1C */
- NULL, /* 0x1D */
- NULL, /* 0x1E */
- NULL, /* 0x1F */
/* 0x20 to 0x2e */
bssgp_bvc_block, /* 10.4.8 BVC-BLOCK */
@@ -10854,6 +11385,34 @@ static void (*bssgp_msg_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset,
bssgp_pos_cmd, /* 10.5.4 POSITION-COMMAND */
bssgp_pos_resp, /* 10.5.5 POSITION-RESPONSE */
+/* 0x65 to 0x6f Reserved */
+ NULL, /* 0x65 */
+ NULL, /* 0x66 */
+ NULL, /* 0x67 */
+ NULL, /* 0x68 */
+ NULL, /* 0x69 */
+ NULL, /* 0x6a */
+ NULL, /* 0x6b */
+ NULL, /* 0x6c */
+ NULL, /* 0x6d */
+ NULL, /* 0x6e */
+ NULL, /* 0x6f */
+ bssgp_ran_inf, /* 10.6.2 RAN-INFORMATION */
+ bssgp_ran_inf_request, /* 10.6.1 RAN-INFORMATION-REQUEST */
+ bssgp_ran_inf_request_ack, /* 10.6.3 RAN-INFORMATION-ACK */
+ bssgp_ran_inf_err, /* 10.6.4 RAN-INFORMATION-ERROR */
+ bssgp_ran_inf_app_err, /* 10.6.5 RAN-INFORMATION-APPLICATION-ERROR */
+ NULL, /* 0x75 */
+ NULL, /* 0x76 */
+ NULL, /* 0x77 */
+ NULL, /* 0x78 */
+ NULL, /* 0x79 */
+ NULL, /* 0x7a */
+ NULL, /* 0x7b */
+ NULL, /* 0x7c */
+ NULL, /* 0x7d */
+ NULL, /* 0x7e */
+ NULL, /* 0x7f */
NULL, /* NONE */
};
@@ -10923,7 +11482,7 @@ dissect_bssgp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
"Unknown PDU type"));
/* PDU's with msg no lover than this value are converted to common dissection style */
- if(g_pdu_type>0x60){
+ if(g_pdu_type>0x7f){
proto_tree_add_item(bssgp_tree, hf_bssgp_msg_type, tvb, 0, 1, ENC_BIG_ENDIAN);
decode_pdu(&bi);
}else{
@@ -11086,6 +11645,31 @@ proto_register_bssgp(void)
FT_UINT32, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
+ { &hf_bssgp_rat_discriminator,
+ { "RAT discriminator", "bssgp.rat_discriminator",
+ FT_UINT8, BASE_DEC, VALS(bssgp_rat_discriminator_vals), 0x0f,
+ NULL, HFILL }
+ },
+ { &hf_bssgp_nacc_cause,
+ { "NACC Cause", "bssgp.nacc_cause",
+ FT_UINT8, BASE_DEC, VALS(bssgp_nacc_cause_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_bssgp_s13_cause,
+ { "SI3 Cause", "bssgp.s13_cause",
+ FT_UINT8, BASE_DEC, VALS(bssgp_s13_cause_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_bssgp_mbms_data_ch_cause,
+ { "MBMS data channel Cause", "bssgp.mbms_data_ch_cause",
+ FT_UINT8, BASE_DEC, VALS(bssgp_mbms_data_ch_cause_vals), 0x0,
+ NULL, HFILL }
+ },
+ { &hf_bssgp_utra_si_cause,
+ { "UTRA SI Cause", "bssgp.utra_si_cause",
+ FT_UINT8, BASE_DEC, VALS(bssgp_utra_si_cause_vals), 0x0,
+ NULL, HFILL }
+ },
{ &hf_bssgp_num_si_psi,
{ "Number of SI/PSI", "bssgp.num_si_psi",
FT_UINT8, BASE_DEC, NULL, 0xfe,
@@ -11411,6 +11995,15 @@ proto_register_bssgp(void)
FT_UINT8, BASE_DEC, VALS(bssgp_cell_access_mode_vals), 0x01,
NULL, HFILL }
},
+ { &hf_bssgp_Global_ENB_ID_PDU,
+ { "Global-ENB-ID", "bssgp.Global_ENB_ID",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }
+ },
+ { &hf_bssgp_SONtransferRequestContainer_PDU,
+ { "SONtransferRequestContainer", "bssgp.SONtransferRequestContainer",
+ FT_UINT32, BASE_DEC, VALS(s1ap_SONtransferRequestContainer_vals), 0,
+ NULL, HFILL }},
};