From: Jason Xing <kernelxing@xxxxxxxxxxx> For now, there are three phases where we are not able to fetch the right seqno from the skops->skb_data, because: 1) in __dev_queue_xmit(), the skb->data doesn't point to the start offset in tcp header. 2) in tcp_ack_tstamp(), the skb doesn't have the tcp header. In the long run, we may add other trace points for bpf extension. And the shinfo->tskey is always the same value for both bpf and non-bpf cases. With that said, let's directly use shinfo->tskey for TCP protocol. Signed-off-by: Jason Xing <kernelxing@xxxxxxxxxxx> --- net/core/skbuff.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 7c59ef501c74..2e13643f791c 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -5544,7 +5544,7 @@ static void __skb_tstamp_tx_bpf(struct sock *sk, struct sk_buff *skb, int tstype) { struct timespec64 tstamp; - u32 args[2] = {0, 0}; + u32 args[3] = {0, 0, 0}; int op; if (!sk) @@ -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; + + bpf_skops_tx_timestamping(sk, skb, op, 3, args); } static void skb_tstamp_tx_output(struct sk_buff *orig_skb, -- 2.37.3