]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: update AS value of a hidden bgp instance
authorAlexander Skorichenko <askorichenko@netgate.com>
Sat, 1 Feb 2025 00:52:17 +0000 (01:52 +0100)
committerLouis Scalbert <louis.scalbert@6wind.com>
Fri, 14 Feb 2025 17:08:53 +0000 (18:08 +0100)
'import vrf VRF' could define a hidden bgp instance with
the default AS_UNSPECIFIED (i.e. = 1) value.
When a
router bgp AS vrf VRF
gets configured later on, replace this AS_UNSPECIFIED setting
with a requested value.

Fixes: 9680831518 ("bgpd: fix as_pretty mem leaks when un-hiding")
Signed-off-by: Alexander Skorichenko <askorichenko@netgate.com>
Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
bgpd/bgpd.c

index 8a3ae538dcd30ac70501d47d04645331b34f45cc..d90875b78c2571f1f03721b94b7098384ed85fc5 100644 (file)
@@ -3404,13 +3404,15 @@ static struct bgp *bgp_create(as_t *as, const char *name,
        afi_t afi;
        safi_t safi;
 
-       if (hidden) {
+       if (hidden)
                bgp = bgp_old;
-               goto peer_init;
-       }
+       else
+               bgp = XCALLOC(MTYPE_BGP, sizeof(struct bgp));
 
-       bgp = XCALLOC(MTYPE_BGP, sizeof(struct bgp));
        bgp->as = *as;
+
+       if (bgp->as_pretty)
+               XFREE(MTYPE_BGP_NAME, bgp->as_pretty);
        if (as_pretty)
                bgp->as_pretty = XSTRDUP(MTYPE_BGP_NAME, as_pretty);
        else
@@ -3422,6 +3424,9 @@ static struct bgp *bgp_create(as_t *as, const char *name,
        } else
                asn_str2asn_notation(bgp->as_pretty, NULL, &bgp->asnotation);
 
+       if (hidden)
+               goto peer_init;
+
        if (BGP_DEBUG(zebra, ZEBRA)) {
                if (inst_type == BGP_INSTANCE_TYPE_DEFAULT)
                        zlog_debug("Creating Default VRF, AS %s",