summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2011-05-04 17:24:48 +0000
committerAnders Broman <anders.broman@ericsson.com>2011-05-04 17:24:48 +0000
commit16c0bcbdeed22cdbab91e6e06afe88afb8fb269b (patch)
treea955358aa5b30d0baa3643b4aa62ad2a985320e7
parent2a7adf624a1092a82c1d65c404c4fad3881e1af9 (diff)
downloadwireshark-16c0bcbdeed22cdbab91e6e06afe88afb8fb269b.tar.gz
From Pascal Quantin:
Add an expert check for the MS Classmark 2 decoding in UE EUTRA Capability message and a few missing message type display in the column text. svn path=/trunk/; revision=36984
-rw-r--r--asn1/lte-rrc/lte-rrc.cnf37
-rw-r--r--asn1/lte-rrc/packet-lte-rrc-template.c1
-rw-r--r--epan/dissectors/packet-lte-rrc.c43
3 files changed, 68 insertions, 13 deletions
diff --git a/asn1/lte-rrc/lte-rrc.cnf b/asn1/lte-rrc/lte-rrc.cnf
index 9c0b20c85d..cf453f04a1 100644
--- a/asn1/lte-rrc/lte-rrc.cnf
+++ b/asn1/lte-rrc/lte-rrc.cnf
@@ -57,7 +57,7 @@ VarMeasReport
%(DEFAULT_BODY)s
if ((nas_eps_tvb)&&(nas_eps_handle))
- call_dissector(nas_eps_handle,nas_eps_tvb,%(ACTX)s->pinfo, tree);
+ call_dissector(nas_eps_handle,nas_eps_tvb,actx->pinfo, tree);
#.FN_BODY UE-CapabilityRAT-Container
lte_rrc_rat_type_value = -1;
@@ -95,24 +95,36 @@ VarMeasReport
tvbuff_t *ue_eutra_cap_tvb=NULL;
%(DEFAULT_BODY)s
+#.FN_FTR UE-CapabilityRAT-Container/ueCapabilityRAT-Container
if(ue_eutra_cap_tvb){
guint32 length;
proto_item *item;
proto_tree *subtree;
+ guint8 byte;
switch(lte_rrc_rat_type_value){
case 0:
/* eutra */
- dissect_lte_rrc_UE_EUTRA_Capability_PDU(ue_eutra_cap_tvb,%(ACTX)s->pinfo, tree);
+ dissect_lte_rrc_UE_EUTRA_Capability_PDU(ue_eutra_cap_tvb, actx->pinfo, tree);
break;
case 1:
/* utra */
- dissect_rrc_InterRATHandoverInfo_PDU(ue_eutra_cap_tvb, %(ACTX)s->pinfo, tree);
+ dissect_rrc_InterRATHandoverInfo_PDU(ue_eutra_cap_tvb, actx->pinfo, tree);
break;
case 2:
/* geran-cs */
/* Mobile Station Classmark 2 is formatted as TLV with the two first bytes set to 0x33 0x03 */
item = proto_tree_add_text(tree, ue_eutra_cap_tvb, 0, 5, "Mobile Station Classmark 2");
subtree = proto_item_add_subtree(item, ett_lte_rrc_UE_CapabilityRAT_Container);
+ byte = tvb_get_guint8(ue_eutra_cap_tvb, 0);
+ if (byte != 0x33) {
+ expert_add_info_format(actx->pinfo, item, PI_MALFORMED, PI_ERROR,
+ "Unexpected type value (found 0x%02X)", byte);
+ }
+ byte = tvb_get_guint8(ue_eutra_cap_tvb, 1);
+ if (byte != 0x03) {
+ expert_add_info_format(actx->pinfo, item, PI_MALFORMED, PI_ERROR,
+ "Unexpected length value (found %d)", byte);
+ }
de_ms_cm_2(ue_eutra_cap_tvb, subtree, actx->pinfo, 2, 3, NULL, 0);
/* Mobile Station Classmark 3 is formatted as V */
length = tvb_length(ue_eutra_cap_tvb)-5;
@@ -135,8 +147,8 @@ if(ue_eutra_cap_tvb){
default:
break;
}
-
}
+
#.FN_BODY UE-EUTRA-Capability/featureGroupIndicators VAL_PTR = &featureGroupIndicators_tvb
tvbuff_t *featureGroupIndicators_tvb=NULL;
%(DEFAULT_BODY)s
@@ -279,6 +291,14 @@ col_append_str(actx->pinfo->cinfo, COL_INFO, "SecurityModeCommand ");
col_append_str(actx->pinfo->cinfo, COL_INFO, "UECapabilityEnquiry ");
+#.FN_HDR CounterCheck
+
+col_append_str(actx->pinfo->cinfo, COL_INFO, "CounterCheck ");
+
+#.FN_HDR UEInformationRequest-r9
+
+col_append_str(actx->pinfo->cinfo, COL_INFO, "UEInformationRequest-r9 ");
+
#.FN_HDR RRCConnectionReestablishmentRequest
col_append_str(actx->pinfo->cinfo, COL_INFO, "RRCConnectionReestablishmentRequest ");
@@ -330,3 +350,12 @@ col_append_str(actx->pinfo->cinfo, COL_INFO, "ULInformationTransfer ");
#.FN_HDR CounterCheckResponse
col_append_str(actx->pinfo->cinfo, COL_INFO, "CounterCheckResponse ");
+
+#.FN_HDR UEInformationResponse-r9
+
+col_append_str(actx->pinfo->cinfo, COL_INFO, "UEInformationResponse-r9 ");
+
+#.FN_HDR ProximityIndication-r9
+
+col_append_str(actx->pinfo->cinfo, COL_INFO, "ProximityIndication-r9 ");
+
diff --git a/asn1/lte-rrc/packet-lte-rrc-template.c b/asn1/lte-rrc/packet-lte-rrc-template.c
index 4832d3ac09..4c9b3bb4f3 100644
--- a/asn1/lte-rrc/packet-lte-rrc-template.c
+++ b/asn1/lte-rrc/packet-lte-rrc-template.c
@@ -33,6 +33,7 @@
#include <glib.h>
#include <epan/packet.h>
#include <epan/asn1.h>
+#include <epan/expert.h>
#include "packet-ber.h"
#include "packet-per.h"
diff --git a/epan/dissectors/packet-lte-rrc.c b/epan/dissectors/packet-lte-rrc.c
index 88239dcbaa..3e981932c8 100644
--- a/epan/dissectors/packet-lte-rrc.c
+++ b/epan/dissectors/packet-lte-rrc.c
@@ -41,6 +41,7 @@
#include <glib.h>
#include <epan/packet.h>
#include <epan/asn1.h>
+#include <epan/expert.h>
#include "packet-ber.h"
#include "packet-per.h"
@@ -93,7 +94,7 @@ static guint32 lte_rrc_rat_type_value = -1;
#define maxReestabInfo 32
/*--- End of included file: packet-lte-rrc-val.h ---*/
-#line 52 "../../asn1/lte-rrc/packet-lte-rrc-template.c"
+#line 53 "../../asn1/lte-rrc/packet-lte-rrc-template.c"
/* Initialize the protocol and registered fields */
static int proto_lte_rrc = -1;
@@ -1368,7 +1369,7 @@ static int hf_lte_rrc_key_eNodeB_Star = -1; /* Key_eNodeB_Star */
static int hf_lte_rrc_ue_InactiveTime = -1; /* T_ue_InactiveTime */
/*--- End of included file: packet-lte-rrc-hf.c ---*/
-#line 57 "../../asn1/lte-rrc/packet-lte-rrc-template.c"
+#line 58 "../../asn1/lte-rrc/packet-lte-rrc-template.c"
static int hf_lte_rrc_eutra_cap_feat_group_ind_1 = -1;
static int hf_lte_rrc_eutra_cap_feat_group_ind_2 = -1;
@@ -2079,7 +2080,7 @@ static gint ett_lte_rrc_AdditionalReestabInfo = -1;
static gint ett_lte_rrc_RRM_Config = -1;
/*--- End of included file: packet-lte-rrc-ett.c ---*/
-#line 95 "../../asn1/lte-rrc/packet-lte-rrc-template.c"
+#line 96 "../../asn1/lte-rrc/packet-lte-rrc-template.c"
static gint ett_lte_rrc_featureGroupIndicators = -1;
@@ -14344,6 +14345,9 @@ static const per_sequence_t CounterCheck_sequence[] = {
static int
dissect_lte_rrc_CounterCheck(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+
+col_append_str(actx->pinfo->cinfo, COL_INFO, "CounterCheck ");
+
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_lte_rrc_CounterCheck, CounterCheck_sequence);
@@ -14464,6 +14468,9 @@ static const per_sequence_t UEInformationRequest_r9_sequence[] = {
static int
dissect_lte_rrc_UEInformationRequest_r9(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+
+col_append_str(actx->pinfo->cinfo, COL_INFO, "UEInformationRequest-r9 ");
+
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_lte_rrc_UEInformationRequest_r9, UEInformationRequest_r9_sequence);
@@ -16170,14 +16177,16 @@ dissect_lte_rrc_T_ueCapabilityRAT_Container(tvbuff_t *tvb _U_, int offset _U_, a
NO_BOUND, NO_BOUND, FALSE, &ue_eutra_cap_tvb);
+
if(ue_eutra_cap_tvb){
guint32 length;
proto_item *item;
proto_tree *subtree;
+ guint8 byte;
switch(lte_rrc_rat_type_value){
case 0:
/* eutra */
- dissect_lte_rrc_UE_EUTRA_Capability_PDU(ue_eutra_cap_tvb,actx->pinfo, tree);
+ dissect_lte_rrc_UE_EUTRA_Capability_PDU(ue_eutra_cap_tvb, actx->pinfo, tree);
break;
case 1:
/* utra */
@@ -16188,6 +16197,16 @@ if(ue_eutra_cap_tvb){
/* Mobile Station Classmark 2 is formatted as TLV with the two first bytes set to 0x33 0x03 */
item = proto_tree_add_text(tree, ue_eutra_cap_tvb, 0, 5, "Mobile Station Classmark 2");
subtree = proto_item_add_subtree(item, ett_lte_rrc_UE_CapabilityRAT_Container);
+ byte = tvb_get_guint8(ue_eutra_cap_tvb, 0);
+ if (byte != 0x33) {
+ expert_add_info_format(actx->pinfo, item, PI_MALFORMED, PI_ERROR,
+ "Unexpected type value (found 0x%02X)", byte);
+ }
+ byte = tvb_get_guint8(ue_eutra_cap_tvb, 1);
+ if (byte != 0x03) {
+ expert_add_info_format(actx->pinfo, item, PI_MALFORMED, PI_ERROR,
+ "Unexpected length value (found %d)", byte);
+ }
de_ms_cm_2(ue_eutra_cap_tvb, subtree, actx->pinfo, 2, 3, NULL, 0);
/* Mobile Station Classmark 3 is formatted as V */
length = tvb_length(ue_eutra_cap_tvb)-5;
@@ -16210,7 +16229,6 @@ if(ue_eutra_cap_tvb){
default:
break;
}
-
}
return offset;
@@ -16785,6 +16803,7 @@ static int
dissect_lte_rrc_CounterCheckResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
col_append_str(actx->pinfo->cinfo, COL_INFO, "CounterCheckResponse ");
+
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_lte_rrc_CounterCheckResponse, CounterCheckResponse_sequence);
@@ -17064,6 +17083,9 @@ static const per_sequence_t UEInformationResponse_r9_sequence[] = {
static int
dissect_lte_rrc_UEInformationResponse_r9(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+
+col_append_str(actx->pinfo->cinfo, COL_INFO, "UEInformationResponse-r9 ");
+
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_lte_rrc_UEInformationResponse_r9, UEInformationResponse_r9_sequence);
@@ -17221,6 +17243,9 @@ static const per_sequence_t ProximityIndication_r9_sequence[] = {
static int
dissect_lte_rrc_ProximityIndication_r9(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+
+col_append_str(actx->pinfo->cinfo, COL_INFO, "ProximityIndication-r9 ");
+
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
ett_lte_rrc_ProximityIndication_r9, ProximityIndication_r9_sequence);
@@ -19303,7 +19328,7 @@ static int dissect_SystemInformationBlockType1_v890_IEs_PDU(tvbuff_t *tvb _U_, p
/*--- End of included file: packet-lte-rrc-fn.c ---*/
-#line 232 "../../asn1/lte-rrc/packet-lte-rrc-template.c"
+#line 233 "../../asn1/lte-rrc/packet-lte-rrc-template.c"
static void
dissect_lte_rrc_DL_CCCH(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
@@ -24443,7 +24468,7 @@ void proto_register_lte_rrc(void) {
NULL, HFILL }},
/*--- End of included file: packet-lte-rrc-hfarr.c ---*/
-#line 307 "../../asn1/lte-rrc/packet-lte-rrc-template.c"
+#line 308 "../../asn1/lte-rrc/packet-lte-rrc-template.c"
{ &hf_lte_rrc_eutra_cap_feat_group_ind_1,
{ "Indicator 1", "lte-rrc.eutra_cap_feat_group_ind_1",
@@ -25251,7 +25276,7 @@ void proto_register_lte_rrc(void) {
&ett_lte_rrc_RRM_Config,
/*--- End of included file: packet-lte-rrc-ettarr.c ---*/
-#line 442 "../../asn1/lte-rrc/packet-lte-rrc-template.c"
+#line 443 "../../asn1/lte-rrc/packet-lte-rrc-template.c"
&ett_lte_rrc_featureGroupIndicators,
};
@@ -25287,7 +25312,7 @@ void proto_register_lte_rrc(void) {
/*--- End of included file: packet-lte-rrc-dis-reg.c ---*/
-#line 462 "../../asn1/lte-rrc/packet-lte-rrc-template.c"
+#line 463 "../../asn1/lte-rrc/packet-lte-rrc-template.c"
}