From 1b378c616c36139ae3450d6c40b9f85175a60cee Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Wed, 17 Apr 2024 10:21:51 -0400 Subject: [PATCH] MT#55283 obsolete kernel RTCP sender This only exists because of RTCP indexing issues, but with the index being in shared memory now, we no longer need this. Change-Id: Ib0a69214f24a7c1edec8aa53139212ee861a6c4d --- daemon/kernel.c | 22 ----------- daemon/media_player.c | 26 ++++++------- daemon/media_socket.c | 22 +---------- include/codec.h | 3 -- include/kernel.h | 4 -- kernel-module/xt_RTPENGINE.c | 72 ------------------------------------ kernel-module/xt_RTPENGINE.h | 14 ------- 7 files changed, 12 insertions(+), 151 deletions(-) diff --git a/daemon/kernel.c b/daemon/kernel.c index 93bf3e0ed..cb48a47f2 100644 --- a/daemon/kernel.c +++ b/daemon/kernel.c @@ -100,7 +100,6 @@ bool kernel_init_table(void) { [REMG_ADD_STREAM] = sizeof(struct rtpengine_command_add_stream), [REMG_DEL_STREAM] = sizeof(struct rtpengine_command_del_stream), [REMG_PACKET] = sizeof(struct rtpengine_command_packet), - [REMG_SEND_RTCP] = sizeof(struct rtpengine_command_send_packet), }, .rtpe_stats = rtpe_stats, }; @@ -253,24 +252,3 @@ unsigned int kernel_add_intercept_stream(unsigned int call_idx, const char *id) return UNINIT_IDX; return cmd.stream.idx.stream_idx; } - -void kernel_send_rtcp(struct rtpengine_send_packet_info *info, const char *buf, size_t len) { - if (!kernel.is_open) - return; - - size_t total_len = len + sizeof(struct rtpengine_command_send_packet); - struct rtpengine_command_send_packet *cmd = alloca(total_len); - cmd->cmd = REMG_SEND_RTCP; - cmd->send_packet = *info; - memcpy(&cmd->send_packet.data, buf, len); - - ssize_t ret = write(kernel.fd, cmd, total_len); - - if (ret != total_len) { - if (ret == -1) - ilog(LOG_ERR, "Failed to send RTCP via kernel interface: %s", strerror(errno)); - else - ilog(LOG_ERR, "Failed to send RTCP via kernel interface (%zi != %zu)", - ret, total_len); - } -} diff --git a/daemon/media_player.c b/daemon/media_player.c index 26f8d6ee9..2411d8373 100644 --- a/daemon/media_player.c +++ b/daemon/media_player.c @@ -276,21 +276,17 @@ static bool __send_timer_send_1(struct rtp_header *rh, struct packet_stream *sin endpoint_print_buf(&sink_fd->socket.local), FMT_M(endpoint_print_buf(&sink->endpoint))); - if (cp->kernel_send_info.local.family) - kernel_send_rtcp(&cp->kernel_send_info, cp->s.s, cp->s.len); - else { - struct async_send_req *req = uring_alloc_req(sizeof(*req), async_send_req_free); - req->iov = (__typeof(req->iov)) { - .iov_base = cp->s.s, - .iov_len = cp->s.len, - }; - req->msg = (__typeof(req->msg)) { - .msg_iov = &req->iov, - .msg_iovlen = 1, - }; - req->buf = bufferpool_ref(cp->s.s); - uring_sendmsg(&sink_fd->socket, &req->msg, &sink->endpoint, &req->sin, &req->req); - } + struct async_send_req *req = uring_alloc_req(sizeof(*req), async_send_req_free); + req->iov = (__typeof(req->iov)) { + .iov_base = cp->s.s, + .iov_len = cp->s.len, + }; + req->msg = (__typeof(req->msg)) { + .msg_iov = &req->iov, + .msg_iovlen = 1, + }; + req->buf = bufferpool_ref(cp->s.s); + uring_sendmsg(&sink_fd->socket, &req->msg, &sink->endpoint, &req->sin, &req->req); if (sink->call->recording && rtpe_config.rec_egress) { // fill in required members diff --git a/daemon/media_socket.c b/daemon/media_socket.c index 4f1f426e8..2eee5e6b2 100644 --- a/daemon/media_socket.c +++ b/daemon/media_socket.c @@ -2245,15 +2245,8 @@ int media_packet_encrypt(rewrite_func encrypt_func, struct packet_stream *out, s return ret; } -// return: -1 = error, 0 = ok, 1 = pass to kernel for sending +// return: -1 = error, 0 = ok static int __media_packet_encrypt(struct packet_handler_ctx *phc, struct sink_handler *sh) { - if (phc->rtcp) { - // can the kernel handle this for us? - if (PS_ISSET(phc->mp.stream, KERNELIZED) && !PS_ISSET(phc->mp.stream, NO_KERNEL_SUPPORT) - && sh->kernel_output_idx >= 0) - return 1; - } - int ret = media_packet_encrypt(phc->encrypt_func, phc->out_srtp, &phc->mp); if (ret & 0x02) phc->update = true; @@ -2833,19 +2826,6 @@ next_mirror: if (ret == -1) goto err_next; - if (ret == 1) { - for (__auto_type l = phc->mp.packets_out.head; l; l = l->next) { - struct codec_packet *p = l->data; - __re_address_translate_ep(&p->kernel_send_info.local, - &phc->mp.stream->selected_sfd->socket.local); - __re_address_translate_ep(&p->kernel_send_info.src_addr, - &sh->sink->selected_sfd->socket.local); - __re_address_translate_ep(&p->kernel_send_info.dst_addr, - &sh->sink->endpoint); - p->kernel_send_info.destination_idx = sh->kernel_output_idx; - } - } - mutex_lock(&sink->out_lock); if (!sink->advertised_endpoint.port diff --git a/include/codec.h b/include/codec.h index 6c285192a..25099e749 100644 --- a/include/codec.h +++ b/include/codec.h @@ -12,8 +12,6 @@ #include "timerthread.h" #include "types.h" -#include "xt_RTPENGINE.h" - struct call_media; struct codec_handler; struct media_packet; @@ -78,7 +76,6 @@ struct codec_packet { struct ssrc_ctx *ssrc_out; void (*free_func)(void *); void (*plain_free_func)(void *); - struct rtpengine_send_packet_info kernel_send_info; }; struct codec_scheduler { diff --git a/include/kernel.h b/include/kernel.h index 8d22d6c24..f798688af 100644 --- a/include/kernel.h +++ b/include/kernel.h @@ -14,7 +14,6 @@ struct rtpengine_target_info; struct rtpengine_destination_info; -struct rtpengine_send_packet_info; struct re_address; struct rtpengine_ssrc_stats; @@ -41,8 +40,5 @@ void kernel_del_call(unsigned int); unsigned int kernel_add_intercept_stream(unsigned int call_idx, const char *id); -void kernel_send_rtcp(struct rtpengine_send_packet_info *info, const char *buf, size_t len); - - #endif diff --git a/kernel-module/xt_RTPENGINE.c b/kernel-module/xt_RTPENGINE.c index d45302858..5a039a703 100644 --- a/kernel-module/xt_RTPENGINE.c +++ b/kernel-module/xt_RTPENGINE.c @@ -3577,71 +3577,6 @@ static void parse_rtcp(struct rtp_parsed *rtp, struct sk_buff *skb) { rtp->rtcp = 1; } -static int table_send_rtcp(struct rtpengine_table *t, const struct rtpengine_send_packet_info *info, size_t len) -{ - struct rtpengine_target *g; - int err = 0; - unsigned long flags; - struct rtpengine_output *o; - struct sk_buff *skb; - struct rtp_parsed rtp; - int ssrc_idx = -1; - const char *data = info->data; - - g = get_target(t, &info->local); - if (!g) - return -ENOENT; - - err = -ERANGE; - if (info->destination_idx >= g->target.num_destinations) - goto out; - if (info->destination_idx < g->num_rtp_destinations) - goto out; - - _r_lock(&g->outputs_lock, flags); - if (g->outputs_unfilled) { - _r_unlock(&g->outputs_lock, flags); - err = -ENODATA; - goto out; - } - - o = &g->outputs[info->destination_idx]; - _r_unlock(&g->outputs_lock, flags); - - // double check addresses for confirmation - err = -EBADSLT; - if (memcmp(&info->src_addr, &o->output.src_addr, sizeof(o->output.src_addr))) - goto out; - if (memcmp(&info->dst_addr, &o->output.dst_addr, sizeof(o->output.dst_addr))) - goto out; - - err = -ENOMEM; - skb = alloc_skb(len + MAX_HEADER + MAX_SKB_TAIL_ROOM, GFP_KERNEL); - if (!skb) - goto out; - - // reserve head room and copy data in - skb_reserve(skb, MAX_HEADER); - memcpy(skb_put(skb, len), data, len); - - parse_rtcp(&rtp, skb); - if (rtp.rtcp) { - ssrc_idx = target_find_ssrc(g, rtp.rtcp_header->ssrc); - if (ssrc_idx == -2) { - kfree_skb(skb); - err = -ENOSYS; - goto out; - } - } - - err = send_proxy_packet_output(skb, g, 0, o, &rtp, ssrc_idx, NULL); - -out: - target_put(g); - return err; -} - - static const size_t min_req_sizes[__REMG_LAST] = { @@ -3654,7 +3589,6 @@ static const size_t min_req_sizes[__REMG_LAST] = { [REMG_ADD_STREAM] = sizeof(struct rtpengine_command_add_stream), [REMG_DEL_STREAM] = sizeof(struct rtpengine_command_del_stream), [REMG_PACKET] = sizeof(struct rtpengine_command_packet), - [REMG_SEND_RTCP] = sizeof(struct rtpengine_command_send_packet), }; static const size_t max_req_sizes[__REMG_LAST] = { @@ -3667,7 +3601,6 @@ static const size_t max_req_sizes[__REMG_LAST] = { [REMG_ADD_STREAM] = sizeof(struct rtpengine_command_add_stream), [REMG_DEL_STREAM] = sizeof(struct rtpengine_command_del_stream), [REMG_PACKET] = sizeof(struct rtpengine_command_packet) + 65535, - [REMG_SEND_RTCP] = sizeof(struct rtpengine_command_send_packet) + 65535, }; static int rtpengine_init_table(struct rtpengine_table *t, struct rtpengine_init_info *init) { @@ -3706,7 +3639,6 @@ static inline ssize_t proc_control_read_write(struct file *file, char __user *ub struct rtpengine_command_add_stream *add_stream; struct rtpengine_command_del_stream *del_stream; struct rtpengine_command_packet *packet; - struct rtpengine_command_send_packet *send_packet; char *storage; } msg; @@ -3797,10 +3729,6 @@ static inline ssize_t proc_control_read_write(struct file *file, char __user *ub err = stream_packet(t, &msg.packet->packet, buflen - sizeof(*msg.packet)); break; - case REMG_SEND_RTCP: - err = table_send_rtcp(t, &msg.send_packet->send_packet, buflen - sizeof(*msg.send_packet)); - break; - default: printk(KERN_WARNING "xt_RTPENGINE unimplemented op %u\n", cmd); err = -EINVAL; diff --git a/kernel-module/xt_RTPENGINE.h b/kernel-module/xt_RTPENGINE.h index dc8458f08..22a602de8 100644 --- a/kernel-module/xt_RTPENGINE.h +++ b/kernel-module/xt_RTPENGINE.h @@ -169,7 +169,6 @@ enum rtpengine_command { REMG_DEL_STREAM, REMG_PACKET, REMG_DEL_TARGET, - REMG_SEND_RTCP, __REMG_LAST }; @@ -180,14 +179,6 @@ struct rtpengine_init_info { struct global_stats_counter *rtpe_stats; }; -struct rtpengine_send_packet_info { - struct re_address local; - unsigned int destination_idx; - struct re_address src_addr; - struct re_address dst_addr; - unsigned char data[]; -}; - struct rtpengine_command_init { enum rtpengine_command cmd; struct rtpengine_init_info init; @@ -233,10 +224,5 @@ struct rtpengine_command_packet { struct rtpengine_packet_info packet; }; -struct rtpengine_command_send_packet { - enum rtpengine_command cmd; - struct rtpengine_send_packet_info send_packet; -}; - #endif