mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-08 11:07:08 +00:00
bgpd: revert no retain backend
Partially reverta486300b26
("bgpd: implement retain route-target all behaviour") in order to fix a memory consumption issue in the next commit. Fixes:a486300b26
("bgpd: implement retain route-target all behaviour") Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
This commit is contained in:
parent
22c329ed32
commit
59bbe85d4b
@ -2116,7 +2116,7 @@ static struct bgp *bgp_lookup_by_rd(struct bgp_path_info *bpi,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool vpn_leak_to_vrf_update_onevrf(struct bgp *to_bgp, /* to */
|
static void vpn_leak_to_vrf_update_onevrf(struct bgp *to_bgp, /* to */
|
||||||
struct bgp *from_bgp, /* from */
|
struct bgp *from_bgp, /* from */
|
||||||
struct bgp_path_info *path_vpn,
|
struct bgp_path_info *path_vpn,
|
||||||
struct prefix_rd *prd)
|
struct prefix_rd *prd)
|
||||||
@ -2146,7 +2146,7 @@ static bool vpn_leak_to_vrf_update_onevrf(struct bgp *to_bgp, /* to */
|
|||||||
"%s: from vpn (%s) to vrf (%s), skipping: %s",
|
"%s: from vpn (%s) to vrf (%s), skipping: %s",
|
||||||
__func__, from_bgp->name_pretty,
|
__func__, from_bgp->name_pretty,
|
||||||
to_bgp->name_pretty, debugmsg);
|
to_bgp->name_pretty, debugmsg);
|
||||||
return false;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -2173,7 +2173,7 @@ static bool vpn_leak_to_vrf_update_onevrf(struct bgp *to_bgp, /* to */
|
|||||||
zlog_debug(
|
zlog_debug(
|
||||||
"from vpn (%s) to vrf (%s), skipping after no intersection of route targets",
|
"from vpn (%s) to vrf (%s), skipping after no intersection of route targets",
|
||||||
from_bgp->name_pretty, to_bgp->name_pretty);
|
from_bgp->name_pretty, to_bgp->name_pretty);
|
||||||
return false;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
rd_buf[0] = '\0';
|
rd_buf[0] = '\0';
|
||||||
@ -2190,7 +2190,7 @@ static bool vpn_leak_to_vrf_update_onevrf(struct bgp *to_bgp, /* to */
|
|||||||
zlog_debug(
|
zlog_debug(
|
||||||
"%s: skipping import, match RD (%s) of src VRF (%s) and the prefix (%pFX)",
|
"%s: skipping import, match RD (%s) of src VRF (%s) and the prefix (%pFX)",
|
||||||
__func__, rd_buf, to_bgp->name_pretty, p);
|
__func__, rd_buf, to_bgp->name_pretty, p);
|
||||||
return false;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
@ -2301,7 +2301,7 @@ static bool vpn_leak_to_vrf_update_onevrf(struct bgp *to_bgp, /* to */
|
|||||||
to_bgp->vpn_policy[afi]
|
to_bgp->vpn_policy[afi]
|
||||||
.rmap[BGP_VPN_POLICY_DIR_FROMVPN]
|
.rmap[BGP_VPN_POLICY_DIR_FROMVPN]
|
||||||
->name);
|
->name);
|
||||||
return false;
|
return;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* if route-map changed nexthop, don't nexthop-self on output
|
* if route-map changed nexthop, don't nexthop-self on output
|
||||||
@ -2363,17 +2363,14 @@ static bool vpn_leak_to_vrf_update_onevrf(struct bgp *to_bgp, /* to */
|
|||||||
num_labels, src_vrf, &nexthop_orig, nexthop_self_flag,
|
num_labels, src_vrf, &nexthop_orig, nexthop_self_flag,
|
||||||
debug))
|
debug))
|
||||||
bgp_dest_unlock_node(bn);
|
bgp_dest_unlock_node(bn);
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool vpn_leak_to_vrf_update(struct bgp *from_bgp,
|
void vpn_leak_to_vrf_update(struct bgp *from_bgp,
|
||||||
struct bgp_path_info *path_vpn,
|
struct bgp_path_info *path_vpn,
|
||||||
struct prefix_rd *prd)
|
struct prefix_rd *prd)
|
||||||
{
|
{
|
||||||
struct listnode *mnode, *mnnode;
|
struct listnode *mnode, *mnnode;
|
||||||
struct bgp *bgp;
|
struct bgp *bgp;
|
||||||
bool leak_success = false;
|
|
||||||
|
|
||||||
int debug = BGP_DEBUG(vpn, VPN_LEAK_TO_VRF);
|
int debug = BGP_DEBUG(vpn, VPN_LEAK_TO_VRF);
|
||||||
|
|
||||||
@ -2385,11 +2382,10 @@ bool vpn_leak_to_vrf_update(struct bgp *from_bgp,
|
|||||||
|
|
||||||
if (!path_vpn->extra
|
if (!path_vpn->extra
|
||||||
|| path_vpn->extra->bgp_orig != bgp) { /* no loop */
|
|| path_vpn->extra->bgp_orig != bgp) { /* no loop */
|
||||||
leak_success |= vpn_leak_to_vrf_update_onevrf(
|
vpn_leak_to_vrf_update_onevrf(bgp, from_bgp, path_vpn,
|
||||||
bgp, from_bgp, path_vpn, prd);
|
prd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return leak_success;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void vpn_leak_to_vrf_withdraw(struct bgp_path_info *path_vpn)
|
void vpn_leak_to_vrf_withdraw(struct bgp_path_info *path_vpn)
|
||||||
|
@ -59,7 +59,7 @@ extern void vpn_leak_to_vrf_withdraw_all(struct bgp *to_bgp, afi_t afi);
|
|||||||
extern void vpn_leak_to_vrf_update_all(struct bgp *to_bgp, struct bgp *from_bgp,
|
extern void vpn_leak_to_vrf_update_all(struct bgp *to_bgp, struct bgp *from_bgp,
|
||||||
afi_t afi);
|
afi_t afi);
|
||||||
|
|
||||||
extern bool vpn_leak_to_vrf_update(struct bgp *from_bgp,
|
extern void vpn_leak_to_vrf_update(struct bgp *from_bgp,
|
||||||
struct bgp_path_info *path_vpn,
|
struct bgp_path_info *path_vpn,
|
||||||
struct prefix_rd *prd);
|
struct prefix_rd *prd);
|
||||||
|
|
||||||
|
@ -4026,7 +4026,6 @@ void bgp_update(struct peer *peer, const struct prefix *p, uint32_t addpath_id,
|
|||||||
afi_t nh_afi;
|
afi_t nh_afi;
|
||||||
bool force_evpn_import = false;
|
bool force_evpn_import = false;
|
||||||
safi_t orig_safi = safi;
|
safi_t orig_safi = safi;
|
||||||
bool leak_success = true;
|
|
||||||
int allowas_in = 0;
|
int allowas_in = 0;
|
||||||
|
|
||||||
if (frrtrace_enabled(frr_bgp, process_update)) {
|
if (frrtrace_enabled(frr_bgp, process_update)) {
|
||||||
@ -4713,7 +4712,7 @@ void bgp_update(struct peer *peer, const struct prefix *p, uint32_t addpath_id,
|
|||||||
}
|
}
|
||||||
if ((SAFI_MPLS_VPN == safi)
|
if ((SAFI_MPLS_VPN == safi)
|
||||||
&& (bgp->inst_type == BGP_INSTANCE_TYPE_DEFAULT)) {
|
&& (bgp->inst_type == BGP_INSTANCE_TYPE_DEFAULT)) {
|
||||||
leak_success = vpn_leak_to_vrf_update(bgp, pi, prd);
|
vpn_leak_to_vrf_update(bgp, pi, prd);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ENABLE_BGP_VNC
|
#ifdef ENABLE_BGP_VNC
|
||||||
@ -4728,13 +4727,6 @@ void bgp_update(struct peer *peer, const struct prefix *p, uint32_t addpath_id,
|
|||||||
type, sub_type, NULL);
|
type, sub_type, NULL);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if ((safi == SAFI_MPLS_VPN) &&
|
|
||||||
!CHECK_FLAG(bgp->af_flags[afi][safi],
|
|
||||||
BGP_VPNVX_RETAIN_ROUTE_TARGET_ALL) &&
|
|
||||||
!leak_success) {
|
|
||||||
bgp_unlink_nexthop(pi);
|
|
||||||
bgp_path_info_delete(dest, pi);
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
} // End of implicit withdraw
|
} // End of implicit withdraw
|
||||||
|
|
||||||
@ -4876,7 +4868,7 @@ void bgp_update(struct peer *peer, const struct prefix *p, uint32_t addpath_id,
|
|||||||
}
|
}
|
||||||
if ((SAFI_MPLS_VPN == safi)
|
if ((SAFI_MPLS_VPN == safi)
|
||||||
&& (bgp->inst_type == BGP_INSTANCE_TYPE_DEFAULT)) {
|
&& (bgp->inst_type == BGP_INSTANCE_TYPE_DEFAULT)) {
|
||||||
leak_success = vpn_leak_to_vrf_update(bgp, new, prd);
|
vpn_leak_to_vrf_update(bgp, new, prd);
|
||||||
}
|
}
|
||||||
#ifdef ENABLE_BGP_VNC
|
#ifdef ENABLE_BGP_VNC
|
||||||
if (SAFI_MPLS_VPN == safi) {
|
if (SAFI_MPLS_VPN == safi) {
|
||||||
@ -4890,13 +4882,6 @@ void bgp_update(struct peer *peer, const struct prefix *p, uint32_t addpath_id,
|
|||||||
sub_type, NULL);
|
sub_type, NULL);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if ((safi == SAFI_MPLS_VPN) &&
|
|
||||||
!CHECK_FLAG(bgp->af_flags[afi][safi],
|
|
||||||
BGP_VPNVX_RETAIN_ROUTE_TARGET_ALL) &&
|
|
||||||
!leak_success) {
|
|
||||||
bgp_unlink_nexthop(new);
|
|
||||||
bgp_path_info_delete(dest, new);
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user