]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: no router bgp check candidate config 6904/head
authorChirag Shah <chirag@nvidia.com>
Thu, 17 Sep 2020 21:20:44 +0000 (14:20 -0700)
committerChirag Shah <chirag@nvidia.com>
Sat, 3 Oct 2020 18:25:38 +0000 (11:25 -0700)
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>
bgpd/bgp_vty.c

index 2a5ef34d09bc7e12895042c3a6552e167be02d16..38dad59e601cf07a38da84570eac645d432b18e4 100644 (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);