mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 02:24:24 +02:00
net/ipv6: Remove HBH helpers
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>
This commit is contained in:
parent
28df1c6927
commit
35f66ce900
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user