summaryrefslogtreecommitdiffstats
path: root/lib/uty.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/uty.h')
-rw-r--r--lib/uty.h154
1 files changed, 94 insertions, 60 deletions
diff --git a/lib/uty.h b/lib/uty.h
index 80a7cae3..d1a8b584 100644
--- a/lib/uty.h
+++ b/lib/uty.h
@@ -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 */