Skip to content

Commit

Permalink
bgpd: bestpath failure when you have a singlepath not in holddown
Browse files Browse the repository at this point in the history
When you have multiple paths to a particular route and a single
path changes.  In addition of the other paths are either in
hold down or not established or really just not selected you
could end up with a situation where the bestpath choosen
was a path that was in hold down.

Modify the code such that when there is nothing worse
in bestpath selection for the choosen path, but were
unable to do any sorting, just put the path on the top
of the list and declare it the winner.  Else just
do the original and put it at the end.

Signed-off-by: Chirag Shah <[email protected]>
Signed-off-by: Donald Sharp <[email protected]>
  • Loading branch information
donaldsharp committed Oct 25, 2024
1 parent 3f446ec commit c3eebcc
Showing 1 changed file with 15 additions and 7 deletions.
22 changes: 15 additions & 7 deletions bgpd/bgp_route.c
Original file line number Diff line number Diff line change
Expand Up @@ -3198,15 +3198,23 @@ void bgp_best_selection(struct bgp *bgp, struct bgp_dest *dest,
struct bgp_path_info *end =
bgp_dest_get_bgp_path_info(dest);

for (; end && end->next != NULL; end = end->next)
;
if (end && any_comparisons) {
for (; end && end->next != NULL; end = end->next)
;

if (end)
end->next = first;
else
if (end)
end->next = first;
else
bgp_dest_set_bgp_path_info(dest, first);
first->prev = end;
first->next = NULL;
} else {
bgp_dest_set_bgp_path_info(dest, first);
first->prev = end;
first->next = NULL;
if (end)
end->prev = first;
first->next = end;
first->prev = NULL;
}

dest->reason = first->reason;
} else {
Expand Down

0 comments on commit c3eebcc

Please sign in to comment.