]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net/ipv6: Remove HBH helpers
authorAlice Mikityanska <alice@isovalent.com>
Thu, 5 Feb 2026 13:39:25 +0000 (15:39 +0200)
committerJakub Kicinski <kuba@kernel.org>
Sat, 7 Feb 2026 04:50:13 +0000 (20:50 -0800)
Now that the HBH jumbo helpers are not used by any driver or GSO, remove
them altogether.

Signed-off-by: Alice Mikityanska <alice@isovalent.com>
Acked-by: Paolo Abeni <pabeni@redhat.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/20260205133925.526371-13-alice.kernel@fastmail.im
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
include/net/ipv6.h

index 1c2d6095b050c4e7bbc5c748c148b1f779b0c2b3..cc56e09525d03b8e12dd92cec2751c2a13f16c10 100644 (file)
@@ -149,17 +149,6 @@ struct frag_hdr {
        __be32  identification;
 };
 
-/*
- * Jumbo payload option, as described in RFC 2675 2.
- */
-struct hop_jumbo_hdr {
-       u8      nexthdr;
-       u8      hdrlen;
-       u8      tlv_type;       /* IPV6_TLV_JUMBO, 0xC2 */
-       u8      tlv_len;        /* 4 */
-       __be32  jumbo_payload_len;
-};
-
 #define        IP6_MF          0x0001
 #define        IP6_OFFSET      0xFFF8
 
@@ -462,72 +451,6 @@ bool ipv6_opt_accepted(const struct sock *sk, const struct sk_buff *skb,
 struct ipv6_txoptions *ipv6_update_options(struct sock *sk,
                                           struct ipv6_txoptions *opt);
 
-/* This helper is specialized for BIG TCP needs.
- * It assumes the hop_jumbo_hdr will immediately follow the IPV6 header.
- * It assumes headers are already in skb->head.
- * Returns: 0, or IPPROTO_TCP if a BIG TCP packet is there.
- */
-static inline int ipv6_has_hopopt_jumbo(const struct sk_buff *skb)
-{
-       const struct hop_jumbo_hdr *jhdr;
-       const struct ipv6hdr *nhdr;
-
-       if (likely(skb->len <= GRO_LEGACY_MAX_SIZE))
-               return 0;
-
-       if (skb->protocol != htons(ETH_P_IPV6))
-               return 0;
-
-       if (skb_network_offset(skb) +
-           sizeof(struct ipv6hdr) +
-           sizeof(struct hop_jumbo_hdr) > skb_headlen(skb))
-               return 0;
-
-       nhdr = ipv6_hdr(skb);
-
-       if (nhdr->nexthdr != NEXTHDR_HOP)
-               return 0;
-
-       jhdr = (const struct hop_jumbo_hdr *) (nhdr + 1);
-       if (jhdr->tlv_type != IPV6_TLV_JUMBO || jhdr->hdrlen != 0 ||
-           jhdr->nexthdr != IPPROTO_TCP)
-               return 0;
-       return jhdr->nexthdr;
-}
-
-/* Return 0 if HBH header is successfully removed
- * Or if HBH removal is unnecessary (packet is not big TCP)
- * Return error to indicate dropping the packet
- */
-static inline int ipv6_hopopt_jumbo_remove(struct sk_buff *skb)
-{
-       const int hophdr_len = sizeof(struct hop_jumbo_hdr);
-       int nexthdr = ipv6_has_hopopt_jumbo(skb);
-       struct ipv6hdr *h6;
-
-       if (!nexthdr)
-               return 0;
-
-       if (skb_cow_head(skb, 0))
-               return -1;
-
-       /* Remove the HBH header.
-        * Layout: [Ethernet header][IPv6 header][HBH][L4 Header]
-        */
-       memmove(skb_mac_header(skb) + hophdr_len, skb_mac_header(skb),
-               skb_network_header(skb) - skb_mac_header(skb) +
-               sizeof(struct ipv6hdr));
-
-       __skb_pull(skb, hophdr_len);
-       skb->network_header += hophdr_len;
-       skb->mac_header += hophdr_len;
-
-       h6 = ipv6_hdr(skb);
-       h6->nexthdr = nexthdr;
-
-       return 0;
-}
-
 static inline bool ipv6_accept_ra(const struct inet6_dev *idev)
 {
        s32 accept_ra = READ_ONCE(idev->cnf.accept_ra);