mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 01:04:41 +01:00
net/ipv6: Drop HBH for BIG TCP on RX side
Complementary to the previous commit, stop inserting HBH when building BIG TCP GRO SKBs. 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-4-alice.kernel@fastmail.im Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
741d069aa4
commit
81be30c1f5
2 changed files with 1 additions and 29 deletions
|
|
@ -115,8 +115,6 @@ int skb_gro_receive(struct sk_buff *p, struct sk_buff *skb)
|
|||
|
||||
if (unlikely(p->len + len >= GRO_LEGACY_MAX_SIZE)) {
|
||||
if (NAPI_GRO_CB(skb)->proto != IPPROTO_TCP ||
|
||||
(p->protocol == htons(ETH_P_IPV6) &&
|
||||
skb_headroom(p) < sizeof(struct hop_jumbo_hdr)) ||
|
||||
p->encapsulation)
|
||||
return -E2BIG;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -336,40 +336,14 @@ INDIRECT_CALLABLE_SCOPE int ipv6_gro_complete(struct sk_buff *skb, int nhoff)
|
|||
const struct net_offload *ops;
|
||||
struct ipv6hdr *iph;
|
||||
int err = -ENOSYS;
|
||||
u32 payload_len;
|
||||
|
||||
if (skb->encapsulation) {
|
||||
skb_set_inner_protocol(skb, cpu_to_be16(ETH_P_IPV6));
|
||||
skb_set_inner_network_header(skb, nhoff);
|
||||
}
|
||||
|
||||
payload_len = skb->len - nhoff - sizeof(*iph);
|
||||
if (unlikely(payload_len > IPV6_MAXPLEN)) {
|
||||
struct hop_jumbo_hdr *hop_jumbo;
|
||||
int hoplen = sizeof(*hop_jumbo);
|
||||
|
||||
/* Move network header left */
|
||||
memmove(skb_mac_header(skb) - hoplen, skb_mac_header(skb),
|
||||
skb->transport_header - skb->mac_header);
|
||||
skb->data -= hoplen;
|
||||
skb->len += hoplen;
|
||||
skb->mac_header -= hoplen;
|
||||
skb->network_header -= hoplen;
|
||||
iph = (struct ipv6hdr *)(skb->data + nhoff);
|
||||
hop_jumbo = (struct hop_jumbo_hdr *)(iph + 1);
|
||||
|
||||
/* Build hop-by-hop options */
|
||||
hop_jumbo->nexthdr = iph->nexthdr;
|
||||
hop_jumbo->hdrlen = 0;
|
||||
hop_jumbo->tlv_type = IPV6_TLV_JUMBO;
|
||||
hop_jumbo->tlv_len = 4;
|
||||
hop_jumbo->jumbo_payload_len = htonl(payload_len + hoplen);
|
||||
|
||||
iph->nexthdr = NEXTHDR_HOP;
|
||||
}
|
||||
|
||||
iph = (struct ipv6hdr *)(skb->data + nhoff);
|
||||
ipv6_set_payload_len(iph, payload_len);
|
||||
ipv6_set_payload_len(iph, skb->len - nhoff - sizeof(*iph));
|
||||
|
||||
nhoff += sizeof(*iph) + ipv6_exthdrs_len(iph, &ops);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue