Lines Matching defs:subflow

314 	struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
322 mptcp_fastopen_subflow_synack_set_params(subflow, req);
379 static bool subflow_thmac_valid(struct mptcp_subflow_context *subflow)
384 subflow_generate_hmac(subflow->remote_key, subflow->local_key,
385 subflow->remote_nonce, subflow->local_nonce,
389 pr_debug("subflow=%p, token=%u, thmac=%llu, subflow->thmac=%llu\n",
390 subflow, subflow->token, thmac, subflow->thmac);
392 return thmac == subflow->thmac;
397 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
398 struct sock *sk = subflow->conn;
424 struct mptcp_subflow_context *subflow;
428 subflow = mptcp_subflow_ctx(ssk);
434 /* subflow->idsn is always available is TCP_SYN_SENT state,
437 WRITE_ONCE(msk->write_seq, subflow->idsn + 1);
445 struct mptcp_subflow_context *subflow,
448 /* active MPC subflow will reach here multiple times:
451 if (subflow->remote_key_valid)
454 subflow->remote_key_valid = 1;
455 subflow->remote_key = mp_opt->sndr_key;
456 mptcp_crypto_key_sha(subflow->remote_key, NULL, &subflow->iasn);
457 subflow->iasn++;
459 WRITE_ONCE(msk->remote_key, subflow->remote_key);
460 WRITE_ONCE(msk->ack_seq, subflow->iasn);
462 atomic64_set(&msk->rcv_wnd_sent, subflow->iasn);
466 struct mptcp_subflow_context *subflow,
476 WRITE_ONCE(msk->snd_una, subflow->idsn + 1);
477 WRITE_ONCE(msk->wnd_end, subflow->idsn + 1 + tcp_sk(ssk)->snd_wnd);
478 subflow_set_remote_key(msk, subflow, mp_opt);
492 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
494 struct sock *parent = subflow->conn;
497 subflow->icsk_af_ops->sk_rx_dst_set(sk, skb);
500 if (subflow->conn_finished)
504 subflow->rel_write_seq = 1;
505 subflow->conn_finished = 1;
506 subflow->ssn_offset = TCP_SKB_CB(skb)->seq;
507 pr_debug("subflow=%p synack seq=%x", subflow, subflow->ssn_offset);
510 if (subflow->request_mptcp) {
523 subflow->mp_capable = 1;
526 mptcp_propagate_state(parent, sk, subflow, &mp_opt);
527 } else if (subflow->request_join) {
531 subflow->reset_reason = MPTCP_RST_EMPTCP;
535 subflow->backup = mp_opt.backup;
536 subflow->thmac = mp_opt.thmac;
537 subflow->remote_nonce = mp_opt.nonce;
538 WRITE_ONCE(subflow->remote_id, mp_opt.join_id);
539 pr_debug("subflow=%p, thmac=%llu, remote_nonce=%u backup=%d",
540 subflow, subflow->thmac, subflow->remote_nonce,
541 subflow->backup);
543 if (!subflow_thmac_valid(subflow)) {
545 subflow->reset_reason = MPTCP_RST_EMPTCP;
552 subflow_generate_hmac(subflow->local_key, subflow->remote_key,
553 subflow->local_nonce,
554 subflow->remote_nonce,
556 memcpy(subflow->hmac, hmac, MPTCPOPT_HMAC_LEN);
558 subflow->mp_join = 1;
569 mptcp_propagate_state(parent, sk, subflow, NULL);
574 subflow->reset_transient = 0;
578 static void subflow_set_local_id(struct mptcp_subflow_context *subflow, int local_id)
581 WRITE_ONCE(subflow->local_id, local_id);
586 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
587 struct mptcp_sock *msk = mptcp_sk(subflow->conn);
590 if (likely(subflow->local_id >= 0))
597 subflow_set_local_id(subflow, err);
628 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
630 pr_debug("subflow=%p", subflow);
659 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
661 pr_debug("subflow=%p", subflow);
755 struct mptcp_subflow_context *subflow,
758 subflow_set_remote_key(msk, subflow, mp_opt);
759 subflow->fully_established = 1;
762 if (subflow->is_mptfo)
763 __mptcp_fastopen_gen_msk_ackseq(msk, subflow, mp_opt);
866 /* move the msk reference ownership to the subflow */
924 static void dbg_bad_map(struct mptcp_subflow_context *subflow, u32 ssn)
927 ssn, subflow->map_subflow_seq, subflow->map_data_len);
932 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
939 return skb->len - skb_consumed <= subflow->map_data_len -
940 mptcp_subflow_get_map_offset(subflow);
945 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
946 u32 ssn = tcp_sk(ssk)->copied_seq - subflow->ssn_offset;
948 if (unlikely(before(ssn, subflow->map_subflow_seq))) {
949 /* Mapping covers data later in the subflow stream,
952 dbg_bad_map(subflow, ssn);
955 if (unlikely(!before(ssn, subflow->map_subflow_seq +
956 subflow->map_data_len))) {
957 /* Mapping does covers past subflow data, invalid */
958 dbg_bad_map(subflow, ssn);
967 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
976 if (subflow->map_csum_len == subflow->map_data_len)
984 delta = subflow->map_data_len - subflow->map_csum_len;
986 seq = tcp_sk(ssk)->copied_seq + subflow->map_csum_len;
997 subflow->map_data_csum = csum_block_add(subflow->map_data_csum, csum,
998 subflow->map_csum_len);
1001 subflow->map_csum_len += len;
1007 /* if this subflow is closed, the partial mapping
1030 csum = __mptcp_make_csum(subflow->map_seq,
1031 subflow->map_subflow_seq,
1032 subflow->map_data_len + subflow->map_data_fin,
1033 subflow->map_data_csum);
1039 subflow->valid_csum_seen = 1;
1046 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
1062 if (!subflow->map_valid && !skb->len) {
1076 if (!subflow->map_valid)
1088 subflow->map_data_len = 0;
1097 if (subflow->map_valid) {
1130 WRITE_ONCE(mptcp_sk(subflow->conn)->use_64bit_ack, !!mpext->dsn64);
1132 if (subflow->map_valid) {
1134 if (subflow->map_seq == map_seq &&
1135 subflow->map_subflow_seq == mpext->subflow_seq &&
1136 subflow->map_data_len == data_len &&
1137 subflow->map_csum_reqd == mpext->csum_reqd) {
1154 subflow->map_seq = map_seq;
1155 subflow->map_subflow_seq = mpext->subflow_seq;
1156 subflow->map_data_len = data_len;
1157 subflow->map_valid = 1;
1158 subflow->map_data_fin = mpext->data_fin;
1159 subflow->mpc_map = mpext->mpc_map;
1160 subflow->map_csum_reqd = mpext->csum_reqd;
1161 subflow->map_csum_len = 0;
1162 subflow->map_data_csum = csum_unfold(mpext->csum);
1165 if (unlikely(subflow->map_csum_reqd != csum_reqd))
1169 subflow->map_seq, subflow->map_subflow_seq,
1170 subflow->map_data_len, subflow->map_csum_reqd,
1171 subflow->map_data_csum);
1191 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
1198 subflow->map_subflow_seq);
1203 if (mptcp_subflow_get_map_offset(subflow) >= subflow->map_data_len)
1204 subflow->map_valid = 0;
1207 /* sched mptcp worker to remove the subflow if no more data is pending */
1218 static bool subflow_can_fallback(struct mptcp_subflow_context *subflow)
1220 struct mptcp_sock *msk = mptcp_sk(subflow->conn);
1222 if (subflow->mp_join)
1225 return !subflow->valid_csum_seen;
1227 return !subflow->fully_established;
1232 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
1235 /* greceful failure can happen only on the MPC subflow */
1251 WRITE_ONCE(subflow->fail_tout, fail_tout);
1254 mptcp_reset_tout_timer(msk, subflow->fail_tout);
1259 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
1265 WRITE_ONCE(subflow->data_avail, MPTCP_SUBFLOW_NODATA);
1266 if (subflow->data_avail)
1269 msk = mptcp_sk(subflow->conn);
1291 ack_seq = mptcp_subflow_get_mapped_dsn(subflow);
1292 pr_debug("msk ack_seq=%llx subflow ack_seq=%llx", old_ack,
1299 WRITE_ONCE(subflow->data_avail, MPTCP_SUBFLOW_DATA_AVAIL);
1312 (subflow->mp_join || subflow->valid_csum_seen)) {
1313 subflow->send_mp_fail = 1;
1316 subflow->reset_transient = 0;
1317 subflow->reset_reason = MPTCP_RST_EMIDDLEBOX;
1321 WRITE_ONCE(subflow->data_avail, MPTCP_SUBFLOW_DATA_AVAIL);
1325 if (!subflow_can_fallback(subflow) && subflow->map_data_len) {
1329 subflow->reset_transient = 0;
1330 subflow->reset_reason = MPTCP_RST_EMPTCP;
1338 WRITE_ONCE(subflow->data_avail, MPTCP_SUBFLOW_NODATA);
1346 subflow->map_valid = 1;
1347 subflow->map_seq = READ_ONCE(msk->ack_seq);
1348 subflow->map_data_len = skb->len;
1349 subflow->map_subflow_seq = tcp_sk(ssk)->copied_seq - subflow->ssn_offset;
1350 WRITE_ONCE(subflow->data_avail, MPTCP_SUBFLOW_DATA_AVAIL);
1356 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
1359 if (subflow->map_valid &&
1360 mptcp_subflow_get_map_offset(subflow) >= subflow->map_data_len) {
1361 subflow->map_valid = 0;
1362 WRITE_ONCE(subflow->data_avail, MPTCP_SUBFLOW_NODATA);
1365 subflow->map_subflow_seq,
1366 subflow->map_data_len);
1383 const struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
1384 const struct sock *sk = subflow->conn;
1411 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
1413 struct sock *parent = subflow->conn;
1420 /* MPJ subflow are removed from accept queue before reaching here,
1430 WARN_ON_ONCE(!__mptcp_check_fallback(msk) && !subflow->mp_capable &&
1431 !subflow->mp_join && !(state & TCPF_CLOSE));
1460 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
1466 pr_debug("subflow=%p family=%d ops=%p target=%p mapped=%d",
1467 subflow, sk->sk_family, icsk->icsk_af_ops, target, mapped);
1472 subflow->icsk_af_ops = icsk->icsk_af_ops;
1512 struct mptcp_subflow_context *subflow;
1532 subflow = mptcp_subflow_ctx(ssk);
1534 get_random_bytes(&subflow->local_nonce, sizeof(u32));
1535 } while (!subflow->local_nonce);
1538 subflow_set_local_id(subflow, local_id);
1542 subflow->remote_key_valid = 1;
1543 subflow->remote_key = msk->remote_key;
1544 subflow->local_key = msk->local_key;
1545 subflow->token = msk->token;
1560 mptcp_crypto_key_sha(subflow->remote_key, &remote_token, NULL);
1563 subflow->remote_token = remote_token;
1564 WRITE_ONCE(subflow->remote_id, remote_id);
1565 subflow->request_join = 1;
1566 subflow->request_bkup = !!(flags & MPTCP_PM_ADDR_FLAG_BACKUP);
1567 subflow->subflow_id = msk->subflow_id++;
1571 list_add_tail(&subflow->node, &msk->conn_list);
1576 /* discard the subflow socket */
1584 list_del(&subflow->node);
1585 sock_put(mptcp_subflow_tcp_sock(subflow));
1588 subflow->disposable = 1;
1646 struct mptcp_subflow_context *subflow;
1698 subflow = mptcp_subflow_ctx(sf->sk);
1699 pr_debug("subflow=%p", subflow);
1703 subflow->conn = sk;
1723 pr_debug("subflow=%p", ctx);
1749 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
1750 struct sock *parent = subflow->conn;
1759 subflow->conn_finished = 1;
1760 mptcp_propagate_state(parent, sk, subflow, NULL);
1763 /* as recvmsg() does not acquire the subflow socket for ssk selection
1774 /* when the fallback subflow closes the rx side, trigger a 'dummy'
1786 struct mptcp_subflow_context *subflow;
1803 /* can't acquire the msk socket lock under the subflow one,
1813 subflow = mptcp_subflow_ctx(ssk);
1814 if (!subflow || !subflow->conn)
1817 sk = subflow->conn;
1874 pr_debug("subflow=%p, family=%d", ctx, sk->sk_family);
1906 * when the subflow is still unaccepted
1961 /* this is the first subflow, id is always 0 */
1973 /* the subflow req id is valid, fetched via subflow_check_req()
1982 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
1985 /* process and clear all the pending actions, but leave the subflow into
1989 status = set_mask_bits(&subflow->delegated_status, MPTCP_DELEGATE_ACTIONS_MASK, 0);
1998 /* closing a listener subflow requires a great deal of care.
2037 panic("MPTCP: failed to init subflow v4 request sock ops\n");
2066 panic("MPTCP: failed to init subflow v6 request sock ops\n");