Mon, Aug 15, 2016 at 05:51:38PM CEST, had...@dev.mellanox.co.il wrote: >On Mon, Aug 15, 2016 at 5:38 AM, Toshiaki Makita ><toshiaki.maki...@gmail.com> wrote: >> On 16/08/14 (日) 23:58, Hadar Hen Zion wrote: >>> >>> On Fri, Aug 12, 2016 at 9:36 AM, Toshiaki Makita >>> <makita.toshi...@lab.ntt.co.jp> wrote: >>>> >>>> On 2016/08/10 22:32, Hadar Hen Zion wrote: >>>>> >>>>> Early in the datapath skb_vlan_untag function is called, stripped >>>>> the vlan from the skb and set skb->vlan_tci and skb->vlan_proto fields. >>>>> >>>>> The current dissection doesn't handle vlan packets correctly. Vlan >>>>> doesn't exist in skb->data anymore when applying flow dissection on the >>>>> skb, fix that. >>>> >>>> >>>> RPS (and flow-dissector called in RPS) is performed before vlan-strip in >>>> __netif_receive_skb_core(). >>> >>> >>> right, I'll fix it to v2. >>> >>>> Also, in cases skb is tagged with multiple vlan headers (typical when >>>> using 802.1ad), the second level vlan tag is in skb->data. >>> >>> >>> Currently, flow_dissector doesn't support multiple vlan headers, only >>> one vlan_id field is present. >>> There aren't any flow_dissector "customers" yet for multiple vlan support. >> >> >> Sure, no need to store second level vlan tag information for now. >> The point is that current flow-dissector correctly skips any number of vlan >> tags and get hash value from IP/TCP/UDP headers, so RPS works for multiple >> vlan tagged packets. >> >> Thanks, >> Toshiaki Makita > >ok, so we are on the same page. >The flow dissector will correctly skip any number of vlans regardless >if the first vlan is stripped or not.
On RX the first vlan is always stripped either by hw or by skb_vlan_untag. On TX the first vlan is also stripped as validate_xmit_skb_list which pushes vlan header is called just before dev_hard_start_xmit. So I believe you can safely work just with skb->vlan_*