diff options
author | Sridhar Samudrala <sri@us.ibm.com> | 2004-12-28 19:35:11 -0800 |
---|---|---|
committer | Sridhar Samudrala <sri@us.ibm.com> | 2004-12-28 19:35:11 -0800 |
commit | c7acc660113fdb2f0d72849838de5e3db464d609 (patch) | |
tree | 53bcd160fe291c4614fa81ce27eaea3d31bafdf2 /net | |
parent | 77aacb3595e28434b56ca616750b5ed078165261 (diff) | |
download | history-c7acc660113fdb2f0d72849838de5e3db464d609.tar.gz |
[SCTP] Fix misc. issues in SCTP_PEER_ADDR_PARAMS set socket option.
Signed-off-by: Sridhar Samudrala <sri@us.ibm.com>
Diffstat (limited to 'net')
-rw-r--r-- | net/sctp/associola.c | 3 | ||||
-rw-r--r-- | net/sctp/sm_sideeffect.c | 2 | ||||
-rw-r--r-- | net/sctp/socket.c | 12 | ||||
-rw-r--r-- | net/sctp/transport.c | 1 |
4 files changed, 10 insertions, 8 deletions
diff --git a/net/sctp/associola.c b/net/sctp/associola.c index 116ac0f986aa2a..fda3bc435c7c7a 100644 --- a/net/sctp/associola.c +++ b/net/sctp/associola.c @@ -501,7 +501,6 @@ struct sctp_transport *sctp_assoc_add_peer(struct sctp_association *asoc, peer->partial_bytes_acked = 0; peer->flight_size = 0; - peer->error_threshold = peer->max_retrans; /* By default, enable heartbeat for peer address. */ peer->hb_allowed = 1; @@ -512,7 +511,7 @@ struct sctp_transport *sctp_assoc_add_peer(struct sctp_association *asoc, peer->hb_interval = msecs_to_jiffies(sp->paddrparam.spp_hbinterval); /* Set the path max_retrans. */ - peer->max_retrans = asoc->max_retrans; + peer->max_retrans = sp->paddrparam.spp_pathmaxrxt; /* Set the transport's RTO.initial value */ peer->rto = asoc->rto_initial; diff --git a/net/sctp/sm_sideeffect.c b/net/sctp/sm_sideeffect.c index b5d983cc05d009..f65fa441952f7b 100644 --- a/net/sctp/sm_sideeffect.c +++ b/net/sctp/sm_sideeffect.c @@ -415,7 +415,7 @@ static void sctp_do_8_2_transport_strike(struct sctp_association *asoc, asoc->overall_error_count++; if (transport->active && - (transport->error_count++ >= transport->error_threshold)) { + (transport->error_count++ >= transport->max_retrans)) { SCTP_DEBUG_PRINTK("transport_strike: transport " "IP:%d.%d.%d.%d failed.\n", NIPQUAD(transport->ipaddr.v4.sin_addr)); diff --git a/net/sctp/socket.c b/net/sctp/socket.c index 7f2d31dbc9359b..e3467bff62be1f 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c @@ -1711,10 +1711,13 @@ static int sctp_setsockopt_peer_addr_params(struct sock *sk, /* update default value for endpoint (all future associations) */ if (!params.spp_assoc_id && sctp_is_any(( union sctp_addr *)¶ms.spp_address)) { - if (params.spp_hbinterval) + /* Manual heartbeat on an endpoint is invalid. */ + if (0xffffffff == params.spp_hbinterval) + return -EINVAL; + else if (params.spp_hbinterval) sctp_sk(sk)->paddrparam.spp_hbinterval = params.spp_hbinterval; - if (sctp_max_retrans_path) + if (params.spp_pathmaxrxt) sctp_sk(sk)->paddrparam.spp_pathmaxrxt = params.spp_pathmaxrxt; return 0; @@ -1756,7 +1759,8 @@ static int sctp_setsockopt_peer_addr_params(struct sock *sk, /* spp_pathmaxrxt contains the maximum number of retransmissions * before this address shall be considered unreachable. */ - trans->error_threshold = params.spp_pathmaxrxt; + if (params.spp_pathmaxrxt) + trans->max_retrans = params.spp_pathmaxrxt; return 0; } @@ -2935,7 +2939,7 @@ static int sctp_getsockopt_peer_addr_params(struct sock *sk, int len, /* spp_pathmaxrxt contains the maximum number of retransmissions * before this address shall be considered unreachable. */ - params.spp_pathmaxrxt = trans->error_threshold; + params.spp_pathmaxrxt = trans->max_retrans; done: if (copy_to_user(optval, ¶ms, len)) diff --git a/net/sctp/transport.c b/net/sctp/transport.c index 69e692c74dac3b..3fcca5ec314b06 100644 --- a/net/sctp/transport.c +++ b/net/sctp/transport.c @@ -88,7 +88,6 @@ static struct sctp_transport *sctp_transport_init(struct sctp_transport *peer, /* Initialize the default path max_retrans. */ peer->max_retrans = sctp_max_retrans_path; - peer->error_threshold = 0; peer->error_count = 0; INIT_LIST_HEAD(&peer->transmitted); |