mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
sctp: Implement quick failover draft from tsvwg
I've seen several attempts recently made to do quick failover of sctp transports by reducing various retransmit timers and counters. While its possible to implement a faster failover on multihomed sctp associations, its not particularly robust, in that it can lead to unneeded retransmits, as well as false connection failures due to intermittent latency on a network. Instead, lets implement the new ietf quick failover draft found here: http://tools.ietf.org/html/draft-nishida-tsvwg-sctp-failover-05 This will let the sctp stack identify transports that have had a small number of errors, and avoid using them quickly until their reliability can be re-established. I've tested this out on two virt guests connected via multiple isolated virt networks and believe its in compliance with the above draft and works well. Signed-off-by: Neil Horman <nhorman@tuxdriver.com> CC: Vlad Yasevich <vyasevich@gmail.com> CC: Sridhar Samudrala <sri@us.ibm.com> CC: "David S. Miller" <davem@davemloft.net> CC: linux-sctp@vger.kernel.org CC: joe@perches.com Acked-by: Vlad Yasevich <vyasevich@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
e3906486f6
commit
5aa93bcf66
10 changed files with 221 additions and 15 deletions
|
@ -161,6 +161,12 @@ extern struct sctp_globals {
|
|||
int max_retrans_path;
|
||||
int max_retrans_init;
|
||||
|
||||
/* Potentially-Failed.Max.Retrans sysctl value
|
||||
* taken from:
|
||||
* http://tools.ietf.org/html/draft-nishida-tsvwg-sctp-failover-05
|
||||
*/
|
||||
int pf_retrans;
|
||||
|
||||
/*
|
||||
* Policy for preforming sctp/socket accounting
|
||||
* 0 - do socket level accounting, all assocs share sk_sndbuf
|
||||
|
@ -258,6 +264,7 @@ extern struct sctp_globals {
|
|||
#define sctp_sndbuf_policy (sctp_globals.sndbuf_policy)
|
||||
#define sctp_rcvbuf_policy (sctp_globals.rcvbuf_policy)
|
||||
#define sctp_max_retrans_path (sctp_globals.max_retrans_path)
|
||||
#define sctp_pf_retrans (sctp_globals.pf_retrans)
|
||||
#define sctp_max_retrans_init (sctp_globals.max_retrans_init)
|
||||
#define sctp_sack_timeout (sctp_globals.sack_timeout)
|
||||
#define sctp_hb_interval (sctp_globals.hb_interval)
|
||||
|
@ -990,10 +997,15 @@ struct sctp_transport {
|
|||
|
||||
/* This is the max_retrans value for the transport and will
|
||||
* be initialized from the assocs value. This can be changed
|
||||
* using SCTP_SET_PEER_ADDR_PARAMS socket option.
|
||||
* using the SCTP_SET_PEER_ADDR_PARAMS socket option.
|
||||
*/
|
||||
__u16 pathmaxrxt;
|
||||
|
||||
/* This is the partially failed retrans value for the transport
|
||||
* and will be initialized from the assocs value. This can be changed
|
||||
* using the SCTP_PEER_ADDR_THLDS socket option
|
||||
*/
|
||||
int pf_retrans;
|
||||
/* PMTU : The current known path MTU. */
|
||||
__u32 pathmtu;
|
||||
|
||||
|
@ -1664,6 +1676,12 @@ struct sctp_association {
|
|||
*/
|
||||
int max_retrans;
|
||||
|
||||
/* This is the partially failed retrans value for the transport
|
||||
* and will be initialized from the assocs value. This can be
|
||||
* changed using the SCTP_PEER_ADDR_THLDS socket option
|
||||
*/
|
||||
int pf_retrans;
|
||||
|
||||
/* Maximum number of times the endpoint will retransmit INIT */
|
||||
__u16 max_init_attempts;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue