diff options
author | Anders Broman <anders.broman@ericsson.com> | 2011-10-03 21:15:04 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2011-10-03 21:15:04 +0000 |
commit | a17fcee039acc5047af110260b92d17b78fdb218 (patch) | |
tree | 30854e15eb1c14f35cd949feacf8805704239cda /asn1 | |
parent | 838c1b337b1c28bbfeec80d4232c3cc67bdfde40 (diff) |
From Pascal Quantin:
Add dissection of GERAN related messages.
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=6427
svn path=/trunk/; revision=39246
Diffstat (limited to 'asn1')
-rw-r--r-- | asn1/lte-rrc/lte-rrc.cnf | 39 | ||||
-rw-r--r-- | asn1/lte-rrc/packet-lte-rrc-template.c | 9 |
2 files changed, 46 insertions, 2 deletions
diff --git a/asn1/lte-rrc/lte-rrc.cnf b/asn1/lte-rrc/lte-rrc.cnf index d634408ebb..8d5d2352c3 100644 --- a/asn1/lte-rrc/lte-rrc.cnf +++ b/asn1/lte-rrc/lte-rrc.cnf @@ -234,6 +234,7 @@ if(ue_eutra_cap_tvb){ tvbuff_t *target_rat_msg_cont_tvb = NULL; %(DEFAULT_BODY)s if(target_rat_msg_cont_tvb){ + guint8 byte; switch(lte_rrc_ho_target_rat_type_value){ case 0: /* utra */ @@ -242,6 +243,16 @@ if(ue_eutra_cap_tvb){ break; case 1: /* geran */ + byte = tvb_get_guint8(target_rat_msg_cont_tvb, 0); + if (byte == 0x06) { + if (gsm_a_dtap_handle) { + call_dissector(gsm_a_dtap_handle, target_rat_msg_cont_tvb, actx->pinfo, tree); + } + } else { + if (gsm_rlcmac_dl_handle) { + call_dissector(gsm_rlcmac_dl_handle, target_rat_msg_cont_tvb, actx->pinfo, tree); + } + } break; case 2: /* cdma2000-1XRTT */ @@ -278,6 +289,34 @@ if(ue_eutra_cap_tvb){ subtree = proto_item_add_subtree(item, hf_lte_rrc_nas_SecurityParamToEUTRA); de_emm_sec_par_to_eutra(nas_sec_param_to_eutra_tvb, subtree, actx->pinfo, 0, length, NULL, 0); +#.FN_BODY SI-OrPSI-GERAN VAL_PTR = <e_rrc_si_or_psi_geran_val +%(DEFAULT_BODY)s + +#.FN_BODY CellInfoGERAN-r9 + lte_rrc_si_or_psi_geran_val = 0; /* SI message */ +%(DEFAULT_BODY)s + +#.FN_BODY SystemInfoListGERAN/_item VAL_PTR = &sys_info_list_tvb + tvbuff_t *sys_info_list_tvb = NULL; +%(DEFAULT_BODY)s + if (sys_info_list_tvb) { + switch (lte_rrc_si_or_psi_geran_val) { + case 0: + /* SI message */ + if (gsm_a_dtap_handle) { + call_dissector(gsm_a_dtap_handle, sys_info_list_tvb ,actx->pinfo, tree); + } + break; + case 1: + /* PSI message */ + if (gsm_rlcmac_dl_handle) { + call_dissector(gsm_rlcmac_dl_handle, sys_info_list_tvb ,actx->pinfo, tree); + } + break; + default: + break; + } + } #.FN_BODY CellInfoUTRA-FDD-r9/utra-BCCH-Container-r9 VAL_PTR = &utra_bcch_cont_tvb tvbuff_t *utra_bcch_cont_tvb = NULL; diff --git a/asn1/lte-rrc/packet-lte-rrc-template.c b/asn1/lte-rrc/packet-lte-rrc-template.c index 45ad004230..ed441ce3bc 100644 --- a/asn1/lte-rrc/packet-lte-rrc-template.c +++ b/asn1/lte-rrc/packet-lte-rrc-template.c @@ -46,10 +46,13 @@ #define PFNAME "lte_rrc" static dissector_handle_t nas_eps_handle = NULL; -static dissector_handle_t rrc_irat_ho_to_utran_cmd_handle; -static dissector_handle_t rrc_sys_info_cont_handle; +static dissector_handle_t rrc_irat_ho_to_utran_cmd_handle = NULL; +static dissector_handle_t rrc_sys_info_cont_handle = NULL; +static dissector_handle_t gsm_a_dtap_handle = NULL; +static dissector_handle_t gsm_rlcmac_dl_handle = NULL; static guint32 lte_rrc_rat_type_value = -1; static guint32 lte_rrc_ho_target_rat_type_value = -1; +static gint lte_rrc_si_or_psi_geran_val = -1; /* Include constants */ #include "packet-lte-rrc-val.h" @@ -512,6 +515,8 @@ proto_reg_handoff_lte_rrc(void) nas_eps_handle = find_dissector("nas-eps"); rrc_irat_ho_to_utran_cmd_handle = find_dissector("rrc.irat.ho_to_utran_cmd"); rrc_sys_info_cont_handle = find_dissector("rrc.sysinfo.cont"); + gsm_a_dtap_handle = find_dissector("gsm_a_dtap"); + gsm_rlcmac_dl_handle = find_dissector("gsm_rlcmac_dl"); } |