aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2017-05-09 14:19:10 +0200
committerPau Espin Pedrol <pespin@sysmocom.de>2017-05-12 10:44:50 +0200
commitba92095873914d2ec942a9b9363e2392f68d88e6 (patch)
tree7384cc1c620199042593de8dd971c39345ac5c20
parentf15b779d0b904526eb174893bc68c86eb08811d1 (diff)
gsm_osmux: Add RTP Marker field
GSM Osmux recently got support to bring RTP Marker (M) bit. It should be mostly backwards compatible as the first bit was reserved and not used before for the FieldType. Support was added in libosmo-netif commit e98afe5808176efb60298a2f764e8e11efaf580b This bit is documented in the protocol documentation recently available: http://ftp.osmocom.org/docs/latest/osmux-reference.pdf Change-Id: Ia0508971519b3df9499d963404bb8a0e3c4b9c33
-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;