mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-17 09:43:59 +08:00
nexthop: Pass nh_config to replace_nexthop()
Currently, replace assumes that the new group that is given is a fully-formed object. But mpath groups really only have one attribute, and that is the constituent next hop configuration. This may not be universally true. From the usability perspective, it is desirable to allow the replace operation to adjust just the constituent next hop configuration and leave the group attributes as such intact. But the object that keeps track of whether an attribute was or was not given is the nh_config object, not the next hop or next-hop group. To allow (selective) attribute updates during NH group replacement, propagate `cfg' to replace_nexthop() and further to replace_nexthop_grp(). 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: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
1d5d0a0786
commit
597f48e46b
@ -1107,7 +1107,7 @@ static void nh_rt_cache_flush(struct net *net, struct nexthop *nh)
|
||||
}
|
||||
|
||||
static int replace_nexthop_grp(struct net *net, struct nexthop *old,
|
||||
struct nexthop *new,
|
||||
struct nexthop *new, const struct nh_config *cfg,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct nh_group *oldg, *newg;
|
||||
@ -1276,7 +1276,8 @@ static void nexthop_replace_notify(struct net *net, struct nexthop *nh,
|
||||
}
|
||||
|
||||
static int replace_nexthop(struct net *net, struct nexthop *old,
|
||||
struct nexthop *new, struct netlink_ext_ack *extack)
|
||||
struct nexthop *new, const struct nh_config *cfg,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
bool new_is_reject = false;
|
||||
struct nh_grp_entry *nhge;
|
||||
@ -1319,7 +1320,7 @@ static int replace_nexthop(struct net *net, struct nexthop *old,
|
||||
}
|
||||
|
||||
if (old->is_group)
|
||||
err = replace_nexthop_grp(net, old, new, extack);
|
||||
err = replace_nexthop_grp(net, old, new, cfg, extack);
|
||||
else
|
||||
err = replace_nexthop_single(net, old, new, extack);
|
||||
|
||||
@ -1361,7 +1362,7 @@ static int insert_nexthop(struct net *net, struct nexthop *new_nh,
|
||||
} else if (new_id > nh->id) {
|
||||
pp = &next->rb_right;
|
||||
} else if (replace) {
|
||||
rc = replace_nexthop(net, nh, new_nh, extack);
|
||||
rc = replace_nexthop(net, nh, new_nh, cfg, extack);
|
||||
if (!rc) {
|
||||
new_nh = nh; /* send notification with old nh */
|
||||
replace_notify = 1;
|
||||
|
Loading…
Reference in New Issue
Block a user