mlxsw: spectrum_router: Store weight in nexthop struct
authorIdo Schimmel <idosch@mellanox.com>
Sun, 22 Oct 2017 21:11:46 +0000 (23:11 +0200)
committerDavid S. Miller <davem@davemloft.net>
Mon, 23 Oct 2017 04:23:06 +0000 (05:23 +0100)
As the first step towards non-equal-cost multi-path support, store each
nexthop's weight.

For IPv6 nexthops always set the weight to 1, as it only supports ECMP.

Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c

index cb0d25ede9c6b7453d85e959a154a9982d45839e..8cd422d7640ce0d3795fabf528c94d3e369d2106 100644 (file)
@@ -2203,6 +2203,7 @@ struct mlxsw_sp_nexthop {
        struct mlxsw_sp_nexthop_key key;
        unsigned char gw_addr[sizeof(struct in6_addr)];
        int ifindex;
+       int nh_weight;
        struct mlxsw_sp_rif *rif;
        u8 should_offload:1, /* set indicates this neigh is connected and
                              * should be put to KVD linear area of this group.
@@ -3045,6 +3046,11 @@ static int mlxsw_sp_nexthop4_init(struct mlxsw_sp *mlxsw_sp,
 
        nh->nh_grp = nh_grp;
        nh->key.fib_nh = fib_nh;
+#ifdef CONFIG_IP_ROUTE_MULTIPATH
+       nh->nh_weight = fib_nh->nh_weight;
+#else
+       nh->nh_weight = 1;
+#endif
        memcpy(&nh->gw_addr, &fib_nh->nh_gw, sizeof(fib_nh->nh_gw));
        err = mlxsw_sp_nexthop_insert(mlxsw_sp, nh);
        if (err)
@@ -4304,6 +4310,7 @@ static int mlxsw_sp_nexthop6_init(struct mlxsw_sp *mlxsw_sp,
        struct net_device *dev = rt->dst.dev;
 
        nh->nh_grp = nh_grp;
+       nh->nh_weight = 1;
        memcpy(&nh->gw_addr, &rt->rt6i_gateway, sizeof(nh->gw_addr));
        mlxsw_sp_nexthop_counter_alloc(mlxsw_sp, nh);