diff options
| author | Donald Sharp <sharpd@nvidia.com> | 2024-08-20 08:28:17 -0400 | 
|---|---|---|
| committer | Donald Sharp <sharpd@nvidia.com> | 2024-08-22 13:22:06 -0400 | 
| commit | b8e24a0ad07b9190cd6a6d1f9f36bb8805193b48 (patch) | |
| tree | dfd3cf4195e6019a6e98b081895268431d8a2e9f /lib/nexthop.c | |
| parent | 05c17eff06536e750d43829ccded5c9e8f0f9ca4 (diff) | |
lib, zebra: Modify nexthop_cmp to allow you to use weight or not
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 <sharpd@nvidia.com>
Diffstat (limited to 'lib/nexthop.c')
| -rw-r--r-- | lib/nexthop.c | 30 | 
1 files changed, 22 insertions, 8 deletions
diff --git a/lib/nexthop.c b/lib/nexthop.c index 65c12c1e69..ac22e7ec84 100644 --- a/lib/nexthop.c +++ b/lib/nexthop.c @@ -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; @@ -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: @@ -227,11 +229,12 @@ done:  	return ret;  } -int nexthop_cmp(const struct nexthop *next1, const struct nexthop *next2) +static int nexthop_cmp_internal(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; @@ -244,6 +247,17 @@ int nexthop_cmp(const struct nexthop *next1, const struct nexthop *next2)  	return ret;  } +int nexthop_cmp(const struct nexthop *next1, const struct nexthop *next2) +{ +	return nexthop_cmp_internal(next1, next2, true); +} + +int nexthop_cmp_no_weight(const struct nexthop *next1, +			  const struct nexthop *next2) +{ +	return nexthop_cmp_internal(next1, next2, false); +} +  /*   * More-limited comparison function used to detect duplicate   * nexthops. This is used in places where we don't need the full @@ -441,7 +455,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;  | 
