diff options
author | Lennert Buytenhek <buytenh@wantstofly.org> | 2008-10-07 13:45:02 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-10-08 17:19:56 -0700 |
commit | cf85d08fdf4548ee46657ccfb7f9949a85145db5 (patch) | |
tree | 583e251b0d772c23ca931a207e9ac0995d679f44 /net/dsa/slave.c | |
parent | 91da11f870f00a3322b81c73042291d7f0be5a17 (diff) | |
download | linux-cf85d08fdf4548ee46657ccfb7f9949a85145db5.tar.gz linux-cf85d08fdf4548ee46657ccfb7f9949a85145db5.tar.bz2 linux-cf85d08fdf4548ee46657ccfb7f9949a85145db5.zip |
dsa: add support for original DSA tagging format
Most of the DSA switches currently in the field do not support the
Ethertype DSA tagging format that one of the previous patches added
support for, but only the original DSA tagging format.
The original DSA tagging format carries the same information as the
Ethertype DSA tagging format, but with the difference that it does not
have an ethertype field. In other words, when receiving a packet that
is tagged with an original DSA tag, there is no way of telling in
eth_type_trans() that this packet is in fact a DSA-tagged packet.
This patch adds a hook into eth_type_trans() which is only compiled in
if support for a switch chip that doesn't support Ethertype DSA is
selected, and which checks whether there is a DSA switch driver
instance attached to this network device which uses the old tag format.
If so, it sets the protocol field to ETH_P_DSA without looking at the
packet, so that the packet ends up in the right place.
Signed-off-by: Lennert Buytenhek <buytenh@marvell.com>
Tested-by: Nicolas Pitre <nico@marvell.com>
Tested-by: Peter van Valderen <linux@ddcrew.com>
Tested-by: Dirk Teurlings <dirk@upexia.nl>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/dsa/slave.c')
-rw-r--r-- | net/dsa/slave.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/net/dsa/slave.c b/net/dsa/slave.c index 3cb331e98b89..8f8868dd4302 100644 --- a/net/dsa/slave.c +++ b/net/dsa/slave.c @@ -239,6 +239,11 @@ dsa_slave_create(struct dsa_switch *ds, struct device *parent, memcpy(slave_dev->dev_addr, master->dev_addr, ETH_ALEN); slave_dev->tx_queue_len = 0; switch (ds->tag_protocol) { +#ifdef CONFIG_NET_DSA_TAG_DSA + case htons(ETH_P_DSA): + slave_dev->hard_start_xmit = dsa_xmit; + break; +#endif #ifdef CONFIG_NET_DSA_TAG_EDSA case htons(ETH_P_EDSA): slave_dev->hard_start_xmit = edsa_xmit; |