aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorFlorian Fainelli <f.fainelli@gmail.com>2014-08-27 17:04:52 -0700
committerDavid S. Miller <davem@davemloft.net>2014-08-27 22:59:40 -0700
commit5aed85cec29882d1c4b4b2a01cb75a99efdbe4ed (patch)
treec2a68a4275a8aefb66c4d1e359d76704c6894817 /include
parentnet: dsa: allow for more complex PHY setups (diff)
downloadlinux-dev-5aed85cec29882d1c4b4b2a01cb75a99efdbe4ed.tar.xz
linux-dev-5aed85cec29882d1c4b4b2a01cb75a99efdbe4ed.zip
net: dsa: allow switches to work without tagging
In case switch port tagging is disabled (voluntarily, or the switch just does not support it), allow us to continue using the defined set of dsa_device_ops in net/dsa/slave.c. We introduce dsa_protocol_is_tagged() to check whether we need to override skb->protocol and go through the DSA-specifif packet_type function, or if we just go on and receive the SKB through the normal path. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r--include/linux/netdevice.h6
-rw-r--r--include/net/dsa.h5
2 files changed, 8 insertions, 3 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 1875dc71422a..429801370d0c 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -1784,10 +1784,10 @@ void dev_net_set(struct net_device *dev, struct net *net)
static inline bool netdev_uses_dsa(struct net_device *dev)
{
#ifdef CONFIG_NET_DSA
- return dev->dsa_ptr != NULL;
-#else
- return false;
+ if (dev->dsa_ptr != NULL)
+ return dsa_uses_tagged_protocol(dev->dsa_ptr);
#endif
+ return false;
}
/**
diff --git a/include/net/dsa.h b/include/net/dsa.h
index dc357454ae3b..1035f6452d79 100644
--- a/include/net/dsa.h
+++ b/include/net/dsa.h
@@ -198,4 +198,9 @@ static inline void *ds_to_priv(struct dsa_switch *ds)
return (void *)(ds + 1);
}
+static inline bool dsa_uses_tagged_protocol(struct dsa_switch_tree *dst)
+{
+ return dst->tag_protocol != 0;
+}
+
#endif