diff options
| author | David Lamparter <equinox@opensourcerouting.org> | 2022-04-08 18:17:38 +0200 | 
|---|---|---|
| committer | David Lamparter <equinox@opensourcerouting.org> | 2022-04-27 14:43:28 +0200 | 
| commit | 3125fa6d42c1c7a5da3530d3c1caf27748b6138a (patch) | |
| tree | fd791f7040266b363457a03aeb3a2ccd56a9261c /lib/prefix.c | |
| parent | ebc61d81b364db2c6c63a6716611752f8d43cd1a (diff) | |
lib: prefix unionization
Ahead of May 1st, the workers of the prefix have decided on more
unionization.
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Diffstat (limited to 'lib/prefix.c')
| -rw-r--r-- | lib/prefix.c | 30 | 
1 files changed, 21 insertions, 9 deletions
diff --git a/lib/prefix.c b/lib/prefix.c index 4db0c2478b..1a3efd32b1 100644 --- a/lib/prefix.c +++ b/lib/prefix.c @@ -177,8 +177,10 @@ const char *safi2str(safi_t safi)  }  /* If n includes p prefix then return 1 else return 0. */ -int prefix_match(const struct prefix *n, const struct prefix *p) +int prefix_match(union prefixconstptr unet, union prefixconstptr upfx)  { +	const struct prefix *n = unet.p; +	const struct prefix *p = upfx.p;  	int offset;  	int shift;  	const uint8_t *np, *pp; @@ -274,9 +276,11 @@ int evpn_type5_prefix_match(const struct prefix *n, const struct prefix *p)  }  /* If n includes p then return 1 else return 0. Prefix mask is not considered */ -int prefix_match_network_statement(const struct prefix *n, -				   const struct prefix *p) +int prefix_match_network_statement(union prefixconstptr unet, +				   union prefixconstptr upfx)  { +	const struct prefix *n = unet.p; +	const struct prefix *p = upfx.p;  	int offset;  	int shift;  	const uint8_t *np, *pp; @@ -472,8 +476,10 @@ int prefix_cmp(union prefixconstptr up1, union prefixconstptr up2)   * address families don't match, return -1; otherwise the return value is   * in range 0 ... maximum prefix length for the address family.   */ -int prefix_common_bits(const struct prefix *p1, const struct prefix *p2) +int prefix_common_bits(union prefixconstptr ua, union prefixconstptr ub)  { +	const struct prefix *p1 = ua.p; +	const struct prefix *p2 = ub.p;  	int pos, bit;  	int length = 0;  	uint8_t xor ; @@ -509,8 +515,10 @@ int prefix_common_bits(const struct prefix *p1, const struct prefix *p2)  }  /* Return prefix family type string. */ -const char *prefix_family_str(const struct prefix *p) +const char *prefix_family_str(union prefixconstptr pu)  { +	const struct prefix *p = pu.p; +  	if (p->family == AF_INET)  		return "inet";  	if (p->family == AF_INET6) @@ -815,14 +823,16 @@ void apply_mask_ipv6(struct prefix_ipv6 *p)  	}  } -void apply_mask(struct prefix *p) +void apply_mask(union prefixptr pu)  { +	struct prefix *p = pu.p; +  	switch (p->family) {  	case AF_INET: -		apply_mask_ipv4((struct prefix_ipv4 *)p); +		apply_mask_ipv4(pu.p4);  		break;  	case AF_INET6: -		apply_mask_ipv6((struct prefix_ipv6 *)p); +		apply_mask_ipv6(pu.p6);  		break;  	default:  		break; @@ -868,8 +878,10 @@ void prefix2sockunion(const struct prefix *p, union sockunion *su)  		       sizeof(struct in6_addr));  } -int prefix_blen(const struct prefix *p) +int prefix_blen(union prefixconstptr pu)  { +	const struct prefix *p = pu.p; +  	switch (p->family) {  	case AF_INET:  		return IPV4_MAX_BYTELEN;  | 
