diff options
Diffstat (limited to 'net/sctp')
-rw-r--r-- | net/sctp/protocol.c | 7 | ||||
-rw-r--r-- | net/sctp/sm_sideeffect.c | 7 |
2 files changed, 9 insertions, 5 deletions
diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c index 074b60e2faab..af5afca4b85a 100644 --- a/net/sctp/protocol.c +++ b/net/sctp/protocol.c | |||
@@ -491,8 +491,13 @@ static void sctp_v4_get_dst(struct sctp_transport *t, union sctp_addr *saddr, | |||
491 | continue; | 491 | continue; |
492 | if ((laddr->state == SCTP_ADDR_SRC) && | 492 | if ((laddr->state == SCTP_ADDR_SRC) && |
493 | (AF_INET == laddr->a.sa.sa_family)) { | 493 | (AF_INET == laddr->a.sa.sa_family)) { |
494 | fl4->saddr = laddr->a.v4.sin_addr.s_addr; | ||
495 | fl4->fl4_sport = laddr->a.v4.sin_port; | 494 | fl4->fl4_sport = laddr->a.v4.sin_port; |
495 | flowi4_update_output(fl4, | ||
496 | asoc->base.sk->sk_bound_dev_if, | ||
497 | RT_CONN_FLAGS(asoc->base.sk), | ||
498 | daddr->v4.sin_addr.s_addr, | ||
499 | laddr->a.v4.sin_addr.s_addr); | ||
500 | |||
496 | rt = ip_route_output_key(sock_net(sk), fl4); | 501 | rt = ip_route_output_key(sock_net(sk), fl4); |
497 | if (!IS_ERR(rt)) { | 502 | if (!IS_ERR(rt)) { |
498 | dst = &rt->dst; | 503 | dst = &rt->dst; |
diff --git a/net/sctp/sm_sideeffect.c b/net/sctp/sm_sideeffect.c index 5d6883ff00c3..fef2acdf4a2e 100644 --- a/net/sctp/sm_sideeffect.c +++ b/net/sctp/sm_sideeffect.c | |||
@@ -496,11 +496,10 @@ static void sctp_do_8_2_transport_strike(sctp_cmd_seq_t *commands, | |||
496 | 496 | ||
497 | /* If the transport error count is greater than the pf_retrans | 497 | /* If the transport error count is greater than the pf_retrans |
498 | * threshold, and less than pathmaxrtx, and if the current state | 498 | * threshold, and less than pathmaxrtx, and if the current state |
499 | * is not SCTP_UNCONFIRMED, then mark this transport as Partially | 499 | * is SCTP_ACTIVE, then mark this transport as Partially Failed, |
500 | * Failed, see SCTP Quick Failover Draft, section 5.1 | 500 | * see SCTP Quick Failover Draft, section 5.1 |
501 | */ | 501 | */ |
502 | if ((transport->state != SCTP_PF) && | 502 | if ((transport->state == SCTP_ACTIVE) && |
503 | (transport->state != SCTP_UNCONFIRMED) && | ||
504 | (asoc->pf_retrans < transport->pathmaxrxt) && | 503 | (asoc->pf_retrans < transport->pathmaxrxt) && |
505 | (transport->error_count > asoc->pf_retrans)) { | 504 | (transport->error_count > asoc->pf_retrans)) { |
506 | 505 | ||