Skip to content

Commit

Permalink
lib, zebra: Modify nexthop_cmp to allow you to use weight or not
Browse files Browse the repository at this point in the history
Currently nexthop weight is a discriminator on whether or not
a nexthop matches.  There is a need to no use the weight as
part of this comparison function so let's add a boolean to
allow us to say use this or not.

Signed-off-by: Donald Sharp <[email protected]>
  • Loading branch information
donaldsharp committed Aug 20, 2024
1 parent d9775c6 commit 257b7be
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 16 deletions.
21 changes: 12 additions & 9 deletions lib/nexthop.c
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ static int _nexthop_source_cmp(const struct nexthop *nh1,
}

static int _nexthop_cmp_no_labels(const struct nexthop *next1,
const struct nexthop *next2)
const struct nexthop *next2, bool use_weight)
{
int ret = 0;

Expand All @@ -155,11 +155,13 @@ static int _nexthop_cmp_no_labels(const struct nexthop *next1,
if (next1->type > next2->type)
return 1;

if (next1->weight < next2->weight)
return -1;
if (use_weight) {
if (next1->weight < next2->weight)
return -1;

if (next1->weight > next2->weight)
return 1;
if (next1->weight > next2->weight)
return 1;
}

switch (next1->type) {
case NEXTHOP_TYPE_IPV4:
Expand Down Expand Up @@ -227,11 +229,12 @@ static int _nexthop_cmp_no_labels(const struct nexthop *next1,
return ret;
}

int nexthop_cmp(const struct nexthop *next1, const struct nexthop *next2)
int nexthop_cmp(const struct nexthop *next1, const struct nexthop *next2,
bool use_weight)
{
int ret = 0;

ret = _nexthop_cmp_no_labels(next1, next2);
ret = _nexthop_cmp_no_labels(next1, next2, use_weight);
if (ret != 0)
return ret;

Expand Down Expand Up @@ -423,7 +426,7 @@ bool nexthop_same(const struct nexthop *nh1, const struct nexthop *nh2)
if (nh1 == nh2)
return true;

if (nexthop_cmp(nh1, nh2) != 0)
if (nexthop_cmp(nh1, nh2, true) != 0)
return false;

return true;
Expand All @@ -441,7 +444,7 @@ bool nexthop_same_no_labels(const struct nexthop *nh1,
if (nh1 == nh2)
return true;

if (_nexthop_cmp_no_labels(nh1, nh2) != 0)
if (_nexthop_cmp_no_labels(nh1, nh2, true) != 0)
return false;

return true;
Expand Down
3 changes: 2 additions & 1 deletion lib/nexthop.h
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,8 @@ uint32_t nexthop_hash_quick(const struct nexthop *nexthop);
extern bool nexthop_same(const struct nexthop *nh1, const struct nexthop *nh2);
extern bool nexthop_same_no_labels(const struct nexthop *nh1,
const struct nexthop *nh2);
extern int nexthop_cmp(const struct nexthop *nh1, const struct nexthop *nh2);
extern int nexthop_cmp(const struct nexthop *nh1, const struct nexthop *nh2,
bool use_weight);
extern int nexthop_g_addr_cmp(enum nexthop_types_t type,
const union g_addr *addr1,
const union g_addr *addr2);
Expand Down
6 changes: 3 additions & 3 deletions lib/nexthop_group.c
Original file line number Diff line number Diff line change
Expand Up @@ -301,7 +301,7 @@ static void _nexthop_add_sorted(struct nexthop **head,

for (position = *head, prev = NULL; position;
prev = position, position = position->next) {
if (nexthop_cmp(position, nexthop) > 0) {
if (nexthop_cmp(position, nexthop, true) > 0) {
nexthop->next = position;
nexthop->prev = prev;

Expand Down Expand Up @@ -334,7 +334,7 @@ void nexthop_group_add_sorted(struct nexthop_group *nhg,
*/
tail = nexthop_group_tail(nhg);

if (tail && (nexthop_cmp(tail, nexthop) < 0)) {
if (tail && (nexthop_cmp(tail, nexthop, true) < 0)) {
tail->next = nexthop;
nexthop->prev = tail;

Expand Down Expand Up @@ -405,7 +405,7 @@ void nexthop_group_copy_nh_sorted(struct nexthop_group *nhg,
for (nh1 = nh; nh1; nh1 = nh1->next) {
nexthop = nexthop_dup(nh1, NULL);

if (tail && (nexthop_cmp(tail, nexthop) < 0)) {
if (tail && (nexthop_cmp(tail, nexthop, true) < 0)) {
tail->next = nexthop;
nexthop->prev = tail;

Expand Down
6 changes: 3 additions & 3 deletions zebra/zebra_rnh.c
Original file line number Diff line number Diff line change
Expand Up @@ -936,7 +936,7 @@ static struct nexthop *next_valid_primary_nh(struct route_entry *re,
nhg = rib_get_fib_nhg(re);

for (bnh = nhg->nexthop; bnh; bnh = nexthop_next(bnh)) {
if (nexthop_cmp(nh, bnh) == 0)
if (nexthop_cmp(nh, bnh, true) == 0)
break;
}

Expand Down Expand Up @@ -1010,7 +1010,7 @@ static bool compare_valid_nexthops(struct route_entry *r1,

if (nh1 && nh2) {
/* Any difference is a no-match */
if (nexthop_cmp(nh1, nh2) != 0) {
if (nexthop_cmp(nh1, nh2, true) != 0) {
if (IS_ZEBRA_DEBUG_NHT_DETAILED)
zlog_debug("%s: nh1: %pNHv, nh2: %pNHv differ",
__func__, nh1, nh2);
Expand Down Expand Up @@ -1078,7 +1078,7 @@ static bool compare_valid_nexthops(struct route_entry *r1,

if (nh1 && nh2) {
/* Any difference is a no-match */
if (nexthop_cmp(nh1, nh2) != 0) {
if (nexthop_cmp(nh1, nh2, true) != 0) {
if (IS_ZEBRA_DEBUG_NHT_DETAILED)
zlog_debug("%s: backup nh1: %pNHv, nh2: %pNHv differ",
__func__, nh1, nh2);
Expand Down

0 comments on commit 257b7be

Please sign in to comment.