diff options
author | Andreas.Eversberg <jolly@eversberg.eu> | 2011-11-10 23:09:35 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2011-11-12 23:23:36 +0100 |
commit | f948dbc442c44c402d6559bdd746f5ef8d01fff2 (patch) | |
tree | 609e49ccbe175144070371f53567023d817e16c9 | |
parent | dc3be0a6533be782c76f23ce653f4fc683b3b4f1 (diff) |
vty: Fixed vty_down_level to move down from config nodes
When using ^D at config nodes above the CONFIG_NODE, the
go_parent_cb function is used to go down by one node. This
is equivalent to "exit" command.
Written-by: Andreas.Eversberg <jolly@eversberg.eu>
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
-rw-r--r-- | include/osmocom/vty/vty.h | 1 | ||||
-rw-r--r-- | src/vty/vty.c | 8 |
2 files changed, 6 insertions, 3 deletions
diff --git a/include/osmocom/vty/vty.h b/include/osmocom/vty/vty.h index ffe3c591..83506c5e 100644 --- a/include/osmocom/vty/vty.h +++ b/include/osmocom/vty/vty.h @@ -176,6 +176,7 @@ int vty_shell_serv (struct vty *); void vty_hello (struct vty *); void *vty_current_index(struct vty *); int vty_current_node(struct vty *vty); +enum node_type vty_go_parent(struct vty *vty); extern void *tall_vty_ctx; diff --git a/src/vty/vty.c b/src/vty/vty.c index 5f5e6a4c..da035969 100644 --- a/src/vty/vty.c +++ b/src/vty/vty.c @@ -802,9 +802,11 @@ static void vty_backward_word(struct vty *vty) static void vty_down_level(struct vty *vty) { vty_out(vty, "%s", VTY_NEWLINE); - /* FIXME: we need to call the exit function of the specific node - * in question, not this generic one that doesn't know all nodes */ - (*config_exit_cmd.func) (NULL, vty, 0, NULL); + /* call the exit function of the specific node */ + if (vty->node > CONFIG_NODE) + vty_go_parent(vty); + else + (*config_exit_cmd.func) (NULL, vty, 0, NULL); vty_prompt(vty); vty->cp = 0; } |