Message ID | 1471014883-25399-1-git-send-email-simon.horman@netronome.com |
---|---|
State | Changes Requested, archived |
Delegated to: | David Miller |
Headers | show |
On Fri, Aug 12, 2016 at 8:14 AM, Simon Horman <simon.horman@netronome.com> wrote: > Ensure that the inner_protocol is set on transmit so that GSO segmentation, > which relies on that field, works correctly. > > I have observed this is not the case when OvS transmits GRE using > lwtunnel metadata (which it always does). > > Fixes: 38720352412a ("gre: Use inner_proto to obtain inner header protocol") > Acked-by: Alexander Duyck <alexander.h.duyck@intel.com> > Signed-off-by: Simon Horman <simon.horman@netronome.com> > --- > v2 > * Added Alexander's Ack > * Drop RFC designation > --- > net/ipv4/ip_gre.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c > index 5b1481be0282..1571b71448a0 100644 > --- a/net/ipv4/ip_gre.c > +++ b/net/ipv4/ip_gre.c > @@ -451,6 +451,7 @@ static void gre_fb_xmit(struct sk_buff *skb, struct net_device *dev, > > df = key->tun_flags & TUNNEL_DONT_FRAGMENT ? htons(IP_DF) : 0; > > + skb_set_inner_protocol(skb, proto); > iptunnel_xmit(skb->sk, rt, skb, fl.saddr, key->u.ipv4.dst, IPPROTO_GRE, > key->tos, key->ttl, df, false); > return; This patch is right but can you move this call to gre_build_header(). This way there would less duplicate code. Plus it is more consistent with vxlan and geneve where the inner protocol is set in respective build header functions.
diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c index 5b1481be0282..1571b71448a0 100644 --- a/net/ipv4/ip_gre.c +++ b/net/ipv4/ip_gre.c @@ -451,6 +451,7 @@ static void gre_fb_xmit(struct sk_buff *skb, struct net_device *dev, df = key->tun_flags & TUNNEL_DONT_FRAGMENT ? htons(IP_DF) : 0; + skb_set_inner_protocol(skb, proto); iptunnel_xmit(skb->sk, rt, skb, fl.saddr, key->u.ipv4.dst, IPPROTO_GRE, key->tos, key->ttl, df, false); return;