diff options
Diffstat (limited to 'lib/uty.h')
-rw-r--r-- | lib/uty.h | 154 |
1 files changed, 94 insertions, 60 deletions
@@ -43,16 +43,56 @@ * * vty * command + * command_queue * log * * and which is not for use elsewhere. * - * The two: vty_io and vty_cli are treated as private to vty. So anything - * there that is used in command or log is published here. (Nobody other - * than vty.c/vty_io.c/vty_cli.c will include either vty_io.h or vty_cli.h.) + * There are also: + * + * vty_io + * vty_cli + * + * Which are the "immediate family" of vty: + * + * * *nothing* in their ".h" is for use anywhere except the immediate family. + * + * * things for use within the rest of the family are published here. */ /*============================================================================== + * Variables in vty.c -- used in any of the family + */ +extern vty_io vio_list_base ; +extern vty_io vio_monitors_base ; +extern vty_io vio_death_watch ; + +union vty_watch_dog +{ + qtimer qnexus ; /* when running qnexus */ + struct thread* thread; /* when running threads */ + void* anon ; +}; + +extern union vty_watch_dog vty_watch_dog ; + +extern struct thread_master* vty_master ; + +extern unsigned long vty_timeout_val ; + +extern bool vty_config ; + +extern bool no_password_check ; +extern const bool restricted_mode_default ; +extern bool restricted_mode ; + +char *vty_accesslist_name ; +char *vty_ipv6_accesslist_name ; + +extern qpn_nexus vty_cli_nexus ; +extern qpn_nexus vty_cmd_nexus ; + +/*============================================================================== * To make vty qpthread safe we use a single mutex. * * vty and log recurse through each other, so the same mutex is used @@ -80,7 +120,7 @@ extern qpt_mutex_t vty_mutex ; #if VTY_DEBUG extern int vty_lock_count ; -extern int vty_lock_assert_fail ; +extern int vty_assert_fail ; #endif @@ -97,24 +137,45 @@ VTY_UNLOCK(void) { if (VTY_DEBUG) --vty_lock_count ; - qpt_mutex_lock(&vty_mutex) ; + qpt_mutex_unlock(&vty_mutex) ; } ; +/* For debug (and documentation) purposes, will VTY_ASSERT_LOCKED where that + * is required. + * + * In some cases, need also to be running in the CLI thread as well. + */ #if VTY_DEBUG Inline void -VTY_ASSERT_LOCKED(void) +VTY_ASSERT_FAILED(void) { - if (vty_lock_count == 0 && !vty_lock_assert_fail) + if (vty_assert_fail == 0) ; { - vty_lock_assert_fail = 1; - assert(0); - } + vty_assert_fail = 1 ; + assert(0) ; + } ; +} ; + +Inline void +VTY_ASSERT_LOCKED(void) +{ + if (vty_lock_count == 0) + VTY_ASSERT_FAILED() ; +} ; + +Inline void +VTY_ASSERT_CLI_THREAD(void) +{ + if (qpthreads_enabled) + if (!qpt_thread_is_self(vty_cli_nexus->thread_id)) + VTY_ASSERT_FAILED() ; } ; #else #define VTY_ASSERT_LOCKED() +#define VTY_ASSERT_CLI_THREAD() #endif @@ -131,75 +192,48 @@ enum cli_do cli_do_ctrl_d, /* received ^d on empty line */ cli_do_ctrl_z, /* received ^z */ + cli_do_eof, /* hit "EOF" */ + cli_do_count /* number of different cli_do_xxx */ } ; /*============================================================================== - * Variables in vty.c -- used in any of the family - */ -extern vty_io vio_list_base ; -extern vty_io vio_monitors_base ; -extern vty_io vio_death_watch ; - -union vty_watch_dog -{ - qtimer qnexus ; /* when running qnexus */ - struct thread* thread; /* when running threads */ - void* anon ; -}; - -extern union vty_watch_dog vty_watch_dog ; - -extern struct thread_master* vty_master ; - -extern unsigned long vty_timeout_val ; - -extern bool vty_config ; - -extern bool no_password_check ; -extern const bool restricted_mode_default ; -extern bool restricted_mode ; - -char *vty_accesslist_name ; -char *vty_ipv6_accesslist_name ; - -extern qpn_nexus vty_cli_nexus ; -extern qpn_nexus vty_cmd_nexus ; - -/*============================================================================== * Functions in vty.c -- used in any of the family */ - -extern int uty_command(struct vty *vty, const char *buf) ; -extern int uty_auth (struct vty *vty, const char *buf, enum cli_do cli_do) ; -extern int vty_cmd_exit(struct vty* vty) ; -extern int vty_cmd_end(struct vty* vty) ; -extern int uty_stop_input(struct vty *vty) ; -extern int uty_end_config (struct vty *vty) ; -extern int uty_down_level (struct vty *vty) ; +extern enum cmd_return_code uty_command(struct vty *vty) ; +extern enum cmd_return_code uty_auth (struct vty *vty, const char *buf, + enum cli_do cli_do) ; +extern enum cmd_return_code vty_cmd_exit(struct vty* vty) ; +extern enum cmd_return_code vty_cmd_end(struct vty* vty) ; +extern enum cmd_return_code uty_cmd_close(struct vty *vty, const char* reason) ; +extern enum cmd_return_code uty_stop_input(struct vty *vty) ; +extern enum cmd_return_code uty_end_config (struct vty *vty) ; +extern enum cmd_return_code uty_down_level (struct vty *vty) ; extern bool vty_config_lock (struct vty *, enum node_type node); extern void vty_config_unlock (struct vty *, enum node_type node); extern void uty_config_unlock (struct vty *vty, enum node_type node) ; /*============================================================================== - * Functions in vty_cli + * Functions in vty_cli -- used outside the immediate vty family */ -extern void -vty_queued_result(struct vty* vty, int ret, int action); - -extern void -uty_set_host_name(const char* name) ; +extern void vty_queued_result(struct vty* vty, enum cmd_return_code ret); +extern void uty_set_host_name(const char* name) ; /*============================================================================== - * Functions in vty_io - * - * Send a fixed-size message to all vty terminal monitors; this should be - * an async-signal-safe function. + * Functions in vty_io -- used outside the immediate vty family */ +extern void vty_open_config_write(struct vty* vty, int fd) ; +extern int vty_close_config_write(struct vty*) ; + extern void vty_log_fixed (const char *buf, size_t len); extern void uty_log (struct logline* ll, struct zlog *zl, int priority, const char *format, va_list va); +/*============================================================================== + * Functions in command.c + */ +extern void cmd_post_command(struct vty* vty, int ret) ; + #endif /* _ZEBRA_UTY_H */ |