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: Vladimir Oltean <vladimir.oltean@nxp.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
6b04f171dc
commit
e665297983
@ -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 = {
|
|||||||
.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,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user