There is a difference regarding how skb_tunnel_info is stored in skb between ovs and upstream kernel. In ovs's compatible gre module, skb_tunnel_info is stored in skb->cb while in upstream kernel, it is referenced by skb->_skb_refdst.
The upstream netdev code should be okay. To fix this issue, my guess is that either we comply to the kernel's way by using skb->_skb_refdst to store skb_tunnel_info, or we don't use IPCB at all. Thanks, Yifeng On Thu, Aug 9, 2018 at 10:28 AM, Gregory Rose <[email protected]> wrote: > > On 8/8/2018 6:50 PM, William Tu wrote: > >> thanks for the fix. >> >> On Wed, Aug 8, 2018 at 11:32 AM, Yifeng Sun <[email protected]> >> wrote: >> >> In compatable gre module, skb->cb is used as ovs_gso_cb. >>> This bug clears the 16-23 bit in the address of ovs_gso_cb.tun_dst. >>> >>> can you explain more about ovs_gso_cb? >> >> Signed-off-by: Yifeng Sun <[email protected]> >>> --- >>> datapath/linux/compat/ip6_gre.c | 1 - >>> 1 file changed, 1 deletion(-) >>> >>> diff --git a/datapath/linux/compat/ip6_gre.c >>> b/datapath/linux/compat/ip6_ >>> gre.c >>> index 54a76ab..16c1f72 100644 >>> --- a/datapath/linux/compat/ip6_gre.c >>> +++ b/datapath/linux/compat/ip6_gre.c >>> @@ -1146,7 +1146,6 @@ static netdev_tx_t ip6erspan_tunnel_xmit(struct >>> sk_buff *skb, >>> goto tx_err; >>> >>> t->parms.o_flags &= ~TUNNEL_KEY; >>> - IPCB(skb)->flags = 0; >>> >>> The upstream linux kernel has the above code. >> Do we need to fix the upstream kernel then backport? >> > > That would be the normal work flow. > > Yifeng, > > Can you please post a patch with this fix to netdev? Taking William's > comments into account as well. > > Good catch and thanks for the fix! > > - Greg > > >> Thanks, >> William >> _______________________________________________ >> dev mailing list >> [email protected] >> https://mail.openvswitch.org/mailman/listinfo/ovs-dev >> > > _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
