From 5d79fdffd3cd0533e3cd236beb58f2c2f1fc37a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20=C5=BBenczykowski?= Date: Mon, 2 Jun 2025 01:13:06 -0700 Subject: [PATCH] bpf/progs/offload.c: disable ipv6 offload for non-gso >pmtu MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: 263884894 Bug: 419747540 Test: TreeHugger Flag: EXEMPT mainline Signed-off-by: Maciej Żenczykowski Change-Id: Idecc355084220ea5c53924c720c806adab153b5d --- bpf/progs/offload.c | 3 +++ bpf/progs/offload.h | 1 + 2 files changed, 4 insertions(+) diff --git a/bpf/progs/offload.c b/bpf/progs/offload.c index 1c64eb679c..3937ba634d 100644 --- a/bpf/progs/offload.c +++ b/bpf/progs/offload.c @@ -178,6 +178,9 @@ static inline __always_inline int do_forward6(struct __sk_buff* skb, uint64_t packets = 1; uint64_t L3_bytes = skb->len - l2_header_size; if (L3_bytes > v->pmtu) { + if (KVER_IS_AT_LEAST(kver, 5, 4, 0)) { + if (skb->gso_segs <= 1) TC_PUNT(ABOVE_IPV6_PMTU); + } const int tcp6_overhead = sizeof(struct ipv6hdr) + sizeof(struct tcphdr) + 12; const int mss = v->pmtu - tcp6_overhead; const uint64_t payload = L3_bytes - tcp6_overhead; diff --git a/bpf/progs/offload.h b/bpf/progs/offload.h index 4d6d3e41f6..870983ec7d 100644 --- a/bpf/progs/offload.h +++ b/bpf/progs/offload.h @@ -41,6 +41,7 @@ ERR(BELOW_IPV4_MTU) \ ERR(ABOVE_IPV4_PMTU) \ ERR(BELOW_IPV6_MTU) \ + ERR(ABOVE_IPV6_PMTU) \ ERR(LIMIT_REACHED) \ ERR(CHANGE_HEAD_FAILED) \ ERR(TOO_SHORT) \