The sja1105 is a bit of a special snowflake, in that not all frames are
transmitted/received in the same way. L2 link-local frames are received
with the source port/switch ID information put in the destination MAC
address. For the rest, a tag_8021q header is used. So only the latter
frames displace the rest of the headers and need to use the generic flow
dissector procedure.
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
                                              is_meta);
 }
 
+static void sja1105_flow_dissect(const struct sk_buff *skb, __be16 *proto,
+                                int *offset)
+{
+       /* No tag added for management frames, all ok */
+       if (unlikely(sja1105_is_link_local(skb)))
+               return;
+
+       dsa_tag_generic_flow_dissect(skb, proto, offset);
+}
+
 static const struct dsa_device_ops sja1105_netdev_ops = {
        .name = "sja1105",
        .proto = DSA_TAG_PROTO_SJA1105,
        .rcv = sja1105_rcv,
        .filter = sja1105_filter,
        .overhead = VLAN_HLEN,
+       .flow_dissect = sja1105_flow_dissect,
        .promisc_on_master = true,
 };