On Tue, Jan 21, 2025 at 9:29 AM Jason Xing <kerneljasonxing@xxxxxxxxx> wrote: > > Later, I would introduce four callback points to report information > to user space based on this patch. > > As to skb initialization here, people can follow these three steps > as below to fetch the shared info from the exported skb in the bpf > prog: > 1. skops_kern = bpf_cast_to_kern_ctx(skops); > 2. skb = skops_kern->skb; > 3. shinfo = bpf_core_cast(skb->head + skb->end, struct skb_shared_info); > > More details can be seen in the last selftest patch of the series. > > Signed-off-by: Jason Xing <kerneljasonxing@xxxxxxxxx> > --- > include/net/sock.h | 7 +++++++ > net/core/sock.c | 13 +++++++++++++ > 2 files changed, 20 insertions(+) > > diff --git a/include/net/sock.h b/include/net/sock.h > index 7916982343c6..6f4d54faba92 100644 > --- a/include/net/sock.h > +++ b/include/net/sock.h > @@ -2923,6 +2923,13 @@ int sock_set_timestamping(struct sock *sk, int optname, > struct so_timestamping timestamping); > > void sock_enable_timestamps(struct sock *sk); > +#if defined(CONFIG_CGROUP_BPF) > +void bpf_skops_tx_timestamping(struct sock *sk, struct sk_buff *skb, int op); > +#else > +static inline void bpf_skops_tx_timestamping(struct sock *sk, struct sk_buff *skb, int op) > +{ > +} > +#endif > void sock_no_linger(struct sock *sk); > void sock_set_keepalive(struct sock *sk); > void sock_set_priority(struct sock *sk, u32 priority); > diff --git a/net/core/sock.c b/net/core/sock.c > index eae2ae70a2e0..e165163521dc 100644 > --- a/net/core/sock.c > +++ b/net/core/sock.c > @@ -948,6 +948,19 @@ int sock_set_timestamping(struct sock *sk, int optname, > return 0; > } > Oops, I accidentally remove the following protection: #if defined(CONFIG_CGROUP_BPF) > +void bpf_skops_tx_timestamping(struct sock *sk, struct sk_buff *skb, int op) > +{ > + struct bpf_sock_ops_kern sock_ops; > + > + memset(&sock_ops, 0, offsetof(struct bpf_sock_ops_kern, temp)); > + sock_ops.op = op; > + sock_ops.is_fullsock = 1; > + sock_ops.sk = sk; > + bpf_skops_init_skb(&sock_ops, skb, 0); > + /* Timestamping bpf extension supports only TCP and UDP full socket */ > + __cgroup_bpf_run_filter_sock_ops(sk, &sock_ops, CGROUP_SOCK_OPS); > +} And here: #endif I'll add them in the next version. Thanks, Jason > + > void sock_set_keepalive(struct sock *sk) > { > lock_sock(sk); > -- > 2.43.5 >