Browse Source

Fall back to userspace forwarding if kernel module is unavailable

git.mgm/mediaproxy-ng/2.0
Richard Fuchs 14 years ago
parent
commit
a23fe2f7b6
2 changed files with 22 additions and 10 deletions
  1. +8
    -4
      daemon/call.c
  2. +14
    -6
      daemon/main.c

+ 8
- 4
daemon/call.c View File

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


+ 14
- 6
daemon/main.c View File

@ -267,7 +267,7 @@ int main(int argc, char **argv) {
struct callmaster *m;
struct control *c;
struct control_udp *cu;
int kfd;
int kfd = -1;
int ret;
options(&argc, &argv);
@ -275,11 +275,19 @@ int main(int argc, char **argv) {
resources();
if (kernel_create_table(table))
die("Failed to create kernel table %i\n", table);
kfd = kernel_open_table(table);
if (kfd == -1)
die("Failed to open kernel table %i\n", table);
if (table >= 0 && kernel_create_table(table)) {
fprintf(stderr, "FAILED TO CREATE KERNEL TABLE %i, KERNEL FORWARDING DISABLED\n", table);
mylog(LOG_CRIT, "FAILED TO CREATE KERNEL TABLE %i, KERNEL FORWARDING DISABLED\n", table);
table = -1;
}
if (table >= 0) {
kfd = kernel_open_table(table);
if (kfd == -1) {
fprintf(stderr, "FAILED TO OPEN KERNEL TABLE %i, KERNEL FORWARDING DISABLED\n", table);
mylog(LOG_CRIT, "FAILED TO OPEN KERNEL TABLE %i, KERNEL FORWARDING DISABLED\n", table);
table = -1;
}
}
p = poller_new();
if (!p)


Loading…
Cancel
Save