]> git.proxmox.com Git - mirror_frr.git/blobdiff - lib/lib_vty.c
lib: new defaults logic
[mirror_frr.git] / lib / lib_vty.c
index 932b465015572cd1287ae04e6bffcd1a08f01dd5..787da08e28829d7e199369035fb8066d08f269d0 100644 (file)
@@ -35,6 +35,7 @@
 #include "log.h"
 #include "memory.h"
 #include "module.h"
+#include "defaults.h"
 #include "lib_vty.h"
 
 /* Looking up memory status from vty interface. */
@@ -177,8 +178,60 @@ DEFUN_NOSH (show_modules,
        return CMD_SUCCESS;
 }
 
+DEFUN (frr_defaults,
+       frr_defaults_cmd,
+       "frr defaults PROFILE...",
+       "FRRouting global parameters\n"
+       "set of configuration defaults used\n"
+       "profile string\n")
+{
+       char *profile = argv_concat(argv, argc, 2);
+       int rv = CMD_SUCCESS;
+
+       if (!frr_defaults_profile_valid(profile)) {
+               vty_out(vty, "%% WARNING: profile %s is not known in this version\n",
+                       profile);
+               rv = CMD_WARNING;
+       }
+       frr_defaults_profile_set(profile);
+       XFREE(MTYPE_TMP, profile);
+       return rv;
+}
+
+DEFUN (frr_version,
+       frr_version_cmd,
+       "frr version VERSION...",
+       "FRRouting global parameters\n"
+       "version configuration was written by\n"
+       "version string\n")
+{
+       char *version = argv_concat(argv, argc, 2);
+
+       frr_defaults_version_set(version);
+       XFREE(MTYPE_TMP, version);
+       return CMD_SUCCESS;
+}
+
+static void defaults_autocomplete(vector comps, struct cmd_token *token)
+{
+       const char **p;
+
+       for (p = frr_defaults_profiles; *p; p++)
+               vector_set(comps, XSTRDUP(MTYPE_COMPLETION, *p));
+}
+
+static const struct cmd_variable_handler default_var_handlers[] = {
+       {.tokenname = "PROFILE", .completions = defaults_autocomplete},
+       {.completions = NULL},
+};
+
 void lib_cmd_init(void)
 {
+       cmd_variable_handler_register(default_var_handlers);
+
+       install_element(CONFIG_NODE, &frr_defaults_cmd);
+       install_element(CONFIG_NODE, &frr_version_cmd);
+
        install_element(VIEW_NODE, &show_memory_cmd);
        install_element(VIEW_NODE, &show_modules_cmd);
 }