Decode PDU Type Extension.

svn path=/trunk/; revision=18731
This commit is contained in:
Anders Broman 2006-07-13 20:13:35 +00:00
parent c2833c436d
commit e9a4ce8196
1 changed files with 73 additions and 37 deletions

View File

@ -79,6 +79,8 @@ static int hf_bssgp_ra_discriminator = -1;
static int hf_bssgp_appid = -1;
static int hf_bssgp_rcid = -1;
static int hf_bssgp_rrc_si_msg_type = -1;
static int hf_ran_inf_req_pdu_type_ext = -1;
static int hf_ran_inf_pdu_type_ext = -1;
static int hf_bssgp_nri = -1;
static int hf_bssgp_imsi = -1;
static int hf_bssgp_imei = -1;
@ -111,7 +113,7 @@ static gint ett_bssgp_deciphering_keys = -1;
static gint ett_bssgp_lcs_cause = -1;
static gint ett_bssgp_lcs_capability = -1;
static gint ett_bssgp_rrlp_flags = -1;
static gint ett_bssgp_ran_information_indications = -1;
static gint ett_bssgp_rim_pdu_indications = -1;
static gint ett_bssgp_mcc = -1;
static gint ett_bssgp_mnc = -1;
static gint ett_bssgp_routeing_area = -1;
@ -306,7 +308,7 @@ static const value_string tab_bssgp_pdu_types[] = {
#define BSSGP_IEI_RIM_SEQUENCE_NUMBER 0x4c
#define BSSGP_IEI_RAN_INFORMATION_REQUEST_APPLICATION_CONTAINER 0x4d
#define BSSGP_IEI_RAN_INFORMATION_APPLICATION_CONTAINER 0x4e
#define BSSGP_IEI_RAN_INFORMATION_INDICATIONS 0x4f
#define BSSGP_IEI_RIM_PDU_INDICATIONS 0x4f
#define BSSGP_IEI_NUMBER_OF_CONTAINER_UNITS 0x50
#define BSSGP_IEI_PFC_FLOW_CONTROL_PARAMETERS 0x52
#define BSSGP_IEI_GLOBAL_CN_ID 0x53
@ -390,17 +392,17 @@ static const value_string tab_bssgp_ie_types[] = {
{ BSSGP_IEI_LCS_PRIORITY, "LCS Priority" },
{ BSSGP_IEI_LCS_CAUSE, "LCS Cause" },
{ BSSGP_IEI_LCS_CAPABILITY, "LCS Capability" },
{ BSSGP_IEI_RRLP_FLAGS, "RRLP Flags" },
{ BSSGP_IEI_RIM_APPLICATION_IDENTITY, "RIM Application Identity" },
{ BSSGP_IEI_RRLP_FLAGS, "RRLP Flags" },
{ BSSGP_IEI_RIM_APPLICATION_IDENTITY, "RIM Application Identity" },
{ BSSGP_IEI_RAN_INFORMATION_APPLICATION_CONTAINER, "RAN INFORMATION Application Container" },
{ BSSGP_IEI_RIM_SEQUENCE_NUMBER, "RIM Sequence Number" },
{ BSSGP_IEI_RAN_INFORMATION_REQUEST_CONTAINER_UNIT, "RAN INFORMATION REQUEST RIM Container" },
{ BSSGP_IEI_RAN_INFORMATION_CONTAINER_UNIT, "RAN INFORMATION RIM Container" },
{ BSSGP_IEI_RAN_INFORMATION_INDICATIONS, "RAN INFORMATION Indications" },
{ BSSGP_IEI_RIM_PROTOCOL_VERSION, "RIM Protocol Version Number" },
{ BSSGP_IEI_NUMBER_OF_CONTAINER_UNITS, "Number of Container Units" },
{ BSSGP_IEI_PFC_FLOW_CONTROL_PARAMETERS, "PFC Flow Control Parameters" },
{ BSSGP_IEI_GLOBAL_CN_ID, "Global CN Id" },
{ BSSGP_IEI_RIM_SEQUENCE_NUMBER, "RIM Sequence Number" },
{ BSSGP_IEI_RAN_INFORMATION_REQUEST_CONTAINER_UNIT, "RAN INFORMATION REQUEST RIM Container" },
{ BSSGP_IEI_RAN_INFORMATION_CONTAINER_UNIT, "RAN INFORMATION RIM Container" },
{ BSSGP_IEI_RIM_PDU_INDICATIONS, "RIM PDU Indications" },
{ BSSGP_IEI_RIM_PROTOCOL_VERSION, "RIM Protocol Version Number" },
{ BSSGP_IEI_NUMBER_OF_CONTAINER_UNITS, "Number of Container Units" },
{ BSSGP_IEI_PFC_FLOW_CONTROL_PARAMETERS, "PFC Flow Control Parameters" },
{ BSSGP_IEI_GLOBAL_CN_ID, "Global CN Id" },
{ 0, NULL },
};
@ -432,6 +434,7 @@ typedef struct {
proto_tree *parent_tree;
gboolean dl_data;
gboolean ul_data;
guint8 pdutype;
} build_info_t;
static guint8
@ -4079,6 +4082,7 @@ decode_iei_application_error(bssgp_ie_t *ie, build_info_t *bi, int ie_start_offs
}
}
static void
decode_iei_ran_information_request_application_container(bssgp_ie_t *ie, build_info_t *bi, int ie_start_offset) {
proto_item *ti;
@ -4173,11 +4177,33 @@ Packet System Information Type 16 11.2.25c
}
}
}
static const value_string ran_inf_req_pdu_type_ext_vals[] = {
{ 0,"RAN-INFORMATION-REQUEST/Stop PDU" },
{ 1,"RAN-INFORMATION-REQUEST/Single Report PDU" },
{ 2,"RAN-INFORMATION-REQUEST/Multiple Report PDU" },
{ 3,"Reserved" },
{ 4,"Reserved" },
{ 5,"Reserved" },
{ 6,"Reserved" },
{ 7,"Reserved" },
{ 0, NULL },
};
static const value_string ran_inf_pdu_type_ext_vals[] = {
{ 0,"RAN-INFORMATION/Stop PDU" },
{ 1,"RAN-INFORMATION/Single Report PDU" },
{ 2,"RAN-INFORMATION/Initial Multiple Report PDU" },
{ 3,"RAN-INFORMATION/Multiple Report PDU" },
{ 4,"RAN-INFORMATION/End PDU" },
{ 5,"Reserved" },
{ 6,"Reserved" },
{ 7,"Reserved" },
{ 0, NULL },
};
/* 11.3.65 RIM PDU Indications 3GPP TS 48.018 version 6.7.0 Release 6 */
static void
decode_iei_ran_information_indications(bssgp_ie_t *ie, build_info_t *bi, int ie_start_offset) {
const guint8 MASK_END = 0x02;
decode_iei_rim_pdu_indications(bssgp_ie_t *ie, build_info_t *bi, int ie_start_offset) {
const guint8 MASK_EXT = 0x0E;
const guint8 MASK_ACK = 0x01;
proto_item *ti, *pi;
proto_tree *tf;
@ -4188,14 +4214,15 @@ decode_iei_ran_information_indications(bssgp_ie_t *ie, build_info_t *bi, int ie_
return;
}
ti = bssgp_proto_tree_add_ie(ie, bi, ie_start_offset);
tf = proto_item_add_subtree(ti, ett_bssgp_ran_information_indications);
tf = proto_item_add_subtree(ti, ett_bssgp_rim_pdu_indications);
data = tvb_get_guint8(bi->tvb, bi->offset);
value = get_masked_guint8(data, MASK_END);
pi = proto_tree_add_bitfield8(tf, bi->tvb, bi->offset, MASK_END);
proto_item_append_text(pi, "END: %sEND indicated",
value == 0 ? "No " : "");
if (bi->pdutype == BSSGP_IEI_RAN_INFORMATION_CONTAINER_UNIT) {
proto_tree_add_item(tf, hf_ran_inf_pdu_type_ext, bi->tvb, bi->offset, 1, FALSE);
}else{
proto_tree_add_item(tf, hf_ran_inf_req_pdu_type_ext, bi->tvb, bi->offset, 1, FALSE);
}
value = get_masked_guint8(data, MASK_ACK);
pi = proto_tree_add_bitfield8(tf, bi->tvb, bi->offset, MASK_ACK);
@ -4562,8 +4589,8 @@ decode_ie(bssgp_ie_t *ie, build_info_t *bi) {
break;
case BSSGP_IEI_RAN_INFORMATION_INDICATIONS:
decode_iei_ran_information_indications(ie, bi, org_offset);
case BSSGP_IEI_RIM_PDU_INDICATIONS:
decode_iei_rim_pdu_indications(ie, bi, org_offset);
break;
case BSSGP_IEI_NUMBER_OF_CONTAINER_UNITS:
decode_iei_number_of_container_units(ie, bi, org_offset);
@ -5596,7 +5623,7 @@ decode_pdu_ran_information(build_info_t *bi) {
{ BSSGP_IEI_RIM_SEQUENCE_NUMBER, "Sequence Number",
BSSGP_IE_PRESENCE_M, BSSGP_IE_FORMAT_TLV, BSSGP_UNKNOWN, 6 },
{ BSSGP_IEI_RAN_INFORMATION_INDICATIONS, "PDU Indications",
{ BSSGP_IEI_RIM_PDU_INDICATIONS, "PDU Indications",
BSSGP_IE_PRESENCE_M, BSSGP_IE_FORMAT_TLV, BSSGP_UNKNOWN, 3 },
{ BSSGP_IEI_RIM_PROTOCOL_VERSION, "Protocol Version",
@ -5633,7 +5660,7 @@ decode_pdu_ran_information_request(build_info_t *bi) {
{ BSSGP_IEI_RIM_SEQUENCE_NUMBER, "Sequence Number",
BSSGP_IE_PRESENCE_M, BSSGP_IE_FORMAT_TLV, BSSGP_UNKNOWN, 6 },
{ BSSGP_IEI_RAN_INFORMATION_INDICATIONS, "PDU Indications",
{ BSSGP_IEI_RIM_PDU_INDICATIONS, "PDU Indications",
BSSGP_IE_PRESENCE_M, BSSGP_IE_FORMAT_TLV, BSSGP_UNKNOWN, 3 },
{ BSSGP_IEI_RIM_PROTOCOL_VERSION, "Protocol Version",
@ -5724,8 +5751,8 @@ decode_pdu_ran_information_application_error(build_info_t *bi) {
{ BSSGP_IEI_RIM_APPLICATION_IDENTITY, "Application Identity",
BSSGP_IE_PRESENCE_M, BSSGP_IE_FORMAT_TLV, BSSGP_UNKNOWN, 3 },
/* pdu indication, I hope RAN_INFORMATION_INDICATIONS decode it right, it use the same IEI so it should... */
{ BSSGP_IEI_RAN_INFORMATION_INDICATIONS, "PDU Indications",
/* pdu indication, I hope RIM_PDU_INDICATIONS decode it right, it use the same IEI so it should... */
{ BSSGP_IEI_RIM_PDU_INDICATIONS, "PDU Indications",
BSSGP_IE_PRESENCE_M, BSSGP_IE_FORMAT_TLV, BSSGP_UNKNOWN, 3 },
{ BSSGP_IEI_RIM_SEQUENCE_NUMBER, "Sequence Number",
@ -5746,9 +5773,9 @@ decode_pdu_ran_information_application_error(build_info_t *bi) {
static void
decode_pdu(guint8 pdutype, build_info_t *bi) {
decode_pdu(build_info_t *bi) {
switch (pdutype) {
switch (bi->pdutype) {
case BSSGP_PDU_DL_UNITDATA:
decode_pdu_dl_unitdata(bi);
break;
@ -5910,8 +5937,7 @@ decode_pdu(guint8 pdutype, build_info_t *bi) {
static void
dissect_bssgp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
guint8 pdutype;
build_info_t bi = { NULL, 0, NULL, NULL, NULL, FALSE, FALSE };
build_info_t bi = { NULL, 0, NULL, NULL, NULL, FALSE, FALSE, 0 };
proto_item *ti;
proto_tree *bssgp_tree;
@ -5928,26 +5954,26 @@ dissect_bssgp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if (check_col(pinfo->cinfo, COL_INFO))
col_clear(pinfo->cinfo, COL_INFO);
pdutype = tvb_get_guint8(tvb, 0);
bi.pdutype = tvb_get_guint8(tvb, 0);
bi.offset++;
if (tree) {
ti = proto_tree_add_item(tree, proto_bssgp, tvb, 0, -1, FALSE);
bssgp_tree = proto_item_add_subtree(ti, ett_bssgp);
proto_tree_add_uint_format_value(bssgp_tree, hf_bssgp_pdu_type, tvb, 0, 1,
pdutype,
bi.pdutype,
"%s (%#02x)",
val_to_str(pdutype, tab_bssgp_pdu_types,
"Unknown"), pdutype);
val_to_str(bi.pdutype, tab_bssgp_pdu_types,
"Unknown"), bi.pdutype);
bi.bssgp_tree = bssgp_tree;
}
if (check_col(pinfo->cinfo, COL_INFO)) {
col_add_str(pinfo->cinfo, COL_INFO, val_to_str(pdutype,
col_add_str(pinfo->cinfo, COL_INFO, val_to_str(bi.pdutype,
tab_bssgp_pdu_types,
"Unknown PDU type"));
}
decode_pdu(pdutype, &bi);
decode_pdu(&bi);
}
void
@ -6028,6 +6054,16 @@ proto_register_bssgp(void)
{ "RRC SI type", "bssgp.rrc_si_type",
FT_UINT8, BASE_HEX, VALS(gsm_a_dtap_msg_rr_strings), 0x0,
"RRC SI type", HFILL }
},
{ &hf_ran_inf_req_pdu_type_ext,
{ "PDU Type Extension", "bssgp.ran_inf_req_pdu_type_ext",
FT_UINT8, BASE_DEC, VALS(ran_inf_req_pdu_type_ext_vals), 0x0e,
"PDU Type Extension", HFILL }
},
{ &hf_ran_inf_pdu_type_ext,
{ "PDU Type Extension", "bssgp.ran_req_pdu_type_ext",
FT_UINT8, BASE_DEC, VALS(ran_inf_pdu_type_ext_vals), 0x0e,
"PDU Type Extension", HFILL }
},
{ &hf_bssgp_tmsi_ptmsi,
{ "TMSI/PTMSI", "bssgp.tmsi_ptmsi",
@ -6079,7 +6115,7 @@ proto_register_bssgp(void)
&ett_bssgp_lcs_cause,
&ett_bssgp_lcs_capability,
&ett_bssgp_rrlp_flags,
&ett_bssgp_ran_information_indications,
&ett_bssgp_rim_pdu_indications,
&ett_bssgp_mcc,
&ett_bssgp_mnc,
&ett_bssgp_routeing_area,