summaryrefslogtreecommitdiff
path: root/lib/command.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/command.c')
-rw-r--r--lib/command.c51
1 files changed, 45 insertions, 6 deletions
diff --git a/lib/command.c b/lib/command.c
index 2d262c1146..9421fadc0b 100644
--- a/lib/command.c
+++ b/lib/command.c
@@ -128,7 +128,7 @@ struct host host;
* Returns host.name if any, otherwise
* it returns the system hostname.
*/
-const char *hostname_get(void)
+const char *cmd_hostname_get(void)
{
return host.name;
}
@@ -136,7 +136,7 @@ const char *hostname_get(void)
/*
* Returns unix domainname
*/
-const char *domainname_get(void)
+const char *cmd_domainname_get(void)
{
return host.domainname;
}
@@ -487,8 +487,8 @@ static char *zencrypt(const char *passwd)
/* This function write configuration of this host. */
static int config_write_host(struct vty *vty)
{
- if (hostname_get())
- vty_out(vty, "hostname %s\n", hostname_get());
+ if (cmd_hostname_get())
+ vty_out(vty, "hostname %s\n", cmd_hostname_get());
if (host.encrypt) {
if (host.password_encrypt)
@@ -1420,7 +1420,7 @@ DEFUN (show_version,
"Displays zebra version\n")
{
vty_out(vty, "%s %s (%s).\n", FRR_FULL_NAME, FRR_VERSION,
- hostname_get() ? hostname_get() : "");
+ cmd_hostname_get() ? cmd_hostname_get() : "");
vty_out(vty, "%s%s\n", FRR_COPYRIGHT, GIT_INFO);
vty_out(vty, "configured with:\n %s\n", FRR_CONFIG_ARGS);
@@ -1754,6 +1754,40 @@ DEFUN (show_startup_config,
return CMD_SUCCESS;
}
+int cmd_domainname_set(const char *domainname)
+{
+ XFREE(MTYPE_HOST, host.domainname);
+ host.domainname = domainname ? XSTRDUP(MTYPE_HOST, domainname) : NULL;
+ return CMD_SUCCESS;
+}
+
+/* Hostname configuration */
+DEFUN (config_domainname,
+ domainname_cmd,
+ "domainname WORD",
+ "Set system's domain name\n"
+ "This system's domain name\n")
+{
+ struct cmd_token *word = argv[1];
+
+ if (!isalpha((int)word->arg[0])) {
+ vty_out(vty, "Please specify string starting with alphabet\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ return cmd_domainname_set(word->arg);
+}
+
+DEFUN (config_no_domainname,
+ no_domainname_cmd,
+ "no domainname [DOMAINNAME]",
+ NO_STR
+ "Reset system's domain name\n"
+ "domain name of this router\n")
+{
+ return cmd_domainname_set(NULL);
+}
+
int cmd_hostname_set(const char *hostname)
{
XFREE(MTYPE_HOST, host.name);
@@ -2529,7 +2563,10 @@ void cmd_init(int terminal)
/* Default host value settings. */
host.name = XSTRDUP(MTYPE_HOST, names.nodename);
#ifdef HAVE_STRUCT_UTSNAME_DOMAINNAME
- host.domainname = XSTRDUP(MTYPE_HOST, names.domainname);
+ if ((strcmp(names.domainname, "(none)") == 0))
+ host.domainname = NULL;
+ else
+ host.domainname = XSTRDUP(MTYPE_HOST, names.domainname);
#else
host.domainname = NULL;
#endif
@@ -2584,6 +2621,8 @@ void cmd_init(int terminal)
install_element(CONFIG_NODE, &hostname_cmd);
install_element(CONFIG_NODE, &no_hostname_cmd);
+ install_element(CONFIG_NODE, &domainname_cmd);
+ install_element(CONFIG_NODE, &no_domainname_cmd);
install_element(CONFIG_NODE, &frr_version_defaults_cmd);
if (terminal > 0) {