On Fri, Aug 12, 2016 at 8:14 AM, Simon Horman
<simon.hor...@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.du...@intel.com>
> Signed-off-by: Simon Horman <simon.hor...@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.

Reply via email to