From: Martin KaFai Lau <martin.lau@linux.dev>
To: Jason Xing <kerneljasonxing@gmail.com>
Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org,
pabeni@redhat.com, dsahern@kernel.org,
willemdebruijn.kernel@gmail.com, willemb@google.com,
ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org,
eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev,
john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me,
haoluo@google.com, jolsa@kernel.org, bpf@vger.kernel.org,
netdev@vger.kernel.org, Jason Xing <kernelxing@tencent.com>
Subject: Re: [PATCH net-next v2 06/12] net-timestamp: introduce TS_SCHED_OPT_CB to generate dev xmit timestamp
Date: Tue, 15 Oct 2024 18:01:23 -0700 [thread overview]
Message-ID: <b4767fab-9c61-49f0-8185-6445349ae30b@linux.dev> (raw)
In-Reply-To: <20241012040651.95616-7-kerneljasonxing@gmail.com>
On 10/11/24 9:06 PM, Jason Xing wrote:
> From: Jason Xing <kernelxing@tencent.com>
>
> Introduce BPF_SOCK_OPS_TS_SCHED_OPT_CB flag so that we can decide to
> print timestamps when the skb just passes the dev layer.
>
> Signed-off-by: Jason Xing <kernelxing@tencent.com>
> ---
> include/uapi/linux/bpf.h | 5 +++++
> net/core/skbuff.c | 17 +++++++++++++++--
> tools/include/uapi/linux/bpf.h | 5 +++++
> 3 files changed, 25 insertions(+), 2 deletions(-)
>
> diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h
> index 157e139ed6fc..3cf3c9c896c7 100644
> --- a/include/uapi/linux/bpf.h
> +++ b/include/uapi/linux/bpf.h
> @@ -7019,6 +7019,11 @@ enum {
> * by the kernel or the
> * earlier bpf-progs.
> */
> + BPF_SOCK_OPS_TS_SCHED_OPT_CB, /* Called when skb is passing through
> + * dev layer when SO_TIMESTAMPING
> + * feature is on. It indicates the
> + * recorded timestamp.
> + */
> };
>
> /* List of TCP states. There is a build check in net/ipv4/tcp.c to detect
> diff --git a/net/core/skbuff.c b/net/core/skbuff.c
> index 3a4110d0f983..16e7bdc1eacb 100644
> --- a/net/core/skbuff.c
> +++ b/net/core/skbuff.c
> @@ -5632,8 +5632,21 @@ static void bpf_skb_tstamp_tx_output(struct sock *sk, int tstype)
> return;
>
> tp = tcp_sk(sk);
> - if (BPF_SOCK_OPS_TEST_FLAG(tp, BPF_SOCK_OPS_TX_TIMESTAMPING_OPT_CB_FLAG))
> - return;
> + if (BPF_SOCK_OPS_TEST_FLAG(tp, BPF_SOCK_OPS_TX_TIMESTAMPING_OPT_CB_FLAG)) {
> + struct timespec64 tstamp;
> + u32 cb_flag;
> +
> + switch (tstype) {
> + case SCM_TSTAMP_SCHED:
> + cb_flag = BPF_SOCK_OPS_TS_SCHED_OPT_CB;
> + break;
> + default:
> + return;
> + }
> +
> + tstamp = ktime_to_timespec64(ktime_get_real());
> + tcp_call_bpf_2arg(sk, cb_flag, tstamp.tv_sec, tstamp.tv_nsec);
There is bpf_ktime_get_*() helper. The bpf prog can directly call the
bpf_ktime_get_* helper and use whatever clock it sees fit instead of enforcing
real clock here and doing an extra ktime_to_timespec64. Right now the
bpf_ktime_get_*() does not have real clock which I think it can be added.
I think overall the tstamp reporting interface does not necessarily have to
follow the socket API. The bpf prog is running in the kernel. It could pass
other information to the bpf prog if it sees fit. e.g. the bpf prog could also
get the original transmitted tcp skb if it is useful.
> + }
> }
>
> void __skb_tstamp_tx(struct sk_buff *orig_skb,
> diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h
> index 93853d9d4922..d60675e1a5a0 100644
> --- a/tools/include/uapi/linux/bpf.h
> +++ b/tools/include/uapi/linux/bpf.h
> @@ -7018,6 +7018,11 @@ enum {
> * by the kernel or the
> * earlier bpf-progs.
> */
> + BPF_SOCK_OPS_TS_SCHED_OPT_CB, /* Called when skb is passing through
> + * dev layer when SO_TIMESTAMPING
> + * feature is on. It indicates the
> + * recorded timestamp.
> + */
> };
>
> /* List of TCP states. There is a build check in net/ipv4/tcp.c to detect
next prev parent reply other threads:[~2024-10-16 1:01 UTC|newest]
Thread overview: 73+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-12 4:06 [PATCH net-next v2 00/12] net-timestamp: bpf extension to equip applications transparently Jason Xing
2024-10-12 4:06 ` [PATCH net-next v2 01/12] net-timestamp: introduce socket tsflag requestors Jason Xing
2024-10-15 1:30 ` Willem de Bruijn
2024-10-15 1:50 ` Jason Xing
2024-10-12 4:06 ` [PATCH net-next v2 02/12] net-timestamp: open gate for bpf_setsockopt Jason Xing
2024-10-15 1:34 ` Willem de Bruijn
2024-10-15 2:05 ` Jason Xing
2024-10-15 21:32 ` Martin KaFai Lau
2024-10-15 21:55 ` Willem de Bruijn
2024-10-22 13:22 ` Jason Xing
2024-10-23 0:06 ` Willem de Bruijn
2024-10-23 3:49 ` Jason Xing
2024-10-16 0:45 ` Jason Xing
2024-10-15 23:54 ` Martin KaFai Lau
2024-10-16 0:49 ` Jason Xing
2024-10-12 4:06 ` [PATCH net-next v2 03/12] net-timestamp: reorganize in skb_tstamp_tx_output() Jason Xing
2024-10-12 4:06 ` [PATCH net-next v2 04/12] net-timestamp: add static key to control the whole bpf extension Jason Xing
2024-10-15 1:36 ` Willem de Bruijn
2024-10-15 2:25 ` Jason Xing
2024-10-16 0:09 ` Martin KaFai Lau
2024-10-16 1:04 ` Jason Xing
2024-10-16 1:32 ` Jason Xing
2024-10-16 6:13 ` Martin KaFai Lau
2024-10-16 6:30 ` Jason Xing
2024-10-16 7:01 ` Martin KaFai Lau
2024-10-16 7:54 ` Jason Xing
2024-10-16 8:31 ` Martin KaFai Lau
2024-10-16 10:36 ` Jason Xing
2024-10-17 0:48 ` Martin KaFai Lau
2024-10-17 2:28 ` Jason Xing
2024-10-17 20:43 ` Martin KaFai Lau
2024-10-18 2:52 ` Jason Xing
2024-10-18 3:05 ` Jason Xing
2024-10-16 6:31 ` Martin KaFai Lau
2024-10-16 6:45 ` Jason Xing
2024-10-16 13:13 ` Willem de Bruijn
2024-10-16 13:22 ` Jason Xing
2024-10-20 21:51 ` Willem de Bruijn
2024-10-21 3:21 ` Jason Xing
2024-10-21 14:49 ` Willem de Bruijn
2024-10-21 15:05 ` Jason Xing
2024-10-22 0:53 ` Martin KaFai Lau
2024-10-22 2:30 ` Jason Xing
2024-10-23 0:17 ` Willem de Bruijn
2024-10-23 2:31 ` Willem de Bruijn
2024-10-12 4:06 ` [PATCH net-next v2 05/12] net-timestamp: add bpf infrastructure to allow exposing timestamp later Jason Xing
2024-10-12 4:06 ` [PATCH net-next v2 06/12] net-timestamp: introduce TS_SCHED_OPT_CB to generate dev xmit timestamp Jason Xing
2024-10-16 1:01 ` Martin KaFai Lau [this message]
2024-10-16 1:24 ` Jason Xing
2024-10-16 5:35 ` Martin KaFai Lau
2024-10-16 6:08 ` Jason Xing
2024-10-12 4:06 ` [PATCH net-next v2 07/12] net-timestamp: introduce TS_SW_OPT_CB to generate driver timestamp Jason Xing
2024-10-12 4:06 ` [PATCH net-next v2 08/12] net-timestamp: introduce TS_ACK_OPT_CB to generate tcp acked timestamp Jason Xing
2024-10-12 4:06 ` [PATCH net-next v2 09/12] net-timestamp: add tx OPT_ID_TCP support for bpf case Jason Xing
2024-10-15 1:38 ` Willem de Bruijn
2024-10-15 2:25 ` Jason Xing
2024-10-15 2:38 ` Willem de Bruijn
2024-10-15 2:59 ` Jason Xing
2024-10-15 8:40 ` kernel test robot
2024-10-15 9:36 ` Jason Xing
2024-10-12 4:06 ` [PATCH net-next v2 10/12] net-timestamp: make bpf for tx timestamp work Jason Xing
2024-10-12 4:06 ` [PATCH net-next v2 11/12] net-timestamp: add bpf framework for rx timestamps Jason Xing
2024-10-15 1:44 ` Willem de Bruijn
2024-10-15 2:18 ` Jason Xing
2024-10-12 4:06 ` [PATCH net-next v2 12/12] net-timestamp: add bpf support for rx software/hardware timestamp Jason Xing
2024-10-12 17:48 ` [PATCH net-next v2 00/12] net-timestamp: bpf extension to equip applications transparently Willem de Bruijn
2024-10-13 3:28 ` Jason Xing
2024-10-13 3:43 ` Jason Xing
2024-10-13 6:05 ` Jason Xing
2024-10-15 1:28 ` Willem de Bruijn
2024-10-15 2:52 ` Jason Xing
2024-10-15 2:59 ` Willem de Bruijn
2024-10-15 3:02 ` Jason Xing
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=b4767fab-9c61-49f0-8185-6445349ae30b@linux.dev \
--to=martin.lau@linux.dev \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=dsahern@kernel.org \
--cc=eddyz87@gmail.com \
--cc=edumazet@google.com \
--cc=haoluo@google.com \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=kerneljasonxing@gmail.com \
--cc=kernelxing@tencent.com \
--cc=kpsingh@kernel.org \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sdf@fomichev.me \
--cc=song@kernel.org \
--cc=willemb@google.com \
--cc=willemdebruijn.kernel@gmail.com \
--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).