Skip to content

Commit

Permalink
esp4: support ipv6 nexthdrs process for beet gso segment
Browse files Browse the repository at this point in the history
For beet mode, when it's ipv6 inner address with nexthdrs set,
the packet format might be:

    ----------------------------------------------------
    | outer  |     | dest |     |      |  ESP    | ESP |
    | IP hdr | ESP | opts.| TCP | Data | Trailer | ICV |
    ----------------------------------------------------

Before doing gso segment in xfrm4_beet_gso_segment(), the same
thing is needed as it does in xfrm6_beet_gso_segment() in last
patch 'esp6: support ipv6 nexthdrs process for beet gso segment'.

v1->v2:
  - remove skb_transport_offset(), as it will always return 0
    in xfrm6_beet_gso_segment(), thank Sabrina's check.

Fixes: 384a46e ("esp4: add gso_segment for esp4 beet mode")
Signed-off-by: Xin Long <lucien.xin@gmail.com>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
  • Loading branch information
Xin Long authored and Steffen Klassert committed Apr 21, 2020
1 parent 25a44ae commit 6f29706
Showing 1 changed file with 9 additions and 4 deletions.
13 changes: 9 additions & 4 deletions net/ipv4/esp4_offload.c
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ static struct sk_buff *xfrm4_beet_gso_segment(struct xfrm_state *x,
struct xfrm_offload *xo = xfrm_offload(skb);
struct sk_buff *segs = ERR_PTR(-EINVAL);
const struct net_offload *ops;
int proto = xo->proto;
u8 proto = xo->proto;

skb->transport_header += x->props.header_len;

Expand All @@ -146,10 +146,15 @@ static struct sk_buff *xfrm4_beet_gso_segment(struct xfrm_state *x,

skb->transport_header += ph->hdrlen * 8;
proto = ph->nexthdr;
} else if (x->sel.family != AF_INET6) {
} else if (x->sel.family == AF_INET6) {
__be16 frag;

skb->transport_header +=
ipv6_skip_exthdr(skb, 0, &proto, &frag);
if (proto == IPPROTO_TCP)
skb_shinfo(skb)->gso_type |= SKB_GSO_TCPV4;
} else {
skb->transport_header -= IPV4_BEET_PHMAXLEN;
} else if (proto == IPPROTO_TCP) {
skb_shinfo(skb)->gso_type |= SKB_GSO_TCPV4;
}

__skb_pull(skb, skb_transport_offset(skb));
Expand Down

0 comments on commit 6f29706

Please sign in to comment.