diff options
author | Petr Machata <petrm@nvidia.com> | 2021-01-28 15:49:16 +0300 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2021-01-29 07:49:51 +0300 |
commit | 720ccd9a728506ca4721b18a22a2157a9d48ed60 (patch) | |
tree | 38307a1561dc0b97aad2394ba0d18352e61f211a /net/ipv4/nexthop.c | |
parent | b9bae61be46645aa3b8b5d79d5cdfabe55ae1507 (diff) | |
download | linux-720ccd9a728506ca4721b18a22a2157a9d48ed60.tar.xz |
nexthop: Assert the invariant that a NH group is of only one type
Most of the code that deals with nexthop groups relies on the fact that the
group is of exactly one well-known type. Currently there is only one type,
"mpath", but as more next-hop group types come, it becomes desirable to
have a central place where the setting is validated. Introduce such place
into nexthop_create_group(), such that the check is done before the code
that relies on that invariant is invoked.
Signed-off-by: Petr Machata <petrm@nvidia.com>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: David Ahern <dsahern@kernel.org>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'net/ipv4/nexthop.c')
-rw-r--r-- | net/ipv4/nexthop.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/net/ipv4/nexthop.c b/net/ipv4/nexthop.c index 7a30df5aea75..c09b8231f56a 100644 --- a/net/ipv4/nexthop.c +++ b/net/ipv4/nexthop.c @@ -1466,10 +1466,13 @@ static struct nexthop *nexthop_create_group(struct net *net, nhg->nh_entries[i].nh_parent = nh; } - if (cfg->nh_grp_type == NEXTHOP_GRP_TYPE_MPATH) { + if (cfg->nh_grp_type == NEXTHOP_GRP_TYPE_MPATH) nhg->mpath = 1; + + WARN_ON_ONCE(nhg->mpath != 1); + + if (nhg->mpath) nh_group_rebalance(nhg); - } if (cfg->nh_fdb) nhg->fdb_nh = 1; |