X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=datapath%2Flinux%2Fcompat%2Fip_tunnels_core.c;h=d650be2909f25d21e28d2a282d9f844be2bd3157;hb=e2f3178f0582eda302bdc5629189b6a56d9fbcdd;hp=03c47a22fc8256c74fffd432dfa3b401d4a4f6e2;hpb=5ebaf571f9a3531d06eb52b62ac237ab7292f7b0;p=sliver-openvswitch.git diff --git a/datapath/linux/compat/ip_tunnels_core.c b/datapath/linux/compat/ip_tunnels_core.c index 03c47a22f..d650be290 100644 --- a/datapath/linux/compat/ip_tunnels_core.c +++ b/datapath/linux/compat/ip_tunnels_core.c @@ -16,6 +16,9 @@ * 02110-1301, USA */ +#include +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,12,0) + #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt #include @@ -31,14 +34,13 @@ #include #include -#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) + __u8 tos, __u8 ttl, __be16 df, bool xnet) { int pkt_len = skb->len; struct iphdr *iph; @@ -46,7 +48,7 @@ int iptunnel_xmit(struct net *net, struct rtable *rt, nf_reset(skb); secpath_reset(skb); - skb_clear_rxhash(skb); + skb_clear_hash(skb); skb_dst_drop(skb); skb_dst_set(skb, &rt_dst(rt)); #if 0 @@ -68,9 +70,7 @@ int iptunnel_xmit(struct net *net, struct rtable *rt, 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))) @@ -102,15 +102,14 @@ int iptunnel_pull_header(struct sk_buff *skb, int hdr_len, __be16 inner_proto) skb->protocol = inner_proto; } - if (unlikely(compute_ip_summed(skb, false))) - return -EPROTO; - nf_reset(skb); secpath_reset(skb); - skb_clear_rxhash(skb); + skb_clear_hash(skb); skb_dst_drop(skb); vlan_set_tci(skb, 0); skb_set_queue_mapping(skb, 0); skb->pkt_type = PACKET_HOST; return 0; } + +#endif /* 3.12 */