mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-14 12:41:21 +00:00
bgpd: fix crash on "no import vrf" if no default bgp instance
Tripped over a crash running the cli_crawler that occurred when the sequence was doing "import vrf NAME" and "no import vrf NAME" inside a vrf but a default bgp instance had not been created. This fix auto-creates the default instance if the "import vrf NAME" is entered and a default instance does not exist. Ticket: CM-20532 Signed-off-by: Don Slice <dslice@cumulusnetworks.com> Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
parent
e49840c895
commit
79ef8664a5
@ -6664,7 +6664,9 @@ DEFPY (bgp_imexport_vrf,
|
|||||||
{
|
{
|
||||||
VTY_DECLVAR_CONTEXT(bgp, bgp);
|
VTY_DECLVAR_CONTEXT(bgp, bgp);
|
||||||
struct listnode *node;
|
struct listnode *node;
|
||||||
struct bgp *vrf_bgp;
|
struct bgp *vrf_bgp, *bgp_default;
|
||||||
|
int32_t ret = 0;
|
||||||
|
as_t as = bgp->as;
|
||||||
bool remove = false;
|
bool remove = false;
|
||||||
int32_t idx = 0;
|
int32_t idx = 0;
|
||||||
char *vname;
|
char *vname;
|
||||||
@ -6678,19 +6680,26 @@ DEFPY (bgp_imexport_vrf,
|
|||||||
afi = bgp_node_afi(vty);
|
afi = bgp_node_afi(vty);
|
||||||
safi = bgp_node_safi(vty);
|
safi = bgp_node_safi(vty);
|
||||||
|
|
||||||
|
bgp_default = bgp_get_default();
|
||||||
|
if (!bgp_default) {
|
||||||
|
/* Auto-create assuming the same AS */
|
||||||
|
ret = bgp_get(&bgp_default, &as, NULL,
|
||||||
|
BGP_INSTANCE_TYPE_DEFAULT);
|
||||||
|
|
||||||
|
if (ret) {
|
||||||
|
vty_out(vty,
|
||||||
|
"VRF default is not configured as a bgp instance\n");
|
||||||
|
return CMD_WARNING;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
vrf_bgp = bgp_lookup_by_name(import_name);
|
vrf_bgp = bgp_lookup_by_name(import_name);
|
||||||
if (!vrf_bgp) {
|
if (!vrf_bgp) {
|
||||||
int32_t ret = 0;
|
if (strcmp(import_name, BGP_DEFAULT_NAME) == 0)
|
||||||
as_t as = bgp->as;
|
vrf_bgp = bgp_default;
|
||||||
|
else
|
||||||
if (strcmp(import_name, BGP_DEFAULT_NAME) == 0) {
|
|
||||||
vrf_bgp = bgp_get_default();
|
|
||||||
if (!vrf_bgp)
|
|
||||||
ret = bgp_get(&vrf_bgp, &as, NULL, BGP_INSTANCE_TYPE_DEFAULT);
|
|
||||||
} else {
|
|
||||||
/* Auto-create assuming the same AS */
|
/* Auto-create assuming the same AS */
|
||||||
ret = bgp_get(&vrf_bgp, &as, import_name, bgp_type);
|
ret = bgp_get(&vrf_bgp, &as, import_name, bgp_type);
|
||||||
}
|
|
||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
vty_out(vty,
|
vty_out(vty,
|
||||||
|
Loading…
Reference in New Issue
Block a user