From: Stephen Worley Date: Tue, 3 Sep 2019 20:59:57 +0000 (-0400) Subject: lib: Add common handler for nexthop_group_equal*() X-Git-Tag: base_7.3~219^2~18 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=f17f2c5d6c4321ecac68f55aeba5fbb2d04c27bb;p=mirror%2Ffrr.git 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 --- diff --git a/lib/nexthop_group.c b/lib/nexthop_group.c index 35599488bf..7d8bcd1166 100644 --- a/lib/nexthop_group.c +++ b/lib/nexthop_group.c @@ -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;