On Wed, Oct 9, 2024 at 2:45 AM Willem de Bruijn <willemdebruijn.kernel@xxxxxxxxx> wrote: > > Jason Xing wrote: > > From: Jason Xing <kernelxing@xxxxxxxxxxx> > > > > Implement basic codes so that we later can easily add each tx points. > > Introducing BPF_SOCK_OPS_ALL_CB_FLAGS used as a test statement can help use > > control whether to output or not. > > > > Signed-off-by: Jason Xing <kernelxing@xxxxxxxxxxx> > > --- > > include/uapi/linux/bpf.h | 5 ++++- > > net/core/skbuff.c | 18 ++++++++++++++++++ > > tools/include/uapi/linux/bpf.h | 5 ++++- > > 3 files changed, 26 insertions(+), 2 deletions(-) > > > > diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h > > index c6cd7c7aeeee..157e139ed6fc 100644 > > --- a/include/uapi/linux/bpf.h > > +++ b/include/uapi/linux/bpf.h > > @@ -6900,8 +6900,11 @@ enum { > > * options first before the BPF program does. > > */ > > BPF_SOCK_OPS_WRITE_HDR_OPT_CB_FLAG = (1<<6), > > + /* Call bpf when the kernel is generating tx timestamps. > > + */ > > + BPF_SOCK_OPS_TX_TIMESTAMPING_OPT_CB_FLAG = (1<<7), > > /* Mask of all currently supported cb flags */ > > - BPF_SOCK_OPS_ALL_CB_FLAGS = 0x7F, > > + BPF_SOCK_OPS_ALL_CB_FLAGS = 0xFF, > > }; > > > > /* List of known BPF sock_ops operators. > > diff --git a/net/core/skbuff.c b/net/core/skbuff.c > > index 74149dc4ee31..5ff1a91c1204 100644 > > --- a/net/core/skbuff.c > > +++ b/net/core/skbuff.c > > @@ -5539,6 +5539,21 @@ void skb_complete_tx_timestamp(struct sk_buff *skb, > > } > > EXPORT_SYMBOL_GPL(skb_complete_tx_timestamp); > > > > +static bool bpf_skb_tstamp_tx(struct sock *sk, u32 scm_flag, > > + struct skb_shared_hwtstamps *hwtstamps) > > +{ > > + struct tcp_sock *tp; > > + > > + if (!sk_is_tcp(sk)) > > + return false; > > + > > + tp = tcp_sk(sk); > > + if (BPF_SOCK_OPS_TEST_FLAG(tp, BPF_SOCK_OPS_TX_TIMESTAMPING_OPT_CB_FLAG)) > > + return true; > > + > > + return false; > > +} > > + > > void __skb_tstamp_tx(struct sk_buff *orig_skb, > > const struct sk_buff *ack_skb, > > struct skb_shared_hwtstamps *hwtstamps, > > @@ -5551,6 +5566,9 @@ void __skb_tstamp_tx(struct sk_buff *orig_skb, > > if (!sk) > > return; > > > > + if (bpf_skb_tstamp_tx(sk, tstype, hwtstamps)) > > + return; > > + > > Eventually, this whole feature could probably be behind a > static_branch. You want to implement another toggle to control it? But for tx path "BPF_SOCK_OPS_TEST_FLAG(tp, BPF_SOCK_OPS_TX_TIMESTAMPING_OPT_CB_FLAG)" works as a per-netns toggle. I would like to know what you exactly want to do in the next move? Thanks, Jason