summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonald Sharp <donaldsharp72@gmail.com>2024-08-13 08:45:31 -0400
committerGitHub <noreply@github.com>2024-08-13 08:45:31 -0400
commit00d1dbaedeb8ccecd179a81c80f877ae2fbdbb3c (patch)
treea9a84ac5c67e10ff94d84fa071b56b53f6494ea5
parent3f6b0281f0c32c2090951e7723291cc78cf21d5c (diff)
parentb39cdb3ed4d1b0de97f219c8c5f1e36e3dde2879 (diff)
Merge pull request #16562 from FRRouting/mergify/bp/stable/9.1/pr-16554
zebra: Ensure non-equal id's are not same nhg's (backport #16554)
-rw-r--r--zebra/zebra_nhg.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/zebra/zebra_nhg.c b/zebra/zebra_nhg.c
index e72772ddd5..804cd48d9c 100644
--- a/zebra/zebra_nhg.c
+++ b/zebra/zebra_nhg.c
@@ -535,9 +535,18 @@ bool zebra_nhg_hash_equal(const void *arg1, const void *arg2)
struct nexthop *nexthop1;
struct nexthop *nexthop2;
- /* No matter what if they equal IDs, assume equal */
- if (nhe1->id && nhe2->id && (nhe1->id == nhe2->id))
- return true;
+ /* If both NHG's have id's then we can just know that
+ * they are either identical or not. This comparison
+ * is only ever used for hash equality. NHE's id
+ * is sufficient to distinguish them. This is especially
+ * true if NHG's are owned by an upper level protocol.
+ */
+ if (nhe1->id && nhe2->id) {
+ if (nhe1->id == nhe2->id)
+ return true;
+
+ return false;
+ }
if (nhe1->type != nhe2->type)
return false;