Lines Matching full:subflow
276 u64 local_key; /* protected by the first subflow socket lock
305 bool recovery; /* closing subflow write queue reinjected */
314 u8 pending_state; /* A subflow asked to set this sk_state,
338 * ONCE annotation, the subflow outside the socket
501 /* MPTCP subflow context */
540 is_mptfo : 1, /* subflow is doing TFO */
553 u8 hmac[MPTCPOPT_HMAC_LEN]; /* MPJ subflow only */
597 mptcp_subflow_tcp_sock(const struct mptcp_subflow_context *subflow)
599 return subflow->tcp_sock;
603 mptcp_subflow_ctx_reset(struct mptcp_subflow_context *subflow)
605 memset(&subflow->reset, 0, sizeof(subflow->reset));
606 subflow->request_mptcp = 1;
607 WRITE_ONCE(subflow->local_id, -1);
640 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
643 reason = sk_rst_convert_mptcp_reason(subflow->reset_reason);
648 mptcp_subflow_get_map_offset(const struct mptcp_subflow_context *subflow)
650 return tcp_sk(mptcp_subflow_tcp_sock(subflow))->copied_seq -
651 subflow->ssn_offset -
652 subflow->map_subflow_seq;
656 mptcp_subflow_get_mapped_dsn(const struct mptcp_subflow_context *subflow)
658 return subflow->map_seq + mptcp_subflow_get_map_offset(subflow);
663 static inline void mptcp_subflow_delegate(struct mptcp_subflow_context *subflow, int action)
669 /* the caller held the subflow bh socket lock */
676 old = set_mask_bits(&subflow->delegated_status, 0, set_bits);
678 if (WARN_ON_ONCE(!list_empty(&subflow->delegated_node)))
684 list_add_tail(&subflow->delegated_node, &delegated->head);
686 sock_hold(mptcp_subflow_tcp_sock(subflow));
725 struct mptcp_subflow_context *subflow,
734 struct mptcp_subflow_context *subflow);
768 void mptcp_subflow_set_scheduled(struct mptcp_subflow_context *subflow,
802 static inline bool __mptcp_subflow_active(struct mptcp_subflow_context *subflow)
805 if (subflow->request_join && !READ_ONCE(subflow->fully_established))
808 return __tcp_can_send(mptcp_subflow_tcp_sock(subflow));
811 void mptcp_subflow_set_active(struct mptcp_subflow_context *subflow);
813 bool mptcp_subflow_active(struct mptcp_subflow_context *subflow);
932 struct mptcp_subflow_context *subflow;
939 mptcp_for_each_subflow(mptcp_sk(sk), subflow) {
940 ssk_sndbuf = READ_ONCE(mptcp_subflow_tcp_sock(subflow)->sk_sndbuf);
942 subflow->cached_sndbuf = ssk_sndbuf;
951 /* The called held both the msk socket and the subflow socket locks,
956 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
958 if (READ_ONCE(ssk->sk_sndbuf) != subflow->cached_sndbuf)
962 /* the caller held only the subflow socket lock, either in process or
969 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
971 if (likely(READ_ONCE(ssk->sk_sndbuf) == subflow->cached_sndbuf))
975 mptcp_subflow_delegate(subflow, MPTCP_DELEGATE_SNDBUF);
1025 const struct mptcp_subflow_context *subflow);
1032 struct mptcp_subflow_context *subflow,
1086 void mptcp_fastopen_subflow_synack_set_params(struct mptcp_subflow_context *subflow,
1169 static inline u8 subflow_get_local_id(const struct mptcp_subflow_context *subflow)
1171 int local_id = READ_ONCE(subflow->local_id);
1227 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
1228 struct mptcp_sock *msk = mptcp_sk(subflow->conn);
1246 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
1247 struct sock *sk = subflow->conn;
1268 struct mptcp_subflow_context *subflow,
1271 subflow->request_mptcp = 0;
1286 static inline bool is_active_ssk(struct mptcp_subflow_context *subflow)
1288 return (subflow->request_mptcp || subflow->request_join);
1293 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
1297 is_active_ssk(subflow) &&
1298 !subflow->conn_finished;