From e3a9eeea00a84ad497dff1a41bf46bb722a529c3 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Fri, 12 Sep 2025 10:09:09 -0400 Subject: [PATCH] MT#63317 select kernel output group from PT Change-Id: Ia818c42ffa8db916c37df87d239187bec1646d9f --- kernel-module/xt_RTPENGINE.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/kernel-module/xt_RTPENGINE.c b/kernel-module/xt_RTPENGINE.c index 7e2e75478..bc1b180cf 100644 --- a/kernel-module/xt_RTPENGINE.c +++ b/kernel-module/xt_RTPENGINE.c @@ -6303,6 +6303,7 @@ static unsigned int rtpengine46(struct sk_buff *skb, struct sk_buff *oskb, unsigned int start_idx, end_idx; enum {NOT_RTCP = 0, RTCP, RTCP_FORWARD} is_rtcp; ktime_t packet_ts; + unsigned int output_group_idx = 0; struct rtpengine_output_group *output_group; skb_reset_transport_header(skb); @@ -6411,10 +6412,14 @@ static unsigned int rtpengine46(struct sk_buff *skb, struct sk_buff *oskb, if (g->target.pt_filter) goto out; } - else if (ssrc_idx >= 0 && g->target.ssrc_stats[ssrc_idx]) { - atomic_set(&g->target.ssrc_stats[ssrc_idx]->last_pt, - g->target.pt_stats[rtp_pt_idx]->payload_type); - atomic64_set(&g->target.ssrc_stats[ssrc_idx]->last_packet_us, packet_ts); + else { + output_group_idx = g->target.pt_media_idx[rtp_pt_idx]; + + if (ssrc_idx >= 0 && g->target.ssrc_stats[ssrc_idx]) { + atomic_set(&g->target.ssrc_stats[ssrc_idx]->last_pt, + g->target.pt_stats[rtp_pt_idx]->payload_type); + atomic64_set(&g->target.ssrc_stats[ssrc_idx]->last_packet_us, packet_ts); + } } errstr = "SRTP decryption failed"; @@ -6474,7 +6479,7 @@ static unsigned int rtpengine46(struct sk_buff *skb, struct sk_buff *oskb, } // output - output_group = &g->target.media_output_idxs[0]; + output_group = &g->target.media_output_idxs[output_group_idx]; start_idx = (is_rtcp != NOT_RTCP) ? output_group->rtcp_start_idx : output_group->rtp_start_idx; end_idx = (is_rtcp != NOT_RTCP) ? output_group->rtcp_end_idx : output_group->rtp_end_idx;