Lines Matching full:subflow
119 struct mptcp_subflow_context *subflow; in mptcp_lookup_subflow_by_saddr() local
123 list_for_each_entry(subflow, list, node) { in mptcp_lookup_subflow_by_saddr()
124 skc = (struct sock_common *)mptcp_subflow_tcp_sock(subflow); in mptcp_lookup_subflow_by_saddr()
182 struct mptcp_subflow_context *subflow, in __mptcp_pm_send_ack() argument
185 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in __mptcp_pm_send_ack()
194 subflow->send_mp_prio = 1; in __mptcp_pm_send_ack()
195 subflow->request_bkup = backup; in __mptcp_pm_send_ack()
203 struct mptcp_subflow_context *subflow, in mptcp_pm_send_ack() argument
207 __mptcp_pm_send_ack(msk, subflow, prio, backup); in mptcp_pm_send_ack()
213 struct mptcp_subflow_context *subflow, *alt = NULL; in mptcp_pm_addr_send_ack() local
222 mptcp_for_each_subflow(msk, subflow) { in mptcp_pm_addr_send_ack()
223 if (__mptcp_subflow_active(subflow)) { in mptcp_pm_addr_send_ack()
224 if (!subflow->stale) { in mptcp_pm_addr_send_ack()
225 mptcp_pm_send_ack(msk, subflow, false, false); in mptcp_pm_addr_send_ack()
230 alt = subflow; in mptcp_pm_addr_send_ack()
243 struct mptcp_subflow_context *subflow; in mptcp_pm_mp_prio_send_ack() local
247 mptcp_for_each_subflow(msk, subflow) { in mptcp_pm_mp_prio_send_ack()
248 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_pm_mp_prio_send_ack()
261 __mptcp_pm_send_ack(msk, subflow, true, bkup); in mptcp_pm_mp_prio_send_ack()
558 const struct mptcp_subflow_context *subflow) in mptcp_pm_subflow_check_next() argument
563 update_subflows = subflow->request_join || subflow->mp_join; in mptcp_pm_subflow_check_next()
580 /* Even if this subflow is not really established, tell the PM to try in mptcp_pm_subflow_check_next()
592 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk); in mptcp_pm_add_addr_received() local
593 struct mptcp_sock *msk = mptcp_sk(subflow->conn); in mptcp_pm_add_addr_received()
654 struct mptcp_subflow_context *subflow, *tmp; in mptcp_pm_rm_addr_or_subflow() local
659 rm_type == MPTCP_MIB_RMADDR ? "address" : "subflow", rm_list->nr); in mptcp_pm_rm_addr_or_subflow()
676 mptcp_for_each_subflow_safe(msk, subflow, tmp) { in mptcp_pm_rm_addr_or_subflow()
677 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_pm_rm_addr_or_subflow()
678 u8 remote_id = READ_ONCE(subflow->remote_id); in mptcp_pm_rm_addr_or_subflow()
680 u8 id = subflow_get_local_id(subflow); in mptcp_pm_rm_addr_or_subflow()
691 rm_type == MPTCP_MIB_RMADDR ? "address" : "subflow", in mptcp_pm_rm_addr_or_subflow()
695 removed |= subflow->request_join; in mptcp_pm_rm_addr_or_subflow()
698 mptcp_close_ssk(sk, ssk, subflow); in mptcp_pm_rm_addr_or_subflow()
745 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk); in mptcp_pm_mp_prio_received() local
746 struct sock *sk = subflow->conn; in mptcp_pm_mp_prio_received()
749 pr_debug("subflow->backup=%d, bkup=%d\n", subflow->backup, bkup); in mptcp_pm_mp_prio_received()
751 if (subflow->backup != bkup) in mptcp_pm_mp_prio_received()
752 subflow->backup = bkup; in mptcp_pm_mp_prio_received()
759 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk); in mptcp_pm_mp_fail_received() local
760 struct mptcp_sock *msk = mptcp_sk(subflow->conn); in mptcp_pm_mp_fail_received()
767 if (!subflow->fail_tout) { in mptcp_pm_mp_fail_received()
770 subflow->send_mp_fail = 1; in mptcp_pm_mp_fail_received()
771 subflow->send_infinite_map = 1; in mptcp_pm_mp_fail_received()
775 WRITE_ONCE(subflow->fail_tout, 0); in mptcp_pm_mp_fail_received()
864 /* The 0 ID mapping is defined by the first subflow, copied into the msk in mptcp_pm_get_local_id()
894 struct mptcp_subflow_context *iter, *subflow = mptcp_subflow_ctx(ssk); in mptcp_pm_subflows_chk_stale() local
902 if (subflow->stale || !stale_loss_cnt || subflow->stale_count <= stale_loss_cnt) in mptcp_pm_subflows_chk_stale()
905 /* look for another available subflow not in loss state */ in mptcp_pm_subflows_chk_stale()
908 if (iter != subflow && mptcp_subflow_active(iter) && in mptcp_pm_subflows_chk_stale()
910 /* we have some alternatives, try to mark this subflow as idle ...*/ in mptcp_pm_subflows_chk_stale()
913 subflow->stale = 1; in mptcp_pm_subflows_chk_stale()
920 * we can possibly use backup subflows now, and subflow selection in mptcp_pm_subflows_chk_stale()
931 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk); in mptcp_pm_subflow_chk_stale() local
935 if (!subflow->stale_count) { in mptcp_pm_subflow_chk_stale()
936 subflow->stale_rcv_tstamp = rcv_tstamp; in mptcp_pm_subflow_chk_stale()
937 subflow->stale_count++; in mptcp_pm_subflow_chk_stale()
938 } else if (subflow->stale_rcv_tstamp == rcv_tstamp) { in mptcp_pm_subflow_chk_stale()
939 if (subflow->stale_count < U8_MAX) in mptcp_pm_subflow_chk_stale()
940 subflow->stale_count++; in mptcp_pm_subflow_chk_stale()
943 subflow->stale_count = 0; in mptcp_pm_subflow_chk_stale()
944 mptcp_subflow_set_active(subflow); in mptcp_pm_subflow_chk_stale()