On Wed, Feb 5, 2025 at 11:36 PM Willem de Bruijn <willemdebruijn.kernel@xxxxxxxxx> wrote: > > Jason Xing wrote: > > Introducing SKBTX_BPF is used as an indicator telling us whether > > the skb should be traced by the bpf prog. > > Should this say support the SCM_TSTAMP_SCHED case? Will do it. > > Also: imperative mood: Introduce instead of Introducing. Oh, sorry, I have to take an English lesson :S Apparently I didn't know the difference :( Will adjust accordingly. > > > > Signed-off-by: Jason Xing <kerneljasonxing@xxxxxxxxx> > > --- > > include/linux/skbuff.h | 6 +++++- > > include/uapi/linux/bpf.h | 4 ++++ > > net/core/dev.c | 3 ++- > > net/core/skbuff.c | 20 ++++++++++++++++++++ > > tools/include/uapi/linux/bpf.h | 4 ++++ > > 5 files changed, 35 insertions(+), 2 deletions(-) > > > > diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h > > index dfc419281cc9..35c2e864dd4b 100644 > > --- a/include/linux/skbuff.h > > +++ b/include/linux/skbuff.h > > @@ -490,10 +490,14 @@ enum { > > > > /* generate software time stamp when entering packet scheduling */ > > SKBTX_SCHED_TSTAMP = 1 << 6, > > + > > + /* used for bpf extension when a bpf program is loaded */ > > + SKBTX_BPF = 1 << 7, > > }; > > > > #define SKBTX_ANY_SW_TSTAMP (SKBTX_SW_TSTAMP | \ > > - SKBTX_SCHED_TSTAMP) > > + SKBTX_SCHED_TSTAMP | \ > > + SKBTX_BPF) > > #define SKBTX_ANY_TSTAMP (SKBTX_HW_TSTAMP | \ > > SKBTX_HW_TSTAMP_USE_CYCLES | \ > > SKBTX_ANY_SW_TSTAMP) > > diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h > > index 6116eb3d1515..30d2c078966b 100644 > > --- a/include/uapi/linux/bpf.h > > +++ b/include/uapi/linux/bpf.h > > @@ -7032,6 +7032,10 @@ 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 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/dev.c b/net/core/dev.c > > index d77b8389753e..4f291459d6b1 100644 > > --- a/net/core/dev.c > > +++ b/net/core/dev.c > > @@ -4500,7 +4500,8 @@ int __dev_queue_xmit(struct sk_buff *skb, struct net_device *sb_dev) > > skb_reset_mac_header(skb); > > skb_assert_len(skb); > > > > - if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_SCHED_TSTAMP)) > > + if (unlikely(skb_shinfo(skb)->tx_flags & > > + (SKBTX_SCHED_TSTAMP | SKBTX_BPF))) > > __skb_tstamp_tx(skb, NULL, NULL, skb->sk, true, SCM_TSTAMP_SCHED); > > > > /* Disable soft irqs for various locks below. Also > > diff --git a/net/core/skbuff.c b/net/core/skbuff.c > > index 6042961dfc02..b7261e886529 100644 > > --- a/net/core/skbuff.c > > +++ b/net/core/skbuff.c > > @@ -5564,6 +5564,21 @@ 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) > > +{ > > + int op; > > + > > + switch (tstype) { > > + case SCM_TSTAMP_SCHED: > > + op = BPF_SOCK_OPS_TS_SCHED_OPT_CB; > > + break; > > + default: > > + return; > > + } > > + > > + bpf_skops_tx_timestamping(sk, skb, op); > > +} > > + > > void __skb_tstamp_tx(struct sk_buff *orig_skb, > > const struct sk_buff *ack_skb, > > struct skb_shared_hwtstamps *hwtstamps, > > @@ -5576,6 +5591,11 @@ void __skb_tstamp_tx(struct sk_buff *orig_skb, > > if (!sk) > > return; > > > > + /* bpf extension feature entry */ > > + if (skb_shinfo(orig_skb)->tx_flags & SKBTX_BPF) > > + skb_tstamp_tx_bpf(orig_skb, sk, tstype); > > + > > + /* application feature entry */ > > if (!skb_enable_app_tstamp(orig_skb, tstype, sw)) > > return; > > > > diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h > > index 70366f74ef4e..eed91b7296b7 100644 > > --- a/tools/include/uapi/linux/bpf.h > > +++ b/tools/include/uapi/linux/bpf.h > > @@ -7025,6 +7025,10 @@ 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 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 > > > >