From: Rabie Loulou <rab...@mellanox.com>

When parsing TC FDB actions, if the egress device is a bond/team
net-device which enslaved the uplink representor of the e-switch,
use the uplink representor as the destination in the HW rule.

Signed-off-by: Rabie Loulou <rab...@mellanox.com>
Signed-off-by: Aviv Heller <av...@mellanox.com>
Reviewed-by: Roi Dayan <r...@mellanox.com>
Signed-off-by: Saeed Mahameed <sae...@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c 
b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
index 779ca3a43bec..cede77fd208f 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
@@ -2574,6 +2574,15 @@ static int parse_tc_fdb_actions(struct mlx5e_priv *priv, 
struct tcf_exts *exts,
                        if (switchdev_port_same_parent_id(priv->netdev,
                                                          out_dev) ||
                            is_merged_eswitch_dev(priv, out_dev)) {
+                               struct mlx5_eswitch *esw = 
priv->mdev->priv.eswitch;
+                               struct net_device *uplink_dev = 
mlx5_eswitch_uplink_get_proto_dev(esw, REP_ETH);
+                               struct net_device *uplink_upper = 
netdev_master_upper_dev_get(uplink_dev);
+
+                               if (uplink_upper &&
+                                   netif_is_lag_master(uplink_upper) &&
+                                   uplink_upper == out_dev)
+                                       out_dev = uplink_dev;
+
                                out_priv = netdev_priv(out_dev);
                                rpriv = out_priv->ppriv;
                                attr->dests[attr->out_count].rep = rpriv->rep;
-- 
2.19.2

Reply via email to