From 1ca584838a6d0877d7f9fe6c55a168ded6750c5d Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Wed, 10 Apr 2024 09:48:26 -0400 Subject: [PATCH] MT#55283 push ssrc_stats to kernel Unused at this point Change-Id: I384ca6a64cd5a3b26949baafa11ff4cd2be128d8 --- daemon/media_socket.c | 4 +++- kernel-module/xt_RTPENGINE.c | 14 +++++++++++++- kernel-module/xt_RTPENGINE.h | 1 + 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/daemon/media_socket.c b/daemon/media_socket.c index 4b3d9c4fd..75112594a 100644 --- a/daemon/media_socket.c +++ b/daemon/media_socket.c @@ -1488,8 +1488,10 @@ static const char *kernelize_one(struct rtpengine_target_info *reti, GQueue *out reti->track_ssrc = 1; for (unsigned int u = 0; u < G_N_ELEMENTS(stream->ssrc_in); u++) { - if (stream->ssrc_in[u]) + if (stream->ssrc_in[u]) { reti->ssrc[u] = htonl(stream->ssrc_in[u]->parent->h.ssrc); + reti->ssrc_stats[u] = stream->ssrc_in[u]->stats; + } } if (proto_is_rtp(media->protocol)) { diff --git a/kernel-module/xt_RTPENGINE.c b/kernel-module/xt_RTPENGINE.c index 649079b99..414639451 100644 --- a/kernel-module/xt_RTPENGINE.c +++ b/kernel-module/xt_RTPENGINE.c @@ -2409,6 +2409,7 @@ static int table_new_target(struct rtpengine_table *t, struct rtpengine_target_i struct interface_stats_block *iface_stats; struct stream_stats *stats; struct rtp_stats *pt_stats[RTPE_NUM_PAYLOAD_TYPES]; + struct ssrc_stats *ssrc_stats[RTPE_NUM_SSRC_TRACKING]; /* validation */ @@ -2444,6 +2445,15 @@ static int table_new_target(struct rtpengine_table *t, struct rtpengine_target_i if (!pt_stats[u]) return -EFAULT; } + for (u = 0; u < RTPE_NUM_SSRC_TRACKING; u++) { + if (!i->ssrc[u]) + break; + if (!i->ssrc_stats[u]) + return -EFAULT; + ssrc_stats[u] = shm_map_resolve(i->ssrc_stats[u], sizeof(*ssrc_stats[u])); + if (!ssrc_stats[u]) + return -EFAULT; + } DBG("Creating new target\n"); @@ -2462,8 +2472,10 @@ static int table_new_target(struct rtpengine_table *t, struct rtpengine_target_i crypto_context_init(&g->decrypt_rtp, &g->target.decrypt); crypto_context_init(&g->decrypt_rtcp, &g->target.decrypt); spin_lock_init(&g->ssrc_stats_lock); - for (u = 0; u < RTPE_NUM_SSRC_TRACKING; u++) + for (u = 0; u < RTPE_NUM_SSRC_TRACKING; u++) { g->ssrc_stats[u].lost_bits = -1; + g->target.ssrc_stats[u] = ssrc_stats[u]; + } rwlock_init(&g->outputs_lock); g->target.iface_stats = iface_stats; g->target.stats = stats; diff --git a/kernel-module/xt_RTPENGINE.h b/kernel-module/xt_RTPENGINE.h index 8edfdfe9b..701165131 100644 --- a/kernel-module/xt_RTPENGINE.h +++ b/kernel-module/xt_RTPENGINE.h @@ -92,6 +92,7 @@ struct rtpengine_target_info { struct rtpengine_srtp decrypt; uint32_t ssrc[RTPE_NUM_SSRC_TRACKING]; // Expose the SSRC to userspace when we resync. + struct ssrc_stats *ssrc_stats[RTPE_NUM_SSRC_TRACKING]; struct rtp_stats *pt_stats[RTPE_NUM_PAYLOAD_TYPES]; // must be sorted by PT unsigned int num_payload_types;