Similar to 28678f07f127d ("mlxsw: spectrum_router: Update multipath hash
parameters upon netevents") for IPv4, make sure the kernel and asic are
using the same hash algorithm for path selection.

Signed-off-by: David Ahern <dsah...@gmail.com>
---
 drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c 
b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
index 3071b75af6e0..d23ed0002a4a 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
@@ -2414,6 +2414,7 @@ static int mlxsw_sp_router_netevent_event(struct 
notifier_block *nb,
                mlxsw_sp_port_dev_put(mlxsw_sp_port);
                break;
        case NETEVENT_IPV4_MPATH_HASH_UPDATE:
+       case NETEVENT_IPV6_MPATH_HASH_UPDATE:
                net = ptr;
 
                if (!net_eq(net, &init_net))
@@ -7006,13 +7007,21 @@ static void mlxsw_sp_mp4_hash_init(char *recr2_pl)
 
 static void mlxsw_sp_mp6_hash_init(char *recr2_pl)
 {
+       bool only_l3 = !init_net.ipv6.sysctl.multipath_hash_policy;
+
        mlxsw_sp_mp_hash_header_set(recr2_pl,
                                    MLXSW_REG_RECR2_IPV6_EN_NOT_TCP_NOT_UDP);
        mlxsw_sp_mp_hash_header_set(recr2_pl, MLXSW_REG_RECR2_IPV6_EN_TCP_UDP);
        mlxsw_reg_recr2_ipv6_sip_enable(recr2_pl);
        mlxsw_reg_recr2_ipv6_dip_enable(recr2_pl);
-       mlxsw_sp_mp_hash_field_set(recr2_pl, MLXSW_REG_RECR2_IPV6_FLOW_LABEL);
        mlxsw_sp_mp_hash_field_set(recr2_pl, MLXSW_REG_RECR2_IPV6_NEXT_HEADER);
+       if (only_l3) {
+               mlxsw_sp_mp_hash_field_set(recr2_pl, 
MLXSW_REG_RECR2_IPV6_FLOW_LABEL);
+       } else {
+               mlxsw_sp_mp_hash_header_set(recr2_pl, 
MLXSW_REG_RECR2_TCP_UDP_EN_IPV6);
+               mlxsw_sp_mp_hash_field_set(recr2_pl, 
MLXSW_REG_RECR2_TCP_UDP_SPORT);
+               mlxsw_sp_mp_hash_field_set(recr2_pl, 
MLXSW_REG_RECR2_TCP_UDP_DPORT);
+       }
 }
 
 static int mlxsw_sp_mp_hash_init(struct mlxsw_sp *mlxsw_sp)
-- 
2.11.0

Reply via email to