#include <net/route.h>
#include <net/xfrm.h>
-#include "checksum.h"
#include "compat.h"
#include "gso.h"
-int iptunnel_xmit(struct net *net, struct rtable *rt,
+int iptunnel_xmit(struct rtable *rt,
struct sk_buff *skb,
__be32 src, __be32 dst, __u8 proto,
__u8 tos, __u8 ttl, __be16 df)
iph->daddr = dst;
iph->saddr = src;
iph->ttl = ttl;
- tunnel_ip_select_ident(skb,
- (const struct iphdr *)skb_inner_network_header(skb),
- &rt_dst(rt));
+ __ip_select_ident(iph, &rt_dst(rt), (skb_shinfo(skb)->gso_segs ?: 1) - 1);
err = ip_local_out(skb);
if (unlikely(net_xmit_eval(err)))
skb->protocol = inner_proto;
}
- if (unlikely(compute_ip_summed(skb, false)))
- return -EPROTO;
-
nf_reset(skb);
secpath_reset(skb);
skb_clear_rxhash(skb);