Skip to content

Commit 6f29706

Browse files
lxinklassert
authored andcommitted
esp4: support ipv6 nexthdrs process for beet gso segment
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 <[email protected]> Signed-off-by: Steffen Klassert <[email protected]>
1 parent 25a44ae commit 6f29706

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

net/ipv4/esp4_offload.c

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ static struct sk_buff *xfrm4_beet_gso_segment(struct xfrm_state *x,
137137
struct xfrm_offload *xo = xfrm_offload(skb);
138138
struct sk_buff *segs = ERR_PTR(-EINVAL);
139139
const struct net_offload *ops;
140-
int proto = xo->proto;
140+
u8 proto = xo->proto;
141141

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

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

147147
skb->transport_header += ph->hdrlen * 8;
148148
proto = ph->nexthdr;
149-
} else if (x->sel.family != AF_INET6) {
149+
} else if (x->sel.family == AF_INET6) {
150+
__be16 frag;
151+
152+
skb->transport_header +=
153+
ipv6_skip_exthdr(skb, 0, &proto, &frag);
154+
if (proto == IPPROTO_TCP)
155+
skb_shinfo(skb)->gso_type |= SKB_GSO_TCPV4;
156+
} else {
150157
skb->transport_header -= IPV4_BEET_PHMAXLEN;
151-
} else if (proto == IPPROTO_TCP) {
152-
skb_shinfo(skb)->gso_type |= SKB_GSO_TCPV4;
153158
}
154159

155160
__skb_pull(skb, skb_transport_offset(skb));

0 commit comments

Comments
 (0)