diff options
author | Martin Heusse <martin.heusse@imag.fr> | 2017-07-04 15:31:24 +0200 |
---|---|---|
committer | Pascal Quantin <pascal.quantin@gmail.com> | 2017-07-11 12:37:32 +0000 |
commit | 551309a60e473a0d63d857418f9b6083e894318b (patch) | |
tree | cbfdea88589163fb497c060f5b5c381c2db61de3 /epan/dissectors | |
parent | dbe50602b07022e25a86925655dc2dc0ec3a8f96 (diff) |
GSMTAP: add LTE RRC message support
This code is borrowed from a patch proposed by altaf329@gmail.com in june 2015
(Ice136a9cb950bb97a11bee4486071b6883a0cad7) and adapted to fit current wireshark code (and minus the LTE MAC frame dissector).
Change-Id: Iaa1ea8b2d7a3e618f8aa14203449f2c77b4727f5
Reviewed-on: https://code.wireshark.org/review/22515
Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
Diffstat (limited to 'epan/dissectors')
-rw-r--r-- | epan/dissectors/packet-gsmtap.c | 46 | ||||
-rw-r--r-- | epan/dissectors/packet-gsmtap.h | 1 |
2 files changed, 43 insertions, 4 deletions
diff --git a/epan/dissectors/packet-gsmtap.c b/epan/dissectors/packet-gsmtap.c index 6494caf78e..4ee3301176 100644 --- a/epan/dissectors/packet-gsmtap.c +++ b/epan/dissectors/packet-gsmtap.c @@ -99,6 +99,8 @@ enum { /* UMTS */ GSMTAP_SUB_UMTS_RLC_MAC, GSMTAP_SUB_UMTS_RRC, + /* LTE*/ + GSMTAP_SUB_LTE_RRC, GSMTAP_SUB_MAX }; @@ -170,8 +172,23 @@ enum { GSMTAP_RRC_SUB_MAX }; +/* LTE RRC message types */ +enum { + GSMTAP_LTE_RRC_SUB_DL_CCCH_Message = 0, + GSMTAP_LTE_RRC_SUB_DL_DCCH_Message, + GSMTAP_LTE_RRC_SUB_UL_CCCH_Message, + GSMTAP_LTE_RRC_SUB_UL_DCCH_Message, + GSMTAP_LTE_RRC_SUB_BCCH_BCH_Message, + GSMTAP_LTE_RRC_SUB_BCCH_DL_SCH_Message, + GSMTAP_LTE_RRC_SUB_PCCH_Message, + GSMTAP_LTE_RRC_SUB_MCCH_Message, + + GSMTAP_LTE_RRC_SUB_MAX +}; + static dissector_handle_t sub_handles[GSMTAP_SUB_MAX]; static dissector_handle_t rrc_sub_handles[GSMTAP_RRC_SUB_MAX]; +static dissector_handle_t lte_rrc_sub_handles[GSMTAP_LTE_RRC_SUB_MAX]; static dissector_table_t gsmtap_dissector_table; @@ -291,6 +308,7 @@ static const value_string gsmtap_types[] = { { GSMTAP_TYPE_GMR1_UM, "GMR-1 air interfeace (MES-MS<->GTS)" }, { GSMTAP_TYPE_UMTS_RLC_MAC, "UMTS RLC/MAC" }, { GSMTAP_TYPE_UMTS_RRC, "UMTS RRC" }, + { GSMTAP_TYPE_LTE_RRC, "LTE RRC" }, { GSMTAP_TYPE_OSMOCORE_LOG, "libosmocore logging" }, { 0, NULL }, }; @@ -349,7 +367,7 @@ handle_tetra(int channel _U_, tvbuff_t *payload_tvb _U_, packet_info *pinfo _U_, static int dissect_gsmtap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_) { - int sub_handle, rrc_sub_handle = 0, len, offset = 0; + int sub_handle, sub_handle_idx = 0, len, offset = 0; proto_item *ti; proto_tree *gsmtap_tree = NULL; tvbuff_t *payload_tvb, *l1h_tvb = NULL; @@ -475,8 +493,8 @@ dissect_gsmtap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _ switch (type) { case GSMTAP_TYPE_UMTS_RRC: sub_handle = GSMTAP_SUB_UMTS_RRC; - rrc_sub_handle = sub_type; - if (rrc_sub_handle >= GSMTAP_RRC_SUB_MAX) { + sub_handle_idx = sub_type; + if (sub_handle_idx >= GSMTAP_RRC_SUB_MAX) { sub_handle = GSMTAP_SUB_DATA; } /* make entry in the Protocol column on summary display. @@ -485,6 +503,14 @@ dissect_gsmtap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _ * sub-dissector */ col_set_str(pinfo->cinfo, COL_PROTOCOL, "RRC"); break; + case GSMTAP_TYPE_LTE_RRC: + sub_handle = GSMTAP_SUB_LTE_RRC; + sub_handle_idx = sub_type; + if (sub_handle_idx >= GSMTAP_LTE_RRC_SUB_MAX) { + sub_handle = GSMTAP_SUB_DATA; + } + /*Directly call the respective lte rrc message dissector */ + break; case GSMTAP_TYPE_UM: if (l1h_tvb) dissect_sacch_l1h(l1h_tvb, tree); @@ -591,7 +617,10 @@ dissect_gsmtap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _ break; } if (sub_handle == GSMTAP_SUB_UMTS_RRC) - call_dissector(rrc_sub_handles[rrc_sub_handle], payload_tvb, + call_dissector(rrc_sub_handles[sub_handle_idx], payload_tvb, + pinfo, tree); + else if (sub_handle == GSMTAP_SUB_LTE_RRC) + call_dissector(lte_rrc_sub_handles[sub_handle_idx], payload_tvb, pinfo, tree); else if (sub_handles[sub_handle] != NULL) call_dissector(sub_handles[sub_handle], payload_tvb, pinfo, tree); @@ -749,6 +778,15 @@ proto_reg_handoff_gsmtap(void) rrc_sub_handles[GSMTAP_RRC_SUB_ToTargetRNC_Container] = find_dissector_add_dependency("rrc.s_to_trnc_cont", proto_gsmtap); rrc_sub_handles[GSMTAP_RRC_SUB_TargetRNC_ToSourceRNC_Container] = find_dissector_add_dependency("rrc.t_to_srnc_cont", proto_gsmtap); + lte_rrc_sub_handles[GSMTAP_LTE_RRC_SUB_DL_CCCH_Message] = find_dissector_add_dependency("lte_rrc.dl_ccch", proto_gsmtap); + lte_rrc_sub_handles[GSMTAP_LTE_RRC_SUB_DL_DCCH_Message] = find_dissector_add_dependency("lte_rrc.dl_dcch", proto_gsmtap); + lte_rrc_sub_handles[GSMTAP_LTE_RRC_SUB_UL_CCCH_Message] = find_dissector_add_dependency("lte_rrc.ul_ccch", proto_gsmtap); + lte_rrc_sub_handles[GSMTAP_LTE_RRC_SUB_UL_DCCH_Message] = find_dissector_add_dependency("lte_rrc.ul_dcch", proto_gsmtap); + lte_rrc_sub_handles[GSMTAP_LTE_RRC_SUB_BCCH_BCH_Message] = find_dissector_add_dependency("lte_rrc.bcch_bch", proto_gsmtap); + lte_rrc_sub_handles[GSMTAP_LTE_RRC_SUB_BCCH_DL_SCH_Message] = find_dissector_add_dependency("lte_rrc.bcch_dl_sch", proto_gsmtap); + lte_rrc_sub_handles[GSMTAP_LTE_RRC_SUB_PCCH_Message] = find_dissector_add_dependency("lte_rrc.pcch", proto_gsmtap); + lte_rrc_sub_handles[GSMTAP_LTE_RRC_SUB_MCCH_Message] = find_dissector_add_dependency("lte_rrc.mcch", proto_gsmtap); + gsmtap_handle = create_dissector_handle(dissect_gsmtap, proto_gsmtap); dissector_add_uint_with_preference("udp.port", GSMTAP_UDP_PORT, gsmtap_handle); } diff --git a/epan/dissectors/packet-gsmtap.h b/epan/dissectors/packet-gsmtap.h index d22d89396d..306a195fad 100644 --- a/epan/dissectors/packet-gsmtap.h +++ b/epan/dissectors/packet-gsmtap.h @@ -46,6 +46,7 @@ #define GSMTAP_TYPE_GMR1_UM 0x0a /* GMR-1 L2 packets */ #define GSMTAP_TYPE_UMTS_RLC_MAC 0x0b #define GSMTAP_TYPE_UMTS_RRC 0x0c +#define GSMTAP_TYPE_LTE_RRC 0x0d /* LTE interface */ #define GSMTAP_TYPE_OSMOCORE_LOG 0x10 /* libosmocore logging */ /* ====== DO NOT MAKE UNAPPROVED MODIFICATIONS HERE ===== */ |