forked from sonic-net/sonic-buildimage
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[FRR]BGP Fixes and optimizations for handling scale scenarios (sonic-…
…net#21199) Why I did it Added patches from FRR to support scale of BGP neighbors to 256/514. Below are the patches Patch FRR Pull request 0069-lib-nexthop-code-should-use-uint16_t-for-nexthop-cou.patch FRRouting/frr#16967 0070-Allow-16-bit-size-for-nexthops.patch FRRouting/frr#17023 0071-zebra-Only-notify-dplane-work-pthread-when-needed.patch FRRouting/frr#17062 0072-Fix-up-improper-handling-of-nexthops-for-nexthop-tra.patch FRRouting/frr#17076 0073-remove-in6addr-cmp.patch FRRouting/frr#17312 0074-bgp-best-port-reordering.patch FRRouting/frr#15572 0075-bgp-mp-info-changes.patch FRRouting/frr#16961 0076-Optimizations-and-problem-fixing-for-large-scale-ecmp-from-bgp.patch FRRouting/frr#17229
- Loading branch information
1 parent
3a5fb88
commit 99e9c3d
Showing
9 changed files
with
5,190 additions
and
0 deletions.
There are no files selected for viewing
91 changes: 91 additions & 0 deletions
91
src/sonic-frr/patch/0069-lib-nexthop-code-should-use-uint16_t-for-nexthop-cou.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
From 1102e4f6ee58d0d41596880fe3a7c82840ee679e Mon Sep 17 00:00:00 2001 | ||
From: Donald Sharp <[email protected]> | ||
Date: Tue, 1 Oct 2024 14:31:08 -0400 | ||
Subject: [PATCH] lib: nexthop code should use uint16_t for nexthop counting | ||
|
||
It's possible to specify via the cli and configure how many | ||
nexthops that are allowed on the system. If you happen to | ||
have > 255 then things are about to get interesting otherwise. | ||
|
||
Let's allow up to 65k nexthops (ha!) | ||
|
||
Signed-off-by: Donald Sharp <[email protected]> | ||
|
||
diff --git a/lib/nexthop_group.c b/lib/nexthop_group.c | ||
index 3f408e0a71..cb1ebb5d09 100644 | ||
--- a/lib/nexthop_group.c | ||
+++ b/lib/nexthop_group.c | ||
@@ -70,10 +70,10 @@ static struct nexthop *nexthop_group_tail(const struct nexthop_group *nhg) | ||
return nexthop; | ||
} | ||
|
||
-uint8_t nexthop_group_nexthop_num(const struct nexthop_group *nhg) | ||
+uint16_t nexthop_group_nexthop_num(const struct nexthop_group *nhg) | ||
{ | ||
struct nexthop *nhop; | ||
- uint8_t num = 0; | ||
+ uint16_t num = 0; | ||
|
||
for (ALL_NEXTHOPS_PTR(nhg, nhop)) | ||
num++; | ||
@@ -81,11 +81,10 @@ uint8_t nexthop_group_nexthop_num(const struct nexthop_group *nhg) | ||
return num; | ||
} | ||
|
||
-static uint8_t | ||
-nexthop_group_nexthop_num_no_recurse(const struct nexthop_group *nhg) | ||
+static uint16_t nexthop_group_nexthop_num_no_recurse(const struct nexthop_group *nhg) | ||
{ | ||
struct nexthop *nhop; | ||
- uint8_t num = 0; | ||
+ uint16_t num = 0; | ||
|
||
for (nhop = nhg->nexthop; nhop; nhop = nhop->next) | ||
num++; | ||
@@ -93,10 +92,10 @@ nexthop_group_nexthop_num_no_recurse(const struct nexthop_group *nhg) | ||
return num; | ||
} | ||
|
||
-uint8_t nexthop_group_active_nexthop_num(const struct nexthop_group *nhg) | ||
+uint16_t nexthop_group_active_nexthop_num(const struct nexthop_group *nhg) | ||
{ | ||
struct nexthop *nhop; | ||
- uint8_t num = 0; | ||
+ uint16_t num = 0; | ||
|
||
for (ALL_NEXTHOPS_PTR(nhg, nhop)) { | ||
if (CHECK_FLAG(nhop->flags, NEXTHOP_FLAG_ACTIVE)) | ||
@@ -184,11 +183,9 @@ static struct nexthop *nhg_nh_find(const struct nexthop_group *nhg, | ||
return NULL; | ||
} | ||
|
||
-static bool | ||
-nexthop_group_equal_common(const struct nexthop_group *nhg1, | ||
- const struct nexthop_group *nhg2, | ||
- uint8_t (*nexthop_group_nexthop_num_func)( | ||
- const struct nexthop_group *nhg)) | ||
+static bool nexthop_group_equal_common( | ||
+ const struct nexthop_group *nhg1, const struct nexthop_group *nhg2, | ||
+ uint16_t (*nexthop_group_nexthop_num_func)(const struct nexthop_group *nhg)) | ||
{ | ||
if (nhg1 && !nhg2) | ||
return false; | ||
diff --git a/lib/nexthop_group.h b/lib/nexthop_group.h | ||
index 822a35439c..9103299418 100644 | ||
--- a/lib/nexthop_group.h | ||
+++ b/lib/nexthop_group.h | ||
@@ -149,9 +149,8 @@ extern void nexthop_group_json_nexthop(json_object *j, | ||
const struct nexthop *nh); | ||
|
||
/* Return the number of nexthops in this nhg */ | ||
-extern uint8_t nexthop_group_nexthop_num(const struct nexthop_group *nhg); | ||
-extern uint8_t | ||
-nexthop_group_active_nexthop_num(const struct nexthop_group *nhg); | ||
+extern uint16_t nexthop_group_nexthop_num(const struct nexthop_group *nhg); | ||
+extern uint16_t nexthop_group_active_nexthop_num(const struct nexthop_group *nhg); | ||
|
||
extern bool nexthop_group_has_label(const struct nexthop_group *nhg); | ||
|
||
-- | ||
2.43.2 | ||
|
Oops, something went wrong.