Browse Source

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
pull/1826/head
Richard Fuchs 2 years ago
parent
commit
1b378c616c
7 changed files with 12 additions and 151 deletions
  1. +0
    -22
      daemon/kernel.c
  2. +11
    -15
      daemon/media_player.c
  3. +1
    -21
      daemon/media_socket.c
  4. +0
    -3
      include/codec.h
  5. +0
    -4
      include/kernel.h
  6. +0
    -72
      kernel-module/xt_RTPENGINE.c
  7. +0
    -14
      kernel-module/xt_RTPENGINE.h

+ 0
- 22
daemon/kernel.c View File

@ -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);
}
}

+ 11
- 15
daemon/media_player.c View File

@ -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


+ 1
- 21
daemon/media_socket.c View File

@ -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


+ 0
- 3
include/codec.h View File

@ -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 {


+ 0
- 4
include/kernel.h View File

@ -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

+ 0
- 72
kernel-module/xt_RTPENGINE.c View File

@ -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;


+ 0
- 14
kernel-module/xt_RTPENGINE.h View File

@ -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

Loading…
Cancel
Save