skb->inner_protocol is used by GSO and TSO for tunnels on new
kernels. Since we are setting up packets to be handled by the
kernel's GSO and not just our own, we need to initialize this
field properly.
Signed-off-by: Jesse Gross <jesse@nicira.com>
Acked-by: Thomas Graf <tgraf@noironetworks.com>
Acked-by: Pravin B Shelar <pshelar@nicira.com>
skb->len, 0));
}
}
+
+ ovs_skb_set_inner_protocol(skb, tpi->proto);
}
#endif /* CONFIG_NET_IPGRE_DEMUX */
/* checking for inner protocol should be sufficient on newer kernel, but
* old kernel just set encapsulation bit.
*/
- /* XXX: set inner protocol for all tunnel in OVS. */
return ovs_skb_get_inner_protocol(skb) || skb_encapsulation(skb);
}
if (IS_ERR(skb))
return PTR_ERR(skb);
+ ovs_skb_set_inner_protocol(skb, htons(ETH_P_TEB));
+
return iptunnel_xmit(vs->sock->sk, rt, skb, src, dst, IPPROTO_UDP,
tos, ttl, df, xnet);
}
skb->ignore_df = 1;
+ ovs_skb_set_inner_protocol(skb, skb->protocol);
+
df = tun_key->tun_flags & TUNNEL_DONT_FRAGMENT ? htons(IP_DF) : 0;
sent_len = iptunnel_xmit(skb->sk, rt, skb,
saddr, tun_key->ipv4_dst,