]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: fix import vrf creates multiple bgp instances
authorPhilippe Guibert <philippe.guibert@6wind.com>
Thu, 9 Jan 2025 09:26:02 +0000 (10:26 +0100)
committerDonatas Abraitis <donatas@opensourcerouting.org>
Sun, 2 Feb 2025 18:57:56 +0000 (20:57 +0200)
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 <philippe.guibert@6wind.com>
bgpd/bgp_vty.c
bgpd/bgpd.c
bgpd/bgpd.h

index ad7e2dad89897658e645d21a5408dbcbafb6340d..2c02796dd3cfa37281298525570a151207783975 100644 (file)
@@ -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;
index 6272471f25bab441cc7af091bee1f1b7e5aed8d4..e97bdb3d513b78693ab9f7c6922b66ed9addea8e 100644 (file)
@@ -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;
index 3b778884e626baa1ccabd970b4032d8c57191bb2..fe62cb67167df7642433d193188136e65dacbccb 100644 (file)
@@ -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);