Commit a41851be authored by Fengyuan Gong's avatar Fengyuan Gong Committed by Jakub Kicinski
Browse files

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: default avatarFengyuan Gong <gfengyuan@google.com>
Reviewed-by: default avatarWillem de Bruijn <willemb@google.com>
Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
Acked-by: default avatarToke Høiland-Jørgensen <toke@redhat.com>
Link: https://patch.msgid.link/20250702160741.1204919-1-gfengyuan@google.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 7725a35e
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -4026,7 +4026,10 @@ static void qdisc_pkt_len_init(struct sk_buff *skb)
		unsigned int hdr_len;

		/* mac layer + network layer */
		if (!skb->encapsulation)
			hdr_len = skb_transport_offset(skb);
		else
			hdr_len = skb_inner_transport_offset(skb);

		/* + transport layer */
		if (likely(shinfo->gso_type & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6))) {
+4 −1
Original line number Diff line number Diff line
@@ -1407,7 +1407,10 @@ static u32 cake_overhead(struct cake_sched_data *q, const struct sk_buff *skb)
		return cake_calc_overhead(q, len, off);

	/* borrowed from qdisc_pkt_len_init() */
	if (!skb->encapsulation)
		hdr_len = skb_transport_offset(skb);
	else
		hdr_len = skb_inner_transport_offset(skb);

	/* + transport layer */
	if (likely(shinfo->gso_type & (SKB_GSO_TCPV4 |