forked from osmocom/wireshark
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>
This commit is contained in:
parent
dbe50602b0
commit
551309a60e
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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 ===== */
|
||||
|
|
Loading…
Reference in New Issue