Commit c7acc660 authored by Sridhar Samudrala's avatar Sridhar Samudrala

[SCTP] Fix misc. issues in SCTP_PEER_ADDR_PARAMS set socket option.

Signed-off-by: default avatarSridhar Samudrala <sri@us.ibm.com>
parent 77aacb35
...@@ -856,12 +856,6 @@ struct sctp_transport { ...@@ -856,12 +856,6 @@ struct sctp_transport {
/* Error count : The current error count for this destination. */ /* Error count : The current error count for this destination. */
unsigned short error_count; unsigned short error_count;
/* Error : Current error threshold for this destination
* Threshold : i.e. what value marks the destination down if
* : errorCount reaches this value.
*/
unsigned short error_threshold;
/* This is the max_retrans value for the transport and will /* This is the max_retrans value for the transport and will
* be initialized to proto.max_retrans.path. This can be changed * be initialized to proto.max_retrans.path. This can be changed
* using SCTP_SET_PEER_ADDR_PARAMS socket option. * using SCTP_SET_PEER_ADDR_PARAMS socket option.
......
...@@ -501,7 +501,6 @@ struct sctp_transport *sctp_assoc_add_peer(struct sctp_association *asoc, ...@@ -501,7 +501,6 @@ struct sctp_transport *sctp_assoc_add_peer(struct sctp_association *asoc,
peer->partial_bytes_acked = 0; peer->partial_bytes_acked = 0;
peer->flight_size = 0; peer->flight_size = 0;
peer->error_threshold = peer->max_retrans;
/* By default, enable heartbeat for peer address. */ /* By default, enable heartbeat for peer address. */
peer->hb_allowed = 1; peer->hb_allowed = 1;
...@@ -512,7 +511,7 @@ struct sctp_transport *sctp_assoc_add_peer(struct sctp_association *asoc, ...@@ -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); peer->hb_interval = msecs_to_jiffies(sp->paddrparam.spp_hbinterval);
/* Set the path max_retrans. */ /* 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 */ /* Set the transport's RTO.initial value */
peer->rto = asoc->rto_initial; peer->rto = asoc->rto_initial;
......
...@@ -415,7 +415,7 @@ static void sctp_do_8_2_transport_strike(struct sctp_association *asoc, ...@@ -415,7 +415,7 @@ static void sctp_do_8_2_transport_strike(struct sctp_association *asoc,
asoc->overall_error_count++; asoc->overall_error_count++;
if (transport->active && if (transport->active &&
(transport->error_count++ >= transport->error_threshold)) { (transport->error_count++ >= transport->max_retrans)) {
SCTP_DEBUG_PRINTK("transport_strike: transport " SCTP_DEBUG_PRINTK("transport_strike: transport "
"IP:%d.%d.%d.%d failed.\n", "IP:%d.%d.%d.%d failed.\n",
NIPQUAD(transport->ipaddr.v4.sin_addr)); NIPQUAD(transport->ipaddr.v4.sin_addr));
......
...@@ -1711,10 +1711,13 @@ static int sctp_setsockopt_peer_addr_params(struct sock *sk, ...@@ -1711,10 +1711,13 @@ static int sctp_setsockopt_peer_addr_params(struct sock *sk,
/* update default value for endpoint (all future associations) */ /* update default value for endpoint (all future associations) */
if (!params.spp_assoc_id && if (!params.spp_assoc_id &&
sctp_is_any(( union sctp_addr *)&params.spp_address)) { sctp_is_any(( union sctp_addr *)&params.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 = sctp_sk(sk)->paddrparam.spp_hbinterval =
params.spp_hbinterval; params.spp_hbinterval;
if (sctp_max_retrans_path) if (params.spp_pathmaxrxt)
sctp_sk(sk)->paddrparam.spp_pathmaxrxt = sctp_sk(sk)->paddrparam.spp_pathmaxrxt =
params.spp_pathmaxrxt; params.spp_pathmaxrxt;
return 0; return 0;
...@@ -1756,7 +1759,8 @@ static int sctp_setsockopt_peer_addr_params(struct sock *sk, ...@@ -1756,7 +1759,8 @@ static int sctp_setsockopt_peer_addr_params(struct sock *sk,
/* spp_pathmaxrxt contains the maximum number of retransmissions /* spp_pathmaxrxt contains the maximum number of retransmissions
* before this address shall be considered unreachable. * 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; return 0;
} }
...@@ -2935,7 +2939,7 @@ static int sctp_getsockopt_peer_addr_params(struct sock *sk, int len, ...@@ -2935,7 +2939,7 @@ static int sctp_getsockopt_peer_addr_params(struct sock *sk, int len,
/* spp_pathmaxrxt contains the maximum number of retransmissions /* spp_pathmaxrxt contains the maximum number of retransmissions
* before this address shall be considered unreachable. * before this address shall be considered unreachable.
*/ */
params.spp_pathmaxrxt = trans->error_threshold; params.spp_pathmaxrxt = trans->max_retrans;
done: done:
if (copy_to_user(optval, &params, len)) if (copy_to_user(optval, &params, len))
......
...@@ -88,7 +88,6 @@ static struct sctp_transport *sctp_transport_init(struct sctp_transport *peer, ...@@ -88,7 +88,6 @@ static struct sctp_transport *sctp_transport_init(struct sctp_transport *peer,
/* Initialize the default path max_retrans. */ /* Initialize the default path max_retrans. */
peer->max_retrans = sctp_max_retrans_path; peer->max_retrans = sctp_max_retrans_path;
peer->error_threshold = 0;
peer->error_count = 0; peer->error_count = 0;
INIT_LIST_HEAD(&peer->transmitted); INIT_LIST_HEAD(&peer->transmitted);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment