mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-15 15:17:15 +00:00
The path ordering has an impact on whether paths are flagged as multipath, this should not be the case.
This commit is contained in:
parent
43143c8f2c
commit
f4eeff72d5
@ -1996,8 +1996,6 @@ bgp_best_selection (struct bgp *bgp, struct bgp_node *rn,
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
new_select = ri1;
|
new_select = ri1;
|
||||||
if (do_mpath)
|
|
||||||
bgp_mp_list_add (&mp_list, ri1);
|
|
||||||
old_select = CHECK_FLAG (ri1->flags, BGP_INFO_SELECTED) ? ri1 : NULL;
|
old_select = CHECK_FLAG (ri1->flags, BGP_INFO_SELECTED) ? ri1 : NULL;
|
||||||
if (ri1->next)
|
if (ri1->next)
|
||||||
for (ri2 = ri1->next; ri2; ri2 = ri2->next)
|
for (ri2 = ri1->next; ri2; ri2 = ri2->next)
|
||||||
@ -2023,24 +2021,13 @@ bgp_best_selection (struct bgp *bgp, struct bgp_node *rn,
|
|||||||
{
|
{
|
||||||
bgp_info_unset_flag (rn, new_select, BGP_INFO_DMED_SELECTED);
|
bgp_info_unset_flag (rn, new_select, BGP_INFO_DMED_SELECTED);
|
||||||
new_select = ri2;
|
new_select = ri2;
|
||||||
if (do_mpath && !paths_eq)
|
|
||||||
{
|
|
||||||
bgp_mp_list_clear (&mp_list);
|
|
||||||
bgp_mp_list_add (&mp_list, ri2);
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (do_mpath && paths_eq)
|
|
||||||
bgp_mp_list_add (&mp_list, ri2);
|
|
||||||
|
|
||||||
bgp_info_set_flag (rn, ri2, BGP_INFO_DMED_CHECK);
|
bgp_info_set_flag (rn, ri2, BGP_INFO_DMED_CHECK);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bgp_info_set_flag (rn, new_select, BGP_INFO_DMED_CHECK);
|
bgp_info_set_flag (rn, new_select, BGP_INFO_DMED_CHECK);
|
||||||
bgp_info_set_flag (rn, new_select, BGP_INFO_DMED_SELECTED);
|
bgp_info_set_flag (rn, new_select, BGP_INFO_DMED_SELECTED);
|
||||||
|
|
||||||
bgp_info_mpath_update (rn, new_select, old_select, &mp_list, mpath_cfg);
|
|
||||||
bgp_mp_list_clear (&mp_list);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check old selected route and new selected route. */
|
/* Check old selected route and new selected route. */
|
||||||
@ -2080,25 +2067,45 @@ bgp_best_selection (struct bgp *bgp, struct bgp_node *rn,
|
|||||||
|
|
||||||
if (bgp_info_cmp (bgp, ri, new_select, &paths_eq, mpath_cfg))
|
if (bgp_info_cmp (bgp, ri, new_select, &paths_eq, mpath_cfg))
|
||||||
{
|
{
|
||||||
if (do_mpath && bgp_flag_check (bgp, BGP_FLAG_DETERMINISTIC_MED))
|
|
||||||
bgp_mp_dmed_deselect (new_select);
|
|
||||||
|
|
||||||
new_select = ri;
|
new_select = ri;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (do_mpath && !paths_eq)
|
/* Now that we know which path is the bestpath see if any of the other paths
|
||||||
|
* qualify as multipaths
|
||||||
|
*/
|
||||||
|
if (do_mpath && new_select)
|
||||||
|
{
|
||||||
|
for (ri = rn->info; (ri != NULL) && (nextri = ri->next, 1); ri = nextri)
|
||||||
|
{
|
||||||
|
if (ri == new_select)
|
||||||
|
{
|
||||||
|
bgp_mp_list_add (&mp_list, ri);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (BGP_INFO_HOLDDOWN (ri))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (ri->peer &&
|
||||||
|
ri->peer != bgp->peer_self &&
|
||||||
|
!CHECK_FLAG (ri->peer->sflags, PEER_STATUS_NSF_WAIT))
|
||||||
|
if (ri->peer->status != Established)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (bgp_flag_check (bgp, BGP_FLAG_DETERMINISTIC_MED)
|
||||||
|
&& (! CHECK_FLAG (ri->flags, BGP_INFO_DMED_SELECTED)))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
bgp_info_cmp (bgp, ri, new_select, &paths_eq, mpath_cfg);
|
||||||
|
|
||||||
|
if (paths_eq)
|
||||||
{
|
{
|
||||||
bgp_mp_list_clear (&mp_list);
|
|
||||||
bgp_mp_list_add (&mp_list, ri);
|
bgp_mp_list_add (&mp_list, ri);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (do_mpath && bgp_flag_check (bgp, BGP_FLAG_DETERMINISTIC_MED))
|
|
||||||
bgp_mp_dmed_deselect (ri);
|
|
||||||
|
|
||||||
if (do_mpath && paths_eq)
|
|
||||||
bgp_mp_list_add (&mp_list, ri);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!bgp_flag_check (bgp, BGP_FLAG_DETERMINISTIC_MED))
|
if (!bgp_flag_check (bgp, BGP_FLAG_DETERMINISTIC_MED))
|
||||||
bgp_info_mpath_update (rn, new_select, old_select, &mp_list, mpath_cfg);
|
bgp_info_mpath_update (rn, new_select, old_select, &mp_list, mpath_cfg);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user