On Tue, Nov 1, 2016 at 11:06 AM, Joe Stringer <j...@ovn.org> wrote:
> On 1 November 2016 at 10:48, Pravin Shelar <pshe...@ovn.org> wrote:
>> 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.
>
> Bear with me, but why does upstream vxlan do something like this but
> upstream geneve doesn't?
>
Because Geneve device does not expose VLAN offload features. Btw I
have patch to handle this discrepancy between geneve and vxlan.

>>>> ---
>>>>  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.
>
> OK, so skb->proto doesn't need to be set to the vlan proto?

OIC, you meant skb->protocol, Yes I need to set it.
__vlan_insert_tag() does not do it for us.
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to