aboutsummaryrefslogtreecommitdiffstats
path: root/asn1/lte-rrc
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2011-10-03 21:15:04 +0000
committerAnders Broman <anders.broman@ericsson.com>2011-10-03 21:15:04 +0000
commita17fcee039acc5047af110260b92d17b78fdb218 (patch)
tree30854e15eb1c14f35cd949feacf8805704239cda /asn1/lte-rrc
parent838c1b337b1c28bbfeec80d4232c3cc67bdfde40 (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/lte-rrc')
-rw-r--r--asn1/lte-rrc/lte-rrc.cnf39
-rw-r--r--asn1/lte-rrc/packet-lte-rrc-template.c9
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 = &lte_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");
}