diff options
| author | Louis Scalbert <louis.scalbert@6wind.com> | 2022-04-29 19:41:57 +0200 | 
|---|---|---|
| committer | Louis Scalbert <louis.scalbert@6wind.com> | 2024-02-22 18:20:34 +0100 | 
| commit | 58c1206112273d879dcbdc001fccd82cc19db4e5 (patch) | |
| tree | 32de1df899aa3485dcb1514946faf836a17e26a4 /bgpd | |
| parent | 37588ece04ae6cc9e100225f02caa16717ab3b7d (diff) | |
bgpd: move mp_nexthop_prefer_global boolean attribute to nh_flags
Move mp_nexthop_prefer_global boolean attribute to nh_flags. It does
not currently save memory because of the packing.
Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
Diffstat (limited to 'bgpd')
| -rw-r--r-- | bgpd/bgp_attr.h | 4 | ||||
| -rw-r--r-- | bgpd/bgp_mpath.c | 12 | ||||
| -rw-r--r-- | bgpd/bgp_nht.c | 3 | ||||
| -rw-r--r-- | bgpd/bgp_route.c | 22 | ||||
| -rw-r--r-- | bgpd/bgp_routemap.c | 4 | ||||
| -rw-r--r-- | bgpd/bgp_snmp_bgp4v2.c | 6 | ||||
| -rw-r--r-- | bgpd/bgp_zebra.c | 3 | 
7 files changed, 32 insertions, 22 deletions
diff --git a/bgpd/bgp_attr.h b/bgpd/bgp_attr.h index 4b6270408e..5386f24a0b 100644 --- a/bgpd/bgp_attr.h +++ b/bgpd/bgp_attr.h @@ -159,6 +159,7 @@ struct attr {  #define BGP_ATTR_NH_VALID 0x01  #define BGP_ATTR_NH_IF_OPERSTATE 0x02 +#define BGP_ATTR_NH_MP_PREFER_GLOBAL 0x04 /* MP Nexthop preference */  	/* Path origin attribute */  	uint8_t origin; @@ -255,9 +256,6 @@ struct attr {  	/* MP Nexthop length */  	uint8_t mp_nexthop_len; -	/* MP Nexthop preference */ -	uint8_t mp_nexthop_prefer_global; -  	/* Static MAC for EVPN */  	uint8_t sticky; diff --git a/bgpd/bgp_mpath.c b/bgpd/bgp_mpath.c index c773c21fb7..296e64003d 100644 --- a/bgpd/bgp_mpath.c +++ b/bgpd/bgp_mpath.c @@ -129,15 +129,19 @@ int bgp_path_info_nexthop_cmp(struct bgp_path_info *bpi1,  					&bpi2->attr->mp_nexthop_global);  				break;  			case BGP_ATTR_NHLEN_IPV6_GLOBAL_AND_LL: -				addr1 = (bpi1->attr->mp_nexthop_prefer_global) +				addr1 = (CHECK_FLAG(bpi1->attr->nh_flags, +						    BGP_ATTR_NH_MP_PREFER_GLOBAL))  						? bpi1->attr->mp_nexthop_global  						: bpi1->attr->mp_nexthop_local; -				addr2 = (bpi2->attr->mp_nexthop_prefer_global) +				addr2 = (CHECK_FLAG(bpi2->attr->nh_flags, +						    BGP_ATTR_NH_MP_PREFER_GLOBAL))  						? bpi2->attr->mp_nexthop_global  						: bpi2->attr->mp_nexthop_local; -				if (!bpi1->attr->mp_nexthop_prefer_global -				    && !bpi2->attr->mp_nexthop_prefer_global) +				if (!CHECK_FLAG(bpi1->attr->nh_flags, +						BGP_ATTR_NH_MP_PREFER_GLOBAL) && +				    !CHECK_FLAG(bpi2->attr->nh_flags, +						BGP_ATTR_NH_MP_PREFER_GLOBAL))  					compare = !bgp_interface_same(  						bpi1->peer->ifp,  						bpi2->peer->ifp); diff --git a/bgpd/bgp_nht.c b/bgpd/bgp_nht.c index e2c103bb52..526b5730a0 100644 --- a/bgpd/bgp_nht.c +++ b/bgpd/bgp_nht.c @@ -1065,7 +1065,8 @@ static int make_prefix(int afi, struct bgp_path_info *pi, struct prefix *p)  			 */  			else if (pi->attr->mp_nexthop_len  				 == BGP_ATTR_NHLEN_IPV6_GLOBAL_AND_LL) { -				if (pi->attr->mp_nexthop_prefer_global) +				if (CHECK_FLAG(pi->attr->nh_flags, +					       BGP_ATTR_NH_MP_PREFER_GLOBAL))  					p->u.prefix6 =  						pi->attr->mp_nexthop_global;  				else diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c index b6a000b138..c61ffbd558 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c @@ -9323,9 +9323,10 @@ void route_vty_out(struct vty *vty, const struct prefix *p,  						       "link-local");  				if ((IPV6_ADDR_CMP(&attr->mp_nexthop_global, -						   &attr->mp_nexthop_local) -				     != 0) -				    && !attr->mp_nexthop_prefer_global) +						   &attr->mp_nexthop_local) != +				     0) && +				    !CHECK_FLAG(attr->nh_flags, +						BGP_ATTR_NH_MP_PREFER_GLOBAL))  					json_object_boolean_true_add(  						json_nexthop_ll, "used");  				else @@ -9337,10 +9338,11 @@ void route_vty_out(struct vty *vty, const struct prefix *p,  		} else {  			/* Display LL if LL/Global both in table unless  			 * prefer-global is set */ -			if (((attr->mp_nexthop_len -			      == BGP_ATTR_NHLEN_IPV6_GLOBAL_AND_LL) -			     && !attr->mp_nexthop_prefer_global) -			    || (path->peer->conf_if)) { +			if (((attr->mp_nexthop_len == +			      BGP_ATTR_NHLEN_IPV6_GLOBAL_AND_LL) && +			     !CHECK_FLAG(attr->nh_flags, +					 BGP_ATTR_NH_MP_PREFER_GLOBAL)) || +			    (path->peer->conf_if)) {  				if (path->peer->conf_if) {  					len = vty_out(vty, "%s",  						      path->peer->conf_if); @@ -10588,7 +10590,8 @@ void route_vty_out_detail(struct vty *vty, struct bgp *bgp, struct bgp_dest *bn,  			json_object_boolean_true_add(json_nexthop_ll,  						     "accessible"); -			if (!attr->mp_nexthop_prefer_global) +			if (!CHECK_FLAG(attr->nh_flags, +					BGP_ATTR_NH_MP_PREFER_GLOBAL))  				json_object_boolean_true_add(json_nexthop_ll,  							     "used");  			else @@ -10598,7 +10601,8 @@ void route_vty_out_detail(struct vty *vty, struct bgp *bgp, struct bgp_dest *bn,  			vty_out(vty, "    (%s) %s\n",  				inet_ntop(AF_INET6, &attr->mp_nexthop_local,  					  buf, INET6_ADDRSTRLEN), -				attr->mp_nexthop_prefer_global +				CHECK_FLAG(attr->nh_flags, +					   BGP_ATTR_NH_MP_PREFER_GLOBAL)  					? "(prefer-global)"  					: "(used)");  		} diff --git a/bgpd/bgp_routemap.c b/bgpd/bgp_routemap.c index 36e04c5e68..c1b4fb186b 100644 --- a/bgpd/bgp_routemap.c +++ b/bgpd/bgp_routemap.c @@ -3935,11 +3935,11 @@ route_set_ipv6_nexthop_prefer_global(void *rule, const struct prefix *prefix,  	if (CHECK_FLAG(peer->rmap_type, PEER_RMAP_TYPE_IN)  	    || CHECK_FLAG(peer->rmap_type, PEER_RMAP_TYPE_IMPORT)) {  		/* Set next hop preference to global */ -		path->attr->mp_nexthop_prefer_global = true; +		SET_FLAG(path->attr->nh_flags, BGP_ATTR_NH_MP_PREFER_GLOBAL);  		SET_FLAG(path->attr->rmap_change_flags,  			 BATTR_RMAP_IPV6_PREFER_GLOBAL_CHANGED);  	} else { -		path->attr->mp_nexthop_prefer_global = false; +		UNSET_FLAG(path->attr->nh_flags, BGP_ATTR_NH_MP_PREFER_GLOBAL);  		SET_FLAG(path->attr->rmap_change_flags,  			 BATTR_RMAP_IPV6_PREFER_GLOBAL_CHANGED);  	} diff --git a/bgpd/bgp_snmp_bgp4v2.c b/bgpd/bgp_snmp_bgp4v2.c index 0c8ed33d43..70369104a2 100644 --- a/bgpd/bgp_snmp_bgp4v2.c +++ b/bgpd/bgp_snmp_bgp4v2.c @@ -853,7 +853,8 @@ static uint8_t *bgp4v2PathAttrTable(struct variable *v, oid name[],  		case BGP_ATTR_NHLEN_IPV6_GLOBAL:  			return SNMP_INTEGER(2);  		case BGP_ATTR_NHLEN_IPV6_GLOBAL_AND_LL: -			if (path->attr->mp_nexthop_prefer_global) +			if (CHECK_FLAG(path->attr->nh_flags, +				       BGP_ATTR_NH_MP_PREFER_GLOBAL))  				return SNMP_INTEGER(2);  			else  				return SNMP_INTEGER(4); @@ -867,7 +868,8 @@ static uint8_t *bgp4v2PathAttrTable(struct variable *v, oid name[],  		case BGP_ATTR_NHLEN_IPV6_GLOBAL:  			return SNMP_IP6ADDRESS(path->attr->mp_nexthop_global);  		case BGP_ATTR_NHLEN_IPV6_GLOBAL_AND_LL: -			if (path->attr->mp_nexthop_prefer_global) +			if (CHECK_FLAG(path->attr->nh_flags, +				       BGP_ATTR_NH_MP_PREFER_GLOBAL))  				return SNMP_IP6ADDRESS(  					path->attr->mp_nexthop_global);  			else diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c index 0304c4383f..26194f8601 100644 --- a/bgpd/bgp_zebra.c +++ b/bgpd/bgp_zebra.c @@ -943,7 +943,8 @@ bgp_path_info_to_ipv6_nexthop(struct bgp_path_info *path, ifindex_t *ifindex)  	    || path->attr->mp_nexthop_len  		       == BGP_ATTR_NHLEN_VPNV6_GLOBAL_AND_LL) {  		/* Check if route-map is set to prefer global over link-local */ -		if (path->attr->mp_nexthop_prefer_global) { +		if (CHECK_FLAG(path->attr->nh_flags, +			       BGP_ATTR_NH_MP_PREFER_GLOBAL)) {  			nexthop = &path->attr->mp_nexthop_global;  			if (IN6_IS_ADDR_LINKLOCAL(nexthop))  				*ifindex = path->attr->nh_ifindex;  | 
