aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormartinm <martinm@f5534014-38df-0310-8fa8-9805f1628bb7>2010-11-05 18:00:35 +0000
committermartinm <martinm@f5534014-38df-0310-8fa8-9805f1628bb7>2010-11-05 18:00:35 +0000
commita12c63a6e85c7bc8fc7c070b5d9a404b8a2927a4 (patch)
tree843f4203b3c93d6fe7fef2a6c69f29c90104015e
parentc366111ceeb1f8dd62ee649072f10bb53d873272 (diff)
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
-rw-r--r--epan/dissectors/packet-catapult-dct2000.c13
-rw-r--r--epan/dissectors/packet-pdcp-lte.c47
-rw-r--r--epan/dissectors/packet-pdcp-lte.h2
-rw-r--r--epan/dissectors/packet-rlc-lte.c2
4 files changed, 61 insertions, 3 deletions
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) {