On Wed, Apr 19, 2017 at 09:40:49PM -0400, David Miller wrote: > From: Andy Gospodarek <andy@xxxxxxxxxxxxx> > Date: Wed, 19 Apr 2017 10:29:03 -0400 > > > So I tried a variety of things and the simplest change on top of yours that > > works well for xdp1, xdp2, and xdp_tx_iptunnel. > > > > diff --git a/net/core/dev.c b/net/core/dev.c > > index b3d3a6e..1bab3dc 100644 > > --- a/net/core/dev.c > > +++ b/net/core/dev.c > > @@ -4316,11 +4316,11 @@ static u32 netif_receive_generic_xdp(struct sk_buff *skb, > > > > off = xdp.data - orig_data; > > if (off) > > - __skb_push(skb, off); > > + __skb_push(skb, -off); > > We have to handle both pushing and popping headers, so could you > please test the snippet I asked you to try? > I will tomorrow or by Monday of next week. I'm also going to hack^W write a quick test app to exercise it as well. > > if (off > 0) > > __skb_pull(skb, off); > > else if (off < 0) > > __skb_push(skb, -off); > > Thanks.