stats: replace packet statistic counters with libosmocore rate counters
In struct mgcp_rtp_end one finds unsigned int counters. Those should
be replaced with libosmocore rate counters
- replace packets_rx, octets_rx, packets_tx, octets_tx and
dropped_packets with libosmocore rate counters.
Change-Id: I47c5c9006df5044e59ddebb895e62adb849d72d5
Related: OS#2517
diff --git a/src/libosmo-mgcp/mgcp_conn.c b/src/libosmo-mgcp/mgcp_conn.c
index e49559c..3a5db0f 100644
--- a/src/libosmo-mgcp/mgcp_conn.c
+++ b/src/libosmo-mgcp/mgcp_conn.c
@@ -31,22 +31,21 @@
#include <osmocom/core/rate_ctr.h>
#include <ctype.h>
-enum {
- IN_STREAM_ERR_TSTMP_CTR,
- OUT_STREAM_ERR_TSTMP_CTR,
-};
-
static const struct rate_ctr_desc rate_ctr_desc[] = {
[IN_STREAM_ERR_TSTMP_CTR] = {"stream_err_tstmp:in", "Inbound rtp-stream timestamp errors."},
[OUT_STREAM_ERR_TSTMP_CTR] = {"stream_err_tstmp:out", "Outbound rtp-stream timestamp errors."},
+ [RTP_PACKETS_RX_CTR] = {"rtp:packets_rx", "Inbound rtp packets."},
+ [RTP_OCTETS_RX_CTR] = {"rtp:octets_rx", "Inbound rtp octets."},
+ [RTP_PACKETS_TX_CTR] = {"rtp:packets_tx", "Outbound rtp packets."},
+ [RTP_OCTETS_TX_CTR] = {"rtp:octets_rx", "Outbound rtp octets."},
+ [RTP_DROPPED_PACKETS_CTR] = {"rtp:dropped", "dropped rtp packets."}
};
-
const static struct rate_ctr_group_desc rate_ctr_group_desc = {
.group_name_prefix = "conn_rtp",
.group_description = "rtp connection statistics",
.class_id = 1,
- .num_ctr = 2,
+ .num_ctr = ARRAY_SIZE(rate_ctr_desc),
.ctr_desc = rate_ctr_desc
};
@@ -107,7 +106,6 @@
end->rtp.fd = -1;
end->rtcp.fd = -1;
- memset(&end->stats, 0, sizeof(end->stats));
end->rtp_port = end->rtcp_port = 0;
talloc_free(end->fmtp_extra);
end->fmtp_extra = NULL;
diff --git a/src/libosmo-mgcp/mgcp_network.c b/src/libosmo-mgcp/mgcp_network.c
index b47b76c..494156d 100644
--- a/src/libosmo-mgcp/mgcp_network.c
+++ b/src/libosmo-mgcp/mgcp_network.c
@@ -694,7 +694,7 @@
dest_name = conn_dst->conn->name;
if (!rtp_end->output_enabled) {
- rtp_end->stats.dropped_packets += 1;
+ rate_ctr_inc(&conn_dst->rate_ctr_group->ctr[RTP_DROPPED_PACKETS_CTR]);
LOGP(DRTP, LOGL_DEBUG,
"endpoint:0x%x output disabled, drop to %s %s "
"rtp_port:%u rtcp_port:%u\n",
@@ -749,8 +749,8 @@
if (len <= 0)
return len;
- conn_dst->end.stats.packets_tx += 1;
- conn_dst->end.stats.octets_tx += len;
+ rate_ctr_inc(&conn_dst->rate_ctr_group->ctr[RTP_PACKETS_TX_CTR]);
+ rate_ctr_add(&conn_dst->rate_ctr_group->ctr[RTP_OCTETS_TX_CTR], len);
nbytes += len;
buflen = cont;
@@ -769,8 +769,8 @@
&rtp_end->addr,
rtp_end->rtcp_port, buf, len);
- conn_dst->end.stats.packets_tx += 1;
- conn_dst->end.stats.octets_tx += len;
+ rate_ctr_inc(&conn_dst->rate_ctr_group->ctr[RTP_PACKETS_TX_CTR]);
+ rate_ctr_add(&conn_dst->rate_ctr_group->ctr[RTP_OCTETS_TX_CTR], len);
return len;
}
@@ -939,8 +939,8 @@
}
/* Increment RX statistics */
- conn->end.stats.packets_rx += 1;
- conn->end.stats.octets_rx += rc;
+ rate_ctr_inc(&conn->rate_ctr_group->ctr[RTP_PACKETS_RX_CTR]);
+ rate_ctr_add(&conn->rate_ctr_group->ctr[RTP_OCTETS_RX_CTR], rc);
/* Forward a copy of the RTP data to a debug ip/port */
forward_data(fd->fd, &conn->tap_in, buf, rc);
diff --git a/src/libosmo-mgcp/mgcp_osmux.c b/src/libosmo-mgcp/mgcp_osmux.c
index 281595c..26817c8 100644
--- a/src/libosmo-mgcp/mgcp_osmux.c
+++ b/src/libosmo-mgcp/mgcp_osmux.c
@@ -256,8 +256,8 @@
.sin_port = conn_net->end.rtp_port,
};
- conn_bts->end.stats.octets_tx += msg->len;
- conn_bts->end.stats.packets_tx++;
+ rate_ctr_inc(&conn_bts->rate_ctr_group->ctr[RTP_PACKETS_TX_CTR]);
+ rate_ctr_add(&conn_bts->rate_ctr_group->ctr[RTP_OCTETS_TX_CTR], msg->len);
/* Send RTP data to NET */
/* FIXME: Get rid of conn_bts and conn_net! */
@@ -283,8 +283,8 @@
.sin_port = conn_bts->end.rtp_port,
};
- conn_net->end.stats.octets_tx += msg->len;
- conn_net->end.stats.packets_tx++;
+ rate_ctr_inc(&conn_net->rate_ctr_group->ctr[RTP_PACKETS_TX_CTR]);
+ rate_ctr_add(&conn_net->rate_ctr_group->ctr[RTP_OCTETS_TX_CTR], msg->len);
/* Send RTP data to BTS */
/* FIXME: Get rid of conn_bts and conn_net! */
diff --git a/src/libosmo-mgcp/mgcp_stat.c b/src/libosmo-mgcp/mgcp_stat.c
index cc723bb..4072ac0 100644
--- a/src/libosmo-mgcp/mgcp_stat.c
+++ b/src/libosmo-mgcp/mgcp_stat.c
@@ -27,10 +27,11 @@
#include <limits.h>
/* Helper function for mgcp_format_stats_rtp() to calculate packet loss */
-void calc_loss(struct mgcp_rtp_state *state,
- struct mgcp_rtp_end *end, uint32_t *expected,
- int *loss)
+void calc_loss(struct mgcp_conn_rtp *conn, uint32_t *expected, int *loss)
{
+ struct mgcp_rtp_state *state = &conn->state;
+ struct rate_ctr *packets_rx = &conn->rate_ctr_group->ctr[RTP_PACKETS_RX_CTR];
+
*expected = state->stats.cycles + state->stats.max_seq;
*expected = *expected - state->stats.base_seq + 1;
@@ -44,8 +45,8 @@
* Make sure the sign is correct and use the biggest
* positive/negative number that fits.
*/
- *loss = *expected - end->stats.packets_rx;
- if (*expected < end->stats.packets_rx) {
+ *loss = *expected - packets_rx->current;
+ if (*expected < packets_rx->current) {
if (*loss > 0)
*loss = INT_MIN;
} else {
@@ -70,13 +71,18 @@
int ploss;
int nchars;
- calc_loss(&conn->state, &conn->end, &expected, &ploss);
+ struct rate_ctr *packets_rx = &conn->rate_ctr_group->ctr[RTP_PACKETS_RX_CTR];
+ struct rate_ctr *octets_rx = &conn->rate_ctr_group->ctr[RTP_OCTETS_RX_CTR];
+ struct rate_ctr *packets_tx = &conn->rate_ctr_group->ctr[RTP_PACKETS_TX_CTR];
+ struct rate_ctr *octets_tx = &conn->rate_ctr_group->ctr[RTP_OCTETS_TX_CTR];
+
+ calc_loss(conn, &expected, &ploss);
jitter = calc_jitter(&conn->state);
nchars = snprintf(str, str_len,
- "\r\nP: PS=%u, OS=%u, PR=%u, OR=%u, PL=%d, JI=%u",
- conn->end.stats.packets_tx, conn->end.stats.octets_tx,
- conn->end.stats.packets_rx, conn->end.stats.octets_rx,
+ "\r\nP: PS=%lu, OS=%lu, PR=%lu, OR=%lu, PL=%d, JI=%u",
+ packets_tx->current, octets_tx->current,
+ packets_rx->current, octets_rx->current,
ploss, jitter);
if (nchars < 0 || nchars >= str_len)
goto truncate;
diff --git a/src/libosmo-mgcp/mgcp_vty.c b/src/libosmo-mgcp/mgcp_vty.c
index a7a1feb..b586ff6 100644
--- a/src/libosmo-mgcp/mgcp_vty.c
+++ b/src/libosmo-mgcp/mgcp_vty.c
@@ -154,14 +154,18 @@
return CMD_SUCCESS;
}
-static void dump_rtp_end(struct vty *vty, struct mgcp_rtp_state *state,
- struct mgcp_rtp_end *end)
+static void dump_rtp_end(struct vty *vty, struct mgcp_conn_rtp *conn)
{
+ struct mgcp_rtp_state *state = &conn->state;
+ struct mgcp_rtp_end *end = &conn->end;
struct mgcp_rtp_codec *codec = end->codec;
+ struct rate_ctr *dropped_packets;
+
+ dropped_packets = &conn->rate_ctr_group->ctr[RTP_DROPPED_PACKETS_CTR];
vty_out(vty,
" Timestamp Errs: %lu->%lu%s"
- " Dropped Packets: %d%s"
+ " Dropped Packets: %lu%s"
" Payload Type: %d Rate: %u Channels: %d %s"
" Frame Duration: %u Frame Denominator: %u%s"
" FPP: %d Packet Duration: %u%s"
@@ -170,7 +174,7 @@
state->in_stream.err_ts_ctr->current,
state->out_stream.err_ts_ctr->current,
VTY_NEWLINE,
- end->stats.dropped_packets, VTY_NEWLINE,
+ dropped_packets->current, VTY_NEWLINE,
codec->payload_type, codec->rate, codec->channels, VTY_NEWLINE,
codec->frame_duration_num, codec->frame_duration_den,
VTY_NEWLINE, end->frames_per_packet, end->packet_duration_ms,
@@ -208,8 +212,7 @@
* connection types (E1) as soon as
* the implementation is available */
if (conn->type == MGCP_CONN_TYPE_RTP) {
- dump_rtp_end(vty, &conn->u.rtp.state,
- &conn->u.rtp.end);
+ dump_rtp_end(vty, &conn->u.rtp);
}
}
}