On Sat, Dec 14, 2024 at 7:55 AM Martin KaFai Lau <martin.lau@xxxxxxxxx> wrote: > > On 12/13/24 7:44 AM, Jason Xing wrote: > >>> @@ -5569,7 +5569,10 @@ static void __skb_tstamp_tx_bpf(struct sock *sk, struct sk_buff *skb, > >>> return; > >>> } > >>> > >>> - bpf_skops_tx_timestamping(sk, skb, op, 2, args); > >>> + if (sk_is_tcp(sk)) > >>> + args[2] = skb_shinfo(skb)->tskey; > >> Instead of only passing one info "skb_shinfo(skb)->tskey" of a skb, pass the > >> whole skb ptr to the bpf prog. Take a look at bpf_skops_init_skb. Lets start > >> with end_offset = 0 for now so that the bpf prog won't use it to read the > >> skb->data. It can be revisited later. > >> > >> bpf_skops_init_skb(&sock_ops, skb, 0); > >> > >> The bpf prog can use bpf_cast_to_kern_ctx() and bpf_core_cast() to get to the > >> skb_shinfo(skb). Take a look at the md_skb example in type_cast.c. > > Sorry, I didn't give it much thought on getting to the shinfo. That's > > why I quickly gave up using bpf_skops_init_skb() after I noticed the > > seq of skb is always zero 🙁 > > > > I will test it tomorrow. Thanks. > > > >> Then it needs to add a bpf_sock->op check to the existing > >> bpf_sock_ops_{load,store}_hdr_opt() helpers to ensure these helpers can only be > >> used by the BPF_SOCK_OPS_PARSE_HDR_OPT_CB, BPF_SOCK_OPS_HDR_OPT_LEN_CB, and > >> BPF_SOCK_OPS_WRITE_HDR_OPT_CB callback. > > Forgive me. I cannot see how the bpf_sock_ops_load_hdr_opt helper has > > something to do with the current thread? Could you enlighten me? > > Sure. This is the same discussion as in patch 2, so may be worth to highlight > something that I guess may be missing: > > a bpf prog does not need to use a helper does not mean: > a bpf prog is not allowed to call a helper because it is not safe. > > The sockops prog running at the new timestamp hook does not need to call > bpf_setsockopt() but it does not mean the bpf prog is not allowed to call > bpf_setsockopt() without holding the sk_lock which is then broken. > > The sockops timestamp prog does not need to use the > bpf_sock_ops_{load,store}_hdr_opt but it does not mean the bpf prog is not > allowed to call bpf_sock_ops_{load,store}_hdr_opt to change the skb which is > then also broken. Ah, I see. Thanks for your explanation :) > > Now, skops->skb is not NULL only when the sockops prog is allowed to read/write > the skb. > > With bpf_skops_init_skb(), skops->skb will not be NULL in the new timestamp > callback hook. bpf_sock_ops_{load,store}_hdr_opt() will be able to use the > skops->skb and it will be broken. I will take care of it along the way. > > > > >> btw, how is the ack_skb used for the SCM_TSTAMP_ACK by the user space now? > > To be honest, I hardly use the ack_skb[1] under this circumstance... I > > think if someone offers a suggestion to use it, then we can support > > it? > > Thanks for the pointer. > > Yep, supporting it later is fine. I am curious because the ack_skb is used in > the user space time stamping now but not in your patch. I was asking to ensure > that we should be able to support it in the future if there is a need. We > should be able to reuse the skops->syn_skb to support that in the future. Agreed. I feel that I can handle this part after this series. > > > > > [1] > > commit e7ed11ee945438b737e2ae2370e35591e16ec371 > > Author: Yousuk Seung<ysseung@xxxxxxxxxx> > > Date: Wed Jan 20 12:41:55 2021 -0800 > > > > tcp: add TTL to SCM_TIMESTAMPING_OPT_STATS > > > > This patch adds TCP_NLA_TTL to SCM_TIMESTAMPING_OPT_STATS that exports > > the time-to-live or hop limit of the latest incoming packet with > > SCM_TSTAMP_ACK. The value exported may not be from the packet that acks > > the sequence when incoming packets are aggregated. Exporting the > > time-to-live or hop limit value of incoming packets helps to estimate > > the hop count of the path of the flow that may change over time. > >