mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-02 11:44:49 +00:00
Merge pull request #3477 from donaldsharp/multipath_respect
zebra: Allow zebra to only mark up to multipath_num nexthops as ACTIVE
This commit is contained in:
commit
f4aaa03907
@ -1584,7 +1584,7 @@ static int netlink_route_multipath(int cmd, struct zebra_dplane_ctx *ctx)
|
||||
}
|
||||
|
||||
/* Singlepath case. */
|
||||
if (nexthop_num == 1 || multipath_num == 1) {
|
||||
if (nexthop_num == 1) {
|
||||
nexthop_num = 0;
|
||||
for (ALL_NEXTHOPS_PTR(dplane_ctx_get_ng(ctx), nexthop)) {
|
||||
/*
|
||||
@ -1676,9 +1676,6 @@ static int netlink_route_multipath(int cmd, struct zebra_dplane_ctx *ctx)
|
||||
|
||||
nexthop_num = 0;
|
||||
for (ALL_NEXTHOPS_PTR(dplane_ctx_get_ng(ctx), nexthop)) {
|
||||
if (nexthop_num >= multipath_num)
|
||||
break;
|
||||
|
||||
if (CHECK_FLAG(nexthop->flags,
|
||||
NEXTHOP_FLAG_RECURSIVE)) {
|
||||
/* This only works for IPv4 now */
|
||||
@ -1876,12 +1873,6 @@ enum zebra_dplane_result kernel_route_update(struct zebra_dplane_ctx *ctx)
|
||||
|
||||
if (CHECK_FLAG(nexthop->flags, NEXTHOP_FLAG_ACTIVE)) {
|
||||
SET_FLAG(nexthop->flags, NEXTHOP_FLAG_FIB);
|
||||
|
||||
/* If we're only allowed a single nh, don't
|
||||
* continue.
|
||||
*/
|
||||
if (multipath_num == 1)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2698,7 +2689,7 @@ int netlink_mpls_multipath(int cmd, zebra_lsp_t *lsp)
|
||||
/* Fill nexthops (paths) based on single-path or multipath. The paths
|
||||
* chosen depend on the operation.
|
||||
*/
|
||||
if (nexthop_num == 1 || multipath_num == 1) {
|
||||
if (nexthop_num == 1) {
|
||||
routedesc = "single-path";
|
||||
_netlink_mpls_debug(cmd, lsp->ile.in_label, routedesc);
|
||||
|
||||
@ -2745,9 +2736,6 @@ int netlink_mpls_multipath(int cmd, zebra_lsp_t *lsp)
|
||||
if (!nexthop)
|
||||
continue;
|
||||
|
||||
if (nexthop_num >= multipath_num)
|
||||
break;
|
||||
|
||||
if ((cmd == RTM_NEWROUTE
|
||||
&& (CHECK_FLAG(nhlfe->flags, NHLFE_FLAG_SELECTED)
|
||||
&& CHECK_FLAG(nexthop->flags,
|
||||
|
@ -971,7 +971,18 @@ static int nexthop_active_update(struct route_node *rn, struct route_entry *re,
|
||||
prev_src = nexthop->rmap_src;
|
||||
prev_active = CHECK_FLAG(nexthop->flags, NEXTHOP_FLAG_ACTIVE);
|
||||
prev_index = nexthop->ifindex;
|
||||
if ((new_active = nexthop_active_check(rn, re, nexthop, set)))
|
||||
/*
|
||||
* We need to respect the multipath_num here
|
||||
* as that what we should be able to install from
|
||||
* a multipath perpsective should not be a data plane
|
||||
* decision point.
|
||||
*/
|
||||
new_active = nexthop_active_check(rn, re, nexthop, set);
|
||||
if (new_active && re->nexthop_active_num >= multipath_num) {
|
||||
UNSET_FLAG(nexthop->flags, NEXTHOP_FLAG_ACTIVE);
|
||||
new_active = 0;
|
||||
}
|
||||
if (new_active)
|
||||
re->nexthop_active_num++;
|
||||
/* Don't allow src setting on IPv6 addr for now */
|
||||
if (prev_active != new_active || prev_index != nexthop->ifindex
|
||||
|
Loading…
Reference in New Issue
Block a user