Lines Matching +full:max +full:- +full:reason
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Copyright (c) 1999-2000 Cisco, Inc.
4 * Copyright (c) 1999-2001 Motorola, Inc.
5 * Copyright (c) 2001-2003 International Business Machines Corp.
17 * lksctp developers <linux-sctp@vger.kernel.org>
46 peer->af_specific = sctp_get_af_specific(addr->sa.sa_family); in sctp_transport_init()
47 memcpy(&peer->ipaddr, addr, peer->af_specific->sockaddr_len); in sctp_transport_init()
48 memset(&peer->saddr, 0, sizeof(union sctp_addr)); in sctp_transport_init()
50 peer->sack_generation = 0; in sctp_transport_init()
58 peer->rto = msecs_to_jiffies(net->sctp.rto_initial); in sctp_transport_init()
60 peer->last_time_heard = 0; in sctp_transport_init()
61 peer->last_time_ecne_reduced = jiffies; in sctp_transport_init()
63 peer->param_flags = SPP_HB_DISABLE | in sctp_transport_init()
68 peer->pathmaxrxt = net->sctp.max_retrans_path; in sctp_transport_init()
69 peer->pf_retrans = net->sctp.pf_retrans; in sctp_transport_init()
71 INIT_LIST_HEAD(&peer->transmitted); in sctp_transport_init()
72 INIT_LIST_HEAD(&peer->send_ready); in sctp_transport_init()
73 INIT_LIST_HEAD(&peer->transports); in sctp_transport_init()
75 timer_setup(&peer->T3_rtx_timer, sctp_generate_t3_rtx_event, 0); in sctp_transport_init()
76 timer_setup(&peer->hb_timer, sctp_generate_heartbeat_event, 0); in sctp_transport_init()
77 timer_setup(&peer->reconf_timer, sctp_generate_reconf_event, 0); in sctp_transport_init()
78 timer_setup(&peer->probe_timer, sctp_generate_probe_event, 0); in sctp_transport_init()
79 timer_setup(&peer->proto_unreach_timer, in sctp_transport_init()
82 /* Initialize the 64-bit random nonce sent with heartbeat. */ in sctp_transport_init()
83 get_random_bytes(&peer->hb_nonce, sizeof(peer->hb_nonce)); in sctp_transport_init()
85 refcount_set(&peer->refcnt, 1); in sctp_transport_init()
121 if (del_timer(&transport->hb_timer)) in sctp_transport_free()
129 if (del_timer(&transport->T3_rtx_timer)) in sctp_transport_free()
132 if (del_timer(&transport->reconf_timer)) in sctp_transport_free()
135 if (del_timer(&transport->probe_timer)) in sctp_transport_free()
139 if (del_timer(&transport->proto_unreach_timer)) in sctp_transport_free()
151 dst_release(transport->dst); in sctp_transport_destroy_rcu()
161 if (unlikely(refcount_read(&transport->refcnt))) { in sctp_transport_destroy()
166 sctp_packet_free(&transport->packet); in sctp_transport_destroy()
168 if (transport->asoc) in sctp_transport_destroy()
169 sctp_association_put(transport->asoc); in sctp_transport_destroy()
171 call_rcu(&transport->rcu, sctp_transport_destroy_rcu); in sctp_transport_destroy()
182 * retransmission), if the T3-rtx timer of that address is not running in sctp_transport_reset_t3_rtx()
187 if (!timer_pending(&transport->T3_rtx_timer)) in sctp_transport_reset_t3_rtx()
188 if (!mod_timer(&transport->T3_rtx_timer, in sctp_transport_reset_t3_rtx()
189 jiffies + transport->rto)) in sctp_transport_reset_t3_rtx()
199 if (!mod_timer(&transport->hb_timer, in sctp_transport_reset_hb_timer()
200 expires + get_random_u32_below(transport->rto))) in sctp_transport_reset_hb_timer()
206 if (!timer_pending(&transport->reconf_timer)) in sctp_transport_reset_reconf_timer()
207 if (!mod_timer(&transport->reconf_timer, in sctp_transport_reset_reconf_timer()
208 jiffies + transport->rto)) in sctp_transport_reset_reconf_timer()
214 if (!mod_timer(&transport->probe_timer, in sctp_transport_reset_probe_timer()
215 jiffies + transport->probe_interval)) in sctp_transport_reset_probe_timer()
221 if (!mod_timer(&transport->probe_timer, in sctp_transport_reset_raise_timer()
222 jiffies + transport->probe_interval * 30)) in sctp_transport_reset_raise_timer()
233 transport->asoc = asoc; in sctp_transport_set_owner()
241 if (!transport->dst || transport->dst->obsolete) { in sctp_transport_pmtu()
243 transport->af_specific->get_dst(transport, &transport->saddr, in sctp_transport_pmtu()
244 &transport->fl, sk); in sctp_transport_pmtu()
247 if (transport->param_flags & SPP_PMTUD_DISABLE) { in sctp_transport_pmtu()
248 struct sctp_association *asoc = transport->asoc; in sctp_transport_pmtu()
250 if (!transport->pathmtu && asoc && asoc->pathmtu) in sctp_transport_pmtu()
251 transport->pathmtu = asoc->pathmtu; in sctp_transport_pmtu()
252 if (transport->pathmtu) in sctp_transport_pmtu()
256 if (transport->dst) in sctp_transport_pmtu()
257 transport->pathmtu = sctp_dst_mtu(transport->dst); in sctp_transport_pmtu()
259 transport->pathmtu = SCTP_DEFAULT_MAXSEGMENT; in sctp_transport_pmtu()
266 if (t->pl.probe_count < SCTP_MAX_PROBES) in sctp_transport_pl_send()
269 t->pl.probe_count = 0; in sctp_transport_pl_send()
270 if (t->pl.state == SCTP_PL_BASE) { in sctp_transport_pl_send()
271 if (t->pl.probe_size == SCTP_BASE_PLPMTU) { /* BASE_PLPMTU Confirmation Failed */ in sctp_transport_pl_send()
272 t->pl.state = SCTP_PL_ERROR; /* Base -> Error */ in sctp_transport_pl_send()
274 t->pl.pmtu = SCTP_BASE_PLPMTU; in sctp_transport_pl_send()
275 t->pathmtu = t->pl.pmtu + sctp_transport_pl_hlen(t); in sctp_transport_pl_send()
276 sctp_assoc_sync_pmtu(t->asoc); in sctp_transport_pl_send()
278 } else if (t->pl.state == SCTP_PL_SEARCH) { in sctp_transport_pl_send()
279 if (t->pl.pmtu == t->pl.probe_size) { /* Black Hole Detected */ in sctp_transport_pl_send()
280 t->pl.state = SCTP_PL_BASE; /* Search -> Base */ in sctp_transport_pl_send()
281 t->pl.probe_size = SCTP_BASE_PLPMTU; in sctp_transport_pl_send()
282 t->pl.probe_high = 0; in sctp_transport_pl_send()
284 t->pl.pmtu = SCTP_BASE_PLPMTU; in sctp_transport_pl_send()
285 t->pathmtu = t->pl.pmtu + sctp_transport_pl_hlen(t); in sctp_transport_pl_send()
286 sctp_assoc_sync_pmtu(t->asoc); in sctp_transport_pl_send()
288 t->pl.probe_high = t->pl.probe_size; in sctp_transport_pl_send()
289 t->pl.probe_size = t->pl.pmtu; in sctp_transport_pl_send()
291 } else if (t->pl.state == SCTP_PL_COMPLETE) { in sctp_transport_pl_send()
292 if (t->pl.pmtu == t->pl.probe_size) { /* Black Hole Detected */ in sctp_transport_pl_send()
293 t->pl.state = SCTP_PL_BASE; /* Search Complete -> Base */ in sctp_transport_pl_send()
294 t->pl.probe_size = SCTP_BASE_PLPMTU; in sctp_transport_pl_send()
296 t->pl.pmtu = SCTP_BASE_PLPMTU; in sctp_transport_pl_send()
297 t->pathmtu = t->pl.pmtu + sctp_transport_pl_hlen(t); in sctp_transport_pl_send()
298 sctp_assoc_sync_pmtu(t->asoc); in sctp_transport_pl_send()
304 __func__, t, t->pl.state, t->pl.pmtu, t->pl.probe_size, t->pl.probe_high); in sctp_transport_pl_send()
305 t->pl.probe_count++; in sctp_transport_pl_send()
311 __func__, t, t->pl.state, t->pl.pmtu, t->pl.probe_size, t->pl.probe_high); in sctp_transport_pl_recv()
313 t->pl.pmtu = t->pl.probe_size; in sctp_transport_pl_recv()
314 t->pl.probe_count = 0; in sctp_transport_pl_recv()
315 if (t->pl.state == SCTP_PL_BASE) { in sctp_transport_pl_recv()
316 t->pl.state = SCTP_PL_SEARCH; /* Base -> Search */ in sctp_transport_pl_recv()
317 t->pl.probe_size += SCTP_PL_BIG_STEP; in sctp_transport_pl_recv()
318 } else if (t->pl.state == SCTP_PL_ERROR) { in sctp_transport_pl_recv()
319 t->pl.state = SCTP_PL_SEARCH; /* Error -> Search */ in sctp_transport_pl_recv()
321 t->pl.pmtu = t->pl.probe_size; in sctp_transport_pl_recv()
322 t->pathmtu = t->pl.pmtu + sctp_transport_pl_hlen(t); in sctp_transport_pl_recv()
323 sctp_assoc_sync_pmtu(t->asoc); in sctp_transport_pl_recv()
324 t->pl.probe_size += SCTP_PL_BIG_STEP; in sctp_transport_pl_recv()
325 } else if (t->pl.state == SCTP_PL_SEARCH) { in sctp_transport_pl_recv()
326 if (!t->pl.probe_high) { in sctp_transport_pl_recv()
327 if (t->pl.probe_size < SCTP_MAX_PLPMTU) { in sctp_transport_pl_recv()
328 t->pl.probe_size = min(t->pl.probe_size + SCTP_PL_BIG_STEP, in sctp_transport_pl_recv()
332 t->pl.probe_high = SCTP_MAX_PLPMTU; in sctp_transport_pl_recv()
334 t->pl.probe_size += SCTP_PL_MIN_STEP; in sctp_transport_pl_recv()
335 if (t->pl.probe_size >= t->pl.probe_high) { in sctp_transport_pl_recv()
336 t->pl.probe_high = 0; in sctp_transport_pl_recv()
337 t->pl.state = SCTP_PL_COMPLETE; /* Search -> Search Complete */ in sctp_transport_pl_recv()
339 t->pl.probe_size = t->pl.pmtu; in sctp_transport_pl_recv()
340 t->pathmtu = t->pl.pmtu + sctp_transport_pl_hlen(t); in sctp_transport_pl_recv()
341 sctp_assoc_sync_pmtu(t->asoc); in sctp_transport_pl_recv()
344 } else if (t->pl.state == SCTP_PL_COMPLETE) { in sctp_transport_pl_recv()
346 t->pl.state = SCTP_PL_SEARCH; /* Search Complete -> Search */ in sctp_transport_pl_recv()
347 t->pl.probe_size = min(t->pl.probe_size + SCTP_PL_MIN_STEP, SCTP_MAX_PLPMTU); in sctp_transport_pl_recv()
350 return t->pl.state == SCTP_PL_COMPLETE; in sctp_transport_pl_recv()
356 __func__, t, t->pl.state, t->pl.pmtu, t->pl.probe_size, pmtu); in sctp_transport_pl_toobig()
358 if (pmtu < SCTP_MIN_PLPMTU || pmtu >= t->pl.probe_size) in sctp_transport_pl_toobig()
361 if (t->pl.state == SCTP_PL_BASE) { in sctp_transport_pl_toobig()
363 t->pl.state = SCTP_PL_ERROR; /* Base -> Error */ in sctp_transport_pl_toobig()
365 t->pl.pmtu = SCTP_BASE_PLPMTU; in sctp_transport_pl_toobig()
366 t->pathmtu = t->pl.pmtu + sctp_transport_pl_hlen(t); in sctp_transport_pl_toobig()
369 } else if (t->pl.state == SCTP_PL_SEARCH) { in sctp_transport_pl_toobig()
370 if (pmtu >= SCTP_BASE_PLPMTU && pmtu < t->pl.pmtu) { in sctp_transport_pl_toobig()
371 t->pl.state = SCTP_PL_BASE; /* Search -> Base */ in sctp_transport_pl_toobig()
372 t->pl.probe_size = SCTP_BASE_PLPMTU; in sctp_transport_pl_toobig()
373 t->pl.probe_count = 0; in sctp_transport_pl_toobig()
375 t->pl.probe_high = 0; in sctp_transport_pl_toobig()
376 t->pl.pmtu = SCTP_BASE_PLPMTU; in sctp_transport_pl_toobig()
377 t->pathmtu = t->pl.pmtu + sctp_transport_pl_hlen(t); in sctp_transport_pl_toobig()
379 } else if (pmtu > t->pl.pmtu && pmtu < t->pl.probe_size) { in sctp_transport_pl_toobig()
380 t->pl.probe_size = pmtu; in sctp_transport_pl_toobig()
381 t->pl.probe_count = 0; in sctp_transport_pl_toobig()
383 } else if (t->pl.state == SCTP_PL_COMPLETE) { in sctp_transport_pl_toobig()
384 if (pmtu >= SCTP_BASE_PLPMTU && pmtu < t->pl.pmtu) { in sctp_transport_pl_toobig()
385 t->pl.state = SCTP_PL_BASE; /* Complete -> Base */ in sctp_transport_pl_toobig()
386 t->pl.probe_size = SCTP_BASE_PLPMTU; in sctp_transport_pl_toobig()
387 t->pl.probe_count = 0; in sctp_transport_pl_toobig()
389 t->pl.probe_high = 0; in sctp_transport_pl_toobig()
390 t->pl.pmtu = SCTP_BASE_PLPMTU; in sctp_transport_pl_toobig()
391 t->pathmtu = t->pl.pmtu + sctp_transport_pl_hlen(t); in sctp_transport_pl_toobig()
402 struct sock *sk = t->asoc->base.sk; in sctp_transport_update_pmtu()
415 return sctp_transport_pl_toobig(t, pmtu - sctp_transport_pl_hlen(t)); in sctp_transport_update_pmtu()
419 struct sctp_pf *pf = sctp_get_pf_specific(dst->ops->family); in sctp_transport_update_pmtu()
422 pf->af->from_sk(&addr, sk); in sctp_transport_update_pmtu()
423 pf->to_sk_daddr(&t->ipaddr, sk); in sctp_transport_update_pmtu()
424 dst->ops->update_pmtu(dst, sk, NULL, pmtu, true); in sctp_transport_update_pmtu()
425 pf->to_sk_daddr(&addr, sk); in sctp_transport_update_pmtu()
431 t->af_specific->get_dst(t, &t->saddr, &t->fl, sk); in sctp_transport_update_pmtu()
432 dst = t->dst; in sctp_transport_update_pmtu()
436 /* Re-fetch, as under layers may have a higher minimum size */ in sctp_transport_update_pmtu()
438 change = t->pathmtu != pmtu; in sctp_transport_update_pmtu()
440 t->pathmtu = pmtu; in sctp_transport_update_pmtu()
451 struct sctp_association *asoc = transport->asoc; in sctp_transport_route()
452 struct sctp_af *af = transport->af_specific; in sctp_transport_route()
455 af->get_dst(transport, saddr, &transport->fl, sctp_opt2sk(opt)); in sctp_transport_route()
458 memcpy(&transport->saddr, saddr, sizeof(union sctp_addr)); in sctp_transport_route()
460 af->get_saddr(opt, transport, &transport->fl); in sctp_transport_route()
464 /* Initialize sk->sk_rcv_saddr, if the transport is the in sctp_transport_route()
467 if (transport->dst && asoc && in sctp_transport_route()
468 (!asoc->peer.primary_path || transport == asoc->peer.active_path)) in sctp_transport_route()
469 opt->pf->to_sk_saddr(&transport->saddr, asoc->base.sk); in sctp_transport_route()
475 return refcount_inc_not_zero(&transport->refcnt); in sctp_transport_hold()
483 if (refcount_dec_and_test(&transport->refcnt)) in sctp_transport_put()
490 if (unlikely(!tp->rto_pending)) in sctp_transport_update_rto()
494 if (tp->rttvar || tp->srtt) { in sctp_transport_update_rto()
495 struct net *net = tp->asoc->base.net; in sctp_transport_update_rto()
497 * RTTVAR <- (1 - RTO.Beta) * RTTVAR + RTO.Beta * |SRTT - R'| in sctp_transport_update_rto()
498 * SRTT <- (1 - RTO.Alpha) * SRTT + RTO.Alpha * R' in sctp_transport_update_rto()
507 tp->rttvar = tp->rttvar - (tp->rttvar >> net->sctp.rto_beta) in sctp_transport_update_rto()
508 + (((__u32)abs((__s64)tp->srtt - (__s64)rtt)) >> net->sctp.rto_beta); in sctp_transport_update_rto()
509 tp->srtt = tp->srtt - (tp->srtt >> net->sctp.rto_alpha) in sctp_transport_update_rto()
510 + (rtt >> net->sctp.rto_alpha); in sctp_transport_update_rto()
513 * SRTT <- R, RTTVAR <- R/2. in sctp_transport_update_rto()
515 tp->srtt = rtt; in sctp_transport_update_rto()
516 tp->rttvar = rtt >> 1; in sctp_transport_update_rto()
520 * adjust RTTVAR <- G, where G is the CLOCK GRANULARITY. in sctp_transport_update_rto()
522 if (tp->rttvar == 0) in sctp_transport_update_rto()
523 tp->rttvar = SCTP_CLOCK_GRANULARITY; in sctp_transport_update_rto()
525 /* 6.3.1 C3) After the computation, update RTO <- SRTT + 4 * RTTVAR. */ in sctp_transport_update_rto()
526 tp->rto = tp->srtt + (tp->rttvar << 2); in sctp_transport_update_rto()
531 if (tp->rto < tp->asoc->rto_min) in sctp_transport_update_rto()
532 tp->rto = tp->asoc->rto_min; in sctp_transport_update_rto()
535 * at least RTO.max seconds. in sctp_transport_update_rto()
537 if (tp->rto > tp->asoc->rto_max) in sctp_transport_update_rto()
538 tp->rto = tp->asoc->rto_max; in sctp_transport_update_rto()
540 sctp_max_rto(tp->asoc, tp); in sctp_transport_update_rto()
541 tp->rtt = rtt; in sctp_transport_update_rto()
546 tp->rto_pending = 0; in sctp_transport_update_rto()
549 __func__, tp, rtt, tp->srtt, tp->rttvar, tp->rto); in sctp_transport_update_rto()
558 struct sctp_association *asoc = transport->asoc; in sctp_transport_raise_cwnd()
561 cwnd = transport->cwnd; in sctp_transport_raise_cwnd()
562 flight_size = transport->flight_size; in sctp_transport_raise_cwnd()
565 if (asoc->fast_recovery && in sctp_transport_raise_cwnd()
566 TSN_lte(asoc->fast_recovery_exit, sack_ctsn)) in sctp_transport_raise_cwnd()
567 asoc->fast_recovery = 0; in sctp_transport_raise_cwnd()
569 ssthresh = transport->ssthresh; in sctp_transport_raise_cwnd()
570 pba = transport->partial_bytes_acked; in sctp_transport_raise_cwnd()
571 pmtu = transport->asoc->pathmtu; in sctp_transport_raise_cwnd()
576 * endpoint MUST use the slow-start algorithm to increase in sctp_transport_raise_cwnd()
586 * against the ACK-Splitting attack outlined in [SAVAGE99]. in sctp_transport_raise_cwnd()
588 if (asoc->fast_recovery) in sctp_transport_raise_cwnd()
628 * to (partial_bytes_acked - cwnd). Next, cwnd is in sctp_transport_raise_cwnd()
635 pba = pba - cwnd; in sctp_transport_raise_cwnd()
646 transport->cwnd = cwnd; in sctp_transport_raise_cwnd()
647 transport->partial_bytes_acked = pba; in sctp_transport_raise_cwnd()
654 enum sctp_lower_cwnd reason) in sctp_transport_lower_cwnd() argument
656 struct sctp_association *asoc = transport->asoc; in sctp_transport_lower_cwnd()
658 switch (reason) { in sctp_transport_lower_cwnd()
661 * When the T3-rtx timer expires on an address, SCTP should in sctp_transport_lower_cwnd()
663 * ssthresh = max(cwnd/2, 4*MTU) in sctp_transport_lower_cwnd()
667 transport->ssthresh = max(transport->cwnd/2, in sctp_transport_lower_cwnd()
668 4*asoc->pathmtu); in sctp_transport_lower_cwnd()
669 transport->cwnd = asoc->pathmtu; in sctp_transport_lower_cwnd()
671 /* T3-rtx also clears fast recovery */ in sctp_transport_lower_cwnd()
672 asoc->fast_recovery = 0; in sctp_transport_lower_cwnd()
684 * ssthresh = max(cwnd/2, 4*MTU) in sctp_transport_lower_cwnd()
688 if (asoc->fast_recovery) in sctp_transport_lower_cwnd()
692 asoc->fast_recovery = 1; in sctp_transport_lower_cwnd()
693 asoc->fast_recovery_exit = asoc->next_tsn - 1; in sctp_transport_lower_cwnd()
695 transport->ssthresh = max(transport->cwnd/2, in sctp_transport_lower_cwnd()
696 4*asoc->pathmtu); in sctp_transport_lower_cwnd()
697 transport->cwnd = transport->ssthresh; in sctp_transport_lower_cwnd()
702 * If the sender receives an ECN-Echo ACK packet in sctp_transport_lower_cwnd()
706 * congestion loss in non-ECN Capable TCP. That is, the TCP in sctp_transport_lower_cwnd()
711 * data (or more loosely more than once every round-trip time). in sctp_transport_lower_cwnd()
713 if (time_after(jiffies, transport->last_time_ecne_reduced + in sctp_transport_lower_cwnd()
714 transport->rtt)) { in sctp_transport_lower_cwnd()
715 transport->ssthresh = max(transport->cwnd/2, in sctp_transport_lower_cwnd()
716 4*asoc->pathmtu); in sctp_transport_lower_cwnd()
717 transport->cwnd = transport->ssthresh; in sctp_transport_lower_cwnd()
718 transport->last_time_ecne_reduced = jiffies; in sctp_transport_lower_cwnd()
726 * should be adjusted to max(cwnd/2, 4*MTU) per RTO. in sctp_transport_lower_cwnd()
731 transport->cwnd = max(transport->cwnd/2, in sctp_transport_lower_cwnd()
732 4*asoc->pathmtu); in sctp_transport_lower_cwnd()
734 transport->ssthresh = transport->cwnd; in sctp_transport_lower_cwnd()
738 transport->partial_bytes_acked = 0; in sctp_transport_lower_cwnd()
740 pr_debug("%s: transport:%p, reason:%d, cwnd:%d, ssthresh:%d\n", in sctp_transport_lower_cwnd()
741 __func__, transport, reason, transport->cwnd, in sctp_transport_lower_cwnd()
742 transport->ssthresh); in sctp_transport_lower_cwnd()
745 /* Apply Max.Burst limit to the congestion window:
746 * sctpimpguide-05 2.14.2
748 * transmit new DATA chunks, the protocol parameter Max.Burst MUST
751 * if ((flightsize+ Max.Burst * MTU) < cwnd)
752 * cwnd = flightsize + Max.Burst * MTU
757 struct sctp_association *asoc = t->asoc; in sctp_transport_burst_limited()
758 u32 old_cwnd = t->cwnd; in sctp_transport_burst_limited()
761 if (t->burst_limited || asoc->max_burst == 0) in sctp_transport_burst_limited()
764 max_burst_bytes = t->flight_size + (asoc->max_burst * asoc->pathmtu); in sctp_transport_burst_limited()
766 t->cwnd = max_burst_bytes; in sctp_transport_burst_limited()
767 t->burst_limited = old_cwnd; in sctp_transport_burst_limited()
776 if (t->burst_limited) { in sctp_transport_burst_reset()
777 t->cwnd = t->burst_limited; in sctp_transport_burst_reset()
778 t->burst_limited = 0; in sctp_transport_burst_reset()
785 /* RTO + timer slack +/- 50% of RTO */ in sctp_transport_timeout()
786 unsigned long timeout = trans->rto >> 1; in sctp_transport_timeout()
788 if (trans->state != SCTP_UNCONFIRMED && in sctp_transport_timeout()
789 trans->state != SCTP_PF) in sctp_transport_timeout()
790 timeout += trans->hbinterval; in sctp_transport_timeout()
798 struct sctp_association *asoc = t->asoc; in sctp_transport_reset()
805 t->cwnd = min(4*asoc->pathmtu, max_t(__u32, 2*asoc->pathmtu, 4380)); in sctp_transport_reset()
806 t->burst_limited = 0; in sctp_transport_reset()
807 t->ssthresh = asoc->peer.i.a_rwnd; in sctp_transport_reset()
808 t->rto = asoc->rto_initial; in sctp_transport_reset()
810 t->rtt = 0; in sctp_transport_reset()
811 t->srtt = 0; in sctp_transport_reset()
812 t->rttvar = 0; in sctp_transport_reset()
815 t->partial_bytes_acked = 0; in sctp_transport_reset()
816 t->flight_size = 0; in sctp_transport_reset()
817 t->error_count = 0; in sctp_transport_reset()
818 t->rto_pending = 0; in sctp_transport_reset()
819 t->hb_sent = 0; in sctp_transport_reset()
821 /* Initialize the state information for SFR-CACC */ in sctp_transport_reset()
822 t->cacc.changeover_active = 0; in sctp_transport_reset()
823 t->cacc.cycling_changeover = 0; in sctp_transport_reset()
824 t->cacc.next_tsn_at_change = 0; in sctp_transport_reset()
825 t->cacc.cacc_saw_newack = 0; in sctp_transport_reset()
832 if (del_timer(&t->T3_rtx_timer)) in sctp_transport_immediate_rtx()
835 sctp_retransmit(&t->asoc->outqueue, t, SCTP_RTXR_T3_RTX); in sctp_transport_immediate_rtx()
836 if (!timer_pending(&t->T3_rtx_timer)) { in sctp_transport_immediate_rtx()
837 if (!mod_timer(&t->T3_rtx_timer, jiffies + t->rto)) in sctp_transport_immediate_rtx()
845 dst_release(t->dst); in sctp_transport_dst_release()
846 t->dst = NULL; in sctp_transport_dst_release()
847 t->dst_pending_confirm = 0; in sctp_transport_dst_release()
853 t->dst_pending_confirm = 1; in sctp_transport_dst_confirm()