From 5c6a4947ebc71f8e7f55634d82865e7109cab8ca Mon Sep 17 00:00:00 2001 From: Philippe Guibert Date: Thu, 9 Jan 2025 10:26:02 +0100 Subject: [PATCH] bgpd: fix import vrf creates multiple bgp instances The more the vrf green is referenced in the import bgp command, the more there are instances created. The below configuration shows that the vrf green is referenced twice, and two BGP instances of vrf green are created. The below configuration: > router bgp 99 > [..] > import vrf green > exit > router bgp 99 vrf blue > [..] > import vrf green > exit > router bgp 99 vrf green > [..] > exit > > r4# show bgp vrfs > Type Id routerId #PeersCfg #PeersEstb Name > L3-VNI RouterMAC Interface > DFLT 0 10.0.3.4 0 0 default > 0 00:00:00:00:00:00 unknown > VRF 5 10.0.40.4 0 0 blue > 0 00:00:00:00:00:00 unknown > VRF 6 0.0.0.0 0 0 green > 0 00:00:00:00:00:00 unknown > VRF 6 10.0.94.4 0 0 green > 0 00:00:00:00:00:00 unknown Fix this at import command, by looking at an already present bgp instance. Signed-off-by: Philippe Guibert --- bgpd/bgp_vty.c | 2 +- bgpd/bgpd.c | 2 +- bgpd/bgpd.h | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c index ad7e2dad89..2c02796dd3 100644 --- a/bgpd/bgp_vty.c +++ b/bgpd/bgp_vty.c @@ -10556,7 +10556,7 @@ DEFPY(bgp_imexport_vrf, bgp_imexport_vrf_cmd, SET_FLAG(bgp_default->flags, BGP_FLAG_INSTANCE_HIDDEN); } - vrf_bgp = bgp_lookup_by_name(import_name); + vrf_bgp = bgp_lookup_by_name_filter(import_name, false); if (!vrf_bgp) { if (strcmp(import_name, VRF_DEFAULT_NAME) == 0) { vrf_bgp = bgp_default; diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c index 6272471f25..e97bdb3d51 100644 --- a/bgpd/bgpd.c +++ b/bgpd/bgpd.c @@ -3671,7 +3671,7 @@ struct bgp *bgp_lookup(as_t as, const char *name) } /* Lookup BGP structure by view name. */ -static struct bgp *bgp_lookup_by_name_filter(const char *name, bool filter_auto) +struct bgp *bgp_lookup_by_name_filter(const char *name, bool filter_auto) { struct bgp *bgp; struct listnode *node, *nnode; diff --git a/bgpd/bgpd.h b/bgpd/bgpd.h index 3b778884e6..fe62cb6716 100644 --- a/bgpd/bgpd.h +++ b/bgpd/bgpd.h @@ -2247,6 +2247,7 @@ extern void bgp_zclient_reset(void); extern struct bgp *bgp_get_default(void); extern struct bgp *bgp_lookup(as_t, const char *); extern struct bgp *bgp_lookup_by_name(const char *); +extern struct bgp *bgp_lookup_by_name_filter(const char *name, bool filter_auto); extern struct bgp *bgp_lookup_by_vrf_id(vrf_id_t); extern struct bgp *bgp_get_evpn(void); extern void bgp_set_evpn(struct bgp *bgp); -- 2.39.5