From: Jason Xing <kerneljasonxing@gmail.com>
To: 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,
martin.lau@linux.dev, 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, horms@kernel.org
Cc: bpf@vger.kernel.org, netdev@vger.kernel.org,
Jason Xing <kerneljasonxing@gmail.com>
Subject: [PATCH bpf-next v8 07/12] bpf: support sw SCM_TSTAMP_SND of SO_TIMESTAMPING
Date: Wed, 5 Feb 2025 02:30:19 +0800 [thread overview]
Message-ID: <20250204183024.87508-8-kerneljasonxing@gmail.com> (raw)
In-Reply-To: <20250204183024.87508-1-kerneljasonxing@gmail.com>
Support sw SCM_TSTAMP_SND case. Then users will get the software
timestamp when the driver is about to send the skb. Later,
the hardware timestamp will be supported.
Signed-off-by: Jason Xing <kerneljasonxing@gmail.com>
---
include/linux/skbuff.h | 2 +-
include/uapi/linux/bpf.h | 4 ++++
net/core/skbuff.c | 10 ++++++++--
tools/include/uapi/linux/bpf.h | 4 ++++
4 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index 35c2e864dd4b..de8d3bd311f5 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -4569,7 +4569,7 @@ void skb_tstamp_tx(struct sk_buff *orig_skb,
static inline void skb_tx_timestamp(struct sk_buff *skb)
{
skb_clone_tx_timestamp(skb);
- if (skb_shinfo(skb)->tx_flags & SKBTX_SW_TSTAMP)
+ if (skb_shinfo(skb)->tx_flags & (SKBTX_SW_TSTAMP | SKBTX_BPF))
__skb_tstamp_tx(skb, NULL, NULL, skb->sk, true, SCM_TSTAMP_SND);
}
diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h
index 30d2c078966b..6a1083bcf779 100644
--- a/include/uapi/linux/bpf.h
+++ b/include/uapi/linux/bpf.h
@@ -7036,6 +7036,10 @@ enum {
* dev layer when SK_BPF_CB_TX_TIMESTAMPING
* feature is on.
*/
+ BPF_SOCK_OPS_TS_SW_OPT_CB, /* Called when skb is about to send
+ * to the nic when SK_BPF_CB_TX_TIMESTAMPING
+ * feature is on.
+ */
};
/* 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 b7261e886529..b22d079e7143 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -5564,7 +5564,8 @@ static bool skb_enable_app_tstamp(struct sk_buff *skb, int tstype, bool sw)
return false;
}
-static void skb_tstamp_tx_bpf(struct sk_buff *skb, struct sock *sk, int tstype)
+static void skb_tstamp_tx_bpf(struct sk_buff *skb, struct sock *sk,
+ int tstype, bool sw)
{
int op;
@@ -5572,6 +5573,11 @@ static void skb_tstamp_tx_bpf(struct sk_buff *skb, struct sock *sk, int tstype)
case SCM_TSTAMP_SCHED:
op = BPF_SOCK_OPS_TS_SCHED_OPT_CB;
break;
+ case SCM_TSTAMP_SND:
+ if (!sw)
+ return;
+ op = BPF_SOCK_OPS_TS_SW_OPT_CB;
+ break;
default:
return;
}
@@ -5593,7 +5599,7 @@ void __skb_tstamp_tx(struct sk_buff *orig_skb,
/* bpf extension feature entry */
if (skb_shinfo(orig_skb)->tx_flags & SKBTX_BPF)
- skb_tstamp_tx_bpf(orig_skb, sk, tstype);
+ skb_tstamp_tx_bpf(orig_skb, sk, tstype, sw);
/* application feature entry */
if (!skb_enable_app_tstamp(orig_skb, tstype, sw))
diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h
index eed91b7296b7..9bd1c7c77b17 100644
--- a/tools/include/uapi/linux/bpf.h
+++ b/tools/include/uapi/linux/bpf.h
@@ -7029,6 +7029,10 @@ enum {
* dev layer when SK_BPF_CB_TX_TIMESTAMPING
* feature is on.
*/
+ BPF_SOCK_OPS_TS_SW_OPT_CB, /* Called when skb is about to send
+ * to the nic when SK_BPF_CB_TX_TIMESTAMPING
+ * feature is on.
+ */
};
/* List of TCP states. There is a build check in net/ipv4/tcp.c to detect
--
2.43.5
next prev parent reply other threads:[~2025-02-04 18:31 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-04 18:30 [PATCH bpf-next v8 00/12] net-timestamp: bpf extension to equip applications transparently Jason Xing
2025-02-04 18:30 ` [PATCH bpf-next v8 01/12] bpf: add support for bpf_setsockopt() Jason Xing
2025-02-05 15:22 ` Willem de Bruijn
2025-02-05 15:34 ` Jason Xing
2025-02-05 20:57 ` Martin KaFai Lau
2025-02-05 21:25 ` Willem de Bruijn
2025-02-04 18:30 ` [PATCH bpf-next v8 02/12] bpf: prepare for timestamping callbacks use Jason Xing
2025-02-04 18:30 ` [PATCH bpf-next v8 03/12] bpf: stop unsafely accessing TCP fields in bpf callbacks Jason Xing
2025-02-05 15:24 ` Willem de Bruijn
2025-02-05 15:35 ` Jason Xing
2025-02-04 18:30 ` [PATCH bpf-next v8 04/12] bpf: stop calling some sock_op BPF CALLs in new timestamping callbacks Jason Xing
2025-02-05 15:26 ` Willem de Bruijn
2025-02-05 15:50 ` Jason Xing
2025-02-04 18:30 ` [PATCH bpf-next v8 05/12] net-timestamp: prepare for isolating two modes of SO_TIMESTAMPING Jason Xing
2025-02-05 1:47 ` Jakub Kicinski
2025-02-05 2:40 ` Jason Xing
2025-02-05 3:14 ` Jakub Kicinski
2025-02-05 3:23 ` Jason Xing
2025-02-05 1:50 ` Jakub Kicinski
2025-02-05 15:34 ` Willem de Bruijn
2025-02-05 15:52 ` Jason Xing
2025-02-06 8:43 ` Jason Xing
2025-02-06 10:22 ` Jason Xing
2025-02-06 16:13 ` Willem de Bruijn
2025-02-07 0:22 ` Jason Xing
2025-02-04 18:30 ` [PATCH bpf-next v8 06/12] bpf: support SCM_TSTAMP_SCHED " Jason Xing
2025-02-05 15:36 ` Willem de Bruijn
2025-02-05 15:55 ` Jason Xing
2025-02-04 18:30 ` Jason Xing [this message]
2025-02-04 18:30 ` [PATCH bpf-next v8 08/12] bpf: support hw SCM_TSTAMP_SND " Jason Xing
2025-02-05 15:45 ` Willem de Bruijn
2025-02-05 16:03 ` Jason Xing
2025-02-10 22:39 ` Martin KaFai Lau
2025-02-11 0:00 ` Jason Xing
2025-02-04 18:30 ` [PATCH bpf-next v8 09/12] bpf: support SCM_TSTAMP_ACK " Jason Xing
2025-02-05 15:47 ` Willem de Bruijn
2025-02-05 16:06 ` Jason Xing
2025-02-05 21:25 ` Willem de Bruijn
2025-02-04 18:30 ` [PATCH bpf-next v8 10/12] bpf: make TCP tx timestamp bpf extension work Jason Xing
2025-02-05 1:57 ` Jakub Kicinski
2025-02-05 2:15 ` Jason Xing
2025-02-05 21:57 ` Martin KaFai Lau
2025-02-06 0:12 ` Jason Xing
2025-02-06 0:42 ` Jason Xing
2025-02-06 0:47 ` Martin KaFai Lau
2025-02-06 1:05 ` Jason Xing
2025-02-06 2:39 ` Jason Xing
2025-02-06 2:56 ` Willem de Bruijn
2025-02-06 3:09 ` Jason Xing
2025-02-06 3:25 ` Willem de Bruijn
2025-02-06 3:41 ` Jason Xing
2025-02-06 6:12 ` Martin KaFai Lau
2025-02-06 6:56 ` Jason Xing
2025-02-07 2:07 ` Martin KaFai Lau
2025-02-07 2:18 ` Jason Xing
2025-02-07 12:07 ` Jason Xing
2025-02-08 2:11 ` Martin KaFai Lau
2025-02-08 6:53 ` Jason Xing
2025-02-07 13:34 ` Jason Xing
2025-02-04 18:30 ` [PATCH bpf-next v8 11/12] bpf: add a new callback in tcp_tx_timestamp() Jason Xing
2025-02-05 5:28 ` Jason Xing
2025-02-04 18:30 ` [PATCH bpf-next v8 12/12] selftests/bpf: add simple bpf tests in the tx path for timestamping feature Jason Xing
2025-02-05 15:54 ` Willem de Bruijn
2025-02-05 16:08 ` Jason Xing
2025-02-06 1:28 ` Martin KaFai Lau
2025-02-06 2:14 ` 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=20250204183024.87508-8-kerneljasonxing@gmail.com \
--to=kerneljasonxing@gmail.com \
--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=horms@kernel.org \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=kpsingh@kernel.org \
--cc=kuba@kernel.org \
--cc=martin.lau@linux.dev \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.