> Actually we do not, because netdev_uses_dsa() returns true only when > dst->rcv is different from NULL. When dst->rcv is NULL we completely > bypass the DSA hook in eth_type_trans() and everything is well, the > master network device is the one receiving packets.
static inline bool netdev_uses_dsa(struct net_device *dev) { #if IS_ENABLED(CONFIG_NET_DSA) if (dev->dsa_ptr != NULL) return dsa_uses_tagged_protocol(dev->dsa_ptr); #endif return false; } and static inline bool dsa_uses_tagged_protocol(struct dsa_switch_tree *dst) { return dst->rcv != NULL; } Yep, i just needed to dig further... Thanks Andrew