Commit e6652979 authored by Vladimir Oltean's avatar Vladimir Oltean Committed by David S. Miller

net: dsa: tag_sja1105: use a custom flow dissector procedure

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: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 6b04f171
...@@ -346,6 +346,16 @@ static struct sk_buff *sja1105_rcv(struct sk_buff *skb, ...@@ -346,6 +346,16 @@ static struct sk_buff *sja1105_rcv(struct sk_buff *skb,
is_meta); 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 = { static const struct dsa_device_ops sja1105_netdev_ops = {
.name = "sja1105", .name = "sja1105",
.proto = DSA_TAG_PROTO_SJA1105, .proto = DSA_TAG_PROTO_SJA1105,
...@@ -353,6 +363,7 @@ static const struct dsa_device_ops sja1105_netdev_ops = { ...@@ -353,6 +363,7 @@ static const struct dsa_device_ops sja1105_netdev_ops = {
.rcv = sja1105_rcv, .rcv = sja1105_rcv,
.filter = sja1105_filter, .filter = sja1105_filter,
.overhead = VLAN_HLEN, .overhead = VLAN_HLEN,
.flow_dissect = sja1105_flow_dissect,
.promisc_on_master = true, .promisc_on_master = true,
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment