Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

net: account for encap headers in qdisc pkt len

Refine qdisc_pkt_len_init to include headers up through
the inner transport header when computing header size
for encapsulations. Also refine net/sched/sch_cake.c
borrowed from qdisc_pkt_len_init().

Signed-off-by: Fengyuan Gong <gfengyuan@google.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Acked-by: Toke Høiland-Jørgensen <toke@redhat.com>
Link: https://patch.msgid.link/20250702160741.1204919-1-gfengyuan@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Fengyuan Gong and committed by
Jakub Kicinski
a41851be 7725a35e

+8 -2
+4 -1
net/core/dev.c
··· 4026 4026 unsigned int hdr_len; 4027 4027 4028 4028 /* mac layer + network layer */ 4029 - hdr_len = skb_transport_offset(skb); 4029 + if (!skb->encapsulation) 4030 + hdr_len = skb_transport_offset(skb); 4031 + else 4032 + hdr_len = skb_inner_transport_offset(skb); 4030 4033 4031 4034 /* + transport layer */ 4032 4035 if (likely(shinfo->gso_type & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6))) {
+4 -1
net/sched/sch_cake.c
··· 1407 1407 return cake_calc_overhead(q, len, off); 1408 1408 1409 1409 /* borrowed from qdisc_pkt_len_init() */ 1410 - hdr_len = skb_transport_offset(skb); 1410 + if (!skb->encapsulation) 1411 + hdr_len = skb_transport_offset(skb); 1412 + else 1413 + hdr_len = skb_inner_transport_offset(skb); 1411 1414 1412 1415 /* + transport layer */ 1413 1416 if (likely(shinfo->gso_type & (SKB_GSO_TCPV4 |