Thread (12 messages) 12 messages, 2 authors, 2026-05-28

Re: [PATCH net-next v2 3/6] bpf: support bpf_setsockopt for bpf timestamping rx feature

From: Kuniyuki Iwashima <kuniyu@google.com>
Date: 2026-05-23 04:02:49
Also in: bpf

On Thu, May 21, 2026 at 6:53 AM Jason Xing [off-list ref] wrote:
quoted hunk ↗ jump to hunk
From: Jason Xing <kernelxing@tencent.com>

Add SK_BPF_CB_RX_TIMESTAMPING callback flag to enable RX timestamping
via bpf_setsockopt(SK_BPF_CB_FLAGS).

Add SOCK_BPF_TIMESTAMPING_RX into enum sock_flags that is used as
centralized management of net_enable/disable_timestamp. Note that only
one of them (timestamp, so_timestamping and bpf timestamping rx) can
enable and disable the global time record of skbs.

In addition, include SOCK_BPF_TIMESTAMPING_RX in SK_FLAGS_TIMESTAMP so
that __sk_destruct() calling sock_disable_timestamp() to thoroughly turn
off the global time record.

Signed-off-by: Jason Xing <kernelxing@tencent.com>
---
 include/net/sock.h       | 5 ++++-
 include/uapi/linux/bpf.h | 5 +++--
 net/core/filter.c        | 8 ++++++++
 3 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/include/net/sock.h b/include/net/sock.h
index a579d5b09207..cf0e82e46482 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -1022,9 +1022,12 @@ enum sock_flags {
        SOCK_RCVMARK, /* Receive SO_MARK  ancillary data with packet */
        SOCK_RCVPRIORITY, /* Receive SO_PRIORITY ancillary data with packet */
        SOCK_TIMESTAMPING_ANY, /* Copy of sk_tsflags & TSFLAGS_ANY */
+       SOCK_BPF_TIMESTAMPING_RX, /* BPF RX timestamping enabled */
Just a note, this will be the last bit on 32bit kernel.

quoted hunk ↗ jump to hunk
 };

-#define SK_FLAGS_TIMESTAMP ((1UL << SOCK_TIMESTAMP) | (1UL << SOCK_TIMESTAMPING_RX_SOFTWARE))
+#define SK_FLAGS_TIMESTAMP ((1UL << SOCK_TIMESTAMP) | \
+                           (1UL << SOCK_TIMESTAMPING_RX_SOFTWARE) | \
+                           (1UL << SOCK_BPF_TIMESTAMPING_RX))
 /*
  * The highest bit of sk_tsflags is reserved for kernel-internal
  * SOCKCM_FLAG_TS_OPT_ID. There is a check in core/sock.c to control that
diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h
index 552bc5d9afbd..1e09b5cd7a39 100644
--- a/include/uapi/linux/bpf.h
+++ b/include/uapi/linux/bpf.h
@@ -7029,8 +7029,9 @@ enum {

 enum {
        SK_BPF_CB_TX_TIMESTAMPING       = 1<<0,
-       SK_BPF_CB_MASK                  = (SK_BPF_CB_TX_TIMESTAMPING - 1) |
-                                          SK_BPF_CB_TX_TIMESTAMPING
+       SK_BPF_CB_RX_TIMESTAMPING       = 1<<1,
+       SK_BPF_CB_MASK                  = (SK_BPF_CB_RX_TIMESTAMPING - 1) |
+                                          SK_BPF_CB_RX_TIMESTAMPING
 };

 /* List of known BPF sock_ops operators.
diff --git a/net/core/filter.c b/net/core/filter.c
index 9590877b0714..08ad102f204e 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -5304,6 +5304,14 @@ static int sk_bpf_set_get_cb_flags(struct sock *sk, char *optval, bool getopt)
        if (sk_bpf_cb_flags & ~SK_BPF_CB_MASK)
                return -EINVAL;

+       if ((sk_bpf_cb_flags ^ sk->sk_bpf_cb_flags) & SK_BPF_CB_RX_TIMESTAMPING) {
+               if (sk_bpf_cb_flags & SK_BPF_CB_RX_TIMESTAMPING)
+                       sock_enable_timestamp(sk, SOCK_BPF_TIMESTAMPING_RX);
+               else
+                       sock_disable_timestamp(sk,
+                                              (1UL << SOCK_BPF_TIMESTAMPING_RX));
+       }
+
        sk->sk_bpf_cb_flags = sk_bpf_cb_flags;

        return 0;
--
2.43.7
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help