Revert "net: dsa: Allow drivers to filter packets they can decode source port from"
authorVladimir Oltean <vladimir.oltean@nxp.com>
Mon, 26 Jul 2021 16:55:36 +0000 (19:55 +0300)
committerDavid S. Miller <davem@davemloft.net>
Mon, 26 Jul 2021 21:35:22 +0000 (22:35 +0100)
This reverts commit cc1939e4b3aaf534fb2f3706820012036825731c.

Currently 2 classes of DSA drivers are able to send/receive packets
directly through the DSA master:
- drivers with DSA_TAG_PROTO_NONE
- sja1105

Now that sja1105 has gained the ability to perform traffic termination
even under the tricky case (VLAN-aware bridge), and that is much more
functional (we can perform VLAN-aware bridging with foreign interfaces),
there is no reason to keep this code in the receive path of the network
core. So delete it.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/dsa.h
net/dsa/port.c
net/ethernet/eth.c

index f8eb2dc..55fcac8 100644 (file)
@@ -88,11 +88,6 @@ struct dsa_device_ops {
                               struct packet_type *pt);
        void (*flow_dissect)(const struct sk_buff *skb, __be16 *proto,
                             int *offset);
-       /* Used to determine which traffic should match the DSA filter in
-        * eth_type_trans, and which, if any, should bypass it and be processed
-        * as regular on the master net device.
-        */
-       bool (*filter)(const struct sk_buff *skb, struct net_device *dev);
        unsigned int needed_headroom;
        unsigned int needed_tailroom;
        const char *name;
@@ -246,7 +241,6 @@ struct dsa_port {
        struct dsa_switch_tree *dst;
        struct sk_buff *(*rcv)(struct sk_buff *skb, struct net_device *dev,
                               struct packet_type *pt);
-       bool (*filter)(const struct sk_buff *skb, struct net_device *dev);
 
        enum {
                DSA_PORT_TYPE_UNUSED = 0,
@@ -985,15 +979,6 @@ static inline bool netdev_uses_dsa(const struct net_device *dev)
        return false;
 }
 
-static inline bool dsa_can_decode(const struct sk_buff *skb,
-                                 struct net_device *dev)
-{
-#if IS_ENABLED(CONFIG_NET_DSA)
-       return !dev->dsa_ptr->filter || dev->dsa_ptr->filter(skb, dev);
-#endif
-       return false;
-}
-
 /* All DSA tags that push the EtherType to the right (basically all except tail
  * tags, which don't break dissection) can be treated the same from the
  * perspective of the flow dissector.
index 7b9bf45..b927d94 100644 (file)
@@ -888,7 +888,6 @@ int dsa_port_mrp_del_ring_role(const struct dsa_port *dp,
 void dsa_port_set_tag_protocol(struct dsa_port *cpu_dp,
                               const struct dsa_device_ops *tag_ops)
 {
-       cpu_dp->filter = tag_ops->filter;
        cpu_dp->rcv = tag_ops->rcv;
        cpu_dp->tag_ops = tag_ops;
 }
index 9cce612..171ba75 100644 (file)
@@ -182,12 +182,8 @@ __be16 eth_type_trans(struct sk_buff *skb, struct net_device *dev)
         * at all, so we check here whether one of those tagging
         * variants has been configured on the receiving interface,
         * and if so, set skb->protocol without looking at the packet.
-        * The DSA tagging protocol may be able to decode some but not all
-        * traffic (for example only for management). In that case give it the
-        * option to filter the packets from which it can decode source port
-        * information.
         */
-       if (unlikely(netdev_uses_dsa(dev)) && dsa_can_decode(skb, dev))
+       if (unlikely(netdev_uses_dsa(dev)))
                return htons(ETH_P_XDSA);
 
        if (likely(eth_proto_is_802_3(eth->h_proto)))