aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-umts_fp.c
diff options
context:
space:
mode:
authorMartin Mathieson <martin.r.mathieson@googlemail.com>2008-06-12 16:11:16 +0000
committerMartin Mathieson <martin.r.mathieson@googlemail.com>2008-06-12 16:11:16 +0000
commitd275348e2043ba2c1d1500e759008b8ac061f953 (patch)
tree4fe17d49fc1a2291a0780d9505e422c8030c9788 /epan/dissectors/packet-umts_fp.c
parent4a0826ef2f3c9a62afe623c38d2680194e1576e0 (diff)
Dissect BCH channels (expect control messages only).
svn path=/trunk/; revision=25445
Diffstat (limited to 'epan/dissectors/packet-umts_fp.c')
-rw-r--r--epan/dissectors/packet-umts_fp.c32
1 files changed, 31 insertions, 1 deletions
diff --git a/epan/dissectors/packet-umts_fp.c b/epan/dissectors/packet-umts_fp.c
index 66af24629a..cdc5041c23 100644
--- a/epan/dissectors/packet-umts_fp.c
+++ b/epan/dissectors/packet-umts_fp.c
@@ -375,6 +375,8 @@ static void dissect_pch_channel_info(tvbuff_t *tvb, packet_info *pinfo, proto_tr
int offset, struct fp_info *p_fp_info);
static void dissect_cpch_channel_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
int offset, struct fp_info *p_fp_info);
+static void dissect_bch_channel_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
+ int offset, struct fp_info *p_fp_info);
static void dissect_iur_dsch_channel_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
int offset, struct fp_info *p_fp_info _U_);
static void dissect_hsdsch_channel_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
@@ -1820,6 +1822,34 @@ void dissect_cpch_channel_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr
}
}
+
+/**************************/
+/* Dissect a BCH channel */
+void dissect_bch_channel_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
+ int offset, struct fp_info *p_fp_info)
+{
+ gboolean is_control_frame;
+
+ /* Header CRC */
+ proto_tree_add_item(tree, hf_fp_header_crc, tvb, offset, 1, FALSE);
+
+ /* Frame Type */
+ is_control_frame = tvb_get_guint8(tvb, offset) & 0x01;
+ proto_tree_add_item(tree, hf_fp_ft, tvb, offset, 1, FALSE);
+ offset++;
+
+ if (check_col(pinfo->cinfo, COL_INFO))
+ {
+ col_append_str(pinfo->cinfo, COL_INFO, is_control_frame ? " [Control] " : " [Data] ");
+ }
+
+ if (is_control_frame)
+ {
+ dissect_common_control(tvb, pinfo, tree, offset, p_fp_info);
+ }
+}
+
+
/********************************/
/* Dissect an IUR DSCH channel */
void dissect_iur_dsch_channel_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
@@ -2957,7 +2987,7 @@ void dissect_fp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
dissect_cpch_channel_info(tvb, pinfo, fp_tree, offset, p_fp_info);
break;
case CHANNEL_BCH:
- /* TODO? */
+ dissect_bch_channel_info(tvb, pinfo, fp_tree, offset, p_fp_info);
break;
case CHANNEL_HSDSCH:
switch (p_fp_info->hsdsch_entity) {