lib: Add common handler for nexthop_group_equal*()

Add a common handler function for the different nexthop_group_equal*()
comparison functions.

Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
This commit is contained in:
Stephen Worley 2019-09-03 16:59:57 -04:00
parent dd9546e196
commit f17f2c5d6c

View 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;