summaryrefslogtreecommitdiffstats
path: root/net/sctp/transport.c
diff options
context:
space:
mode:
authorMichio Honda <micchie@sfc.wide.ad.jp>2011-06-17 11:03:23 +0900
committerDavid S. Miller <davem@davemloft.net>2011-11-08 15:11:29 -0500
commitddc4bbee6ef1ed20314be3888dd39ceefe233e79 (patch)
treed52c0d7e64e83dd8f17fd0340c3c62402c7cd7ce /net/sctp/transport.c
parent8ce120f11898c921329a5f618d01dcc1e8e69cac (diff)
downloadlinux-ddc4bbee6ef1ed20314be3888dd39ceefe233e79.tar.gz
linux-ddc4bbee6ef1ed20314be3888dd39ceefe233e79.tar.bz2
linux-ddc4bbee6ef1ed20314be3888dd39ceefe233e79.zip
sctp: fasthandoff with ASCONF at mobile-node
Fast retransmission after changing the last address with ASCONF negotiation Signed-off-by: Michio Honda <micchie@sfc.wide.ad.jp> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sctp/transport.c')
-rw-r--r--net/sctp/transport.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/net/sctp/transport.c b/net/sctp/transport.c
index 394c57ca2f54..3889330b7b04 100644
--- a/net/sctp/transport.c
+++ b/net/sctp/transport.c
@@ -641,3 +641,19 @@ void sctp_transport_reset(struct sctp_transport *t)
t->cacc.next_tsn_at_change = 0;
t->cacc.cacc_saw_newack = 0;
}
+
+/* Schedule retransmission on the given transport */
+void sctp_transport_immediate_rtx(struct sctp_transport *t)
+{
+ /* Stop pending T3_rtx_timer */
+ if (timer_pending(&t->T3_rtx_timer)) {
+ (void)del_timer(&t->T3_rtx_timer);
+ sctp_transport_put(t);
+ }
+ sctp_retransmit(&t->asoc->outqueue, t, SCTP_RTXR_T3_RTX);
+ if (!timer_pending(&t->T3_rtx_timer)) {
+ if (!mod_timer(&t->T3_rtx_timer, jiffies + t->rto))
+ sctp_transport_hold(t);
+ }
+ return;
+}