diff options
| author | Donatas Abraitis <donatas.abraitis@gmail.com> | 2021-09-12 20:50:36 +0300 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-09-12 20:50:36 +0300 | 
| commit | 7d18da967189913846ecf1a897f20071b663c90d (patch) | |
| tree | 7230ae99954641dffc14e64c24f8963e4f258eb8 /bgpd | |
| parent | 016d91cff7a87cc2f76a887d63c6f7d33a4bf92a (diff) | |
| parent | 68d4b72ff37eb2d6d851b0dcd9e69e7a248b6cec (diff) | |
Merge pull request #9586 from idryzhov/bgp-default-originate-rmap-fixes
BGP default-originate with route-map fixes
Diffstat (limited to 'bgpd')
| -rw-r--r-- | bgpd/bgp_updgrp_adv.c | 24 | 
1 files changed, 11 insertions, 13 deletions
diff --git a/bgpd/bgp_updgrp_adv.c b/bgpd/bgp_updgrp_adv.c index 9c2288cba3..3b7ee8b0b6 100644 --- a/bgpd/bgp_updgrp_adv.c +++ b/bgpd/bgp_updgrp_adv.c @@ -812,6 +812,10 @@ void subgroup_default_originate(struct update_subgroup *subgrp, int withdraw)  	}  	if (peer->default_rmap[afi][safi].name) { +		struct bgp_path_info tmp_pi = {0}; + +		tmp_pi.peer = bgp->peer_self; +  		SET_FLAG(bgp->peer_self->rmap_type, PEER_RMAP_TYPE_DEFAULT);  		/* Iterate over the RIB to see if we can announce @@ -825,24 +829,16 @@ void subgroup_default_originate(struct update_subgroup *subgrp, int withdraw)  			for (pi = bgp_dest_get_bgp_path_info(dest); pi;  			     pi = pi->next) { -				struct attr tmp_attr; -				struct bgp_path_info tmp_pi; -				struct bgp_path_info_extra tmp_pie; +				struct attr tmp_attr = attr; -				tmp_attr = *pi->attr; -				tmp_attr.aspath = attr.aspath; +				tmp_pi.attr = &tmp_attr; -				prep_for_rmap_apply(&tmp_pi, &tmp_pie, dest, pi, -						    pi->peer, &tmp_attr); - -				ret = route_map_apply( +				ret = route_map_apply_ext(  					peer->default_rmap[afi][safi].map, -					bgp_dest_get_prefix(dest), &tmp_pi); +					bgp_dest_get_prefix(dest), pi, &tmp_pi);  				if (ret == RMAP_DENYMATCH) { -					/* The aspath belongs to 'attr' */ -					tmp_attr.aspath = NULL; -					bgp_attr_flush(&tmp_attr); +					bgp_attr_undup(&tmp_attr, &attr);  					continue;  				} else {  					new_attr = bgp_attr_intern(&tmp_attr); @@ -939,6 +935,8 @@ void subgroup_default_originate(struct update_subgroup *subgrp, int withdraw)  			subgroup_default_update_packet(subgrp, new_attr, from);  		}  	} + +	aspath_unintern(&attr.aspath);  }  /*  | 
