diff options
author | Harald Welte <laforge@netfilter.org> | 2009-08-07 13:28:08 +0200 |
---|---|---|
committer | Harald Welte <laforge@netfilter.org> | 2009-08-07 13:28:08 +0200 |
commit | c7c19822fd43a01c54a445addb1e8a82067d82a4 (patch) | |
tree | 20e07c9fbe70fc65e17d62d76e325f6ef3d55e52 /openbsc/src/vty/vty.c | |
parent | 07dc73d4f74a9cb7eddc6259fdb7b095f87e52c1 (diff) |
add support for reading of configuration file to VTY
Diffstat (limited to 'openbsc/src/vty/vty.c')
-rw-r--r-- | openbsc/src/vty/vty.c | 49 |
1 files changed, 47 insertions, 2 deletions
diff --git a/openbsc/src/vty/vty.c b/openbsc/src/vty/vty.c index 9962474c8..5472fa05a 100644 --- a/openbsc/src/vty/vty.c +++ b/openbsc/src/vty/vty.c @@ -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; } |