Lines Matching full:subflow
119 struct mptcp_subflow_context *subflow;
123 list_for_each_entry(subflow, list, node) {
124 skc = (struct sock_common *)mptcp_subflow_tcp_sock(subflow);
185 struct mptcp_subflow_context *subflow,
188 struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
197 subflow->send_mp_prio = 1;
198 subflow->request_bkup = backup;
206 struct mptcp_subflow_context *subflow,
210 __mptcp_pm_send_ack(msk, subflow, prio, backup);
216 struct mptcp_subflow_context *subflow, *alt = NULL;
225 mptcp_for_each_subflow(msk, subflow) {
226 if (__mptcp_subflow_active(subflow)) {
227 if (!subflow->stale) {
228 mptcp_pm_send_ack(msk, subflow, false, false);
233 alt = subflow;
246 struct mptcp_subflow_context *subflow;
250 mptcp_for_each_subflow(msk, subflow) {
251 struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
264 __mptcp_pm_send_ack(msk, subflow, true, bkup);
275 struct mptcp_subflow_context *subflow;
278 mptcp_for_each_subflow(msk, subflow) {
279 struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
589 const struct mptcp_subflow_context *subflow)
594 update_subflows = subflow->request_join || subflow->mp_join;
611 /* Even if this subflow is not really established, tell the PM to try
623 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
624 struct mptcp_sock *msk = mptcp_sk(subflow->conn);
688 struct mptcp_subflow_context *subflow, *tmp;
693 rm_type == MPTCP_MIB_RMADDR ? "address" : "subflow", rm_list->nr);
710 mptcp_for_each_subflow_safe(msk, subflow, tmp) {
711 struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
712 u8 remote_id = READ_ONCE(subflow->remote_id);
714 u8 id = subflow_get_local_id(subflow);
725 rm_type == MPTCP_MIB_RMADDR ? "address" : "subflow",
729 removed |= subflow->request_join;
732 mptcp_close_ssk(sk, ssk, subflow);
779 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
780 struct sock *sk = subflow->conn;
783 pr_debug("subflow->backup=%d, bkup=%d\n", subflow->backup, bkup);
785 if (subflow->backup != bkup)
786 subflow->backup = bkup;
793 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
794 struct mptcp_sock *msk = mptcp_sk(subflow->conn);
807 if (!subflow->fail_tout) {
810 subflow->send_mp_fail = 1;
811 subflow->send_infinite_map = 1;
815 WRITE_ONCE(subflow->fail_tout, 0);
904 /* The 0 ID mapping is defined by the first subflow, copied into the msk
934 struct mptcp_subflow_context *iter, *subflow = mptcp_subflow_ctx(ssk);
942 if (subflow->stale || !stale_loss_cnt || subflow->stale_count <= stale_loss_cnt)
945 /* look for another available subflow not in loss state */
948 if (iter != subflow && mptcp_subflow_active(iter) &&
950 /* we have some alternatives, try to mark this subflow as idle ...*/
953 subflow->stale = 1;
960 * we can possibly use backup subflows now, and subflow selection
971 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
975 if (!subflow->stale_count) {
976 subflow->stale_rcv_tstamp = rcv_tstamp;
977 subflow->stale_count++;
978 } else if (subflow->stale_rcv_tstamp == rcv_tstamp) {
979 if (subflow->stale_count < U8_MAX)
980 subflow->stale_count++;
983 subflow->stale_count = 0;
984 mptcp_subflow_set_active(subflow);