xref: /openbmc/linux/net/mptcp/fastopen.c (revision dfc8d06030335a816d81aa92fe5d1f84d06998ad)
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