diff options
author | Patrick McHardy <kaber@trash.net> | 2008-03-25 23:26:43 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-03-25 23:26:43 -0400 |
commit | c7f485abd618e0d249bdd1abdc586bd10fee1954 (patch) | |
tree | 618ad078a96c0f7c641efaa38f0d363ee2775e42 /net/ipv4 | |
parent | 0d0ab0378d67517a4f4ae3497706c13d9dd24af1 (diff) |
[NETFILTER]: nf_conntrack_sip: RTP routing optimization
Optimize call routing between NATed endpoints: when an external
registrar sends a media description that contains an existing RTP
expectation from a different SNATed connection, the gatekeeper
is trying to route the call directly between the two endpoints.
We assume both endpoints can reach each other directly and
"un-NAT" the addresses, which makes the media stream go between
the two endpoints directly.
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4')
-rw-r--r-- | net/ipv4/netfilter/nf_nat_sip.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/net/ipv4/netfilter/nf_nat_sip.c b/net/ipv4/netfilter/nf_nat_sip.c index 4429069d9b42..bcddccddf768 100644 --- a/net/ipv4/netfilter/nf_nat_sip.c +++ b/net/ipv4/netfilter/nf_nat_sip.c | |||
@@ -461,6 +461,7 @@ static void __exit nf_nat_sip_fini(void) | |||
461 | rcu_assign_pointer(nf_nat_sip_hook, NULL); | 461 | rcu_assign_pointer(nf_nat_sip_hook, NULL); |
462 | rcu_assign_pointer(nf_nat_sip_expect_hook, NULL); | 462 | rcu_assign_pointer(nf_nat_sip_expect_hook, NULL); |
463 | rcu_assign_pointer(nf_nat_sdp_addr_hook, NULL); | 463 | rcu_assign_pointer(nf_nat_sdp_addr_hook, NULL); |
464 | rcu_assign_pointer(nf_nat_sdp_port_hook, NULL); | ||
464 | rcu_assign_pointer(nf_nat_sdp_session_hook, NULL); | 465 | rcu_assign_pointer(nf_nat_sdp_session_hook, NULL); |
465 | rcu_assign_pointer(nf_nat_sdp_media_hook, NULL); | 466 | rcu_assign_pointer(nf_nat_sdp_media_hook, NULL); |
466 | synchronize_rcu(); | 467 | synchronize_rcu(); |
@@ -471,11 +472,13 @@ static int __init nf_nat_sip_init(void) | |||
471 | BUG_ON(nf_nat_sip_hook != NULL); | 472 | BUG_ON(nf_nat_sip_hook != NULL); |
472 | BUG_ON(nf_nat_sip_expect_hook != NULL); | 473 | BUG_ON(nf_nat_sip_expect_hook != NULL); |
473 | BUG_ON(nf_nat_sdp_addr_hook != NULL); | 474 | BUG_ON(nf_nat_sdp_addr_hook != NULL); |
475 | BUG_ON(nf_nat_sdp_port_hook != NULL); | ||
474 | BUG_ON(nf_nat_sdp_session_hook != NULL); | 476 | BUG_ON(nf_nat_sdp_session_hook != NULL); |
475 | BUG_ON(nf_nat_sdp_media_hook != NULL); | 477 | BUG_ON(nf_nat_sdp_media_hook != NULL); |
476 | rcu_assign_pointer(nf_nat_sip_hook, ip_nat_sip); | 478 | rcu_assign_pointer(nf_nat_sip_hook, ip_nat_sip); |
477 | rcu_assign_pointer(nf_nat_sip_expect_hook, ip_nat_sip_expect); | 479 | rcu_assign_pointer(nf_nat_sip_expect_hook, ip_nat_sip_expect); |
478 | rcu_assign_pointer(nf_nat_sdp_addr_hook, ip_nat_sdp_addr); | 480 | rcu_assign_pointer(nf_nat_sdp_addr_hook, ip_nat_sdp_addr); |
481 | rcu_assign_pointer(nf_nat_sdp_port_hook, ip_nat_sdp_port); | ||
479 | rcu_assign_pointer(nf_nat_sdp_session_hook, ip_nat_sdp_session); | 482 | rcu_assign_pointer(nf_nat_sdp_session_hook, ip_nat_sdp_session); |
480 | rcu_assign_pointer(nf_nat_sdp_media_hook, ip_nat_sdp_media); | 483 | rcu_assign_pointer(nf_nat_sdp_media_hook, ip_nat_sdp_media); |
481 | return 0; | 484 | return 0; |