summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLouis Scalbert <louis.scalbert@6wind.com>2022-04-28 17:01:35 +0200
committerLouis Scalbert <louis.scalbert@6wind.com>2024-01-25 15:06:13 +0100
commit45bf46441a2e0b02650a1d162367c357b220c7b1 (patch)
tree2a6e0f9c407013c4169d0affd9121ecf31d70b30
parentMerge pull request #15173 from louis-6wind/nhrp-noarp (diff)
downloadfrr-45bf46441a2e0b02650a1d162367c357b220c7b1.tar.xz
frr-45bf46441a2e0b02650a1d162367c357b220c7b1.zip
bgpd: fix VRF leaking with 'no bgp network import-check'
BGP static routes are defined using the network statement, e.g.: > router bgp XXX > address-family ipv4 unicast > network 192.168.0.0/24 When "no bgp network import-check" is set, it is impossible to successfully import the static routes into the BGP VPN table. The prefix is present in the table but is not marked as valid. This issue applies regardless of whether or not routes are present in the router's RIB. Always mark as valid the nexthops of BGP static routes when "no bgp network import-check" is set. Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com> Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
-rw-r--r--bgpd/bgp_mplsvpn.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/bgpd/bgp_mplsvpn.c b/bgpd/bgp_mplsvpn.c
index cf57d95eb..5aa752d6e 100644
--- a/bgpd/bgp_mplsvpn.c
+++ b/bgpd/bgp_mplsvpn.c
@@ -1011,9 +1011,11 @@ static bool leak_update_nexthop_valid(struct bgp *to_bgp, struct bgp_dest *bn,
{
struct bgp_path_info *bpi_ultimate;
struct bgp *bgp_nexthop;
+ struct bgp_table *table;
bool nh_valid;
bpi_ultimate = bgp_get_imported_bpi_ultimate(source_bpi);
+ table = bgp_dest_table(bpi_ultimate->net);
if (bpi->extra && bpi->extra->vrfleak && bpi->extra->vrfleak->bgp_orig)
bgp_nexthop = bpi->extra->vrfleak->bgp_orig;
@@ -1029,7 +1031,17 @@ static bool leak_update_nexthop_valid(struct bgp *to_bgp, struct bgp_dest *bn,
is_pi_family_evpn(bpi_ultimate) ||
CHECK_FLAG(bpi_ultimate->flags, BGP_PATH_ACCEPT_OWN))
nh_valid = true;
- else
+ else if (bpi_ultimate->type == ZEBRA_ROUTE_BGP &&
+ bpi_ultimate->sub_type == BGP_ROUTE_STATIC && table &&
+ (table->safi == SAFI_UNICAST ||
+ table->safi == SAFI_LABELED_UNICAST) &&
+ !CHECK_FLAG(bgp_nexthop->flags, BGP_FLAG_IMPORT_CHECK)) {
+ /* if the route is defined with the "network <prefix>" command
+ * and "no bgp network import-check" is set,
+ * then mark the nexthop as valid.
+ */
+ nh_valid = true;
+ } else
/*
* TBD do we need to do anything about the
* 'connected' parameter?