static bool
 mlxsw_sp_nexthop6_group_has_nexthop(const struct mlxsw_sp_nexthop_group *nh_grp,
-                                   const struct in6_addr *gw, int ifindex)
+                                   const struct in6_addr *gw, int ifindex,
+                                   int weight)
 {
        int i;
 
                const struct mlxsw_sp_nexthop *nh;
 
                nh = &nh_grp->nexthops[i];
-               if (nh->ifindex == ifindex &&
+               if (nh->ifindex == ifindex && nh->nh_weight == weight &&
                    ipv6_addr_equal(gw, (struct in6_addr *) nh->gw_addr))
                        return true;
        }
 
        list_for_each_entry(mlxsw_sp_rt6, &fib6_entry->rt6_list, list) {
                struct in6_addr *gw;
-               int ifindex;
+               int ifindex, weight;
 
                ifindex = mlxsw_sp_rt6->rt->dst.dev->ifindex;
+               weight = mlxsw_sp_rt6->rt->rt6i_nh_weight;
                gw = &mlxsw_sp_rt6->rt->rt6i_gateway;
-               if (!mlxsw_sp_nexthop6_group_has_nexthop(nh_grp, gw, ifindex))
+               if (!mlxsw_sp_nexthop6_group_has_nexthop(nh_grp, gw, ifindex,
+                                                        weight))
                        return false;
        }
 
        struct net_device *dev = rt->dst.dev;
 
        nh->nh_grp = nh_grp;
-       nh->nh_weight = 1;
+       nh->nh_weight = rt->rt6i_nh_weight;
        memcpy(&nh->gw_addr, &rt->rt6i_gateway, sizeof(nh->gw_addr));
        mlxsw_sp_nexthop_counter_alloc(mlxsw_sp, nh);