]> git.proxmox.com Git - mirror_frr.git/commitdiff
lib: Add common handler for nexthop_group_equal*()
authorStephen Worley <sworley@cumulusnetworks.com>
Tue, 3 Sep 2019 20:59:57 +0000 (16:59 -0400)
committerStephen Worley <sworley@cumulusnetworks.com>
Fri, 25 Oct 2019 15:13:43 +0000 (11:13 -0400)
Add a common handler function for the different nexthop_group_equal*()
comparison functions.

Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
lib/nexthop_group.c

index 35599488bf5320b00318996947d2b41511c00704..7d8bcd1166c5c4abbce3612989e0360785f905a6 100644 (file)
@@ -132,13 +132,12 @@ struct nexthop *nexthop_exists(const struct nexthop_group *nhg,
        return NULL;
 }
 
-/* This assumes ordered */
-bool nexthop_group_equal_no_recurse(const struct nexthop_group *nhg1,
-                                   const struct nexthop_group *nhg2)
+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))
 {
-       struct nexthop *nh1 = NULL;
-       struct nexthop *nh2 = NULL;
-
        if (nhg1 && !nhg2)
                return false;
 
@@ -148,8 +147,22 @@ bool nexthop_group_equal_no_recurse(const struct nexthop_group *nhg1,
        if (nhg1 == nhg2)
                return true;
 
-       if (nexthop_group_nexthop_num_no_recurse(nhg1)
-           != nexthop_group_nexthop_num_no_recurse(nhg2))
+       if (nexthop_group_nexthop_num_func(nhg1)
+           != nexthop_group_nexthop_num_func(nhg2))
+               return false;
+
+       return true;
+}
+
+/* This assumes ordered */
+bool nexthop_group_equal_no_recurse(const struct nexthop_group *nhg1,
+                                   const struct nexthop_group *nhg2)
+{
+       struct nexthop *nh1 = NULL;
+       struct nexthop *nh2 = NULL;
+
+       if (!nexthop_group_equal_common(nhg1, nhg2,
+                                       &nexthop_group_nexthop_num_no_recurse))
                return false;
 
        for (nh1 = nhg1->nexthop, nh2 = nhg2->nexthop; nh1 || nh2;
@@ -172,16 +185,7 @@ bool nexthop_group_equal(const struct nexthop_group *nhg1,
        struct nexthop *nh1 = NULL;
        struct nexthop *nh2 = NULL;
 
-       if (nhg1 && !nhg2)
-               return false;
-
-       if (!nhg1 && nhg2)
-               return false;
-
-       if (nhg1 == nhg2)
-               return true;
-
-       if (nexthop_group_nexthop_num(nhg1) != nexthop_group_nexthop_num(nhg2))
+       if (!nexthop_group_equal_common(nhg1, nhg2, &nexthop_group_nexthop_num))
                return false;
 
        for (nh1 = nhg1->nexthop, nh2 = nhg2->nexthop; nh1 || nh2;