• Vladimir Oltean's avatar
    net: dsa: automatically bring user ports down when master goes down · c0a8a9c2
    Vladimir Oltean authored
    This is not fixing any actual bug that I know of, but having a DSA
    interface that is up even when its lower (master) interface is down is
    one of those things that just do not sound right.
    
    Yes, DSA checks if the master is up before actually bringing the
    user interface up, but nobody prevents bringing the master interface
    down immediately afterwards... Then the user ports would attempt
    dev_queue_xmit on an interface that is down, and wonder what's wrong.
    
    This patch prevents that from happening. NETDEV_GOING_DOWN is the
    notification emitted _before_ the master actually goes down, and we are
    protected by the rtnl_mutex, so all is well.
    
    For those of you reading this because you were doing switch testing
    such as latency measurements for autonomously forwarded traffic, and you
    needed a controlled environment with no extra packets sent by the
    network stack, this patch breaks that, because now the user ports go
    down too, which may shut down the PHY etc. But please don't do it like
    that, just do instead:
    
    tc qdisc add dev eno2 clsact
    tc filter add dev eno2 egress flower action drop
    
    Tested with two cascaded DSA switches:
    $ ip link set eno2 down
    sja1105 spi2.0 sw0p2: Link is Down
    mscc_felix 0000:00:00.5 swp0: Link is Down
    fsl_enetc 0000:00:00.2 eno2: Link is Down
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
    Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    c0a8a9c2
slave.c 57.6 KB