Lines Matching full:subflow

56 		 * close the subflow with a RST, as it is not behaving as negotiated.  in mptcp_parse_option()
58 * receiver MUST close the subflow with a RST, as it is considered in mptcp_parse_option()
404 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk); in mptcp_syn_options() local
409 subflow->snd_isn = TCP_SKB_CB(skb)->end_seq; in mptcp_syn_options()
410 if (subflow->request_mptcp) { in mptcp_syn_options()
416 } else if (subflow->request_join) { in mptcp_syn_options()
417 pr_debug("remote_token=%u, nonce=%u\n", subflow->remote_token, in mptcp_syn_options()
418 subflow->local_nonce); in mptcp_syn_options()
420 opts->join_id = subflow->local_id; in mptcp_syn_options()
421 opts->token = subflow->remote_token; in mptcp_syn_options()
422 opts->nonce = subflow->local_nonce; in mptcp_syn_options()
423 opts->backup = subflow->request_bkup; in mptcp_syn_options()
445 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk); in mptcp_established_options_mp() local
446 struct mptcp_sock *msk = mptcp_sk(subflow->conn); in mptcp_established_options_mp()
461 if (READ_ONCE(subflow->fully_established) || snd_data_fin_enable || in mptcp_established_options_mp()
462 subflow->snd_isn != TCP_SKB_CB(skb)->seq || in mptcp_established_options_mp()
466 if (subflow->mp_capable) { in mptcp_established_options_mp()
476 opts->sndr_key = subflow->local_key; in mptcp_established_options_mp()
477 opts->rcvr_key = subflow->remote_key; in mptcp_established_options_mp()
483 * packets that start the first subflow of an MPTCP connection, in mptcp_established_options_mp()
500 pr_debug("subflow=%p, local_key=%llu, remote_key=%llu map_len=%d\n", in mptcp_established_options_mp()
501 subflow, subflow->local_key, subflow->remote_key, in mptcp_established_options_mp()
505 } else if (subflow->mp_join) { in mptcp_established_options_mp()
507 memcpy(opts->hmac, subflow->hmac, MPTCPOPT_HMAC_LEN); in mptcp_established_options_mp()
509 pr_debug("subflow=%p\n", subflow); in mptcp_established_options_mp()
517 set_bit(MPTCP_DELEGATE_ACK, &subflow->delegated_status); in mptcp_established_options_mp()
519 mptcp_subflow_delegate(subflow, MPTCP_DELEGATE_ACK); in mptcp_established_options_mp()
525 static void mptcp_write_data_fin(struct mptcp_subflow_context *subflow, in mptcp_write_data_fin() argument
531 u64 data_fin_tx_seq = READ_ONCE(mptcp_sk(subflow->conn)->write_seq) - 1; in mptcp_write_data_fin()
558 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk); in mptcp_established_options_dss() local
559 struct mptcp_sock *msk = mptcp_sk(subflow->conn); in mptcp_established_options_dss()
581 mptcp_write_data_fin(subflow, skb, &opts->ext_copy); in mptcp_established_options_dss()
587 * if the first subflow may have the already the remote key handy in mptcp_established_options_dss()
650 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk); in mptcp_established_options_add_addr() local
651 struct mptcp_sock *msk = mptcp_sk(subflow->conn); in mptcp_established_options_add_addr()
714 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk); in mptcp_established_options_rm_addr() local
715 struct mptcp_sock *msk = mptcp_sk(subflow->conn); in mptcp_established_options_rm_addr()
744 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk); in mptcp_established_options_mp_prio() local
749 if (!subflow->send_mp_prio || (opts->suboptions & OPTIONS_MPTCP_MPC)) in mptcp_established_options_mp_prio()
758 opts->backup = subflow->request_bkup; in mptcp_established_options_mp_prio()
770 const struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk); in mptcp_established_options_rst() local
777 opts->reset_transient = subflow->reset_transient; in mptcp_established_options_rst()
778 opts->reset_reason = subflow->reset_reason; in mptcp_established_options_rst()
789 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk); in mptcp_established_options_fastclose() local
790 struct mptcp_sock *msk = mptcp_sk(subflow->conn); in mptcp_established_options_fastclose()
792 if (likely(!subflow->send_fastclose)) in mptcp_established_options_fastclose()
812 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk); in mptcp_established_options_mp_fail() local
814 if (likely(!subflow->send_mp_fail)) in mptcp_established_options_mp_fail()
822 opts->fail_seq = subflow->map_seq; in mptcp_established_options_mp_fail()
834 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk); in mptcp_established_options() local
835 struct mptcp_sock *msk = mptcp_sk(subflow->conn); in mptcp_established_options()
931 struct mptcp_subflow_context *subflow, in check_fully_established() argument
936 * will make the subflow fully established in check_fully_established()
938 if (likely(READ_ONCE(subflow->fully_established))) { in check_fully_established()
943 if (TCP_SKB_CB(skb)->seq == subflow->ssn_offset + 1 && in check_fully_established()
945 subflow->mp_join && (mp_opt->suboptions & OPTIONS_MPTCP_MPJ) && in check_fully_established()
946 !subflow->request_join) in check_fully_established()
951 /* we must process OoO packets before the first subflow is fully in check_fully_established()
956 if (TCP_SKB_CB(skb)->seq != subflow->ssn_offset + 1) { in check_fully_established()
957 if (subflow->mp_join) in check_fully_established()
959 if (subflow->is_mptfo && mp_opt->suboptions & OPTION_MPTCP_MPC_ACK) in check_fully_established()
961 return subflow->mp_capable; in check_fully_established()
964 if (subflow->remote_key_valid && in check_fully_established()
967 (!mp_opt->echo || subflow->mp_join)))) { in check_fully_established()
979 if (subflow->mp_join) in check_fully_established()
981 subflow->mp_capable = 0; in check_fully_established()
995 __mptcp_subflow_fully_established(msk, subflow, mp_opt); in check_fully_established()
999 /* if the subflow is not already linked into the conn_list, we can't in check_fully_established()
1000 * notify the PM: this subflow is still on the listener queue in check_fully_established()
1001 * and the PM possibly acquiring the subflow lock could race with in check_fully_established()
1004 if (likely(subflow->pm_notified) || list_empty(&subflow->node)) in check_fully_established()
1007 subflow->pm_notified = 1; in check_fully_established()
1008 if (subflow->mp_join) { in check_fully_established()
1120 /* Return false if a subflow has been reset, else return true */
1123 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk); in mptcp_incoming_options() local
1124 struct mptcp_sock *msk = mptcp_sk(subflow->conn); in mptcp_incoming_options()
1134 mptcp_data_lock(subflow->conn); in mptcp_incoming_options()
1136 __mptcp_check_push(subflow->conn, sk); in mptcp_incoming_options()
1143 __mptcp_data_acked(subflow->conn); in mptcp_incoming_options()
1144 mptcp_data_unlock(subflow->conn); in mptcp_incoming_options()
1150 /* The subflow can be in close state only if check_fully_established() in mptcp_incoming_options()
1153 if (!check_fully_established(msk, sk, subflow, skb, &mp_opt)) in mptcp_incoming_options()
1193 subflow->reset_seen = 1; in mptcp_incoming_options()
1194 subflow->reset_reason = mp_opt.reset_reason; in mptcp_incoming_options()
1195 subflow->reset_transient = mp_opt.reset_transient; in mptcp_incoming_options()
1233 mptcp_crypto_key_sha(subflow->remote_key, NULL, in mptcp_incoming_options()
1260 struct mptcp_subflow_context *subflow; in mptcp_set_rwin() local
1266 subflow = mptcp_subflow_ctx(ssk); in mptcp_set_rwin()
1267 msk = mptcp_sk(subflow->conn); in mptcp_set_rwin()
1358 struct mptcp_subflow_context *subflow; in mptcp_write_options() local
1592 subflow = mptcp_subflow_ctx(ssk); in mptcp_write_options()
1593 subflow->send_mp_fail = 0; in mptcp_write_options()
1614 subflow = mptcp_subflow_ctx(ssk); in mptcp_write_options()
1615 subflow->send_mp_prio = 0; in mptcp_write_options()