Martin KaFai Lau <kafai@xxxxxx> 于2022年5月17日周二 09:07写道: > > On Fri, May 13, 2022 at 03:48:21PM -0700, Mat Martineau wrote: > [ ... ] > > > diff --git a/include/net/mptcp.h b/include/net/mptcp.h > > index 8b1afd6f5cc4..2ba09de955c7 100644 > > --- a/include/net/mptcp.h > > +++ b/include/net/mptcp.h > > @@ -284,4 +284,10 @@ static inline int mptcpv6_init(void) { return 0; } > > static inline void mptcpv6_handle_mapped(struct sock *sk, bool mapped) { } > > #endif > > > > +#if defined(CONFIG_MPTCP) && defined(CONFIG_BPF_SYSCALL) > > +struct mptcp_sock *bpf_mptcp_sock_from_subflow(struct sock *sk); > Can this be inline ? This function can't be inline since it uses struct mptcp_subflow_context. mptcp_subflow_context is defined in net/mptcp/protocol.h, and we don't want to export it to user space in net/mptcp/protocol.h. > > > +#else > > +static inline struct mptcp_sock *bpf_mptcp_sock_from_subflow(struct sock *sk) { return NULL; } > > +#endif > > + > > #endif /* __NET_MPTCP_H */ > > [ ... ] > > > diff --git a/net/mptcp/bpf.c b/net/mptcp/bpf.c > > new file mode 100644 > > index 000000000000..535602ba2582 > > --- /dev/null > > +++ b/net/mptcp/bpf.c > > @@ -0,0 +1,22 @@ > > +// SPDX-License-Identifier: GPL-2.0 > > +/* Multipath TCP > > + * > > + * Copyright (c) 2020, Tessares SA. > > + * Copyright (c) 2022, SUSE. > > + * > > + * Author: Nicolas Rybowski <nicolas.rybowski@xxxxxxxxxxxx> > > + */ > > + > > +#define pr_fmt(fmt) "MPTCP: " fmt > > + > > +#include <linux/bpf.h> > > +#include "protocol.h" > > + > > +struct mptcp_sock *bpf_mptcp_sock_from_subflow(struct sock *sk) > > +{ > > + if (sk && sk_fullsock(sk) && sk->sk_protocol == IPPROTO_TCP && sk_is_mptcp(sk)) > > + return mptcp_sk(mptcp_subflow_ctx(sk)->conn); > > + > > + return NULL; > > +} > > +EXPORT_SYMBOL(bpf_mptcp_sock_from_subflow); > Is EXPORT_SYMBOL needed ? Will drop in v5. Thanks, -Geliang >