net/mlx5e: Offload TC e-switch rules with egress LAG device
authorRabie Loulou <rabiel@mellanox.com>
Wed, 6 Jun 2018 13:27:08 +0000 (16:27 +0300)
committerSaeed Mahameed <saeedm@mellanox.com>
Fri, 14 Dec 2018 21:28:53 +0000 (13:28 -0800)
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 <rabiel@mellanox.com>
Signed-off-by: Aviv Heller <avivh@mellanox.com>
Reviewed-by: Roi Dayan <roid@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c

index 779ca3a43bec7e5f29e7b435ba9d665efdade771..cede77fd208f83d99acc41f18698d21b42f27267 100644 (file)
@@ -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;