summaryrefslogtreecommitdiffstats
path: root/bgpd/bgp_mplsvpn.c
diff options
context:
space:
mode:
authorDonatas Abraitis <donatas@opensourcerouting.org>2024-12-08 20:46:59 +0100
committerDonatas Abraitis <donatas@opensourcerouting.org>2024-12-08 20:46:59 +0100
commit222ba5f39048953f384ab3aa207af753dfa92e67 (patch)
treefc63ebbd39ac137f5e79a785668ce05ad2f1bceb /bgpd/bgp_mplsvpn.c
parenttests: Check if vpn routes can be imported if allowas-in is set (diff)
downloadfrr-222ba5f39048953f384ab3aa207af753dfa92e67.tar.xz
frr-222ba5f39048953f384ab3aa207af753dfa92e67.zip
bgpd: Import allowed routes with self AS if desired
Previously we couldn't install VPN routes with self AS in the path because we never checked if we have allowas-in enabled, or not. Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
Diffstat (limited to '')
-rw-r--r--bgpd/bgp_mplsvpn.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/bgpd/bgp_mplsvpn.c b/bgpd/bgp_mplsvpn.c
index ca7f73dde..69248d961 100644
--- a/bgpd/bgp_mplsvpn.c
+++ b/bgpd/bgp_mplsvpn.c
@@ -2167,6 +2167,8 @@ static void vpn_leak_to_vrf_update_onevrf(struct bgp *to_bgp, /* to */
struct interface *ifp = NULL;
char rd_buf[RD_ADDRSTRLEN];
struct aspath *new_aspath;
+ int32_t aspath_loop_count = 0;
+ struct peer *peer = path_vpn->peer;
int debug = BGP_DEBUG(vpn, VPN_LEAK_TO_VRF);
@@ -2227,7 +2229,9 @@ static void vpn_leak_to_vrf_update_onevrf(struct bgp *to_bgp, /* to */
bn = bgp_afi_node_get(to_bgp->rib[afi][safi], afi, safi, p, NULL);
/* Check if leaked route has our asn. If so, don't import it. */
- if (aspath_loop_check(path_vpn->attr->aspath, to_bgp->as)) {
+ if (CHECK_FLAG(peer->af_flags[afi][SAFI_MPLS_VPN], PEER_FLAG_ALLOWAS_IN))
+ aspath_loop_count = peer->allowas_in[afi][SAFI_MPLS_VPN];
+ if (aspath_loop_check(path_vpn->attr->aspath, to_bgp->as) > aspath_loop_count) {
for (bpi = bgp_dest_get_bgp_path_info(bn); bpi;
bpi = bpi->next) {
if (bpi->extra && bpi->extra->vrfleak &&