On Tue, Nov 1, 2016 at 10:30 AM, Joe Stringer <j...@ovn.org> wrote: > 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? > upstream does not has this issue since networking stack would handle vlan tag for geneve device.
>> --- >> 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. > We can use vlan_hwaccel_push_inside(), but it frees the skb, thats why I prefer __vlan_insert_tag(). It allows us to write simple error handling code. _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev