On Mon, 18 Jul 2016 13:50:27 +0900, Simon Horman wrote: > On Fri, Jul 15, 2016 at 02:07:37PM -0700, pravin shelar wrote: > > I think we should send L2 header with l2 header pushed on skb. This is > > what OVS expect. The skb-push should be done for all l2 packets rather > > than for particular type of device. > > The following seems to achieve that. > Jiri, what do you think? > > diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c > index a20248355da0..edbc10690b60 100644 > --- a/net/ipv4/ip_gre.c > +++ b/net/ipv4/ip_gre.c > @@ -281,10 +281,9 @@ static int __ipgre_rcv(struct sk_buff *skb, const struct > tnl_ptk_info *tpi, > raw_proto, false) < 0) > goto drop; > > - if (tunnel->dev->type != ARPHRD_NONE) > + if (tunnel->dev->type != ARPHRD_NONE || > + tpi->proto == htons(ETH_P_TEB)) > skb_pop_mac_header(skb);
This is wrong. The MAC header for ARPHRD_NONE interfaces is null, that's the meaning of ARPHRD_NONE. mac_header cannot point to the outer IP header. That would be ARPHRD_IPGRE. Jiri