aboutsummaryrefslogtreecommitdiffstats
path: root/net/sctp
diff options
context:
space:
mode:
authorVlad Yasevich <vladislav.yasevich@hp.com>2007-08-24 19:30:25 +0900
committerVlad Yasevich <vladislav.yasevich@hp.com>2007-08-30 13:55:41 -0400
commitcc75689a4c4eb94b2fd7e3870347b9237ab39503 (patch)
tree973cdbe0003d508c643a39ed629b50137e79d3a1 /net/sctp
parent2772b495efe341a02c867bc3a03d7362bd336832 (diff)
downloadkernel_goldelico_gta04-cc75689a4c4eb94b2fd7e3870347b9237ab39503.zip
kernel_goldelico_gta04-cc75689a4c4eb94b2fd7e3870347b9237ab39503.tar.gz
kernel_goldelico_gta04-cc75689a4c4eb94b2fd7e3870347b9237ab39503.tar.bz2
SCTP: Uncomfirmed transports can't become Inactive
Do not set Unconfirmed transports to Inactive state. This may result in an inactive association being destroyed since we start counting errors on "inactive" transports against the association. This was found at the SCTP interop event. Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com>
Diffstat (limited to 'net/sctp')
-rw-r--r--net/sctp/associola.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/net/sctp/associola.c b/net/sctp/associola.c
index 498edb0..2ad1caf 100644
--- a/net/sctp/associola.c
+++ b/net/sctp/associola.c
@@ -727,7 +727,12 @@ void sctp_assoc_control_transport(struct sctp_association *asoc,
break;
case SCTP_TRANSPORT_DOWN:
- transport->state = SCTP_INACTIVE;
+ /* if the transort was never confirmed, do not transition it
+ * to inactive state.
+ */
+ if (transport->state != SCTP_UNCONFIRMED)
+ transport->state = SCTP_INACTIVE;
+
spc_state = SCTP_ADDR_UNREACHABLE;
break;