]> git.proxmox.com Git - mirror_frr.git/blobdiff - lib/command.c
Merge pull request #11469 from donaldsharp/fdev2
[mirror_frr.git] / lib / command.c
index 9cf93ea19236b4a13c75fb1fa744ef46df72bbcc..cbecc815741e3e94bb4cd39f3be3407aaddcb813 100644 (file)
@@ -106,6 +106,21 @@ const char *cmd_domainname_get(void)
        return host.domainname;
 }
 
+const char *cmd_system_get(void)
+{
+       return host.system;
+}
+
+const char *cmd_release_get(void)
+{
+       return host.release;
+}
+
+const char *cmd_version_get(void)
+{
+       return host.version;
+}
+
 static int root_on_exit(struct vty *vty);
 
 /* Standard command node structures. */
@@ -300,7 +315,7 @@ void _install_element(enum node_type ntype, const struct cmd_element *cmd)
                return;
        }
 
-       assert(hash_get(cnode->cmd_hash, (void *)cmd, hash_alloc_intern));
+       (void)hash_get(cnode->cmd_hash, (void *)cmd, hash_alloc_intern);
 
        if (cnode->graph_built || !defer_cli_tree) {
                struct graph *graph = graph_new();
@@ -414,7 +429,6 @@ static char *zencrypt(const char *passwd)
 {
        char salt[6];
        struct timeval tv;
-       char *crypt(const char *, const char *);
 
        gettimeofday(&tv, 0);
 
@@ -430,11 +444,15 @@ static bool full_cli;
 /* This function write configuration of this host. */
 static int config_write_host(struct vty *vty)
 {
-       if (cmd_hostname_get())
-               vty_out(vty, "hostname %s\n", cmd_hostname_get());
+       const char *name;
 
-       if (cmd_domainname_get())
-               vty_out(vty, "domainname %s\n", cmd_domainname_get());
+       name = cmd_hostname_get();
+       if (name && name[0] != '\0')
+               vty_out(vty, "hostname %s\n", name);
+
+       name = cmd_domainname_get();
+       if (name && name[0] != '\0')
+               vty_out(vty, "domainname %s\n", name);
 
        /* The following are all configuration commands that are not sent to
         * watchfrr.  For instance watchfrr is hardcoded to log to syslog so
@@ -1398,8 +1416,9 @@ DEFUN (show_version,
        SHOW_STR
        "Displays zebra version\n")
 {
-       vty_out(vty, "%s %s (%s).\n", FRR_FULL_NAME, FRR_VERSION,
-               cmd_hostname_get() ? cmd_hostname_get() : "");
+       vty_out(vty, "%s %s (%s) on %s(%s).\n", FRR_FULL_NAME, FRR_VERSION,
+               cmd_hostname_get() ? cmd_hostname_get() : "", cmd_system_get(),
+               cmd_release_get());
        vty_out(vty, "%s%s\n", FRR_COPYRIGHT, GIT_INFO);
 #ifdef ENABLE_VERSION_BUILD_CONFIG
        vty_out(vty, "configured with:\n    %s\n", FRR_CONFIG_ARGS);
@@ -2223,9 +2242,9 @@ DEFUN (banner_motd_file,
        int cmd = cmd_banner_motd_file(filename);
 
        if (cmd == CMD_ERR_NO_FILE)
-               vty_out(vty, "%s does not exist", filename);
+               vty_out(vty, "%s does not exist\n", filename);
        else if (cmd == CMD_WARNING_CONFIG_FAILED)
-               vty_out(vty, "%s must be in %s", filename, SYSCONFDIR);
+               vty_out(vty, "%s must be in %s\n", filename, SYSCONFDIR);
 
        return cmd;
 }
@@ -2445,6 +2464,10 @@ void cmd_init(int terminal)
 
        /* Default host value settings. */
        host.name = XSTRDUP(MTYPE_HOST, names.nodename);
+       host.system = XSTRDUP(MTYPE_HOST, names.sysname);
+       host.release = XSTRDUP(MTYPE_HOST, names.release);
+       host.version = XSTRDUP(MTYPE_HOST, names.version);
+
 #ifdef HAVE_STRUCT_UTSNAME_DOMAINNAME
        if ((strcmp(names.domainname, "(none)") == 0))
                host.domainname = NULL;
@@ -2563,6 +2586,9 @@ void cmd_terminate(void)
        }
 
        XFREE(MTYPE_HOST, host.name);
+       XFREE(MTYPE_HOST, host.system);
+       XFREE(MTYPE_HOST, host.release);
+       XFREE(MTYPE_HOST, host.version);
        XFREE(MTYPE_HOST, host.domainname);
        XFREE(MTYPE_HOST, host.password);
        XFREE(MTYPE_HOST, host.password_encrypt);