From a72fc72061772c2155fc4fc693743cb9cec19a3e Mon Sep 17 00:00:00 2001 From: Michael Mann Date: Tue, 3 Sep 2013 02:26:50 +0000 Subject: [PATCH] Batch of filterable expert info. svn path=/trunk/; revision=51689 --- epan/dissectors/packet-bssgp.c | 145 ++++++++++++++------------ epan/dissectors/packet-gsm_a_common.c | 27 +++-- epan/dissectors/packet-gsm_a_common.h | 9 +- epan/dissectors/packet-gsm_a_dtap.c | 37 +++++-- epan/dissectors/packet-gsm_a_gm.c | 140 +++++++++++++------------ epan/dissectors/packet-gsm_a_rr.c | 24 +++-- epan/dissectors/packet-gsm_rlcmac.c | 13 ++- 7 files changed, 232 insertions(+), 163 deletions(-) diff --git a/epan/dissectors/packet-bssgp.c b/epan/dissectors/packet-bssgp.c index 80b0c9bb07..d5c6ec4672 100644 --- a/epan/dissectors/packet-bssgp.c +++ b/epan/dissectors/packet-bssgp.c @@ -198,6 +198,8 @@ static gint ett_bssgp_list_of_setup_pfcs = -1; static gint ett_bssgp_pfc_flow_control_parameters_pfc = -1; static gint ett_bssgp_ra_id = -1; +static expert_field ei_bssgp_extraneous_data = EI_INIT; + /* PDU type coding, v6.5.0, table 11.3.26, p 80 */ #define BSSGP_PDU_DL_UNITDATA 0x00 #define BSSGP_PDU_UL_UNITDATA 0x01 @@ -3980,7 +3982,7 @@ bssgp_dl_unitdata(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 o /* Initial LLC-PDU (note 8) LLC-PDU/11.3.15 O TLV 2-? */ ELEM_OPT_TELV(0x0e, BSSGP_PDU_TYPE, DE_BSSGP_LLC_PDU, " - initial"); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.2.2 UL-UNITDATA @@ -4018,7 +4020,7 @@ bssgp_ul_unitdata(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 o /* LLC-PDU (note) LLC-PDU/11.3.15 M TLV 2-? */ ELEM_MAND_TELV(0x0e, BSSGP_PDU_TYPE, DE_BSSGP_LLC_PDU, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.2.3 RA-CAPABILITY @@ -4041,7 +4043,7 @@ bssgp_ra_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset /* MS Radio Access Capability MS Radio Access Capability/11.3.22 M TLV 7-? */ ELEM_MAND_TELV(BSSGP_IEI_MS_RADIO_ACCESS_CAPABILITY, GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -4077,7 +4079,7 @@ bssgp_dl_mbms_unitdata(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guin ELEM_MAND_TELV(0x0e, BSSGP_PDU_TYPE, DE_BSSGP_LLC_PDU, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -4106,7 +4108,7 @@ bssgp_ul_mbms_unitdata(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guin /* LLC-PDU (note 1) LLC-PDU/11.3.15 M TLV 2-? */ ELEM_MAND_TELV(0x0e, BSSGP_PDU_TYPE, DE_BSSGP_LLC_PDU, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -4148,7 +4150,7 @@ bssgp_paging_ps(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 off /* P-TMSI TMSI/11.3.36 O TLV 6 */ ELEM_OPT_TELV(BSSGP_IEI_TMSI,GSM_A_PDU_TYPE_RR, DE_RR_TMSI_PTMSI, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -4190,7 +4192,7 @@ bssgp_paging_cs(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 off /* Global CN-Id (note 2) Global CN-Id/11.3.69 O TLV 7 */ ELEM_OPT_TELV(0x53, SGSAP_PDU_TYPE, DE_SGSAP_GLOBAL_CN_ID, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -4220,7 +4222,7 @@ bssgp_ra_cap_upd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 of /* MS Radio Access Capability MS Radio Access Capability/11.3.22 C TLV 7-? */ ELEM_OPT_TELV(BSSGP_IEI_MS_RADIO_ACCESS_CAPABILITY, GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -4251,7 +4253,7 @@ bssgp_ra_cap_upd_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3 /* MS Radio Access Capability MS Radio Access Capability/11.3.22 C TLV 7-? */ ELEM_OPT_TELV(BSSGP_IEI_MS_RADIO_ACCESS_CAPABILITY, GSM_A_PDU_TYPE_GM, DE_MS_RAD_ACC_CAP , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -4280,7 +4282,7 @@ bssgp_ra_status(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 off /* Radio Cause Radio Cause/11.3.29 M TLV 3 */ ELEM_MAND_TELV(BSSGP_IEI_RADIO_CAUSE, BSSGP_PDU_TYPE, DE_BSSGP_RA_CAUSE , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.3.6 SUSPEND @@ -4304,7 +4306,7 @@ bssgp_suspend(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offse /* Routeing Area Routeing Area/11.3.31 M TLV 8 */ ELEM_MAND_TELV(0x1b,GSM_A_PDU_TYPE_GM, DE_RAI, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.3.7 SUSPEND-ACK @@ -4331,7 +4333,7 @@ bssgp_suspend_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 o ELEM_MAND_TELV(0x1d,BSSGP_PDU_TYPE, DE_BBSGP_SUSPEND_REF_NO, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.3.8 SUSPEND-NACK @@ -4358,7 +4360,7 @@ bssgp_suspend_nack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 /* Cause Cause/11.3.8 O TLV 3 */ ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.3.9 RESUME @@ -4384,7 +4386,7 @@ bssgp_resume(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset /* Suspend Reference Number Suspend Reference Number/11.3.33 M TLV 3 */ ELEM_MAND_TELV(0x1d,BSSGP_PDU_TYPE, DE_BBSGP_SUSPEND_REF_NO, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.3.10 RESUME-ACK @@ -4409,7 +4411,7 @@ bssgp_resume_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 of /* Routeing Area Routeing Area/11.3.31 M TLV 8 */ ELEM_MAND_TELV(0x1b,GSM_A_PDU_TYPE_GM, DE_RAI, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.3.11 RESUME-NACK @@ -4436,7 +4438,7 @@ bssgp_resume_nack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 o /* Cause Cause/11.3.8 O TLV 3 */ ELEM_OPT_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.4 PDU functional definitions and contents at NM SAP @@ -4465,7 +4467,7 @@ bssgp_flush_ll(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offs /* NSEI (new) NSEI/11.3.48 O (note) TLV 4 */ ELEM_OPT_TELV(0x3e, GSM_A_PDU_TYPE_RR, DE_BSSGP_NSEI , " - New"); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.4.2 FLUSH-LL-ACK @@ -4497,7 +4499,7 @@ bssgp_flush_ll_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 ELEM_OPT_TELV(0x3e, GSM_A_PDU_TYPE_RR, DE_BSSGP_NSEI , " - New"); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.4.3 LLC-DISCARDED @@ -4526,7 +4528,7 @@ bssgp_llc_discarded(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 /* PFI (note) PFI/11.3.42 O TLV 3 */ ELEM_OPT_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -4565,7 +4567,7 @@ bssgp_flow_control_bvc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guin /* Flow Control Granularity (note) Flow Control Granularity/11.3.102 O TLV 3 */ ELEM_OPT_TELV(0x7e, BSSGP_PDU_TYPE, DE_BSSGP_FLOW_CONTROL_GRAN , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -4591,7 +4593,7 @@ bssgp_flow_control_bvc_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, /* Tag Tag/11.3.34 M TLV 3 */ ELEM_MAND_TELV(BSSGP_IEI_TAG, BSSGP_PDU_TYPE, DE_BSSGP_TAG , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -4627,7 +4629,7 @@ bssgp_flow_control_ms(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint /* Flow Control Granularity (note) Flow Control Granularity/11.3.102 O TLV 3 */ ELEM_OPT_TELV(0x7e, BSSGP_PDU_TYPE, DE_BSSGP_FLOW_CONTROL_GRAN , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.4.7 FLOW-CONTROL-MS-ACK @@ -4652,7 +4654,7 @@ bssgp_flow_control_ms_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, g /* Tag Tag/11.3.34 M TLV 3 */ ELEM_MAND_TELV(BSSGP_IEI_TAG, BSSGP_PDU_TYPE, DE_BSSGP_TAG , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.4.8 BVC-BLOCK @@ -4677,7 +4679,7 @@ bssgp_bvc_block(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 off /* Cause Cause/11.3.8 M TLV 3 */ ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -4700,7 +4702,7 @@ bssgp_bvc_block_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 /* BVCI BVCI/11.3.6 M TLV 4 */ ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -4724,7 +4726,7 @@ bssgp_bvc_un_block(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.4.11 BVC-UNBLOCK-ACK @@ -4747,7 +4749,7 @@ bssgp_bvc_un_block_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guin /* BVCI BVCI/11.3.6 M TLV 4 */ ELEM_MAND_TELV(BSSGP_IEI_BVCI, BSSGP_PDU_TYPE, DE_BSSGP_BVCI , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -4778,7 +4780,7 @@ bssgp_bvc_reset(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 off /* Extended Feature Bitmap (note 3) Extended Feature Bitmap/11.3.84 O TLV 3 */ ELEM_OPT_TELV(0x69, BSSGP_PDU_TYPE, DE_BSSGP_EXT_FEATURE_BITMAP , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -4807,7 +4809,7 @@ bssgp_bvc_reset_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 /* Extended Feature Bitmap (note 3) Extended Feature Bitmap/11.3.84 O TLV 3 */ ELEM_OPT_TELV(0x69, BSSGP_PDU_TYPE, DE_BSSGP_EXT_FEATURE_BITMAP , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -4833,7 +4835,7 @@ bssgp_status(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset /* PDU In Error (note) PDU In Error/11.3.24 O TLV 3-? */ ELEM_MAND_TELV(0x15, BSSGP_PDU_TYPE, DE_BSSGP_PDU_IN_ERROR , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.4.15 SGSN-INVOKE-TRACE @@ -4866,7 +4868,7 @@ bssgp_sgsn_invoke_trace(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gui /* TransactionId TransactionId/11.3.39 O TLV 4 */ ELEM_OPT_TELV(0x23, BSSGP_PDU_TYPE, DE_BSSGP_TRANSACTION_ID , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -4891,7 +4893,7 @@ bssgp_download_bss_pfc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guin /* PFI PFI/11.3.42 M TLV 3 */ ELEM_MAND_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -4938,7 +4940,7 @@ bssgp_create_bss_pfc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3 */ ELEM_OPT_TELV(0x81, BSSGP_PDU_TYPE, DE_BSSGP_SUB_PROF_ID_F_RAT_FRQ_PRIO, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -4969,7 +4971,7 @@ bssgp_create_bss_pfc_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gu /* Cause Cause/11.3.8 O TLV 3 */ ELEM_OPT_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.4.19 CREATE-BSS-PFC-NACK @@ -4997,7 +4999,7 @@ bssgp_create_bss_pfc_nack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, g /* Cause Cause/11.3.8 M TLV 3 */ ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.4.20 MODIFY-BSS-PFC @@ -5023,7 +5025,7 @@ bssgp_modify_bss_pfc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3 /* ABQP ABQP/11.3.43 M TLV 13-? */ ELEM_MAND_TELV(0x3a , GSM_A_PDU_TYPE_GM, DE_QOS , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -5053,7 +5055,7 @@ bssgp_modify_bss_pfc_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gu ELEM_MAND_TELV(0x3a , GSM_A_PDU_TYPE_GM, DE_QOS , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.4.22 DELETE-BSS-PFC @@ -5077,7 +5079,7 @@ bssgp_delete_bss_pfc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3 /* PFI PFI/11.3.42 M TLV 3 */ ELEM_MAND_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.4.23 DELETE-BSS-PFC-ACK @@ -5101,7 +5103,7 @@ bssgp_delete_bss_pfc_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gu /* PFI PFI/11.3.42 M TLV 3 */ ELEM_MAND_TELV(BSSGP_IEI_PFI , GSM_A_PDU_TYPE_GM, DE_PACKET_FLOW_ID , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.4.24 FLOW-CONTROL-PFC @@ -5135,7 +5137,7 @@ bssgp_flow_cntrl_pfc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3 /* Flow Control Granularity (note) Flow Control Granularity/11.3.102 O TLV 3 */ ELEM_OPT_TELV(0x7e, BSSGP_PDU_TYPE, DE_BSSGP_FLOW_CONTROL_GRAN , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.4.25 FLOW-CONTROL-PFC-ACK @@ -5161,7 +5163,7 @@ bssgp_flow_cntrl_pfc_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gu /* Tag Tag/11.3.34 M TLV 3 */ ELEM_MAND_TELV(BSSGP_IEI_TAG, BSSGP_PDU_TYPE, DE_BSSGP_TAG , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.4.26 DELETE-BSS-PFC-REQ @@ -5187,7 +5189,7 @@ bssgp_delete_bss_pfc_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gu /* Cause Cause/11.3.8 M TLV 3 */ ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.4.27 PS-HANDOVER-REQUIRED @@ -5237,7 +5239,7 @@ bssgp_ps_ho_required(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3 /* TAC (note 6) Tracking Area Code/11.3.110 C TLV 5 */ ELEM_OPT_TELV(0x86, NAS_PDU_TYPE_EMM, DE_EMM_TRAC_AREA_ID, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.4.28 PS-HANDOVER-REQUIRED-ACK @@ -5271,7 +5273,7 @@ bssgp_ps_ho_required_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gu */ ELEM_MAND_TELV(0x6b,BSSGP_PDU_TYPE, DE_BSSGP_TRG_TO_SRC_TRANSP_CONT, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -5296,7 +5298,7 @@ bssgp_ps_ho_required_nack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, g /* Cause Cause/11.3.8 M TLV 3 */ ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.4.30 PS-HANDOVER-REQUEST @@ -5340,7 +5342,7 @@ bssgp_ps_ho_request(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 /* Reliable Inter RAT Handover Info (note 3) Reliable Inter RAT Handover Info/11.3.107 C TLV 3 */ ELEM_OPT_TELV(0x83,BSSGP_PDU_TYPE, DE_BSSGP_RELIABLE_INTER_RAT_HO_INF, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -5367,7 +5369,7 @@ bssgp_ps_ho_request_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gui /* Target BSS to Source BSS Transparent Container Target BSS to Source BSS Transparent Container/11.3.80 M TLV 3-? */ ELEM_MAND_TELV(0x65,BSSGP_PDU_TYPE, DE_BSSGP_TARGET_BSS_TO_SOURCE_BSS_TRANSP_CONT, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.4.32 PS-HANDOVER-REQUEST-NACK @@ -5391,7 +5393,7 @@ bssgp_ps_ho_request_nack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gu /* Cause Cause/11.3.8 M TLV 3 */ ELEM_MAND_TELV(BSSGP_IEI_CAUSE,BSSGP_PDU_TYPE, DE_BSSGP_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -5420,7 +5422,7 @@ bssgp_ps_ho_complete(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3 /* Request for Inter RAT Handover Info (note 2) Request for Inter RAT Handover Info/11.3.106 C TLV 3 */ ELEM_OPT_TELV(0x82, BSSGP_PDU_TYPE, DE_BSSGP_REQ_FOR_INTER_RAT_HO_INFO , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.4.34 PS-HANDOVER-CANCEL @@ -5452,7 +5454,7 @@ bssgp_ps_ho_cancel(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 /* Target eNB Identifier (note 1) (note 2) eNB Identifier/11.3.103 C TLV 3-n */ ELEM_OPT_TELV(0x7f,BSSGP_PDU_TYPE, DE_BSSGP_ENB_ID, " - Target"); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -5484,7 +5486,7 @@ bssgp_ps_ho_complete_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gu /* E-UTRAN Inter RAT Handover Info E-UTRAN Inter RAT Handover Info/11.3.104 C (note 1) TLV 3-? */ ELEM_OPT_TELV(0x80, BSSGP_PDU_TYPE, DE_BSSGP_E_UTRAN_INTER_RAT_HO_INFO, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.5 PDU functional definitions and contents at LCS SAP @@ -5535,7 +5537,7 @@ bssgp_perform_loc_request(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, g /* Requested GANSS Assistance Data (note 6) Requested GANSS Assistance Data/11.3.99 O TLV 3-? */ ELEM_OPT_TLV(0x7b, GSM_A_PDU_TYPE_BSSMAP, BE_GANSS_ASS_DTA, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -5572,7 +5574,7 @@ bssgp_perform_loc_response(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, /* GANSS Positioning Data GANSS Positioning Data /11.3.101 O TLV 3-? */ ELEM_OPT_TELV(0x7d, GSM_A_PDU_TYPE_BSSMAP, BE_GANSS_POS_DTA, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -5599,7 +5601,7 @@ bssgp_perform_loc_response_abort(tvbuff_t *tvb, proto_tree *tree, packet_info *p /* LCS Cause LCS Cause/11.3.58 M TLV 3-? */ ELEM_MAND_TELV(BSSGP_IEI_LCS_CAUSE, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -5628,7 +5630,7 @@ bssgp_pos_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offse /* RRLP APDU RRLP APDU/11.3.49 M TLV 3-? */ ELEM_MAND_TELV(BSSGP_IEI_RRLP_APDU, BSSGP_PDU_TYPE, DE_BSSGP_RRLP_APDU , NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -5659,7 +5661,7 @@ bssgp_pos_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offs /* LCS Cause b) LCS Cause/11.3.58 O TLV 3-? */ ELEM_OPT_TELV(BSSGP_IEI_LCS_CAUSE, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -5686,7 +5688,7 @@ bssgp_ran_inf_request(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint /* 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, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -5713,7 +5715,7 @@ bssgp_ran_inf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offse 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, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -5742,7 +5744,7 @@ bssgp_ran_inf_request_ack(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, g /* 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, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -5772,7 +5774,7 @@ bssgp_ran_inf_err(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 o /* 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, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.6.5 RAN-INFORMATION-APPLICATION-ERROR @@ -5800,7 +5802,7 @@ bssgp_ran_inf_app_err(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint /* 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, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -5844,7 +5846,7 @@ bssgp_mbms_session_start_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo ELEM_MAND_TELV(0x72, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_REP_NO, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.7.2 MBMS-SESSION-START-RESPONSE @@ -5873,7 +5875,7 @@ bssgp_mbms_session_start_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinf /* MBMS Response MBMS Response/ 11.3.74 M TLV 3 */ ELEM_OPT_TELV(0x60, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_RESPONSE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* @@ -5901,7 +5903,7 @@ bssgp_mbms_session_stop_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, /* MBMS Stop Cause MBMS Stop Cause/11.3.78 M TLV 3 */ ELEM_OPT_TELV(0x63, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_STOP_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.7.4 MBMS-SESSION-STOP-RESPONSE @@ -5928,7 +5930,7 @@ bssgp_mbms_session_stop_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo /* MBMS Response MBMS Response/ 11.3.74 M TLV 3 */ ELEM_OPT_TELV(0x60, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_RESPONSE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.7.5 MBMS-SESSION-UPDATE-REQUEST @@ -5971,7 +5973,7 @@ bssgp_mbms_session_update_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinf /* MBMS Session Repetition Number MBMS Session Repetition Number/11.3.93 O TLV 3 */ ELEM_MAND_TELV(0x72, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_SESSION_REP_NO, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } /* * 10.7.6 MBMS-SESSION-UPDATE-RESPONSE @@ -6000,7 +6002,7 @@ bssgp_mbms_session_uptate_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pin /* MBMS Response MBMS Response/ 11.3.74 M TLV 3 */ ELEM_OPT_TELV(0x60, BSSGP_PDU_TYPE, DE_BSSGP_MBMS_RESPONSE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_bssgp_extraneous_data); } static const value_string bssgp_msg_strings[] = { @@ -6899,6 +6901,13 @@ proto_register_bssgp(void) gint *ett[NUM_INDIVIDUAL_ELEMS + NUM_BSSGP_ELEM + NUM_BSSGP_MSG]; + + static ei_register_info ei[] = { + { &ei_bssgp_extraneous_data, { "bssgp.extraneous_data", PI_PROTOCOL, PI_NOTE, "Extraneous Data, dissector bug or later version spec(report to wireshark.org)", EXPFILL }}, + }; + + expert_module_t* expert_bssgp; + ett[0] = &ett_bssgp; ett[1] = &ett_bssgp_list_of_setup_pfcs; ett[2] = &ett_bssgp_pfcs_to_be_set_up_list_t10; @@ -6930,6 +6939,8 @@ proto_register_bssgp(void) /* Required function calls to register the header fields and subtrees used */ proto_register_field_array(proto_bssgp, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_bssgp = expert_register_protocol(proto_bssgp); + expert_register_field_array(expert_bssgp, ei, array_length(ei)); register_dissector("bssgp", dissect_bssgp, proto_bssgp); /* Register configuration options */ diff --git a/epan/dissectors/packet-gsm_a_common.c b/epan/dissectors/packet-gsm_a_common.c index 7b327b7db1..c50638c191 100644 --- a/epan/dissectors/packet-gsm_a_common.c +++ b/epan/dissectors/packet-gsm_a_common.c @@ -732,6 +732,8 @@ static int hf_gsm_a_geo_loc_uncertainty_radius = -1; static int hf_gsm_a_geo_loc_offset_angle = -1; static int hf_gsm_a_geo_loc_included_angle = -1; +static expert_field ei_gsm_a_extraneous_data = EI_INIT; + static char a_bigbuf[1024]; sccp_msg_info_t* sccp_msg; @@ -2359,7 +2361,7 @@ de_mid(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, guin break; } - EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo, &ei_gsm_a_extraneous_data); return(curr_offset - offset); } @@ -2462,7 +2464,7 @@ de_ms_cm_2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, curr_offset++; - EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset,pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo, &ei_gsm_a_extraneous_data); return(curr_offset - offset); } @@ -3208,7 +3210,7 @@ de_ms_cm_3(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, /* translate to byte offset (we already know that we are on an octet boundary) */ curr_offset = bit_offset >> 3; - EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo, &ei_gsm_a_extraneous_data); return(len); } @@ -3397,7 +3399,7 @@ de_cn_common_gsm_map_nas_sys_info(tvbuff_t *tvb, proto_tree *tree, packet_info * proto_tree_add_item(tree, hf_gsm_a_lac, tvb, curr_offset, 2, ENC_BIG_ENDIAN); curr_offset += 2; - EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo, &ei_gsm_a_extraneous_data); return(curr_offset - offset); } @@ -3423,7 +3425,7 @@ de_cs_domain_spec_sys_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, proto_tree_add_item(tree, hf_gsm_a_att, tvb, curr_offset, 1, ENC_BIG_ENDIAN); curr_offset++; - EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo, &ei_gsm_a_extraneous_data); return(curr_offset - offset); } @@ -3455,7 +3457,7 @@ de_ps_domain_spec_sys_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, proto_tree_add_item(tree, hf_gsm_a_nmo, tvb, curr_offset, 1, ENC_BIG_ENDIAN); curr_offset++; - EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo, &ei_gsm_a_extraneous_data); return(curr_offset - offset); } @@ -3499,7 +3501,7 @@ de_plmn_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset g_snprintf(add_string, string_len, " - %u PLMN%s", num_plmn, plurality(num_plmn, "", "s")); - EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo, &ei_gsm_a_extraneous_data); return(curr_offset - offset); } @@ -3535,7 +3537,7 @@ de_nas_cont_for_ps_ho(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint proto_tree_add_item(tree, hf_gsm_a_iov_ui, tvb, curr_offset, 4, ENC_BIG_ENDIAN); curr_offset += 4; - EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo, &ei_gsm_a_extraneous_data); return(curr_offset - offset); } @@ -4466,6 +4468,12 @@ proto_register_gsm_a_common(void) static gint *ett[NUM_INDIVIDUAL_ELEMS + NUM_GSM_COMMON_ELEM]; + static ei_register_info ei[] = { + { &ei_gsm_a_extraneous_data, { "gsm_a.extraneous_data", PI_PROTOCOL, PI_NOTE, "Extraneous Data, dissector bug or later version spec(report to wireshark.org)", EXPFILL }}, + }; + + expert_module_t* expert_a_common; + last_offset = NUM_INDIVIDUAL_ELEMS; for (i=0; i < NUM_GSM_COMMON_ELEM; i++, last_offset++) @@ -4482,6 +4490,9 @@ proto_register_gsm_a_common(void) proto_register_field_array(proto_a_common, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_a_common = expert_register_protocol(proto_a_common); + expert_register_field_array(expert_a_common, ei, array_length(ei)); + gsm_a_tap = register_tap("gsm_a"); } diff --git a/epan/dissectors/packet-gsm_a_common.h b/epan/dissectors/packet-gsm_a_common.h index ab7b5960ae..8d36d1468c 100644 --- a/epan/dissectors/packet-gsm_a_common.h +++ b/epan/dissectors/packet-gsm_a_common.h @@ -229,16 +229,13 @@ extern const char* get_gsm_a_msg_string(int pdu_type, int idx); curr_offset += ((edc_len) - (edc_max_len)); \ } -#define EXTRANEOUS_DATA_CHECK_EXPERT(edc_len, edc_max_len, pinfo) \ +#define EXTRANEOUS_DATA_CHECK_EXPERT(edc_len, edc_max_len, pinfo, ei) \ if ((edc_len) > (edc_max_len)) \ { \ - proto_item *expert_item; \ - expert_item = proto_tree_add_text(tree, tvb, \ - curr_offset, (edc_len) - (edc_max_len), "Extraneous Data, dissector bug or later version spec(report to wireshark.org)"); \ - expert_add_info_format(pinfo, expert_item, PI_PROTOCOL, PI_NOTE, "Extraneous Data, dissector bug or later version spec(report to wireshark.org)"); \ - PROTO_ITEM_SET_GENERATED(expert_item); \ + proto_tree_add_expert(tree, pinfo, ei, tvb, curr_offset, (edc_len) - (edc_max_len)); \ curr_offset += ((edc_len) - (edc_max_len)); \ } +/* curr_offset, (edc_len) - (edc_max_len), "Extraneous Data, dissector bug or later version spec(report to wireshark.org)"); \ */ #define SHORT_DATA_CHECK(sdc_len, sdc_min_len) \ if ((sdc_len) < (sdc_min_len)) \ diff --git a/epan/dissectors/packet-gsm_a_dtap.c b/epan/dissectors/packet-gsm_a_dtap.c index 7e9f5bf1a6..9d6e9d55fc 100644 --- a/epan/dissectors/packet-gsm_a_dtap.c +++ b/epan/dissectors/packet-gsm_a_dtap.c @@ -536,6 +536,13 @@ static gint ett_bc_oct_7 = -1; static gint ett_epc_ue_tl_a_lb_setup = -1; static gint ett_mm_timer = -1; +static expert_field ei_gsm_a_dtap_keypad_info_not_dtmf_digit = EI_INIT; +static expert_field ei_gsm_a_dtap_text_string_not_multiple_of_7 = EI_INIT; +static expert_field ei_gsm_a_dtap_autn = EI_INIT; +static expert_field ei_gsm_a_dtap_invalid_ia5_character = EI_INIT; +static expert_field ei_gsm_a_dtap_auts = EI_INIT; +static expert_field ei_gsm_a_dtap_end_mark_unexpected = EI_INIT; + static char a_bigbuf[1024]; static dissector_handle_t data_handle; @@ -592,8 +599,7 @@ de_auth_param_autn(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 proto_tree_add_item(subtree, hf_gsm_a_dtap_autn_mac, tvb, offset + 8, 8, ENC_NA); } else - expert_add_info_format(pinfo, item, PI_MALFORMED, PI_WARN, - "AUTN length not equal to 16"); + expert_add_info(pinfo, item, &ei_gsm_a_dtap_autn); return(len); } @@ -641,8 +647,7 @@ de_auth_fail_param(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 proto_tree_add_item(subtree, hf_gsm_a_dtap_auts_mac_s, tvb, offset + 6, 8, ENC_NA); } else - expert_add_info_format(pinfo, item, PI_MALFORMED, PI_WARN, - "AUTS length not equal to 14"); + expert_add_info(pinfo, item, &ei_gsm_a_dtap_auts); return(len); } @@ -742,7 +747,7 @@ de_network_name(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 off num_text_bits = ((len - 1) << 3) - num_spare_bits; if (num_spare_bits && (num_text_bits % 7)) { - expert_add_info_format(pinfo, item, PI_MALFORMED, PI_WARN, "Value leads to a Text String whose length is not a multiple of 7 bits"); + expert_add_info(pinfo, item, &ei_gsm_a_dtap_text_string_not_multiple_of_7); } /* * If the number of spare bits is 7, then we have unpacked one extra @@ -1088,7 +1093,7 @@ de_emerg_num_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 o malformed_number = TRUE; if(malformed_number) - expert_add_info_format(pinfo, item, PI_MALFORMED, PI_WARN, "\'f\' end mark present in unexpected position"); + expert_add_info(pinfo, item, &ei_gsm_a_dtap_end_mark_unexpected); curr_offset = curr_offset + en_len; count++; @@ -2534,7 +2539,7 @@ de_bcd_num(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, malformed_number = TRUE; if(malformed_number) - expert_add_info_format(pinfo, item, PI_MALFORMED, PI_WARN, "\'f\' end mark present in unexpected position"); + expert_add_info(pinfo, item, &ei_gsm_a_dtap_end_mark_unexpected); return(len); } @@ -2609,7 +2614,7 @@ de_sub_addr(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, "Subaddress: %s", a_bigbuf); if(invalid_ia5_char) - expert_add_info_format(pinfo, item, PI_MALFORMED, PI_WARN, "Invalid IA5 character(s) in string (value > 127)"); + expert_add_info(pinfo, item, &ei_gsm_a_dtap_invalid_ia5_character); return(len); } @@ -3032,7 +3037,7 @@ de_keypad_facility(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 if (((keypad_char < '0') || (keypad_char > '9')) && ((keypad_char < 'A') || (keypad_char > 'D')) && (keypad_char != '*') && (keypad_char != '#')) - expert_add_info_format(pinfo, item, PI_MALFORMED, PI_WARN, "Keypad information contains character that is not a DTMF digit"); + expert_add_info(pinfo, item, &ei_gsm_a_dtap_keypad_info_not_dtmf_digit); curr_offset++; if (add_string) @@ -7156,6 +7161,17 @@ proto_register_gsm_a_dtap(void) NUM_GSM_DTAP_MSG_SMS + NUM_GSM_DTAP_MSG_SS + NUM_GSM_DTAP_MSG_TP + NUM_GSM_DTAP_ELEM]; + static ei_register_info ei[] = { + { &ei_gsm_a_dtap_autn, { "gsm_a.dtap.autn.invalid", PI_MALFORMED, PI_WARN, "AUTN length not equal to 16", EXPFILL }}, + { &ei_gsm_a_dtap_auts, { "gsm_a.dtap.auts.invalid", PI_MALFORMED, PI_WARN, "AUTS length not equal to 14", EXPFILL }}, + { &ei_gsm_a_dtap_text_string_not_multiple_of_7, { "gsm_a.dtap.text_string_not_multiple_of_7", PI_MALFORMED, PI_WARN, "Value leads to a Text String whose length is not a multiple of 7 bits", EXPFILL }}, + { &ei_gsm_a_dtap_end_mark_unexpected, { "gsm_a.dtap.end_mark_unexpected", PI_MALFORMED, PI_WARN, "\'f\' end mark present in unexpected position", EXPFILL }}, + { &ei_gsm_a_dtap_invalid_ia5_character, { "gsm_a.dtap.invalid_ia5_character", PI_MALFORMED, PI_WARN, "Invalid IA5 character(s) in string (value > 127)", EXPFILL }}, + { &ei_gsm_a_dtap_keypad_info_not_dtmf_digit, { "gsm_a.dtap.keypad_info_not_dtmf_digit", PI_MALFORMED, PI_WARN, "Keypad information contains character that is not a DTMF digit", EXPFILL }}, + }; + + expert_module_t* expert_a_dtap; + ett[0] = &ett_dtap_msg; ett[1] = &ett_dtap_oct_1; ett[2] = &ett_cm_srvc_type; @@ -7224,6 +7240,9 @@ proto_register_gsm_a_dtap(void) proto_register_field_array(proto_a_dtap, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_a_dtap = expert_register_protocol(proto_a_dtap); + expert_register_field_array(expert_a_dtap, ei, array_length(ei)); + /* subdissector code */ register_dissector("gsm_a_dtap", dissect_dtap, proto_a_dtap); diff --git a/epan/dissectors/packet-gsm_a_gm.c b/epan/dissectors/packet-gsm_a_gm.c index fdc80af4b2..0a72921565 100644 --- a/epan/dissectors/packet-gsm_a_gm.c +++ b/epan/dissectors/packet-gsm_a_gm.c @@ -468,6 +468,8 @@ static gint ett_gmm_gprs_timer = -1; static gint ett_sm_tft = -1; static gint ett_sm_pco = -1; +static expert_field ei_gsm_a_gm_extraneous_data = EI_INIT; + static dissector_handle_t data_handle; static dissector_handle_t rrc_irat_ho_info_handle; static dissector_handle_t lte_rrc_ue_eutra_cap_handle; @@ -895,7 +897,7 @@ de_gmm_ptmsi_sig2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 o proto_item_append_text(curr_item, "%s", add_string ? add_string : ""); curr_offset += 3; - EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data); return (curr_offset - offset); } @@ -993,7 +995,7 @@ de_gmm_rec_npdu_lst(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 } while (curr_len > 1); - EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data); return (curr_offset - offset); } @@ -1166,7 +1168,7 @@ de_gmm_ms_net_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 o proto_tree_add_item(tree, hf_gsm_a_gmm_net_geran_net_sharing, tvb, curr_offset, 1, ENC_BIG_ENDIAN); curr_offset++; - EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data); return (curr_offset - offset); } @@ -2981,7 +2983,7 @@ de_gmm_ms_radio_acc_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gui curr_offset += curr_len; - EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data); return (curr_offset - offset); } @@ -3304,7 +3306,7 @@ de_gmm_ps_lcs_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 o curr_offset++; - EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data); return (curr_offset - offset); } @@ -3556,7 +3558,7 @@ de_gc_context_stat(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 curr_offset++; - EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data); return (curr_offset - offset); } @@ -3925,7 +3927,7 @@ de_sm_apn(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, g proto_tree_add_string(tree, hf_gsm_a_gm_apn, tvb, curr_offset, len, str+1); curr_offset += len; - EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data); return (curr_offset - offset); } @@ -4164,7 +4166,7 @@ de_sm_pco(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, g } curr_offset += curr_len; - EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data); return (curr_offset - offset); } @@ -4263,7 +4265,7 @@ de_sm_pdp_addr(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offs curr_offset += 4; } - EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data); return (curr_offset - offset); } @@ -4772,7 +4774,7 @@ de_sm_qos(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, g curr_offset += 1; - EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data); return (curr_offset - offset); } @@ -4919,7 +4921,7 @@ de_sm_linked_ti(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 off } - EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data); return (curr_offset - offset); } @@ -4992,7 +4994,7 @@ de_sm_pflow_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offs if (add_string) g_snprintf(add_string, string_len, " - %s", rval_to_str(value, gsm_a_sm_packet_flow_id_vals, "Unknown")); - EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data); return (curr_offset - offset); } @@ -5339,7 +5341,7 @@ de_sm_tflow_temp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 of } } - EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data); return (len); } @@ -5360,7 +5362,7 @@ de_sm_tmgi(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offset, NO_MORE_DATA_CHECK(len); curr_offset = dissect_e212_mcc_mnc(tvb, pinfo, tree, curr_offset, TRUE); - EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data); return (curr_offset - offset); } @@ -5409,7 +5411,7 @@ de_sm_mbms_bearer_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint curr_offset += 1; - EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data); return (curr_offset - offset); } @@ -5426,7 +5428,7 @@ de_sm_mbms_prot_conf_opt(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gu proto_tree_add_bits_item(tree, hf_gsm_a_spare_bits, tvb, (curr_offset<<3), 8, ENC_BIG_ENDIAN); curr_offset++; - EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(len, curr_offset - offset, pinfo, &ei_gsm_a_gm_extraneous_data); return (curr_offset - offset); } @@ -5663,7 +5665,7 @@ dtap_gmm_attach_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 ELEM_OPT_TLV(0x10, GSM_A_PDU_TYPE_GM, DE_NET_RES_ID_CONT, " - TMSI based NRI container"); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -5727,7 +5729,7 @@ dtap_gmm_attach_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 ELEM_OPT_TLV(0x66, GSM_A_PDU_TYPE_GM, DE_ADD_NET_FEAT_SUP, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -5750,7 +5752,7 @@ dtap_gmm_attach_com(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 ELEM_OPT_TLV( 0x2B, GSM_A_PDU_TYPE_GM, DE_EUTRAN_IRAT_INFO_CONTAINER, " - E-UTRAN inter RAT handover information"); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -5774,7 +5776,7 @@ dtap_gmm_attach_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 ELEM_OPT_TLV(0x3A, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3346 value"); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -5803,7 +5805,7 @@ dtap_gmm_detach_req_MT(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guin ELEM_OPT_TV( 0x25, GSM_A_PDU_TYPE_GM, DE_GMM_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } static void @@ -5831,7 +5833,7 @@ dtap_gmm_detach_req_MO(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guin ELEM_OPT_TLV( 0x19, GSM_A_PDU_TYPE_GM, DE_P_TMSI_SIG_2, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } static void @@ -5880,7 +5882,7 @@ dtap_gmm_detach_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 return; } - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -5910,7 +5912,7 @@ dtap_gmm_ptmsi_realloc_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, ELEM_OPT_TV( 0x19, GSM_A_PDU_TYPE_GM, DE_P_TMSI_SIG, " - P-TMSI Signature" ); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -5928,7 +5930,7 @@ dtap_gmm_ptmsi_realloc_com(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, pinfo->p2p_dir = P2P_DIR_RECV; - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -5983,13 +5985,13 @@ dtap_gmm_auth_ciph_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guin if (curr_len == 0 ) { - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); return; } ELEM_OPT_TLV( 0x28, GSM_A_PDU_TYPE_DTAP, DE_AUTH_PARAM_AUTN, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6019,7 +6021,7 @@ dtap_gmm_auth_ciph_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gui ELEM_OPT_TLV( 0x29, GSM_A_PDU_TYPE_DTAP, DE_AUTH_RESP_PARAM_EXT, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6036,7 +6038,7 @@ dtap_gmm_auth_ciph_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guin pinfo->p2p_dir = P2P_DIR_SENT; - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6058,7 +6060,7 @@ dtap_gmm_auth_ciph_fail(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gui ELEM_OPT_TLV( 0x30, GSM_A_PDU_TYPE_DTAP, DE_AUTH_FAIL_PARAM, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6093,7 +6095,7 @@ dtap_gmm_ident_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 return; } - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6113,7 +6115,7 @@ dtap_gmm_ident_res(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 ELEM_MAND_LV( GSM_A_PDU_TYPE_COMMON, DE_MID, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6187,7 +6189,7 @@ dtap_gmm_rau_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 of ELEM_OPT_TLV(0x10, GSM_A_PDU_TYPE_GM, DE_NET_RES_ID_CONT, " - TMSI based NRI container"); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6251,7 +6253,7 @@ dtap_gmm_rau_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 of ELEM_OPT_TLV(0x66, GSM_A_PDU_TYPE_GM, DE_ADD_NET_FEAT_SUP, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6275,7 +6277,7 @@ dtap_gmm_rau_com(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 of ELEM_OPT_TLV( 0x2B, GSM_A_PDU_TYPE_GM, DE_EUTRAN_IRAT_INFO_CONTAINER, " - E-UTRAN inter RAT handover information"); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6305,7 +6307,7 @@ dtap_gmm_rau_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 of ELEM_OPT_TLV(0x3A, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3346 value"); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6325,7 +6327,7 @@ dtap_gmm_status(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 off ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_GMM_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6355,7 +6357,7 @@ dtap_gmm_information(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3 ELEM_OPT_TLV( 0x49, GSM_A_PDU_TYPE_DTAP, DE_DAY_SAVING_TIME, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6393,7 +6395,7 @@ dtap_gmm_service_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3 ELEM_OPT_TV_SHORT(0xD0, GSM_A_PDU_TYPE_GM, DE_DEVICE_PROPERTIES, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6416,7 +6418,7 @@ dtap_gmm_service_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3 /* MBMS context status 10.5.7.6 TLV 2 - 18 */ ELEM_OPT_TLV( 0x35, GSM_A_PDU_TYPE_GM, DE_MBMS_CTX_STATUS, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6438,7 +6440,7 @@ dtap_gmm_service_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3 ELEM_OPT_TLV(0x3A, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3346 value"); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6475,7 +6477,7 @@ dtap_sm_act_pdp_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 ELEM_OPT_TV_SHORT(0xC0, GSM_A_PDU_TYPE_GM, DE_DEVICE_PROPERTIES, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6519,7 +6521,7 @@ dtap_sm_act_pdp_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 ELEM_OPT_TV_SHORT(0xB0 , GSM_A_PDU_TYPE_GM, DE_SM_CONNECTIVITY_TYPE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6546,7 +6548,7 @@ dtap_sm_act_pdp_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 ELEM_OPT_TLV(0x37, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - T3396 value"); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6582,7 +6584,7 @@ dtap_sm_act_sec_pdp_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gui ELEM_OPT_TV_SHORT(0xC0, GSM_A_PDU_TYPE_GM, DE_DEVICE_PROPERTIES, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6620,7 +6622,7 @@ dtap_sm_act_sec_pdp_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gui ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6647,7 +6649,7 @@ dtap_sm_act_sec_pdp_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gui ELEM_OPT_TLV(0x37, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - T3396 value"); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6674,7 +6676,7 @@ dtap_sm_req_pdp_act(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6699,7 +6701,7 @@ dtap_sm_req_pdp_act_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gui ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6740,7 +6742,7 @@ dtap_sm_mod_pdp_req_net(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gui ELEM_OPT_TLV( 0x36, GSM_A_PDU_TYPE_GM, DE_TRAFFIC_FLOW_TEMPLATE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6771,7 +6773,7 @@ dtap_sm_mod_pdp_req_ms(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guin ELEM_OPT_TV_SHORT(0xC0, GSM_A_PDU_TYPE_GM, DE_DEVICE_PROPERTIES, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6794,7 +6796,7 @@ dtap_sm_mod_pdp_acc_ms(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guin ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6825,7 +6827,7 @@ dtap_sm_mod_pdp_acc_net(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gui ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6853,7 +6855,7 @@ dtap_sm_mod_pdp_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 ELEM_OPT_TLV(0x37, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - T3396 value"); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6883,7 +6885,7 @@ dtap_sm_deact_pdp_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint ELEM_OPT_TLV(0x37, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - T3396 value"); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6907,7 +6909,7 @@ dtap_sm_deact_pdp_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint ELEM_OPT_TLV( 0x35, GSM_A_PDU_TYPE_GM, DE_MBMS_PROT_CONF_OPT, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6939,7 +6941,7 @@ dtap_sm_req_sec_pdp_act(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gui /* 27 Protocol configuration options Protocol configuration options 10.5.6.3 O TLV 3 - 253 */ ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6965,7 +6967,7 @@ dtap_sm_req_sec_pdp_act_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, /* 27 Protocol configuration options Protocol configuration options 10.5.6.3 O TLV 3 - 253 */ ELEM_OPT_TLV( 0x27, GSM_A_PDU_TYPE_GM, DE_PRO_CONF_OPT, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -6987,7 +6989,7 @@ dtap_sm_notif(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offse ELEM_MAND_LV( GSM_A_PDU_TYPE_GM, DE_SM_NOTIF_IND, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -7009,7 +7011,7 @@ dtap_sm_status(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 offs ELEM_MAND_V( GSM_A_PDU_TYPE_GM, DE_SM_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -7048,7 +7050,7 @@ dtap_sm_act_mbms_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3 ELEM_OPT_TV_SHORT(0xC0, GSM_A_PDU_TYPE_GM, DE_DEVICE_PROPERTIES, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -7073,7 +7075,7 @@ dtap_sm_act_mbms_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3 ELEM_OPT_TLV( 0x35, GSM_A_PDU_TYPE_GM, DE_MBMS_PROT_CONF_OPT, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -7098,7 +7100,7 @@ dtap_sm_act_mbms_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3 ELEM_OPT_TLV(0x37, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - T3396 value"); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -7125,7 +7127,7 @@ dtap_sm_req_mbms_act(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3 ELEM_OPT_TLV( 0x35, GSM_A_PDU_TYPE_GM, DE_MBMS_PROT_CONF_OPT, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } /* @@ -7148,7 +7150,7 @@ dtap_sm_req_mbms_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint3 ELEM_OPT_TLV( 0x35, GSM_A_PDU_TYPE_GM, DE_MBMS_PROT_CONF_OPT, NULL); - EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo); + EXTRANEOUS_DATA_CHECK_EXPERT(curr_len, 0, pinfo, &ei_gsm_a_gm_extraneous_data); } #define NUM_GSM_DTAP_MSG_GMM (sizeof(gsm_a_dtap_msg_gmm_strings)/sizeof(value_string)) @@ -8328,6 +8330,12 @@ proto_register_gsm_a_gm(void) NUM_GSM_DTAP_MSG_GMM + NUM_GSM_DTAP_MSG_SM + NUM_GSM_GM_ELEM]; + static ei_register_info ei[] = { + { &ei_gsm_a_gm_extraneous_data, { "gsm_a.gm.extraneous_data", PI_PROTOCOL, PI_NOTE, "Extraneous Data, dissector bug or later version spec(report to wireshark.org)", EXPFILL }}, + }; + + expert_module_t* expert_gsm_a_gm; + ett[0] = &ett_tc_component; ett[1] = &ett_tc_invoke_id; ett[2] = &ett_tc_linked_id; @@ -8372,6 +8380,8 @@ proto_register_gsm_a_gm(void) proto_register_field_array(proto_a_gm, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_gsm_a_gm = expert_register_protocol(proto_a_gm); + expert_register_field_array(expert_gsm_a_gm, ei, array_length(ei)); /* subdissector code */ gprs_sm_pco_subdissector_table = register_dissector_table("sm_pco.protocol", diff --git a/epan/dissectors/packet-gsm_a_rr.c b/epan/dissectors/packet-gsm_a_rr.c index b0d1fb0ed8..7bb30eb848 100644 --- a/epan/dissectors/packet-gsm_a_rr.c +++ b/epan/dissectors/packet-gsm_a_rr.c @@ -799,6 +799,9 @@ static gint ett_ccch_msg = -1; static gint ett_ccch_oct_1 = -1; static gint ett_sacch_msg = -1; +static expert_field ei_gsm_a_rr_ie_overrun = EI_INIT; +static expert_field ei_gsm_a_rr_ie_underrun = EI_INIT; + static char a_bigbuf[1024]; static dissector_handle_t data_handle; @@ -1315,11 +1318,11 @@ de_rr_ba_list_pref(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 if (((bit_offset + 7) >> 3) > (offset + len)) { - expert_add_info_format(pinfo, proto_tree_get_parent(tree), PI_MALFORMED, PI_ERROR, "IE over-runs stated length"); + expert_add_info(pinfo, proto_tree_get_parent(tree), &ei_gsm_a_rr_ie_overrun); } else if ((bit_offset >> 3) < (offset + len)) { - expert_add_info_format(pinfo, proto_tree_get_parent(tree), PI_COMMENTS_GROUP, PI_NOTE, "IE under-runs stated length"); + expert_add_info(pinfo, proto_tree_get_parent(tree), &ei_gsm_a_rr_ie_underrun); } return len; } @@ -1353,11 +1356,11 @@ de_rr_utran_freq_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint if (((bit_offset + 7) >> 3) > (offset + len)) { - expert_add_info_format(pinfo, proto_tree_get_parent(tree), PI_MALFORMED, PI_ERROR, "IE over-runs stated length"); + expert_add_info(pinfo, proto_tree_get_parent(tree), &ei_gsm_a_rr_ie_overrun); } else if ((bit_offset >> 3) < (offset + len)) { - expert_add_info_format(pinfo, proto_tree_get_parent(tree), PI_COMMENTS_GROUP, PI_NOTE, "IE under-runs stated length"); + expert_add_info(pinfo, proto_tree_get_parent(tree), &ei_gsm_a_rr_ie_underrun); } return (len); } @@ -2388,11 +2391,11 @@ de_rr_dyn_arfcn_map(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint32 if (((bit_offset + 7) >> 3) > (offset + len)) { - expert_add_info_format(pinfo, proto_tree_get_parent(tree), PI_MALFORMED, PI_ERROR, "IE over-runs stated length"); + expert_add_info(pinfo, proto_tree_get_parent(tree), &ei_gsm_a_rr_ie_overrun); } else if ((bit_offset >> 3) < (offset + len)) { - expert_add_info_format(pinfo, proto_tree_get_parent(tree), PI_COMMENTS_GROUP, PI_NOTE, "IE under-runs stated length"); + expert_add_info(pinfo, proto_tree_get_parent(tree), &ei_gsm_a_rr_ie_underrun); } return(len); } @@ -12636,6 +12639,13 @@ proto_register_gsm_a_rr(void) NUM_GSM_RR_REST_OCTETS_ELEM + NUM_GSM_SACCH_MSG_RR]; + static ei_register_info ei[] = { + { &ei_gsm_a_rr_ie_overrun, { "gsm_a.rr.ie_overrun", PI_MALFORMED, PI_ERROR, "IE over-runs stated length", EXPFILL }}, + { &ei_gsm_a_rr_ie_underrun, { "gsm_a.rr.ie_underrun", PI_COMMENTS_GROUP, PI_NOTE, "IE under-runs stated length", EXPFILL }}, + }; + + expert_module_t* expert_a_rr; + ett[0] = &ett_ccch_msg; ett[1] = &ett_ccch_oct_1; ett[2] = &ett_sacch_msg; @@ -12671,6 +12681,8 @@ proto_register_gsm_a_rr(void) proto_register_protocol("GSM A-I/F Radio Resource Management", "GSM RR", "gsm_a.rr"); proto_register_field_array(proto_a_rr, hf, array_length(hf)); + expert_a_rr = expert_register_protocol(proto_a_rr); + expert_register_field_array(expert_a_rr, ei, array_length(ei)); /* Register the protocol name and description */ proto_a_ccch = diff --git a/epan/dissectors/packet-gsm_rlcmac.c b/epan/dissectors/packet-gsm_rlcmac.c index c36addd36b..42f7f0c659 100644 --- a/epan/dissectors/packet-gsm_rlcmac.c +++ b/epan/dissectors/packet-gsm_rlcmac.c @@ -956,6 +956,8 @@ static int hf_si6_restoctet_vbs_vgcs_options = -1; static int hf_si6_restoctet_max_lapdm = -1; static int hf_si6_restoctet_bandindicator = -1; +static expert_field ei_li = EI_INIT; + static dissector_handle_t data_handle; /* Payload type as defined in TS 44.060 / 10.4.7 */ @@ -6756,7 +6758,7 @@ static guint8 construct_gprs_data_segment_li_array(tvbuff_t *tvb, proto_tree *tr } else { - expert_add_info_format(pinfo, item, PI_UNDECODED, PI_ERROR, "Too many LIs, corresponding blocks will not be decoded"); + expert_add_info(pinfo, item, &ei_li); } proto_tree_add_bits_item(tree, hf_me, tvb, (offset * 8) + 6, 2, ENC_BIG_ENDIAN); proto_tree_add_bits_ret_val(tree, hf_e, tvb, (offset * 8) + 7, 1, e, ENC_BIG_ENDIAN); @@ -6785,7 +6787,7 @@ static guint8 construct_egprs_data_segment_li_array(tvbuff_t *tvb, proto_tree *t } else { - expert_add_info_format(pinfo, item, PI_UNDECODED, PI_ERROR, "Too many LIs, corresponding blocks will not be decoded"); + expert_add_info(pinfo, item, &ei_li); } offset++; } @@ -12150,6 +12152,11 @@ proto_register_gsm_rlcmac(void) }; + static ei_register_info ei[] = { + { &ei_li, { "gsm_rlcmac.li.too_many", PI_UNDECODED, PI_ERROR, "Too many LIs, corresponding blocks will not be decoded", EXPFILL }}, + }; + + expert_module_t* expert_gsm_rlcmac; /* Register the protocol name and description */ proto_gsm_rlcmac = proto_register_protocol("Radio Link Control, Medium Access Control, 3GPP TS44.060", @@ -12158,6 +12165,8 @@ proto_register_gsm_rlcmac(void) /* Required function calls to register the header fields and subtrees used */ proto_register_field_array(proto_gsm_rlcmac, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_gsm_rlcmac = expert_register_protocol(proto_gsm_rlcmac); + expert_register_field_array(expert_gsm_rlcmac, ei, array_length(ei)); register_dissector("gsm_rlcmac_ul", dissect_gsm_rlcmac_uplink, proto_gsm_rlcmac); register_dissector("gsm_rlcmac_dl", dissect_gsm_rlcmac_downlink, proto_gsm_rlcmac); }