diff options
author | Nicolas Dichtel <nicolas.dichtel@6wind.com> | 2012-10-03 05:43:22 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-10-04 15:53:48 -0400 |
commit | edfee0339e681a784ebacec7e8c2dc97dc6d2839 (patch) | |
tree | ec4c3953956d2de79ee326d08e46c6d9736a1068 /include/net/sctp | |
parent | 575659936f9d392b93b03ce97a58dbd4fce18abd (diff) | |
download | op-kernel-dev-edfee0339e681a784ebacec7e8c2dc97dc6d2839.zip op-kernel-dev-edfee0339e681a784ebacec7e8c2dc97dc6d2839.tar.gz |
sctp: check src addr when processing SACK to update transport state
Suppose we have an SCTP connection with two paths. After connection is
established, path1 is not available, thus this path is marked as inactive. Then
traffic goes through path2, but for some reasons packets are delayed (after
rto.max). Because packets are delayed, the retransmit mechanism will switch
again to path1. At this time, we receive a delayed SACK from path2. When we
update the state of the path in sctp_check_transmitted(), we do not take into
account the source address of the SACK, hence we update the wrong path.
Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Acked-by: Vlad Yasevich <vyasevich@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/sctp')
-rw-r--r-- | include/net/sctp/structs.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h index 0fef00f..64158aa 100644 --- a/include/net/sctp/structs.h +++ b/include/net/sctp/structs.h @@ -1068,7 +1068,7 @@ void sctp_outq_init(struct sctp_association *, struct sctp_outq *); void sctp_outq_teardown(struct sctp_outq *); void sctp_outq_free(struct sctp_outq*); int sctp_outq_tail(struct sctp_outq *, struct sctp_chunk *chunk); -int sctp_outq_sack(struct sctp_outq *, struct sctp_sackhdr *); +int sctp_outq_sack(struct sctp_outq *, struct sctp_chunk *); int sctp_outq_is_empty(const struct sctp_outq *); void sctp_outq_restart(struct sctp_outq *); |