as_t local_as;
u_int32_t restart_time;
u_char afi_safi_count = 0;
- struct utsname names;
int adv_addpath_tx = 0;
/* Remember current pointer for Opt Parm Len. */
}
/* Hostname capability */
- uname(&names);
- if (names.nodename[0] != '\0') {
+ if (hostname_get()) {
SET_FLAG(peer->cap, PEER_CAP_HOSTNAME_ADV);
stream_putc(s, BGP_OPEN_OPT_CAP);
rcapp = stream_get_endp(s); /* Ptr to length placeholder */
stream_putc(s, CAPABILITY_CODE_FQDN);
capp = stream_get_endp(s);
stream_putc(s, 0); /* dummy len for now */
- len = strlen(names.nodename);
+ len = strlen(hostname_get());
if (len > BGP_MAX_HOSTNAME)
len = BGP_MAX_HOSTNAME;
stream_putc(s, len);
- stream_put(s, names.nodename, len);
-#ifdef HAVE_STRUCT_UTSNAME_DOMAINNAME
- if ((names.domainname[0] != '\0')
- && (strcmp(names.domainname, "(none)") != 0)) {
- len = strlen(names.domainname);
+ stream_put(s, hostname_get(), len);
+ if ((host.domainname)
+ && (strcmp(host.domainname, "(none)") != 0)) {
+ len = strlen(host.domainname);
if (len > BGP_MAX_HOSTNAME)
len = BGP_MAX_HOSTNAME;
stream_putc(s, len);
- stream_put(s, names.domainname, len);
+ stream_put(s, host.domainname, len);
} else
-#endif
- {
stream_putc(s, 0); /* 0 length */
- }
/* Set the lengths straight */
len = stream_get_endp(s) - rcapp - 1;
stream_putc_at(s, capp, len);
if (bgp_debug_neighbor_events(peer))
-#ifdef HAVE_STRUCT_UTSNAME_DOMAINNAME
zlog_debug(
"%s Sending hostname cap with hn = %s, dn = %s",
- peer->host, names.nodename, names.domainname);
-#else
- zlog_debug("%s Sending hostname cap with hn = %s",
- peer->host, names.nodename);
-#endif
+ peer->host, hostname_get(), host.domainname);
}
/* Sending base graceful-restart capability irrespective of the config
struct bgp *bgp;
afi_t afi;
safi_t safi;
- struct utsname names;
-
- uname(&names);
if ((bgp = XCALLOC(MTYPE_BGP, sizeof(struct bgp))) == NULL)
return NULL;
XFREE(MTYPE_BGP_PEER_HOST, bgp->peer_self->hostname);
bgp->peer_self->hostname = NULL;
}
- bgp->peer_self->hostname = XSTRDUP(MTYPE_BGP_PEER_HOST, names.nodename);
+ bgp->peer_self->hostname = XSTRDUP(MTYPE_BGP_PEER_HOST,
+ hostname_get());
if (bgp->peer_self->domainname != NULL) {
XFREE(MTYPE_BGP_PEER_HOST, bgp->peer_self->domainname);
bgp->peer_self->domainname = NULL;
}
-#ifdef HAVE_STRUCT_UTSNAME_DOMAINNAME
bgp->peer_self->domainname = XSTRDUP(MTYPE_BGP_PEER_HOST,
- names.domainname);
-#endif
+ domainname_get());
bgp->peer = list_new();
bgp->peer->cmp = (int (*)(void *, void *))peer_cmp;
bgp->peerhash = hash_create(peer_hash_key_make, peer_hash_same, NULL);
}
vty_out(vty, " * %s %s\n", sysid_print(isis->sysid),
- unix_hostname());
+ hostname_get());
return;
}
if (dyn)
sprintf((char *)id, "%.14s", dyn->hostname);
else if (!memcmp(isis->sysid, lsp_id, ISIS_SYS_ID_LEN) && dynhost)
- sprintf((char *)id, "%.14s", unix_hostname());
+ sprintf((char *)id, "%.14s", hostname_get());
else
memcpy(id, sysid_print(lsp_id), 15);
if (frag)
}
/* Dynamic Hostname */
if (area->dynhostname) {
- isis_tlvs_set_dynamic_hostname(lsp->tlvs, unix_hostname());
+ isis_tlvs_set_dynamic_hostname(lsp->tlvs, hostname_get());
lsp_debug("ISIS (%s): Adding dynamic hostname '%s'",
- area->area_tag, unix_hostname());
+ area->area_tag, hostname_get());
} else {
lsp_debug("ISIS (%s): Not adding dynamic hostname (disabled)",
area->area_tag);
return new_prefix;
}
-/*
- * Returns host.name if any, otherwise
- * it returns the system hostname.
- */
-const char *unix_hostname(void)
-{
- static struct utsname names;
- const char *hostname;
-
- hostname = host.name;
- if (!hostname) {
- uname(&names);
- hostname = names.nodename;
- }
-
- return hostname;
-}
-
/*
* Returns the dynamic hostname associated with the passed system ID.
* If no dynamic hostname found then returns formatted system ID.
/* For our system ID return our host name */
if (memcmp(sysid, isis->sysid, ISIS_SYS_ID_LEN) == 0)
- return unix_hostname();
+ return hostname_get();
dyn = dynhn_find_by_id(sysid);
if (dyn)
* misc functions
*/
unsigned long isis_jitter(unsigned long timer, unsigned long jitter);
-const char *unix_hostname(void);
/*
* macros
lsp = lsp_search(
lspid,
area->lspdb[level]);
- } else if (strncmp(unix_hostname(),
+ } else if (strncmp(hostname_get(),
sysid, 15)
== 0) {
memcpy(lspid, isis->sysid,
/* Host information structure. */
struct host host;
+/*
+ * Returns host.name if any, otherwise
+ * it returns the system hostname.
+ */
+const char *hostname_get(void)
+{
+ return host.name;
+}
+
+/*
+ * Returns unix domainname
+ */
+const char *domainname_get(void)
+{
+ return host.domainname;
+}
+
/* Standard command node structures. */
static struct cmd_node auth_node = {
AUTH_NODE, "Password: ",
/* 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 (hostname_get())
+ vty_out(vty, "hostname %s\n", hostname_get());
if (host.encrypt) {
if (host.password_encrypt)
"Displays zebra version\n")
{
vty_out(vty, "%s %s (%s).\n", FRR_FULL_NAME, FRR_VERSION,
- host.name ? host.name : "");
+ hostname_get() ? hostname_get() : "");
vty_out(vty, "%s%s\n", FRR_COPYRIGHT, GIT_INFO);
vty_out(vty, "configured with:\n %s\n", FRR_CONFIG_ARGS);
* 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();
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
+ host.domainname = XSTRDUP(MTYPE_HOST, names.domainname);
+#else
+ host.domainname = NULL;
+#endif
host.password = NULL;
host.enable = NULL;
host.logfile = NULL;
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)
/* Host name of this router. */
char *name;
+ /* Domain name of this router */
+ char *domainname;
+
/* Password for vty interface. */
char *password;
char *password_encrypt;
extern int cmd_list_cmds(struct vty *vty, int do_permute);
extern int cmd_hostname_set(const char *hostname);
+extern const char *hostname_get(void);
+extern const char *domainname_get(void);
/* NOT safe for general use; call this only if DEV_BUILD! */
extern void grammar_sandbox_init(void);
/* Library inits. */
cmd_init(1);
host.name = strdup("test");
+ host.domainname = strdup("testdomainname");
vty_init(master);
memory_init();
/* 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),
+ hostname_get());
}
}
char *vtysh_prompt(void)
{
- static struct utsname names;
static char buf[100];
- const char *hostname;
- extern struct host host;
-
- hostname = host.name;
-
- if (!hostname) {
- if (!names.nodename[0])
- uname(&names);
- hostname = names.nodename;
- }
-
- snprintf(buf, sizeof buf, cmd_prompt(vty->node), hostname);
+ snprintf(buf, sizeof buf, cmd_prompt(vty->node), hostname_get());
return buf;
}
void vtysh_config_write()
{
char line[81];
- extern struct host host;
- if (host.name) {
- sprintf(line, "hostname %s", host.name);
+ if (hostname_get()) {
+ sprintf(line, "hostname %s", hostname_get());
vtysh_config_parse_line(NULL, line);
}
if (vtysh_write_integrated == WRITE_INTEGRATED_NO)