add support for reading of configuration file to VTY
This commit is contained in:
parent
07dc73d4f7
commit
c7c19822fd
|
@ -129,6 +129,7 @@ static inline char *vty_newline(struct vty *vty)
|
|||
|
||||
/* Prototypes. */
|
||||
void vty_init (void);
|
||||
int vty_read_config_file(const char *file_name);
|
||||
void vty_init_vtysh (void);
|
||||
void vty_reset (void);
|
||||
struct vty *vty_new (void);
|
||||
|
@ -136,8 +137,7 @@ struct vty *vty_create (int vty_sock, void *priv);
|
|||
int vty_out (struct vty *, const char *, ...) PRINTF_ATTRIBUTE(2, 3);
|
||||
int vty_out_newline(struct vty *);
|
||||
int vty_read(struct vty *vty);
|
||||
void vty_read_config (char *, char *);
|
||||
void vty_time_print (struct vty *, int);
|
||||
//void vty_time_print (struct vty *, int);
|
||||
void vty_close (struct vty *);
|
||||
char *vty_get_cwd (void);
|
||||
void vty_log (const char *level, const char *proto, const char *fmt, va_list);
|
||||
|
|
|
@ -507,7 +507,6 @@ static char *zencrypt(const char *passwd)
|
|||
/* This function write configuration of this host. */
|
||||
static int config_write_host(struct vty *vty)
|
||||
{
|
||||
#if 0
|
||||
if (host.name)
|
||||
vty_out(vty, "hostname %s%s", host.name, VTY_NEWLINE);
|
||||
|
||||
|
@ -527,6 +526,7 @@ static int config_write_host(struct vty *vty)
|
|||
VTY_NEWLINE);
|
||||
}
|
||||
|
||||
#if 0
|
||||
if (zlog_default->default_lvl != LOG_DEBUG) {
|
||||
vty_out(vty, "! N.B. The 'log trap' command is deprecated.%s",
|
||||
VTY_NEWLINE);
|
||||
|
@ -579,7 +579,7 @@ static int config_write_host(struct vty *vty)
|
|||
|
||||
if (zlog_default->record_priority == 1)
|
||||
vty_out(vty, "log record-priority%s", VTY_NEWLINE);
|
||||
|
||||
#endif
|
||||
if (host.advanced)
|
||||
vty_out(vty, "service advanced-vty%s", VTY_NEWLINE);
|
||||
|
||||
|
@ -596,7 +596,6 @@ static int config_write_host(struct vty *vty)
|
|||
else if (!host.motd)
|
||||
vty_out(vty, "no banner motd%s", VTY_NEWLINE);
|
||||
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -1373,6 +1373,39 @@ int vty_read(struct vty *vty)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* Read up configuration file */
|
||||
static int
|
||||
vty_read_file(FILE *confp)
|
||||
{
|
||||
int ret;
|
||||
struct vty *vty;
|
||||
|
||||
vty = vty_new();
|
||||
vty->fd = 0;
|
||||
vty->type = VTY_FILE;
|
||||
vty->node = CONFIG_NODE;
|
||||
|
||||
ret = config_from_file(vty, confp);
|
||||
|
||||
if (ret != CMD_SUCCESS) {
|
||||
switch (ret) {
|
||||
case CMD_ERR_AMBIGUOUS:
|
||||
fprintf(stderr, "Ambiguous command.\n");
|
||||
break;
|
||||
case CMD_ERR_NO_MATCH:
|
||||
fprintf(stderr, "Ther is no such command.\n");
|
||||
break;
|
||||
}
|
||||
fprintf(stderr, "Error occurred during reading below "
|
||||
"line:\n%s\n", vty->buf);
|
||||
vty_close(vty);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
vty_close(vty);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Create new vty structure. */
|
||||
struct vty *
|
||||
vty_create (int vty_sock, void *priv)
|
||||
|
@ -1648,7 +1681,19 @@ void vty_init()
|
|||
#endif
|
||||
}
|
||||
|
||||
static __attribute__((constructor)) void on_dso_load_vty(void)
|
||||
int vty_read_config_file(const char *file_name)
|
||||
{
|
||||
tall_vty_ctx = talloc_named_const(NULL, 1, "vty");
|
||||
FILE *cfile;
|
||||
int rc;
|
||||
|
||||
cfile = fopen(file_name, "r");
|
||||
if (!cfile)
|
||||
return -ENOENT;
|
||||
|
||||
rc = vty_read_file(cfile);
|
||||
fclose(cfile);
|
||||
|
||||
host_config_set(file_name);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue