1*dfc8d060SDmytro Shytyi // SPDX-License-Identifier: GPL-2.0 2*dfc8d060SDmytro Shytyi /* MPTCP Fast Open Mechanism 3*dfc8d060SDmytro Shytyi * 4*dfc8d060SDmytro Shytyi * Copyright (c) 2021-2022, Dmytro SHYTYI 5*dfc8d060SDmytro Shytyi */ 6*dfc8d060SDmytro Shytyi 7*dfc8d060SDmytro Shytyi #include "protocol.h" 8*dfc8d060SDmytro Shytyi 9*dfc8d060SDmytro Shytyi void mptcp_fastopen_gen_msk_ackseq(struct mptcp_sock *msk, struct mptcp_subflow_context *subflow, 10*dfc8d060SDmytro Shytyi const struct mptcp_options_received *mp_opt) 11*dfc8d060SDmytro Shytyi { 12*dfc8d060SDmytro Shytyi struct sock *sk = (struct sock *)msk; 13*dfc8d060SDmytro Shytyi struct sk_buff *skb; 14*dfc8d060SDmytro Shytyi 15*dfc8d060SDmytro Shytyi mptcp_data_lock(sk); 16*dfc8d060SDmytro Shytyi skb = skb_peek_tail(&sk->sk_receive_queue); 17*dfc8d060SDmytro Shytyi if (skb) { 18*dfc8d060SDmytro Shytyi WARN_ON_ONCE(MPTCP_SKB_CB(skb)->end_seq); 19*dfc8d060SDmytro Shytyi pr_debug("msk %p moving seq %llx -> %llx end_seq %llx -> %llx", sk, 20*dfc8d060SDmytro Shytyi MPTCP_SKB_CB(skb)->map_seq, MPTCP_SKB_CB(skb)->map_seq + msk->ack_seq, 21*dfc8d060SDmytro Shytyi MPTCP_SKB_CB(skb)->end_seq, MPTCP_SKB_CB(skb)->end_seq + msk->ack_seq); 22*dfc8d060SDmytro Shytyi MPTCP_SKB_CB(skb)->map_seq += msk->ack_seq; 23*dfc8d060SDmytro Shytyi MPTCP_SKB_CB(skb)->end_seq += msk->ack_seq; 24*dfc8d060SDmytro Shytyi } 25*dfc8d060SDmytro Shytyi 26*dfc8d060SDmytro Shytyi pr_debug("msk=%p ack_seq=%llx", msk, msk->ack_seq); 27*dfc8d060SDmytro Shytyi mptcp_data_unlock(sk); 28*dfc8d060SDmytro Shytyi } 29