|
@@ -47,8 +47,10 @@ static int xfrm4_beet_output(struct xfrm_state *x, struct sk_buff *skb)
|
|
|
if (unlikely(optlen))
|
|
|
hdrlen += IPV4_BEET_PHMAXLEN - (optlen & 4);
|
|
|
|
|
|
- skb_set_network_header(skb, IPV4_BEET_PHMAXLEN - x->props.header_len -
|
|
|
- hdrlen);
|
|
|
+ skb_set_network_header(skb, -x->props.header_len -
|
|
|
+ hdrlen + (XFRM_MODE_SKB_CB(skb)->ihl - sizeof(*top_iph)));
|
|
|
+ if (x->sel.family != AF_INET6)
|
|
|
+ skb->network_header += IPV4_BEET_PHMAXLEN;
|
|
|
skb->mac_header = skb->network_header +
|
|
|
offsetof(struct iphdr, protocol);
|
|
|
skb->transport_header = skb->network_header + sizeof(*top_iph);
|