Lines Matching refs:t
266 void sctp_transport_pl_send(struct sctp_transport *t) in sctp_transport_pl_send() argument
268 if (t->pl.probe_count < SCTP_MAX_PROBES) in sctp_transport_pl_send()
271 t->pl.probe_count = 0; in sctp_transport_pl_send()
272 if (t->pl.state == SCTP_PL_BASE) { in sctp_transport_pl_send()
273 if (t->pl.probe_size == SCTP_BASE_PLPMTU) { /* BASE_PLPMTU Confirmation Failed */ in sctp_transport_pl_send()
274 t->pl.state = SCTP_PL_ERROR; /* Base -> Error */ in sctp_transport_pl_send()
276 t->pl.pmtu = SCTP_BASE_PLPMTU; in sctp_transport_pl_send()
277 t->pathmtu = t->pl.pmtu + sctp_transport_pl_hlen(t); in sctp_transport_pl_send()
278 sctp_assoc_sync_pmtu(t->asoc); in sctp_transport_pl_send()
280 } else if (t->pl.state == SCTP_PL_SEARCH) { in sctp_transport_pl_send()
281 if (t->pl.pmtu == t->pl.probe_size) { /* Black Hole Detected */ in sctp_transport_pl_send()
282 t->pl.state = SCTP_PL_BASE; /* Search -> Base */ in sctp_transport_pl_send()
283 t->pl.probe_size = SCTP_BASE_PLPMTU; in sctp_transport_pl_send()
284 t->pl.probe_high = 0; in sctp_transport_pl_send()
286 t->pl.pmtu = SCTP_BASE_PLPMTU; in sctp_transport_pl_send()
287 t->pathmtu = t->pl.pmtu + sctp_transport_pl_hlen(t); in sctp_transport_pl_send()
288 sctp_assoc_sync_pmtu(t->asoc); in sctp_transport_pl_send()
290 t->pl.probe_high = t->pl.probe_size; in sctp_transport_pl_send()
291 t->pl.probe_size = t->pl.pmtu; in sctp_transport_pl_send()
293 } else if (t->pl.state == SCTP_PL_COMPLETE) { in sctp_transport_pl_send()
294 if (t->pl.pmtu == t->pl.probe_size) { /* Black Hole Detected */ in sctp_transport_pl_send()
295 t->pl.state = SCTP_PL_BASE; /* Search Complete -> Base */ in sctp_transport_pl_send()
296 t->pl.probe_size = SCTP_BASE_PLPMTU; in sctp_transport_pl_send()
298 t->pl.pmtu = SCTP_BASE_PLPMTU; in sctp_transport_pl_send()
299 t->pathmtu = t->pl.pmtu + sctp_transport_pl_hlen(t); in sctp_transport_pl_send()
300 sctp_assoc_sync_pmtu(t->asoc); in sctp_transport_pl_send()
306 __func__, t, t->pl.state, t->pl.pmtu, t->pl.probe_size, t->pl.probe_high); in sctp_transport_pl_send()
307 t->pl.probe_count++; in sctp_transport_pl_send()
310 bool sctp_transport_pl_recv(struct sctp_transport *t) in sctp_transport_pl_recv() argument
313 __func__, t, t->pl.state, t->pl.pmtu, t->pl.probe_size, t->pl.probe_high); in sctp_transport_pl_recv()
315 t->pl.pmtu = t->pl.probe_size; in sctp_transport_pl_recv()
316 t->pl.probe_count = 0; in sctp_transport_pl_recv()
317 if (t->pl.state == SCTP_PL_BASE) { in sctp_transport_pl_recv()
318 t->pl.state = SCTP_PL_SEARCH; /* Base -> Search */ in sctp_transport_pl_recv()
319 t->pl.probe_size += SCTP_PL_BIG_STEP; in sctp_transport_pl_recv()
320 } else if (t->pl.state == SCTP_PL_ERROR) { in sctp_transport_pl_recv()
321 t->pl.state = SCTP_PL_SEARCH; /* Error -> Search */ in sctp_transport_pl_recv()
323 t->pl.pmtu = t->pl.probe_size; in sctp_transport_pl_recv()
324 t->pathmtu = t->pl.pmtu + sctp_transport_pl_hlen(t); in sctp_transport_pl_recv()
325 sctp_assoc_sync_pmtu(t->asoc); in sctp_transport_pl_recv()
326 t->pl.probe_size += SCTP_PL_BIG_STEP; in sctp_transport_pl_recv()
327 } else if (t->pl.state == SCTP_PL_SEARCH) { in sctp_transport_pl_recv()
328 if (!t->pl.probe_high) { in sctp_transport_pl_recv()
329 t->pl.probe_size = min(t->pl.probe_size + SCTP_PL_BIG_STEP, in sctp_transport_pl_recv()
333 t->pl.probe_size += SCTP_PL_MIN_STEP; in sctp_transport_pl_recv()
334 if (t->pl.probe_size >= t->pl.probe_high) { in sctp_transport_pl_recv()
335 t->pl.probe_high = 0; in sctp_transport_pl_recv()
336 t->pl.state = SCTP_PL_COMPLETE; /* Search -> Search Complete */ in sctp_transport_pl_recv()
338 t->pl.probe_size = t->pl.pmtu; in sctp_transport_pl_recv()
339 t->pathmtu = t->pl.pmtu + sctp_transport_pl_hlen(t); in sctp_transport_pl_recv()
340 sctp_assoc_sync_pmtu(t->asoc); in sctp_transport_pl_recv()
341 sctp_transport_reset_raise_timer(t); in sctp_transport_pl_recv()
343 } else if (t->pl.state == SCTP_PL_COMPLETE) { in sctp_transport_pl_recv()
345 t->pl.state = SCTP_PL_SEARCH; /* Search Complete -> Search */ in sctp_transport_pl_recv()
346 t->pl.probe_size += SCTP_PL_MIN_STEP; in sctp_transport_pl_recv()
349 return t->pl.state == SCTP_PL_COMPLETE; in sctp_transport_pl_recv()
352 static bool sctp_transport_pl_toobig(struct sctp_transport *t, u32 pmtu) in sctp_transport_pl_toobig() argument
355 __func__, t, t->pl.state, t->pl.pmtu, t->pl.probe_size, pmtu); in sctp_transport_pl_toobig()
357 if (pmtu < SCTP_MIN_PLPMTU || pmtu >= t->pl.probe_size) in sctp_transport_pl_toobig()
360 if (t->pl.state == SCTP_PL_BASE) { in sctp_transport_pl_toobig()
362 t->pl.state = SCTP_PL_ERROR; /* Base -> Error */ in sctp_transport_pl_toobig()
364 t->pl.pmtu = SCTP_BASE_PLPMTU; in sctp_transport_pl_toobig()
365 t->pathmtu = t->pl.pmtu + sctp_transport_pl_hlen(t); in sctp_transport_pl_toobig()
368 } else if (t->pl.state == SCTP_PL_SEARCH) { in sctp_transport_pl_toobig()
369 if (pmtu >= SCTP_BASE_PLPMTU && pmtu < t->pl.pmtu) { in sctp_transport_pl_toobig()
370 t->pl.state = SCTP_PL_BASE; /* Search -> Base */ in sctp_transport_pl_toobig()
371 t->pl.probe_size = SCTP_BASE_PLPMTU; in sctp_transport_pl_toobig()
372 t->pl.probe_count = 0; in sctp_transport_pl_toobig()
374 t->pl.probe_high = 0; in sctp_transport_pl_toobig()
375 t->pl.pmtu = SCTP_BASE_PLPMTU; in sctp_transport_pl_toobig()
376 t->pathmtu = t->pl.pmtu + sctp_transport_pl_hlen(t); in sctp_transport_pl_toobig()
378 } else if (pmtu > t->pl.pmtu && pmtu < t->pl.probe_size) { in sctp_transport_pl_toobig()
379 t->pl.probe_size = pmtu; in sctp_transport_pl_toobig()
380 t->pl.probe_count = 0; in sctp_transport_pl_toobig()
382 } else if (t->pl.state == SCTP_PL_COMPLETE) { in sctp_transport_pl_toobig()
383 if (pmtu >= SCTP_BASE_PLPMTU && pmtu < t->pl.pmtu) { in sctp_transport_pl_toobig()
384 t->pl.state = SCTP_PL_BASE; /* Complete -> Base */ in sctp_transport_pl_toobig()
385 t->pl.probe_size = SCTP_BASE_PLPMTU; in sctp_transport_pl_toobig()
386 t->pl.probe_count = 0; in sctp_transport_pl_toobig()
388 t->pl.probe_high = 0; in sctp_transport_pl_toobig()
389 t->pl.pmtu = SCTP_BASE_PLPMTU; in sctp_transport_pl_toobig()
390 t->pathmtu = t->pl.pmtu + sctp_transport_pl_hlen(t); in sctp_transport_pl_toobig()
391 sctp_transport_reset_probe_timer(t); in sctp_transport_pl_toobig()
399 bool sctp_transport_update_pmtu(struct sctp_transport *t, u32 pmtu) in sctp_transport_update_pmtu() argument
401 struct sock *sk = t->asoc->base.sk; in sctp_transport_update_pmtu()
413 if (sctp_transport_pl_enabled(t)) in sctp_transport_update_pmtu()
414 return sctp_transport_pl_toobig(t, pmtu - sctp_transport_pl_hlen(t)); in sctp_transport_update_pmtu()
416 dst = sctp_transport_dst_check(t); in sctp_transport_update_pmtu()
422 pf->to_sk_daddr(&t->ipaddr, sk); in sctp_transport_update_pmtu()
426 dst = sctp_transport_dst_check(t); in sctp_transport_update_pmtu()
430 t->af_specific->get_dst(t, &t->saddr, &t->fl, sk); in sctp_transport_update_pmtu()
431 dst = t->dst; in sctp_transport_update_pmtu()
437 change = t->pathmtu != pmtu; in sctp_transport_update_pmtu()
439 t->pathmtu = pmtu; in sctp_transport_update_pmtu()
754 void sctp_transport_burst_limited(struct sctp_transport *t) in sctp_transport_burst_limited() argument
756 struct sctp_association *asoc = t->asoc; in sctp_transport_burst_limited()
757 u32 old_cwnd = t->cwnd; in sctp_transport_burst_limited()
760 if (t->burst_limited || asoc->max_burst == 0) in sctp_transport_burst_limited()
763 max_burst_bytes = t->flight_size + (asoc->max_burst * asoc->pathmtu); in sctp_transport_burst_limited()
765 t->cwnd = max_burst_bytes; in sctp_transport_burst_limited()
766 t->burst_limited = old_cwnd; in sctp_transport_burst_limited()
773 void sctp_transport_burst_reset(struct sctp_transport *t) in sctp_transport_burst_reset() argument
775 if (t->burst_limited) { in sctp_transport_burst_reset()
776 t->cwnd = t->burst_limited; in sctp_transport_burst_reset()
777 t->burst_limited = 0; in sctp_transport_burst_reset()
795 void sctp_transport_reset(struct sctp_transport *t) in sctp_transport_reset() argument
797 struct sctp_association *asoc = t->asoc; in sctp_transport_reset()
804 t->cwnd = min(4*asoc->pathmtu, max_t(__u32, 2*asoc->pathmtu, 4380)); in sctp_transport_reset()
805 t->burst_limited = 0; in sctp_transport_reset()
806 t->ssthresh = asoc->peer.i.a_rwnd; in sctp_transport_reset()
807 t->rto = asoc->rto_initial; in sctp_transport_reset()
808 sctp_max_rto(asoc, t); in sctp_transport_reset()
809 t->rtt = 0; in sctp_transport_reset()
810 t->srtt = 0; in sctp_transport_reset()
811 t->rttvar = 0; in sctp_transport_reset()
814 t->partial_bytes_acked = 0; in sctp_transport_reset()
815 t->flight_size = 0; in sctp_transport_reset()
816 t->error_count = 0; in sctp_transport_reset()
817 t->rto_pending = 0; in sctp_transport_reset()
818 t->hb_sent = 0; in sctp_transport_reset()
821 t->cacc.changeover_active = 0; in sctp_transport_reset()
822 t->cacc.cycling_changeover = 0; in sctp_transport_reset()
823 t->cacc.next_tsn_at_change = 0; in sctp_transport_reset()
824 t->cacc.cacc_saw_newack = 0; in sctp_transport_reset()
828 void sctp_transport_immediate_rtx(struct sctp_transport *t) in sctp_transport_immediate_rtx() argument
831 if (del_timer(&t->T3_rtx_timer)) in sctp_transport_immediate_rtx()
832 sctp_transport_put(t); in sctp_transport_immediate_rtx()
834 sctp_retransmit(&t->asoc->outqueue, t, SCTP_RTXR_T3_RTX); in sctp_transport_immediate_rtx()
835 if (!timer_pending(&t->T3_rtx_timer)) { in sctp_transport_immediate_rtx()
836 if (!mod_timer(&t->T3_rtx_timer, jiffies + t->rto)) in sctp_transport_immediate_rtx()
837 sctp_transport_hold(t); in sctp_transport_immediate_rtx()
842 void sctp_transport_dst_release(struct sctp_transport *t) in sctp_transport_dst_release() argument
844 dst_release(t->dst); in sctp_transport_dst_release()
845 t->dst = NULL; in sctp_transport_dst_release()
846 t->dst_pending_confirm = 0; in sctp_transport_dst_release()
850 void sctp_transport_dst_confirm(struct sctp_transport *t) in sctp_transport_dst_confirm() argument
852 t->dst_pending_confirm = 1; in sctp_transport_dst_confirm()