aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors
diff options
context:
space:
mode:
authorMartin Heusse <martin.heusse@imag.fr>2017-07-04 15:31:24 +0200
committerPascal Quantin <pascal.quantin@gmail.com>2017-07-11 12:37:32 +0000
commit551309a60e473a0d63d857418f9b6083e894318b (patch)
treecbfdea88589163fb497c060f5b5c381c2db61de3 /epan/dissectors
parentdbe50602b07022e25a86925655dc2dc0ec3a8f96 (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.c46
-rw-r--r--epan/dissectors/packet-gsmtap.h1
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 ===== */