Commit b5de82f3 authored by Petr Machata's avatar Petr Machata Committed by David S. Miller

mlxsw: spectrum_span: Change LAG lower selection

When offloading mirror-to-gretap, mlxsw needs to preroute the path that
the encapsulated packet will take. That path may include a LAG device
above a front panel port. So far, mlxsw resolved the path to the first
up front panel slave of the LAG interface, but that only reflects
administrative state of the port. It neglects to consider whether the
port actually has a carrier, and what the LACP state is.

So instead of checking upness of the device, check carrier state and
txability.
Signed-off-by: default avatarPetr Machata <petrm@mellanox.com>
Reviewed-by: default avatarJiri Pirko <jiri@mellanox.com>
Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent eeed992b
...@@ -36,6 +36,7 @@ ...@@ -36,6 +36,7 @@
#include <linux/list.h> #include <linux/list.h>
#include <net/arp.h> #include <net/arp.h>
#include <net/gre.h> #include <net/gre.h>
#include <net/lag.h>
#include <net/ndisc.h> #include <net/ndisc.h>
#include <net/ip6_tunnel.h> #include <net/ip6_tunnel.h>
...@@ -254,7 +255,9 @@ mlxsw_sp_span_entry_lag(struct net_device *lag_dev) ...@@ -254,7 +255,9 @@ mlxsw_sp_span_entry_lag(struct net_device *lag_dev)
struct list_head *iter; struct list_head *iter;
netdev_for_each_lower_dev(lag_dev, dev, iter) netdev_for_each_lower_dev(lag_dev, dev, iter)
if ((dev->flags & IFF_UP) && mlxsw_sp_port_dev_check(dev)) if (netif_carrier_ok(dev) &&
net_lag_port_dev_txable(dev) &&
mlxsw_sp_port_dev_check(dev))
return dev; return dev;
return NULL; return NULL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment