Lines Matching full:transport

45 				   struct sctp_transport *transport,
52 struct sctp_transport *transport,
101 struct sctp_transport *transport, in sctp_cacc_skip_3_1_d() argument
104 if (count_of_newacks >= 2 && transport != primary) in sctp_cacc_skip_3_1_d()
116 static inline int sctp_cacc_skip_3_1_f(struct sctp_transport *transport, in sctp_cacc_skip_3_1_f() argument
120 (transport && !transport->cacc.cacc_saw_newack)) in sctp_cacc_skip_3_1_f()
133 struct sctp_transport *transport, in sctp_cacc_skip_3_1() argument
137 if (sctp_cacc_skip_3_1_d(primary, transport, count_of_newacks)) in sctp_cacc_skip_3_1()
139 if (sctp_cacc_skip_3_1_f(transport, count_of_newacks)) in sctp_cacc_skip_3_1()
176 struct sctp_transport *transport, in sctp_cacc_skip() argument
181 (sctp_cacc_skip_3_1(primary, transport, count_of_newacks) || in sctp_cacc_skip()
208 struct sctp_transport *transport; in __sctp_outq_teardown() local
213 list_for_each_entry(transport, &q->asoc->peer.transport_addr_list, in __sctp_outq_teardown()
215 while ((lchunk = sctp_list_dequeue(&transport->transmitted)) != NULL) { in __sctp_outq_teardown()
368 if (chk->transport) in sctp_prsctp_prune_sent()
369 chk->transport->flight_size -= in sctp_prsctp_prune_sent()
426 struct sctp_transport *transport; in sctp_prsctp_prune() local
437 list_for_each_entry(transport, &asoc->peer.transport_addr_list, in sctp_prsctp_prune()
440 &transport->transmitted, in sctp_prsctp_prune()
449 /* Mark all the eligible packets on a transport for retransmission. */
451 struct sctp_transport *transport, in sctp_retransmit_mark() argument
458 list_for_each_safe(lchunk, ltemp, &transport->transmitted) { in sctp_retransmit_mark()
473 if (chunk->transport) in sctp_retransmit_mark()
474 chunk->transport->flight_size -= in sctp_retransmit_mark()
499 if (chunk->transport) in sctp_retransmit_mark()
500 transport->flight_size -= sctp_data_size(chunk); in sctp_retransmit_mark()
517 transport->rto_pending = 0; in sctp_retransmit_mark()
528 pr_debug("%s: transport:%p, reason:%d, cwnd:%d, ssthresh:%d, " in sctp_retransmit_mark()
529 "flight_size:%d, pba:%d\n", __func__, transport, reason, in sctp_retransmit_mark()
530 transport->cwnd, transport->ssthresh, transport->flight_size, in sctp_retransmit_mark()
531 transport->partial_bytes_acked); in sctp_retransmit_mark()
534 /* Mark all the eligible packets on a transport for retransmission and force
537 void sctp_retransmit(struct sctp_outq *q, struct sctp_transport *transport, in sctp_retransmit() argument
545 sctp_transport_lower_cwnd(transport, SCTP_LOWER_CWND_T3_RTX); in sctp_retransmit()
549 if (transport == transport->asoc->peer.retran_path) in sctp_retransmit()
550 sctp_assoc_update_retran_path(transport->asoc); in sctp_retransmit()
551 transport->asoc->rtx_data_chunks += in sctp_retransmit()
552 transport->asoc->unack_data; in sctp_retransmit()
553 if (transport->pl.state == SCTP_PL_COMPLETE && in sctp_retransmit()
554 transport->asoc->unack_data) in sctp_retransmit()
555 sctp_transport_reset_probe_timer(transport); in sctp_retransmit()
559 sctp_transport_lower_cwnd(transport, SCTP_LOWER_CWND_FAST_RTX); in sctp_retransmit()
567 transport->asoc->init_retries++; in sctp_retransmit()
573 sctp_retransmit_mark(q, transport, reason); in sctp_retransmit()
594 * We assume that pkt->transport has already been set.
601 struct sctp_transport *transport = pkt->transport; in __sctp_outq_flush_rtx() local
622 * destination transport address to which the retransmission in __sctp_outq_flush_rtx()
652 &transport->transmitted); in __sctp_outq_flush_rtx()
717 &transport->transmitted); in __sctp_outq_flush_rtx()
767 static int sctp_packet_singleton(struct sctp_transport *transport, in sctp_packet_singleton() argument
770 const struct sctp_association *asoc = transport->asoc; in sctp_packet_singleton()
776 sctp_packet_init(&singleton, transport, sport, dport); in sctp_packet_singleton()
789 /* Current transport being used. It's NOT the same as curr active one */
790 struct sctp_transport *transport; member
794 /* Packet on the current transport above */
799 /* transport: current transport */
803 struct sctp_transport *new_transport = chunk->transport; in sctp_outq_select_transport()
807 /* If we have a prior transport pointer, see if in sctp_outq_select_transport()
810 * current transport. If not a match, then in sctp_outq_select_transport()
811 * try to look up the transport with a given in sctp_outq_select_transport()
816 if (ctx->transport && sctp_cmp_addr_exact(&chunk->dest, in sctp_outq_select_transport()
817 &ctx->transport->ipaddr)) in sctp_outq_select_transport()
818 new_transport = ctx->transport; in sctp_outq_select_transport()
824 /* if we still don't have a new transport, then in sctp_outq_select_transport()
837 * send it to chunk->transport, even if it's in sctp_outq_select_transport()
860 /* Are we switching transports? Take care of transport locks. */ in sctp_outq_select_transport()
861 if (new_transport != ctx->transport) { in sctp_outq_select_transport()
862 ctx->transport = new_transport; in sctp_outq_select_transport()
863 ctx->packet = &ctx->transport->packet; in sctp_outq_select_transport()
865 if (list_empty(&ctx->transport->send_ready)) in sctp_outq_select_transport()
866 list_add_tail(&ctx->transport->send_ready, in sctp_outq_select_transport()
873 * Burst limit to the new transport. in sctp_outq_select_transport()
875 sctp_transport_burst_limited(ctx->transport); in sctp_outq_select_transport()
900 /* Pick the right transport to use. Should always be true for in sctp_outq_flush_ctrl()
901 * the first chunk as we don't have a transport by then. in sctp_outq_flush_ctrl()
914 error = sctp_packet_singleton(ctx->transport, chunk, in sctp_outq_flush_ctrl()
945 error = sctp_packet_singleton(ctx->transport, in sctp_outq_flush_ctrl()
974 sctp_transport_reset_t3_rtx(ctx->transport); in sctp_outq_flush_ctrl()
975 ctx->transport->last_time_sent = jiffies; in sctp_outq_flush_ctrl()
979 sctp_transport_reset_reconf_timer(ctx->transport); in sctp_outq_flush_ctrl()
999 if (ctx->transport != ctx->asoc->peer.retran_path) { in sctp_outq_flush_rtx()
1001 ctx->transport = ctx->asoc->peer.retran_path; in sctp_outq_flush_rtx()
1002 ctx->packet = &ctx->transport->packet; in sctp_outq_flush_rtx()
1004 if (list_empty(&ctx->transport->send_ready)) in sctp_outq_flush_rtx()
1005 list_add_tail(&ctx->transport->send_ready, in sctp_outq_flush_rtx()
1018 sctp_transport_reset_t3_rtx(ctx->transport); in sctp_outq_flush_rtx()
1019 ctx->transport->last_time_sent = jiffies; in sctp_outq_flush_rtx()
1075 /* Apply Max.Burst limitation to the current transport in in sctp_outq_flush_data()
1080 if (ctx->transport) in sctp_outq_flush_data()
1081 sctp_transport_burst_limited(ctx->transport); in sctp_outq_flush_data()
1142 &ctx->transport->transmitted); in sctp_outq_flush_data()
1144 sctp_transport_reset_t3_rtx(ctx->transport); in sctp_outq_flush_data()
1145 ctx->transport->last_time_sent = jiffies; in sctp_outq_flush_data()
1196 .transport = NULL, in sctp_outq_flush()
1252 struct sctp_transport *transport; in sctp_outq_sack() local
1269 list_for_each_entry(transport, transport_list, transports) in sctp_outq_sack()
1270 trace_sctp_probe_path(transport, asoc); in sctp_outq_sack()
1303 list_for_each_entry(transport, transport_list, in sctp_outq_sack()
1306 transport->cacc.cycling_changeover = 0; in sctp_outq_sack()
1308 transport->cacc.cacc_saw_newack = 0; in sctp_outq_sack()
1337 list_for_each_entry(transport, transport_list, transports) { in sctp_outq_sack()
1338 sctp_check_transmitted(q, &transport->transmitted, in sctp_outq_sack()
1339 transport, &chunk->source, sack, in sctp_outq_sack()
1346 if (transport->cacc.cacc_saw_newack) in sctp_outq_sack()
1361 list_for_each_entry(transport, transport_list, transports) in sctp_outq_sack()
1362 sctp_mark_missing(q, &transport->transmitted, transport, in sctp_outq_sack()
1425 /* Go through a transport's transmitted list or the association's retransmit
1427 * The retransmit list will not have an associated transport.
1437 struct sctp_transport *transport, in sctp_check_transmitted() argument
1471 if (tchunk->transport) in sctp_check_transmitted()
1472 tchunk->transport->flight_size -= in sctp_check_transmitted()
1484 * count bytes associated with a transport. in sctp_check_transmitted()
1486 if (transport && !tchunk->tsn_gap_acked) { in sctp_check_transmitted()
1502 sctp_transport_update_rto(transport, in sctp_check_transmitted()
1523 transport->cacc.cacc_saw_newack in sctp_check_transmitted()
1530 * chunk had a valid transport (it will not in sctp_check_transmitted()
1531 * have a transport if ASCONF had deleted it in sctp_check_transmitted()
1539 if (!tchunk->transport) in sctp_check_transmitted()
1584 if (tchunk->transport) in sctp_check_transmitted()
1603 if (transport) { in sctp_check_transmitted()
1605 struct sctp_association *asoc = transport->asoc; in sctp_check_transmitted()
1608 * to this transport due to DEL-IP operation. in sctp_check_transmitted()
1610 * send on this transport and shouldn't be in sctp_check_transmitted()
1611 * credited to this transport. in sctp_check_transmitted()
1617 * the destination transport address to which the in sctp_check_transmitted()
1622 transport->error_count = 0; in sctp_check_transmitted()
1623 transport->asoc->overall_error_count = 0; in sctp_check_transmitted()
1637 /* Mark the destination transport address as in sctp_check_transmitted()
1640 if ((transport->state == SCTP_INACTIVE || in sctp_check_transmitted()
1641 transport->state == SCTP_UNCONFIRMED) && in sctp_check_transmitted()
1642 sctp_cmp_addr_exact(&transport->ipaddr, saddr)) { in sctp_check_transmitted()
1644 transport->asoc, in sctp_check_transmitted()
1645 transport, in sctp_check_transmitted()
1650 sctp_transport_raise_cwnd(transport, sack_ctsn, in sctp_check_transmitted()
1653 transport->flight_size -= bytes_acked; in sctp_check_transmitted()
1654 if (transport->flight_size == 0) in sctp_check_transmitted()
1655 transport->partial_bytes_acked = 0; in sctp_check_transmitted()
1680 transport->error_count = 0; in sctp_check_transmitted()
1690 if (!transport->flight_size) { in sctp_check_transmitted()
1691 if (del_timer(&transport->T3_rtx_timer)) in sctp_check_transmitted()
1692 sctp_transport_put(transport); in sctp_check_transmitted()
1694 if (!mod_timer(&transport->T3_rtx_timer, in sctp_check_transmitted()
1695 jiffies + transport->rto)) in sctp_check_transmitted()
1696 sctp_transport_hold(transport); in sctp_check_transmitted()
1700 if (transport->dst) in sctp_check_transmitted()
1701 sctp_transport_dst_confirm(transport); in sctp_check_transmitted()
1711 struct sctp_transport *transport, in sctp_mark_missing() argument
1739 if (!transport || !sctp_cacc_skip(primary, in sctp_mark_missing()
1740 chunk->transport, in sctp_mark_missing()
1761 if (transport) { in sctp_mark_missing()
1763 sctp_retransmit(q, transport, SCTP_RTXR_FAST_RTX); in sctp_mark_missing()
1765 pr_debug("%s: transport:%p, cwnd:%d, ssthresh:%d, " in sctp_mark_missing()
1766 "flight_size:%d, pba:%d\n", __func__, transport, in sctp_mark_missing()
1767 transport->cwnd, transport->ssthresh, in sctp_mark_missing()
1768 transport->flight_size, transport->partial_bytes_acked); in sctp_mark_missing()