diff options
Diffstat (limited to 'lib/command.c')
| -rw-r--r-- | lib/command.c | 51 |
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) { |
