diff options
author | Bhaskar Dutta <bhaskie@gmail.com> | 2009-09-03 07:55:47 -0400 |
---|---|---|
committer | Vlad Yasevich <vladislav.yasevich@hp.com> | 2009-09-04 18:21:01 -0400 |
commit | 723884339f90a9c420783135168cc1045750eb5d (patch) | |
tree | c8538602e56f2310470b0970bf121a1000313401 /net/sctp/protocol.c | |
parent | 8da645e101a8c20c6073efda3c7cc74eec01b87f (diff) |
sctp: Sysctl configuration for IPv4 Address Scoping
This patch introduces a new sysctl option to make IPv4 Address Scoping
configurable <draft-stewart-tsvwg-sctp-ipv4-00.txt>.
In networking environments where DNAT rules in iptables prerouting
chains convert destination IP's to link-local/private IP addresses,
SCTP connections fail to establish as the INIT chunk is dropped by the
kernel due to address scope match failure.
For example to support overlapping IP addresses (same IP address with
different vlan id) a Layer-5 application listens on link local IP's,
and there is a DNAT rule that maps the destination IP to a link local
IP. Such applications never get the SCTP INIT if the address-scoping
draft is strictly followed.
This sysctl configuration allows SCTP to function in such
unconventional networking environments.
Sysctl options:
0 - Disable IPv4 address scoping draft altogether
1 - Enable IPv4 address scoping (default, current behavior)
2 - Enable address scoping but allow IPv4 private addresses in init/init-ack
3 - Enable address scoping but allow IPv4 link local address in init/init-ack
Signed-off-by: Bhaskar Dutta <bhaskar.dutta@globallogic.com>
Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com>
Diffstat (limited to 'net/sctp/protocol.c')
-rw-r--r-- | net/sctp/protocol.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c index a76da657244a..60093be8385d 100644 --- a/net/sctp/protocol.c +++ b/net/sctp/protocol.c | |||
@@ -431,16 +431,14 @@ static int sctp_v4_available(union sctp_addr *addr, struct sctp_sock *sp) | |||
431 | * of requested destination address, sender and receiver | 431 | * of requested destination address, sender and receiver |
432 | * SHOULD include all of its addresses with level greater | 432 | * SHOULD include all of its addresses with level greater |
433 | * than or equal to L. | 433 | * than or equal to L. |
434 | * | ||
435 | * IPv4 scoping can be controlled through sysctl option | ||
436 | * net.sctp.addr_scope_policy | ||
434 | */ | 437 | */ |
435 | static sctp_scope_t sctp_v4_scope(union sctp_addr *addr) | 438 | static sctp_scope_t sctp_v4_scope(union sctp_addr *addr) |
436 | { | 439 | { |
437 | sctp_scope_t retval; | 440 | sctp_scope_t retval; |
438 | 441 | ||
439 | /* Should IPv4 scoping be a sysctl configurable option | ||
440 | * so users can turn it off (default on) for certain | ||
441 | * unconventional networking environments? | ||
442 | */ | ||
443 | |||
444 | /* Check for unusable SCTP addresses. */ | 442 | /* Check for unusable SCTP addresses. */ |
445 | if (IS_IPV4_UNUSABLE_ADDRESS(addr->v4.sin_addr.s_addr)) { | 443 | if (IS_IPV4_UNUSABLE_ADDRESS(addr->v4.sin_addr.s_addr)) { |
446 | retval = SCTP_SCOPE_UNUSABLE; | 444 | retval = SCTP_SCOPE_UNUSABLE; |
@@ -1259,6 +1257,9 @@ SCTP_STATIC __init int sctp_init(void) | |||
1259 | /* Disable AUTH by default. */ | 1257 | /* Disable AUTH by default. */ |
1260 | sctp_auth_enable = 0; | 1258 | sctp_auth_enable = 0; |
1261 | 1259 | ||
1260 | /* Set SCOPE policy to enabled */ | ||
1261 | sctp_scope_policy = SCTP_SCOPE_POLICY_ENABLE; | ||
1262 | |||
1262 | sctp_sysctl_register(); | 1263 | sctp_sysctl_register(); |
1263 | 1264 | ||
1264 | INIT_LIST_HEAD(&sctp_address_families); | 1265 | INIT_LIST_HEAD(&sctp_address_families); |