]> 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>
Tue, 4 Feb 2025 09:32:04 +0000 (11:32 +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 80760a632a293709b95bf4b2819228edc96b2420..d5f16051e8939c35eef70eaaa0c18443c04291e3 100644 (file)
@@ -10440,7 +10440,7 @@ DEFPY(bgp_imexport_vrf, bgp_imexport_vrf_cmd,
                }
        }
 
-       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 34c0eab089c8d79a64d76624687c04626f8f01e8..7c1be226b1c79cf7786bda3f750e1d792be45d62 100644 (file)
@@ -3623,7 +3623,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 8b6bc2d4c56d3ec288a5faee0222740b119e759a..61907140d9f445dc49f0dede82416313b75a98a6 100644 (file)
@@ -2224,6 +2224,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);