aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-gsm_abis_tfp.c
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2016-10-16 14:08:42 +0200
committerMichael Mann <mmann78@netscape.net>2016-10-25 22:44:14 +0000
commit00e21988690863fd3396845c4421a8879982a43a (patch)
tree880badbb809a0094ebc9d38f1128e2fb4eea6994 /epan/dissectors/packet-gsm_abis_tfp.c
parent470a44a3341a91b5b7adf3f8bc14ce0727f6e938 (diff)
gsm_abis_tfp: Detect + display AMR rate based on payload length
Change-Id: I1af7e3be87da9416ded02b09c480ea69ec58afff Reviewed-on: https://code.wireshark.org/review/18459 Petri-Dish: Michael Mann <mmann78@netscape.net> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'epan/dissectors/packet-gsm_abis_tfp.c')
-rw-r--r--epan/dissectors/packet-gsm_abis_tfp.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/epan/dissectors/packet-gsm_abis_tfp.c b/epan/dissectors/packet-gsm_abis_tfp.c
index 9c39e1ce38..afec11d551 100644
--- a/epan/dissectors/packet-gsm_abis_tfp.c
+++ b/epan/dissectors/packet-gsm_abis_tfp.c
@@ -55,6 +55,7 @@ static int hf_tfp_hdr_p = -1;
static int hf_tfp_hdr_s = -1;
static int hf_tfp_hdr_m = -1;
static int hf_tfp_hdr_frame_type = -1;
+static int hf_tfp_amr_rate = -1;
/* initialize the subtree pointers */
static int ett_tfp = -1;
@@ -90,6 +91,20 @@ static const value_string tfp_frame_type_vals[] = {
{ 0, NULL }
};
+static const value_string tfp_amr_len_rate_vals[] = {
+ { 1, "SID_FIRST, ONSET, No speech/data" },
+ { 5, "SID_UPDATE, SID_BAD" },
+ { 12, "4.75k" },
+ { 13, "5.15k" },
+ { 15, "5.90k" },
+ { 17, "6.70k" },
+ { 19, "7.40k" },
+ { 20, "7.95k" },
+ { 26, "10.2k" },
+ { 31, "12.2k" },
+ { 0, NULL }
+};
+
static int
dissect_abis_tfp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
@@ -99,6 +114,7 @@ dissect_abis_tfp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data
guint32 slot_rate, frame_bits, atsr, seq_nr;
guint8 ftype;
tvbuff_t *next_tvb;
+ gint len_remain;
col_set_str(pinfo->cinfo, COL_PROTOCOL, "TFP");
@@ -129,6 +145,21 @@ dissect_abis_tfp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data
offset++;
offset++;
+ switch (ftype & 0x7F) {
+ case 0: /* TFP-AMR.ind */
+ len_remain = tvb_captured_length_remaining(tvb, offset);
+ proto_tree_add_uint(tfp_tree, hf_tfp_amr_rate, tvb, offset, 0, len_remain);
+ break;
+ case 1: /* TFP-SCCE-AMR.ind */
+ break;
+ case 2: /* TFP-HR.ind */
+ break;
+ case 3: /* TFP-EFR.ind */
+ break;
+ case 4: /* TFP-SCCE-EFR.ind */
+ break;
+ }
+
/* FIXME: implement packed frame support */
if (slot_rate == 0)
frame_bits = 320;
@@ -184,6 +215,11 @@ proto_register_abis_tfp(void)
FT_UINT8, BASE_DEC, VALS(tfp_frame_type_vals), 0x1e,
NULL, HFILL }
},
+ { &hf_tfp_amr_rate,
+ { "AMR Rate", "gsm_abis_tfp.amr.rate",
+ FT_UINT8, BASE_DEC, VALS(tfp_amr_len_rate_vals), 0,
+ NULL, HFILL }
+ },
};
static gint *ett[] = {
&ett_tfp,