bgpd: no router bgp check candidate config

For `no router bgp` without ASN check candidate
config for default bgp instance presence to avoid
failure from checking backend db where bgp instance
may not be created.
This situation can be seen in transactional cli mode
with following config.

bharat(config)# router bgp 101
bharat(config-router)# exit
bharat(config)# no router bgp
% No BGP process is configured
bharat(config)# no router bgp
% No BGP process is configured
bharat(config)#

Signed-off-by: Chirag Shah <chirag@nvidia.com>
This commit is contained in:
Chirag Shah 2020-09-17 14:20:44 -07:00
parent 5e42cb2fb0
commit 4b63e358bc

View File

@ -1311,13 +1311,17 @@ DEFUN_YANG(no_router_bgp,
struct bgp *bgp;
const char *name = NULL;
char base_xpath[XPATH_MAXLEN];
const struct lyd_node *bgp_glb_dnode;
// "no router bgp" without an ASN
if (argc == 3) {
// Pending: Make VRF option available for ASN less config
bgp = bgp_get_default();
snprintf(base_xpath, sizeof(base_xpath), FRR_BGP_GLOBAL_XPATH,
"frr-bgp:bgp", "bgp", VRF_DEFAULT_NAME);
if (bgp == NULL) {
bgp_glb_dnode = yang_dnode_get(vty->candidate_config->dnode,
base_xpath);
if (!bgp_glb_dnode) {
vty_out(vty, "%% No BGP process is configured\n");
return CMD_WARNING_CONFIG_FAILED;
}
@ -1327,6 +1331,11 @@ DEFUN_YANG(no_router_bgp,
return CMD_WARNING_CONFIG_FAILED;
}
/* tcli mode bgp would not be set until apply stage. */
bgp = nb_running_get_entry(bgp_glb_dnode, NULL, false);
if (!bgp)
return CMD_SUCCESS;
if (bgp->l3vni) {
vty_out(vty, "%% Please unconfigure l3vni %u",
bgp->l3vni);