MT#55283 trigger rekernel for SSRC-less streams

If a stream has been pushed to the kernel from anything other than RTP,
even though RTP is expected, we get a forwarding entries without any
SSRCs. This is valid, but once actual RTP is received, it needs to be
passed on to user space, so that SSRC contexts can be set up.

Possible fix for #1855

Change-Id: I51b82d3cf79cf66780fdde154bebe56e0f43174b
(cherry picked from commit a0b705eef9)
(cherry picked from commit c3dd3dc558)
mr12.5.1
Richard Fuchs 9 months ago
parent 3549b31e64
commit f4150b5478

@ -1513,6 +1513,7 @@ static const char *kernelize_one(struct rtpengine_target_info *reti, GQueue *out
if (proto_is_rtp(media->protocol)) {
reti->rtp = 1;
reti->ssrc_req = 1;
if (!MEDIA_ISSET(media, TRANSCODING)) {
reti->rtcp_fw = 1;
if (media->protocol->avpf)

@ -6374,7 +6374,7 @@ static unsigned int rtpengine46(struct sk_buff *skb, struct sk_buff *oskb,
// Look for matching SSRC index if any SSRC were given
ssrc_idx = target_find_ssrc(g, rtp.rtp_header->ssrc);
errstr = "SSRC mismatch";
if (ssrc_idx == -2)
if (ssrc_idx == -2 || (ssrc_idx == -1 && g->target.ssrc_req))
goto out_error;
pkt_idx = rtp_packet_index(&g->decrypt_rtp, &g->target.decrypt, rtp.rtp_header, ssrc_idx,

@ -102,6 +102,7 @@ struct rtpengine_target_info {
dtls:1,
stun:1,
rtp:1,
ssrc_req:1,
rtp_only:1,
track_ssrc:1,
rtcp:1,

Loading…
Cancel
Save