On 31 October 2016 at 22:00, Pravin B Shelar <pshe...@ovn.org> wrote: > The compat vlan code ignores vlan tag for inner packet > on egress path. Following patch fixes this by inserting the > tag for inner packet before tunnel encapsulation. > > Signed-off-by: Pravin B Shelar <pshe...@ovn.org>
Is this a problem upstream and for other tunnels too? > --- > datapath/linux/compat/geneve.c | 26 ++++++++++++++++++++++++-- > 1 file changed, 24 insertions(+), 2 deletions(-) > > diff --git a/datapath/linux/compat/geneve.c b/datapath/linux/compat/geneve.c > index 7f2b192..6cce5ca 100644 > --- a/datapath/linux/compat/geneve.c > +++ b/datapath/linux/compat/geneve.c > @@ -750,11 +750,22 @@ static int geneve_build_skb(struct rtable *rt, struct > sk_buff *skb, > skb_scrub_packet(skb, xnet); > > min_headroom = LL_RESERVED_SPACE(rt->dst.dev) + rt->dst.header_len > - + GENEVE_BASE_HLEN + opt_len + sizeof(struct iphdr); > + + GENEVE_BASE_HLEN + opt_len + sizeof(struct iphdr) > + + (skb_vlan_tag_present(skb) ? VLAN_HLEN : 0); > + > err = skb_cow_head(skb, min_headroom); > if (unlikely(err)) > goto free_rt; > > + if (skb_vlan_tag_present(skb)) { > + err = __vlan_insert_tag(skb, skb->vlan_proto, > + skb_vlan_tag_get(skb)); Does the proto need to be set? I see that the equivalent vxlan code upstream uses vlan_hwaccel_push_inside() instead. > + > + if (unlikely(err)) > + goto free_rt; > + skb->vlan_tci = 0; > + } > + > err = udp_tunnel_handle_offloads(skb, udp_sum); > if (err) > goto free_rt; > @@ -783,11 +794,22 @@ static int geneve6_build_skb(struct dst_entry *dst, > struct sk_buff *skb, > skb_scrub_packet(skb, xnet); > > min_headroom = LL_RESERVED_SPACE(dst->dev) + dst->header_len > - + GENEVE_BASE_HLEN + opt_len + sizeof(struct ipv6hdr); > + + GENEVE_BASE_HLEN + opt_len + sizeof(struct ipv6hdr) > + + (skb_vlan_tag_present(skb) ? VLAN_HLEN : 0); > + > err = skb_cow_head(skb, min_headroom); > if (unlikely(err)) > goto free_dst; > > + if (skb_vlan_tag_present(skb)) { > + err = __vlan_insert_tag(skb, skb->vlan_proto, > + skb_vlan_tag_get(skb)); > + > + if (unlikely(err)) > + goto free_dst; > + skb->vlan_tci = 0; > + } > + > err = udp_tunnel_handle_offloads(skb, udp_sum); > if (err) > goto free_dst; > -- > 2.5.5 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev