From: "Jiayuan Chen" <jiayuan.chen@linux.dev>
To: "Jakub Sitnicki" <jakub@cloudflare.com>
Cc: bpf@vger.kernel.org, mrpre@163.com,
"Alexei Starovoitov" <ast@kernel.org>,
"Daniel Borkmann" <daniel@iogearbox.net>,
"John Fastabend" <john.fastabend@gmail.com>,
"Andrii Nakryiko" <andrii@kernel.org>,
"Martin KaFai Lau" <martin.lau@linux.dev>,
"Eduard Zingerman" <eddyz87@gmail.com>,
"Song Liu" <song@kernel.org>,
"Yonghong Song" <yonghong.song@linux.dev>,
"KP Singh" <kpsingh@kernel.org>,
"Stanislav Fomichev" <sdf@fomichev.me>,
"Hao Luo" <haoluo@google.com>, "Jiri Olsa" <jolsa@kernel.org>,
"Steven Rostedt" <rostedt@goodmis.org>,
"Masami Hiramatsu" <mhiramat@kernel.org>,
"Mathieu Desnoyers" <mathieu.desnoyers@efficios.com>,
"David S. Miller" <davem@davemloft.net>,
"Eric Dumazet" <edumazet@google.com>,
"Jakub Kicinski" <kuba@kernel.org>,
"Paolo Abeni" <pabeni@redhat.com>,
"Simon Horman" <horms@kernel.org>,
"Jesper Dangaard Brouer" <hawk@kernel.org>,
linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
linux-trace-kernel@vger.kernel.org
Subject: Re: [PATCH bpf-next v1] bpf, sockmap: Introduce tracing capability for sockmap
Date: Thu, 10 Apr 2025 14:27:17 +0000 [thread overview]
Message-ID: <0cfe4cc98a818d83a9b4bbe55006a17a7452ee38@linux.dev> (raw)
In-Reply-To: <87ikncgyyd.fsf@cloudflare.com>
April 10, 2025 at 17:14, "Jakub Sitnicki" <jakub@cloudflare.com> wrote:
>
> On Wed, Apr 09, 2025 at 06:29 PM +08, Jiayuan Chen wrote:
>
> >
> > Sockmap has the same high-performance forwarding capability as XDP, but
> >
> > operates at Layer 7.
> >
> > Introduce tracing capability for sockmap, similar to XDP, to trace the
> >
> > execution results of BPF programs without modifying the programs
> >
> > themselves, similar to the existing trace_xdp_redirect{_map}.
> >
> > It is crucial for debugging BPF programs, especially in production
> >
> > environments.
> >
> > Additionally, a header file was added to bpf_trace.h to automatically
> >
> > generate tracepoints.
> >
> > Test results:
> >
> > $ echo "1" > /sys/kernel/tracing/events/sockmap/enable
> >
> > skb:
> >
> > sockmap_redirect: sk=00000000d3266a8d, type=skb, family=2, protocol=6, \
> >
> > prog_id=73, length=256, action=PASS
> >
> > msg:
> >
> > sockmap_redirect: sk=00000000528c7614, type=msg, family=2, protocol=6, \
> >
> > prog_id=185, length=5, action=REDIRECT
> >
> > tls:
> >
> > sockmap_redirect: sk=00000000d04d2224, type=skb, family=2, protocol=6, \
> >
> > prog_id=143, length=35, action=PASS
> >
> > strparser:
> >
> > sockmap_skb_strp_parse: sk=00000000ecab0b30, family=2, protocol=6, \
> >
> > prog_id=170, size=5
> >
> > Signed-off-by: Jiayuan Chen <jiayuan.chen@linux.dev>
> >
> > ---
> >
> > MAINTAINERS | 1 +
> >
> > include/linux/bpf_trace.h | 2 +-
> >
> > include/trace/events/sockmap.h | 89 ++++++++++++++++++++++++++++++++++
> >
> > net/core/skmsg.c | 6 +++
> >
> > 4 files changed, 97 insertions(+), 1 deletion(-)
> >
> > create mode 100644 include/trace/events/sockmap.h
> >
> > diff --git a/MAINTAINERS b/MAINTAINERS
> >
> > index a7a1d121a83e..578e16d86853 100644
> >
> > --- a/MAINTAINERS
> >
> > +++ b/MAINTAINERS
> >
> > @@ -4420,6 +4420,7 @@ L: netdev@vger.kernel.org
> >
> > L: bpf@vger.kernel.org
> >
> > S: Maintained
> >
> > F: include/linux/skmsg.h
> >
> > +F: include/trace/events/sockmap.h
> >
> > F: net/core/skmsg.c
> >
> > F: net/core/sock_map.c
> >
> > F: net/ipv4/tcp_bpf.c
> >
> > diff --git a/include/linux/bpf_trace.h b/include/linux/bpf_trace.h
> >
> > index ddf896abcfb6..896346fb2b46 100644
> >
> > --- a/include/linux/bpf_trace.h
> >
> > +++ b/include/linux/bpf_trace.h
> >
> > @@ -3,5 +3,5 @@
> >
> > #define __LINUX_BPF_TRACE_H__
> >
> >
> >
> > #include <trace/events/xdp.h>
> >
> > -
> >
> > +#include <trace/events/sockmap.h>
> >
> > #endif /* __LINUX_BPF_TRACE_H__ */
> >
> > diff --git a/include/trace/events/sockmap.h b/include/trace/events/sockmap.h
> >
> > new file mode 100644
> >
> > index 000000000000..2a69b011e88f
> >
> > --- /dev/null
> >
> > +++ b/include/trace/events/sockmap.h
> >
> > @@ -0,0 +1,89 @@
> >
> > +/* SPDX-License-Identifier: GPL-2.0 */
> >
> > +#undef TRACE_SYSTEM
> >
> > +#define TRACE_SYSTEM sockmap
> >
> > +
> >
> > +#if !defined(_TRACE_SOCKMAP_H) || defined(TRACE_HEADER_MULTI_READ)
> >
> > +#define _TRACE_SOCKMAP_H
> >
> > +
> >
> > +#include <linux/filter.h>
> >
> > +#include <linux/tracepoint.h>
> >
> > +#include <linux/bpf.h>
> >
> > +#include <linux/skmsg.h>
> >
> > +
> >
> > +TRACE_DEFINE_ENUM(__SK_DROP);
> >
> > +TRACE_DEFINE_ENUM(__SK_PASS);
> >
> > +TRACE_DEFINE_ENUM(__SK_REDIRECT);
> >
> > +TRACE_DEFINE_ENUM(__SK_NONE);
> >
> > +
> >
> > +#define show_act(x) \
> >
> > + __print_symbolic(x, \
> >
> > + { __SK_DROP, "DROP" }, \
> >
> > + { __SK_PASS, "PASS" }, \
> >
> > + { __SK_REDIRECT, "REDIRECT" }, \
> >
> > + { __SK_NONE, "NONE" })
> >
> > +
> >
> > +#define trace_sockmap_skmsg_redirect(sk, prog, msg, act) \
> >
> > + trace_sockmap_redirect((sk), "msg", (prog), (msg)->sg.size, (act))
> >
> > +
> >
> > +#define trace_sockmap_skb_redirect(sk, prog, skb, act) \
> >
> > + trace_sockmap_redirect((sk), "skb", (prog), (skb)->len, (act))
> >
> > +
> >
> > +TRACE_EVENT(sockmap_redirect,
> >
> > + TP_PROTO(const struct sock *sk, const char *type,
> >
> > + const struct bpf_prog *prog, int length, int act),
> >
> > + TP_ARGS(sk, type, prog, length, act),
> >
> > +
> >
> > + TP_STRUCT__entry(
> >
> > + __field(const void *, sk)
> >
> > + __field(const char *, type)
> >
> > + __field(__u16, family)
> >
> > + __field(__u16, protocol)
> >
> > + __field(int, prog_id)
> >
> > + __field(int, length)
> >
> > + __field(int, act)
> >
> > + ),
> >
> > +
> >
> > + TP_fast_assign(
> >
> > + __entry->sk = sk;
> >
> > + __entry->type = type;
> >
> > + __entry->family = sk->sk_family;
> >
> > + __entry->protocol = sk->sk_protocol;
> >
> > + __entry->prog_id = prog->aux->id;
> >
> > + __entry->length = length;
> >
> > + __entry->act = act;
> >
> > + ),
> >
> > +
> >
> > + TP_printk("sk=%p, type=%s, family=%d, protocol=%d, prog_id=%d, length=%d, action=%s",
> >
> > + __entry->sk, __entry->type, __entry->family, __entry->protocol,
> >
> > + __entry->prog_id, __entry->length,
> >
> > + show_act(__entry->act))
> >
>
> sk address is useful if you're going to attach a bpf program to the
> tracepoint. Not so much if you're printing the recorded trace.
>
> I'd print the netns and the socket inode instead, or in addition to.
> These can be cross-referenced against `lsns` and `ss` output.
Good suggestions. I will print all of this.
sk address helps us track connection more easily.
Thanks~
prev parent reply other threads:[~2025-04-10 14:27 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-09 10:29 [PATCH bpf-next v1] bpf, sockmap: Introduce tracing capability for sockmap Jiayuan Chen
2025-04-09 16:11 ` Steven Rostedt
2025-04-09 16:40 ` Jiayuan Chen
2025-04-09 17:04 ` Cong Wang
2025-04-10 1:19 ` Jiayuan Chen
2025-04-10 9:14 ` Jakub Sitnicki
2025-04-10 14:27 ` Jiayuan Chen [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=0cfe4cc98a818d83a9b4bbe55006a17a7452ee38@linux.dev \
--to=jiayuan.chen@linux.dev \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=eddyz87@gmail.com \
--cc=edumazet@google.com \
--cc=haoluo@google.com \
--cc=hawk@kernel.org \
--cc=horms@kernel.org \
--cc=jakub@cloudflare.com \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=kpsingh@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=martin.lau@linux.dev \
--cc=mathieu.desnoyers@efficios.com \
--cc=mhiramat@kernel.org \
--cc=mrpre@163.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=rostedt@goodmis.org \
--cc=sdf@fomichev.me \
--cc=song@kernel.org \
--cc=yonghong.song@linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).