summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorDavid Lamparter <equinox@diac24.net>2017-08-29 20:03:48 +0200
committerGitHub <noreply@github.com>2017-08-29 20:03:48 +0200
commit14f6aefe4347244564b6118e7589ce68ac8a8281 (patch)
tree86f1df4b887dbf80fad6802770f598fdc4202f68 /lib
parentMerge pull request #1072 from opensourcerouting/isisd-fix-confusion-purge (diff)
parentMerge branch 'master' into dev-master (diff)
downloadfrr-14f6aefe4347244564b6118e7589ce68ac8a8281.tar.xz
frr-14f6aefe4347244564b6118e7589ce68ac8a8281.zip
Merge pull request #998 from mkanjari/dev-master
Dev master
Diffstat (limited to 'lib')
-rw-r--r--lib/command.c74
-rw-r--r--lib/command.h6
-rw-r--r--lib/grammar_sandbox_main.c1
-rw-r--r--lib/vty.c11
4 files changed, 79 insertions, 13 deletions
diff --git a/lib/command.c b/lib/command.c
index c86025a3b..24095de4f 100644
--- a/lib/command.c
+++ b/lib/command.c
@@ -125,6 +125,23 @@ vector cmdvec = NULL;
/* Host information structure. */
struct host host;
+/*
+ * Returns host.name if any, otherwise
+ * it returns the system hostname.
+ */
+const char *cmd_hostname_get(void)
+{
+ return host.name;
+}
+
+/*
+ * Returns unix domainname
+ */
+const char *cmd_domainname_get(void)
+{
+ return host.domainname;
+}
+
/* Standard command node structures. */
static struct cmd_node auth_node = {
AUTH_NODE, "Password: ",
@@ -475,8 +492,8 @@ static char *zencrypt(const char *passwd)
/* This function write configuration of this host. */
static int config_write_host(struct vty *vty)
{
- if (host.name)
- vty_out(vty, "hostname %s\n", host.name);
+ if (cmd_hostname_get())
+ vty_out(vty, "hostname %s\n", cmd_hostname_get());
if (host.encrypt) {
if (host.password_encrypt)
@@ -1411,7 +1428,7 @@ DEFUN (show_version,
"Displays zebra version\n")
{
vty_out(vty, "%s %s (%s).\n", FRR_FULL_NAME, FRR_VERSION,
- host.name ? host.name : "");
+ 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);
@@ -1745,6 +1762,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);
@@ -2515,9 +2566,12 @@ void install_default(enum node_type node)
* terminal = -1 -- watchfrr / no logging, but minimal config control */
void cmd_init(int terminal)
{
+ struct utsname names;
+
if (array_size(node_names) != NODE_TYPE_MAX)
assert(!"Update the CLI node description array!");
+ uname(&names);
qobj_init();
varhandlers = list_new();
@@ -2526,7 +2580,15 @@ void cmd_init(int terminal)
cmdvec = vector_init(VECTOR_MIN_SIZE);
/* Default host value settings. */
- host.name = NULL;
+ host.name = XSTRDUP(MTYPE_HOST, names.nodename);
+#ifdef HAVE_STRUCT_UTSNAME_DOMAINNAME
+ if ((strcmp(names.domainname, "(none)") == 0))
+ host.domainname = NULL;
+ else
+ host.domainname = XSTRDUP(MTYPE_HOST, names.domainname);
+#else
+ host.domainname = NULL;
+#endif
host.password = NULL;
host.enable = NULL;
host.logfile = NULL;
@@ -2579,6 +2641,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);
install_element(CONFIG_NODE, &debug_memstats_cmd);
@@ -2644,6 +2708,8 @@ void cmd_terminate()
if (host.name)
XFREE(MTYPE_HOST, host.name);
+ if (host.domainname)
+ XFREE(MTYPE_HOST, host.domainname);
if (host.password)
XFREE(MTYPE_HOST, host.password);
if (host.password_encrypt)
diff --git a/lib/command.h b/lib/command.h
index 8f12e2aab..1c6938523 100644
--- a/lib/command.h
+++ b/lib/command.h
@@ -41,6 +41,9 @@ struct host {
/* Host name of this router. */
char *name;
+ /* Domainname of this router */
+ char *domainname;
+
/* Password for vty interface. */
char *password;
char *password_encrypt;
@@ -398,7 +401,10 @@ extern void cmd_terminate(void);
extern void cmd_exit(struct vty *vty);
extern int cmd_list_cmds(struct vty *vty, int do_permute);
+extern int cmd_domainname_set(const char *domainname);
extern int cmd_hostname_set(const char *hostname);
+extern const char *cmd_hostname_get(void);
+extern const char *cmd_domainname_get(void);
/* NOT safe for general use; call this only if DEV_BUILD! */
extern void grammar_sandbox_init(void);
diff --git a/lib/grammar_sandbox_main.c b/lib/grammar_sandbox_main.c
index 89b0993d1..264c7c48f 100644
--- a/lib/grammar_sandbox_main.c
+++ b/lib/grammar_sandbox_main.c
@@ -50,6 +50,7 @@ int main(int argc, char **argv)
/* Library inits. */
cmd_init(1);
host.name = strdup("test");
+ host.domainname = strdup("testdomainname");
vty_init(master);
memory_init();
diff --git a/lib/vty.c b/lib/vty.c
index 59a882535..cec5a916f 100644
--- a/lib/vty.c
+++ b/lib/vty.c
@@ -250,16 +250,9 @@ void vty_hello(struct vty *vty)
/* Put out prompt and wait input from user. */
static void vty_prompt(struct vty *vty)
{
- struct utsname names;
- const char *hostname;
-
if (vty->type == VTY_TERM) {
- hostname = host.name;
- if (!hostname) {
- uname(&names);
- hostname = names.nodename;
- }
- vty_out(vty, cmd_prompt(vty->node), hostname);
+ vty_out(vty, cmd_prompt(vty->node),
+ cmd_hostname_get());
}
}