aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--epan/dissectors/packet-gsm_osmux.c22
-rw-r--r--epan/dissectors/packet-gsm_osmux.h1
2 files changed, 21 insertions, 2 deletions
diff --git a/epan/dissectors/packet-gsm_osmux.c b/epan/dissectors/packet-gsm_osmux.c
index 039c3d76fe..d8b155c2be 100644
--- a/epan/dissectors/packet-gsm_osmux.c
+++ b/epan/dissectors/packet-gsm_osmux.c
@@ -50,6 +50,7 @@ static int proto_osmux = -1;
static int osmux_tap = -1;
static int hf_osmux_ft_ctr = -1;
+static int hf_osmux_rtp_m = -1;
static int hf_osmux_ft = -1;
static int hf_osmux_ctr = -1;
static int hf_osmux_amr_f = -1;
@@ -72,6 +73,7 @@ static gint
dissect_osmux(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
static const gint *ft_ctr_fields[] = {
+ &hf_osmux_rtp_m,
&hf_osmux_ft,
&hf_osmux_ctr,
&hf_osmux_amr_f,
@@ -100,7 +102,8 @@ dissect_osmux(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U
ft_ctr = tvb_get_guint8(tvb, offset);
- osmuxh->ft = ft_ctr >> 5;
+ osmuxh->rtp_m = ft_ctr >> 7;
+ osmuxh->ft = (ft_ctr >> 5) & 0x3;
osmuxh->ctr = (ft_ctr >> 2) & 0x7;
osmuxh->amr_q = !!(ft_ctr & 0x02);
osmuxh->amr_f = !!(ft_ctr & 0x01);
@@ -123,6 +126,9 @@ dissect_osmux(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U
val_to_str(osmuxh->ft, osmux_ft_vals,
"unknown 0x%02x"));
+ if (osmuxh->rtp_m)
+ col_append_fstr(pinfo->cinfo, COL_INFO, "(M)");
+
proto_tree_add_bitmask(osmux_tree, tvb, offset, hf_osmux_ft_ctr,
ett_osmux_ft_ctr, ft_ctr_fields, ENC_BIG_ENDIAN);
offset++;
@@ -153,6 +159,7 @@ static const gchar *st_str_pkts_by_ctr = "Osmux Packets by AMR frame count";
static const gchar *st_str_pkts_by_src = "Osmux Packets by src Addr";
static const gchar *st_str_pkts_by_dst = "Osmux Packets by dst Addr";
static const gchar *st_str_pkts_by_conn = "Osmux Packets by stream";
+static const gchar *st_str_pkts_by_rtp_m = "Osmux Packets by RTP Marker";
static int st_osmux_stats = -1;
static int st_osmux_stats_cid = -1;
@@ -160,6 +167,7 @@ static int st_osmux_stats_ctr = -1;
static int st_osmux_stats_src = -1;
static int st_osmux_stats_dst = -1;
static int st_osmux_stats_conn = -1;
+static int st_osmux_stats_rtp_m = -1;
static void osmux_stats_tree_init(stats_tree *st)
{
@@ -169,6 +177,7 @@ static void osmux_stats_tree_init(stats_tree *st)
st_osmux_stats_src = stats_tree_create_node(st, st_str_pkts_by_src, st_osmux_stats, TRUE);
st_osmux_stats_dst = stats_tree_create_node(st, st_str_pkts_by_dst, st_osmux_stats, TRUE);
st_osmux_stats_conn = stats_tree_create_node(st, st_str_pkts_by_conn, st_osmux_stats, TRUE);
+ st_osmux_stats_rtp_m = stats_tree_create_node(st, st_str_pkts_by_rtp_m, st_osmux_stats, TRUE);
}
static int osmux_stats_tree_packet(stats_tree *st, packet_info *pinfo,
@@ -201,6 +210,10 @@ static int osmux_stats_tree_packet(stats_tree *st, packet_info *pinfo,
g_snprintf(temp, 40, "%s->%s:%i", ip_str, ip2_str, osmuxh->circuit_id);
tick_stat_node(st, temp, st_osmux_stats_conn, TRUE);
+ tick_stat_node(st, st_str_pkts_by_rtp_m, 0, FALSE);
+ g_snprintf(temp, 30, "%s", (osmuxh->rtp_m ? "Yes" : "No"));
+ tick_stat_node(st, temp, st_osmux_stats_rtp_m, TRUE);
+
wmem_free(NULL, ip_str);
wmem_free(NULL, ip2_str);
@@ -215,9 +228,14 @@ void proto_register_osmux(void)
FT_UINT8, BASE_DEC, NULL, 0x00,
"Byte with Fieldtype, Counter", HFILL}
},
+ {&hf_osmux_rtp_m,
+ {"RTP Marker", "osmux.rtp_m",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ "Type of data in packet", HFILL}
+ },
{&hf_osmux_ft,
{"FieldType", "osmux.ft",
- FT_UINT8, BASE_DEC, VALS(osmux_ft_vals), 0xe0,
+ FT_UINT8, BASE_DEC, VALS(osmux_ft_vals), 0x60,
"Type of data in packet", HFILL}
},
{&hf_osmux_ctr,
diff --git a/epan/dissectors/packet-gsm_osmux.h b/epan/dissectors/packet-gsm_osmux.h
index 1e43b19edd..271485a0d6 100644
--- a/epan/dissectors/packet-gsm_osmux.h
+++ b/epan/dissectors/packet-gsm_osmux.h
@@ -24,6 +24,7 @@
/* Tap structure of Osmux header */
struct osmux_hdr {
+ guint32 rtp_m;
guint32 ft;
guint32 ctr;
guint32 amr_f;