From a12c63a6e85c7bc8fc7c070b5d9a404b8a2927a4 Mon Sep 17 00:00:00 2001 From: martinm Date: Fri, 5 Nov 2010 18:00:35 +0000 Subject: Pass ueid + channel-info into PDCP dissector. This will allow me soon to track per-channel sequence numbers... git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@34793 f5534014-38df-0310-8fa8-9805f1628bb7 --- epan/dissectors/packet-catapult-dct2000.c | 13 +++++++-- epan/dissectors/packet-pdcp-lte.c | 47 +++++++++++++++++++++++++++++++ epan/dissectors/packet-pdcp-lte.h | 2 ++ epan/dissectors/packet-rlc-lte.c | 2 ++ 4 files changed, 61 insertions(+), 3 deletions(-) (limited to 'epan') diff --git a/epan/dissectors/packet-catapult-dct2000.c b/epan/dissectors/packet-catapult-dct2000.c index 039e786e98..3142b1ec2b 100644 --- a/epan/dissectors/packet-catapult-dct2000.c +++ b/epan/dissectors/packet-catapult-dct2000.c @@ -881,6 +881,7 @@ static void dissect_pdcp_lte(tvbuff_t *tvb, gint offset, struct pdcp_lte_info *p_pdcp_lte_info = NULL; tvbuff_t *pdcp_lte_tvb; guint16 ueid; + guint8 channelId; /* Look this up so can update channel info */ p_pdcp_lte_info = p_get_proto_data(pinfo->fd, proto_pdcp_lte); @@ -931,9 +932,11 @@ static void dissect_pdcp_lte(tvbuff_t *tvb, gint offset, p_pdcp_lte_info->channelType = Channel_DCCH; /* UEId */ + ueid = tvb_get_ntohs(tvb, offset); proto_tree_add_item(tree, hf_catapult_dct2000_lte_ueid, tvb, offset, 2, FALSE); col_append_fstr(pinfo->cinfo, COL_INFO, - " UEId=%u", tvb_get_ntohs(tvb, offset)); + " UEId=%u", ueid); + p_pdcp_lte_info->ueid = ueid; offset += 2; /* Get tag of channel type */ @@ -942,17 +945,21 @@ static void dissect_pdcp_lte(tvbuff_t *tvb, gint offset, switch (tag) { case 0: offset++; + channelId = tvb_get_guint8(tvb, offset); col_append_fstr(pinfo->cinfo, COL_INFO, " SRB:%u", - tvb_get_guint8(tvb, offset)); + channelId); proto_tree_add_item(tree, hf_catapult_dct2000_lte_srbid, tvb, offset++, 1, FALSE); + p_pdcp_lte_info->channelId = channelId; break; case 1: offset++; + channelId = tvb_get_guint8(tvb, offset); col_append_fstr(pinfo->cinfo, COL_INFO, " DRB:%u", - tvb_get_guint8(tvb, offset)); + channelId); proto_tree_add_item(tree, hf_catapult_dct2000_lte_drbid, tvb, offset++, 1, FALSE); + p_pdcp_lte_info->channelId = channelId; break; default: diff --git a/epan/dissectors/packet-pdcp-lte.c b/epan/dissectors/packet-pdcp-lte.c index 6cebc3da15..bdc78824bd 100644 --- a/epan/dissectors/packet-pdcp-lte.c +++ b/epan/dissectors/packet-pdcp-lte.c @@ -60,6 +60,9 @@ int proto_pdcp_lte = -1; /* Configuration (info known outside of PDU) */ static int hf_pdcp_lte_configuration = -1; static int hf_pdcp_lte_direction = -1; +static int hf_pdcp_lte_ueid = -1; +static int hf_pdcp_lte_channel_type = -1; +static int hf_pdcp_lte_channel_id = -1; static int hf_pdcp_lte_rohc = -1; static int hf_pdcp_lte_rohc_compression = -1; static int hf_pdcp_lte_rohc_mode = -1; @@ -196,6 +199,13 @@ static const value_string pdcp_plane_vals[] = { { 0, NULL } }; +static const value_string logical_channel_vals[] = { + { Channel_DCCH, "DCCH"}, + { Channel_BCCH, "BCCH"}, + { Channel_CCCH, "CCCH"}, + { Channel_PCCH, "PCCH"}, + { 0, NULL} +}; static const value_string rohc_mode_vals[] = { { UNIDIRECTIONAL, "Unidirectional" }, @@ -1244,6 +1254,25 @@ static void show_pdcp_config(packet_info *pinfo, tvbuff_t *tvb, proto_tree *tree p_pdcp_info->plane); PROTO_ITEM_SET_GENERATED(ti); + /* UEId */ + if (p_pdcp_info->ueid != 0) { + ti = proto_tree_add_uint(configuration_tree, hf_pdcp_lte_ueid, tvb, 0, 0, + p_pdcp_info->ueid); + PROTO_ITEM_SET_GENERATED(ti); + } + + /* Channel type */ + ti = proto_tree_add_uint(configuration_tree, hf_pdcp_lte_channel_type, tvb, 0, 0, + p_pdcp_info->channelType); + PROTO_ITEM_SET_GENERATED(ti); + if (p_pdcp_info->channelId != 0) { + /* Channel type */ + ti = proto_tree_add_uint(configuration_tree, hf_pdcp_lte_channel_id, tvb, 0, 0, + p_pdcp_info->channelId); + PROTO_ITEM_SET_GENERATED(ti); + } + + /* User-plane-specific fields */ if (p_pdcp_info->plane == USER_PLANE) { @@ -1994,6 +2023,24 @@ void proto_register_pdcp(void) "Direction of message", HFILL } }, + { &hf_pdcp_lte_ueid, + { "UE", + "pdcp-lte.ueid", FT_UINT16, BASE_DEC, 0, 0x0, + "UE Identifier", HFILL + } + }, + { &hf_pdcp_lte_channel_type, + { "Channel type", + "pdcp-lte.channel-type", FT_UINT8, BASE_DEC, VALS(logical_channel_vals), 0x0, + NULL, HFILL + } + }, + { &hf_pdcp_lte_channel_id, + { "Channel Id", + "pdcp-lte.channel-id", FT_UINT8, BASE_DEC, 0, 0x0, + NULL, HFILL + } + }, { &hf_pdcp_lte_rohc_profile, { "ROHC profile", "pdcp-lte.rohc.profile", FT_UINT8, BASE_DEC, VALS(rohc_profile_vals), 0x0, diff --git a/epan/dissectors/packet-pdcp-lte.h b/epan/dissectors/packet-pdcp-lte.h index c525e6b5bb..47ccbd1ede 100644 --- a/epan/dissectors/packet-pdcp-lte.h +++ b/epan/dissectors/packet-pdcp-lte.h @@ -68,7 +68,9 @@ typedef struct pdcp_lte_info { /* Channel info is needed for RRC parsing */ guint8 direction; + guint16 ueid; LogicalChannelType channelType; + guint8 channelId; BCCHTransportType BCCHTransport; /* Details of PDCP header */ diff --git a/epan/dissectors/packet-rlc-lte.c b/epan/dissectors/packet-rlc-lte.c index 066c792c83..550534aa88 100644 --- a/epan/dissectors/packet-rlc-lte.c +++ b/epan/dissectors/packet-rlc-lte.c @@ -510,7 +510,9 @@ static void show_AM_PDU_in_tree(packet_info *pinfo, proto_tree *tree, tvbuff_t * p_add_proto_data(pinfo->fd, proto_pdcp_lte, p_pdcp_lte_info); } + p_pdcp_lte_info->ueid = rlc_info->ueid; p_pdcp_lte_info->channelType = Channel_DCCH; + p_pdcp_lte_info->channelId = rlc_info->channelId; p_pdcp_lte_info->direction = rlc_info->direction; p_pdcp_lte_info->no_header_pdu = FALSE; if (rlc_info->channelType == CHANNEL_TYPE_SRB) { -- cgit v1.2.3