mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-14 10:37:29 +00:00
lib: Add tail check before nexthop insertion
Add a tail check to see if we can just put the nexthop at the end of the already sorted list before iteration. Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
This commit is contained in:
parent
604321440e
commit
8c15fa95a8
@ -60,6 +60,16 @@ nexthop_group_cmd_compare(const struct nexthop_group_cmd *nhgc1,
|
|||||||
return strcmp(nhgc1->name, nhgc2->name);
|
return strcmp(nhgc1->name, nhgc2->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct nexthop *nexthop_group_tail(const struct nexthop_group *nhg)
|
||||||
|
{
|
||||||
|
struct nexthop *nexthop = nhg->nexthop;
|
||||||
|
|
||||||
|
while (nexthop && nexthop->next)
|
||||||
|
nexthop = nexthop->next;
|
||||||
|
|
||||||
|
return nexthop;
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t nexthop_group_nexthop_num(const struct nexthop_group *nhg)
|
uint8_t nexthop_group_nexthop_num(const struct nexthop_group *nhg)
|
||||||
{
|
{
|
||||||
struct nexthop *nhop;
|
struct nexthop *nhop;
|
||||||
@ -129,7 +139,20 @@ void _nexthop_add(struct nexthop **target, struct nexthop *nexthop)
|
|||||||
void _nexthop_group_add_sorted(struct nexthop_group *nhg,
|
void _nexthop_group_add_sorted(struct nexthop_group *nhg,
|
||||||
struct nexthop *nexthop)
|
struct nexthop *nexthop)
|
||||||
{
|
{
|
||||||
struct nexthop *position, *prev;
|
struct nexthop *position, *prev, *tail;
|
||||||
|
|
||||||
|
/* Try to just append to the end first
|
||||||
|
* This trust it is already sorted
|
||||||
|
*/
|
||||||
|
|
||||||
|
tail = nexthop_group_tail(nhg);
|
||||||
|
|
||||||
|
if (tail && (nexthop_cmp(tail, nexthop) < 0)) {
|
||||||
|
tail->next = nexthop;
|
||||||
|
nexthop->prev = tail;
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
for (position = nhg->nexthop, prev = NULL; position;
|
for (position = nhg->nexthop, prev = NULL; position;
|
||||||
prev = position, position = position->next) {
|
prev = position, position = position->next) {
|
||||||
|
Loading…
Reference in New Issue
Block a user