--- zzzz-none-000/linux-4.19.183/net/ipv4/tcp_fastopen.c 2021-03-24 10:07:39.000000000 +0000 +++ bcm63-7530ax-756/linux-4.19.183/net/ipv4/tcp_fastopen.c 2023-06-28 08:54:21.000000000 +0000 @@ -9,6 +9,9 @@ #include #include #include +#if defined(CONFIG_BCM_KF_MPTCP) && defined(CONFIG_BCM_MPTCP) +#include +#endif void tcp_fastopen_init_key_once(struct net *net) { @@ -218,8 +221,15 @@ { struct tcp_sock *tp; struct request_sock_queue *queue = &inet_csk(sk)->icsk_accept_queue; +#if !defined(CONFIG_BCM_KF_MPTCP) || !defined(CONFIG_BCM_MPTCP) struct sock *child; +#else + struct sock *child, *meta_sk; +#endif bool own_req; +#if defined(CONFIG_BCM_KF_MPTCP) && defined(CONFIG_BCM_MPTCP) + int ret; +#endif req->num_retrans = 0; req->num_timeout = 0; @@ -258,15 +268,33 @@ refcount_set(&req->rsk_refcnt, 2); +#if !defined(CONFIG_BCM_KF_MPTCP) || !defined(CONFIG_BCM_MPTCP) /* Now finish processing the fastopen child socket. */ tcp_init_transfer(child, BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB); +#endif tp->rcv_nxt = TCP_SKB_CB(skb)->seq + 1; tcp_fastopen_add_skb(child, skb); tcp_rsk(req)->rcv_nxt = tp->rcv_nxt; tp->rcv_wup = tp->rcv_nxt; +#if defined(CONFIG_BCM_KF_MPTCP) && defined(CONFIG_BCM_MPTCP) + + meta_sk = child; + ret = mptcp_check_req_fastopen(meta_sk, req); + if (ret < 0) + return NULL; + + if (ret == 0) { + child = tcp_sk(meta_sk)->mpcb->master_sk; + tp = tcp_sk(child); + } + + /* Now finish processing the fastopen child socket. */ + tcp_init_transfer(child, BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB); + +#endif /* tcp_conn_request() is sending the SYNACK, * and queues the child into listener accept queue. */