|
|
|
|
@ -105,6 +105,10 @@ static void kernelize(struct callstream *c) {
|
|
|
|
|
struct peer *p, *pp;
|
|
|
|
|
struct streamrelay *r, *rp;
|
|
|
|
|
struct kernel_stream ks;
|
|
|
|
|
struct callmaster *cm = c->call->callmaster;
|
|
|
|
|
|
|
|
|
|
if (cm->kernelfd < 0 || cm->kernelid < 0)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
mylog(LOG_DEBUG, LOG_PREFIX_C "Kernelizing RTP streams", LOG_PARAMS_C(c->call));
|
|
|
|
|
|
|
|
|
|
@ -125,26 +129,26 @@ static void kernelize(struct callstream *c) {
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
ks.local_port = r->localport;
|
|
|
|
|
ks.tos = c->call->callmaster->tos;
|
|
|
|
|
ks.tos = cm->tos;
|
|
|
|
|
ks.src.port = rp->localport;
|
|
|
|
|
ks.dest.port = r->peer.port;
|
|
|
|
|
|
|
|
|
|
if (IN6_IS_ADDR_V4MAPPED(&r->peer.ip46)) {
|
|
|
|
|
ks.src.family = AF_INET;
|
|
|
|
|
ks.src.ipv4 = c->call->callmaster->ipv4;
|
|
|
|
|
ks.src.ipv4 = cm->ipv4;
|
|
|
|
|
ks.dest.family = AF_INET;
|
|
|
|
|
ks.dest.ipv4 = r->peer.ip46.s6_addr32[3];
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
ks.src.family = AF_INET6;
|
|
|
|
|
ks.src.ipv6 = c->call->callmaster->ipv6;
|
|
|
|
|
ks.src.ipv6 = cm->ipv6;
|
|
|
|
|
ks.dest.family = AF_INET6;
|
|
|
|
|
ks.dest.ipv6 = r->peer.ip46;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ZERO(r->kstats);
|
|
|
|
|
|
|
|
|
|
kernel_add_stream(c->call->callmaster->kernelfd, &ks, 0);
|
|
|
|
|
kernel_add_stream(cm->kernelfd, &ks, 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
p->kernelized = 1;
|
|
|
|
|
|