]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: don't use operational state in "router bgp" command
authorIgor Ryzhov <iryzhov@nfware.com>
Sun, 14 Mar 2021 17:04:42 +0000 (20:04 +0300)
committerIgor Ryzhov <iryzhov@nfware.com>
Tue, 23 Mar 2021 17:50:05 +0000 (20:50 +0300)
Instead of using bgp_get_default which refers to operational state, we
can check existence of the default node using only candidate config.
The same thing is done in "no router bgp" command.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
bgpd/bgp_vty.c

index 934d176e5ee668d9e5332c66ac969bf5b70cc962..de48ba23575e8bf296dbd7bfb4c69a215567d2df 100644 (file)
@@ -1324,16 +1324,19 @@ DEFUN_YANG_NOSH(router_bgp,
        as_t as;
        struct bgp *bgp;
        const char *name = NULL;
-       char as_str[12] = {'\0'};
        enum bgp_instance_type inst_type;
        char base_xpath[XPATH_MAXLEN];
+       const struct lyd_node *bgp_glb_dnode;
 
        // "router bgp" without an ASN
        if (argc == 2) {
                // 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;
                }
@@ -1343,31 +1346,19 @@ DEFUN_YANG_NOSH(router_bgp,
                        return CMD_WARNING_CONFIG_FAILED;
                }
 
-               snprintf(base_xpath, sizeof(base_xpath), FRR_BGP_GLOBAL_XPATH,
-                        "frr-bgp:bgp", "bgp", VRF_DEFAULT_NAME);
+               as = yang_dnode_get_uint32(bgp_glb_dnode, "./global/local-as");
 
-               nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
-               snprintf(as_str, 12, "%d", bgp->as);
-               nb_cli_enqueue_change(vty, "./global/local-as", NB_OP_MODIFY,
-                                     as_str);
-               if (bgp->inst_type == BGP_INSTANCE_TYPE_VIEW) {
-                       nb_cli_enqueue_change(vty,
-                                             "./global/instance-type-view",
-                                             NB_OP_MODIFY, "true");
-               }
+               VTY_PUSH_XPATH(BGP_NODE, base_xpath);
 
-               nb_cli_pending_commit_check(vty);
-               ret = nb_cli_apply_changes(vty, base_xpath);
-               if (ret == CMD_SUCCESS) {
-                       VTY_PUSH_XPATH(BGP_NODE, base_xpath);
-
-                       /*
-                        * For backward compatibility with old commands we still
-                        * need to use the qobj infrastructure.
-                        */
+               /*
+                * For backward compatibility with old commands we still
+                * need to use the qobj infrastructure.
+                */
+               bgp = bgp_lookup(as, NULL);
+               if (bgp)
                        VTY_PUSH_CONTEXT(BGP_NODE, bgp);
-               }
-               return ret;
+
+               return CMD_SUCCESS;
        }
 
        // "router bgp X"