diff options
author | Michio Honda <micchie@sfc.wide.ad.jp> | 2011-06-17 04:03:23 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-11-08 21:11:29 +0100 |
commit | ddc4bbee6ef1ed20314be3888dd39ceefe233e79 (patch) | |
tree | d52c0d7e64e83dd8f17fd0340c3c62402c7cd7ce /net/sctp/transport.c | |
parent | net: better pcpu data alignment (diff) | |
download | linux-ddc4bbee6ef1ed20314be3888dd39ceefe233e79.tar.xz 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.c | 16 |
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; +} |